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

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

JuniorOneS

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


  1. Собираем "вручную"

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

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

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

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

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


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

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

ПостроительЗапроса - наиболее распространенный способ. И не без причин.

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

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

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

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


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

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

Наш небольшой пример работает так же.


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

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

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

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

Есть много способов упростить разработку. Пользуйтесь обёртками!

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

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

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

Вот так просто добавляет нужное условие

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

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

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


А что дальше?

Это была вводная статья, в которой мы просто освежили в памяти способы работы с текстом запроса. Если вам было интересно, то не забывайте отмечать это в группе и писать свои отзывы. А далее мы ещё вернёмся к этой теме с более подробным разбором того, как можно программно работать с сложными запросами и ради интереса сравним скорость выполнения каждого из подходов.

Report Page