Налагаемые требования целостности, коды ошибок — различия между версиями

Материал из ANT-Inform documentation
Перейти к: навигация, поиск
(Initial, auto import)
 
(2302. Не найден Договор)
 
(не показаны 124 промежуточные версии 4 участников)
Строка 1: Строка 1:
 +
<div style="float: right;">__TOC__</div>
 +
 
Следует обратить внимание, что запросы, приведенные в данном разделе, приводятся в информативных целях, для удобного поиска проблем импорта данных.
 
Следует обратить внимание, что запросы, приведенные в данном разделе, приводятся в информативных целях, для удобного поиска проблем импорта данных.
  
Строка 7: Строка 9:
 
Приведенные запросы, если явно не указано обратного, для каждого приведенного ограничения отбирают записи, не соответствующие ему. То есть в идеале, при отсутствии некорректных данных, каждый из запросов должен возвращать пустой результат.
 
Приведенные запросы, если явно не указано обратного, для каждого приведенного ограничения отбирают записи, не соответствующие ему. То есть в идеале, при отсутствии некорректных данных, каждый из запросов должен возвращать пустой результат.
  
== Код 100. Территории (Регионы) ==
+
{{anchor|registyLinkPresent}}
#
+
{{ ambox | type = warning | text = Обратите пожалуйста внимание на тот факт что данные запросы опираются на [[Faq registry active|активность связей в регистрах, и если они ведутся в соответствующем текущей действительности состоянии]], количество ошибочных строк, возвращаемых некоторыми из запросов, будет больше чем в [[отчёт]]е [[ИМУС]] при фактической загрузке. Мы рекомендуем исправлять все ошибки (исходя из факта что это ошибочная ситуация). Однако обязательным является исправление тех ситуаций, что указаны явно в [[отчёт]]е. }}
## Все имена должны быть уникальными
+
 
 +
{{anchor|dateSliceWarn}}
 +
{| class="mw-collapsible mw-collapsed wikitable"
 +
! [[File:Merge-arrows.svg|50px|link=|alt=]] Рекомендуем во всех запросах уточнять '''СрезПоследних()''' конкретной датой!
 +
|-
 +
| Т.к. забираются в основном [[Общий порядок загрузки данных#Общий порядок загрузки данных из АИС РГ|текущие данные]], это ведёт к тому что в большинстве случаев будут использоваться информационные регистры, вместо прямого доступа к справочникам, и в частности, повсеместно используется '''СрезПоследних()'''. Хотя запросы 1С позволяют использовать срез без явного указания даты, это чревато, особенно в случаях использования вложенных запросов к другим регистрам. <u>В таких случаях результаты с указанием даты и без неё могут отличаться!</u> Нередко это ведёт к достаточно странным результатам на первый взгляд. Таким образом, мы настоятельно рекомендуем во все запросы добавлять дату, на момент проверки. То есть заменять например:
 
<source lang="1C">
 
<source lang="1C">
SELECT
+
РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 +
</source>
 +
на
 +
<source lang="1C">
 +
РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate)
 +
</source>
 +
если вы планируете задавать дату из формы 1С, или:
 +
<source lang="1C">
 +
РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(DateTime(2015, 3, 30))
 +
</source>
 +
если хотите указать её явно в запросе (дата разумеется должна быть скорректирована).
 +
Для краткости, в тексте далее в запросах не будем добавлять.
 +
|}
 +
 
 +
<div style="clear: both"></div>
 +
 
 +
{{anchor|code100}}
 +
== Код 100. Территории (Регионы) ==
 +
{{anchor|code101}}
 +
=== 101. Все имена должны быть уникальными ===
 +
SELECT
 
     Наименование
 
     Наименование
FROM
+
FROM
 
     Справочник.Территории
 
     Справочник.Территории
WHERE
+
WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
GROUP BY
+
GROUP BY
 
     Наименование
 
     Наименование
HAVING
+
HAVING
 
     '''COUNT(Наименование) > 1'''
 
     '''COUNT(Наименование) > 1'''
</source>
 
  
#
+
<small>Требование не проверяется автоматически.</small>
## Имена не могут быть пустыми
+
  
 +
{{anchor|code102}}
 +
=== 102. Имена не могут быть пустыми ===
 
  SELECT
 
  SELECT
 
     Наименование
 
     Наименование
Строка 34: Строка 61:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
== Код 200. Районы ==
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
#
+
## Каждый район должен быть привязан к одной и только одной территории.
+
  
 +
{{anchor|code200}}
 +
== Код 200. Районы ==
 +
{{anchor|code201}}
 +
=== 201. Каждый район должен быть привязан к одной и только одной территории ===
 
  SELECT
 
  SELECT
 
     Ссылка,
 
     Ссылка,
Строка 45: Строка 74:
 
     Справочник.Районы
 
     Справочник.Районы
 
  WHERE
 
  WHERE
     '''ПометкаУдаления = false'''
+
     <b>ПометкаУдаления = false
     '''AND ('''
+
     AND (
         '''Владелец.Ссылка IS NULL'''
+
         Владелец.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Владелец.Ссылка NOT IN ('''
+
         Владелец.Ссылка NOT IN (
             '''SELECT'''
+
             SELECT
                 '''Ссылка'''
+
                 Ссылка
             '''FROM'''
+
             FROM
                 '''Справочник.Территории'''
+
                 Справочник.Территории
             '''WHERE'''
+
             WHERE
                 '''ПометкаУдаления = false'''
+
                 ПометкаУдаления = false
         ''')'''
+
         )
     ''')'''
+
     )</b>
 +
 
 +
<small>Требование проверяется автоматически только на присутствие родителя, но не на множественные привязки.</small>
  
#
+
{{anchor|code201_1}}
## Все имена должны быть уникальны в пределах территории (региона).
+
=== 201_1. Мета-регион не замаплен в ИМУС во внешних системах  ===
 +
Необходимо замапить объекты в разделе Субъект РФ
  
 +
{{anchor|code202}}
 +
=== 202. Все имена должны быть уникальны в пределах территории (региона) ===
 
  SELECT
 
  SELECT
 
     Наименование,
 
     Наименование,
Строка 74: Строка 108:
 
     '''COUNT(*) > 1'''
 
     '''COUNT(*) > 1'''
  
#
+
<small>Требование не проверяется автоматически.</small>
## Имена не могут быть пустыми.
+
  
 +
{{anchor|code203}}
 +
=== 203. Имена не могут быть пустыми ===
 
  SELECT
 
  SELECT
 
     Наименование,
 
     Наименование,
Строка 86: Строка 121:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
== Код 300. Справочник ОтраслиГазпрома ==
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
#
+
## Все группы должны иметь уникальные имена.
+
  
 +
{{anchor|code300}}
 +
== Код 300. Справочник ОтраслиГазпрома ==
 +
{{anchor|code301}}
 +
=== 301. Все группы должны иметь уникальные имена ===
 
  SELECT
 
  SELECT
 
     Наименование
 
     Наименование
Строка 102: Строка 139:
 
     '''COUNT(Наименование) > 1'''
 
     '''COUNT(Наименование) > 1'''
  
#
+
<small>Требование не проверяется автоматически.</small>
## Отрасль обязательно должна принадлежать одной и только одной группе.
+
  
 +
{{anchor|code302}}
 +
=== 302. Отрасль обязательно должна принадлежать одной и только одной группе ===
 
  SELECT
 
  SELECT
 
     Ссылка,
 
     Ссылка,
Строка 113: Строка 151:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
     '''AND ('''
+
     <b>AND (
         '''Группа.Ссылка IS NULL'''
+
         Группа.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Ссылка IN ('''
+
         Ссылка IN (
             '''SELECT'''
+
             SELECT
                 '''Ссылка'''
+
                 Ссылка
             '''FROM'''
+
             FROM
                 '''Справочник.ОтраслиГазпрома'''
+
                 Справочник.ОтраслиГазпрома
             '''WHERE'''
+
             WHERE
                 '''ПометкаУдаления = false'''
+
                 ПометкаУдаления = false
             '''GROUP BY'''
+
             GROUP BY
                 '''Ссылка'''
+
                 Ссылка
             '''HAVING COUNT(*) > 1'''
+
             HAVING COUNT(*) > 1
         ''')'''
+
         )</b>
  
#
+
<small>Требование не проверяется автоматически.</small>
## Пустые имена не допускаются.
+
  
 +
{{anchor|code303}}
 +
 +
=== 303. Пустые имена не допускаются ===
 
  SELECT
 
  SELECT
 
     Наименование
 
     Наименование
Строка 137: Строка 177:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
     '''AND (Группа = ЗНАЧЕНИЕ(Справочник.ОтраслиГазпрома.ПустаяСсылка) OR Группа = Ссылка)'''
+
     <b>AND (Группа = ЗНАЧЕНИЕ(Справочник.ОтраслиГазпрома.ПустаяСсылка) OR Группа = Ссылка)
     '''AND "" = ISNULL(Наименование, "")'''
+
     AND "" = ISNULL(Наименование, "")</b>
  
== Код 400. Потребители ==
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
'''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей''', '''Справочник.ДоговорыГазовые.''' В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate),''' если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, чем в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев.
+
  
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ и могут быть исправлены по желанию компании.
+
{{anchor|code400}}
 +
== Код 400. Потребители ==
 +
'''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей''', '''Справочник.ДоговорыГазовые'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate)''', если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, чем в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте об ошибках импорта]], но представлены, чтобы оставаться универсальными для обоих случаев.
  
## У каждого потребителя должна быть проставлена не удалённая отрасль.
+
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]]. Остальные ошибки, являясь ошибками по сути, не так важны для [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] и могут быть исправлены по желанию компании.
  
 +
{{anchor|code401}}
 +
=== 401. У каждого потребителя должна быть проставлена не удалённая отрасль ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     obj,
 
     obj,
Строка 165: Строка 208:
 
     FROM
 
     FROM
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
 
     UNION
 
     UNION
 
 
     SELECT
 
     SELECT
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
Строка 185: Строка 226:
 
  ORDER BY parent
 
  ORDER BY parent
  
#
+
{{anchor|code402}}
## У каждого потребителя должна быть проставлена Территория (регион).
+
=== 402. У каждого потребителя должна быть проставлена Территория (регион) ===
 
+
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     obj,
 
     obj,
Строка 208: Строка 248:
 
     FROM
 
     FROM
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
 
     UNION
 
     UNION
 
 
     SELECT
 
     SELECT
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
Строка 228: Строка 266:
 
  ORDER BY parent
 
  ORDER BY parent
  
#
+
{{anchor|code403}}
## Имя не может быть пустым.
+
=== 403. Имя не может быть пустым ===
 
+
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     obj,
 
     obj,
Строка 251: Строка 288:
 
     FROM
 
     FROM
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
+
     UNION ALL
     UNION
+
 
+
 
     SELECT
 
     SELECT
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
Строка 271: Строка 306:
 
  ORDER BY parent
 
  ORDER BY parent
  
#
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
## Не должно быть дублей (как минимум по ИНН).
+
  
 +
{{anchor|code404}}
 +
=== 404. Не должно быть дублей (как минимум по ИНН) ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Выборка.obj,
 
     Выборка.obj,
Строка 289: Строка 325:
 
     FROM
 
     FROM
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
         Справочник.ДоговорыГазовые as ДоговорыГазовые
 
 
     UNION
 
     UNION
 
 
     SELECT
 
     SELECT
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
Строка 307: Строка 341:
 
  ГДЕ
 
  ГДЕ
 
     Выборка.obj IS NOT NULL
 
     Выборка.obj IS NOT NULL
  '''GROUP BY'''
+
  <b>GROUP BY
     '''Выборка.obj, name, inn, industry, parent, region, deleted'''
+
     Выборка.obj, name, inn, industry, parent, region, deleted
  '''HAVING COUNT(*) > 1'''
+
  HAVING COUNT(*) > 1</b>
 +
 
 +
<small>Фактически речь идёт об уникальности по ссылке, ИНН выбран как важный уникальный атрибут. Автоматической проверки не делается.</small>
 +
 
 +
{{anchor|code405}}
 +
=== 405. У потребителя должен быть правильно проставлен родитель (или плательщик) ===
  
#
+
Причём он должен быть корректно проставлен в справочниках <tt>Справочник.ДоговорыГазовые</tt> и <tt>Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей</tt>.
## У потребителя должен быть правильно проставлен родитель (или плательщик). Причём он должен быть корректно проставлен в справочниках '''Справочник.ДоговорыГазовые''' и '''Справочник. Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей'''.
+
  
Объекты, которые изменяли своих родителей, переходили в подчинении от одного к другому, можно выбрать следующим запросом (внимание, не является ошибкой, стоит только обратить внимание и проверить, чтобы была верной текущая принадлежность потребителей):
+
[[Faq_registry_active|Проблема актуальности в регистрах]] для потребителей с точки зрения одновременно нескольких плательщиков (владельцев <tt>договоров газовых</tt>) может быть проиллюстрирована следующим запросом (внимание, не всё являются ошибкой, стоит только обратить внимание и проверить, чтобы была верной текущая принадлежность потребителей):
  
 
  SELECT DISTINCT
 
  SELECT DISTINCT
Строка 337: Строка 375:
 
     GROUP BY
 
     GROUP BY
 
         ДоговорыГазовые.Владелец.Ссылка
 
         ДоговорыГазовые.Владелец.Ссылка
 
+
     UNION ALL
     UNION
+
 
+
 
     SELECT
 
     SELECT
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка,
 
         РеестрКонечныхПотребителей.Контрагент.Ссылка,
Строка 358: Строка 394:
 
  WHERE
 
  WHERE
 
     Выборка.obj IS NOT NULL AND Выборка.deleted = false
 
     Выборка.obj IS NOT NULL AND Выборка.deleted = false
     '''AND Выборка.obj IN('''
+
     <b>AND Выборка.obj IN(
         '''SELECT DISTINCT'''
+
         SELECT DISTINCT
             '''Выборка.obj'''
+
             Выборка.obj
         '''FROM'''
+
         FROM
             '''('''
+
             (
             '''SELECT'''
+
             SELECT
                 '''ДоговорыГазовые.Владелец.Ссылка as obj,'''
+
                 ДоговорыГазовые.Владелец.Ссылка as obj,
                 '''ДоговорыГазовые.Владелец.Наименование as name,'''
+
                 ДоговорыГазовые.Владелец.Наименование as name,
                 '''ДоговорыГазовые.Владелец.ИНН as inn,'''
+
                 ДоговорыГазовые.Владелец.ИНН as inn,
                 '''ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,'''
+
                 ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
                 '''"" as parent,'''
+
                 "" as parent,
                 '''ДоговорыГазовые.Владелец.Территория.Ссылка as region,'''
+
                 ДоговорыГазовые.Владелец.Территория.Ссылка as region,
                 '''ДоговорыГазовые.Владелец.ПометкаУдаления as deleted'''
+
                 ДоговорыГазовые.Владелец.ПометкаУдаления as deleted
             '''FROM'''
+
             FROM
                 '''Справочник.ДоговорыГазовые as ДоговорыГазовые'''
+
                 Справочник.ДоговорыГазовые as ДоговорыГазовые
             '''GROUP BY'''
+
             GROUP BY
                 '''ДоговорыГазовые.Владелец.Ссылка'''
+
                 ДоговорыГазовые.Владелец.Ссылка
 
+
             UNION ALL
             '''UNION'''
+
             SELECT
 
+
                 РеестрКонечныхПотребителей.Контрагент.Ссылка,
             '''SELECT'''
+
                 РеестрКонечныхПотребителей.Контрагент.Наименование,
                 '''РеестрКонечныхПотребителей.Контрагент.Ссылка,'''
+
                 РеестрКонечныхПотребителей.Контрагент.ИНН,
                 '''РеестрКонечныхПотребителей.Контрагент.Наименование,'''
+
                 РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка,
                 '''РеестрКонечныхПотребителей.Контрагент.ИНН,'''
+
                 РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка,
                 '''РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка,'''
+
                 РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка,
                 '''РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка,'''
+
                 РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
                 '''РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка,'''
+
             FROM
                 '''РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted'''
+
                 Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
             '''FROM'''
+
             WHERE
                 '''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей'''
+
                 <nowiki>РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец</nowiki>
             '''WHERE'''
+
             GROUP BY
                 '''<nowiki>РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец</nowiki>'''
+
                 РеестрКонечныхПотребителей.Контрагент.Ссылка,
             '''GROUP BY'''
+
                 РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка
                 '''РеестрКонечныхПотребителей.Контрагент.Ссылка,'''
+
         ) as Выборка
                 '''РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка'''
+
     WHERE
         ''') as Выборка'''
+
         Выборка.obj IS NOT NULL AND Выборка.deleted = false
     '''WHERE'''
+
     GROUP BY
         '''Выборка.obj IS NOT NULL AND Выборка.deleted = false'''
+
         obj
     '''GROUP BY'''
+
     HAVING COUNT(*) > 1
         '''obj'''
+
     )</b>
     '''HAVING COUNT(*) > 1'''
+
     ''')'''
+
 
  ORDER BY obj
 
  ORDER BY obj
  
'''Для выборки текущей принадлежности для загрузки в ИУС-ГАЗ в учёт берётся договор и используется следующий алгоритм''':
+
{{anchor|code406}}
  
# Приоритет по статусу, выбирается с наибольшим:
+
=== 406. Если у потребителя есть родитель, он должен быть корректно загруженным ===
## «Расторгнут» — 0
+
То есть соответствовать всем требованиям данного кода (40х). Тут нет запроса потому что его не бможет быть - требование рекурсивное для удовлетворения ссылок. Сначала загружаются родители - затем потомки.
## «Завершенный» — 1
+
## «Плановый» — 2
+
## «Предварительный» — 3
+
## Остальные — 10
+
# Затем идет сортировка по дате окончания договора — берется тот, у кого она больше.
+
# В последнюю очередь по дате начала договора (например, если дата окончания не указана).
+
  
Используются всегда все 3 признака. Таким образом, расторгнутый договор будет проигнорирован, даже если дата окончания его больше, чем у действующего. Если есть 2 договора с одинаковым статусом (например, действующие основной и дополнительное соглашение, или ошибочно 2) — возьмется тот, у которого дата окончания больше. Если в этом случае даты окончания пустые или равны — тот, у которого дата начала больше.
+
{{anchor|code500}}
 
+
#
+
## Если у потребителя есть родитель, он должен быть корректно загруженным в ИУС-ГАЗ. То есть соответствовать всем требованиям данного кода (40х).
+
  
 
== Код 500. Газораспределительные организации (ГРО) ==
 
== Код 500. Газораспределительные организации (ГРО) ==
 
Берутся из справочника '''Справочник.Контрагенты''', те объекты, у которых '''ПризнакТранспортировщика''' = true.
 
Берутся из справочника '''Справочник.Контрагенты''', те объекты, у которых '''ПризнакТранспортировщика''' = true.
  
## Обязательно должны быть проставлены регионы у всех.
+
{{anchor|code501}}
 
+
=== 501. Обязательно должны быть проставлены регионы у всех ===
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 433: Строка 458:
 
     '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)'''
 
     '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)'''
  
#
+
{{anchor|code502}}
## Не может быть дублей
+
=== 502. Не может быть дублей ===
 
+
 
  SELECT
 
  SELECT
 
     Наименование,
 
     Наименование,
Строка 448: Строка 472:
 
     '''COUNT(*) > 1'''
 
     '''COUNT(*) > 1'''
  
#
+
<small>Требование не проверяется автоматически.</small>
## Имена должны быть не пустыми
+
  
 +
{{anchor|code503}}
 +
=== 503. Имена должны быть не пустыми ===
 
  SELECT
 
  SELECT
 
     Ссылка,
 
     Ссылка,
Строка 461: Строка 486:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
 +
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
 +
 +
{{anchor|code600}}
 
== Код 600. Газораспределительные станции (ГРС) ==
 
== Код 600. Газораспределительные станции (ГРС) ==
 
'''Справочник.ГРС'''.
 
'''Справочник.ГРС'''.
  
## Должны быть проставлены '''Территории'''.
+
{{anchor|code601}}
 
+
=== 601. Должны быть проставлены Территории (Субъекты РФ) ===
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 478: Строка 506:
 
     '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)'''
 
     '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)'''
  
#
+
{{anchor|code602}}
## Имена не могут быть пустыми.
+
=== 602. Имена не могут быть пустыми ===
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 493: Строка 520:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
#
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
## Обязательно должны быть заполнен трансгаз ('''Справочник.ГРС.Трансгаз''').
+
  
 +
{{anchor|code603}}
 +
=== 603. Обязательно должен быть заполнен трансгаз ===
 +
'''Справочник.ГРС.Трансгаз'''
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 508: Строка 537:
 
     '''AND Трансгаз.Ссылка IS NULL'''
 
     '''AND Трансгаз.Ссылка IS NULL'''
  
#
+
{{anchor|code604}}
## Желательно заполнение также кодов СДУ ('''Справочник.ГРС.КодСДУ''') для самих объектов (не обязательное требование).
+
=== 604. Желательно заполнение также кодов СДУ ===
 
+
'''Справочник.ГРС.КодСДУ'''.
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 523: Строка 552:
 
     '''AND "" = ISNULL(КодСДУ, "")'''
 
     '''AND "" = ISNULL(КодСДУ, "")'''
  
 +
<small>Требование не проверяется автоматически. Ошибок не выводится. В случае отсутствия или не числового значения устанавливается значение 0.</small>
 +
 +
{{anchor|code605}}
 +
=== 605. Выдается ошибка, если ЛПУ (УМГ) в ГРС не заполнено. ===
 +
Стандартная обработка для необязательного поля, на которое есть проверка. Аналогично работает 401 (не заполнена Отрасль в Потребителе).
 +
 +
{{anchor|code605_1}}
 +
=== 605_1. Нет связи ЛПУ в "Объекты внешней системы". ===
 +
 +
{{anchor|code606}}
 +
=== 606. Пустое короткое имя для ГРС недопустимо. ===
 +
 +
{{anchor|code700}}
 
== Код 700. Выходы ГРС ==
 
== Код 700. Выходы ГРС ==
 
'''Справочник.ВыходыГРС.'''
 
'''Справочник.ВыходыГРС.'''
  
## Обязательна привязка к ГРО.
+
{{anchor|code701}}
 
+
=== 701. Обязательна привязка к ГРО ===
 
  SELECT
 
  SELECT
 
     Ссылка,
 
     Ссылка,
Строка 543: Строка 585:
 
     '''AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)'''
 
     '''AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)'''
  
Следует обратить внимание, что некоторые РГК предлагают не заполнять этот справочник, а взять для выходов ГРС данные из точки подключения или площадки. Однако выяснилось, что такой подход не верный — ГРО выхода ГРС и ГРО точки подключения не обязательно одинаковы (трубопровод может быть поделен на несколько частей, и разные части могут принадлежать разным ГРО).
+
Следует обратить внимание, что некоторые [[Перечень сокращений и обозначений#РГК|РГК]] предлагают не заполнять этот справочник, а взять для выходов [[Перечень сокращений и обозначений#ГРС|ГРС]] данные из точки подключения или площадки. Однако выяснилось, что такой подход не верный — [[Перечень сокращений и обозначений#ГРО|ГРО]] выхода [[Перечень сокращений и обозначений#ГРС|ГРС]] и [[Перечень сокращений и обозначений#ГРО|ГРО]] точки подключения не обязательно одинаковы (трубопровод может быть поделен на несколько частей, и разные части могут принадлежать разным [[Перечень сокращений и обозначений#ГРО|ГРО]]).
  
#
+
{{anchor|code702}}
## Обязательна привязка к ГРС.
+
=== 702. Обязательна привязка к ГРС ===
## Наименование не может быть пустым.
+
Теоретически обратного и быть не может.
 +
SELECT
 +
    Ссылка,
 +
    ПометкаУдаления,
 +
    Владелец
 +
FROM
 +
    Справочник.ВыходыГРС
 +
WHERE
 +
    ПометкаУдаления = false
 +
    '''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)'''
  
 +
{{anchor|code703}}
 +
=== 703. Наименование не может быть пустым ===
 
  SELECT
 
  SELECT
 
     Ссылка,
 
     Ссылка,
Строка 562: Строка 615:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
     '''AND "" <nowiki>= </nowiki>ISNULL(Наименование, "")'''
+
     '''AND "" <nowiki>=</nowiki> ISNULL(Наименование, "")'''
  
== Код 800. Площадки ==
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
Забираются как срез из регистра '''РегистрСведений.ПлощадкиПоДоговору'''.
+
  
## Необходима привязка к потребителю:
+
{{anchor|code800}}
 +
== Код 800. Площадки ==
 +
Забираются как срез на текущую дату из регистра '''РегистрСведений.ПлощадкиПоДоговору'''.
  
 +
{{anchor|code801}}
 +
=== 801. Необходима привязка к потребителю ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Площадка.Ссылка as obj,
 
     Площадка.Ссылка as obj,
Строка 577: Строка 633:
 
  WHERE
 
  WHERE
 
     ЕстьСвязь AND Площадка.ПометкаУдаления = false
 
     ЕстьСвязь AND Площадка.ПометкаУдаления = false
     '''AND ('''
+
     <b>AND (
         '''Площадка.Ссылка IS NULL'''
+
         Площадка.Ссылка IS NULL
        ''' OR'''
+
          OR
         '''Потребитель.Ссылка IS NULL'''
+
         Потребитель.Ссылка IS NULL
        ''' OR'''
+
          OR
         '''Потребитель.ПометкаУдаления = true'''
+
         Потребитель.ПометкаУдаления = true
        ''' OR'''
+
          OR
         '''Потребитель NOT IN('''
+
         Потребитель NOT IN(
             '''SELECT DISTINCT'''
+
             SELECT DISTINCT
                 '''consumer'''
+
                 consumer
             '''FROM'''
+
             FROM
                 '''('''
+
                 (
                 '''SELECT'''
+
                 SELECT
                     '''Владелец.Ссылка as consumer'''
+
                     Владелец.Ссылка as consumer
                 '''FROM'''
+
                 FROM
                     '''Справочник.ДоговорыГазовые'''
+
                     Справочник.ДоговорыГазовые
                 '''WHERE'''
+
                 WHERE
                     '''Владелец.ПометкаУдаления = false'''
+
                     Владелец.ПометкаУдаления = false
 +
                UNION ALL
 +
                SELECT
 +
                    Контрагент.Ссылка
 +
                FROM
 +
                    Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей
 +
                WHERE
 +
                    <nowiki>Контрагент <> Ссылка.Владелец</nowiki>
 +
                    AND Контрагент.ПометкаУдаления = false
 +
                ) as consumers
 +
        )
 +
    )</b>
  
                '''UNION'''
+
{{anchor|code802}}
 +
=== 802. удалён (пункт оставлен чтобы сохранить нумерацию) ===
  
                '''SELECT'''
+
{{anchor|code803}}
                    '''Контрагент.Ссылка'''
+
=== 803. Обязательна привязка к Территории (Субъекту РФ) ===
                '''FROM'''
+
1) Если площадка не генерируется, Субъект РФ берется из Справочник.ПлощадкиОборудования Территория
                    '''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей'''
+
SELECT DISTINCT
                '''WHERE'''
+
  Площадка.Ссылка,
                    '''<nowiki>Контрагент <> Ссылка.Владелец</nowiki>'''
+
  Площадка.Территория
                    '''AND Контрагент.ПометкаУдаления = false'''
+
FROM
                ''') as consumers'''
+
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
        ''')'''
+
WHERE
    ''')'''
+
    ЕстьСвязь AND Площадка.ПометкаУдаления = false
 
+
    '''AND (Площадка.Территория.Ссылка IS NULL OR Площадка.Территория.ПометкаУдаления = true)'''
#
+
## '''удалён''' (пункт оставлен чтобы сохранить нумерацию).
+
## Обязательна привязка к Территории.
+
  
 +
2) Если Площадка генерируется, то Субъект РФ берется из Справочник.Контрагенты Территория
 
  SELECT DISTINCT
 
  SELECT DISTINCT
    Площадка.Ссылка
+
  Площадка.Ссылка,
 +
  Потребитель.Ссылка,
 +
  Потребитель.Территория
 
  FROM
 
  FROM
 
     РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 
     РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 
  WHERE
 
  WHERE
 
     ЕстьСвязь AND Площадка.ПометкаУдаления = false
 
     ЕстьСвязь AND Площадка.ПометкаУдаления = false
     '''AND (Площадка.Территория.Ссылка IS NULL OR Площадка.Территория.ПометкаУдаления = true)'''
+
     '''AND (Потребитель.Территория.Ссылка IS NULL OR Потребитель.Территория.ПометкаУдаления = true)'''
  
#
+
{{anchor|code804}}
## Имя площадки не может быть пустым.
+
  
 +
=== 804. Имя площадки не может быть пустым ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Площадка.Ссылка as obj,
 
     Площадка.Ссылка as obj,
