Не вполне очевидные приемы в конструкторе запросов

23.04.19

Разработка - Запросы

Приёмы работы с конструктором запросов (4 приёма).

Есть мастера, пишущие запросы текстом, но такие лентяи, как я сам, предпочитают всё-таки конструктор.

Хочется отметить приёмы, которые будут полезны для ленивых, но не очень опытных программистов:

  1. Не трогай то, что работает. При внесении правки в запрос независимо от того, является ли он  пакетным, есть всегда ленивый приём. Мы на вкладке Пакет запросов копируем текущий и/или читай последний запрос. Далее в оригинале, который мы копируем, вставляем помещение всего его вывода во временную таблицу, как-нибудь её вразумительно обозвав. Например, РаботающаяКопияПередПравкой20190422
  2. Ленивая ссылка на пустое значение. К сожалению, мне неизвестно, как при помощи этого приёма получить предопределённое значение кроме одного этого случая с пустым значением. Предположим, у нас есть конструкция, в которой в условии, где должно стоять пустое значение. Ну например мы мышкой скопировали на вкладке условие значение таблицы, которое мы хотим проверить на заполненность или в выражении мы хотим преобразовать значение типа NULL в пустое значение указанного типа. В запросе вида 
    ВЫБРАТЬ
    	ВыработкаМатериалов.Организация КАК Организация,
    	ВыработкаМатериалов.Номенклатура КАК Номенклатура
    ИЗ
    	РегистрНакопления.ВыработкаМатериалов КАК ВыработкаМатериалов

    Для иллюстрации данного примера вставим ISNULL перед ВыработкаМатериалов.Номенклатура (Так эргономичнее, чем писать ЕСТЬNULL), а далее для получения пустого значения выделяем пустой участок и вызываем конструктор из конструктора и делаем в нём выборку объекта нужного типа. Теперь после возвращения в код основного запроса код у нас приобретает следующий вид 

    ISNULL(ВыработкаМатериалов.Номенклатура,ВЫБРАТЬ
                                           	Номенклатура.Ссылка КАК Ссылка
                                           ИЗ
                                           	Справочник.Номенклатура КАК Номенклатура)

    И нам остается только откорректировать полученный текст, приведя весь запрос к виду 

    ВЫБРАТЬ
    	ВыработкаМатериалов.Организация КАК Организация,
    	ЕСТЬNULL(ВыработкаМатериалов.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура
    ИЗ
    	РегистрНакопления.ВыработкаМатериалов КАК ВыработкаМатериалов

    то есть мы вызывали конструктор из конструктора для того, чтобы не набирать вручную Справочник.Номенклатура . Аналогичный приём работает для случаев, когда нам надо обратиться к заданному типу и использовать конструкции вида ССЫЛКА и ВЫРАЗИТЬ КАК 

  3. Практически точно такой же приём удобно использовать для конструкций вида РазностьДат и Между. Например, для запроса вида

    ВЫБРАТЬ
    	АвансовыйОтчетТовары.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
    	АвансовыйОтчетТовары.ДатаСФ КАК ДатаСФ
    ИЗ
    	Документ.АвансовыйОтчет.Товары КАК АвансовыйОтчетТовары

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

    РазностьДат ( ВЫБРАТЬ
                 	АвансовыйОтчетТовары.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
                 	АвансовыйОтчетТовары.ДатаСФ КАК ДатаСФ
                 ИЗ
                 	Документ.АвансовыйОтчет.Товары КАК АвансовыйОтчетТовары)

    который мы потом корректируем

  4. и последний приём, который также может быть не вполне очевиден. Если Вы получаете на входе постановку вида "

    Используя табличную часть "Материалы" документа "ПриходнаяНакладная" напишите текст запроса, 
    возвращающий сгруппированные сведения о закупках материалов:

        Номенклатура     - материал
        Дата                   - дата покупки (без учета времени)
        Сумма             - сумма покупки
        Количество           - количество приобретения
        Ассортимент      - количество приобретенных позиций за дату (только для итогов, для детальных записей - 0), то первый же Ваш запрос должен выглядеть примерно так 

    ВЫБРАТЬ
    	"Номенклатура	 - материал" КАК Поле1,
    	"Дата 			 	 - дата покупки (без учета времени)" КАК Поле2,
    	"Сумма			 - сумма покупки" КАК Поле3,
    	"Количество 	 	 - количество приобретения" КАК Поле4,
    	"Ассортимент 	 - количество приобретненных позиций за дату (только для итогов, для детальных записей - 0)" КАК Поле5

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184733    1029    403    

968

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    2201    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

03.12.2024    5734    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13140    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8220    XilDen    36    

90

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3193    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

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

16.08.2024    10801    user1840182    5    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. timeforlive 16 24.04.19 03:17 Сейчас в теме
По мне, так лишние телодвижения.
Нужно знать элементарные вещи, как их писать ручками.

Вот всем задачка из серии "что спрашивают" на собеседовании:
Напиши на бумаге ручкой (!) запрос - левое соединение двух таблиц: остатки и продажи.
Поля остатков: номенклатура, количество, склад
Поля продажи: номенклатура, количество, организация

Порой и опытный программист забывает элементарные вещи, не говоря о конструкции соединения.
fvadim; chernov.gigansk.ru; dabu-dabu; Andrefan; melis; A_Max; Darklight; wowik; +8 Ответить
2. Darklight 34 24.04.19 09:55 Сейчас в теме
На мой взгляд какой-то бред в статье сапсан, уж простите - полезность данных приёмов я считаю почти нулевой!
fvadim; Dementor; Alfars; chernov.gigansk.ru; dabu-dabu; Andrefan; ixijixi; itmind; A_Max; +9 Ответить
Оставьте свое сообщение