Налагаемые требования целостности, коды ошибок — различия между версиями
Hubbitus (обсуждение | вклад) (→1605. Желательны даты поверки и следующей поверки: Simplify quert) |
Hubbitus (обсуждение | вклад) (Add for all headers codeX anchors) |
||
| Строка 11: | Строка 11: | ||
<div style="clear: both"></div> | <div style="clear: both"></div> | ||
| + | {{anchor|code100}} | ||
== Код 100. Территории (Регионы) == | == Код 100. Территории (Регионы) == | ||
| + | {{anchor|code101}} | ||
=== 101. Все имена должны быть уникальными === | === 101. Все имена должны быть уникальными === | ||
SELECT | SELECT | ||
| Строка 24: | Строка 26: | ||
'''COUNT(Наименование) > 1''' | '''COUNT(Наименование) > 1''' | ||
| + | {{anchor|code102}} | ||
=== 102. Имена не могут быть пустыми === | === 102. Имена не могут быть пустыми === | ||
SELECT | SELECT | ||
| Строка 33: | Строка 36: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code200}} | ||
== Код 200. Районы == | == Код 200. Районы == | ||
| + | {{anchor|code201}} | ||
=== 201. Каждый район должен быть привязан к одной и только одной территории === | === 201. Каждый район должен быть привязан к одной и только одной территории === | ||
SELECT | SELECT | ||
| Строка 56: | Строка 61: | ||
)</b> | )</b> | ||
| + | {{anchor|code202}} | ||
=== 202. Все имена должны быть уникальны в пределах территории (региона) === | === 202. Все имена должны быть уникальны в пределах территории (региона) === | ||
SELECT | SELECT | ||
| Строка 69: | Строка 75: | ||
'''COUNT(*) > 1''' | '''COUNT(*) > 1''' | ||
| + | {{anchor|code203}} | ||
=== 203. Имена не могут быть пустыми === | === 203. Имена не могут быть пустыми === | ||
SELECT | SELECT | ||
| Строка 79: | Строка 86: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code300}} | ||
== Код 300. Справочник ОтраслиГазпрома == | == Код 300. Справочник ОтраслиГазпрома == | ||
| + | {{anchor|code301}} | ||
=== 301. Все группы должны иметь уникальные имена === | === 301. Все группы должны иметь уникальные имена === | ||
SELECT | SELECT | ||
| Строка 93: | Строка 102: | ||
'''COUNT(Наименование) > 1''' | '''COUNT(Наименование) > 1''' | ||
| + | {{anchor|code302}} | ||
=== 302. Отрасль обязательно должна принадлежать одной и только одной группе === | === 302. Отрасль обязательно должна принадлежать одной и только одной группе === | ||
SELECT | SELECT | ||
| Строка 117: | Строка 127: | ||
)</b> | )</b> | ||
| + | {{anchor|code303}} | ||
=== 303. Пустые имена не допускаются === | === 303. Пустые имена не допускаются === | ||
SELECT | SELECT | ||
| Строка 127: | Строка 138: | ||
AND "" = ISNULL(Наименование, "")</b> | AND "" = ISNULL(Наименование, "")</b> | ||
| + | {{anchor|code400}} | ||
== Код 400. Потребители == | == Код 400. Потребители == | ||
'''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей''', '''Справочник.ДоговорыГазовые'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate)''', если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, чем в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев. | '''Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей''', '''Справочник.ДоговорыГазовые'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate)''', если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, чем в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев. | ||
| Строка 132: | Строка 144: | ||
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] и могут быть исправлены по желанию компании. | К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] и могут быть исправлены по желанию компании. | ||
| + | {{anchor|code401}} | ||
=== 401. У каждого потребителя должна быть проставлена не удалённая отрасль === | === 401. У каждого потребителя должна быть проставлена не удалённая отрасль === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 171: | Строка 184: | ||
ORDER BY parent | ORDER BY parent | ||
| + | {{anchor|code402}} | ||
=== 402. У каждого потребителя должна быть проставлена Территория (регион) === | === 402. У каждого потребителя должна быть проставлена Территория (регион) === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 212: | Строка 226: | ||
ORDER BY parent | ORDER BY parent | ||
| + | {{anchor|code403}} | ||
=== 403. Имя не может быть пустым === | === 403. Имя не может быть пустым === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 251: | Строка 266: | ||
ORDER BY parent | ORDER BY parent | ||
| + | {{anchor|code404}} | ||
=== 404. Не должно быть дублей (как минимум по ИНН) === | === 404. Не должно быть дублей (как минимум по ИНН) === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 287: | Строка 303: | ||
HAVING COUNT(*) > 1</b> | HAVING COUNT(*) > 1</b> | ||
| + | {{anchor|code405}} | ||
=== 405. У потребителя должен быть правильно проставлен родитель (или плательщик) === | === 405. У потребителя должен быть правильно проставлен родитель (или плательщик) === | ||
Причём он должен быть корректно проставлен в справочниках '''Справочник.ДоговорыГазовые''' и '''Справочник. Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей'''. | Причём он должен быть корректно проставлен в справочниках '''Справочник.ДоговорыГазовые''' и '''Справочник. Справочник.ДоговорыГазовые.РеестрКонечныхПотребителей'''. | ||
| Строка 386: | Строка 403: | ||
Используются всегда все 3 признака. Таким образом, расторгнутый договор будет проигнорирован, даже если дата окончания его больше, чем у действующего. Если есть 2 договора с одинаковым статусом (например, действующие основной и дополнительное соглашение, или ошибочно 2) — возьмется тот, у которого дата окончания больше. Если в этом случае даты окончания пустые или равны — тот, у которого дата начала больше. | Используются всегда все 3 признака. Таким образом, расторгнутый договор будет проигнорирован, даже если дата окончания его больше, чем у действующего. Если есть 2 договора с одинаковым статусом (например, действующие основной и дополнительное соглашение, или ошибочно 2) — возьмется тот, у которого дата окончания больше. Если в этом случае даты окончания пустые или равны — тот, у которого дата начала больше. | ||
| + | {{anchor|code406}} | ||
=== 406. Если у потребителя есть родитель, он должен быть корректно загруженным === | === 406. Если у потребителя есть родитель, он должен быть корректно загруженным === | ||
То есть соответствовать всем требованиям данного кода (40х). Тут нет запроса потому что его не бможет быть - требование рекурсивное для удовлетворения ссылок. Сначала загружаются родители - затем потомки. | То есть соответствовать всем требованиям данного кода (40х). Тут нет запроса потому что его не бможет быть - требование рекурсивное для удовлетворения ссылок. Сначала загружаются родители - затем потомки. | ||
| + | {{anchor|code500}} | ||
== Код 500. Газораспределительные организации (ГРО) == | == Код 500. Газораспределительные организации (ГРО) == | ||
Берутся из справочника '''Справочник.Контрагенты''', те объекты, у которых '''ПризнакТранспортировщика''' = true. | Берутся из справочника '''Справочник.Контрагенты''', те объекты, у которых '''ПризнакТранспортировщика''' = true. | ||
| + | {{anchor|code501}} | ||
=== 501. Обязательно должны быть проставлены регионы у всех === | === 501. Обязательно должны быть проставлены регионы у всех === | ||
SELECT | SELECT | ||
| Строка 403: | Строка 423: | ||
'''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)''' | '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)''' | ||
| + | {{anchor|code502}} | ||
=== 502. Не может быть дублей === | === 502. Не может быть дублей === | ||
SELECT | SELECT | ||
| Строка 416: | Строка 437: | ||
'''COUNT(*) > 1''' | '''COUNT(*) > 1''' | ||
| + | {{anchor|code503}} | ||
=== 503. Имена должны быть не пустыми === | === 503. Имена должны быть не пустыми === | ||
SELECT | SELECT | ||
| Строка 427: | Строка 449: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code600}} | ||
== Код 600. Газораспределительные станции (ГРС) == | == Код 600. Газораспределительные станции (ГРС) == | ||
'''Справочник.ГРС'''. | '''Справочник.ГРС'''. | ||
| + | {{anchor|code601}} | ||
=== 601. Должны быть проставлены Территории (Субъекты РФ) === | === 601. Должны быть проставлены Территории (Субъекты РФ) === | ||
SELECT | SELECT | ||
| Строка 443: | Строка 467: | ||
'''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)''' | '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)''' | ||
| + | {{anchor|code602}} | ||
=== 602. Имена не могут быть пустыми === | === 602. Имена не могут быть пустыми === | ||
SELECT | SELECT | ||
| Строка 456: | Строка 481: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code603}} | ||
=== 603. Обязательно должен быть заполнен трансгаз === | === 603. Обязательно должен быть заполнен трансгаз === | ||
'''Справочник.ГРС.Трансгаз''' | '''Справочник.ГРС.Трансгаз''' | ||
| Строка 470: | Строка 496: | ||
'''AND Трансгаз.Ссылка IS NULL''' | '''AND Трансгаз.Ссылка IS NULL''' | ||
| + | {{anchor|code604}} | ||
=== 604. Желательно заполнение также кодов СДУ === | === 604. Желательно заполнение также кодов СДУ === | ||
'''Справочник.ГРС.КодСДУ'''. | '''Справочник.ГРС.КодСДУ'''. | ||
| Строка 484: | Строка 511: | ||
'''AND "" = ISNULL(КодСДУ, "")''' | '''AND "" = ISNULL(КодСДУ, "")''' | ||
| + | {{anchor|code700}} | ||
== Код 700. Выходы ГРС == | == Код 700. Выходы ГРС == | ||
'''Справочник.ВыходыГРС.''' | '''Справочник.ВыходыГРС.''' | ||
| + | {{anchor|code701}} | ||
=== 701. Обязательна привязка к ГРО === | === 701. Обязательна привязка к ГРО === | ||
SELECT | SELECT | ||
| Строка 505: | Строка 534: | ||
Следует обратить внимание, что некоторые [[Перечень сокращений и обозначений#РГК|РГК]] предлагают не заполнять этот справочник, а взять для выходов [[Перечень сокращений и обозначений#ГРС|ГРС]] данные из точки подключения или площадки. Однако выяснилось, что такой подход не верный — [[Перечень сокращений и обозначений#ГРО|ГРО]] выхода [[Перечень сокращений и обозначений#ГРС|ГРС]] и [[Перечень сокращений и обозначений#ГРО|ГРО]] точки подключения не обязательно одинаковы (трубопровод может быть поделен на несколько частей, и разные части могут принадлежать разным [[Перечень сокращений и обозначений#ГРО|ГРО]]). | Следует обратить внимание, что некоторые [[Перечень сокращений и обозначений#РГК|РГК]] предлагают не заполнять этот справочник, а взять для выходов [[Перечень сокращений и обозначений#ГРС|ГРС]] данные из точки подключения или площадки. Однако выяснилось, что такой подход не верный — [[Перечень сокращений и обозначений#ГРО|ГРО]] выхода [[Перечень сокращений и обозначений#ГРС|ГРС]] и [[Перечень сокращений и обозначений#ГРО|ГРО]] точки подключения не обязательно одинаковы (трубопровод может быть поделен на несколько частей, и разные части могут принадлежать разным [[Перечень сокращений и обозначений#ГРО|ГРО]]). | ||
| + | {{anchor|code702}} | ||
=== 702. Обязательна привязка к ГРС === | === 702. Обязательна привязка к ГРС === | ||
Теоретически обратного и быть не может. | Теоретически обратного и быть не может. | ||
| Строка 517: | Строка 547: | ||
'''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)''' | '''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)''' | ||
| + | {{anchor|code703}} | ||
=== 703. Наименование не может быть пустым === | === 703. Наименование не может быть пустым === | ||
SELECT | SELECT | ||
| Строка 533: | Строка 564: | ||
'''AND "" <nowiki>=</nowiki> ISNULL(Наименование, "")''' | '''AND "" <nowiki>=</nowiki> ISNULL(Наименование, "")''' | ||
| + | {{anchor|code800}} | ||
== Код 800. Площадки == | == Код 800. Площадки == | ||
Забираются как срез на текущую дату из регистра '''РегистрСведений.ПлощадкиПоДоговору'''. | Забираются как срез на текущую дату из регистра '''РегистрСведений.ПлощадкиПоДоговору'''. | ||
| + | {{anchor|code801}} | ||
=== 801. Необходима привязка к потребителю === | === 801. Необходима привязка к потребителю === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 575: | Строка 608: | ||
)</b> | )</b> | ||
| + | {{anchor|code802}} | ||
=== 802. удалён (пункт оставлен чтобы сохранить нумерацию) === | === 802. удалён (пункт оставлен чтобы сохранить нумерацию) === | ||
| + | {{anchor|code803}} | ||
=== 803. Обязательна привязка к Территории (Субъекту РФ) === | === 803. Обязательна привязка к Территории (Субъекту РФ) === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 586: | Строка 621: | ||
'''AND (Площадка.Территория.Ссылка IS NULL OR Площадка.Территория.ПометкаУдаления = true)''' | '''AND (Площадка.Территория.Ссылка IS NULL OR Площадка.Территория.ПометкаУдаления = true)''' | ||
| + | {{anchor|code804}} | ||
=== 804. Имя площадки не может быть пустым === | === 804. Имя площадки не может быть пустым === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 596: | Строка 632: | ||
'''AND "" = ISNULL(Площадка.Наименование, "")''' | '''AND "" = ISNULL(Площадка.Наименование, "")''' | ||
| + | {{anchor|code805}} | ||
=== 805. Заполнены районы === | === 805. Заполнены районы === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 605: | Строка 642: | ||
'''AND (Площадка.Адрес.Район.Ссылка IS NULL OR Площадка.Адрес.Район.ПометкаУдаления = true)''' | '''AND (Площадка.Адрес.Район.Ссылка IS NULL OR Площадка.Адрес.Район.ПометкаУдаления = true)''' | ||
| + | {{anchor|code806}} | ||
=== 806. Дубли не допускаются (игнорируются последующие) === | === 806. Дубли не допускаются (игнорируются последующие) === | ||
В некоторых [[Перечень сокращений и обозначений#РГК|РГК]] столкнулись с большой проблемой в учёте, связанной с изменением учёта несколько лет назад. Выяснилось, что не смотря на то, что в регистре указано '''ЕстьСвязь,''' связи может не быть фактически, или одна площадка может принадлежать одновременно нескольким потребителям. Такая ситуация не верна. | В некоторых [[Перечень сокращений и обозначений#РГК|РГК]] столкнулись с большой проблемой в учёте, связанной с изменением учёта несколько лет назад. Выяснилось, что не смотря на то, что в регистре указано '''ЕстьСвязь,''' связи может не быть фактически, или одна площадка может принадлежать одновременно нескольким потребителям. Такая ситуация не верна. | ||
| Строка 656: | Строка 694: | ||
Если же будет принято решение не снимать со старых связь, то приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. }} | Если же будет принято решение не снимать со старых связь, то приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. }} | ||
| + | {{anchor|code900}} | ||
== Код 900. Точки подключения == | == Код 900. Точки подключения == | ||
[[Перечень сокращений и обозначений#ТП|ТП]] могут забираться из Подключений или площадок. | [[Перечень сокращений и обозначений#ТП|ТП]] могут забираться из Подключений или площадок. | ||
| + | {{anchor|code901}} | ||
=== 901. Обязательна привязка к ГРО === | === 901. Обязательна привязка к ГРО === | ||
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | [[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | ||
| Строка 691: | Строка 731: | ||
'''AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)''' | '''AND (ГРО.Ссылка IS NULL OR ГРО.ПометкаУдаления = true)''' | ||
| + | {{anchor|code902}} | ||
=== 902. Обязательна привязка к ГРС === | === 902. Обязательна привязка к ГРС === | ||
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | [[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | ||
| Строка 723: | Строка 764: | ||
'''AND (ГРС.Ссылка IS NULL OR ГРС.ПометкаУдаления = true)''' | '''AND (ГРС.Ссылка IS NULL OR ГРС.ПометкаУдаления = true)''' | ||
| + | {{anchor|code903}} | ||
=== 903. Обязательна привязка к ВыходуГРС === | === 903. Обязательна привязка к ВыходуГРС === | ||
{{ ambox | text = Для того чтобы [[Перечень сокращений и обозначений#ТП|ТП]] в [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] могла быть привязана к Выходу [[Перечень сокращений и обозначений#ГРС|ГРС]], у последнего обязательно должен быть канал. В большинстве случаев структура поставки не забирается из АИС РГ просто потому что отсутствует и по умолчанию автоматически генерируется от Выходов [[Перечень сокращений и обозначений#ГРС|ГРС]]. Генерация отключается с помощью опции [[Конфигурирование адаптера на стороне ИМУС#ais_ws_generateFromOutDown|ais.ws.generateFromOutDown]] и в этом случае, создание недостающих элементов возлагается на представителей [[Перечень сокращений и обозначений#РГК|РГК]] }} | {{ ambox | text = Для того чтобы [[Перечень сокращений и обозначений#ТП|ТП]] в [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] могла быть привязана к Выходу [[Перечень сокращений и обозначений#ГРС|ГРС]], у последнего обязательно должен быть канал. В большинстве случаев структура поставки не забирается из АИС РГ просто потому что отсутствует и по умолчанию автоматически генерируется от Выходов [[Перечень сокращений и обозначений#ГРС|ГРС]]. Генерация отключается с помощью опции [[Конфигурирование адаптера на стороне ИМУС#ais_ws_generateFromOutDown|ais.ws.generateFromOutDown]] и в этом случае, создание недостающих элементов возлагается на представителей [[Перечень сокращений и обозначений#РГК|РГК]] }} | ||
| Строка 757: | Строка 799: | ||
'''AND (ВыходГРС.Ссылка IS NULL OR ВыходГРС.ПометкаУдаления = true)''' | '''AND (ВыходГРС.Ссылка IS NULL OR ВыходГРС.ПометкаУдаления = true)''' | ||
| + | {{anchor|code904}} | ||
=== 904. Желательна привязка к Территории === | === 904. Желательна привязка к Территории === | ||
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | [[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | ||
| Строка 789: | Строка 832: | ||
'''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)''' | '''AND (Территория.Ссылка IS NULL OR Территория.ПометкаУдаления = true)''' | ||
| + | {{anchor|code905}} | ||
=== 905. Заполнено наименование === | === 905. Заполнено наименование === | ||
[[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | [[Перечень сокращений и обозначений#ТП|Вариант определения точек подключения]] по подключениям: | ||
| Строка 820: | Строка 864: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code1000}} | ||
== Код 1000. Узлы учёта газа == | == Код 1000. Узлы учёта газа == | ||
=== Узлы потребления === | === Узлы потребления === | ||
'''РегистрСведений.УзлыУчетаПлощадок.СрезПоследних'''. | '''РегистрСведений.УзлыУчетаПлощадок.СрезПоследних'''. | ||
| + | {{anchor|code1001}} | ||
==== 1001. Обязательна привязка к активной, не удалённой площадке ==== | ==== 1001. Обязательна привязка к активной, не удалённой площадке ==== | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 845: | Строка 891: | ||
)</b> | )</b> | ||
| + | {{anchor|code1002}} | ||
==== 1002. Дубли не допускаются, другими словами, узел может принадлежать только одной площадке ==== | ==== 1002. Дубли не допускаются, другими словами, узел может принадлежать только одной площадке ==== | ||
SELECT uug1.obj, uug1.gco as gco1, uug2.gco as gco2 | SELECT uug1.obj, uug1.gco as gco1, uug2.gco as gco2 | ||
| Строка 867: | Строка 914: | ||
'''<nowiki>ON (uug1.obj = uug2.obj AND uug1.gco <> uug2.gco)</nowiki>''' | '''<nowiki>ON (uug1.obj = uug2.obj AND uug1.gco <> uug2.gco)</nowiki>''' | ||
| + | {{anchor|code1003}} | ||
==== 1003. Обязательно наличие не пустого имени ==== | ==== 1003. Обязательно наличие не пустого имени ==== | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 880: | Строка 928: | ||
{{ mbox | text = Внимание, мы не забираем площадки на [[Перечень сокращений и обозначений#ГРС|ГРС]] или на Выходе [[Перечень сокращений и обозначений#ГРС|ГРС]], вместо этого в [[Перечень сокращений и обозначений#ИМУС|ИМУС]] [[Перечень сокращений и обозначений#УУГ|УУГ]] поставки будет висеть на Выходе [[Перечень сокращений и обозначений#ГРС|ГРС]] }} | {{ mbox | text = Внимание, мы не забираем площадки на [[Перечень сокращений и обозначений#ГРС|ГРС]] или на Выходе [[Перечень сокращений и обозначений#ГРС|ГРС]], вместо этого в [[Перечень сокращений и обозначений#ИМУС|ИМУС]] [[Перечень сокращений и обозначений#УУГ|УУГ]] поставки будет висеть на Выходе [[Перечень сокращений и обозначений#ГРС|ГРС]] }} | ||
| + | {{anchor|code1021}} | ||
==== 1021. Необходимо указание Выхода ГРС для площадки подключения узла ==== | ==== 1021. Необходимо указание Выхода ГРС для площадки подключения узла ==== | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 895: | Строка 944: | ||
)</b> | )</b> | ||
| + | {{anchor|code1100}} | ||
== Код 1100. Модели корректоров (вычислителей) == | == Код 1100. Модели корректоров (вычислителей) == | ||
| + | {{anchor|code1101}} | ||
=== 1101. Имена не могут быть пустыми === | === 1101. Имена не могут быть пустыми === | ||
SELECT | SELECT | ||
| Строка 907: | Строка 958: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code1102}} | ||
=== 1102. Имена должны быть уникальными === | === 1102. Имена должны быть уникальными === | ||
SELECT | SELECT | ||
| Строка 919: | Строка 971: | ||
'''COUNT(*) > 1''' | '''COUNT(*) > 1''' | ||
| + | {{anchor|code1200}} | ||
== Код 1200. Корректоры (вычислители) == | == Код 1200. Корректоры (вычислители) == | ||
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних'''. | '''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних'''. | ||
| + | {{anchor|code1201}} | ||
=== 1201. Обязательно должна быть указана модель === | === 1201. Обязательно должна быть указана модель === | ||
'''.Оборудование.Модель'''. | '''.Оборудование.Модель'''. | ||
| Строка 939: | Строка 993: | ||
'''AND (Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true)''' | '''AND (Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true)''' | ||
| + | {{anchor|code1202}} | ||
=== 1202. Установленные и активные обязательно должны иметь ссылку на не удалённый и активный узел учёта === | === 1202. Установленные и активные обязательно должны иметь ссылку на не удалённый и активный узел учёта === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 958: | Строка 1013: | ||
)</b> | )</b> | ||
| + | {{anchor|code1203}} | ||
=== 1203. Наименование не может быть пустым === | === 1203. Наименование не может быть пустым === | ||
SELECT | SELECT | ||
| Строка 973: | Строка 1029: | ||
'''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Модель.Наименование, "")''' | '''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Модель.Наименование, "")''' | ||
| + | {{anchor|code1204}} | ||
=== 1204. Если есть информация о его серийном номере, она должна быть указана === | === 1204. Если есть информация о его серийном номере, она должна быть указана === | ||
SELECT | SELECT | ||
| Строка 988: | Строка 1045: | ||
'''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")''' | '''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")''' | ||
| + | {{anchor|code1205}} | ||
=== 1205. Дубли не допускаются. Иными словами, вычислитель может быть привязан к единственному узлу === | === 1205. Дубли не допускаются. Иными словами, вычислитель может быть привязан к единственному узлу === | ||
SELECT equips1.obj, equips1.uug as uug1, equips2.uug as uug2 | SELECT equips1.obj, equips1.uug as uug1, equips2.uug as uug2 | ||
| Строка 1018: | Строка 1076: | ||
'''<nowiki>ON (equips1.obj = equips2.obj AND equips1.uug <> equips2.uug)</nowiki>''' | '''<nowiki>ON (equips1.obj = equips2.obj AND equips1.uug <> equips2.uug)</nowiki>''' | ||
| + | {{anchor|code1206}} | ||
=== 1206. Если указаны даты поверки и следующей поверки, то они должны быть корректными === | === 1206. Если указаны даты поверки и следующей поверки, то они должны быть корректными === | ||
SELECT | SELECT | ||
| Строка 1043: | Строка 1102: | ||
)</b> | )</b> | ||
| + | {{anchor|code1300}} | ||
== Код 1300. Каналы измерения == | == Код 1300. Каналы измерения == | ||
'''Справочник.КаналыВычислителей'''. | '''Справочник.КаналыВычислителей'''. | ||
| + | {{anchor|code1301}} | ||
=== 1301. Должны быть привязаны к вычислителю === | === 1301. Должны быть привязаны к вычислителю === | ||
Теоретически обратного и быть не может. | Теоретически обратного и быть не может. | ||
| Строка 1058: | Строка 1119: | ||
'''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)''' | '''AND (Владелец.Ссылка IS NULL OR Владелец.ПометкаУдаления = true)''' | ||
| + | {{anchor|code1302}} | ||
=== 1302. Канал должен иметься для каждого вычислителя === | === 1302. Канал должен иметься для каждого вычислителя === | ||
Для [[Перечень сокращений и обозначений#ИМУС|ИМУС]] он нужен как минимум один. | Для [[Перечень сокращений и обозначений#ИМУС|ИМУС]] он нужен как минимум один. | ||
| Строка 1080: | Строка 1142: | ||
)</b> | )</b> | ||
| + | {{anchor|code1303}} | ||
=== 1303. Наименование не может быть пустым === | === 1303. Наименование не может быть пустым === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1092: | Строка 1155: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code1304}} | ||
=== 1304. Канал должен иметь уникальное наименование в пределах корректора === | === 1304. Канал должен иметь уникальное наименование в пределах корректора === | ||
Другими словами, не допускается повторение имени канала на одном корректоре. К сожалению частая ситуация, потому что они именуются в основном 1, 2 и т.д.. | Другими словами, не допускается повторение имени канала на одном корректоре. К сожалению частая ситуация, потому что они именуются в основном 1, 2 и т.д.. | ||
| Строка 1124: | Строка 1188: | ||
'''<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>''' | ||
| + | {{anchor|code1350}} | ||
== Код 1350. Классы газопотребляющего оборудования (ГПО) == | == Код 1350. Классы газопотребляющего оборудования (ГПО) == | ||
'''Справочник.ТипыГазопотребляющегоОборудования'''. | '''Справочник.ТипыГазопотребляющегоОборудования'''. | ||
| + | {{anchor|code1351}} | ||
=== 1351. Необходимы не пустые названия === | === 1351. Необходимы не пустые названия === | ||
SELECT | SELECT | ||
| Строка 1148: | Строка 1214: | ||
'''AND "" = ISNULL(Родитель.Наименование, "")''' | '''AND "" = ISNULL(Родитель.Наименование, "")''' | ||
| + | {{anchor|code1400}} | ||
== Код 1400. Типы газопотребляющего оборудования (ГПО) == | == Код 1400. Типы газопотребляющего оборудования (ГПО) == | ||
'''Справочник.ТипыГазопотребляющегоОборудования'''. | '''Справочник.ТипыГазопотребляющегоОборудования'''. | ||
| + | {{anchor|code1401}} | ||
=== 1401. Необходима привязка к классам ГПО === | === 1401. Необходима привязка к классам ГПО === | ||
'''Справочник.МоделиГазопотребляющегоОборудования.Ссылка'''. | '''Справочник.МоделиГазопотребляющегоОборудования.Ссылка'''. | ||
| Строка 1175: | Строка 1243: | ||
'''AND (Родитель.Ссылка IS NULL OR Родитель.Ссылка.ПометкаУдаления = true)''' | '''AND (Родитель.Ссылка IS NULL OR Родитель.Ссылка.ПометкаУдаления = true)''' | ||
| + | {{anchor|code1402}} | ||
=== 1402. Имена не могут быть пустыми === | === 1402. Имена не могут быть пустыми === | ||
SELECT | SELECT | ||
| Строка 1198: | Строка 1267: | ||
'''AND "" = ISNULL(Наименование)''' | '''AND "" = ISNULL(Наименование)''' | ||
| + | {{anchor|code1500}} | ||
== Код 1500. ГПО == | == Код 1500. ГПО == | ||
'''РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних'''. | '''РегистрСведений.УстановленноеГазопотребляющееОборудование.СрезПоследних'''. | ||
| + | {{anchor|code1501}} | ||
=== 1501. Необходимы привязки к Типам ГПО === | === 1501. Необходимы привязки к Типам ГПО === | ||
SELECT | SELECT | ||
| Строка 1230: | Строка 1301: | ||
)</b> | )</b> | ||
| + | {{anchor|code1502}} | ||
=== 1502. Необходимы корректные ссылки на Площадки === | === 1502. Необходимы корректные ссылки на Площадки === | ||
SELECT | SELECT | ||
| Строка 1251: | Строка 1323: | ||
)</b> | )</b> | ||
| + | {{anchor|code1503}} | ||
=== 1503. Не допускаются пустые имена === | === 1503. Не допускаются пустые имена === | ||
SELECT | SELECT | ||
| Строка 1261: | Строка 1334: | ||
'''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Наименование, "")''' | '''AND "" <nowiki>= ISNULL(</nowiki>Оборудование.Наименование, "")''' | ||
| + | {{anchor|code1504}} | ||
=== 1504. Должен быть указан максимальный расход (0 в крайнем случае) === | === 1504. Должен быть указан максимальный расход (0 в крайнем случае) === | ||
SELECT | SELECT | ||
| Строка 1272: | Строка 1346: | ||
'''AND ISNULL(Оборудование.РасходГазаМаксимальный, 0) = 0''' | '''AND ISNULL(Оборудование.РасходГазаМаксимальный, 0) = 0''' | ||
| + | {{anchor|code1505}} | ||
=== 1505. Дубли не допускаются === | === 1505. Дубли не допускаются === | ||
То есть один экземпляр оборудования может быть установлено только в одном месте. | То есть один экземпляр оборудования может быть установлено только в одном месте. | ||
| Строка 1289: | Строка 1364: | ||
COUNT(*) > 1</b> | COUNT(*) > 1</b> | ||
| + | {{anchor|code1580}} | ||
== Код 1580. Модели измерительного оборудования == | == Код 1580. Модели измерительного оборудования == | ||
| + | {{anchor|code1581}} | ||
=== 1581. Не может быть пустых имён === | === 1581. Не может быть пустых имён === | ||
SELECT * FROM( | SELECT * FROM( | ||
| Строка 1342: | Строка 1419: | ||
'''AND "" = ISNULL(name, "")''' | '''AND "" = ISNULL(name, "")''' | ||
| + | {{anchor|code1600}} | ||
== Код 1600. Измерительное оборудование == | == Код 1600. Измерительное оборудование == | ||
'''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних''', данные также должны быть корректны во всех низлежащих справочниках: '''Справочник.Датчики''', '''Справочник.ИзмерительныеКомплексы''', '''Справочник.Планиметры''', '''Справочник.СужающиеУстройства''', '''Справочник.Счетчики'''. | '''РегистрСведений.УстановленноеИзмерительноеОборудование.СрезПоследних''', данные также должны быть корректны во всех низлежащих справочниках: '''Справочник.Датчики''', '''Справочник.ИзмерительныеКомплексы''', '''Справочник.Планиметры''', '''Справочник.СужающиеУстройства''', '''Справочник.Счетчики'''. | ||
| + | {{anchor|code1601}} | ||
=== 1601. Необходимы корректные ссылки на Модели === | === 1601. Необходимы корректные ссылки на Модели === | ||
SELECT | SELECT | ||
| Строка 1366: | Строка 1445: | ||
'''AND ( Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true )''' | '''AND ( Оборудование.Модель.Ссылка IS NULL OR Оборудование.Модель.ПометкаУдаления = true )''' | ||
| + | {{anchor|code1602}} | ||
=== 1602. Необходимы ссылки на активные, не удалённые узлы === | === 1602. Необходимы ссылки на активные, не удалённые узлы === | ||
SELECT | SELECT | ||
| Строка 1398: | Строка 1478: | ||
)</b> | )</b> | ||
| + | {{anchor|code1603}} | ||
=== 1603. Желательны заводские номера === | === 1603. Желательны заводские номера === | ||
SELECT | SELECT | ||
| Строка 1419: | Строка 1500: | ||
'''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")''' | '''AND "" = ISNULL(Оборудование.ЗаводскойНомер, "")''' | ||
| + | {{anchor|code1604}} | ||
=== 1604. Должны быть уникальны === | === 1604. Должны быть уникальны === | ||
SELECT | SELECT | ||
| Строка 1442: | Строка 1524: | ||
'''HAVING COUNT(*) > 1''' | '''HAVING COUNT(*) > 1''' | ||
| + | {{anchor|code1605}} | ||
=== 1605. Желательны даты поверки и следующей поверки === | === 1605. Желательны даты поверки и следующей поверки === | ||
SELECT | SELECT | ||
| Строка 1475: | Строка 1558: | ||
)</b> | )</b> | ||
| + | {{anchor|code1606}} | ||
=== 1606. Рекомендуется указание канала === | === 1606. Рекомендуется указание канала === | ||
{{ ambox | text = '''Настоятельно рекомендуется''' для всех приборов указывать канал вычислителя (измерительный трубопровод). Если он не проставлен, будет предпринята попытка привязать измеритель от узла. Она может быть выполнена успешно только в случае наличия у данного узла единственного канала. Все остальные случаи развешивания устройств по каналам необходимо будет выполнить в [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] вручную }} | {{ ambox | text = '''Настоятельно рекомендуется''' для всех приборов указывать канал вычислителя (измерительный трубопровод). Если он не проставлен, будет предпринята попытка привязать измеритель от узла. Она может быть выполнена успешно только в случае наличия у данного узла единственного канала. Все остальные случаи развешивания устройств по каналам необходимо будет выполнить в [[Перечень сокращений и обозначений#ИУС-ГАЗ|ИУС-ГАЗ]] вручную }} | ||
| + | {{anchor|code1650}} | ||
== Код 1650. Виды договоров == | == Код 1650. Виды договоров == | ||
'''Справочник.ВидыДоговоров'''. | '''Справочник.ВидыДоговоров'''. | ||
| + | {{anchor|code1651}} | ||
=== 1651. Пустые имена не допустимы === | === 1651. Пустые имена не допустимы === | ||
SELECT | SELECT | ||
| Строка 1491: | Строка 1577: | ||
'''AND "" = ISNULL(Наименование, "")''' | '''AND "" = ISNULL(Наименование, "")''' | ||
| + | {{anchor|code1700}} | ||
== Код 1700. Договоры == | == Код 1700. Договоры == | ||
'''Справочник.ДоговорыГазовые''', '''РегистрСведений.ПараметрыДоговора.СрезПоследних'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate),''' если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, нежели представлено в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев. | '''Справочник.ДоговорыГазовые''', '''РегистрСведений.ПараметрыДоговора.СрезПоследних'''. В реальном веб-сервисе загрузка происходит из '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate),''' если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа '''НеСвязыватьПлощадкуСДоговором'''), то из '''РегистрНакопления.ПланыПоставок''', с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, нежели представлено в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев. | ||
| Строка 1496: | Строка 1583: | ||
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ, могут быть исправлены по желанию компании. | К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ, могут быть исправлены по желанию компании. | ||
| + | {{anchor|code1701}} | ||
=== 1701. Корректно проставлен вид ценообразования === | === 1701. Корректно проставлен вид ценообразования === | ||
'''ДоговорыГазовые.ВидПрейскуранта'''. | '''ДоговорыГазовые.ВидПрейскуранта'''. | ||
| Строка 1507: | Строка 1595: | ||
'''AND ВидПрейскуранта.Ссылка IS NULL''' | '''AND ВидПрейскуранта.Ссылка IS NULL''' | ||
| + | {{anchor|code1702}} | ||
=== 1702. Имеются обе даты — начала и конца и они корректны. | === 1702. Имеются обе даты — начала и конца и они корректны. | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1537: | Строка 1626: | ||
)</b> | )</b> | ||
| + | {{anchor|code1702}} | ||
=== 1702. Заполнен потребитель === | === 1702. Заполнен потребитель === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1553: | Строка 1643: | ||
'''AND ( ДоговорыГазовые.Владелец.Ссылка IS NULL OR ДоговорыГазовые.Владелец.ПометкаУдаления = true)''' | '''AND ( ДоговорыГазовые.Владелец.Ссылка IS NULL OR ДоговорыГазовые.Владелец.ПометкаУдаления = true)''' | ||
| + | {{anchor|code1703}} | ||
=== 1703. Потребитель - владелец не удалён и активен === | === 1703. Потребитель - владелец не удалён и активен === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1601: | Строка 1692: | ||
)</b> | )</b> | ||
| + | {{anchor|code1704}} | ||
=== 1704. Номер (наименование) договора не может быть пустым === | === 1704. Номер (наименование) договора не может быть пустым === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1616: | Строка 1708: | ||
'''AND "" = ISNULL(ДоговорыГазовые.Наименование, "")''' | '''AND "" = ISNULL(ДоговорыГазовые.Наименование, "")''' | ||
| + | {{anchor|code1800}} | ||
== Код 1800. Связь договоров с точками подключения == | == Код 1800. Связь договоров с точками подключения == | ||
'''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''. | '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних'''. | ||
| + | {{anchor|code1801}} | ||
=== 1801. Заполнены у всех обе сущности === | === 1801. Заполнены у всех обе сущности === | ||
{{deprecated-inline|с [[история изменений|версии]] ~16}} и больше не используется вместе с командой [[Команды_адаптера#AttachPcToContract|AttachPcToContract]]. | {{deprecated-inline|с [[история изменений|версии]] ~16}} и больше не используется вместе с командой [[Команды_адаптера#AttachPcToContract|AttachPcToContract]]. | ||
| Строка 1680: | Строка 1774: | ||
)</b> | )</b> | ||
| + | {{anchor|code1850}} | ||
== Код 1850. Связь площадок с точками подключения == | == Код 1850. Связь площадок с точками подключения == | ||
'''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. В вырожденных случаях, когда не ведутся точки или подключения в АИС РГ, отсутствующий элемент будет сгенерирован, и в таком случае связывание будет происходить автоматически и данные ошибки не будут иметь смысла. | '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. В вырожденных случаях, когда не ведутся точки или подключения в АИС РГ, отсутствующий элемент будет сгенерирован, и в таком случае связывание будет происходить автоматически и данные ошибки не будут иметь смысла. | ||
| + | {{anchor|code1851}} | ||
=== 1851. Заполнены у всех обе сущности === | === 1851. Заполнены у всех обе сущности === | ||
| Строка 1696: | Строка 1792: | ||
'''AND (Подключение.Ссылка IS NULL OR Площадка.Ссылка IS NULL)''' | '''AND (Подключение.Ссылка IS NULL OR Площадка.Ссылка IS NULL)''' | ||
| + | {{anchor|code1852}} | ||
=== 1852. Для связывания ТП с площадкой в [[Перечень сокращений и обозначений#ИМУС|ИМУС]], у площадки должен обязательно быть канал === | === 1852. Для связывания ТП с площадкой в [[Перечень сокращений и обозначений#ИМУС|ИМУС]], у площадки должен обязательно быть канал === | ||
Если такая детализация не ведётся в АИС, можно использовать [[Общий_порядок_загрузки_данных#Генерация структуры вниз|генерацию объектов]] в [[Перечень сокращений и обозначений#ИМУС|ИМУС]]. | Если такая детализация не ведётся в АИС, можно использовать [[Общий_порядок_загрузки_данных#Генерация структуры вниз|генерацию объектов]] в [[Перечень сокращений и обозначений#ИМУС|ИМУС]]. | ||
| + | {{anchor|code1853}} | ||
=== 1853. Наличие уникальной активной связи ТП с Площадкой === | === 1853. Наличие уникальной активной связи ТП с Площадкой === | ||
Автоматическое связывание возможно только если они связаны '''один к одному''' в текущий момент времени (в регистре наличествует единственная запись с '''ЕстьСвязь'''). Выбрать активные не единичные связки можно следующим запросом: | Автоматическое связывание возможно только если они связаны '''один к одному''' в текущий момент времени (в регистре наличествует единственная запись с '''ЕстьСвязь'''). Выбрать активные не единичные связки можно следующим запросом: | ||
| Строка 1733: | Строка 1831: | ||
Если же будет принято решение не снимать со старых связь, введена специальная константа [[Конфигурирование на стороне 1С#Связывание площадок с ТП|ASCUG_additionalCondition_relPCtoGCOunique]], позволяющая забирать только уникальные связи. В этом случае приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. }} | Если же будет принято решение не снимать со старых связь, введена специальная константа [[Конфигурирование на стороне 1С#Связывание площадок с ТП|ASCUG_additionalCondition_relPCtoGCOunique]], позволяющая забирать только уникальные связи. В этом случае приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. }} | ||
| + | {{anchor|code1900}} | ||
== Код 1900. Планы потребления == | == Код 1900. Планы потребления == | ||
'''РегистрНакопления.ПланыПоставок.''' | '''РегистрНакопления.ПланыПоставок.''' | ||
| Строка 1738: | Строка 1837: | ||
{{ ambox | text = Все указанные проверки для планов должны быть выполнены на месяц, предшествующий текущей дате, и на все планы вперёд. Даты в запросе предполагается скорректировать самостоятельно или параметризовать запрос стандартными средствами 1С. Обратите внимание, что данные запросы могут быть достаточно медленными и «тяжелыми» с точки зрения производительности, тем более, чем больший интервал времени проверяется }} | {{ ambox | text = Все указанные проверки для планов должны быть выполнены на месяц, предшествующий текущей дате, и на все планы вперёд. Даты в запросе предполагается скорректировать самостоятельно или параметризовать запрос стандартными средствами 1С. Обратите внимание, что данные запросы могут быть достаточно медленными и «тяжелыми» с точки зрения производительности, тем более, чем больший интервал времени проверяется }} | ||
| + | {{anchor|code1901}} | ||
=== 1901. Устарел. Вместо этого предлагается использовать более точные 1903 и 1904 === | === 1901. Устарел. Вместо этого предлагается использовать более точные 1903 и 1904 === | ||
| + | {{anchor|code1902}} | ||
=== 1902. Указан сам лимит потребления на дату === | === 1902. Указан сам лимит потребления на дату === | ||
| Строка 1766: | Строка 1867: | ||
'''AND Количество IS NULL''' | '''AND Количество IS NULL''' | ||
| + | {{anchor|code1903}} | ||
=== 1903. Участвующие в планах подключения должны быть активны === | === 1903. Участвующие в планах подключения должны быть активны === | ||
Это значит они должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. | Это значит они должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. | ||
| Строка 1823: | Строка 1925: | ||
ORDER BY Период | ORDER BY Период | ||
| + | {{anchor|code1904}} | ||
=== 1904. Участвующие в планах договоры должны быть активны === | === 1904. Участвующие в планах договоры должны быть активны === | ||
То есть должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. | То есть должны быть представлены в '''РегистрСведений.ПлощадкиПоДоговору.СрезПоследних''' c '''ЕстьСвязь''' = true. | ||
| Строка 1864: | Строка 1967: | ||
ORDER BY Период | ORDER BY Период | ||
| + | {{anchor|code1905}} | ||
=== 1905. Обязательно заполнена Поставка === | === 1905. Обязательно заполнена Поставка === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1882: | Строка 1986: | ||
ORDER BY Период | ORDER BY Период | ||
| + | {{anchor|code1906}} | ||
=== 1906. Крайне желательно заполнение категории потребления === | === 1906. Крайне желательно заполнение категории потребления === | ||
На самом деле не обязательным является само заполнение, если не ведётся вообще. '''Критической''' проблемой это становится в случае когда часть заполнена, часть нет - появляются лишние [[Перечень сокращений и обозначений#Субъект распределения|Субъекты распределения]], могут появляться неполные и/или отрицательные планы. | На самом деле не обязательным является само заполнение, если не ведётся вообще. '''Критической''' проблемой это становится в случае когда часть заполнена, часть нет - появляются лишние [[Перечень сокращений и обозначений#Субъект распределения|Субъекты распределения]], могут появляться неполные и/или отрицательные планы. | ||
| Строка 1901: | Строка 2006: | ||
ORDER BY Период | ORDER BY Период | ||
| + | {{anchor|code1907}} | ||
=== 1907. Площадки, участвующие в планах должны быть активны === | === 1907. Площадки, участвующие в планах должны быть активны === | ||
| Строка 1945: | Строка 2051: | ||
ORDER BY Период | ORDER BY Период | ||
| + | {{anchor|code1908}} | ||
=== 1908. План должен быть неотрицательным === | === 1908. План должен быть неотрицательным === | ||
Суммарные планы (сумма всех изменений, которые не грузятся по отдельности, берётся сумма всех по [[Перечень сокращений и обозначений#Субъект распределения|субъекту распределения]]) должны быть не отрицательными: | Суммарные планы (сумма всех изменений, которые не грузятся по отдельности, берётся сумма всех по [[Перечень сокращений и обозначений#Субъект распределения|субъекту распределения]]) должны быть не отрицательными: | ||
| Строка 1974: | Строка 2081: | ||
{{ ambox | text = Обратите внимание, если приходит 0, он также будет отображаться и в [[Перечень сокращений и обозначений#ИМУС|ИМУС]], поле будет отображаться пустым если плана вообще нет }} | {{ ambox | text = Обратите внимание, если приходит 0, он также будет отображаться и в [[Перечень сокращений и обозначений#ИМУС|ИМУС]], поле будет отображаться пустым если плана вообще нет }} | ||
| + | {{anchor|code2000}} | ||
== Код 2000. Поставка (Договоры поставки) == | == Код 2000. Поставка (Договоры поставки) == | ||
'''Справочник.ПоставкиГаза.''' | '''Справочник.ПоставкиГаза.''' | ||
| + | {{anchor|code2001}} | ||
=== 2001. Должен быть заполнен производитель газа === | === 2001. Должен быть заполнен производитель газа === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 1991: | Строка 2100: | ||
)</b> | )</b> | ||
| + | {{anchor|code2002}} | ||
=== 2002. Заполнен поставщик газа (владелец договора поставки) === | === 2002. Заполнен поставщик газа (владелец договора поставки) === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 2005: | Строка 2115: | ||
)</b> | )</b> | ||
| + | {{anchor|code2003}} | ||
=== 2003. Заполнен владелец газа (продавец газа) === | === 2003. Заполнен владелец газа (продавец газа) === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 2019: | Строка 2130: | ||
)</b> | )</b> | ||
| + | {{anchor|code2004}} | ||
=== 2004. Заполнен вид ценообразования === | === 2004. Заполнен вид ценообразования === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 2031: | Строка 2143: | ||
{{ ambox | text = Имеется возможность изменить источник вида цены для [[Перечень сокращений и обозначений#Субъект распределения|субъекта распределения]] с помощью константы константа [[Конфигурирование на стороне 1С#Планы|ASCUG_additional_plans_priority]] }} | {{ ambox | text = Имеется возможность изменить источник вида цены для [[Перечень сокращений и обозначений#Субъект распределения|субъекта распределения]] с помощью константы константа [[Конфигурирование на стороне 1С#Планы|ASCUG_additional_plans_priority]] }} | ||
| + | {{anchor|code2005}} | ||
=== 2005. Имеются корректные даты начала и конца договора закупки (поставки) === | === 2005. Имеются корректные даты начала и конца договора закупки (поставки) === | ||
SELECT DISTINCT | SELECT DISTINCT | ||
| Строка 2056: | Строка 2169: | ||
)</b> | )</b> | ||
| + | {{anchor|code2100}} | ||
== Код 2100. Границы (коридоры) перебора и недобора == | == Код 2100. Границы (коридоры) перебора и недобора == | ||
'''Справочник.ВидыПеребораИНедобора.''' | '''Справочник.ВидыПеребораИНедобора.''' | ||
| + | {{anchor|code2101}} | ||
=== 2101. Для элементов недобора необходимо указать ДопустимыйНедобор и ДопустимыйПеребор в обратном случае === | === 2101. Для элементов недобора необходимо указать ДопустимыйНедобор и ДопустимыйПеребор в обратном случае === | ||
Одного шаблона расчета не достаточно. В процентах. | Одного шаблона расчета не достаточно. В процентах. | ||
Версия 11:57, 15 февраля 2013
Содержание
- 1 Код 100. Территории (Регионы)
- 2 Код 200. Районы
- 3 Код 300. Справочник ОтраслиГазпрома
- 4 Код 400. Потребители
- 4.1 401. У каждого потребителя должна быть проставлена не удалённая отрасль
- 4.2 402. У каждого потребителя должна быть проставлена Территория (регион)
- 4.3 403. Имя не может быть пустым
- 4.4 404. Не должно быть дублей (как минимум по ИНН)
- 4.5 405. У потребителя должен быть правильно проставлен родитель (или плательщик)
- 4.6 406. Если у потребителя есть родитель, он должен быть корректно загруженным
- 5 Код 500. Газораспределительные организации (ГРО)
- 6 Код 600. Газораспределительные станции (ГРС)
- 7 Код 700. Выходы ГРС
- 8 Код 800. Площадки
- 9 Код 900. Точки подключения
- 10 Код 1000. Узлы учёта газа
- 11 Код 1100. Модели корректоров (вычислителей)
- 12 Код 1200. Корректоры (вычислители)
- 12.1 1201. Обязательно должна быть указана модель
- 12.2 1202. Установленные и активные обязательно должны иметь ссылку на не удалённый и активный узел учёта
- 12.3 1203. Наименование не может быть пустым
- 12.4 1204. Если есть информация о его серийном номере, она должна быть указана
- 12.5 1205. Дубли не допускаются. Иными словами, вычислитель может быть привязан к единственному узлу
- 12.6 1206. Если указаны даты поверки и следующей поверки, то они должны быть корректными
- 13 Код 1300. Каналы измерения
- 14 Код 1350. Классы газопотребляющего оборудования (ГПО)
- 15 Код 1400. Типы газопотребляющего оборудования (ГПО)
- 16 Код 1500. ГПО
- 17 Код 1580. Модели измерительного оборудования
- 18 Код 1600. Измерительное оборудование
- 19 Код 1650. Виды договоров
- 20 Код 1700. Договоры
- 21 Код 1800. Связь договоров с точками подключения
- 22 Код 1850. Связь площадок с точками подключения
- 23 Код 1900. Планы потребления
- 23.1 1901. Устарел. Вместо этого предлагается использовать более точные 1903 и 1904
- 23.2 1902. Указан сам лимит потребления на дату
- 23.3 1903. Участвующие в планах подключения должны быть активны
- 23.4 1904. Участвующие в планах договоры должны быть активны
- 23.5 1905. Обязательно заполнена Поставка
- 23.6 1906. Крайне желательно заполнение категории потребления
- 23.7 1907. Площадки, участвующие в планах должны быть активны
- 23.8 1908. План должен быть неотрицательным
- 24 Код 2000. Поставка (Договоры поставки)
- 25 Код 2100. Границы (коридоры) перебора и недобора
Следует обратить внимание, что запросы, приведенные в данном разделе, приводятся в информативных целях, для удобного поиска проблем импорта данных.
Также, запросы выбирают именно ошибочные, проблемные данные, а не данные, которые будут импортированы. То есть прежде всего элементы, требующие исправления.
Суть запросов, которыми выбираются указанные данные можно понять инвертировав условие в них, но фактические запросы в операциях Веб-сервиса как правило на много сложнее, учитывают дополнительные условия и нюансы.
Приведенные запросы, если явно не указано обратного, для каждого приведенного ограничения отбирают записи, не соответствующие ему. То есть в идеале, при отсутствии некорректных данных, каждый из запросов должен возвращать пустой результат.
Код 100. Территории (Регионы)
101. Все имена должны быть уникальными
SELECT
Наименование
FROM
Справочник.Территории
WHERE
ПометкаУдаления = false
GROUP BY
Наименование
HAVING
COUNT(Наименование) > 1
102. Имена не могут быть пустыми
SELECT
Наименование
FROM
Справочник.Территории
WHERE
ПометкаУдаления = false
AND "" = ISNULL(Наименование, "")
Код 200. Районы
201. Каждый район должен быть привязан к одной и только одной территории
SELECT
Ссылка,
ПометкаУдаления,
Владелец.Ссылка
FROM
Справочник.Районы
WHERE
ПометкаУдаления = false
AND (
Владелец.Ссылка IS NULL
OR
Владелец.Ссылка NOT IN (
SELECT
Ссылка
FROM
Справочник.Территории
WHERE
ПометкаУдаления = false
)
)
202. Все имена должны быть уникальны в пределах территории (региона)
SELECT
Наименование,
Владелец.Ссылка
FROM
Справочник.Районы
WHERE
ПометкаУдаления = false
GROUP BY
Наименование, Владелец.Ссылка
HAVING
COUNT(*) > 1
203. Имена не могут быть пустыми
SELECT
Наименование,
Владелец.Ссылка
FROM
Справочник.Районы
WHERE
ПометкаУдаления = false
AND "" = ISNULL(Наименование, "")
Код 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(Наименование, "")
Код 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
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
Для выборки текущей принадлежности для загрузки в ИУС-ГАЗ в учёт берётся договор и используется следующий алгоритм:
- Приоритет по статусу, выбирается с наибольшим:
- «Расторгнут» — 0
- «Завершенный» — 1
- «Плановый» — 2
- «Предварительный» — 3
- Остальные — 10
- Затем идет сортировка по дате окончания договора — берется тот, у кого она больше.
- В последнюю очередь по дате начала договора (например, если дата окончания не указана).
Используются всегда все 3 признака. Таким образом, расторгнутый договор будет проигнорирован, даже если дата окончания его больше, чем у действующего. Если есть 2 договора с одинаковым статусом (например, действующие основной и дополнительное соглашение, или ошибочно 2) — возьмется тот, у которого дата окончания больше. Если в этом случае даты окончания пустые или равны — тот, у которого дата начала больше.
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(Наименование, "")
Код 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(Наименование, "")
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(КодСДУ, "")
Код 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(Наименование, "")
Код 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. Обязательна привязка к Территории (Субъекту РФ)
SELECT DISTINCT
Площадка.Ссылка
FROM
РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
ЕстьСвязь AND Площадка.ПометкаУдаления = false
AND (Площадка.Территория.Ссылка IS NULL OR Площадка.Территория.ПометкаУдаления = true)
804. Имя площадки не может быть пустым
SELECT DISTINCT
Площадка.Ссылка as obj,
Потребитель.Ссылка as consumer
FROM
РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
ЕстьСвязь AND Площадка.ПометкаУдаления = false
AND "" = ISNULL(Площадка.Наименование, "")
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
Параметр CurrentDate предполагается текущей датой.
Дополнительно к комментарию в запросе необходимо отметить, что т.к. может быть еще и привязки одной площадки к потребителям с действующими договорами, и, более того, одинаковыми датами окончания (что не удивительно т.к. даты окончания часто 31 декабря для подавляющего большинства договоров).
Обычно таких проблем достаточно много, и разрыв связи бывает нежелателен по каким-то причинам, на данный момент реализован алгоритм предпочтения одной связи другой через договор. Он в точности соответствует алгоритму для потребителей.
| Если имеется возможность, мы настоятельно рекомендуем разорвать связь со старыми объектами! Обратите внимание, т.к. это регистры, то вся история сохраняется и будет доступна для просмотра и после этого. Данный же признак должен отвечать, по логике вещей, за текущую взаимосвязь объектов. Я общался по этому поводу с поддержкой Аудит НТ - получить внятного ответа почему такое имеет место быть не удалось. Кому интересно, привожу полный лог беседы. Если же будет принято решение не снимать со старых связь, то приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. |
Код 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. Обязательна привязка к ГРС
Вариант определения точек подключения по подключениям:
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. Обязательна привязка к ВыходуГРС
| Для того чтобы ТП в ИУС-ГАЗ могла быть привязана к Выходу ГРС, у последнего обязательно должен быть канал. В большинстве случаев структура поставки не забирается из АИС РГ просто потому что отсутствует и по умолчанию автоматически генерируется от Выходов ГРС. Генерация отключается с помощью опции ais.ws.generateFromOutDown и в этом случае, создание недостающих элементов возлагается на представителей РГК |
Вариант определения точек подключения по подключениям:
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)
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 Подключение.ПометкаУдаления = 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(Наименование, "")
Код 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)
1003. Обязательно наличие не пустого имени
SELECT DISTINCT
УзелУчета as obj,
ПлощадкаОборудования as gco
FROM
РегистрСведений.УзлыУчетаПлощадок.СрезПоследних
WHERE
ЕстьСвязь
AND "" = ISNULL(УзелУчета.Наименование, "")
Узлы поставки
| Внимание, мы не забираем площадки на ГРС или на Выходе ГРС, вместо этого в ИМУС УУГ поставки будет висеть на Выходе ГРС |
1021. Необходимо указание Выхода ГРС для площадки подключения узла
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(Оборудование.Модель.Наименование, "")
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)
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(Наименование, "")
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(Родитель.Наименование, "")
Код 1400. Типы газопотребляющего оборудования (ГПО)
Справочник.ТипыГазопотребляющегоОборудования.
1401. Необходима привязка к классам ГПО
Справочник.МоделиГазопотребляющегоОборудования.Ссылка.
SELECT
Ссылка as obj,
Наименование as name,
ТипОборудования as gce_class
FROM
Справочник.МоделиГазопотребляющегоОборудования
WHERE
ПометкаУдаления = false
AND (ТипОборудования.Ссылка IS NULL OR ТипОборудования.Ссылка.ПометкаУдаления = true)
- Для версии конфигурации <= 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(Наименование)
Код 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(Оборудование.Наименование, "")
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
Код 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, "")
Код 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
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. Рекомендуется указание канала
| Настоятельно рекомендуется для всех приборов указывать канал вычислителя (измерительный трубопровод). Если он не проставлен, будет предпринята попытка привязать измеритель от узла. Она может быть выполнена успешно только в случае наличия у данного узла единственного канала. Все остальные случаи развешивания устройств по каналам необходимо будет выполнить в ИУС-ГАЗ вручную |
Код 1650. Виды договоров
Справочник.ВидыДоговоров.
1651. Пустые имена не допустимы
SELECT
Ссылка as obj,
Наименование as name
FROM
Справочник.ВидыДоговоров
WHERE
ПометкаУдаления = false
AND "" = ISNULL(Наименование, "")
Код 1700. Договоры
Справочник.ДоговорыГазовые, РегистрСведений.ПараметрыДоговора.СрезПоследних. В реальном веб-сервисе загрузка происходит из РегистрСведений.ПлощадкиПоДоговору.СрезПоследних(&CurrentDate), если он заполняется, с ЕстьСвязь. Если нет (не ведутся площадки в компании или установлена константа НеСвязыватьПлощадкуСДоговором), то из РегистрНакопления.ПланыПоставок, с планом на текущий день импорта, в том числе нулевым. Таким образом, представленные ниже запросы могут возвращать больше ошибок, нежели представлено в отчёте об ошибках импорта, но представлены, чтобы оставаться универсальными для обоих случаев.
К исправлению прежде всего предполагаются объекты, участвующие в загрузке и представленные в отчётах. Остальные ошибки, являясь ошибками по сути, не так важны для ИУС-ГАЗ, могут быть исправлены по желанию компании.
1701. Корректно проставлен вид ценообразования
ДоговорыГазовые.ВидПрейскуранта.
SELECT DISTINCT
Ссылка as obj,
ВидПрейскуранта as priority
FROM
Справочник.ДоговорыГазовые
WHERE
ПометкаУдаления = false
AND ВидПрейскуранта.Ссылка IS NULL
=== 1702. Имеются обе даты — начала и конца и они корректны.
SELECT DISTINCT
ДоговорыГазовые.Ссылка,
ДоговорыГазовые.ВидДоговора.Ссылка,
ДоговорыГазовые.Наименование,
ДоговорыГазовые.ДатаНачала,
ДоговорыГазовые.ДатаКонца,
ДоговорыГазовые.Владелец.Ссылка,
ДоговорыГазовые.ПометкаУдаления
FROM
Справочник.ДоговорыГазовые as ДоговорыГазовые
LEFT JOIN РегистрСведений.ПараметрыДоговора.СрезПоследних as ПараметрыДоговора ON (ПараметрыДоговора.Договор = ДоговорыГазовые.Ссылка И ПараметрыДоговора.Идентификатор = "СостояниеДоговора")
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"
)
)
1702. Заполнен потребитель
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 ( ДоговорыГазовые.Владелец.Ссылка IS NULL OR ДоговорыГазовые.Владелец.ПометкаУдаления = true)
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(ДоговорыГазовые.Наименование, "")
Код 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. Для связывания ТП с площадкой в ИМУС, у площадки должен обязательно быть канал
Если такая детализация не ведётся в АИС, можно использовать генерацию объектов в ИМУС.
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)
| Если имеется возможность, мы настоятельно рекомендуем разорвать связь со старыми объектами! Обратите внимание, т.к. это регистры, то вся история сохраняется и будет доступна для просмотра и после этого. Данный же признак должен отвечать, по логике вещей, за текущую взаимосвязь объектов. Я общался по этому поводу с поддержкой Аудит НТ - получить внятного ответа почему такое имеет место быть не удалось. Кому интересно, привожу полный лог беседы с Поддержкой Аудит НТ. Если же будет принято решение не снимать со старых связь, введена специальная константа ASCUG_additionalCondition_relPCtoGCOunique, позволяющая забирать только уникальные связи. В этом случае приведённый запрос не обязателен к исправлению, вместо этого будет использован описанный подход определения предпочтений, как воркараунд. |
Код 1900. Планы потребления
РегистрНакопления.ПланыПоставок.
| Все указанные проверки для планов должны быть выполнены на месяц, предшествующий текущей дате, и на все планы вперёд. Даты в запросе предполагается скорректировать самостоятельно или параметризовать запрос стандартными средствами 1С. Обратите внимание, что данные запросы могут быть достаточно медленными и «тяжелыми» с точки зрения производительности, тем более, чем больший интервал времени проверяется |
1901. Устарел. Вместо этого предлагается использовать более точные 1903 и 1904
1902. Указан сам лимит потребления на дату
Вариант определения точек подключения по подключениям:
SELECT DISTINCT
Период as date,
Договор.ОсновнойДоговор.Ссылка as contract,
Подключение.Ссылка as pc,
Количество as amount
FROM
РегистрНакопления.ПланыПоставок
WHERE
Активность
AND Количество IS NULL
Вариант определения точек подключения по площадкам оборудования:
SELECT DISTINCT
Период as date,
Договор.ОсновнойДоговор.Ссылка as contract,
ПлощадкаОборудования.Ссылка as pc,
Количество as amount
FROM
РегистрНакопления.ПланыПоставок
WHERE
Активность
AND Количество 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 Период
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
AND Договор NOT IN(
SELECT DISTINCT
Договор
FROM
РегистрСведений.ПлощадкиПоДоговору.СрезПоследних
WHERE
ЕстьСвязь
AND Договор.ПометкаУдаления = false
)
GROUP BY
Период,
Договор.ОсновнойДоговор.Ссылка,
Подключение.Ссылка
ORDER BY Период
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 Период
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(2012, 10, 1) AND DateTime(2012, 10, 31)
GROUP BY
Договор.ОсновнойДоговор,
Договор.ВидПрейскуранта,
Подключение,
ПлощадкаОборудования,
КатегорияПотребления,
Поставка
HAVING
SUM(Количество) < 0
К данному запросу следует отметить, что если не ведётся разрез планов в компании по площадкам или подключениям, группировка по данному элементу должна быть исключена из приведённого запроса.
| Обратите внимание, если приходит 0, он также будет отображаться и в ИМУС, поле будет отображаться пустым если плана вообще нет |
Код 2000. Поставка (Договоры поставки)
Справочник.ПоставкиГаза.
2001. Должен быть заполнен производитель газа
SELECT DISTINCT
Ссылка as obj,
Производитель as producer
FROM
Справочник.ПоставкиГаза
WHERE
ПометкаУдаления = false
AND (
Производитель.Ссылка IS NULL
OR
Производитель.ПометкаУдаления = true
)
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
| Имеется возможность изменить источник вида цены для субъекта распределения с помощью константы константа ASCUG_additional_plans_priority |
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"
)
)
Код 2100. Границы (коридоры) перебора и недобора
Справочник.ВидыПеребораИНедобора.
2101. Для элементов недобора необходимо указать ДопустимыйНедобор и ДопустимыйПеребор в обратном случае
Одного шаблона расчета не достаточно. В процентах.
SELECT
Ссылка,
ДопустимыйНедобор,
ДопустимыйПеребор,
ШаблонРасчета
FROM
Справочник.ВидыПеребораИНедобора
WHERE
ПометкаУдаления = false
AND (0 = ISNULL(ДопустимыйНедобор, 0) AND 0 = ISNULL(ДопустимыйПеребор, 0))
{{ Для настройки как трактовать данные цифры, имеется опция ais.ws.prcLimitAddition }}