Вывод всех элементов справочника в запросе
Доброго времени суток, следовательно задача такая:
Выбрать Приборы Учётов из Справочника и если у них есть записи в регистре Поверки Приборов Учета в отдельной колонке установить отметку.
Запрос следующий:
Выбирает он 180+ элементов справочника, но их около 800. Я понимаю, что делает он правильно - выбирает только те у которых есть записи в регистре с определенных регистраторов. Но я хочу увидеть все 800 с отметкой + или -, следовательно есть записи в регистре или нет.
Выбрать Приборы Учётов из Справочника и если у них есть записи в регистре Поверки Приборов Учета в отдельной колонке установить отметку.
Запрос следующий:
Запрос |
---|
"ВЫБРАТЬ
| ПриборыУчета.Ссылка КАК Ссылка,
| ПриборыУчета.Наименование КАК Наименование,
| ПриборыУчета.Код КАК Код,
| ПриборыУчета.Услуга КАК Услуга,
| ПриборыУчета.ЗаводскойНомер КАК ЗаводскойНомер,
| ПриборыУчета.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| КОЛИЧЕСТВО(ПриборыУчетаПовторения.Ссылка) КАК КоличествоПовторений,
| ВложенныйЗапрос.ЛицевойСчёт,
| ВложенныйЗапрос1.Регистратор КАК РегистраторПоверки
|ИЗ
| Справочник.ПриборыУчета КАК ПриборыУчета
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПриборыУчета КАК ПриборыУчетаПовторения
| ПО ПриборыУчета.Наименование = ПриборыУчетаПовторения.Наименование
| И ПриборыУчета.Услуга = ПриборыУчетаПовторения.Услуга
| И ПриборыУчета.ЗаводскойНомер = ПриборыУчетаПовторения.ЗаводскойНомер
| И ПриборыУчета.ЕдиницаИзмерения = ПриборыУчетаПовторения.ЕдиницаИзмерения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| УстановленныеПриборыУчетаСрезПоследних.ОбъектУстановки КАК ЛицевойСчёт,
| УстановленныеПриборыУчетаСрезПоследних.ПриборУчета КАК ПриборУчета
| ИЗ
| РегистрСведений.УстановленныеПриборыУчета.СрезПоследних КАК УстановленныеПриборыУчетаСрезПоследних) КАК ВложенныйЗапрос
| ПО ПриборыУчета.Ссылка = ВложенныйЗапрос.ПриборУчета
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ПоверкиПриборовУчетаСрезПоследних.ПриборУчета КАК ПриборУчета,
| ПоверкиПриборовУчетаСрезПоследних.Регистратор КАК Регистратор
| ИЗ
| РегистрСведений.ПоверкиПриборовУчета.СрезПоследних КАК ПоверкиПриборовУчетаСрезПоследних) КАК ВложенныйЗапрос1
| ПО ПриборыУчета.Ссылка = ВложенныйЗапрос1.ПриборУчета
|
|СГРУППИРОВАТЬ ПО
| ПриборыУчета.ЗаводскойНомер,
| ПриборыУчета.Код,
| ПриборыУчета.Ссылка,
| ПриборыУчета.Наименование,
| ПриборыУчета.Услуга,
| ПриборыУчета.ЕдиницаИзмерения,
| ВложенныйЗапрос.ЛицевойСчёт,
| ВложенныйЗапрос1.Регистратор
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(ПриборыУчетаПовторения.Ссылка) > 1
|
|УПОРЯДОЧИТЬ ПО
| КоличествоПовторений УБЫВ,
| ЗаводскойНомер" Показать |
Выбирает он 180+ элементов справочника, но их около 800. Я понимаю, что делает он правильно - выбирает только те у которых есть записи в регистре с определенных регистраторов. Но я хочу увидеть все 800 с отметкой + или -, следовательно есть записи в регистре или нет.
По теме из базы знаний
- Уровни, глубина, прародители, циклы и аналоги запросом
- Уровни иерархии предков элементов справочника запросом
- Иерархия справочника (определение верхней родительской группы для всех элементов справочника + формирование текста запроса)
- Синхронизация справочников или импорт данных через HTTP-сервис
- Простой обмен (запрос через web-сервис)
Найденные решения
Поскольку используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ то остаются только найденные записи в обеих таблицах.Возможно в регистре записей меньше, чем в справочнике элементов. Лучше тогда использовать ЛЕВОЕ СОЕДИНЕНИЕ. Тогда к имеющимся в таблице справочника данными будут добавлены, если есть соотвестсвие, записи из регистров. Ну и если там нет соответсвия, то будет NULL.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Поскольку используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ то остаются только найденные записи в обеих таблицах.Возможно в регистре записей меньше, чем в справочнике элементов. Лучше тогда использовать ЛЕВОЕ СОЕДИНЕНИЕ. Тогда к имеющимся в таблице справочника данными будут добавлены, если есть соотвестсвие, записи из регистров. Ну и если там нет соответсвия, то будет NULL.
(6)Есть. Но можно и так поменять слово ВНУТРЕНЕЕ на ЛЕВОЕ.Кроме того можно заменить поле ВложенныйЗапрос.ЛицевойСчёт, на ЕстьNULL(ВложенныйЗапрос.ЛицевойСчёт,"").
Но странно что сил написать такой запрос хватило, а узнать отличие Левого от Внутреннего - нет...Вы подозрительны...
Но странно что сил написать такой запрос хватило, а узнать отличие Левого от Внутреннего - нет...Вы подозрительны...
(10)
в данном случае если в регистре нет записи то в данном поле будет NULL. Запись ЕстьNULL(ВложенныйЗапрос.ЛицевойСчёт,"") сделает в данном случае подмену значения NULL на значение типа строка - "". По сути смысла в этом может и не быть ведь значение никем может не обрабатываться или значение будет иметь только заполненое значение. Но по=хорошему надо делать так. Мне говорили так.
в данном случае если в регистре нет записи то в данном поле будет NULL. Запись ЕстьNULL(ВложенныйЗапрос.ЛицевойСчёт,"") сделает в данном случае подмену значения NULL на значение типа строка - "". По сути смысла в этом может и не быть ведь значение никем может не обрабатываться или значение будет иметь только заполненое значение. Но по=хорошему надо делать так. Мне говорили так.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот