Налагаемые требования целостности, коды ошибок
Содержание
- 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 }}