Оглавление
Подсистема Работа со схемой запроса. 1
Построение структуры запроса. API 1
Шаблон «Выборка из временной таблицы». 1
Шаблон «Построение текста запроса по параметрам отбора». 1
Шаблон «Последовательность преобразований источника»
Шаблон «Расширение данных источника»
. 1Шаблон "Работа с характеристиками"
Обработка «Конструктор схемы запроса». 1
Введение
До версии платформы 8.3.5 не существовало такого объекта как "Схема запроса". В задачах, где требовалось построить текст запроса динамическим образом, текст запроса собирался из фрагментов текстовых блоков. Встречались и такие варианты, когда динамический текст запроса мог моделироваться с помощью параметров. Последний вариант, пожалуй, наихудший способ получения текста запроса, так как в этом случае вероятнее всего страдала производительность при его выполнении.
Код построения запроса из текстовых фрагментов мог быть весьма запутанным. Такой код в большей степени не содержал собственно логики построения запроса, а отражал логику работы с текстом. В целом это отрицательно сказывалось на отладке, сопровождении и развитии такого кода.
Объектная модель запроса, реализованная в платформе начиная с версии 8.3.5, позволила при решении задачи получения динамического текста запроса использовать код, который уже отражал бы не манипуляции с текстом, а логику структурного построения запроса. Кроме того, в объектной модели нет смысла в манипуляции с параметрами запроса для динамического изменения логики работы запроса. Таким образом программное формирование текста запроса с использованием объектной модели позволяет получить код, подчиненный логике запроса и делает ненужным манипуляции с параметрами. Первое способствует упрощению отладки, уменьшению затрат на сопровождение и развитие программного кода, а второе - лучшей производительности выполнения запроса.
Объектная модель запроса
Описание объектной модели схемы запроса можно найти во встроенной справке конфигуратора. Основные принципы, заложенные в модель и базовые алгоритмы работы с ней, а также подводные камни - я попытаюсь описать ниже.

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

