Пост

Собираем текст запроса в 1С

Разберем способы программного "собирания" текста запроса


Часто так бывает, что разработчику нужно не просто выполнить некий определенный запрос, но ещё и программно его корректировать в зависимости от условий. А ещё страшнее, когда этот запрос нужно собрать полностью программно… Давайте кратко разберём возможные варианты решения такой задачи на примере добавления в запрос отбора на ПометкуУдаления.

Собираем “вручную”

Первый вариант первым и приходит на ум. “Почему бы текст запроса просто не отредактировать?”. Действительно, в части случаев так будет проще простого.

Можно дополнять текст запроса:

Скрин

Или же его корректировать:

Скрин

А так ещё лучше скорректировать - мы сможем редактировать изначальный запрос конструктором:

Скрин

А ещё разные примеры можете подглядеть в старой, но актуальной статье: Условные условия и запросы

ПостроительЗапроса

Собирать вручную запрос, конечно, можно. Но чем он сложнее, тем невыносимее потом это чудо поддерживать. А зачем, ведь есть классный инструмент, специально созданный для этого.

Скрин

Конечно, выглядит это не так быстро, чем СтрЗаменить(), однако, на больших запросах намного удобнее. И не обязательно же писать именно так. Можно использовать удобные обёртки:

Мы просто передаем наш запрос и добавляемый отбор: Скрин

Пример простой обёртки, которая добавляет переданный отбор в запрос: Скрин

Пример из жизни: нужно выполнять простой запрос по регистру сведений, который просто выводит нужную колонку по нужным отборам. Сама колонка и отборы зависят от множество передаваемых параметров. И чтобы не писать кучу вариантов одного и того же запроса, используется построитель:

Так выглядит шаблон запроса и выборка нужного поля: Скрин

А здесь гибким подходом мы настраиваем построитель так, чтобы получить нужный запрос. ОписаниеПоля - это структура, в которой хранятся настройки доработки запроса: Скрин

ПостроительОтчета

Да, есть ещё один построитель. Конечно, он больше предназначен для вывода в табличный документ, но может так же работать и как построитель запроса (хоть и с нюансами). Взяв его, вы сможете разом дорабатывать запрос и для вывода в таблицу и для вывода пользователю в виде табличного документа. Для интереса можете почитать хорошую статью: Построитель отчета

Скрин

СхемаКомпоновкиДанных

Программное создание СКД - это довольно замудрённый процесс. Конечно, можно, с ним работать, но для более сложных условий.

Не очень лаконично… В таких ситуациях лучше использовать не будем.: Скрин

Зачем использовать такой сложный подход, когда есть ПостроительЗапроса? Незачем) В нашем примере это будет громоздко и некрасиво. А вот если нам нужны более сложные вещи… Например, при необходимости, программно добавить второй набор данных и подтянуть их к результату основного запроса. Примеры могут быть разные, подробнее мы поговорим о них в других статьях. Ну и опять же, никто не заставляет вас программно работать с СКД без обёрток.

Скрин

СхемаЗапроса

Однажды, 1С добавила в платформу объектную модель для работы с запросом. К сожалению (или к счастью?), мало кто на самом деле вник в её работу и начал применять на практике.

Преимущество такого подхода - вы получаете полный контроль над текстом запроса. Ведь именно для этого и создана СхемаЗапроса. Минусом может быть не простая модель работы, которая не будет “додумывать” за вас (как это делают построители и СКД). СхемаЗапроса требует точных указаний: что, как и где поправить. Но, овладев данным механизмом, вы сможете очень красиво программно редактировать запросы.

Подробнее можно почитать подробную статью: Работа со схемой запроса

Ради интереса, можно глянуть старенькую обработку, которая демонстрирует работу со СхемойЗапроса: Автоматическая подстановка уничтожений временных таблиц в текст запроса

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

Авторский пост защищен лицензией CC BY 4.0 .