Строка 633: Строка 701:
 
     '''AND "" = ISNULL(Площадка.Наименование, "")'''
 
     '''AND "" = ISNULL(Площадка.Наименование, "")'''
  
#
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
## Если указан район, то он должен быть действительным ([#2.3.2.Код 200. Районы|outline см. правила для районов]) и загруженным в ИУС ГАЗ. Заполненность района можно проверить следующим запросом:
+
  
 +
{{anchor|code805}}
 +
=== 805. Заполнены районы ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Площадка.Ссылка
 
     Площадка.Ссылка
Строка 644: Строка 713:
 
     '''AND (Площадка.Адрес.Район.Ссылка IS NULL OR Площадка.Адрес.Район.ПометкаУдаления = true)'''
 
     '''AND (Площадка.Адрес.Район.Ссылка IS NULL OR Площадка.Адрес.Район.ПометкаУдаления = true)'''
  
#
+
{{anchor|code806}}
## Дубли не допускаются (игнорируются последующие).В некоторых РГК столкнулись с большой проблемой в учете, связанной с изменением учёта несколько лет назад. Выяснилось, что не смотря на то, что в регистре указано '''.ЕстьСвязь,''' связи может не быть фактически, или одна площадка может принадлежать одновременно нескольким потребителям. Такая ситуация не верна.<br/> Такие случаи могут быть выбраны запросом:
+
=== 806. Дубли не допускаются (игнорируются последующие) ===
 +
 
 +
[[Faq_registry_active|Проблема актуальности в регистрах]] для потребителей с точки зрения одновременно нескольких плательщиков (владельцев <tt>договоров газовых</tt>) может быть проиллюстрирована следующим запросом:
  
 
  SELECT
 
  SELECT
Строка 660: Строка 731:
 
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 
         WHERE
 
         WHERE
             ЕстьСвязь   AND Площадка.ПометкаУдаления = false
+
             ЕстьСвязь AND Площадка.ПометкаУдаления = false
 
             AND NOT (ISNULL(Основание.ДатаИзменения, DateTime(0001, 1, 1)) > &CurrentDate) // Change in the future
 
             AND NOT (ISNULL(Основание.ДатаИзменения, DateTime(0001, 1, 1)) > &CurrentDate) // Change in the future
 
         GROUP BY
 
         GROUP BY
Строка 676: Строка 747:
 
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 
         WHERE
 
         WHERE
             ЕстьСвязь   AND Площадка.ПометкаУдаления = false
+
             ЕстьСвязь AND Площадка.ПометкаУдаления = false
 
             AND NOT (ISNULL(Основание.ДатаИзменения, DateTime(0001, 1, 1)) > &CurrentDate) // Change in the future
 
             AND NOT (ISNULL(Основание.ДатаИзменения, DateTime(0001, 1, 1)) > &CurrentDate) // Change in the future
 
         GROUP BY
 
         GROUP BY
Строка 684: Строка 755:
 
     ON (gco1.obj = gco2.obj)
 
     ON (gco1.obj = gco2.obj)
 
  WHERE
 
  WHERE
     <nowiki>gco1.consumer <> gco2.consumer</nowiki>
+
     '''<nowiki>gco1.consumer <> gco2.consumer</nowiki>'''
  
Параметр CurrentDate предполагается текущей датой.
+
{{anchor|code900}}
 
+
Дополнительно к комментарию в запросе необходимо отметить, что т.к. может быть еще и привязки одной площадки к потребителям с действующими договорами, и, более того, одинаковыми датами окончания (что не удивительно т.к. даты окончания часто 31 декабря для подавляющего большинства договоров).
+
 
+
Т.к. обычно таких проблем достаточно много, и разрыв связи бывает нежелателен по каким-то причинам, на данный момент реализован алгоритм предпочтения одной связи другой через договор. Он в точности [#Contract_prefere соответствует алгоритму для потребителей].
+
  
 
== Код 900. Точки подключения ==
 
== Код 900. Точки подключения ==
=== Вариант определения точек подключения ===
+
[[Перечень сокращений и обозначений#ТП|ТП]] могут забираться из подключений или площадок.
Точки подключения в разных компаниях ведутся по разному. За это отвечают константы '''ВариантОпределенияТочкиПодключения''' и '''ВариантОпределенияТерриторииИРайона<ref name="ftn8">'''Вероятно где-то значения можно посмотреть в настройках конфигурации. Самый простой способ получить их это выполнить запрос в консоли запросов: «SELECT ВариантОпределенияТочкиПодключения, ВариантОпределенияТерриторииИРайона FROM Константы»'''</ref>. Если значение константы '''ВариантОпределенияТочкиПодключения''' в конфигурации равно 0, то данные ведутся, и соответственно экспортируются из подключений (в обоих случаях используется '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних<ref name="ftn9">'''Имеется также специальный режим для вырожденных случаев когда ведутся только подключения, но нету площадок. В таком случае данные выбираются напрямую из справочника, а связки с договорами скажем из планов. Такой режим настраивается только вручную.'''</ref>), в обратном случае, когда 1, рассматривается значение '''
+
ВариантОпределенияТерриторииИРайона'''. При значениях 2 и 4 (брать из «Подключения» и «ГРС Подключения» соответственно) также используются подключения, во всех остальных случаях используются площадки оборудования.
+
 
+
В терминах 1С-кода, подключения будут использоваться когда будет истинным следующее выражение, во всех остальных случаях точки подключения системы ИУС-ГАЗ будут взяты из площадок оборудования АИС РГ:
+
 
+
    0 = Константы.ВариантОпределенияТочкиПодключения.Получить() // Direct - used
+
    OR
+
    (
+
        1 = Константы.ВариантОпределенияТочкиПодключения.Получить()
+
        AND
+
        (
+
            2 = Константы.ВариантОпределенияТерриторииИРайона.Получить() //«из подключения»
+
            OR
+
            4 = Константы.ВариантОпределенияТерриторииИРайона.Получить() //«из ГРС подключения»
+
        )
+
    )
+
 
+
Чтобы быстро определить для вашей системы, можно выполнить следующий запрос:
+
 
+
SELECT
+
    CASE
+
        WHEN
+
            0 = ВариантОпределенияТочкиПодключения // Direct - used
+
            OR
+
            (
+
                1 = ВариантОпределенияТочкиПодключения
+
                AND
+
                (
+
                    2 = ВариантОпределенияТерриторииИРайона //«из подключения»
+
                    OR
+
                    4 = ВариантОпределенияТерриторииИРайона //«из ГРС подключения»
+
                )
+
            )
+
        THEN "Используются подключения"
+
        ELSE "Используются площадки оборудования"
+
    END as PCtype
+
FROM Constants
+
 
+
Далее не будем возвращаться к этому столь подробно, выбираются нужные запросы согласно ведущемуся в компанииучету.
+
 
+
#
+
## Обязательна привязка к ГРО.
+
 
+
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по подключениям:
+
  
 +
{{anchor|code901}}
 +
=== 901. Обязательна привязка к ГРО ===
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Подключение.Ссылка as obj,
 
     Подключение.Ссылка as obj,
Строка 744: Строка 770:
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРС.Ссылка as gds,
 
     Подключение.ГРС.Ссылка as gds,
     Подключение.ВыходГРС.Ссылка as outGds,      
+
     Подключение.ВыходГРС.Ссылка as outGds,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.РайонПодключения.Ссылка as subReg
 
     Подключение.РайонПодключения.Ссылка as subReg
Строка 753: Строка 779:
 
     '''AND (Подключение.ГРО.Ссылка IS NULL OR Подключение.ГРО.ПометкаУдаления = true)'''
 
     '''AND (Подключение.ГРО.Ссылка IS NULL OR Подключение.ГРО.ПометкаУдаления = true)'''
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по площадкам оборудования:
+
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по площадкам оборудования:
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 770: Строка 795:
 
     '''AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)'''
 
     '''AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)'''
  
#
+
{{anchor|code902}}
## Обязательна привязка к ГРС.
+
=== 902. Не найден потребитель ТП ===
 +
Означает, что потребитель не найден в ИМУС. Следовательно необходимо исправить ошибки, связанные в потребителями.  
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по подключениям:
 
  
SELECT DISTINCT
+
{{anchor|code903}}
    Подключение.Ссылка as obj,
+
    Подключение.Наименование as name,
+
    Подключение.ГРО.Ссылка as gdo,
+
    Подключение.ГРС.Ссылка as gds,
+
    Подключение.ВыходГРС.Ссылка as outGds,       
+
    Подключение.Территория.Ссылка as region,
+
    Подключение.РайонПодключения.Ссылка as subReg
+
FROM
+
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
+
WHERE
+
    ЕстьСвязь AND Подключение.ПометкаУдаления = false
+
    '''AND (Подключение.ГРС.Ссылка IS NULL OR Подключение.ГРС.ПометкаУдаления = true)'''
+
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по площадкам оборудования:
+
=== 903. Обязательна привязка к ВыходуГРС ===
 
+
Для того чтобы [[ТП]] в [[ИМУС]] могла быть привязана к Выходу ГРС у него должен быть обязательно [[канал]]. В большинстве случаев, [[Команды адаптера#GasDistribOut|структура поставки]] [[Конфигурирование адаптера на стороне ИМУС#ais.ws.generateFromOutDown|не забирается]] из [[АИС РГ]], а автоматически генерируется от Выходов ГРС. В случае если [[Конфигурирование адаптера на стороне ИМУС#ais.ws.generateFromOutDown|настроено]] забирать структуру поставки ([[УУГ]], [[корректор]], [[канал]]) создание недостающих элементов возлагается на представителя компании.
SELECT
+
    Ссылка as obj,
+
    Наименование as name,
+
    ГРО as gdo,
+
    ГРС as gds,
+
    ВыходГРС as outGds,
+
    Территория as region,
+
    Адрес.Район as subReg,
+
    КодСДУ
+
FROM
+
    Справочник.ПлощадкиОборудования as pc
+
WHERE
+
    ПометкаУдаления = false
+
    '''AND (ГРС.Ссылка IS NULL OR ГРС.ПометкаУдаления = true)'''
+
 
+
#
+
## Обязательна привязка к '''ВыходуГРС'''.
+
 
+
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по подключениям (теоретически не может быть не заполненным):
+
  
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Подключение.Ссылка as obj,
 
     Подключение.Ссылка as obj,
Строка 816: Строка 811:
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРС.Ссылка as gds,
 
     Подключение.ГРС.Ссылка as gds,
     Подключение.ВыходГРС.Ссылка as outGds,      
+
     Подключение.ВыходГРС.Ссылка as outGds,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.РайонПодключения.Ссылка as subReg
 
     Подключение.РайонПодключения.Ссылка as subReg
Строка 825: Строка 820:
 
     '''AND (Подключение.ВыходГРС.Ссылка IS NULL OR Подключение.ВыходГРС.ПометкаУдаления = true)'''
 
     '''AND (Подключение.ВыходГРС.Ссылка IS NULL OR Подключение.ВыходГРС.ПометкаУдаления = true)'''
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по площадкам оборудования:
+
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по площадкам оборудования:
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 842: Строка 836:
 
     '''AND (ВыходГРС.Ссылка IS NULL OR ВыходГРС.ПометкаУдаления = true)'''
 
     '''AND (ВыходГРС.Ссылка IS NULL OR ВыходГРС.ПометкаУдаления = true)'''
  
#
+
{{anchor|code903_1}}
## Желательна привязка к Территории.
+
==== 903_1. У выхода ГРС канал для привязки должен быть однозначным ====
 +
В обратной [[#code903|ошибке 903]] ситуации, если [[канал]]ов больше одного (например создавались чтобы отразить структуру ГТО) выдаётся это предупреждение, и '''привязка происходит к одному любому (недетерминированно)'''. Если необходимо конкретные случаи исправить (чтобы канал по которому идут данные Трансгаза и потребление в [[ИМУС]] совпадали) это можно сделать в [[ИМУС]] вручную.  
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по подключениям:
+
Данная ошибка свидетельствует о неоднозначности определения канала по выходу [[ГРС]] для [[ТП]]. Ошибка появляется при первичном импорте [[ТП]] если выход имеет больше 1 [[канал]]а, проставляется любой из них. Соответственно при последующих импортах будет выдаваться [[#code903_2|903_2]].
  
 +
{{anchor|code903_2}}
 +
==== 903_2. У выхода ГРС канал для привязки не однозначен, но он проставлен для ТП<ref>С [[Version 19|версии адаптера 19.5.pre3.]] [https://jira.spb.ant-inform.ru/browse/ESB-1360 ESB-1360]<sub>1.9.0.7</sub></ref> ====
 +
Данная ошибка свидетельствует о неоднозначности определения канала по выходу [[ГРС]] для [[ТП]] как в случае [[#code_903_1|903_1]], но канал уже проставлен (вручную или любой по предыдущему импорту).
 +
 +
{{anchor|code904}}
 +
=== 904. Желательна привязка к Территории ===
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Подключение.Ссылка as obj,
 
     Подключение.Ссылка as obj,
Строка 852: Строка 854:
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРС.Ссылка as gds,
 
     Подключение.ГРС.Ссылка as gds,
     Подключение.ВыходГРС.Ссылка as outGds,      
+
     Подключение.ВыходГРС.Ссылка as outGds,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.РайонПодключения.Ссылка as subReg
 
     Подключение.РайонПодключения.Ссылка as subReg
Строка 861: Строка 863:
 
     '''AND (Подключение.Территория.Ссылка IS NULL OR Подключение.Территория.ПометкаУдаления = true)'''
 
     '''AND (Подключение.Территория.Ссылка IS NULL OR Подключение.Территория.ПометкаУдаления = true)'''
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по площадкам оборудования:
+
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по площадкам оборудования:
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 875: Строка 876:
 
     Справочник.ПлощадкиОборудования as pc
 
     Справочник.ПлощадкиОборудования as pc
 
  WHERE
 
  WHERE
     ПометкаУдаления = false AND Подключение.ПометкаУдаления = false
+
     ПометкаУдаления = false
 
     '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)'''
 
     '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)'''
  
#
+
{{anchor|code905}}
## Заполнено наименование:
+
=== 905. Заполнено наименование ===
 
+
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по подключениям:
+
 
+
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Подключение.Ссылка as obj,
 
     Подключение.Ссылка as obj,
Строка 888: Строка 887:
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРО.Ссылка as gdo,
 
     Подключение.ГРС.Ссылка as gds,
 
     Подключение.ГРС.Ссылка as gds,
     Подключение.ВыходГРС.Ссылка as outGds,      
+
     Подключение.ВыходГРС.Ссылка as outGds,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.Территория.Ссылка as region,
 
     Подключение.РайонПодключения.Ссылка as subReg
 
     Подключение.РайонПодключения.Ссылка as subReg
Строка 897: Строка 896:
 
     '''AND "" = ISNULL(Подключение.Наименование, "")'''
 
     '''AND "" = ISNULL(Подключение.Наименование, "")'''
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учёта] по площадкам оборудования:
+
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по площадкам оборудования:
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 911: Строка 909:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
 +
    '''AND "" = ISNULL(Наименование, "")'''
  
'''AND "" = ISNULL(Наименование, "")'''
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
 
+
#
+
## Для того чтобы ТП в ИУС-ГАЗ могла быть привязана к Выходу ГРС, у него должен быть обязательно единственный канал. В большинстве случаев структура поставки не забирается из АИС РГ и автоматически генерируется от Выходов ГРС, но в случае, если настроено забирать структуру поставки (узел, корректор, канал), создание недостающих элементов возлагается на представителя РГК.
+
  
 +
{{anchor|code1000}}
 
== Код 1000. Узлы учёта газа ==
 
== Код 1000. Узлы учёта газа ==
=== Для узлов потребления: ===
+
=== Узлы потребления ===
'''РегистрСведений.АктивныеУзлыУчета.СрезПоследних'''.
+
'''РегистрСведений.УзлыУчетаПлощадок.СрезПоследних'''.
 
+
## Обязательна привязка к активной, не удалённой площадке.
+
  
 +
{{anchor|code1001}}
 +
==== 1001. Обязательна привязка к активной, не удалённой площадке ====
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     УзелУчета as uug,
 
     УзелУчета as uug,
Строка 930: Строка 927:
 
  WHERE
 
  WHERE
 
     ЕстьСвязь
 
     ЕстьСвязь
     '''AND ('''
+
     <b>AND(
         '''ПлощадкаОборудования.Ссылка IS NULL'''
+
         ПлощадкаОборудования.Ссылка IS NULL
         '''OR'''
+
         OR
         '''ПлощадкаОборудования NOT IN('''
+
         ПлощадкаОборудования NOT IN(
             '''SELECT DISTINCT'''
+
             SELECT DISTINCT
                 '''Площадка'''
+
                 Площадка
             '''FROM'''
+
             FROM
                 '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''
+
                 РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
             '''WHERE'''
+
             WHERE
                 '''ЕстьСвязь AND Площадка.ПометкаУдаления = false'''
+
                 ЕстьСвязь AND Площадка.ПометкаУдаления = false
         ''')'''
+
         )
     ''')'''
+
     )</b>
 
+
#
+
## Дубли не допускаются, другими словами, узел может принадлежать только одной площадке:
+
  
 +
{{anchor|code1002}}
 +