Рисунок 2. Источники оператора Выбрать
Данные выборки определяются Источниками. Самой простой тип Источника - это физическая таблица, для него не требуется указывать параметры.
Для виртуальной таблицы доступны параметры, по которым будет построена таблица при выполнении запроса. Список параметров для каждого вида виртуальной таблицы можно уточнить во встроенной справке (Работа с запросом -> Таблицы). В модели доступ к параметрам осуществляется по индексу.
В случае, когда необходимо описать в качестве Источника временную таблицу, которая будет создана из прикладного объекта или получена из менеджера временных таблиц, нужно указать имя параметра запроса или имя временной таблицы из менеджера временных таблиц.
Для получения связанных отношениями данных мало указать только Источники, необходимо также указать их связи или в терминах объектной модели - Соединения. По сути Соединения содержат информацию о связях двух Источников по некоторому условию.
Данные Источников оператора Выбрать определяют доступные для выбора поля. На уровне запроса поля операторов Выбрать группируются в колонках (см. описание Колонки).
Завершается описание оператора Выбрать указанием условий отбора.
При использовании агрегатных функций в выражениях полей выборки все поля, не содержащие агрегатную функцию, попадают в поля группировки.
Сортировка или в терминах модели - Порядок, определяется перечнем полей и направлений сортировки. Определяется порядок на уровне колонок запроса.
Колонки запроса определят поля выборки. При объединении нескольких операторов Выбрать одной колонке будет соответствовать несколько полей (по одному от каждого оператора Выбрать).
В отличии от полей оператора в колонках запроса можно задать тип и порядок.
Таблица 1. Соотнесение колонок запроса и полей операторов Выбрать
|
Индекс |
Колонка запроса |
Поле оператора 1 |
... |
Поле оператора N |
|
0 |
Псевдоним 1 |
Путь к данным 1 |
... |
Путь к данным 1 |
|
1 |
Псевдоним 2 |
Путь к данным 2 |
... |
Путь к данным 2 |
|
... |
... |
... |
... |
... |
|
N |
Псевдоним N |
Путь к данным N |
... |
Путь к данным N |
На уровне Запроса, помимо группировки в операторах Выбрать, можно также описать получение итогов. Итоги описываются перечнем полей группировки и выражений итогов. Поля группировки в терминологии модели - Контрольные точки итогов помимо названия поля содержат также дополнительные параметры: Начало периода дополнения, Конец периода дополнения, Тип дополнения периодами, Тип контрольной точки. Также в Запросе можно указать признак Общие итоги.
Текст запроса можно получить как для всего пакета запросов, так и для отдельного запроса из пакета.
Работая с объектом "Схема запроса" необходимо понимать одну важную особенность поведения этого объекта. Дело в том, что "Схема запроса" работает на программном уровне также, как и в конструкторе запроса в интерактивном режиме. Так, Вы можете заметить, что добавляя таблицы, конструктор также может добавлять и связи, если находит подходящие для этого поля совпадающего типа в обоих источниках. Такое же поведение на программном уровне вызывает недоумение (по крайней мере у меня), так я, как программист, не ожидаю, что при добавлении источника у меня вдруг появятся еще и связи к нему. Хотя с другой стороны, при удалении временной таблицы или поля, вполне логично, что все ссылки на эту таблицу как на источник или на удаленные поля будут очищены, а связи по ним удалены. При использовании агрегатных функций в полях выборки автоматически добавляются и поля группировки.
Это же интерактивное поведение накладывает ограничение на порядок построения схемы запроса:
- Запрос пакета 0
- Оператор Выбрать
- Источники
- Соединения, Поля
- Отбор
- Оператор Выбрать ...
- Колонки, порядок, итоги
- Оператор Выбрать
- Запрос пакета 1 ...
Подсистема Работа со схемой запроса
Работа напрямую с объектом "Схема запроса" обладает рядом недостатков:
- на простые действия требуется много кода. Для описания поля требуется три строки кода: добавить выбираемые поля, установить поле колонки, установить псевдоним колонки.
- элементы интерактивного поведения приводят к неоднозначности кода. При добавлении источника могут возникать одно или несколько соединений, причем как с добавленным источником, так и с существовавшим ранее.
- некоторые объекты возникают и существуют по умолчанию, что приводит к необходимости писать разный код в зависимости от того первый это элемент или последующий. Первый запрос пакета существует по умолчанию, аналогично и для оператора - их нельзя никак удалить.
- поддерживаются только простые операции по построению модели, что не позволяет писать более компактный код с использованием повторяющихся структур (см. сервисные функции подсистемы)
Предлагаемая подсистема позволяет нивелировать недостатки работы объекта схемы запроса. Функции подсистемы позволяют за один вызов добавить и настроить объект подсистемы. Для достижения однозначности работы результат «интерактивных» действий объекта очищается. Объекты, которые нельзя удалить, переиспользуются при последующем вызове функции добавления. Также в подсистему добавлены сервисные функции поддержки построения запроса.
Построение структуры запроса. API
Более подробное описание API подсистемы находится в самом модуле. К функциям модуля есть комментарии в формате стандартов 1С (Описание процедур и функций), дающие полное представление об их работе: общее описание, описание параметров, примеры. Это описание доступно в контекстной подсказке при наборе кода.
Таблица 2. API
|
Функции |
Краткое описание |
|
Работа с запросом |
|
|
ДобавитьЗапросПакета |
Добавляет запрос выбора, создания временной таблицы, на уничтожение временной таблицы |
|
ДобавитьЗапросПакетаИзТаблицы |
Добавляет запрос пакета с источником из временной таблицы. В качестве источника можно указать другой запрос создания временной таблицы или имя временной таблицы. |
|
УстановитьИндексЗапросаПакета |
Вступайте в нашу телеграмм-группу
Инфостарт
Схема запроса Объектная модель Конструктор запросов Конвертация Консоль
Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С. 16500 руб.
02.09.2020
273320
1519
422
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО. 24900 руб.
20.08.2024
77053
388
171
Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26 22570 руб.
06.10.2023
41268
120
54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше.
Далее в публикации:
MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025
67000
134
38
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено».
Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости.
Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026
10169
43
61
Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах. 17000 руб.
10.11.2023
27104
99
46
SALE! %
Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Бизнес-аналитик 1С:Предприятие 8 1С 8.3 1С 8.5 1C:ERP 1С:УТ 1С:ДО 1С:Бухгалтерия 3.0 1С:ERP. Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Россия Платные (руб)
Универсальный инструмент программиста для администрирования конфигураций.
Сборник наиболее часто используемых обработок под единым интерфейсом.
14.01.2013
215036
1246
0
Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)
Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным 9500 руб.
17.05.2024
55448
189
63
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора. № 811832 Создание 24.04.18 09:32 Обновление 14.09.20 21:48
Просмотры
80274
Загрузки
200
Рейтинг
229
Комментарии
44
Код открыт
Да
Рубрики
Инструментарий разработчика
Кому
Программист
Тип файла
Конфигурация (md, cf)
Платформа
1С:Предприятие 8
Конфигурация
Универсальные
Операционная система
Не имеет значения
Страна
Не имеет значения
Отрасль
Не имеет значения
Налоги
Не имеет значения
Вид учета
Не имеет значения
Доступ к файлу
Абонемент ($m)
|