Собираем текст запроса в 1С
Разберем способы программного "собирания" текста запроса
Часто так бывает, что разработчику нужно не просто выполнить некий определенный запрос, но ещё и программно его корректировать в зависимости от условий. А ещё страшнее, когда этот запрос нужно собрать полностью программно… Давайте кратко разберём возможные варианты решения такой задачи на примере добавления в запрос отбора на ПометкуУдаления.
Собираем “вручную”
Первый вариант первым и приходит на ум. “Почему бы текст запроса просто не отредактировать?”. Действительно, в части случаев так будет проще простого.
Можно дополнять текст запроса:
Или же его корректировать:
А так ещё лучше скорректировать - мы сможем редактировать изначальный запрос конструктором:
А ещё разные примеры можете подглядеть в старой, но актуальной статье: Условные условия и запросы
ПостроительЗапроса
Собирать вручную запрос, конечно, можно. Но чем он сложнее, тем невыносимее потом это чудо поддерживать. А зачем, ведь есть классный инструмент, специально созданный для этого.
Конечно, выглядит это не так быстро, чем СтрЗаменить()
, однако, на больших запросах намного удобнее. И не обязательно же писать именно так. Можно использовать удобные обёртки:
Мы просто передаем наш запрос и добавляемый отбор:
Пример простой обёртки, которая добавляет переданный отбор в запрос:
Пример из жизни: нужно выполнять простой запрос по регистру сведений, который просто выводит нужную колонку по нужным отборам. Сама колонка и отборы зависят от множество передаваемых параметров. И чтобы не писать кучу вариантов одного и того же запроса, используется построитель:
Так выглядит шаблон запроса и выборка нужного поля:
А здесь гибким подходом мы настраиваем построитель так, чтобы получить нужный запрос. ОписаниеПоля - это структура, в которой хранятся настройки доработки запроса:
ПостроительОтчета
Да, есть ещё один построитель. Конечно, он больше предназначен для вывода в табличный документ, но может так же работать и как построитель запроса (хоть и с нюансами). Взяв его, вы сможете разом дорабатывать запрос и для вывода в таблицу и для вывода пользователю в виде табличного документа. Для интереса можете почитать хорошую статью: Построитель отчета
СхемаКомпоновкиДанных
Программное создание СКД - это довольно замудрённый процесс. Конечно, можно, с ним работать, но для более сложных условий.
Не очень лаконично… В таких ситуациях лучше использовать не будем.:
Зачем использовать такой сложный подход, когда есть ПостроительЗапроса? Незачем) В нашем примере это будет громоздко и некрасиво. А вот если нам нужны более сложные вещи… Например, при необходимости, программно добавить второй набор данных и подтянуть их к результату основного запроса. Примеры могут быть разные, подробнее мы поговорим о них в других статьях. Ну и опять же, никто не заставляет вас программно работать с СКД без обёрток.
СхемаЗапроса
Однажды, 1С добавила в платформу объектную модель для работы с запросом. К сожалению (или к счастью?), мало кто на самом деле вник в её работу и начал применять на практике.
Преимущество такого подхода - вы получаете полный контроль над текстом запроса. Ведь именно для этого и создана СхемаЗапроса. Минусом может быть не простая модель работы, которая не будет “додумывать” за вас (как это делают построители и СКД). СхемаЗапроса требует точных указаний: что, как и где поправить. Но, овладев данным механизмом, вы сможете очень красиво программно редактировать запросы.
Подробнее можно почитать подробную статью: Работа со схемой запроса
Ради интереса, можно глянуть старенькую обработку, которая демонстрирует работу со СхемойЗапроса: Автоматическая подстановка уничтожений временных таблиц в текст запроса
И не забывайте, что всегда для удобства можно прикрутить обёртку)