==== 1002. Дубли не допускаются, другими словами, узел может принадлежать только одной площадке ====
 
  SELECT uug1.obj, uug1.gco as gco1, uug2.gco as gco2
 
  SELECT uug1.obj, uug1.gco as gco1, uug2.gco as gco2
 
  FROM (
 
  FROM (
Строка 967: Строка 963:
 
     '''<nowiki>ON (uug1.obj = uug2.obj AND uug1.gco <> uug2.gco)</nowiki>'''
 
     '''<nowiki>ON (uug1.obj = uug2.obj AND uug1.gco <> uug2.gco)</nowiki>'''
  
#  
+
<small>Ошибка не будет появляться в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]], вместо неё будет использоваться общая [[Налагаемые требования целостности, коды ошибок#code5003|5003]] с указанием дублирующихся элементов.</small>
## Обязательно наличие не пустого имени.
+
  
 +
{{anchor|code1003}}
 +
==== 1003. Обязательно наличие не пустого имени ====
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     УзелУчета as obj,
 
     УзелУчета as obj,
Строка 979: Строка 976:
 
     '''AND "" = ISNULL(УзелУчета.Наименование, "")'''
 
     '''AND "" = ISNULL(УзелУчета.Наименование, "")'''
  
=== Код 1020. Для узлов поставки<ref name="ftn10">Внимание, мы не забираем площадки на ГРС или на ВыходеГРС, вместо этого в ИМУС УУГ поставки будет висеть на ВыходеГРС.</ref>: ===
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
#
+
## Необходимо указание ВыходаГРС для площадки подключения узла:
+
  
 +
=== Узлы поставки ===
 +
{{ mbox | text = Внимание, мы не забираем площадки на [[Перечень сокращений и обозначений#ГРС|ГРС]] или на Выходе [[Перечень сокращений и обозначений#ГРС|ГРС]], вместо этого в [[Перечень сокращений и обозначений#ИМУС|ИМУС]] [[Перечень сокращений и обозначений#УУГ|УУГ]] поставки будет висеть на Выходе [[Перечень сокращений и обозначений#ГРС|ГРС]] }}
 +
 +
{{anchor|code1021}}
 +
==== 1020. Необходимо указание Выхода ГРС для площадки подключения узла ====
 +
{{anchor|code1020}}
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     uug.УзелУчета as obj,
 
     uug.УзелУчета as obj,
Строка 991: Строка 992:
 
  WHERE
 
  WHERE
 
     ЕстьСвязь AND ISNULL(ПлощадкаОборудования.ПризнакНаГРС, false)
 
     ЕстьСвязь AND ISNULL(ПлощадкаОборудования.ПризнакНаГРС, false)
     '''AND ('''
+
     <b>AND (
         '''out.Ссылка IS NULL'''
+
         out.Ссылка IS NULL
         '''OR'''
+
         OR
         '''out.ПометкаУдаления'''
+
         out.ПометкаУдаления
     ''')'''
+
     )</b>
 +
 
 +
{{anchor|code1100}}
  
 
== Код 1100. Модели корректоров (вычислителей) ==
 
== Код 1100. Модели корректоров (вычислителей) ==
#
 
## Имена не могут быть пустыми
 
  
 +
{{anchor|code1101}}
 +
=== 1101. Имена не могут быть пустыми ===
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1010: Строка 1013:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
#
+
<small>Требование не проверяется автоматически.</small>
## Имена должны быть уникальными
+
  
 +
{{anchor|code1102}}
 +
=== 1102. Имена должны быть уникальными ===
 
  SELECT
 
  SELECT
 
     Наименование as name
 
     Наименование as name
Строка 1024: Строка 1028:
 
     '''COUNT(*) > 1'''
 
     '''COUNT(*) > 1'''
  
 +
<small>Требование не проверяется автоматически.</small>
 +
 +
{{anchor|code1200}}
 
== Код 1200. Корректоры (вычислители) ==
 
== Код 1200. Корректоры (вычислители) ==
 
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних'''.
 
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних'''.
  
#
+
{{anchor|code1201}}
## Обязательно должна быть привязка к модели корректора ('''.Оборудование.Модель''').
+
=== 1201. Обязательно должна быть указана модель ===
 +
'''.Оборудование.Модель'''.
  
 
  SELECT
 
  SELECT
Строка 1044: Строка 1052:
 
     '''AND (Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true)'''
 
     '''AND (Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true)'''
  
#
+
{{anchor|code1202}}
## Установленные и активные обязательно должны иметь ссылку на не удалённый и активный узел учёта:
+
=== 1202. Установленные и активные обязательно должны иметь ссылку на не удалённый и активный узел учёта ===
 
+
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     equip.Оборудование.Ссылка as obj,
 
     equip.Оборудование.Ссылка as obj,
Строка 1056: Строка 1063:
 
     AND Оборудование.ПометкаУдаления = false
 
     AND Оборудование.ПометкаУдаления = false
 
     AND equip.Установлено AND equip.Активность
 
     AND equip.Установлено AND equip.Активность
     '''AND ('''
+
     <b>AND (
         '''УзелУчета.Ссылка IS NULL'''
+
         УзелУчета.Ссылка IS NULL
         '''OR equip.УзелУчета NOT IN( // Active'''
+
         OR equip.УзелУчета NOT IN( // Active
             '''SELECT УзелУчета'''
+
             SELECT УзелУчета
             '''FROM РегистрСведений.АктивныеУзлыУчета.СрезПоследних'''
+
             FROM РегистрСведений.АктивныеУзлыУчета.СрезПоследних
             '''WHERE АктивностьУзлаУчета AND УзелУчета.ПометкаУдаления = false'''
+
             WHERE АктивностьУзлаУчета AND УзелУчета.ПометкаУдаления = false
         ''')'''
+
         )
     ''')'''
+
     )</b>
 
+
#
+
## Наименование не может быть пустым.
+
  
 +
{{anchor|code1203}}
 +
=== 1203. Наименование не может быть пустым ===
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
Строка 1082: Строка 1088:
 
     '''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Модель.Наименование, "")'''
 
     '''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Модель.Наименование, "")'''
  
#
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
## Если есть информация о его серийном номере, она должна быть указана.
+
  
 +
{{anchor|code1204}}
 +
=== 1204. Если есть информация о его серийном номере, она должна быть указана ===
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
Строка 1099: Строка 1106:
 
     '''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")'''
 
     '''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")'''
  
#
+
<small>Лишь рекомендация, не проверяется автоматически.</small>
## Дубли не допускаются. Или, иными словами, вычислитель может быть привязан к единственному узлу:
+
  
 +
{{anchor|code1205}}
 +
=== 1205. Дубли не допускаются. Иными словами, вычислитель может быть привязан к единственному узлу ===
 
  SELECT equips1.obj, equips1.uug as uug1, equips2.uug as uug2
 
  SELECT equips1.obj, equips1.uug as uug1, equips2.uug as uug2
 
  FROM (
 
  FROM (
Строка 1108: Строка 1116:
 
             Оборудование.Модель.Ссылка as model,
 
             Оборудование.Модель.Ссылка as model,
 
             Оборудование.Наименование as name,
 
             Оборудование.Наименование as name,
 
 
             ПлощадкаОборудования as gco,
 
             ПлощадкаОборудования as gco,
 
             УзелУчета.Ссылка as uug
 
             УзелУчета.Ссылка as uug
Строка 1122: Строка 1129:
 
             Оборудование.Модель.Ссылка as model,
 
             Оборудование.Модель.Ссылка as model,
 
             Оборудование.Наименование as name,
 
             Оборудование.Наименование as name,
 
 
             ПлощадкаОборудования as gco,
 
             ПлощадкаОборудования as gco,
 
             УзелУчета.Ссылка as uug
 
             УзелУчета.Ссылка as uug
Строка 1133: Строка 1139:
 
     '''<nowiki>ON (equips1.obj = equips2.obj AND equips1.uug <> equips2.uug)</nowiki>'''
 
     '''<nowiki>ON (equips1.obj = equips2.obj AND equips1.uug <> equips2.uug)</nowiki>'''
  
#  
+
<small>Ошибка не будет появляться в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]], вместо неё будет использоваться общая [[Налагаемые требования целостности, коды ошибок#code5003|5003]] с указанием дублирующихся элементов.</small>
## Если указаны даты поверки и следующей поверки, то они должны быть корректными.
+
  
 +
{{anchor|code1206}}
 +
=== 1206. Если указаны даты поверки и следующей поверки, то они должны быть корректными ===
 
  SELECT
 
  SELECT
 
     equips.Оборудование as obj,
 
     equips.Оборудование as obj,
Строка 1141: Строка 1148:
 
     equips.Оборудование.Наименование as name,
 
     equips.Оборудование.Наименование as name,
 
     equips.Оборудование.ЗаводскойНомер as fabricNumber,
 
     equips.Оборудование.ЗаводскойНомер as fabricNumber,
 
 
     equips.ПлощадкаОборудования as gco,
 
     equips.ПлощадкаОборудования as gco,
 
     equips.УзелУчета.Ссылка as uug,
 
     equips.УзелУчета.Ссылка as uug,
 
 
     ISNULL(dateCheck.Значение, DateTime(0001, 1, 1)) as dateCheck,
 
     ISNULL(dateCheck.Значение, DateTime(0001, 1, 1)) as dateCheck,
 
     ISNULL(dateNextCheck.Значение, DateTime(0001, 1, 1)) as dateNextCheck
 
     ISNULL(dateNextCheck.Значение, DateTime(0001, 1, 1)) as dateNextCheck
Строка 1156: Строка 1161:
 
     Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
 
     Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
 
     AND Оборудование.ПометкаУдаления = false
 
     AND Оборудование.ПометкаУдаления = false
     '''AND ('''
+
     <b>AND (
         '''<nowiki>ISNULL(dateCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
         <nowiki>ISNULL(dateCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>
         '''OR'''
+
         OR
         '''<nowiki>ISNULL(dateNextCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
         <nowiki>ISNULL(dateNextCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>
     ''')'''
+
     )</b>
  
 +
{{anchor|code1300}}
 
== Код 1300. Каналы измерения ==
 
== Код 1300. Каналы измерения ==
 
'''Справочник.КаналыВычислителей'''.
 
'''Справочник.КаналыВычислителей'''.
  
## Должны быть привязаны к вычислителю (теоретически обратного и не может быть)
+
{{anchor|code1301}}
 
+
=== 1301. Должны быть привязаны к вычислителю ===
 +
Теоретически обратного и быть не может. Данный запрос выводит только те записи, где отсутствует владелец, либо владелец помечен на удаление.
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1177: Строка 1184:
 
     '''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)'''
 
     '''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)'''
  
#
+
{{anchor|code1302}}
## Канал должен иметься для каждого вычислителя, как минимум один.<br/> Следующий запрос покажет корректора без каналов:
+
=== 1302. Рекомендуется вести для каждого вычислителя ===
 +
Для [[Перечень сокращений и обозначений#ИМУС|ИМУС]] он нужен как минимум один.
 +
 
 +
Вместо этого возможно использовать [[Общий_порядок_загрузки_данных#Генерация структуры вниз|генерацию объектов]] в [[Перечень сокращений и обозначений#ИМУС|ИМУС]].
 +
 
 +
Следующий запрос покажет корректоры без каналов:
  
 
  SELECT
 
  SELECT
Строка 1188: Строка 1200:
 
  WHERE
 
  WHERE
 
     Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
 
     Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
     '''AND Оборудование.Ссылка NOT IN('''
+
     <b>AND Оборудование.Ссылка NOT IN(
         '''SELECT'''
+
         SELECT
             '''Владелец.Ссылка'''
+
             Владелец.Ссылка
         '''FROM'''
+
         FROM
             '''Справочник.КаналыВычислителей'''
+
             Справочник.КаналыВычислителей
     ''')'''
+
     )</b>
  
#
+
<small>Лишь рекомендация, не проверяется автоматически.</small>
## Канал должен иметь не пустое наименование:
+
  
 +
{{anchor|code1303}}
 +
=== 1303. Наименование не может быть пустым ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка as channel,
 
     Ссылка as channel,
Строка 1209: Строка 1222:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
#
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
## Канал должен иметь уникальное наименование в пределах корректора:
+
 
 +
{{anchor|code1304}}
 +
=== 1304. Канал должен иметь уникальное наименование в пределах корректора ===
 +
Другими словами, не допускается повторение имени канала на одном корректоре. К сожалению частая ситуация, потому что они именуются в основном 1, 2 и т.д..
 +
Данный запрос проверяет наименование между активными каналами одного корректора.
  
 
  SELECT DISTINCT
 
  SELECT DISTINCT
Строка 1241: Строка 1258:
 
     '''<nowiki>ON(channels1.equip = channels2.equip AND channels1.name = channels2.name AND channels1.channel <> channels2.channel)</nowiki>'''
 
     '''<nowiki>ON(channels1.equip = channels2.equip AND channels1.name = channels2.name AND channels1.channel <> channels2.channel)</nowiki>'''
  
 +
<small>Ограничение схемы БД. Всегда фатально.</small>
 +
 +
{{anchor|code1350}}
 
== Код 1350. Классы газопотребляющего оборудования (ГПО) ==
 
== Код 1350. Классы газопотребляющего оборудования (ГПО) ==
 
'''Справочник.ТипыГазопотребляющегоОборудования'''.
 
'''Справочник.ТипыГазопотребляющегоОборудования'''.
  
#
+
{{anchor|code1351}}
## Необходимы не пустые названия
+
=== 1351. Необходимы не пустые названия ===
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1267: Строка 1286:
 
     '''AND "" = ISNULL(Родитель.Наименование, "")'''
 
     '''AND "" = ISNULL(Родитель.Наименование, "")'''
  
 +
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
 +
 +
{{anchor|code1400}}
 
== Код 1400. Типы газопотребляющего оборудования (ГПО) ==
 
== Код 1400. Типы газопотребляющего оборудования (ГПО) ==
 
'''Справочник.ТипыГазопотребляющегоОборудования'''.
 
'''Справочник.ТипыГазопотребляющегоОборудования'''.
  
#
+
{{anchor|code1401}}
## Необходима привязка к классам ГПО ('''Справочник.МоделиГазопотребляющегоОборудования.Ссылка''').
+
=== 1401. Необходима привязка к классам ГПО ===
 
+
'''Справочник.МоделиГазопотребляющегоОборудования.Ссылка'''.
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1283: Строка 1305:
 
     '''AND (ТипОборудования.Ссылка IS NULL OR ТипОборудования.Ссылка.ПометкаУдаления = true)'''
 
     '''AND (ТипОборудования.Ссылка IS NULL OR ТипОборудования.Ссылка.ПометкаУдаления = true)'''
  
# <nowiki>Для версии конфигурации <= 1.1.7 </nowiki>'''Справочник.ТипыГазопотребляющегоОборудования.Родитель.Ссылка''':
+
# <nowiki>Для версии конфигурации <= 1.1.7 </nowiki> - '''Справочник.ТипыГазопотребляющегоОборудования.Родитель.Ссылка''':
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1296: Строка 1317:
 
     '''AND (Родитель.Ссылка IS NULL OR Родитель.Ссылка.ПометкаУдаления = true)'''
 
     '''AND (Родитель.Ссылка IS NULL OR Родитель.Ссылка.ПометкаУдаления = true)'''
  
#
+
{{anchor|code1402}}
## Имена не могут быть пустыми.
+
=== 1402. Имена не могут быть пустыми ===
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1309: Строка 1329:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
# <nowiki>Для версии конфигурации <= 1.1.7:</nowiki>
+
<nowiki>Для версии конфигурации <= 1.1.7:</nowiki>:
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1322: Строка 1341:
 
     '''AND "" = ISNULL(Наименование)'''
 
     '''AND "" = ISNULL(Наименование)'''
  
 +
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
 +
 +
{{anchor|code1500}}
 
== Код 1500. ГПО ==
 
== Код 1500. ГПО ==
 
'''РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних'''.
 
'''РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних'''.
  
#
+
{{anchor|code1501}}
## Необходимы привязки к Типам ГПО:
+
=== 1501. Необходимы привязки к Типам ГПО ===
 
+
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
Строка 1335: Строка 1356:
 
  WHERE
 
  WHERE
 
     Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
 
     Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
     '''AND ('''
+
     <b>AND (
         '''Оборудование.Модель.Ссылка IS NULL'''
+
         Оборудование.Модель.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Оборудование.Модель.ПометкаУдаления = true'''
+
         Оборудование.Модель.ПометкаУдаления = true
     ''')'''
+
     )</b>
 
+
# <nowiki>Для версии конфигурации <= 1.1.7:</nowiki>
+
  
 +
<nowiki>Для версии конфигурации <= 1.1.7:</nowiki>
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
Строка 1351: Строка 1371:
 
  WHERE
 
  WHERE
 
     Установлено AND Оборудование.ПометкаУдаления = falseAND Оборудование.Ссылка IS NOT NULL
 
     Установлено AND Оборудование.ПометкаУдаления = falseAND Оборудование.Ссылка IS NOT NULL
     '''AND ('''
+
     <b>AND (
         '''Оборудование.ТипГазопотребляющегоОборудования.Ссылка IS NULL'''
+
         Оборудование.ТипГазопотребляющегоОборудования.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Оборудование.ТипГазопотребляющегоОборудования.ПометкаУдаления = true'''
+
         Оборудование.ТипГазопотребляющегоОборудования.ПометкаУдаления = true
     ''')'''
+
     )</b>
 
+
#
+
## Необходимы корректные ссылки на Площадки.
+
  
 +
{{anchor|code1502}}
 +
=== 1502. Необходимы корректные ссылки на Площадки ===
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
Строка 1367: Строка 1386:
 
  WHERE
 
  WHERE
 
     Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
 
     Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
     '''AND ('''
+
     <b>AND (
         '''ПлощадкаОборудования.Ссылка IS NULL'''
+
         ПлощадкаОборудования.Ссылка IS NULL
         '''OR ПлощадкаОборудования.ПометкаУдаления = true'''
+
         OR ПлощадкаОборудования.ПометкаУдаления = true
         '''OR ПлощадкаОборудования.Ссылка NOT IN(// Active'''
+
         OR ПлощадкаОборудования.Ссылка NOT IN(// Active
             '''SELECT DISTINCT'''
+
             SELECT DISTINCT
                 '''Площадка.Ссылка'''
+
                 Площадка.Ссылка
             '''FROM'''
+
             FROM
                 '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних as gco'''
+
                 РегистрСведений.ПлощадкиПоДоговору.СрезПоследних as gco
             '''WHERE'''
+
             WHERE
                 '''gco.ЕстьСвязь AND Площадка.ПометкаУдаления = false'''
+
                 gco.ЕстьСвязь AND Площадка.ПометкаУдаления = false
         ''')'''
+
         )
     ''')'''
+
     )</b>
 
+
#
+
## Не допускаются пустые имена.
+
  
 +
{{anchor|code1503}}
 +
=== 1503. Не допускаются пустые имена ===
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
Строка 1392: Строка 1410:
 
     '''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Наименование, "")'''
 
     '''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Наименование, "")'''
  
#
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
## Должен быть указан максимальный расход (0 в крайнем случае).
+
  
 +
{{anchor|code1504}}
 +
=== 1504. Должен быть указан максимальный расход (0 в крайнем случае) ===
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Наименование as name,
 
     Оборудование.Наименование as name,
     ISNULL(Оборудование.РасходГазаМаксимальный, 0) as maxConsumption
+
     Оборудование.РасходГазаМаксимальный as maxConsumption
 
  FROM
 
  FROM
 
     РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
 
     РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
Строка 1405: Строка 1424:
 
     '''AND ISNULL(Оборудование.РасходГазаМаксимальный, 0) = 0'''
 
     '''AND ISNULL(Оборудование.РасходГазаМаксимальный, 0) = 0'''
  
#
+
<small>Требование не проверяется автоматически.</small>
## Одно и то же оборудование может быть установлено только в одном месте, то есть дубли не допускаются:
+
  
 +
{{anchor|code1505}}
 +
=== 1505. Дубли не допускаются ===
 +
То есть один экземпляр оборудования может быть установлено только в одном месте.
 
  SELECT
 
  SELECT
 
     obj, COUNT(*) as count
 
     obj, COUNT(*) as count
Строка 1418: Строка 1439:
 
         Установлено AND Оборудование.ПометкаУдаления = false
 
         Установлено AND Оборудование.ПометкаУдаления = false
 
  ) as gce
 
  ) as gce
  '''GROUP BY'''
+
  <b>GROUP BY
     '''obj'''
+
     obj
  '''HAVING'''
+
  HAVING
     '''COUNT(*) > 1'''
+
    COUNT(*) > 1</b>
 +
 
 +
<small>Ошибка не будет появляться в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]], вместо неё будет использоваться общая [[Налагаемые требования целостности, коды ошибок#code5003|5003]] с указанием дублирующихся элементов.</small>
 +
 
 +
=== 1506. Развешивание по каналам ===
 +
{{anchor|code1506}}
 +
'''РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних'''.
 +
 
 +
{{ ambox | text = К большому сожалению, для [[ГПО]] в [[АИС]] нет возможности указать [[канал]] [[корректор|вычислителя]] ([[канал|измерительный трубопровод]]), как это возможно для [[ИО]]. В [[ИМУС]] он требуется. Соответственно предпринимается попытка привязать устройство от [[УУГ|узла]]. Она может быть выполнена успешно только в случае наличия у данного [[УУГ]] единственного [[канал]]а. Все остальные случаи развешивания устройств по [[канал]]ам необходимо будет выполнить в [[ИУС-ГАЗ]] вручную }}
 +
 
 +
==== 1506_1. Узел не найден, или не имеет канала ====
 +
{{anchor|code1506_1}}
 +
[[Канал]] не указан, и не завершить операцию от [[УУГ|узла]] потому что он не найден в [[ИМУС]] или не имеет ни одного [[канал]]а (вероятно стоит [[Общий порядок загрузки данных#Генерация структуры вниз|сгенерировать структуру вниз]] и проверить ошибки загрузки [[УУГ]]).
 +
 
 +
==== 1506_2. Канал не указан, развешивание по узлу, узел имеет несколько каналов => неоднозначность ====
 +
{{anchor|code1506_2}}
 +
[[Канал]] не указан, и не завершить операцию от [[УУГ|узла]] потому что он имеет более одного [[канал]]а - имеется неоднозначность.
 +
 
 +
Речь об [[УУГ|узлах]] в [[ИМУС]], запрос не предполагается.
 +
 
 +
==== 1506_3. Канал не указан, развешивание по площадке, площадка не имеет каналов ====
 +
{{anchor|code1506_3}}
 +
Подобно [[#code1506_2|1506_2]], но [[ConfigImus#ais.ws.gceChannelBy|включена привязка канала ГПО от площадки]]. Автоматическая привязка к [[канал]]у потребления возможна только если у неё имеется [[канал]] в [[ИМУС]] и он единственный.
 +
 
 +
Речь о площадках и [[канал]]ах [[ИМУС]], запрос не предполагается.
 +
 
 +
==== 1506_4. Канал не указан, развешивание по площадке, площадка имеет несколько каналов => неоднозначность ====
 +
{{anchor|code1506_4}}
 +
[[ConfigImus#ais.ws.gceChannelBy|Включена привязка канала ГПО от площадки]].
 +
Автоматическая привязка к [[канал]]у потребления возможна только если у площадки [[ИМУС]], соответствующей той, на которой он установлен в [[АИС]] имеется <b>единственный</b> [[канал]].
 +
 
 +
Речь о площадках и [[канал]]ах [[ИМУС]], запрос не предполагается.
 +
 
 +
== Код 1560. Типы измерительного оборудования ==
 +
 
 +
{{anchor|code1561}}
 +
=== 1561. Необходимо заполнение у моделей ===
 +
SELECT DISTINCT
 +
    Оборудование.Ссылка as obj,
 +
    ISNULL(Оборудование.Тип.Ссылка, ISNULL(Оборудование.ТипДатчика.Ссылка, Оборудование.Модель.Тип.Ссылка)) as type
 +
FROM
 +
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 +
WHERE
 +
    Установлено
 +
    AND NOT Оборудование ССЫЛКА Catalog.Вычислители
 +
    AND NOT Оборудование ССЫЛКА Catalog.ИзмерительныеКомплексы
 +
     '''AND ISNULL(Оборудование.Тип.Ссылка, ISNULL(Оборудование.ТипДатчика.Ссылка, Оборудование.Модель.Тип.Ссылка)) IS NULL'''
  
 
== Код 1580. Модели измерительного оборудования ==
 
== Код 1580. Модели измерительного оборудования ==
#
 
## Не может быть пустых имен.
 
  
 +
{{anchor|code1581}}
 +
=== 1581. Не может быть пустых имён ===
 
  SELECT * FROM(
 
  SELECT * FROM(
 
  SELECT DISTINCT
 
  SELECT DISTINCT
Строка 1436: Строка 1503:
 
  FROM
 
  FROM
 
     Справочник.МоделиДатчиков
 
     Справочник.МоделиДатчиков
 
 
  UNION ALL
 
  UNION ALL
 
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка,
 
     Ссылка,
Строка 1447: Строка 1512:
 
  FROM
 
  FROM
 
     Справочник.МоделиИзмерительныхКомплексов
 
     Справочник.МоделиИзмерительныхКомплексов
 
 
  UNION ALL
 
  UNION ALL
 
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка,
 
     Ссылка,
Строка 1458: Строка 1521:
 
  FROM
 
  FROM
 
     Справочник.МоделиПланиметров
 
     Справочник.МоделиПланиметров
 
 
  UNION ALL
 
  UNION ALL
 
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка,
 
     Ссылка,
Строка 1469: Строка 1530:
 
  FROM
 
  FROM
 
     Справочник.МоделиСужающихУстройств
 
     Справочник.МоделиСужающихУстройств
 
 
  UNION ALL
 
  UNION ALL
 
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка,
 
     Ссылка,
Строка 1484: Строка 1543:
 
     deleted = false
 
     deleted = false
 
     '''AND "" = ISNULL(name, "")'''
 
     '''AND "" = ISNULL(name, "")'''
 +
 +
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
 +
 +
{{anchor|code1582}}
 +
=== 1582. Поле "Емкость счетного механизма" заполнено некорректно===
 +
Поле "Емкость счетного механизма" заполнено некорректно
 +
{{anchor|code1600}}
  
 
== Код 1600. Измерительное оборудование ==
 
== Код 1600. Измерительное оборудование ==
 
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних''', данные также должны быть корректны во всех низлежащих справочниках: '''Справочник.Датчики''', '''Справочник.ИзмерительныеКомплексы''', '''Справочник.Планиметры''', '''Справочник.СужающиеУстройства''', '''Справочник.Счетчики'''.
 
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних''', данные также должны быть корректны во всех низлежащих справочниках: '''Справочник.Датчики''', '''Справочник.ИзмерительныеКомплексы''', '''Справочник.Планиметры''', '''Справочник.СужающиеУстройства''', '''Справочник.Счетчики'''.
  
## Необходимы корректные ссылки на Модели.
+
{{anchor|code1601}}
 
+
=== 1601. Необходимы корректные ссылки на Модели ===
SELECT * FROM (
+
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
     Оборудование.Модель.Ссылка as model,
+
     Оборудование.Модель.Ссылка as model
    "Датчики" as type,
+
    УзелУчета.Ссылка as uug,
+
    ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber,
+
    Оборудование.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
  WHERE
 
  WHERE
     Установлено AND Оборудование ССЫЛКА Справочник.Датчики
+
     Установлено AND Оборудование.ПометкаУдаления = false
 
+
    AND (
UNION ALL
+
    Оборудование ССЫЛКА Справочник.Датчики
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Планиметры
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.СужающиеУстройства
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Счетчики
 +
    )
 +
    '''AND ( Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true )'''
  
 +
{{anchor|code1602}}
 +
=== 1602. Необходимы ссылки на активные, не удалённые узлы ===
 
  SELECT
 
  SELECT
     Оборудование.Ссылка,
+
     Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка,
+
     УзелУчета.Ссылка as uug
    "ИзмерительныеКомплексы",
+
     УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
  WHERE
 
  WHERE
     Установлено AND Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
+
     Установлено AND Оборудование.ПометкаУдаления = false
 
+
    AND (
UNION ALL
+
    Оборудование ССЫЛКА Справочник.Датчики
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Планиметры
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.СужающиеУстройства
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Счетчики
 +
    )
 +
    <b>AND (
 +
        УзелУчета.Ссылка IS NULL
 +
        OR УзелУчета.ПометкаУдаления = true
 +
        OR УзелУчета.Ссылка NOT IN(
 +
            SELECT DISTINCT
 +
                УзелУчета.Ссылка as obj
 +
            FROM
 +
                РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
 +
            WHERE
 +
                ЕстьСвязь
 +
        )
 +
    )</b>
  
SELECT
+
{{anchor|code1603}}
    Оборудование.Ссылка,
+
=== 1603. Желательны заводские номера ===
    Оборудование.Модель.Ссылка,
+
    "Планиметры",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Планиметры
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "СужающиеУстройства",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.СужающиеУстройства
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Счетчики",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Счетчики
+
) as gm
+
WHERE
+
    deleted = false
+
    '''AND (model IS NULL OR model.ПометкаУдаления = true)'''
+
 
+
#
+
## Необходимы ссылки на активные, не удаленные УУГи:
+
 
+
SELECT * FROM (
+
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model,
+
     ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber
    "Датчики" as type,
+
    УзелУчета.Ссылка as uug,
+
     ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber,
+
    Оборудование.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
  WHERE
 
  WHERE
     Установлено AND Оборудование ССЫЛКА Справочник.Датчики
+
     Установлено AND Оборудование.ПометкаУдаления = false
 +
    AND (
 +
    Оборудование ССЫЛКА Справочник.Датчики
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Планиметры
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.СужающиеУстройства
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Счетчики
 +
    )
 +
    '''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")'''
  
UNION ALL
+
<small>Лишь рекомендация, не проверяется автоматически.</small>
  
SELECT
+
{{anchor|code1604}}
    Оборудование.Ссылка,
+
=== 1604. Должны быть уникальны ===
    Оборудование.Модель.Ссылка,
+
    "ИзмерительныеКомплексы",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Планиметры",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Планиметры
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "СужающиеУстройства",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.СужающиеУстройства
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Счетчики",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Счетчики
+
) as gm
+
WHERE
+
    '''deleted = false'''
+
    '''AND ('''
+
        '''uug IS NULL'''
+
        '''OR uug.ПометкаУдаления = true'''
+
        '''OR uug NOT IN('''
+
            '''SELECT DISTINCT'''
+
                '''УзелУчета.Ссылка as obj'''
+
            '''FROM'''
+
                '''РегистрСведений.АктивныеУзлыУчета.СрезПоследних'''
+
            '''WHERE'''
+
                '''АктивностьУзлаУчета'''
+
        ''')'''
+
    ''')'''
+
 
+
#
+
## Желательны заводские номера.
+
 
+
SELECT * FROM (
+
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model,
+
     УзелУчета.Ссылка as uug
    "Датчики" as type,
+
     УзелУчета.Ссылка as uug,
+
    ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber,
+
    Оборудование.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
  WHERE
 
  WHERE
     Установлено AND Оборудование ССЫЛКА Справочник.Датчики
+
     Установлено AND Оборудование.ПометкаУдаления = false
 +
    AND(
 +
    Оборудование ССЫЛКА Справочник.Датчики
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Планиметры
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.СужающиеУстройства
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Счетчики
 +
    )
 +
GROUP BY
 +
    Оборудование.Ссылка, УзелУчета.Ссылка
 +
'''HAVING COUNT(*) > 1'''
  
UNION ALL
+
<small>Ошибка не будет появляться в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]], вместо неё будет использоваться общая [[Налагаемые требования целостности, коды ошибок#code5003|5003]] с указанием дублирующихся элементов.</small>
  
SELECT
+
{{anchor|code1605}}
    Оборудование.Ссылка,
+
=== 1605. Желательны даты поверки и следующей поверки ===
    Оборудование.Модель.Ссылка,
+
    "ИзмерительныеКомплексы",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Планиметры",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Планиметры
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "СужающиеУстройства",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.СужающиеУстройства
+
 
+
UNION ALL
+
 
+
SELECT
+
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Счетчики",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Счетчики
+
) as gm
+
WHERE
+
    deleted = false
+
    '''AND "" = fabricNumber'''
+
 
+
#
+
## Должны быть уникальны:
+
 
+
SELECT obj, type, COUNT(*) as count FROM (
+
 
  SELECT
 
  SELECT
 
     Оборудование.Ссылка as obj,
 
     Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model,
+
     ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber
    "Датчики" as type,
+
    УзелУчета.Ссылка as uug,
+
     ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber,
+
    Оборудование.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
     РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 +
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаПоверки") as dateCheck
 +
    ON ( Оборудование.Ссылка = DateCheck.ИзмерительноеОборудование AND NOT dateCheck.Значение ССЫЛКА Перечисление.СостоянияОборудования )
 +
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаСледующейПоверки") as dateNextCheck
 +
    ON ( Оборудование.Ссылка = dateNextCheck.ИзмерительноеОборудование )
 
  WHERE
 
  WHERE
     Установлено AND Оборудование ССЫЛКА Справочник.Датчики
+
     Установлено AND Оборудование.ПометкаУдаления = false
 +
    AND (
 +
    Оборудование ССЫЛКА Справочник.Датчики
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Планиметры
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.СужающиеУстройства
 +
    OR
 +
    Оборудование ССЫЛКА Справочник.Счетчики
 +
    )
 +
    <b>AND(
 +
        ISNULL(dateCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
 +
        OR
 +
        ISNULL(dateNextCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
 +
        OR
 +
        ( ВЫРАЗИТЬ(dateCheck.Значение as Date) IS NULL AND dateCheck.Значение <> "01.01.0001 0:00:00" )
 +
        OR
 +
        ( ВЫРАЗИТЬ(dateNextCheck.Значение as Date) IS NULL AND dateNextCheck.Значение <> "01.01.0001 0:00:00" )
 +
    )</b>
  
UNION ALL
+
<small>Ошибка в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]] будет только в случае указания [[Общий порядок загрузки данных#Данные с некорректными датами|некорректной даты]], но не в случае её отсутствия.</small>
  
SELECT
+
{{anchor|code1606}}
    Оборудование.Ссылка,
+
=== 1606. Рекомендуется указание канала ===
    Оборудование.Модель.Ссылка,
+
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних''', данные также должны быть корректны во всех низлежащих справочниках: '''Датчики''', '''ИзмерительныеКомплексы''', '''Планиметры''', '''СужающиеУстройства''', '''Счётчики'''.
    "ИзмерительныеКомплексы",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
+
  
UNION ALL
+
{{ ambox | text = '''Настоятельно рекомендуется''' для всех приборов (особенно в случае неоднозначности) указывать [[канал]] [[вычислитель|вычислителя]]. Если он не проставлен, будет предпринята попытка привязать измеритель от [[УУГ]]. Она может быть выполнена успешно только в случае наличия у данного [[УУГ|узла]] единственного [[канал]]а. Все остальные случаи развешивания устройств по [[канал]]ам необходимо будет выполнить в [[ИУС-ГАЗ]] вручную }}
  
SELECT
+
Данная ошибка означает что [[канал]] указан в [[АИС]], но не найден в [[ИМУС]].
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Планиметры",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Планиметры
+
  
UNION ALL
+
{{anchor|code1606_1}}
 +
==== 1606_1. Узел не имеет канала ====
 +
[[Канал]] не задан в [[АИС]] или у указанного [[УУГ]] больше 1 [[канал]]а. [[Канал]] не проставлен (null). Нужно выбрать [[канал]] вручную в [[ИМУС]] или [[АИС РГ]] или обеспечить однозначность от [[УУГ]].
  
 +
Следующий запрос покажет [[измерители]] без [[канал]]ов. Обратите внимание, если [[канал]]ы не ведутся, мы не настаиваем на их генерации в [[АИС]], рекомендуем лишь в неоднозначных случаях:
 
  SELECT
 
  SELECT
    Оборудование.Ссылка,
+
    Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка,
+
    УзелУчета.Ссылка as uug,
    "СужающиеУстройства",
+
    ИзмерительныйТрубопровод as channel
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
 
  WHERE
 
  WHERE
    Установлено AND Оборудование ССЫЛКА Справочник.СужающиеУстройства
+
    Установлено AND NOT Оборудование ССЫЛКА Справочник.Вычислители
 +
    '''AND ИзмерительныйТрубопровод.Ссылка IS NULL'''
  
UNION ALL
+
==== 1606_2. Узел имеет несколько каналов, новый измеритель (удалено с адаптера 19.5.pre3<sub>1.9.0.7</sub>) ====
 +
{{anchor|code1606_2}}
 +
Утратил силу с [[Version 19|версии адаптера 19.5.pre3.]] [https://jira.spb.ant-inform.ru/browse/ESB-1360 ESB-1360]<sub>1.9.0.7</sub>.
  
SELECT
+
'''Для предыдущих версий''':
    Оборудование.Ссылка,
+
    Оборудование.Модель.Ссылка,
+
    "Счетчики",
+
    УзелУчета.Ссылка,
+
    ISNULL(Оборудование.ЗаводскойНомер, ""),
+
    Оборудование.ПометкаУдаления as deleted
+
FROM
+
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
WHERE
+
    Установлено AND Оборудование ССЫЛКА Справочник.Счетчики
+
) as gm
+
WHERE
+
    deleted = false
+
'''GROUP BY'''
+
    '''obj, type'''
+
'''HAVING COUNT(*) > 1'''
+
  
#
+
[[Канал]] не указан и у указанного [[УУГ]] больше 1 [[канал]]а. [[Измеритель]] уже был сохранён в [[ИМУС]] ранее, но [[канал]] в нём не проставлен. Нужно выбрать [[канал]] вручную в [[ИМУС]] или [[АИС]], или обеспечить однозначность от [[УУГ|узла]].
## '''Если''' указаны даты поверки и следующей поверки, то они должны быть корректными:
+
  
SELECT
+
Речь об узлах в [[ИМУС]], запрос не предполагается.
    gasMeters.obj,
+
    gasMeters.model,
+
    gasMeters.type,
+
    gasMeters.uug,
+
    gasMeters.fabricNumber,
+
    ISNULL(dateCheck.Значение, DateTime(0001, 1, 1)) as dateCheck,
+
    ISNULL(dateNextCheck.Значение, DateTime(0001, 1, 1)) as dateNextCheck
+
FROM (
+
    SELECT
+
        Оборудование.Ссылка as obj,
+
        Оборудование.Модель.Ссылка as model,
+
        "Датчики" as type,
+
        УзелУчета.Ссылка as uug,
+
        ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber,
+
        Оборудование.ВерхнийПределИзмерений as maxLimit,
+
        Оборудование.НижнийПределИзмерений as minLimit,
+
        Оборудование.ВнешнийКлюч as foreignKey,
+
        Оборудование.Код as code,
+
        Оборудование.ПометкаУдаления as deleted
+
    FROM
+
        РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
    WHERE
+
        Установлено AND Оборудование ССЫЛКА Справочник.Датчики
+
  
    UNION ALL
+
==== 1606_3. Узел имеет несколько каналов, но в измерителе уже он конкретизирован ====
 +
{{anchor|code1606_3}}
 +
[[Канал]] в [[АИС]] не задан в [[АИС]] и у указанного [[УУГ]] больше 1 [[канал]]а. Имеется неоднозначность, но сам [[измеритель]] уже привязан к [[канал]]у. Вероятно был указан в [[ИМУС]] вручную и данная проблема может быть просто проигнорирована.
  
    SELECT
+
{{anchor|code1650}}
        Оборудование.Ссылка,
+
        Оборудование.Модель.Ссылка,
+
        "ИзмерительныеКомплексы",
+
        УзелУчета.Ссылка,
+
        ISNULL(Оборудование.ЗаводскойНомер, ""),
+
        Оборудование.ВерхнийПределИзмерений,
+
        Оборудование.НижнийПределИзмерений,
+
        Оборудование.ВнешнийКлюч,
+
        Оборудование.Код,
+
        Оборудование.ПометкаУдаления as deleted
+
    FROM
+
        РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
    WHERE
+
        Установлено AND Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
+
 
+
    UNION ALL
+
 
+
    SELECT
+
        Оборудование.Ссылка,
+
        Оборудование.Модель.Ссылка,
+
        "Планиметры",
+
        УзелУчета.Ссылка,
+
        ISNULL(Оборудование.ЗаводскойНомер, ""),
+
        Оборудование.ВерхнийПределИзмерений,
+
        Оборудование.НижнийПределИзмерений,
+
        Оборудование.ВнешнийКлюч,
+
        Оборудование.Код,
+
        Оборудование.ПометкаУдаления as deleted
+
    FROM
+
        РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
    WHERE
+
        Установлено AND Оборудование ССЫЛКА Справочник.Планиметры
+
 
+
    UNION ALL
+
 
+
    SELECT
+
        Оборудование.Ссылка,
+
        Оборудование.Модель.Ссылка,
+
        "СужающиеУстройства",
+
        УзелУчета.Ссылка,
+
        ISNULL(Оборудование.ЗаводскойНомер, ""),
+
        Оборудование.ВерхнийПределИзмерений,
+
        Оборудование.НижнийПределИзмерений,
+
        Оборудование.ВнешнийКлюч,
+
        Оборудование.Код,
+
        Оборудование.ПометкаУдаления as deleted
+
    FROM
+
        РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
    WHERE
+
        Установлено AND Оборудование ССЫЛКА Справочник.СужающиеУстройства
+
 
+
    UNION ALL
+
 
+
    SELECT
+
        Оборудование.Ссылка,
+
        Оборудование.Модель.Ссылка,
+
        "Счетчики",
+
        УзелУчета.Ссылка,
+
        ISNULL(Оборудование.ЗаводскойНомер, ""),
+
        Оборудование.ВерхнийПределИзмерений,
+
        Оборудование.НижнийПределИзмерений,
+
        Оборудование.ВнешнийКлюч,
+
        Оборудование.Код,
+
        Оборудование.ПометкаУдаления as deleted
+
    FROM
+
        РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
+
    WHERE
+
        Установлено AND Оборудование ССЫЛКА Справочник.Счетчики
+
    ) as gasMeters
+
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаПоверки") as dateCheck
+
    ON ( gasMeters.obj = DateCheck.ИзмерительноеОборудование AND NOT dateCheck.Значение ССЫЛКА Перечисление.СостоянияОборудования )
+
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаСледующейПоверки") as dateNextCheck
+
    ON ( gasMeters.obj = dateNextCheck.ИзмерительноеОборудование )
+
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "Опломбирован") as sealStatus
+
    ON ( gasMeters.obj = sealStatus.ИзмерительноеОборудование )
+
WHERE
+
    deleted = false
+
    '''AND('''
+
        '''<nowiki>ISNULL(dateCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
        '''OR'''
+
        '''<nowiki>ISNULL(dateNextCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
        '''OR'''
+
        '''('''
+
            '''ВЫРАЗИТЬ(dateCheck.Значение as Date) IS NULL'''
+
            '''<nowiki>AND dateCheck.Значение <> "01.01.0001 0:00:00"</nowiki>'''
+
        ''')'''
+
        '''OR'''
+
        '''('''
+
            '''ВЫРАЗИТЬ(dateNextCheck.Значение as Date) IS NULL'''
+
            '''<nowiki>AND dateNextCheck.Значение <> "01.01.0001 0:00:00"</nowiki>'''
+
        ''')'''
+
    ''')'''
+
 
+
#
+
## '''Рекомендуется '''для всех приборов указывать канал вычислителя (измерительный трубопровод). Если он не проставлен, будет предпринята попытка привязать измеритель от узла. Она может быть выполнена успешно только в случае наличия у данного узла единственного канала. Все остальные случаи развешивания устройств по каналам необходимо будет выполнить в ИУС-ГАЗ вручную.
+
  
 
== Код 1650. Виды договоров ==
 
== Код 1650. Виды договоров ==
 
'''Справочник.ВидыДоговоров'''.
 
'''Справочник.ВидыДоговоров'''.
  
#
+
{{anchor|code1651}}
## Пустые имена не допустимы
+
=== 1651. Пустые имена не допустимы ===
 
+
 
  SELECT
 
  SELECT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1946: Строка 1748:
 
     '''AND "" = ISNULL(Наименование, "")'''
 
     '''AND "" = ISNULL(Наименование, "")'''
  
== Код 1700. Договоры ==
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
'''Справочник.ДоговорыГазовые''', '''РегистрСведений.ПараметрыДоговора.СрезПоследних'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate),''' если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, нежели представлено в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев.
+
  
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ, могут быть исправлены по желанию компании.
+
{{anchor|code1700}}
 +
== Код 1700. Договоры ==
 +
'''Справочник.ДоговорыГазовые''', '''РегистрСведений.ПараметрыДоговора.СрезПоследних'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate),''' если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, нежели представлено в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте об ошибках импорта]], но представлены, чтобы оставаться универсальными для обоих случаев.
  
## Корректно проставлен вид ценообразования ('''ДоговорыГазовые.ВидПрейскуранта''').
+
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]]. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ, могут быть исправлены по желанию компании.
  
 +
{{anchor|code1701}}
 +
=== 1701. Корректно проставлен вид ценообразования ===
 +
'''ДоговорыГазовые.ВидПрейскуранта'''.
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 1962: Строка 1768:
 
     '''AND ВидПрейскуранта.Ссылка IS NULL'''
 
     '''AND ВидПрейскуранта.Ссылка IS NULL'''
  
#
+
{{anchor|code1702}}
## Имеются обе даты — начала и конца и они [#1.1.2.1.Корректность дат|outline корректны].
+
=== 1702. Корректны все даты — начала, окончания, подписания и расторжения ===
 +
С [[Version 19|версии 19.4]] добавлены проверки дат подписания и расторжения.
 +
Обязательна только дата подписания. Остальные проверятся лишь на корректность.
  
 
  SELECT DISTINCT
 
  SELECT DISTINCT
    ДоговорыГазовые.Ссылка,
+
    ДоговорыГазовые.Ссылка,
    ДоговорыГазовые.ВидДоговора.Ссылка,
+
    ДоговорыГазовые.ВидДоговора.Ссылка,
    ДоговорыГазовые.Наименование,
+
    ДоговорыГазовые.Наименование,
    ДоговорыГазовые.ДатаНачала,
+
    ДоговорыГазовые.ДатаНачала,
    ДоговорыГазовые.ДатаКонца,
+
    ДоговорыГазовые.ДатаКонца,
    ДоговорыГазовые.Владелец.Ссылка,
+
    ДоговорыГазовые.ДатаОкончательногоПодписания,
    ДоговорыГазовые.ПометкаУдаления
+
    ДоговорыГазовые.ДатаРасторжения,
 +
    ДоговорыГазовые.Владелец.Ссылка,
 +
    ДоговорыГазовые.ПометкаУдаления
 
  FROM
 
  FROM
    Справочник.ДоговорыГазовые as ДоговорыГазовые
+
    Справочник.ДоговорыГазовые as ДоговорыГазовые
    LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
+
    LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
 
  WHERE
 
  WHERE
    ДоговорыГазовые.ПометкаУдаления = false
+
    ДоговорыГазовые.ПометкаУдаления = false
    '''AND('''
+
    <b><nowiki>
         '''<nowiki>ISNULL(ДоговорыГазовые.ДатаНачала, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
    AND(
         '''OR'''
+
         (
         '''<nowiki>ISNULL(ДоговорыГазовые.ДатаКонца, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
          ДоговорыГазовые.ДатаНачала = DateTime(1,1,1)
        '''OR'''
+
        OR ISNULL(ДоговорыГазовые.ДатаНачала, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
        '''('''
+
        OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаНачала as Date) IS NULL
            '''ВЫРАЗИТЬ(ДоговорыГазовые.ДатаНачала as Date) IS NULL'''
+
        )
            '''<nowiki>AND ДоговорыГазовые.ДатаНачала <> "01.01.0001 0:00:00"</nowiki>'''
+
         OR
         ''')'''
+
         (
         '''OR'''
+
          ДоговорыГазовые.ДатаКонца <> DateTime(1,1,1)
         '''('''
+
        AND (
            '''ВЫРАЗИТЬ( ДоговорыГазовые.ДатаКонца as Date) IS NULL'''
+
        ISNULL(ДоговорыГазовые.ДатаКонца, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
            '''<nowiki>AND ДоговорыГазовые.ДатаКонца <> "01.01.0001 0:00:00"</nowiki>'''
+
        OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаКонца as Date) IS NULL
        ''')'''
+
        )
    ''')'''
+
        )
 +
        OR
 +
        (
 +
          ДоговорыГазовые.ДатаОкончательногоПодписания <> DateTime(1,1,1)
 +
        AND (
 +
        ISNULL(ДоговорыГазовые.ДатаОкончательногоПодписания, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
 +
        OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаОкончательногоПодписания as Date) IS NULL
 +
        )
 +
         )
 +
         OR
 +
         (
 +
          ДоговорыГазовые.ДатаРасторжения <> DateTime(1,1,1)
 +
        AND (
 +
        ISNULL(ДоговорыГазовые.ДатаРасторжения, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
 +
        OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаРасторжения as Date) IS NULL
 +
        )
 +
        )
 +
    )
 +
    </nowiki></b>
  
#
+
{{anchor|code1703}}
## Заполнен потребитель.
+
  
 +
=== 1703. Потребитель - владелец заполнен, не удалён и активен ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     ДоговорыГазовые.Ссылка as obj,
 
     ДоговорыГазовые.Ссылка as obj,
Строка 2009: Строка 1837:
 
     LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
 
     LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
 
  WHERE
 
  WHERE
     ДоговорыГазовые.ПометкаУдаления = false
+
     <b>ДоговорыГазовые.ПометкаУдаления = false
     '''AND ( ДоговорыГазовые.Владелец.Ссылка IS NULL OR ДоговорыГазовые.Владелец.ПометкаУдаления = true)'''
+
     AND ДоговорыГазовые.Владелец.Ссылка NOT IN (
 
+
        SELECT DISTINCT
#
+
            Выборка.obj
## Потребитель - владелец не удалён (также код 1603).
+
        FROM
 +
            (
 +
            SELECT
 +
                ДоговорыГазовые.Владелец.Ссылка as obj,
 +
                ДоговорыГазовые.Владелец.Наименование as name,
 +
                ДоговорыГазовые.Владелец.ИНН as inn,
 +
                ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
 +
                ДоговорыГазовые.Владелец.Ссылка as parent,
 +
                ДоговорыГазовые.Владелец.Территория.Ссылка as region,
 +
                ДоговорыГазовые.Владелец.ПометкаУдаления as deleted
 +
            FROM
 +
                Справочник.ДоговорыГазовые as ДоговорыГазовые
 +
            UNION ALL
 +
            SELECT
 +
                РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
 +
                РеестрКонечныхПотребителей.Контрагент.Наименование as name,
 +
                РеестрКонечныхПотребителей.Контрагент.ИНН as inn,
 +
                РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,
 +
                РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,
 +
                РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,
 +
                РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
 +
            FROM
 +
                Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
 +
            WHERE
 +
                <nowiki>РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец</nowiki>
 +
            ) as Выборка
 +
        WHERE
 +
            Выборка.obj IS NOT NULL
 +
            AND Выборка.deleted = false
 +
    )</b>
  
 +
{{anchor|code1704}}
 +
=== 1704. Номер (наименование) договора не может быть пустым ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     ДоговорыГазовые.Ссылка as obj,
 
     ДоговорыГазовые.Ссылка as obj,
Строка 2021: Строка 1880:
 
     ДоговорыГазовые.ДатаНачала as dateStart,
 
     ДоговорыГазовые.ДатаНачала as dateStart,
 
     ДоговорыГазовые.ДатаКонца as dateEnd,
 
     ДоговорыГазовые.ДатаКонца as dateEnd,
     ДоговорыГазовые.Владелец.Ссылка as consumer,
+
     ДоговорыГазовые.Владелец.Ссылка as consumer
    ДоговорыГазовые.ПометкаУдаления as deleted
+
 
  FROM
 
  FROM
 
     Справочник.ДоговорыГазовые as ДоговорыГазовые
 
     Справочник.ДоговорыГазовые as ДоговорыГазовые
 
     LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
 
     LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
 
  WHERE
 
  WHERE
     '''ДоговорыГазовые.ПометкаУдаления = false'''
+
     ДоговорыГазовые.ПометкаУдаления = false
     '''AND ДоговорыГазовые.Владелец.Ссылка NOT IN ('''
+
     '''AND "" = ISNULL(ДоговорыГазовые.Наименование, "")'''
        '''SELECT DISTINCT'''
+
            '''Выборка.obj'''
+
        '''FROM'''
+
            '''('''
+
            '''SELECT'''
+
                '''ДоговорыГазовые.Владелец.Ссылка as obj,'''
+
                '''ДоговорыГазовые.Владелец.Наименование as name,'''
+
                '''ДоговорыГазовые.Владелец.ИНН as inn,'''
+
                '''ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,'''
+
                '''ДоговорыГазовые.Владелец.Ссылка as parent,'''
+
                '''ДоговорыГазовые.Владелец.Территория.Ссылка as region,'''
+
                '''ДоговорыГазовые.Владелец.ПометкаУдаления as deleted'''
+
            '''FROM'''
+
                '''Справочник.ДоговорыГазовые as ДоговорыГазовые'''
+
  
            '''UNION'''
+
<small>Пустые имена будут при импорте заменены автоматически на строку "<empty>"</small>
  
            '''SELECT'''
+
=== 1705. Заполнен поставщик газа, он не удалён ===
                '''РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,'''
+
В [[Перечень сокращений и обозначений#ИМУС|ИМУС]] будет полем [[Перечень сокращений и обозначений#Продавец газа|продавец газа]] [[Перечень сокращений и обозначений#Субъект распределения|субъекта распределения]].
                '''РеестрКонечныхПотребителей.Контрагент.Наименование as name,'''
+
Критично для независимой поставки. Если поставщик не заполнен, будет подставлен ('''без''' индикации данной ошибки) контрагент из '''Catalogs.Контрагенты.НашаОрганизация'''
                '''РеестрКонечныхПотребителей.Контрагент.ИНН as inn,'''
+
                '''РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,'''
+
                '''РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,'''
+
                '''РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,'''
+
                '''РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted'''
+
            '''FROM'''
+
                '''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей'''
+
            '''WHERE'''
+
                '''<nowiki>РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец</nowiki>'''
+
            ''') as Выборка'''
+
        '''WHERE'''
+
            '''Выборка.obj IS NOT NULL'''
+
            '''AND Выборка.deleted = false'''
+
    ''')'''
+
 
+
#
+
## Номер ('''Наименование''') договора не может быть пустым:
+
  
 +
{{anchor|code1705}}
 
  SELECT DISTINCT
 
  SELECT DISTINCT
    ДоговорыГазовые.Ссылка as obj,
+
    Договор.Поставщик
    ДоговорыГазовые.ВидДоговора.Ссылка as priority,
+
    ДоговорыГазовые.Наименование as number,
+
    ДоговорыГазовые.ДатаНачала as dateStart,
+
    ДоговорыГазовые.ДатаКонца as dateEnd,
+
    ДоговорыГазовые.Владелец.Ссылка as consumer
+
 
  FROM
 
  FROM
    Справочник.ДоговорыГазовые as ДоговорыГазовые
+
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
    LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
+
 
  WHERE
 
  WHERE
    ДоговорыГазовые.ПометкаУдаления = false
+
    ЕстьСвязь
    '''AND "" = ISNULL(ДоговорыГазовые.Наименование, "")'''
+
    <b>AND Договор.Поставщик.Ссылка NOT IN(
 +
      SELECT
 +
          Ссылка
 +
      FROM
 +
          Справочник.Контрагенты
 +
      WHERE
 +
          ПризнакПоставщика AND NOT ПометкаУдаления
 +
    )</b>
 +
 
 +
С [[история изменений|версии]] 18.pre4.
 +
 
 +
{{anchor|code1800}}
  
 
== Код 1800. Связь договоров с точками подключения ==
 
== Код 1800. Связь договоров с точками подключения ==
 
'''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''.
 
'''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''.
  
#
+
{{anchor|code1801}}
## Заполнены у всех обе сущности.[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по подключениям:
+
=== 1801. Заполнены у всех обе сущности ===
 +
{{deprecated-inline|с [[история изменений|версии]] ~16}} и больше не используется вместе с командой [[Команды_адаптера#AttachPcToContract|AttachPcToContract]].
  
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Подключение.Ссылка as pc,
 
     Подключение.Ссылка as pc,
Строка 2098: Строка 1933:
 
     AND Подключение.ПометкаУдаления = false AND Договор.ПометкаУдаления = false
 
     AND Подключение.ПометкаУдаления = false AND Договор.ПометкаУдаления = false
 
     <nowiki>AND Договор <> ЗНАЧЕНИЕ(Справочник.ДоговорыГазовые.ПустаяСсылка)</nowiki>
 
     <nowiki>AND Договор <> ЗНАЧЕНИЕ(Справочник.ДоговорыГазовые.ПустаяСсылка)</nowiki>
     '''AND ('''
+
     <b>AND (
         '''Подключение.Ссылка IS NULL'''
+
         Подключение.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Договор.Ссылка IS NULL'''
+
         Договор.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Договор NOT IN('''
+
         Договор NOT IN(
             '''SELECT DISTINCT'''
+
             SELECT DISTINCT
                 '''Ссылка'''
+
                 Ссылка
             '''FROM'''
+
             FROM
                 '''Справочник.ДоговорыГазовые'''
+
                 Справочник.ДоговорыГазовые
             '''WHERE'''
+
             WHERE
                 '''ПометкаУдаления = false'''
+
                 ПометкаУдаления = false
                 '''<nowiki>AND ДатаНачала >= DateTime(2002, 1, 1) AND ДатаКонца <= DateTime(2022, 1, 1)</nowiki>'''
+
                 <nowiki>AND ДатаНачала >= DateTime(2002, 1, 1) AND ДатаКонца <= DateTime(2022, 1, 1)</nowiki>
         ''')'''
+
         )
     ''')'''
+
     )</b>
 
+
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по площадкам оборудования:
+
  
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по площадкам оборудования:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Площадка.Ссылка as pc,
 
     Площадка.Ссылка as pc,
Строка 2124: Строка 1958:
 
     ЕстьСвязь
 
     ЕстьСвязь
 
     <nowiki>AND Договор <> ЗНАЧЕНИЕ(Справочник.ДоговорыГазовые.ПустаяСсылка)</nowiki>
 
     <nowiki>AND Договор <> ЗНАЧЕНИЕ(Справочник.ДоговорыГазовые.ПустаяСсылка)</nowiki>
     '''AND ('''
+
     <b>AND (
         '''Площадка.Ссылка IS NULL'''
+
         Площадка.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Договор.Ссылка IS NULL'''
+
         Договор.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Площадка.Ссылка NOT IN ('''
+
         Площадка.Ссылка NOT IN (
             '''SELECT DISTINCT'''
+
             SELECT DISTINCT
                 '''Площадка.Ссылка'''
+
                 Площадка.Ссылка
             '''FROM'''
+
             FROM
                 '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''
+
                 РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
             '''WHERE'''
+
             WHERE
                 '''ЕстьСвязь'''
+
                 ЕстьСвязь
         ''')'''
+
         )
         '''OR'''
+
         OR
         '''Договор.Ссылка NOT IN ('''
+
         Договор.Ссылка NOT IN (
             '''SELECT DISTINCT'''
+
             SELECT DISTINCT
                 '''Ссылка'''
+
                 Ссылка
             '''FROM'''
+
             FROM
                 '''Справочник.ДоговорыГазовые'''
+
                 Справочник.ДоговорыГазовые
         ''')'''
+
         )
     ''')'''
+
     )</b>
 +
 
 +
{{anchor|code1850}}
  
 
== Код 1850. Связь площадок с точками подключения ==
 
== Код 1850. Связь площадок с точками подключения ==
 
'''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. В вырожденных случаях, когда не ведутся точки или подключения в АИС РГ, отсутствующий элемент будет сгенерирован, и в таком случае связывание будет происходить автоматически и данные ошибки не будут иметь смысла.
 
'''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. В вырожденных случаях, когда не ведутся точки или подключения в АИС РГ, отсутствующий элемент будет сгенерирован, и в таком случае связывание будет происходить автоматически и данные ошибки не будут иметь смысла.
  
#
+
{{anchor|code1851}}
## Заполнены у всех обе сущности.
+
=== 1851. Заполнены у всех обе сущности ===
 
+
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по подключениям:
+
  
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Подключение.Ссылка as pc,
 
     Подключение.Ссылка as pc,
Строка 2162: Строка 1997:
 
     Подключение.ПометкаУдаления = false AND Площадка.ПометкаУдаления = false
 
     Подключение.ПометкаУдаления = false AND Площадка.ПометкаУдаления = false
 
     AND ЕстьСвязь
 
     AND ЕстьСвязь
     '''AND   (Подключение.Ссылка IS NULL OR Площадка.Ссылка IS NULL)'''
+
     '''AND (Подключение.Ссылка IS NULL OR Площадка.Ссылка IS NULL)'''
 +
 
 +
{{anchor|code1852}}
 +
=== 1852. Для связывания ТП с площадкой в ИМУС, у площадки должен обязательно быть канал ===
 +
{{anchor|code1852}}
 +
Если такая детализация не ведётся в [[Перечень сокращений и обозначений#АИС РГ|АИС]], можно использовать [[Общий порядок загрузки данных#Генерация структуры вниз|генерацию объектов]] в [[Перечень сокращений и обозначений#ИМУС|ИМУС]].
 +
 
 +
Если необходимо в [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] выбрать площадки без [[Перечень сокращений и обозначений#канал|каналов]], например в случае если принято решение вести всю структуру там, это можно сделать следующим запросом:
 +
SELECT DISTINCT
 +
    gcos.Площадка as gco,
 +
    uugs.УзелУчета as uug,
 +
    equips.Оборудование as equip,
 +
    channels.Ссылка as channel
 +
FROM
 +
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних as gcos
 +
    LEFT JOIN РегистрСведений.УзлыУчетаПлощадок.СрезПоследних as uugs
 +
    ON (uugs.ПлощадкаОборудования = gcos.Площадка AND uugs.ЕстьСвязь)
 +
    LEFT JOIN РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equips
 +
    ON (equips.УзелУчета = uugs.УзелУчета AND equips.Установлено AND equips.Активность AND equips.Оборудование ССЫЛКА Справочник.Вычислители)
 +
    LEFT JOIN Справочник.КаналыВычислителей as channels
 +
    ON (equips.Оборудование = channels.Владелец)
 +
WHERE
 +
    gcos.ЕстьСвязь
 +
    '''AND channels.Ссылка IS NULL'''
 +
 
 +
{{ ambox | text = Дополнительный запрос для удобства, мы '''не''' настаиваем и в общем случае даже '''не рекомендуем''' заводить в [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] всю эту структура до [[Перечень сокращений и обозначений#канал|канала]] только для [[Перечень сокращений и обозначений#ИМУС|ИМУС]]! }}
 +
 
 +
{{ ambox | text = Обратите также внимание, если вы [[#code405|не снимаете атрибут регистра ЕстьСвязь с прошлых периодов]], здесь будут отображены проблемы по всем, в [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте об ошибках]] их будет меньше }}
  
#
+
{{anchor|code1853}}
## Для связывания ТП с площадкой '''в ИМУС''', у площадки должен обязательно быть '''единственный''' канал.
+
## Автоматическое связывание возможно только если они связаны один к одному в текущий момент времени. Выбрать активные не единичные связки можно следующим запросом:
+
  
 +
=== 1853. Наличие уникальной активной связи ТП с Площадкой ===
 +
Автоматическое связывание возможно только если они связаны '''один к одному''' в текущий момент времени (в регистре наличествует единственная запись с '''ЕстьСвязь'''). Выбрать активные не единичные связки можно следующим запросом:
 
  SELECT gco1.gco, gco1.pc as pc1, gco2.pc as pc2
 
  SELECT gco1.gco, gco1.pc as pc1, gco2.pc as pc2
 
  FROM
 
  FROM
Строка 2195: Строка 2057:
 
     '''<nowiki>ON (gco1.gco = gco2.gco AND gco1.pc <> gco2.pc)</nowiki>'''
 
     '''<nowiki>ON (gco1.gco = gco2.gco AND gco1.pc <> gco2.pc)</nowiki>'''
  
По возможности рекомендуется разорвать старые, не нужные связки или же вязать их в ручную в ИУС-ГАЗ. Предполагается, что площадка может иметь несколько подключений в один момент времени легитимно в случае, если она действительно подключена в двух местах и питается с более чем одного выхода ГРС. Но таких объектов в регионе должно быть очень мало (и очень крупных потребителей). В таком случае не достаточно сгенерировать отдельный канал в ИУС-ГАЗ, так какзоны ГП строятся по узлам, в ИУС-ГАЗ необходимо добавить дополнительный тракт Узел-Корректор-Канал и привязать каждый канал к своему подключению. Поскольку такой информации на уровне каналов в АИС нет, это можно сделать только вручную.
+
{{ ambox | type = warning | text = Если имеется возможность, мы настоятельно рекомендуем разорвать связь со старыми объектами! Обратите внимание, т.к. это регистры, то вся история сохраняется и будет доступна для просмотра и после этого. Данный же признак должен отвечать, по логике вещей, за '''текущую взаимосвязь объектов'''. Я общался по этому поводу с поддержкой Аудит НТ - получить внятного ответа почему такое имеет место быть не удалось. Кому интересно, привожу [[полный лог беседы с Поддержкой Аудит НТ]].
  
 +
Если же будет принято решение не снимать со старых связь, введена специальная константа [[Конфигурирование на стороне 1С#Связывание площадок с ТП|ASCUG_additionalCondition_relPCtoGCOunique]], позволяющая забирать только уникальные связи. В этом случае приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. }}
 +
 +
==== 1853_1. Связь площадки с ТП не уникальна в АИС, но они связаны в ИМУС ====
 +
{{anchor|code1853_1}}
 +
В дополнение к коду 1853 показывает что из АИС пришла не уникальная связка, но в ИМУС площадка связана всеми каналами. Предположительно вручную. Проблема вероятно решена, и при желании эту ошибку можно отключить.
 +
 +
{{anchor|code1900}}
 
== Код 1900. Планы потребления ==
 
== Код 1900. Планы потребления ==
 
'''РегистрНакопления.ПланыПоставок.'''
 
'''РегистрНакопления.ПланыПоставок.'''
  
Все указанные проверки для планов должны быть выполнены на месяц, предшествующий текущей дате, и на все планы вперёд. Даты в запросе предполагается скорректировать самостоятельно или параметризовать запрос стандартными средствами 1С. Обратите внимание, что данные запросы могут быть достаточно медленным и «тяжелым» с точки зрения производительности, тем более, чем больший интервал времени проверяется.
+
{{ ambox | text = Все указанные проверки для планов должны быть выполнены на месяц, предшествующий текущей дате, и на все планы вперёд. Даты в запросе предполагается скорректировать самостоятельно или параметризовать запрос стандартными средствами 1С. Обратите внимание, что данные запросы могут быть достаточно медленными и «тяжелыми» с точки зрения производительности, тем более, чем больший интервал времени проверяется }}
  
#  
+
{{ ambox | type = warning | text = По константе [[Конфигурирование на стороне 1С#ASCUG_additional_plansUseGasType|ASCUG_additional_plansUseGasType]] опционально может быть включен дополнительный разрез [[СР]] как вид газа. В таком случае во все проверочные запросы необходимо в группировку добавить его. }}
## Устарел. Вместо этого предлагается использовать более точные 1903 и 1904.
+
## Указан сам лимит потребления на дату.
+
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по подключениям:
+
{{anchor|code1901|code1901_1}}
 +
=== 1901. Указан действующий вид газа ===
 +
{{ ambox | type = warning | text = Обратите пожалуйста внимание, данная ошибка будет на '''каждой''' строчке плана, если вы [[Конфигурирование на стороне 1С#ASCUG_additional_plansUseGasType|не включили]] загрузку разреза Вид газа для [[СР]]! Таким образом необходимо, или включить загрузку [[СР]] с Видом газа, или [[Конфигурирование адаптера на стороне ИМУС#ais.ws.muteErrors|отключить показ]] ошибки 1901! }}
 +
Т.к. виды газа загружаются из используемых в текущем году в планах, ситуация что они не найдены практически не реальна. Если вы видите данную ошибку, вероятнее всего стоит проверить что команда загрузки [[Команды адаптера#GasType|видов газа]] выполнялась перед загрузкой [[Команды адаптера#CcDailyPlan|планов]].
  
 +
Для '''РегистрНакопления.ПланыПоставок''' такого разреза нет.
 +
 +
Ошибка 1901_1 будет если он не [[маппинг|замаплен]].
 +
 +
{{anchor|code1902}}
 +
 +
=== 1902. Указан сам лимит потребления на дату ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
 
     Договор.ОсновнойДоговор.Ссылка as contract,
 
     Договор.ОсновнойДоговор.Ссылка as contract,
    Подключение.Ссылка as pc,
 
 
     Количество as amount
 
     Количество as amount
 
  FROM
 
  FROM
Строка 2219: Строка 2095:
 
     '''AND Количество IS NULL'''
 
     '''AND Количество IS NULL'''
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по площадкам оборудования:
+
==== Независимая поставка ====
 
+
  SELECT
  SELECT DISTINCT
+
     Период,
     Период as date,
+
    Подключение,
     Договор.ОсновнойДоговор.Ссылка as contract,
+
     Договор.Владелец as Покупатель,
     ПлощадкаОборудования.Ссылка as pc,
+
     Договор,
     Количество as amount
+
    Поставка,
 +
    ПланМесяц as ПланМесяц,
 +
     ПланСутки as ПланСутки
 
  FROM
 
  FROM
     РегистрНакопления.ПланыПоставок
+
     РегистрСведений.НезависимыеПотребители.СрезПоследних
 
  WHERE
 
  WHERE
     Активность
+
     ПризнакАктивности
     '''AND Количество IS NULL'''
+
     '''AND ПланМесяц IS NULL OR ПланСутки IS NULL'''
  
#
+
<small>Требование не проверяется автоматически, является общим и теоретически и так не возможным</small>
## Участвующие в планах подключения должны быть активны, то есть должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true.
+
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по подключениям:
+
{{anchor|code1903}}
 +
=== 1903. Участвующие в планах подключения должны быть активны ===
 +
Это значит они должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true.
  
 +
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
Строка 2248: Строка 2128:
 
     Активность
 
     Активность
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
     '''AND Подключение NOT IN('''
+
     <b>AND Подключение NOT IN(
         '''SELECT DISTINCT'''
+
         SELECT DISTINCT
             '''Подключение'''
+
             Подключение
         '''FROM'''
+
         FROM
             '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''
+
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
         '''WHERE'''
+
         WHERE
             '''ЕстьСвязь'''
+
             ЕстьСвязь
             '''AND Подключение.ПометкаУдаления = false'''
+
             AND Подключение.ПометкаУдаления = false
     )
+
     )</b>
 
  GROUP BY
 
  GROUP BY
 
     Период,
 
     Период,
Строка 2263: Строка 2143:
 
  ORDER BY Период
 
  ORDER BY Период
  
[#2.3.9.1.Вариант определения точек подключения|outline Вариант учета] по площадкам оборудования:
+
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по площадкам оборудования:
 
+
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
Строка 2275: Строка 2154:
 
     Активность
 
     Активность
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
     '''AND ПлощадкаОборудования NOT IN('''
+
     <b>AND ПлощадкаОборудования NOT IN(
         '''SELECT DISTINCT'''
+
         SELECT DISTINCT
             '''Площадка'''
+
             Площадка
         '''FROM'''
+
         FROM
             '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''
+
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
         '''WHERE'''
+
         WHERE
             '''ЕстьСвязь'''
+
             ЕстьСвязь
             '''AND Площадка.ПометкаУдаления = false'''
+
             AND Площадка.ПометкаУдаления = false
     ''')'''
+
     )</b>
 
  GROUP BY
 
  GROUP BY
 
     Период,
 
     Период,
Строка 2290: Строка 2169:
 
  ORDER BY Период
 
  ORDER BY Период
  
#
+
==== Независимая поставка ====
## Участвующие в планах договоры должны быть активны, то есть должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true.
+
SELECT
 +
    Период,
 +
    Подключение,
 +
    Договор.Владелец as Покупатель,
 +
    Договор,
 +
    Поставка,
 +
    ПланМесяц as ПланМесяц,
 +
    ПланСутки as ПланСутки
 +
FROM
 +
    РегистрСведений.НезависимыеПотребители.СрезПоследних
 +
WHERE
 +
    ПризнакАктивности
 +
      AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 +
      <b>AND Подключение NOT IN(
 +
          SELECT DISTINCT
 +
            Подключение
 +
          FROM
 +
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 +
          WHERE
 +
            ЕстьСвязь
 +
            AND Подключение.ПометкаУдаления = false
 +
      )</b>
  
 +
{{anchor|code1904}}
 +
=== 1904. Участвующие в планах договоры должны быть активны ===
 +
То есть должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true.
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
Строка 2316: Строка 2219:
 
     Активность
 
     Активность
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
     '''AND termination.terminationContract IS NOT NULL'''
+
     <b>AND (
    '''AND Договор NOT IN('''
+
        termination.terminationContract IS NOT NULL
        '''SELECT DISTINCT'''
+
        OR Договор NOT IN (
            '''Договор'''
+
            SELECT DISTINCT
        '''FROM'''
+
                Договор
            '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''
+
            FROM
        '''WHERE'''
+
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
            '''ЕстьСвязь'''
+
            WHERE
            '''AND Договор.ПометкаУдаления = false'''
+
                ЕстьСвязь
     ''')'''
+
                AND Договор.ПометкаУдаления = false
 +
        )
 +
     )</b>
 
  GROUP BY
 
  GROUP BY
 
     Период,
 
     Период,
Строка 2332: Строка 2237:
 
  ORDER BY Период
 
  ORDER BY Период
  
#
+
==== Независимая поставка ====
## Обязательно заполнена Поставка:
+
SELECT
 +
    Период,
 +
    Подключение,
 +
    Договор.Владелец as Покупатель,
 +
    Договор,
 +
    Поставка,
 +
    ПланМесяц as ПланМесяц,
 +
    ПланСутки as ПланСутки
 +
FROM
 +
    РегистрСведений.НезависимыеПотребители.СрезПоследних as plan
 +
    LEFT JOIN(
 +
        SELECT
 +
            Договор as terminationContract,
 +
            ISNULL(MAX(ДатаРасторжения), MAX(Дата)) as terminationDate
 +
        FROM
 +
            Документ.РасторжениеДоговора
 +
        WHERE
 +
            ПометкаУдаления = false
 +
        GROUP BY // Single row with max date only
 +
            Договор
 +
    ) as termination
 +
    ON (plan.Договор.ОсновнойДоговор.Ссылка = termination.terminationContract)
 +
WHERE
 +
    ПризнакАктивности
 +
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 +
    <b>AND (
 +
        termination.terminationContract IS NOT NULL
 +
        AND Договор NOT IN(
 +
            SELECT DISTINCT
 +
                Договор
 +
            FROM
 +
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
 +
            WHERE
 +
                ЕстьСвязь
 +
                AND Договор.ПометкаУдаления = false
 +
        )
 +
    )</b>
  
 +
{{anchor|code1905}}
 +
=== 1905. Обязательно заполнена Поставка ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
Строка 2352: Строка 2295:
 
  ORDER BY Период
 
  ORDER BY Период
  
#
+
==== Независимая поставка ====
## Желательно заполнение категории потребления:
+
SELECT
 +
    Период,
 +
    Подключение,
 +
    Договор.Владелец as Покупатель,
 +
    Договор,
 +
    Поставка,
 +
    ПланМесяц as ПланМесяц,
 +
    ПланСутки as ПланСутки
 +
FROM
 +
    РегистрСведений.НезависимыеПотребители.СрезПоследних as plan
 +
WHERE
 +
    ПризнакАктивности
 +
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 +
    '''AND Поставка.Ссылка IS NULL'''
  
 +
{{anchor|code1906}}
 +
=== 1906. Крайне желательно заполнение категории потребления ===
 +
На самом деле не обязательным является само заполнение, если не ведётся вообще. '''Критической''' проблемой это становится в случае когда часть заполнена, часть нет - появляются лишние [[Перечень сокращений и обозначений#Субъект распределения|Субъекты распределения]], могут появляться неполные и/или отрицательные планы.
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
Строка 2372: Строка 2331:
 
  ORDER BY Период
 
  ORDER BY Период
  
#
+
{{anchor|code1907}}
## '''Если<ref name="ftn11">'''В ИМУС планы по площадкам импортируются для удобства и не являются обязательными.'''</ref> ведутся планы в разрезе площадок, они должны быть активными и загруженными в ИМУС:
+
=== 1907. Площадки, участвующие в планах должны быть активны (если используются в планах) ===
  
 +
'''Если''' ведутся планы в разрезе площадок, они должны быть активными и загруженными в [[Перечень сокращений и обозначений#ИМУС|ИМУС]]
 +
 +
{{ ambox | text = В [[Перечень сокращений и обозначений#ИМУС|ИМУС]] планы по площадкам не являются обязательными. Импортируются справочно и исключительно для удобства. В [[Перечень сокращений и обозначений#Субъект распределения|Субъект распределения]] разрез Площадки не включён и соответственно в распределении отдельно данный план участвовать не будет. Для корректного отображения в зонах ГП плана по поставке, должна быть включена [[Конфигурирование адаптера на стороне ИМУС#profile_tab__PlanByGco|соответствующая опция]] }}
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Период as date,
 
     Период as date,
Строка 2398: Строка 2360:
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 
     AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 
     AND termination.terminationContract IS NOT NULL
 
     AND termination.terminationContract IS NOT NULL
     '''AND ПлощадкаОборудования NOT IN('''
+
     <b>AND ПлощадкаОборудования NOT IN(
         '''SELECT DISTINCT'''
+
         SELECT DISTINCT
             '''Площадка'''
+
             Площадка
         '''FROM'''
+
         FROM
             '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''
+
             РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
         '''WHERE'''
+
         WHERE
             '''ЕстьСвязь'''
+
             ЕстьСвязь
             '''AND Договор.ПометкаУдаления = false'''
+
             AND Договор.ПометкаУдаления = false
     ''')'''
+
     )</b>
 
  GROUP BY
 
  GROUP BY
 
     Период,
 
     Период,
 
     Договор.ОсновнойДоговор.Ссылка,
 
     Договор.ОсновнойДоговор.Ссылка,
     Подключение.Ссылка
+
     ПлощадкаОборудования.Ссылка
 
  ORDER BY Период
 
  ORDER BY Период
  
#
+
{{anchor|code1908}}
## Суммарные планы (сумма всех изменений, которые не грузятся по отдельности, берётся сумма всех по субъекту распределения) должны быть не отрицательными:
+
  
 +
=== 1908. План должен быть неотрицательным ===
 +
Суммарные планы (сумма всех изменений, которые не грузятся по отдельности, берётся сумма всех по [[Перечень сокращений и обозначений#Субъект распределения|субъекту распределения]]) должны быть не отрицательными:
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 +
    Период,
 
     SUM(Количество) as amount,
 
     SUM(Количество) as amount,
 
     Договор.ОсновнойДоговор as contract,
 
     Договор.ОсновнойДоговор as contract,
Строка 2428: Строка 2392:
 
  WHERE
 
  WHERE
 
     Активность
 
     Активность
     AND Период BETWEEN DateTime(2012, 10, 1) AND DateTime(2012, 10, 31)
+
     AND Период BETWEEN DateTime(2013, 1, 1) AND DateTime(2013, 12, 31)
 
  GROUP BY
 
  GROUP BY
 +
    Период,
 
     Договор.ОсновнойДоговор,
 
     Договор.ОсновнойДоговор,
 
     Договор.ВидПрейскуранта,
 
     Договор.ВидПрейскуранта,
Строка 2441: Строка 2406:
 
К данному запросу следует отметить, что если не ведётся разрез планов в компании по площадкам или подключениям, группировка по данному элементу должна быть исключена из приведённого запроса.
 
К данному запросу следует отметить, что если не ведётся разрез планов в компании по площадкам или подключениям, группировка по данному элементу должна быть исключена из приведённого запроса.
  
== Код 2000. Поставка (Договоры поставки) ==
+
==== Независимая поставка ====
 +
SELECT
 +
    Период,
 +
    Подключение,
 +
    Договор.Владелец as Покупатель,
 +
    Договор,
 +
    Поставка,
 +
    ПланМесяц,
 +
    ПланСутки
 +
FROM
 +
    РегистрСведений.НезависимыеПотребители.СрезПоследних as plan
 +
WHERE
 +
    ПризнакАктивности
 +
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
 +
    '''AND ( ПланМесяц < 0 OR ПланСутки < 0 )'''
 +
 
 +
{{ ambox | text = Обратите внимание, если приходит 0, он также будет отображаться и в [[Перечень сокращений и обозначений#ИМУС|ИМУС]], поле будет отображаться пустым если плана вообще нет }}
 +
 
 +
{{anchor|code1909}}
 +
 
 +
=== 1909. Указано не целое число кубов в плане  ===
 +
Ошибка: Дробный регулярный план.
 +
 
 +
 +
SELECT
 +
    Период,
 +
    Количество,
 +
    Договор,
 +
    Документ,
 +
    Поставка,
 +
    ПлощадкаОборудования
 +
    ТипПлана
 +
FROM
 +
    РегистрНакопления.ПланыПоставок
 +
WHERE
 +
    Активность
 +
    AND Период between ДатаВремя(2018,11,01) AND ДатаВремя(2018,11,30)
 +
    AND (Количество*1000)-(Выразить(Количество как число(30,3))*1000) <>0
 +
    AND ТипПлана.Порядок <> 4
 +
 
 +
 
 +
Ошибка: Дробный план для независимой поставки.
 +
 
 +
SELECT
 +
    Период,
 +
    Договор,
 +
    Площадка,
 +
    Поставка,
 +
    ПланМесяц,
 +
    ПланСутки
 +
FROM
 +
    РегистрСведений.НезависимыеПотребители
 +
WHERE
 +
    ПризнакАктивности
 +
    AND Период BETWEEN ДатаВремя(2018,5,01) AND ДатаВремя(2018,5,31)
 +
    AND Договор.ОсновнойДоговор.Ссылка IS NOT NULL
 +
    AND (ПланМесяц*1000)-(Выразить(ПланМесяц как число(30,3))*1000) <>0
 +
 
 +
== Код 2000. Поставка (закупка) ==
 +
{{anchor|code2000}}
 
'''Справочник.ПоставкиГаза.'''
 
'''Справочник.ПоставкиГаза.'''
  
#
+
C [[история изменений|версии]] 18.pre2 грузятся только те, даты действия договоров которых включают текущее число.
## Заполнен производитель газа:
+
  
 +
{{anchor|code2001}}
 +
=== 2001. Должен быть заполнен производитель газа ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
    Ссылка as obj,
+
    Ссылка as obj,
    Производитель as producer
+
    Производитель as producer
 
  FROM
 
  FROM
    Справочник.ПоставкиГаза
+
    Справочник.ПоставкиГаза
 
  WHERE
 
  WHERE
    ПометкаУдаления = false
+
    ПометкаУдаления = false
    '''AND ('''
+
    <b>AND (
        '''Производитель.Ссылка IS NULL'''
+
        Производитель.Ссылка IS NULL
         '''OR'''
+
         OR
        '''Производитель.ПометкаУдаления = true'''
+
        Производитель.ПометкаУдаления = true
    ''')'''
+
        OR
 +
        Производитель NOT IN(
 +
            SELECT
 +
                Ссылка
 +
            FROM
 +
                Справочник.Контрагенты
 +
            WHERE
 +
                ПризнакПроизводителя = true AND NOT ПометкаУдаления
 +
        )
 +
)</b>
 +
 
 +
{{anchor|code2001_1}}
 +
==== 2001_1. Необходимо сопоставление (маппинг) производителя газа во внешних системах в ИМУС ====
  
#
+
{{anchor|code2002}}
## Заполнен поставщик газа (владелец договора поставки):
+
  
 +
=== 2002. Заполнен поставщик газа (владелец договора поставки) ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 2470: Строка 2507:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
     '''AND ('''
+
     <b>AND (
         '''Владелец.Владелец.Ссылка IS NULL'''
+
         Владелец.Владелец.Ссылка IS NULL
         '''OR'''
+
         OR
         '''Владелец.Владелец.ПометкаУдаления = true'''
+
         Владелец.Владелец.ПометкаУдаления = true
     ''')'''
+
     )</b>
 
+
#
+
## Заполнен владелец газа (продавец газа):
+
  
 +
{{anchor|code2003}}
 +
=== 2003. Заполнен владелец газа (продавец газа) ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 2486: Строка 2522:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
     '''AND ('''
+
     <b>AND (
         '''ВладелецГаза.Ссылка IS NULL'''
+
         ВладелецГаза.Ссылка IS NULL
         '''OR'''
+
         OR
         '''ВладелецГаза.ПометкаУдаления = true'''
+
         ВладелецГаза.ПометкаУдаления = true
     ''')'''
+
     )</b>
 
+
#
+
## Заполнен вид ценообразования
+
  
 +
{{anchor|code2004}}
 +
=== 2004. Заполнен вид ценообразования ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 2504: Строка 2539:
 
     '''AND ВидЦенообразования.Ссылка IS NULL'''
 
     '''AND ВидЦенообразования.Ссылка IS NULL'''
  
#
+
{{ ambox | text = Имеется возможность изменить источник вида цены для [[Перечень сокращений и обозначений#Субъект распределения|субъекта распределения]] с помощью константы [[Конфигурирование на стороне 1С#Планы|ASCUG_additional_plans_priority]] }}
## Имеются обе даты — начала и конца и они [#1.1.2.1.Корректность дат|outline корректны].
+
  
 +
{{anchor|code2005}}
 +
=== 2005. Имеются корректные даты начала и конца договора закупки (поставки) ===
 
  SELECT DISTINCT
 
  SELECT DISTINCT
 
     Ссылка as obj,
 
     Ссылка as obj,
Строка 2515: Строка 2551:
 
  WHERE
 
  WHERE
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
     '''AND('''
+
     <b>AND(
         '''<nowiki>ISNULL(Владелец.ДатаНачала, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
         <nowiki>ISNULL(Владелец.ДатаНачала, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>
         '''OR'''
+
         OR
         '''<nowiki>ISNULL(Владелец.ДатаКонца, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>'''
+
         <nowiki>ISNULL(Владелец.ДатаКонца, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)</nowiki>
         '''OR'''
+
         OR
         '''('''
+
         (
             '''ВЫРАЗИТЬ(Владелец.ДатаНачала as Date) IS NULL'''
+
             ВЫРАЗИТЬ(Владелец.ДатаНачала as Date) IS NULL
             '''<nowiki>AND Владелец.ДатаНачала <> "01.01.0001 0:00:00"</nowiki>'''
+
             <nowiki>AND Владелец.ДатаНачала <> "01.01.0001 0:00:00"</nowiki>
         ''')'''
+
         )
         '''OR'''
+
         OR
         '''('''
+
         (
             '''ВЫРАЗИТЬ(Владелец.ДатаКонца as Date) IS NULL'''
+
             ВЫРАЗИТЬ(Владелец.ДатаКонца as Date) IS NULL
             '''<nowiki>AND Владелец.ДатаКонца <> "01.01.0001 0:00:00"</nowiki>'''
+
             <nowiki>AND Владелец.ДатаКонца <> "01.01.0001 0:00:00"</nowiki>
         ''')'''
+
         )
     ''')'''
+
    )</b>
 +
 
 +
{{anchor|code2006}}
 +
=== 2006. Заполнен код номенклатуры ===
 +
SELECT DISTINCT
 +
    Ссылка as obj,
 +
    ВидЦенообразования as priority
 +
FROM
 +
    Справочник.ПоставкиГаза
 +
WHERE
 +
    ПометкаУдаления = false
 +
     '''AND КодНоменклатуры.Ссылка IS NULL'''
 +
 
 +
Грузятся только договоры, включающие текущую дату в диапазон начала и конца действия, можно проверять и исправлять только их.
 +
 
 +
{{anchor|code2007}}
 +
=== 2007. Актуален договор закупки ===
 +
SELECT DISTINCT
 +
    Ссылка as obj,
 +
    Владелец
 +
FROM
 +
    Справочник.ПоставкиГаза
 +
WHERE
 +
    ПометкаУдаления = false
 +
    AND Владелец.ДатаКонца >= BeginOfPeriod(&CurrentDate, DAY) // Current and future
 +
    <b>AND Владелец NOT IN (
 +
        SELECT Владелец
 +
        FROM Справочник.ПоставкиГаза
 +
        WHERE
 +
            Владелец.ДатаКонца >= BeginOfPeriod(&CurrentDate, DAY) // Current and future
 +
            AND Владелец.ПометкаУдаления = false
 +
    )</b>
 +
 
 +
CurrentDate предполагается датой на момент загрузки.
 +
 
 +
{{anchor|code2100}}
  
 
== Код 2100. Границы (коридоры) перебора и недобора ==
 
== Код 2100. Границы (коридоры) перебора и недобора ==
 
'''Справочник.ВидыПеребораИНедобора.'''
 
'''Справочник.ВидыПеребораИНедобора.'''
  
#
+
{{anchor|code2101}}
## Для элементов недобора необходимо указать в процентах '''ДопустимыйНедобор''' и '''ДопустимыйПеребор''' в обратном случае (одного шаблона расчета не достаточно):
+
=== 2101. Для элементов недобора необходимо указать ДопустимыйНедобор и ДопустимыйПеребор в обратном случае ===
 
+
Одного шаблона расчета не достаточно. В  процентах.
 
  SELECT
 
  SELECT
 
     Ссылка,
 
     Ссылка,
Строка 2547: Строка 2618:
 
     ПометкаУдаления = false
 
     ПометкаУдаления = false
 
     '''AND (0 = ISNULL(ДопустимыйНедобор, 0) AND 0 = ISNULL(ДопустимыйПеребор, 0))'''
 
     '''AND (0 = ISNULL(ДопустимыйНедобор, 0) AND 0 = ISNULL(ДопустимыйПеребор, 0))'''
 +
 +
{{ ambox | text = Для настройки как трактовать данные цифры, имеется опция [[Конфигурирование адаптера на стороне ИМУС#ais_ws_prcLimitAddition|ais.ws.prcLimitAddition]] }}
 +
 +
<small>Требование не проверяется автоматически.</small>
 +
 +
== Код 2200. Автомаппинг телеметрии ==
 +
{{anchor|code2200}}
 +
'''РегистрСведений.СинхронизацияССистемамиТелеметрии.СрезПоследних''' где установлен признак '''ВыполнятьСинхронизацию'''.
 +
 +
Не обязательная [[Команды_адаптера#AutoMapTelemetry|операция автоматического переноса связей]] с системами телеметрии.
 +
Команда добавлена для удобства ведения [[Перечень сокращений и обозначений#Маппинг (связывание)|маппинга]] в одной системе, если использование не планируется, данные ошибки можно не проверять.
 +
 +
=== 2201. Не указано сопоставление внешних систем в настройках ===
 +
{{anchor|code2201}}
 +
Приходит объект с внешней системой, для которой не [[Конфигурирование адаптера на стороне ИМУС#ais_ws_telemetryUugOuterRelation|указано соответствие]] системы в [[Перечень сокращений и обозначений#ИМУС|ИМУС]].
 +
 +
==== 2201_1. Не указано сопоставление внешних систем в настройках, но настроен её пропуск ====
 +
{{anchor|code2201_1}}
 +
Для системы объекта [[Конфигурирование адаптера на стороне ИМУС#ais_ws_telemetryUugOuterRelation|настроен]] пропуск. Объект пропущен.
 +
 +
=== 2202. Не найден метаканал метаузла ===
 +
{{anchor|code2202}}
 +
Из [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] поступила пара для связывания на уровне [[Перечень сокращений и обозначений#УУГ|узлов]] и для [[Перечень сокращений и обозначений#ПМ|метаузла]] (телеметрии, во внешних системах) не найден ни один [[Перечень сокращений и обозначений#ПМ|метаканал]].
 +
 +
=== 2203. Узел телеметрии имеет больше одного метаканала и не все замаплены ===
 +
{{anchor|code2203}}
 +
Из [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] поступила пара для связывания на уровне [[Перечень сокращений и обозначений#УУГ|узлов]] и для [[Перечень сокращений и обозначений#ПМ|метаузла]] (телеметрии, во внешних системах) обнаружено больше одного [[Перечень сокращений и обозначений#ПМ|метаканала]] и не все они [[Перечень сокращений и обозначений#Маппинг (связывание)|замаплены]]. Неоднозначность автоматически не разрешима.
 +
 +
=== 2204. Узел маппинга имеет не единственный канал ===
 +
{{anchor|code2204}}
 +
Из [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] поступила пара для связывания на уровне [[Перечень сокращений и обозначений#УУГ|узлов]] и для [[Перечень сокращений и обозначений#УУГ|узла]] назначения обнаружено 0 или больше одного [[Перечень сокращений и обозначений#Канал|канала]]. Неоднозначность автоматически не разрешима.
 +
 +
=== 2205. Не найден канал для связывания ===
 +
{{anchor|code2205}}
 +
Из [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] поступила пара для связывания на уровне [[Перечень сокращений и обозначений#Канал|каналов]], но [[Перечень сокращений и обозначений#Канал|канал]], на который должен [[Перечень сокращений и обозначений#Маппинг (связывание)|указывать]] [[Перечень сокращений и обозначений#ПМ|метаканал (ПМ)]] не найден.
 +
 +
=== 2206. Не найден метаканал (ПМ) для связывания ===
 +
{{anchor|code2206}}
 +
Из [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] поступила пара для связывания на уровне [[Перечень сокращений и обозначений#Канал|каналов]], но [[Перечень сокращений и обозначений#ПМ|метаканал (ПМ)]] не найден.
 +
 +
Введено с [[история изменений|версии]] 18.pre1.
 +
 +
=== 2207. Автоматический маппинг доступен только на уровне каналов или узлов ===
 +
{{anchor|code2207}}
 +
Мы всегда настоятельно рекомендуем указывать для маппинга [[Перечень сокращений и обозначений#Канал|канала]], поскольку это позволяет указать 1 к 1 все случаи для двух систем. Т.к. в [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]] такая детализация часто просто не ведётся, и останавливается на [[Перечень сокращений и обозначений#УУГ|узлах]], добавлена связка по ним, но при условии наличия однозначности. Никакие другие типы связок (вроде уровня площадок) поддерживать не планируется.
 +
 +
== Код 2300. ПДЗ ==
 +
{{anchor|code2300}}
 +
РегистрНакопления.ДолгиПокупателей.Остатки
 +
 +
=== 2301. Не найден Договор ===
 +
{{anchor|code2301}}
 +
ДолгиПокупателейОстатки.Договор.Договор
 +
 +
=== 2302. Не найден Потребитель ===
 +
{{anchor|code2302}}
 +
ДолгиПокупателейОстатки.Контрагент
 +
 +
<small>Требование не проверяется автоматически.</small>
 +
 +
=== 2303. Не заполнена просроченная дебиторская задолженность ===
 +
{{anchor|code2303}}
 +
ДолгиПокупателейОстатки.СуммаОстаток
 +
 +
=== 2304. Не указано количество просроченных платежей ===
 +
{{anchor|code2304}}
 +
МинимальныйДокументДолга.КОличествоДокументДолгаДата
 +
 +
=== 2305. Не указана дата первой просрочки ===
 +
{{anchor|code2305}}
 +
 +
== Код 2400. Загрузка признака ОКК для Потребителя ==
 +
{{anchor|code2400}}
 +
'''РегистрСведений.ПараметрыКонтрагента КАК ПараметрыКонтрагента''' где '''ПараметрыКонтрагента.Идентификатор = "ПризнакПринадлежностиКОКК"'''.
 +
 +
=== 2401. Потребитель с ИД [] не найден(а) ===
 +
{{anchor|code2401}}
 +
РегистрСведений.ПараметрыКонтрагента КАК ПараметрыКонтрагента, где ПараметрыКонтрагента.Идентификатор = "ПризнакПринадлежностиКОКК".
 +
 +
=== 2402. Тип принадлежности к ОКК [переданный тип принадлежности] не найден [] ===
 +
{{anchor|code2402}}
 +
Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.
 +
 +
=== 2403. Дата принадлежности к ОКК [] некорректна ===
 +
{{anchor|code2403}}
 +
Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.
 +
 +
== Код 2500. Загрузка признака ОКК для Договора ==
 +
{{anchor|code2500}}
 +
'''РегистрСведений.ПараметрыДоговора''' где '''ПараметрыДоговора.Идентификатор = "ДляНуждОКК"'''.
 +
 +
=== 2501. Договор с ИД [] не найден(а) ===
 +
{{anchor|code2501}}
 +
РегистрСведений.ПараметрыДоговора, где ПараметрыДоговора.Идентификатор = "ДляНуждОКК"
 +
 +
=== 2502. Тип признака для нужд ОКК [переданный тип] не найден [] ===
 +
{{anchor|code2502}}
 +
Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.
 +
 +
=== 2503. Дата начала действия ОКК [] некорректна ===
 +
{{anchor|code2503}}
 +
Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.
 +
 +
== Код 5000. Общие ошибки ==
 +
{{anchor|code5000}}
 +
 +
=== 5001. Для заменяемых сгенерированных сущностей не единственный предок ===
 +
{{anchor|code5001}}
 +
Включен режим [[Конфигурирование адаптера на стороне ИМУС#ais_ws_replaceGenerated|замены сгенерированных сущностей]], но найдено больше 1 потомка по предку. Объект не добавлен.
 +
 +
Предком для [[Перечень сокращений и обозначений#УУГ|УУГ]] будем считать площадку, для [[Перечень сокращений и обозначений#Корректор (Вычислитель)|корректора]] - [[Перечень сокращений и обозначений#УУГ|УУГ]], для [[Перечень сокращений и обозначений#Канал|канала]] - [[Перечень сокращений и обозначений#Корректор (Вычислитель)|корректор]]. То есть в значении близком атрибуту 1С '''Владелец'''.
 +
 +
=== 5002. Для генерации вниз не уникальный идентификатор ===
 +
{{anchor|code5002}}
 +
Для операции [[Команды адаптера#GenerateConsumptionDown|генерации вниз]] для вставляемых элементов их идентификатор уже представлен. Требуется уникальность.
 +
 +
=== 5003. Дубликат объекта ===
 +
{{anchor|code5003}}
 +
Под [[Общий порядок загрузки данных#дубликаты|дубликатами]] загрузки подразумеваются сущности из регистров,
 +
[[Общий порядок загрузки данных#Общий порядок загрузки данных из АИС РГ|
 +
одновременно относящиеся]] к некоторым другим объектам, когда это не корректно с точки зрения логики. Например [[Перечень сокращений и обозначений#Корректор (Вычислитель)|корректор]],
 +
[[Общий порядок загрузки данных#Общий порядок загрузки данных из АИС РГ|одновременно установленный]] на нескольких [[Перечень сокращений и обозначений#УУГ|УУГ]], [[Перечень сокращений и обозначений#ГПО|ГПО]] и т.д.
 +
 +
Как читать подробности данной ошибки с примерами:
 +
 +
GasConsEquip{ИД[14bcfa8b-c756-11dd-ba36-0002a54e6110],
 +
    Отличающиеся поля: {УУГ=[637d14c6-c21e-11dd-ba36-0002a54e6110, 81bd03ff-c21e-11dd-ba36-0002a54e6110]}
 +
[[Перечень сокращений и обозначений#ГПО|ГПО единица]] с [[Перечень сокращений и обозначений#UID|идентификатором]] '''14bcfa8b-c756-11dd-ba36-0002a54e6110''' при импорте из учётной системы приходит как установленная одновременно на двух [[Перечень сокращений и обозначений#УУГ|узлах]] с [[Перечень сокращений и обозначений#UID|идентификаторами]] '''637d14c6-c21e-11dd-ba36-0002a54e6110''' и '''81bd03ff-c21e-11dd-ba36-0002a54e6110''' соответственно.
 +
 +
GasConsEquip{ИД[8478bbca-393f-11dc-a2a7-001641c52137],
 +
    Отличающиеся поля: {
 +
        УУГ=[fcc4e25e-3459-11dc-a534-0014c2637821, null],
 +
        Площадка=[1ba80228-344e-11dc-a534-0014c2637821, d9448a27-39f0-11dc-a2ac-0018de4bede7]
 +
    }
 +
В данном примере, есть две записи в регистре '''РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних(&CurrentDate)''' [[Общий порядок загрузки данных#Общий порядок загрузки данных из АИС РГ|установленных]] [[Перечень сокращений и обозначений#ГПО|ГПО сущностей]], причем записи имеют как разные [[Перечень сокращений и обозначений#УУГ|узлы]] (в одной пустой), так и площадки.
 +
 +
{{ ambox | type=warning | text = Внимание! Не смотря на то что ошибка значится не фатальной для того чтобы загрузить больше данных для анализа, в данном случае определить верный элемент принадлежности в общем случае не представляется возможным. Поэтому в ИМУС он будет связан с '''любым''' из представленных элементов в дублях! По этой причине исправление настоятельно рекомендуется. }}
 +
 +
=== 5004. Обнаружено несколько объектов с одинаковым GUID ===
 +
{{anchor|code5004}}
 +
Возможно в АИС был изменен Код объекта, для объекта в ИМУС пытается создаться новый идентификатор с системе создателя, но идентификатор с таким GUID в системе уже имеется
  
  
 +
== Код 10000. Ошибки экспорта на стороне АИС ==
 +
{{anchor|code10000}}
  
 +
Могут быть определены подкоды до 10999. Ошибки трактуются на стороне [[Перечень сокращений и обозначений#АИС РГ|АИС РГ]]. Никаких специальных значений для [[Перечень сокращений и обозначений#ИМУС|ИМУС]] не представляют и могут вводиться динамически. В [[Общий порядок загрузки данных#Отчёт о состоянии синхронизации|отчёте]] представлены "как есть".
  
 
----
 
----
 
<references/>
 
<references/>

Текущая версия на 12:32, 17 мая 2019

Содержание

Следует обратить внимание, что запросы, приведенные в данном разделе, приводятся в информативных целях, для удобного поиска проблем импорта данных.

Также, запросы выбирают именно ошибочные, проблемные данные, а не данные, которые будут импортированы. То есть прежде всего элементы, требующие исправления.

Суть запросов, которыми выбираются указанные данные можно понять инвертировав условие в них, но фактические запросы в операциях Веб-сервиса как правило на много сложнее, учитывают дополнительные условия и нюансы.

Приведенные запросы, если явно не указано обратного, для каждого приведенного ограничения отбирают записи, не соответствующие ему. То есть в идеале, при отсутствии некорректных данных, каждый из запросов должен возвращать пустой результат.

50px Рекомендуем во всех запросах уточнять СрезПоследних() конкретной датой!
Т.к. забираются в основном текущие данные, это ведёт к тому что в большинстве случаев будут использоваться информационные регистры, вместо прямого доступа к справочникам, и в частности, повсеместно используется СрезПоследних(). Хотя запросы 1С позволяют использовать срез без явного указания даты, это чревато, особенно в случаях использования вложенных запросов к другим регистрам. В таких случаях результаты с указанием даты и без неё могут отличаться! Нередко это ведёт к достаточно странным результатам на первый взгляд. Таким образом, мы настоятельно рекомендуем во все запросы добавлять дату, на момент проверки. То есть заменять например:
 РегистрСведений.ПлощадкиПоДоговору.СрезПоследних

на

 РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate)

если вы планируете задавать дату из формы 1С, или:

 РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(DateTime(2015, 3, 30))

если хотите указать её явно в запросе (дата разумеется должна быть скорректирована). Для краткости, в тексте далее в запросах не будем добавлять.

Код 100. Территории (Регионы)

101. Все имена должны быть уникальными

SELECT
   Наименование
FROM
    Справочник.Территории
WHERE
   ПометкаУдаления = false
GROUP BY
   Наименование
HAVING
   COUNT(Наименование) > 1

Требование не проверяется автоматически.

102. Имена не могут быть пустыми

SELECT
    Наименование
FROM
    Справочник.Территории
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 200. Районы

201. Каждый район должен быть привязан к одной и только одной территории

SELECT
    Ссылка,
    ПометкаУдаления,
    Владелец.Ссылка
FROM
    Справочник.Районы
WHERE
    ПометкаУдаления = false
    AND (
        Владелец.Ссылка IS NULL
        OR
        Владелец.Ссылка NOT IN (
            SELECT
                Ссылка
            FROM
                Справочник.Территории
            WHERE
                ПометкаУдаления = false
        )
    )

Требование проверяется автоматически только на присутствие родителя, но не на множественные привязки.

201_1. Мета-регион не замаплен в ИМУС во внешних системах

Необходимо замапить объекты в разделе Субъект РФ

202. Все имена должны быть уникальны в пределах территории (региона)

SELECT
    Наименование,
    Владелец.Ссылка
FROM
    Справочник.Районы
WHERE
    ПометкаУдаления = false
GROUP BY
    Наименование, Владелец.Ссылка
HAVING
    COUNT(*) > 1

Требование не проверяется автоматически.

203. Имена не могут быть пустыми

SELECT
    Наименование,
    Владелец.Ссылка
FROM
    Справочник.Районы
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 300. Справочник ОтраслиГазпрома

301. Все группы должны иметь уникальные имена

SELECT
    Наименование
FROM
    Справочник.ОтраслиГазпрома
WHERE
    ПометкаУдаления = false
    AND (Группа = ЗНАЧЕНИЕ(Справочник.ОтраслиГазпрома.ПустаяСсылка) OR Группа = Ссылка)
GROUP BY
    Наименование
HAVING
    COUNT(Наименование) > 1

Требование не проверяется автоматически.

302. Отрасль обязательно должна принадлежать одной и только одной группе

SELECT
    Ссылка,
    Группа.Ссылка,
    Наименование
FROM
    Справочник.ОтраслиГазпрома
WHERE
    ПометкаУдаления = false
    AND (
        Группа.Ссылка IS NULL
        OR
        Ссылка IN (
            SELECT
                Ссылка
            FROM
                Справочник.ОтраслиГазпрома
            WHERE
                ПометкаУдаления = false
            GROUP BY
                Ссылка
            HAVING COUNT(*) > 1
        )

Требование не проверяется автоматически.

303. Пустые имена не допускаются

SELECT
    Наименование
FROM
    Справочник.ОтраслиГазпрома
WHERE
    ПометкаУдаления = false
    AND (Группа = ЗНАЧЕНИЕ(Справочник.ОтраслиГазпрома.ПустаяСсылка) OR Группа = Ссылка)
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 400. Потребители

Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей, Справочник.ДоговорыГазовые. В реальном веб-сервисе загрузка происходит из РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate), если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа НеСвязыватьПлощадкуСДоговором), то из РегистрНакопления.ПланыПоставок, с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, чем в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев.

К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчёте. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ и могут быть исправлены по желанию компании.

401. У каждого потребителя должна быть проставлена не удалённая отрасль

SELECT DISTINCT
    obj,
    industry,
    parent,
    region,
    deleted
FROM
    (
    SELECT
        ДоговорыГазовые.Владелец.Ссылка as obj,
        ДоговорыГазовые.Владелец.Наименование as name,
        ДоговорыГазовые.Владелец.ИНН as inn,
        ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
        ДоговорыГазовые.Владелец.Родитель.Ссылка as parent,
        ДоговорыГазовые.Владелец.Территория.Ссылка as region,
        ДоговорыГазовые.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые as ДоговорыГазовые
    UNION
    SELECT
        РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
        РеестрКонечныхПотребителей.Контрагент.Наименование as name,
        РеестрКонечныхПотребителей.Контрагент.ИНН as inn,
        РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,
        РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,
        РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,
        РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
    WHERE
        РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
    ) as Выборка
WHERE
    industry IS NULL OR industry.ПометкаУдаления = true
ORDER BY parent

402. У каждого потребителя должна быть проставлена Территория (регион)

SELECT DISTINCT
    obj,
    name,
    inn,
    industry,
    parent,
    region,
    deleted
FROM
    (
    SELECT
        ДоговорыГазовые.Владелец.Ссылка as obj,
        ДоговорыГазовые.Владелец.Наименование as name,
        ДоговорыГазовые.Владелец.ИНН as inn,
        ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
        ДоговорыГазовые.Владелец.Родитель.Ссылка as parent,
        ДоговорыГазовые.Владелец.Территория.Ссылка as region,
        ДоговорыГазовые.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые as ДоговорыГазовые
    UNION
    SELECT
        РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
        РеестрКонечныхПотребителей.Контрагент.Наименование as name,
        РеестрКонечныхПотребителей.Контрагент.ИНН as inn,
        РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,
        РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,
        РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,
        РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
    WHERE
        РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
    ) as Выборка
WHERE
    region IS NULL OR region.ПометкаУдаления = true
ORDER BY parent

403. Имя не может быть пустым

SELECT DISTINCT
    obj,
    name,
    inn,
    industry,
    parent,
    region,
    deleted
FROM
    (
    SELECT
        ДоговорыГазовые.Владелец.Ссылка as obj,
        ДоговорыГазовые.Владелец.Наименование as name,
        ДоговорыГазовые.Владелец.ИНН as inn,
        ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
        ДоговорыГазовые.Владелец.Родитель.Ссылка as parent,
        ДоговорыГазовые.Владелец.Территория.Ссылка as region,
        ДоговорыГазовые.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые as ДоговорыГазовые
    UNION ALL
    SELECT
        РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
        РеестрКонечныхПотребителей.Контрагент.Наименование as name,
        РеестрКонечныхПотребителей.Контрагент.ИНН as inn,
        РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,
        РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,
        РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,
        РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
    WHERE
        РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
    ) as Выборка
WHERE
    "" = ISNULL(name, "")
ORDER BY parent

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

404. Не должно быть дублей (как минимум по ИНН)

SELECT DISTINCT
    Выборка.obj,
    COUNT(*) as count
FROM
    (
    SELECT
        ДоговорыГазовые.Владелец.Ссылка as obj,
        ДоговорыГазовые.Владелец.Наименование as name,
        ДоговорыГазовые.Владелец.ИНН as inn,
        ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
        ДоговорыГазовые.Владелец.Родитель.Ссылка as parent,
        ДоговорыГазовые.Владелец.Территория.Ссылка as region,
        ДоговорыГазовые.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые as ДоговорыГазовые
    UNION
    SELECT
        РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
        РеестрКонечныхПотребителей.Контрагент.Наименование as name,
        РеестрКонечныхПотребителей.Контрагент.ИНН as inn,
        РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,
        РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,
        РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,
        РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
    WHERE
        РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
    ) as Выборка
ГДЕ
    Выборка.obj IS NOT NULL
GROUP BY
    Выборка.obj, name, inn, industry, parent, region, deleted
HAVING COUNT(*) > 1

Фактически речь идёт об уникальности по ссылке, ИНН выбран как важный уникальный атрибут. Автоматической проверки не делается.

405. У потребителя должен быть правильно проставлен родитель (или плательщик)

Причём он должен быть корректно проставлен в справочниках Справочник.ДоговорыГазовые и Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей.

Проблема актуальности в регистрах для потребителей с точки зрения одновременно нескольких плательщиков (владельцев договоров газовых) может быть проиллюстрирована следующим запросом (внимание, не всё являются ошибкой, стоит только обратить внимание и проверить, чтобы была верной текущая принадлежность потребителей):

SELECT DISTINCT
    Выборка.obj,
    Выборка.name,
    ISNULL(Выборка.inn, "Error:404:"),
    Выборка.industry,
    Выборка.parent,
    Выборка.region
FROM
    (
    SELECT
        ДоговорыГазовые.Владелец.Ссылка as obj,
        ДоговорыГазовые.Владелец.Наименование as name,
        ДоговорыГазовые.Владелец.ИНН as inn,
        ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
        "" as parent,
        ДоговорыГазовые.Владелец.Территория.Ссылка as region,
        ДоговорыГазовые.Владелец.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые as ДоговорыГазовые
    GROUP BY
        ДоговорыГазовые.Владелец.Ссылка
    UNION ALL
    SELECT
        РеестрКонечныхПотребителей.Контрагент.Ссылка,
        РеестрКонечныхПотребителей.Контрагент.Наименование,
        РеестрКонечныхПотребителей.Контрагент.ИНН,
        РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка,
        РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка,
        РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка,
        РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
    FROM
        Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
    WHERE
        РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
    GROUP BY
        РеестрКонечныхПотребителей.Контрагент.Ссылка,
        РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка
    ) as Выборка
WHERE
    Выборка.obj IS NOT NULL AND Выборка.deleted = false
    AND Выборка.obj IN(
        SELECT DISTINCT
            Выборка.obj
        FROM
            (
            SELECT
                ДоговорыГазовые.Владелец.Ссылка as obj,
                ДоговорыГазовые.Владелец.Наименование as name,
                ДоговорыГазовые.Владелец.ИНН as inn,
                ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
                "" as parent,
                ДоговорыГазовые.Владелец.Территория.Ссылка as region,
                ДоговорыГазовые.Владелец.ПометкаУдаления as deleted
            FROM
                Справочник.ДоговорыГазовые as ДоговорыГазовые
            GROUP BY
                ДоговорыГазовые.Владелец.Ссылка
            UNION ALL
            SELECT
                РеестрКонечныхПотребителей.Контрагент.Ссылка,
                РеестрКонечныхПотребителей.Контрагент.Наименование,
                РеестрКонечныхПотребителей.Контрагент.ИНН,
                РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка,
                РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка,
                РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка,
                РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
            FROM
                Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
            WHERE
                РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
            GROUP BY
                РеестрКонечныхПотребителей.Контрагент.Ссылка,
                РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка
        ) as Выборка
    WHERE
        Выборка.obj IS NOT NULL AND Выборка.deleted = false
    GROUP BY
        obj
    HAVING COUNT(*) > 1
    )
ORDER BY obj

406. Если у потребителя есть родитель, он должен быть корректно загруженным

То есть соответствовать всем требованиям данного кода (40х). Тут нет запроса потому что его не бможет быть - требование рекурсивное для удовлетворения ссылок. Сначала загружаются родители - затем потомки.

Код 500. Газораспределительные организации (ГРО)

Берутся из справочника Справочник.Контрагенты, те объекты, у которых ПризнакТранспортировщика = true.

501. Обязательно должны быть проставлены регионы у всех

SELECT
    Ссылка as obj,
    Наименование as name,
    Территория.Ссылка as region
FROM
    Справочник.Контрагенты
WHERE
    ПометкаУдаления = false AND ПризнакТранспортировщика = true
    AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)

502. Не может быть дублей

SELECT
    Наименование,
    count(*) as count
FROM
    Справочник.Контрагенты
WHERE
    ПометкаУдаления = false AND ПризнакТранспортировщика = true
GROUP BY
    Наименование
HAVING
    COUNT(*) > 1

Требование не проверяется автоматически.

503. Имена должны быть не пустыми

SELECT
    Ссылка,
    Наименование,
    Территория.Ссылка
FROM
    Справочник.Контрагенты
WHERE
    ПометкаУдаления = false AND ПризнакТранспортировщика = true
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 600. Газораспределительные станции (ГРС)

Справочник.ГРС.

601. Должны быть проставлены Территории (Субъекты РФ)

SELECT
    Ссылка as obj,
    Наименование as name,
    Территория.Ссылка as region,
    CASE WHEN "" = КодСДУ THEN 0 ELSE ISNULL(КодСДУ, 0) END as codeSDU,
    Трансгаз.КодСДУ as tgSDU
FROM
    Справочник.ГРС
WHERE
    ПометкаУдаления = false
    AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)

602. Имена не могут быть пустыми

SELECT
    Ссылка as obj,
    Наименование as name,
    Территория.Ссылка as region,
    CASE WHEN "" = КодСДУ THEN 0 ELSE ISNULL(КодСДУ, 0) END as codeSDU,
    Трансгаз.КодСДУ as tgSDU
FROM
    Справочник.ГРС
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

603. Обязательно должен быть заполнен трансгаз

Справочник.ГРС.Трансгаз

SELECT
    Ссылка as obj,
    Наименование as name,
    Территория.Ссылка as region,
    КодСДУ as codeSDU,
    Трансгаз as tg
FROM
    Справочник.ГРС
WHERE
    ПометкаУдаления = false
    AND Трансгаз.Ссылка IS NULL

604. Желательно заполнение также кодов СДУ

Справочник.ГРС.КодСДУ.

SELECT
    Ссылка as obj,
    Наименование as name,
    Территория.Ссылка as region,
    КодСДУ as kodSDU,
    Трансгаз.КодСДУ as tgSDU
FROM
    Справочник.ГРС
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(КодСДУ, "")

Требование не проверяется автоматически. Ошибок не выводится. В случае отсутствия или не числового значения устанавливается значение 0.

605. Выдается ошибка, если ЛПУ (УМГ) в ГРС не заполнено.

Стандартная обработка для необязательного поля, на которое есть проверка. Аналогично работает 401 (не заполнена Отрасль в Потребителе).

605_1. Нет связи ЛПУ в "Объекты внешней системы".

606. Пустое короткое имя для ГРС недопустимо.

Код 700. Выходы ГРС

Справочник.ВыходыГРС.

701. Обязательна привязка к ГРО

SELECT
    Ссылка,
    ПометкаУдаления,
    Владелец,
    Код,
    Наименование,
    ГРО,
    КодТрансгаза,
    УзелУчета
FROM
    Справочник.ВыходыГРС
WHERE
    ПометкаУдаления = false
    AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)

Следует обратить внимание, что некоторые РГК предлагают не заполнять этот справочник, а взять для выходов ГРС данные из точки подключения или площадки. Однако выяснилось, что такой подход не верный — ГРО выхода ГРС и ГРО точки подключения не обязательно одинаковы (трубопровод может быть поделен на несколько частей, и разные части могут принадлежать разным ГРО).

702. Обязательна привязка к ГРС

Теоретически обратного и быть не может.

SELECT
    Ссылка,
    ПометкаУдаления,
    Владелец
FROM
    Справочник.ВыходыГРС
WHERE
    ПометкаУдаления = false
    AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)

703. Наименование не может быть пустым

SELECT
    Ссылка,
    ПометкаУдаления,
    Владелец,
    Код,
    Наименование,
    ГРО,
    КодТрансгаза,
    УзелУчета
FROM
    Справочник.ВыходыГРС
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 800. Площадки

Забираются как срез на текущую дату из регистра РегистрСведений.ПлощадкиПоДоговору.

801. Необходима привязка к потребителю

SELECT DISTINCT
    Площадка.Ссылка as obj,
    Потребитель.Ссылка as consumer,
    Потребитель.ПометкаУдаления as consumerDeleted
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Площадка.ПометкаУдаления = false
    AND (
        Площадка.Ссылка IS NULL
         OR
        Потребитель.Ссылка IS NULL
         OR
        Потребитель.ПометкаУдаления = true
         OR
        Потребитель NOT IN(
            SELECT DISTINCT
                consumer
            FROM
                (
                SELECT
                    Владелец.Ссылка as consumer
                FROM
                    Справочник.ДоговорыГазовые
                WHERE
                    Владелец.ПометкаУдаления = false
                UNION ALL
                SELECT
                    Контрагент.Ссылка
                FROM
                    Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей
                WHERE
                    Контрагент <> Ссылка.Владелец
                    AND Контрагент.ПометкаУдаления = false
                ) as consumers
        )
    )

802. удалён (пункт оставлен чтобы сохранить нумерацию)

803. Обязательна привязка к Территории (Субъекту РФ)

1) Если площадка не генерируется, Субъект РФ берется из Справочник.ПлощадкиОборудования Территория

SELECT DISTINCT
 Площадка.Ссылка,
 Площадка.Территория
FROM
   РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
   ЕстьСвязь AND Площадка.ПометкаУдаления = false
   AND (Площадка.Территория.Ссылка IS NULL OR Площадка.Территория.ПометкаУдаления = true)

2) Если Площадка генерируется, то Субъект РФ берется из Справочник.Контрагенты Территория

SELECT DISTINCT
  Площадка.Ссылка,
  Потребитель.Ссылка,
  Потребитель.Территория 
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Площадка.ПометкаУдаления = false
    AND (Потребитель.Территория.Ссылка IS NULL OR Потребитель.Территория.ПометкаУдаления = true)

804. Имя площадки не может быть пустым

SELECT DISTINCT
    Площадка.Ссылка as obj,
    Потребитель.Ссылка as consumer
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Площадка.ПометкаУдаления = false
    AND "" = ISNULL(Площадка.Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

805. Заполнены районы

SELECT DISTINCT
    Площадка.Ссылка
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь
    AND (Площадка.Адрес.Район.Ссылка IS NULL OR Площадка.Адрес.Район.ПометкаУдаления = true)

806. Дубли не допускаются (игнорируются последующие)

Проблема актуальности в регистрах для потребителей с точки зрения одновременно нескольких плательщиков (владельцев договоров газовых) может быть проиллюстрирована следующим запросом:

SELECT
    gco1.obj, gco1.consumer, gco2.consumer
FROM
    (
        SELECT DISTINCT
            Площадка.Ссылка as obj,
            Потребитель.Ссылка as consumer,
            Площадка.Наименование as name,
            ISNULL(Площадка.Адрес.Наименование, "") as address,
            Площадка.Адрес.Район as subReg
        FROM
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
        WHERE
            ЕстьСвязь AND Площадка.ПометкаУдаления = false
            AND NOT (ISNULL(Основание.ДатаИзменения, DateTime(0001, 1, 1)) > &CurrentDate) // Change in the future
        GROUP BY
            Площадка.Ссылка,
            Потребитель.Ссылка
    ) as gco1
    LEFT JOIN (
        SELECT DISTINCT
            Площадка.Ссылка as obj,
            Потребитель.Ссылка as consumer,
            Площадка.Наименование as name,
            ISNULL(Площадка.Адрес.Наименование, "") as address,
            Площадка.Адрес.Район as subReg
        FROM
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
        WHERE
            ЕстьСвязь AND Площадка.ПометкаУдаления = false
            AND NOT (ISNULL(Основание.ДатаИзменения, DateTime(0001, 1, 1)) > &CurrentDate) // Change in the future
        GROUP BY
            Площадка.Ссылка,
            Потребитель.Ссылка
    ) as gco2
    ON (gco1.obj = gco2.obj)
WHERE
    gco1.consumer <> gco2.consumer

Код 900. Точки подключения

ТП могут забираться из подключений или площадок.

901. Обязательна привязка к ГРО

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Подключение.Ссылка as obj,
    Подключение.Наименование as name,
    Подключение.ГРО.Ссылка as gdo,
    Подключение.ГРС.Ссылка as gds,
    Подключение.ВыходГРС.Ссылка as outGds,
    Подключение.Территория.Ссылка as region,
    Подключение.РайонПодключения.Ссылка as subReg
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Подключение.ПометкаУдаления = false
    AND (Подключение.ГРО.Ссылка IS NULL OR Подключение.ГРО.ПометкаУдаления = true)

Вариант определения точек подключения по площадкам оборудования:

SELECT
    Ссылка as obj,
    Наименование as name,
    ГРО as gdo,
    ГРС as gds,
    ВыходГРС as outGds,
    Территория as region,
    Адрес.Район as subReg,
    КодСДУ
FROM
    Справочник.ПлощадкиОборудования as pc
WHERE
    ПометкаУдаления = false
    AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)

902. Не найден потребитель ТП

Означает, что потребитель не найден в ИМУС. Следовательно необходимо исправить ошибки, связанные в потребителями.


903. Обязательна привязка к ВыходуГРС

Для того чтобы ТП в ИМУС могла быть привязана к Выходу ГРС у него должен быть обязательно канал. В большинстве случаев, структура поставки не забирается из АИС РГ, а автоматически генерируется от Выходов ГРС. В случае если настроено забирать структуру поставки (УУГ, корректор, канал) создание недостающих элементов возлагается на представителя компании.

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Подключение.Ссылка as obj,
    Подключение.Наименование as name,
    Подключение.ГРО.Ссылка as gdo,
    Подключение.ГРС.Ссылка as gds,
    Подключение.ВыходГРС.Ссылка as outGds,
    Подключение.Территория.Ссылка as region,
    Подключение.РайонПодключения.Ссылка as subReg
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Подключение.ПометкаУдаления = false
    AND (Подключение.ВыходГРС.Ссылка IS NULL OR Подключение.ВыходГРС.ПометкаУдаления = true)

Вариант определения точек подключения по площадкам оборудования:

SELECT
    Ссылка as obj,
    Наименование as name,
    ГРО as gdo,
    ГРС as gds,
    ВыходГРС as outGds,
    Территория as region,
    Адрес.Район as subReg,
    КодСДУ
FROM
    Справочник.ПлощадкиОборудования as pc
WHERE
    ПометкаУдаления = false
    AND (ВыходГРС.Ссылка IS NULL OR ВыходГРС.ПометкаУдаления = true)

903_1. У выхода ГРС канал для привязки должен быть однозначным

В обратной ошибке 903 ситуации, если каналов больше одного (например создавались чтобы отразить структуру ГТО) выдаётся это предупреждение, и привязка происходит к одному любому (недетерминированно). Если необходимо конкретные случаи исправить (чтобы канал по которому идут данные Трансгаза и потребление в ИМУС совпадали) это можно сделать в ИМУС вручную.

Данная ошибка свидетельствует о неоднозначности определения канала по выходу ГРС для ТП. Ошибка появляется при первичном импорте ТП если выход имеет больше 1 канала, проставляется любой из них. Соответственно при последующих импортах будет выдаваться 903_2.

903_2. У выхода ГРС канал для привязки не однозначен, но он проставлен для ТП[1]

Данная ошибка свидетельствует о неоднозначности определения канала по выходу ГРС для ТП как в случае 903_1, но канал уже проставлен (вручную или любой по предыдущему импорту).

904. Желательна привязка к Территории

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Подключение.Ссылка as obj,
    Подключение.Наименование as name,
    Подключение.ГРО.Ссылка as gdo,
    Подключение.ГРС.Ссылка as gds,
    Подключение.ВыходГРС.Ссылка as outGds,
    Подключение.Территория.Ссылка as region,
    Подключение.РайонПодключения.Ссылка as subReg
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Подключение.ПометкаУдаления = false
    AND (Подключение.Территория.Ссылка IS NULL OR Подключение.Территория.ПометкаУдаления = true)

Вариант определения точек подключения по площадкам оборудования:

SELECT
    Ссылка as obj,
    Наименование as name,
    ГРО as gdo,
    ГРС as gds,
    ВыходГРС as outGds,
    Территория as region,
    Адрес.Район as subReg,
    КодСДУ
FROM
    Справочник.ПлощадкиОборудования as pc
WHERE
    ПометкаУдаления = false
    AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)

905. Заполнено наименование

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Подключение.Ссылка as obj,
    Подключение.Наименование as name,
    Подключение.ГРО.Ссылка as gdo,
    Подключение.ГРС.Ссылка as gds,
    Подключение.ВыходГРС.Ссылка as outGds,
    Подключение.Территория.Ссылка as region,
    Подключение.РайонПодключения.Ссылка as subReg
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь AND Подключение.ПометкаУдаления = false
    AND "" = ISNULL(Подключение.Наименование, "")

Вариант определения точек подключения по площадкам оборудования:

SELECT
    Ссылка as obj,
    Наименование as name,
    ГРО as gdo,
    ГРС as gds,
    ВыходГРС as outGds,
    Территория as region,
    Адрес.Район as subReg
FROM
    Справочник.ПлощадкиОборудования as pc
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 1000. Узлы учёта газа

Узлы потребления

РегистрСведений.УзлыУчетаПлощадок.СрезПоследних.

1001. Обязательна привязка к активной, не удалённой площадке

SELECT DISTINCT
    УзелУчета as uug,
    ПлощадкаОборудования as gco
FROM
    РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
WHERE
    ЕстьСвязь
    AND(
        ПлощадкаОборудования.Ссылка IS NULL
        OR
        ПлощадкаОборудования NOT IN(
            SELECT DISTINCT
                Площадка
            FROM
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
            WHERE
                ЕстьСвязь AND Площадка.ПометкаУдаления = false
        )
    )

1002. Дубли не допускаются, другими словами, узел может принадлежать только одной площадке

SELECT uug1.obj, uug1.gco as gco1, uug2.gco as gco2
FROM (
        SELECT DISTINCT
            УзелУчета as obj,
            ПлощадкаОборудования as gco
        FROM
            РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
        WHERE
            ЕстьСвязь
    ) as uug1
    JOIN (
        SELECT DISTINCT
            УзелУчета as obj,
            ПлощадкаОборудования as gco
        FROM
            РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
        WHERE
            ЕстьСвязь
    ) as uug2
    ON (uug1.obj = uug2.obj AND uug1.gco <> uug2.gco)

Ошибка не будет появляться в отчёте, вместо неё будет использоваться общая 5003 с указанием дублирующихся элементов.

1003. Обязательно наличие не пустого имени

SELECT DISTINCT
    УзелУчета as obj,
    ПлощадкаОборудования as gco
FROM
    РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
WHERE
    ЕстьСвязь
    AND "" = ISNULL(УзелУчета.Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Узлы поставки

1020. Необходимо указание Выхода ГРС для площадки подключения узла

SELECT DISTINCT
    uug.УзелУчета as obj,
    out.Ссылка as outGDS
FROM
    РегистрСведений.УзлыУчетаПлощадок.СрезПоследних as uug
    LEFT JOIN Catalog.ВыходыГРС as out ON (uug.УзелУчета = out.УзелУчета)
WHERE
    ЕстьСвязь AND ISNULL(ПлощадкаОборудования.ПризнакНаГРС, false)
    AND (
        out.Ссылка IS NULL
        OR
        out.ПометкаУдаления
    )

Код 1100. Модели корректоров (вычислителей)

1101. Имена не могут быть пустыми

SELECT
    Ссылка as obj,
    Наименование as name
FROM
    Справочник.МоделиВычислителей
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Требование не проверяется автоматически.

1102. Имена должны быть уникальными

SELECT
    Наименование as name
FROM
    Справочник.МоделиВычислителей
WHERE
    ПометкаУдаления = false
GROUP BY
    Наименование
HAVING
    COUNT(*) > 1

Требование не проверяется автоматически.

Код 1200. Корректоры (вычислители)

РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних.

1201. Обязательно должна быть указана модель

.Оборудование.Модель.

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model,
    Оборудование.Наименование as name,
    Оборудование.Модель.Тип.Код as idparam,
    УзелУчета.Ссылка as uug,
    Оборудование.ЗаводскойНомер as fabricNumber
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование ССЫЛКА Справочник.Вычислители
    AND Оборудование.ПометкаУдаления = false
    AND (Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true)

1202. Установленные и активные обязательно должны иметь ссылку на не удалённый и активный узел учёта

SELECT DISTINCT
    equip.Оборудование.Ссылка as obj,
    equip.УзелУчета.Ссылка as uug
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equip
WHERE
    Оборудование.ПометкаУдаления = false AND Оборудование ССЫЛКА Справочник.Вычислители
    AND Оборудование.ПометкаУдаления = false
    AND equip.Установлено AND equip.Активность
    AND (
        УзелУчета.Ссылка IS NULL
        OR equip.УзелУчета NOT IN( // Active
            SELECT УзелУчета
            FROM РегистрСведений.АктивныеУзлыУчета.СрезПоследних
            WHERE АктивностьУзлаУчета AND УзелУчета.ПометкаУдаления = false
        )
    )

1203. Наименование не может быть пустым

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model,
    Оборудование.Наименование as name,
    Оборудование.Модель.Тип.Код as idparam,
    УзелУчета.Ссылка as uug,
    Оборудование.ЗаводскойНомер as fabricNumber
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
    AND Оборудование.ПометкаУдаления = false
    AND "" = ISNULL(Оборудование.Модель.Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

1204. Если есть информация о его серийном номере, она должна быть указана

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model,
    Оборудование.Наименование as name,
    Оборудование.Модель.Тип.Код as idparam,
    УзелУчета.Ссылка as uug,
    Оборудование.ЗаводскойНомер as fabricNumber
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
    AND Оборудование.ПометкаУдаления = false
    AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")

Лишь рекомендация, не проверяется автоматически.

1205. Дубли не допускаются. Иными словами, вычислитель может быть привязан к единственному узлу

SELECT equips1.obj, equips1.uug as uug1, equips2.uug as uug2
FROM (
        SELECT DISTINCT
            Оборудование as obj,
            Оборудование.Модель.Ссылка as model,
            Оборудование.Наименование as name,
            ПлощадкаОборудования as gco,
            УзелУчета.Ссылка as uug
        FROM
            РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
        WHERE
            Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
            AND Оборудование.ПометкаУдаления = false
    ) as equips1
    JOIN (
        SELECT DISTINCT
            Оборудование as obj,
            Оборудование.Модель.Ссылка as model,
            Оборудование.Наименование as name,
            ПлощадкаОборудования as gco,
            УзелУчета.Ссылка as uug
        FROM
            РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
        WHERE
            Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
            AND Оборудование.ПометкаУдаления = false
    ) as equips2
    ON (equips1.obj = equips2.obj AND equips1.uug <> equips2.uug)

Ошибка не будет появляться в отчёте, вместо неё будет использоваться общая 5003 с указанием дублирующихся элементов.

1206. Если указаны даты поверки и следующей поверки, то они должны быть корректными

SELECT
    equips.Оборудование as obj,
    equips.Оборудование.Модель.Ссылка as model,
    equips.Оборудование.Наименование as name,
    equips.Оборудование.ЗаводскойНомер as fabricNumber,
    equips.ПлощадкаОборудования as gco,
    equips.УзелУчета.Ссылка as uug,
    ISNULL(dateCheck.Значение, DateTime(0001, 1, 1)) as dateCheck,
    ISNULL(dateNextCheck.Значение, DateTime(0001, 1, 1)) as dateNextCheck
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equips
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаПоверки") as dateCheck
    ON equips.Оборудование = dateCheck.ИзмерительноеОборудование
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаСледующейПоверки") as dateNextCheck
    ON equips.Оборудование = dateNextCheck.ИзмерительноеОборудование
WHERE
    Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
    AND Оборудование.ПометкаУдаления = false
    AND (
        ISNULL(dateCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
        OR
        ISNULL(dateNextCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
    )

Код 1300. Каналы измерения

Справочник.КаналыВычислителей.

1301. Должны быть привязаны к вычислителю

Теоретически обратного и быть не может. Данный запрос выводит только те записи, где отсутствует владелец, либо владелец помечен на удаление.

SELECT
    Ссылка as obj,
    Наименование as name,
    Владелец.Ссылка as equip
FROM
    Справочник.КаналыВычислителей
WHERE
    ПометкаУдаления = false
    AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)

1302. Рекомендуется вести для каждого вычислителя

Для ИМУС он нужен как минимум один.

Вместо этого возможно использовать генерацию объектов в ИМУС.

Следующий запрос покажет корректоры без каналов:

SELECT
    Оборудование.Наименование as name,
    Оборудование.Модель.Ссылка as model,
    УзелУчета.Ссылка as uug
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Активность AND Оборудование ССЫЛКА Справочник.Вычислители
    AND Оборудование.Ссылка NOT IN(
        SELECT
            Владелец.Ссылка
        FROM
            Справочник.КаналыВычислителей
    )

Лишь рекомендация, не проверяется автоматически.

1303. Наименование не может быть пустым

SELECT DISTINCT
    Ссылка as channel,
    Владелец.Ссылка as equip
FROM
    Справочник.КаналыВычислителей as channels
    JOIN РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equips
    ON (equips.Оборудование.Ссылка = channels.Владелец.Ссылка)
WHERE
    equips.Установлено AND equips.Активность AND equips.Оборудование ССЫЛКА Справочник.Вычислители AND ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

1304. Канал должен иметь уникальное наименование в пределах корректора

Другими словами, не допускается повторение имени канала на одном корректоре. К сожалению частая ситуация, потому что они именуются в основном 1, 2 и т.д.. Данный запрос проверяет наименование между активными каналами одного корректора.

SELECT DISTINCT
    *
FROM
    (
        SELECT DISTINCT
            Ссылка as channel,
            Владелец.Ссылка as equip,
            Наименование as name
        FROM
            Справочник.КаналыВычислителей as channels
            JOIN РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equips
            ON (equips.Оборудование.Ссылка = channels.Владелец.Ссылка)
        WHERE
            equips.Установлено AND equips.Активность AND equips.Оборудование ССЫЛКА Справочник.Вычислители AND ПометкаУдаления = false
    ) as channels1
    JOIN (
        SELECT DISTINCT
            Ссылка as channel,
            Владелец.Ссылка as equip,
            Наименование as name
        FROM
            Справочник.КаналыВычислителей as channels
            JOIN РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equips
            ON (equips.Оборудование.Ссылка = channels.Владелец.Ссылка)
        WHERE
            equips.Установлено AND equips.Активность AND equips.Оборудование ССЫЛКА Справочник.Вычислители AND ПометкаУдаления = false
    ) as channels2
    ON(channels1.equip = channels2.equip AND channels1.name = channels2.name AND channels1.channel <> channels2.channel)

Ограничение схемы БД. Всегда фатально.

Код 1350. Классы газопотребляющего оборудования (ГПО)

Справочник.ТипыГазопотребляющегоОборудования.

1351. Необходимы не пустые названия

SELECT
    Ссылка as obj,
    Наименование as name
FROM
    Справочник.ТипыГазопотребляющегоОборудования
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Для версии конфигурации <= 1.1.7:

SELECT
    Родитель.Ссылка as obj,
    ISNULL(Родитель.Наименование, "") as name
FROM
    Справочник.ТипыГазопотребляющегоОборудования
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Родитель.Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 1400. Типы газопотребляющего оборудования (ГПО)

Справочник.ТипыГазопотребляющегоОборудования.

1401. Необходима привязка к классам ГПО

Справочник.МоделиГазопотребляющегоОборудования.Ссылка.

SELECT
    Ссылка as obj,
    Наименование as name,
    ТипОборудования as gce_class
FROM
    Справочник.МоделиГазопотребляющегоОборудования
WHERE
    ПометкаУдаления = false
    AND (ТипОборудования.Ссылка IS NULL OR ТипОборудования.Ссылка.ПометкаУдаления = true)
  1. Для версии конфигурации <= 1.1.7 - Справочник.ТипыГазопотребляющегоОборудования.Родитель.Ссылка:
SELECT
    Ссылка as obj,
    Родитель.Ссылка as gce_class,
    Наименование as name,
    ISNULL(РасходГазаМаксимальный, 0) as maxConsumption
FROM
    Справочник.ТипыГазопотребляющегоОборудования
WHERE
    ПометкаУдаления = false
    AND (Родитель.Ссылка IS NULL OR Родитель.Ссылка.ПометкаУдаления = true)

1402. Имена не могут быть пустыми

SELECT
    Ссылка as obj,
    Наименование as name,
    ТипОборудования as gce_class
FROM
    Справочник.МоделиГазопотребляющегоОборудования
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Для версии конфигурации <= 1.1.7::

SELECT
    Ссылка as obj,
    Родитель.Ссылка as gce_class,
    Наименование as name,
    ISNULL(РасходГазаМаксимальный, 0) as maxConsumption
FROM
    Справочник.ТипыГазопотребляющегоОборудования
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование)

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 1500. ГПО

РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних.

1501. Необходимы привязки к Типам ГПО

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as gpo_type
FROM
    РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
    AND (
        Оборудование.Модель.Ссылка IS NULL
        OR
        Оборудование.Модель.ПометкаУдаления = true
    )

Для версии конфигурации <= 1.1.7:

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.ТипГазопотребляющегоОборудования.Ссылка as gpo_type,
    Оборудование.Наименование as name
FROM
    РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = falseAND Оборудование.Ссылка IS NOT NULL
    AND (
        Оборудование.ТипГазопотребляющегоОборудования.Ссылка IS NULL
        OR
        Оборудование.ТипГазопотребляющегоОборудования.ПометкаУдаления = true
    )

1502. Необходимы корректные ссылки на Площадки

SELECT
    Оборудование.Ссылка as obj,
    ПлощадкаОборудования.Ссылка as gco
FROM
    РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
    AND (
        ПлощадкаОборудования.Ссылка IS NULL
        OR ПлощадкаОборудования.ПометкаУдаления = true
        OR ПлощадкаОборудования.Ссылка NOT IN(// Active
            SELECT DISTINCT
                Площадка.Ссылка
            FROM
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних as gco
            WHERE
                gco.ЕстьСвязь AND Площадка.ПометкаУдаления = false
        )
    )

1503. Не допускаются пустые имена

SELECT
    Оборудование.Ссылка as obj,
    ISNULL(Оборудование.Наименование, "Error:1503:No name") as name
FROM
    РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = falseAND Оборудование.Ссылка IS NOT NULL
    AND "" = ISNULL(Оборудование.Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

1504. Должен быть указан максимальный расход (0 в крайнем случае)

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.Наименование as name,
    Оборудование.РасходГазаМаксимальный as maxConsumption
FROM
    РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false AND Оборудование.Ссылка IS NOT NULL
    AND ISNULL(Оборудование.РасходГазаМаксимальный, 0) = 0

Требование не проверяется автоматически.

1505. Дубли не допускаются

То есть один экземпляр оборудования может быть установлено только в одном месте.

SELECT
    obj, COUNT(*) as count
FROM (
    SELECT
        Оборудование.Ссылка as obj
    FROM
        РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних
    WHERE
        Установлено AND Оборудование.ПометкаУдаления = false
) as gce
GROUP BY
    obj
HAVING
    COUNT(*) > 1

Ошибка не будет появляться в отчёте, вместо неё будет использоваться общая 5003 с указанием дублирующихся элементов.

1506. Развешивание по каналам

РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних.

1506_1. Узел не найден, или не имеет канала

Канал не указан, и не завершить операцию от узла потому что он не найден в ИМУС или не имеет ни одного канала (вероятно стоит сгенерировать структуру вниз и проверить ошибки загрузки УУГ).

1506_2. Канал не указан, развешивание по узлу, узел имеет несколько каналов => неоднозначность

Канал не указан, и не завершить операцию от узла потому что он имеет более одного канала - имеется неоднозначность.

Речь об узлах в ИМУС, запрос не предполагается.

1506_3. Канал не указан, развешивание по площадке, площадка не имеет каналов

Подобно 1506_2, но включена привязка канала ГПО от площадки. Автоматическая привязка к каналу потребления возможна только если у неё имеется канал в ИМУС и он единственный.

Речь о площадках и каналах ИМУС, запрос не предполагается.

1506_4. Канал не указан, развешивание по площадке, площадка имеет несколько каналов => неоднозначность

Включена привязка канала ГПО от площадки. Автоматическая привязка к каналу потребления возможна только если у площадки ИМУС, соответствующей той, на которой он установлен в АИС имеется единственный канал.

Речь о площадках и каналах ИМУС, запрос не предполагается.

Код 1560. Типы измерительного оборудования

1561. Необходимо заполнение у моделей

SELECT DISTINCT
    Оборудование.Ссылка as obj,
    ISNULL(Оборудование.Тип.Ссылка, ISNULL(Оборудование.ТипДатчика.Ссылка, Оборудование.Модель.Тип.Ссылка)) as type
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено
    AND NOT Оборудование ССЫЛКА Catalog.Вычислители
    AND NOT Оборудование ССЫЛКА Catalog.ИзмерительныеКомплексы
    AND ISNULL(Оборудование.Тип.Ссылка, ISNULL(Оборудование.ТипДатчика.Ссылка, Оборудование.Модель.Тип.Ссылка)) IS NULL

Код 1580. Модели измерительного оборудования

1581. Не может быть пустых имён

SELECT * FROM(
SELECT DISTINCT
    Ссылка as obj,
    "Датчик" as type,
    Наименование as name,
    ISNULL(ПРЕДСТАВЛЕНИЕ(Тип.ИзмеряемыйПараметр), "") as param,
    ПометкаУдаления as deleted
FROM
    Справочник.МоделиДатчиков
UNION ALL
SELECT DISTINCT
    Ссылка,
    "Измерительный комплекс",
    Наименование,
    "Комплекс",
    ПометкаУдаления as deleted
FROM
    Справочник.МоделиИзмерительныхКомплексов
UNION ALL
SELECT DISTINCT
    Ссылка,
    "Планиметр",
    Наименование,
    "расход",
    ПометкаУдаления as deleted
FROM
    Справочник.МоделиПланиметров
UNION ALL
SELECT DISTINCT
    Ссылка,
    "Сужающее устройство",
    Наименование,
    "расход",
    ПометкаУдаления as deleted
FROM
    Справочник.МоделиСужающихУстройств
UNION ALL
SELECT DISTINCT
    Ссылка,
    "Счетчик",
    Наименование,
    ISNULL(ПРЕДСТАВЛЕНИЕ(Тип), ""),
    ПометкаУдаления as deleted
FROM
    Справочник.МоделиСчетчиков
) as gmm
WHERE
    deleted = false
    AND "" = ISNULL(name, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

1582. Поле "Емкость счетного механизма" заполнено некорректно

Поле "Емкость счетного механизма" заполнено некорректно

Код 1600. Измерительное оборудование

РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних, данные также должны быть корректны во всех низлежащих справочниках: Справочник.Датчики, Справочник.ИзмерительныеКомплексы, Справочник.Планиметры, Справочник.СужающиеУстройства, Справочник.Счетчики.

1601. Необходимы корректные ссылки на Модели

SELECT
    Оборудование.Ссылка as obj,
    Оборудование.Модель.Ссылка as model
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false
    AND (
    	Оборудование ССЫЛКА Справочник.Датчики
    	 OR
    	Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
    	 OR
    	Оборудование ССЫЛКА Справочник.Планиметры
    	 OR
    	Оборудование ССЫЛКА Справочник.СужающиеУстройства
    	 OR
    	Оборудование ССЫЛКА Справочник.Счетчики
    )
    AND ( Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true )

1602. Необходимы ссылки на активные, не удалённые узлы

SELECT
    Оборудование.Ссылка as obj,
    УзелУчета.Ссылка as uug
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false
    AND (
    	Оборудование ССЫЛКА Справочник.Датчики
    	 OR
    	Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
    	 OR
    	Оборудование ССЫЛКА Справочник.Планиметры
    	 OR
    	Оборудование ССЫЛКА Справочник.СужающиеУстройства
    	 OR
    	Оборудование ССЫЛКА Справочник.Счетчики
    )
    AND (
        УзелУчета.Ссылка IS NULL
        OR УзелУчета.ПометкаУдаления = true
        OR УзелУчета.Ссылка NOT IN(
            SELECT DISTINCT
                УзелУчета.Ссылка as obj
            FROM
                РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
            WHERE
                ЕстьСвязь
        )
    )

1603. Желательны заводские номера

SELECT
    Оборудование.Ссылка as obj,
    ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false
    AND (
    	Оборудование ССЫЛКА Справочник.Датчики
    	 OR
    	Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
    	 OR
    	Оборудование ССЫЛКА Справочник.Планиметры
    	 OR
    	Оборудование ССЫЛКА Справочник.СужающиеУстройства
    	 OR
    	Оборудование ССЫЛКА Справочник.Счетчики
    )
    AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")

Лишь рекомендация, не проверяется автоматически.

1604. Должны быть уникальны

SELECT
    Оборудование.Ссылка as obj,
    УзелУчета.Ссылка as uug
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false
    AND(
    	Оборудование ССЫЛКА Справочник.Датчики
    	 OR
    	Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
    	 OR
    	Оборудование ССЫЛКА Справочник.Планиметры
    	 OR
    	Оборудование ССЫЛКА Справочник.СужающиеУстройства
    	 OR
    	Оборудование ССЫЛКА Справочник.Счетчики
    )
GROUP BY
    Оборудование.Ссылка, УзелУчета.Ссылка
HAVING COUNT(*) > 1

Ошибка не будет появляться в отчёте, вместо неё будет использоваться общая 5003 с указанием дублирующихся элементов.

1605. Желательны даты поверки и следующей поверки

SELECT
    Оборудование.Ссылка as obj,
    ISNULL(Оборудование.ЗаводскойНомер, "") as fabricNumber
FROM
    РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаПоверки") as dateCheck
    ON ( Оборудование.Ссылка = DateCheck.ИзмерительноеОборудование AND NOT dateCheck.Значение ССЫЛКА Перечисление.СостоянияОборудования )
    LEFT JOIN РегистрСведений.ПараметрыИзмерительногоОборудования.СрезПоследних(, Идентификатор = "ДатаСледующейПоверки") as dateNextCheck
    ON ( Оборудование.Ссылка = dateNextCheck.ИзмерительноеОборудование )
WHERE
    Установлено AND Оборудование.ПометкаУдаления = false
    AND (
    	Оборудование ССЫЛКА Справочник.Датчики
    	 OR
    	Оборудование ССЫЛКА Справочник.ИзмерительныеКомплексы
    	 OR
    	Оборудование ССЫЛКА Справочник.Планиметры
    	 OR
    	Оборудование ССЫЛКА Справочник.СужающиеУстройства
    	 OR
    	Оборудование ССЫЛКА Справочник.Счетчики
    )
    AND(
       ISNULL(dateCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
       OR
       ISNULL(dateNextCheck.Значение, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
       OR
        ( ВЫРАЗИТЬ(dateCheck.Значение as Date) IS NULL AND dateCheck.Значение <> "01.01.0001 0:00:00" )
       OR
       ( ВЫРАЗИТЬ(dateNextCheck.Значение as Date) IS NULL AND dateNextCheck.Значение <> "01.01.0001 0:00:00" )
   )

Ошибка в отчёте будет только в случае указания некорректной даты, но не в случае её отсутствия.

1606. Рекомендуется указание канала

РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних, данные также должны быть корректны во всех низлежащих справочниках: Датчики, ИзмерительныеКомплексы, Планиметры, СужающиеУстройства, Счётчики.

Данная ошибка означает что канал указан в АИС, но не найден в ИМУС.

1606_1. Узел не имеет канала

Канал не задан в АИС или у указанного УУГ больше 1 канала. Канал не проставлен (null). Нужно выбрать канал вручную в ИМУС или АИС РГ или обеспечить однозначность от УУГ.

Следующий запрос покажет измерители без каналов. Обратите внимание, если каналы не ведутся, мы не настаиваем на их генерации в АИС, рекомендуем лишь в неоднозначных случаях:

SELECT
   Оборудование.Ссылка as obj,
   УзелУчета.Ссылка as uug,
   ИзмерительныйТрубопровод as channel
FROM
   РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних
WHERE
   Установлено AND NOT Оборудование ССЫЛКА Справочник.Вычислители
   AND ИзмерительныйТрубопровод.Ссылка IS NULL

1606_2. Узел имеет несколько каналов, новый измеритель (удалено с адаптера 19.5.pre31.9.0.7)

Утратил силу с версии адаптера 19.5.pre3. ESB-13601.9.0.7.

Для предыдущих версий:

Канал не указан и у указанного УУГ больше 1 канала. Измеритель уже был сохранён в ИМУС ранее, но канал в нём не проставлен. Нужно выбрать канал вручную в ИМУС или АИС, или обеспечить однозначность от узла.

Речь об узлах в ИМУС, запрос не предполагается.

1606_3. Узел имеет несколько каналов, но в измерителе уже он конкретизирован

Канал в АИС не задан в АИС и у указанного УУГ больше 1 канала. Имеется неоднозначность, но сам измеритель уже привязан к каналу. Вероятно был указан в ИМУС вручную и данная проблема может быть просто проигнорирована.

Код 1650. Виды договоров

Справочник.ВидыДоговоров.

1651. Пустые имена не допустимы

SELECT
    Ссылка as obj,
    Наименование as name
FROM
    Справочник.ВидыДоговоров
WHERE
    ПометкаУдаления = false
    AND "" = ISNULL(Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

Код 1700. Договоры

Справочник.ДоговорыГазовые, РегистрСведений.ПараметрыДоговора.СрезПоследних. В реальном веб-сервисе загрузка происходит из РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate), если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа НеСвязыватьПлощадкуСДоговором), то из РегистрНакопления.ПланыПоставок, с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, нежели представлено в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев.

К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчёте. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ, могут быть исправлены по желанию компании.

1701. Корректно проставлен вид ценообразования

ДоговорыГазовые.ВидПрейскуранта.

SELECT DISTINCT
    Ссылка as obj,
    ВидПрейскуранта as priority
FROM
    Справочник.ДоговорыГазовые
WHERE
    ПометкаУдаления = false
    AND ВидПрейскуранта.Ссылка IS NULL

1702. Корректны все даты — начала, окончания, подписания и расторжения

С версии 19.4 добавлены проверки дат подписания и расторжения. Обязательна только дата подписания. Остальные проверятся лишь на корректность.

SELECT DISTINCT
   ДоговорыГазовые.Ссылка,
   ДоговорыГазовые.ВидДоговора.Ссылка,
   ДоговорыГазовые.Наименование,
   ДоговорыГазовые.ДатаНачала,
   ДоговорыГазовые.ДатаКонца,
   ДоговорыГазовые.ДатаОкончательногоПодписания,
   ДоговорыГазовые.ДатаРасторжения,
   ДоговорыГазовые.Владелец.Ссылка,
   ДоговорыГазовые.ПометкаУдаления
FROM
   Справочник.ДоговорыГазовые as ДоговорыГазовые
   LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
WHERE
   ДоговорыГазовые.ПометкаУдаления = false
   
    AND(
         (
          	ДоговорыГазовые.ДатаНачала = DateTime(1,1,1)
        	OR ISNULL(ДоговорыГазовые.ДатаНачала, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
         	OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаНачала as Date) IS NULL
         )
         OR
         (
          ДоговорыГазовые.ДатаКонца <> DateTime(1,1,1)
         	AND (
        		ISNULL(ДоговорыГазовые.ДатаКонца, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
         		OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаКонца as Date) IS NULL
         	)
         )
         OR
         (
          ДоговорыГазовые.ДатаОкончательногоПодписания <> DateTime(1,1,1)
         	AND (
        		ISNULL(ДоговорыГазовые.ДатаОкончательногоПодписания, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
         		OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаОкончательногоПодписания as Date) IS NULL
         	)
         )
         OR
         (
          ДоговорыГазовые.ДатаРасторжения <> DateTime(1,1,1)
         	AND (
        		ISNULL(ДоговорыГазовые.ДатаРасторжения, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
         		OR ВЫРАЗИТЬ(ДоговорыГазовые.ДатаРасторжения as Date) IS NULL
         	)
         )
    )
    

1703. Потребитель - владелец заполнен, не удалён и активен

SELECT DISTINCT
    ДоговорыГазовые.Ссылка as obj,
    ДоговорыГазовые.ВидДоговора.Ссылка as priority,
    ДоговорыГазовые.Наименование as number,
    ДоговорыГазовые.ДатаНачала as dateStart,
    ДоговорыГазовые.ДатаКонца as dateEnd,
    ДоговорыГазовые.Владелец.Ссылка as consumer,
    ДоговорыГазовые.ПометкаУдаления as deleted
FROM
    Справочник.ДоговорыГазовые as ДоговорыГазовые
    LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
WHERE
    ДоговорыГазовые.ПометкаУдаления = false
    AND ДоговорыГазовые.Владелец.Ссылка NOT IN (
        SELECT DISTINCT
            Выборка.obj
        FROM
            (
            SELECT
                ДоговорыГазовые.Владелец.Ссылка as obj,
                ДоговорыГазовые.Владелец.Наименование as name,
                ДоговорыГазовые.Владелец.ИНН as inn,
                ДоговорыГазовые.Владелец.ОтрасльГазпрома.Ссылка as industry,
                ДоговорыГазовые.Владелец.Ссылка as parent,
                ДоговорыГазовые.Владелец.Территория.Ссылка as region,
                ДоговорыГазовые.Владелец.ПометкаУдаления as deleted
            FROM
                Справочник.ДоговорыГазовые as ДоговорыГазовые
            UNION ALL
            SELECT
                РеестрКонечныхПотребителей.Контрагент.Ссылка as obj,
                РеестрКонечныхПотребителей.Контрагент.Наименование as name,
                РеестрКонечныхПотребителей.Контрагент.ИНН as inn,
                РеестрКонечныхПотребителей.Контрагент.ОтрасльГазпрома.Ссылка as industry,
                РеестрКонечныхПотребителей.Ссылка.Владелец.Ссылка as parent,
                РеестрКонечныхПотребителей.Контрагент.Территория.Ссылка as region,
                РеестрКонечныхПотребителей.Контрагент.ПометкаУдаления as deleted
            FROM
                Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей as РеестрКонечныхПотребителей
            WHERE
                РеестрКонечныхПотребителей.Контрагент <> РеестрКонечныхПотребителей.Ссылка.Владелец
            ) as Выборка
        WHERE
            Выборка.obj IS NOT NULL
            AND Выборка.deleted = false
    )

1704. Номер (наименование) договора не может быть пустым

SELECT DISTINCT
    ДоговорыГазовые.Ссылка as obj,
    ДоговорыГазовые.ВидДоговора.Ссылка as priority,
    ДоговорыГазовые.Наименование as number,
    ДоговорыГазовые.ДатаНачала as dateStart,
    ДоговорыГазовые.ДатаКонца as dateEnd,
    ДоговорыГазовые.Владелец.Ссылка as consumer
FROM
    Справочник.ДоговорыГазовые as ДоговорыГазовые
    LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
WHERE
    ДоговорыГазовые.ПометкаУдаления = false
    AND "" = ISNULL(ДоговорыГазовые.Наименование, "")

Пустые имена будут при импорте заменены автоматически на строку "<empty>"

1705. Заполнен поставщик газа, он не удалён

В ИМУС будет полем продавец газа субъекта распределения. Критично для независимой поставки. Если поставщик не заполнен, будет подставлен (без индикации данной ошибки) контрагент из Catalogs.Контрагенты.НашаОрганизация

SELECT DISTINCT
   Договор.Поставщик
FROM
   РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
   ЕстьСвязь
   AND Договор.Поставщик.Ссылка NOT IN(
      SELECT
          Ссылка
      FROM
          Справочник.Контрагенты
      WHERE
          ПризнакПоставщика AND NOT ПометкаУдаления
   )

С версии 18.pre4.

Код 1800. Связь договоров с точками подключения

РегистрСведений.ПлощадкиПоДоговору.СрезПоследних.

1801. Заполнены у всех обе сущности

(deprecated in с версии ~16) и больше не используется вместе с командой AttachPcToContract.

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Подключение.Ссылка as pc,
    Договор.Ссылка as contract,
    Договор.ДатаНачала as contractBegin,
    Договор.ДатаКонца as contractEnd
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь
    AND Подключение.ПометкаУдаления = false AND Договор.ПометкаУдаления = false
    AND Договор <> ЗНАЧЕНИЕ(Справочник.ДоговорыГазовые.ПустаяСсылка)
    AND (
        Подключение.Ссылка IS NULL
        OR
        Договор.Ссылка IS NULL
        OR
        Договор NOT IN(
            SELECT DISTINCT
                Ссылка
            FROM
                Справочник.ДоговорыГазовые
            WHERE
                ПометкаУдаления = false
                AND ДатаНачала >= DateTime(2002, 1, 1) AND ДатаКонца <= DateTime(2022, 1, 1)
        )
    )

Вариант определения точек подключения по площадкам оборудования:

SELECT DISTINCT
    Площадка.Ссылка as pc,
    Договор.Ссылка as contract
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    ЕстьСвязь
    AND Договор <> ЗНАЧЕНИЕ(Справочник.ДоговорыГазовые.ПустаяСсылка)
    AND (
        Площадка.Ссылка IS NULL
        OR
        Договор.Ссылка IS NULL
        OR
        Площадка.Ссылка NOT IN (
            SELECT DISTINCT
                Площадка.Ссылка
            FROM
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
            WHERE
                ЕстьСвязь
        )
        OR
        Договор.Ссылка NOT IN (
            SELECT DISTINCT
                Ссылка
            FROM
                Справочник.ДоговорыГазовые
        )
    )

Код 1850. Связь площадок с точками подключения

РегистрСведений.ПлощадкиПоДоговору.СрезПоследних c ЕстьСвязь = true. В вырожденных случаях, когда не ведутся точки или подключения в АИС РГ, отсутствующий элемент будет сгенерирован, и в таком случае связывание будет происходить автоматически и данные ошибки не будут иметь смысла.

1851. Заполнены у всех обе сущности

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Подключение.Ссылка as pc,
    Площадка.Ссылка as gco
FROM
    РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
    Подключение.ПометкаУдаления = false AND Площадка.ПометкаУдаления = false
    AND ЕстьСвязь
    AND (Подключение.Ссылка IS NULL OR Площадка.Ссылка IS NULL)

1852. Для связывания ТП с площадкой в ИМУС, у площадки должен обязательно быть канал

Если такая детализация не ведётся в АИС, можно использовать генерацию объектов в ИМУС.

Если необходимо в АИС РГ выбрать площадки без каналов, например в случае если принято решение вести всю структуру там, это можно сделать следующим запросом:

SELECT DISTINCT
   gcos.Площадка as gco,
   uugs.УзелУчета as uug,
   equips.Оборудование as equip,
   channels.Ссылка as channel
FROM
   РегистрСведений.ПлощадкиПоДоговору.СрезПоследних as gcos
   LEFT JOIN РегистрСведений.УзлыУчетаПлощадок.СрезПоследних as uugs
   ON (uugs.ПлощадкаОборудования = gcos.Площадка AND uugs.ЕстьСвязь)
   LEFT JOIN РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних as equips
   ON (equips.УзелУчета = uugs.УзелУчета AND equips.Установлено AND equips.Активность AND equips.Оборудование ССЫЛКА Справочник.Вычислители)
   LEFT JOIN Справочник.КаналыВычислителей as channels
   ON (equips.Оборудование = channels.Владелец)
WHERE
   gcos.ЕстьСвязь
   AND channels.Ссылка IS NULL

1853. Наличие уникальной активной связи ТП с Площадкой

Автоматическое связывание возможно только если они связаны один к одному в текущий момент времени (в регистре наличествует единственная запись с ЕстьСвязь). Выбрать активные не единичные связки можно следующим запросом:

SELECT gco1.gco, gco1.pc as pc1, gco2.pc as pc2
FROM
    (
    SELECT DISTINCT
        Площадка.Ссылка as gco,
        Подключение.Ссылка as pc
    FROM
        РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
    WHERE
        ЕстьСвязь
        AND Подключение.ПометкаУдаления = false
        AND Площадка.ПометкаУдаления = false
    ) as gco1
    JOIN
    (
    SELECT DISTINCT
        Площадка.Ссылка as gco,
        Подключение.Ссылка as pc
    FROM
        РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
    WHERE
        ЕстьСвязь
        AND Подключение.ПометкаУдаления = false
        AND Площадка.ПометкаУдаления = false
    ) as gco2
    ON (gco1.gco = gco2.gco AND gco1.pc <> gco2.pc)

1853_1. Связь площадки с ТП не уникальна в АИС, но они связаны в ИМУС

В дополнение к коду 1853 показывает что из АИС пришла не уникальная связка, но в ИМУС площадка связана всеми каналами. Предположительно вручную. Проблема вероятно решена, и при желании эту ошибку можно отключить.

Код 1900. Планы потребления

РегистрНакопления.ПланыПоставок.

1901. Указан действующий вид газа

Т.к. виды газа загружаются из используемых в текущем году в планах, ситуация что они не найдены практически не реальна. Если вы видите данную ошибку, вероятнее всего стоит проверить что команда загрузки видов газа выполнялась перед загрузкой планов.

Для РегистрНакопления.ПланыПоставок такого разреза нет.

Ошибка 1901_1 будет если он не замаплен.

1902. Указан сам лимит потребления на дату

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    Количество as amount
FROM
    РегистрНакопления.ПланыПоставок
WHERE
    Активность
    AND Количество IS NULL

Независимая поставка

SELECT
    Период,
    Подключение,
    Договор.Владелец as Покупатель,
    Договор,
    Поставка,
    ПланМесяц as ПланМесяц,
    ПланСутки as ПланСутки
FROM
    РегистрСведений.НезависимыеПотребители.СрезПоследних
WHERE
    ПризнакАктивности
    AND ПланМесяц IS NULL OR ПланСутки IS NULL

Требование не проверяется автоматически, является общим и теоретически и так не возможным

1903. Участвующие в планах подключения должны быть активны

Это значит они должны быть представлены в РегистрСведений.ПлощадкиПоДоговору.СрезПоследних c ЕстьСвязь = true.

Вариант определения точек подключения по подключениям:

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    Подключение.Ссылка as pc,
    Подключение.ВнешнийКлюч as pcForeignKey,
    SUM(Количество) as amount
FROM
    РегистрНакопления.ПланыПоставок
WHERE
    Активность
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND Подключение NOT IN(
        SELECT DISTINCT
            Подключение
        FROM
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
        WHERE
            ЕстьСвязь
            AND Подключение.ПометкаУдаления = false
    )
GROUP BY
    Период,
    Договор.ОсновнойДоговор.Ссылка,
    Подключение.Ссылка
ORDER BY Период

Вариант определения точек подключения по площадкам оборудования:

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    ПлощадкаОборудования.Ссылка as pc,
    SUM(Количество) as amount
FROM
    РегистрНакопления.ПланыПоставок
WHERE
    Активность
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND ПлощадкаОборудования NOT IN(
        SELECT DISTINCT
            Площадка
        FROM
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
        WHERE
            ЕстьСвязь
            AND Площадка.ПометкаУдаления = false
    )
GROUP BY
    Период,
    Договор.ОсновнойДоговор.Ссылка,
    ПлощадкаОборудования.Ссылка
ORDER BY Период

Независимая поставка

SELECT
   Период,
   Подключение,
   Договор.Владелец as Покупатель,
   Договор,
   Поставка,
   ПланМесяц as ПланМесяц,
   ПланСутки as ПланСутки
FROM
   РегистрСведений.НезависимыеПотребители.СрезПоследних
WHERE
   ПризнакАктивности
      AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
      AND Подключение NOT IN(
         SELECT DISTINCT
            Подключение
         FROM
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
         WHERE
            ЕстьСвязь
            AND Подключение.ПометкаУдаления = false
     )

1904. Участвующие в планах договоры должны быть активны

То есть должны быть представлены в РегистрСведений.ПлощадкиПоДоговору.СрезПоследних c ЕстьСвязь = true.

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    Подключение.Ссылка as pc,
    Подключение.ВнешнийКлюч as pcForeignKey,
    SUM(Количество) as amount
FROM
    РегистрНакопления.ПланыПоставок as plan
    LEFT JOIN(
        SELECT
            Договор as terminationContract,
            ISNULL(MAX(ДатаРасторжения), MAX(Дата)) as terminationDate
        FROM
            Документ.РасторжениеДоговора
        WHERE
            ПометкаУдаления = false
        GROUP BY // Single row with max date only
            Договор
    ) as termination
    ON (plan.Договор.ОсновнойДоговор.Ссылка = termination.terminationContract)
WHERE
    Активность
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND (
        termination.terminationContract IS NOT NULL
        OR Договор NOT IN (
            SELECT DISTINCT
                Договор
            FROM
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
            WHERE
                ЕстьСвязь
                AND Договор.ПометкаУдаления = false
        )
    )
GROUP BY
    Период,
    Договор.ОсновнойДоговор.Ссылка,
    Подключение.Ссылка
ORDER BY Период

Независимая поставка

SELECT
   Период,
   Подключение,
   Договор.Владелец as Покупатель,
   Договор,
   Поставка,
   ПланМесяц as ПланМесяц,
   ПланСутки as ПланСутки
FROM
   РегистрСведений.НезависимыеПотребители.СрезПоследних as plan
   LEFT JOIN(
        SELECT
            Договор as terminationContract,
            ISNULL(MAX(ДатаРасторжения), MAX(Дата)) as terminationDate
        FROM
            Документ.РасторжениеДоговора
        WHERE
            ПометкаУдаления = false
        GROUP BY // Single row with max date only
            Договор
    ) as termination
    ON (plan.Договор.ОсновнойДоговор.Ссылка = termination.terminationContract)
WHERE
   ПризнакАктивности
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND (
        termination.terminationContract IS NOT NULL
        AND Договор NOT IN(
            SELECT DISTINCT
                Договор
            FROM
                РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
            WHERE
                ЕстьСвязь
                AND Договор.ПометкаУдаления = false
        )
    )

1905. Обязательно заполнена Поставка

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    Подключение.Ссылка as pc,
    SUM(Количество) as amount
FROM
    РегистрНакопления.ПланыПоставок as plan
WHERE
    Активность
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND Поставка.Ссылка IS NULL
GROUP BY
    Период,
    Договор.ОсновнойДоговор.Ссылка,
    Подключение.Ссылка
ORDER BY Период

Независимая поставка

SELECT
   Период,
   Подключение,
   Договор.Владелец as Покупатель,
   Договор,
   Поставка,
   ПланМесяц as ПланМесяц,
   ПланСутки as ПланСутки
FROM
   РегистрСведений.НезависимыеПотребители.СрезПоследних as plan
WHERE
   ПризнакАктивности
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND Поставка.Ссылка IS NULL

1906. Крайне желательно заполнение категории потребления

На самом деле не обязательным является само заполнение, если не ведётся вообще. Критической проблемой это становится в случае когда часть заполнена, часть нет - появляются лишние Субъекты распределения, могут появляться неполные и/или отрицательные планы.

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    Подключение.Ссылка as pc,
    SUM(Количество) as amount
FROM
    РегистрНакопления.ПланыПоставок as plan
WHERE
    Активность
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND КатегорияПотребления.Ссылка IS NULL
GROUP BY
    Период,
    Договор.ОсновнойДоговор.Ссылка,
    Подключение.Ссылка
ORDER BY Период

1907. Площадки, участвующие в планах должны быть активны (если используются в планах)

Если ведутся планы в разрезе площадок, они должны быть активными и загруженными в ИМУС

SELECT DISTINCT
    Период as date,
    Договор.ОсновнойДоговор.Ссылка as contract,
    ПлощадкаОборудования.Ссылка as gco,
    SUM(Количество) as amount
FROM
    РегистрНакопления.ПланыПоставок as plan
    LEFT JOIN(
        SELECT
            Договор as terminationContract,
            ISNULL(MAX(ДатаРасторжения), MAX(Дата)) as terminationDate
        FROM
            Документ.РасторжениеДоговора
        WHERE
            ПометкаУдаления = false
        GROUP BY // Single row with max date only
            Договор
    ) as termination
    ON (plan.Договор.ОсновнойДоговор.Ссылка = termination.terminationContract)
WHERE
    Активность
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND termination.terminationContract IS NOT NULL
    AND ПлощадкаОборудования NOT IN(
        SELECT DISTINCT
            Площадка
        FROM
            РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
        WHERE
            ЕстьСвязь
            AND Договор.ПометкаУдаления = false
    )
GROUP BY
    Период,
    Договор.ОсновнойДоговор.Ссылка,
    ПлощадкаОборудования.Ссылка
ORDER BY Период

1908. План должен быть неотрицательным

Суммарные планы (сумма всех изменений, которые не грузятся по отдельности, берётся сумма всех по субъекту распределения) должны быть не отрицательными:

SELECT DISTINCT
    Период,
    SUM(Количество) as amount,
    Договор.ОсновнойДоговор as contract,
    Договор.ВидПрейскуранта as priority,
    Подключение as pc,
    ПлощадкаОборудования as gco,
    КатегорияПотребления as consType,
    Поставка as purchaseContract
FROM
    РегистрНакопления.ПланыПоставок
WHERE
    Активность
    AND Период BETWEEN DateTime(2013, 1, 1) AND DateTime(2013, 12, 31)
GROUP BY
    Период,
    Договор.ОсновнойДоговор,
    Договор.ВидПрейскуранта,
    Подключение,
    ПлощадкаОборудования,
    КатегорияПотребления,
    Поставка
HAVING
    SUM(Количество) < 0

К данному запросу следует отметить, что если не ведётся разрез планов в компании по площадкам или подключениям, группировка по данному элементу должна быть исключена из приведённого запроса.

Независимая поставка

SELECT
   Период,
   Подключение,
   Договор.Владелец as Покупатель,
   Договор,
   Поставка,
   ПланМесяц,
   ПланСутки
FROM
   РегистрСведений.НезависимыеПотребители.СрезПоследних as plan
WHERE
   ПризнакАктивности
    AND Период BETWEEN DateTime(2012, 5, 1) AND DateTime(2012, 5, 31)
    AND ( ПланМесяц < 0 OR ПланСутки < 0 )

1909. Указано не целое число кубов в плане

Ошибка: Дробный регулярный план.


SELECT
   Период,
   Количество,
   Договор,
   Документ,
   Поставка,
   ПлощадкаОборудования
   ТипПлана
FROM
    РегистрНакопления.ПланыПоставок
WHERE
   Активность
   AND Период between ДатаВремя(2018,11,01) AND ДатаВремя(2018,11,30)
   AND (Количество*1000)-(Выразить(Количество как число(30,3))*1000) <>0
   AND ТипПлана.Порядок <> 4


Ошибка: Дробный план для независимой поставки.

SELECT
    Период,
    Договор,
    Площадка,
    Поставка,
    ПланМесяц,
    ПланСутки
FROM
    РегистрСведений.НезависимыеПотребители
WHERE
    ПризнакАктивности
    AND Период BETWEEN ДатаВремя(2018,5,01) AND ДатаВремя(2018,5,31)
    AND Договор.ОсновнойДоговор.Ссылка IS NOT NULL
    AND (ПланМесяц*1000)-(Выразить(ПланМесяц как число(30,3))*1000) <>0

Код 2000. Поставка (закупка)

Справочник.ПоставкиГаза.

C версии 18.pre2 грузятся только те, даты действия договоров которых включают текущее число.

2001. Должен быть заполнен производитель газа

SELECT DISTINCT
   Ссылка as obj,
   Производитель as producer
FROM
   Справочник.ПоставкиГаза
WHERE
   ПометкаУдаления = false
   AND (
       Производитель.Ссылка IS NULL
        OR
       Производитель.ПометкаУдаления = true
        OR
       Производитель NOT IN(
           SELECT
               Ссылка
           FROM
               Справочник.Контрагенты
           WHERE
               ПризнакПроизводителя = true AND NOT ПометкаУдаления
       )
)

2001_1. Необходимо сопоставление (маппинг) производителя газа во внешних системах в ИМУС

2002. Заполнен поставщик газа (владелец договора поставки)

SELECT DISTINCT
    Ссылка as obj,
    Владелец.Владелец as supplier
FROM
    Справочник.ПоставкиГаза
WHERE
    ПометкаУдаления = false
    AND (
        Владелец.Владелец.Ссылка IS NULL
        OR
        Владелец.Владелец.ПометкаУдаления = true
    )

2003. Заполнен владелец газа (продавец газа)

SELECT DISTINCT
    Ссылка as obj,
    ВладелецГаза as vendor
FROM
    Справочник.ПоставкиГаза
WHERE
    ПометкаУдаления = false
    AND (
        ВладелецГаза.Ссылка IS NULL
        OR
        ВладелецГаза.ПометкаУдаления = true
    )

2004. Заполнен вид ценообразования

SELECT DISTINCT
    Ссылка as obj,
    ВидЦенообразования as priority
FROM
    Справочник.ПоставкиГаза
WHERE
    ПометкаУдаления = false
    AND ВидЦенообразования.Ссылка IS NULL

2005. Имеются корректные даты начала и конца договора закупки (поставки)

SELECT DISTINCT
    Ссылка as obj,
    Владелец.ДатаНачала as dateStart,
    Владелец.ДатаКонца as dateEnd
FROM
    Справочник.ПоставкиГаза
WHERE
    ПометкаУдаления = false
    AND(
        ISNULL(Владелец.ДатаНачала, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
        OR
        ISNULL(Владелец.ДатаКонца, DateTime(3000, 1, 1)) < DateTime(1945, 1, 1)
        OR
        (
            ВЫРАЗИТЬ(Владелец.ДатаНачала as Date) IS NULL
            AND Владелец.ДатаНачала <> "01.01.0001 0:00:00"
        )
        OR
        (
            ВЫРАЗИТЬ(Владелец.ДатаКонца as Date) IS NULL
            AND Владелец.ДатаКонца <> "01.01.0001 0:00:00"
        )
    )

2006. Заполнен код номенклатуры

SELECT DISTINCT
    Ссылка as obj,
    ВидЦенообразования as priority
FROM
    Справочник.ПоставкиГаза
WHERE
    ПометкаУдаления = false
    AND КодНоменклатуры.Ссылка IS NULL

Грузятся только договоры, включающие текущую дату в диапазон начала и конца действия, можно проверять и исправлять только их.

2007. Актуален договор закупки

SELECT DISTINCT
    Ссылка as obj,
    Владелец
FROM
    Справочник.ПоставкиГаза
WHERE
    ПометкаУдаления = false
    AND Владелец.ДатаКонца >= BeginOfPeriod(&CurrentDate, DAY) // Current and future
    AND Владелец NOT IN (
        SELECT Владелец
        FROM Справочник.ПоставкиГаза
        WHERE
            Владелец.ДатаКонца >= BeginOfPeriod(&CurrentDate, DAY) // Current and future
            AND Владелец.ПометкаУдаления = false
    )

CurrentDate предполагается датой на момент загрузки.

Код 2100. Границы (коридоры) перебора и недобора

Справочник.ВидыПеребораИНедобора.

2101. Для элементов недобора необходимо указать ДопустимыйНедобор и ДопустимыйПеребор в обратном случае

Одного шаблона расчета не достаточно. В процентах.

SELECT
    Ссылка,
    ДопустимыйНедобор,
    ДопустимыйПеребор,
    ШаблонРасчета
FROM
    Справочник.ВидыПеребораИНедобора
WHERE
    ПометкаУдаления = false
    AND (0 = ISNULL(ДопустимыйНедобор, 0) AND 0 = ISNULL(ДопустимыйПеребор, 0))

Требование не проверяется автоматически.

Код 2200. Автомаппинг телеметрии

РегистрСведений.СинхронизацияССистемамиТелеметрии.СрезПоследних где установлен признак ВыполнятьСинхронизацию.

Не обязательная операция автоматического переноса связей с системами телеметрии. Команда добавлена для удобства ведения маппинга в одной системе, если использование не планируется, данные ошибки можно не проверять.

2201. Не указано сопоставление внешних систем в настройках

Приходит объект с внешней системой, для которой не указано соответствие системы в ИМУС.

2201_1. Не указано сопоставление внешних систем в настройках, но настроен её пропуск

Для системы объекта настроен пропуск. Объект пропущен.

2202. Не найден метаканал метаузла

Из АИС РГ поступила пара для связывания на уровне узлов и для метаузла (телеметрии, во внешних системах) не найден ни один метаканал.

2203. Узел телеметрии имеет больше одного метаканала и не все замаплены

Из АИС РГ поступила пара для связывания на уровне узлов и для метаузла (телеметрии, во внешних системах) обнаружено больше одного метаканала и не все они замаплены. Неоднозначность автоматически не разрешима.

2204. Узел маппинга имеет не единственный канал

Из АИС РГ поступила пара для связывания на уровне узлов и для узла назначения обнаружено 0 или больше одного канала. Неоднозначность автоматически не разрешима.

2205. Не найден канал для связывания

Из АИС РГ поступила пара для связывания на уровне каналов, но канал, на который должен указывать метаканал (ПМ) не найден.

2206. Не найден метаканал (ПМ) для связывания

Из АИС РГ поступила пара для связывания на уровне каналов, но метаканал (ПМ) не найден.

Введено с версии 18.pre1.

2207. Автоматический маппинг доступен только на уровне каналов или узлов

Мы всегда настоятельно рекомендуем указывать для маппинга канала, поскольку это позволяет указать 1 к 1 все случаи для двух систем. Т.к. в АИС РГ такая детализация часто просто не ведётся, и останавливается на узлах, добавлена связка по ним, но при условии наличия однозначности. Никакие другие типы связок (вроде уровня площадок) поддерживать не планируется.

Код 2300. ПДЗ

РегистрНакопления.ДолгиПокупателей.Остатки

2301. Не найден Договор

ДолгиПокупателейОстатки.Договор.Договор

2302. Не найден Потребитель

ДолгиПокупателейОстатки.Контрагент

Требование не проверяется автоматически.

2303. Не заполнена просроченная дебиторская задолженность

ДолгиПокупателейОстатки.СуммаОстаток

2304. Не указано количество просроченных платежей

МинимальныйДокументДолга.КОличествоДокументДолгаДата

2305. Не указана дата первой просрочки

Код 2400. Загрузка признака ОКК для Потребителя

РегистрСведений.ПараметрыКонтрагента КАК ПараметрыКонтрагента где ПараметрыКонтрагента.Идентификатор = "ПризнакПринадлежностиКОКК".

2401. Потребитель с ИД [] не найден(а)

РегистрСведений.ПараметрыКонтрагента КАК ПараметрыКонтрагента, где ПараметрыКонтрагента.Идентификатор = "ПризнакПринадлежностиКОКК".

2402. Тип принадлежности к ОКК [переданный тип принадлежности] не найден []

Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.

2403. Дата принадлежности к ОКК [] некорректна

Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.

Код 2500. Загрузка признака ОКК для Договора

РегистрСведений.ПараметрыДоговора где ПараметрыДоговора.Идентификатор = "ДляНуждОКК".

2501. Договор с ИД [] не найден(а)

РегистрСведений.ПараметрыДоговора, где ПараметрыДоговора.Идентификатор = "ДляНуждОКК"

2502. Тип признака для нужд ОКК [переданный тип] не найден []

Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.

2503. Дата начала действия ОКК [] некорректна

Приходит объект с признаком принадлежности к ОКК, который отсутствует в справочнике ИМУС.

Код 5000. Общие ошибки

5001. Для заменяемых сгенерированных сущностей не единственный предок

Включен режим замены сгенерированных сущностей, но найдено больше 1 потомка по предку. Объект не добавлен.

Предком для УУГ будем считать площадку, для корректора - УУГ, для канала - корректор. То есть в значении близком атрибуту 1С Владелец.

5002. Для генерации вниз не уникальный идентификатор

Для операции генерации вниз для вставляемых элементов их идентификатор уже представлен. Требуется уникальность.

5003. Дубликат объекта

Под дубликатами загрузки подразумеваются сущности из регистров, одновременно относящиеся к некоторым другим объектам, когда это не корректно с точки зрения логики. Например корректор, одновременно установленный на нескольких УУГ, ГПО и т.д.

Как читать подробности данной ошибки с примерами:

GasConsEquip{ИД[14bcfa8b-c756-11dd-ba36-0002a54e6110],
   Отличающиеся поля: {УУГ=[637d14c6-c21e-11dd-ba36-0002a54e6110, 81bd03ff-c21e-11dd-ba36-0002a54e6110]}

ГПО единица с идентификатором 14bcfa8b-c756-11dd-ba36-0002a54e6110 при импорте из учётной системы приходит как установленная одновременно на двух узлах с идентификаторами 637d14c6-c21e-11dd-ba36-0002a54e6110 и 81bd03ff-c21e-11dd-ba36-0002a54e6110 соответственно.

GasConsEquip{ИД[8478bbca-393f-11dc-a2a7-001641c52137],
   Отличающиеся поля: {
       УУГ=[fcc4e25e-3459-11dc-a534-0014c2637821, null],
       Площадка=[1ba80228-344e-11dc-a534-0014c2637821, d9448a27-39f0-11dc-a2ac-0018de4bede7]
   }

В данном примере, есть две записи в регистре РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних(&CurrentDate) установленных ГПО сущностей, причем записи имеют как разные узлы (в одной пустой), так и площадки.

5004. Обнаружено несколько объектов с одинаковым GUID

Возможно в АИС был изменен Код объекта, для объекта в ИМУС пытается создаться новый идентификатор с системе создателя, но идентификатор с таким GUID в системе уже имеется


Код 10000. Ошибки экспорта на стороне АИС

Могут быть определены подкоды до 10999. Ошибки трактуются на стороне АИС РГ. Никаких специальных значений для ИМУС не представляют и могут вводиться динамически. В отчёте представлены "как есть".


  1. С версии адаптера 19.5.pre3. ESB-13601.9.0.7