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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 Comments

  1. timeforlive

    По мне, так лишние телодвижения.

    Нужно знать элементарные вещи, как их писать ручками.

    Вот всем задачка из серии «что спрашивают» на собеседовании:

    Напиши на бумаге ручкой (!) запрос — левое соединение двух таблиц: остатки и продажи.

    Поля остатков: номенклатура, количество, склад

    Поля продажи: номенклатура, количество, организация

    Порой и опытный программист забывает элементарные вещи, не говоря о конструкции соединения.

    Reply
  2. Darklight

    На мой взгляд какой-то бред в статье сапсан, уж простите — полезность данных приёмов я считаю почти нулевой!

    Reply

Leave a Comment

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