Редактор запросов

23.11.25

Разработка - Инструментарий разработчика

Когда к запросу применяются сотни отборов с соединением с половиной таблиц базы данных, мы используем обработку "Редактор запросов" для пакетной фильтрации и порционной выборки данных.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Редактор запросов:
.zip 24,47Kb
7 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Друзья, обработка представляет собой обертку схемы запросов, позволяющую редактировать запрос через объектную модель. В редакторе запросов реализовано:

  • Добавление отборов, полей выборки, соединений, параметров виртуальных таблиц
  • Добавление "подзапросов", запросов и пакетов запросов
  • Добавление "подзапросов" выполняемых в привилегированном режиме
  • Выполнение порционной выборки данных (спасибо за реализацию, Алексею Козленко @AIKozlenko)
  • Использование программных таблиц "Сведения объектов" (изменение от 2025.06.25)
  • Использование циклической вложенной фильтрации (изменение от 2025.09.29) 

 

Базовый запрос это выборка минимального набора полей необходимого для выполнения сортировки или дальнейшей расшифровки. В основном это "Ссылка" и все поля по которым необходимо выполнение настройки сортировки.

 

1. Выполним инициализацию редактора запросов с загрузкой базового запроса.


// Базовый запрос
БазовыйЗапросТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1000
	|	Справочник1.Ссылка КАК Ссылка,
	|	Справочник1.Реквизит1 КАК Реквизит1
	|ИЗ
	|	Справочник.Справочник1 КАК Справочник1
	|
	|УПОРЯДОЧИТЬ ПО
	|	Реквизит1";

БазовыйЗапрос = Новый Запрос(БазовыйЗапросТекст);

// Создадим редактор запросов 
РедакторЗапросов = Обработки.га_РедакторЗапросов.Инициализировать(БазовыйЗапрос);

2. Выполним добавление отбора в последний запрос.

// Добавим отбор
Значения = Новый Массив;
Значения.Добавить("Значение1");
Значения.Добавить("Значение2");

РедакторЗапросов.ПоследнийЗапросУсловиеДобавить("Справочник1.Реквизит1", "=", Значения);

Если условие сложное, возможно добавить напрямую выражением схемы запроса:

РедакторЗапросов.ПоследнийЗапросУсловиеВыражениеСхемыЗапросаДобавить("Справочник1.Реквизит1 В(&Реквизит1_0)");

Итоговый текст запроса:

 

3. Выполним соединение с дополнительной таблицей с установкой отбора.

// Добавим подзапрос и установим отбор
ПодзапросТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	БазовыйЗапрос.*
	|ИЗ
	|	БазовыйЗапрос КАК БазовыйЗапрос
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК РегистрСведений1
	|		ПО БазовыйЗапрос.Ссылка = РегистрСведений1.Измерение1 	
	|ГДЕ
	|	РегистрСведений1.Ресурс1 = &Ресурс1";

Подзапрос = Новый Запрос(ПодзапросТекст);
Подзапрос.УстановитьПараметр("Ресурс1", "Значение1");

РедакторЗапросов.ПодзапросДобавить(Подзапрос);
РедакторЗапросов.ПоследнийЗапросУсловиеДобавить("РегистрСведений1.Ресурс2", ">", "Значение2");

Базовый запрос будет помещен во временную таблицу с применением "подзапроса" и удалением временной таблицы. Выражения сортировки и ограничения количества перейдут в новый запрос.

Итоговый текст запроса:

 

4. Выполним создание пакета временных таблиц с последующим использованием в "подзапросе".

// Добавим пакет временных таблиц, добавим подзапрос и установим отбор
ПакетВременныхТаблицТекст = 
	"ВЫБРАТЬ
	|	РегистрСведений2.Измерение1 КАК Измерение1,
	|	РегистрСведений2.Измерение2 КАК Измерение2,
	|	РегистрСведений2.Измерение3 КАК Измерение3
	|ПОМЕСТИТЬ ДополнительныеДанные
	|ИЗ
	|	РегистрСведений.РегистрСведений2 КАК РегистрСведений2
	|ГДЕ
	|	РегистрСведений2.Измерение1 В
	|			(ВЫБРАТЬ
	|				БазовыйЗапрос.Ссылка КАК Ссылка
	|			ИЗ
	|				БазовыйЗапрос КАК БазовыйЗапрос)";
	
ПодзапросТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	БазовыйЗапрос.*
	|ИЗ
	|	БазовыйЗапрос КАК БазовыйЗапрос
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДополнительныеДанные КАК ДополнительныеДанные
	|		ПО БазовыйЗапрос.Ссылка = ДополнительныеДанные.Измерение1";

ПакетВременныхТаблиц = Новый Запрос(ПакетВременныхТаблицТекст);
Подзапрос = Новый Запрос(ПодзапросТекст); 

РедакторЗапросов.ПакетВременныхТаблицИПодзапросДобавить(ПакетВременныхТаблиц, Подзапрос);	
РедакторЗапросов.ПоследнийЗапросУсловиеДобавить("ДополнительныеДанные.Измерение2", "=", "Значение1");

Итоговый текст запроса:

 

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

// Добавим отбор в базовый запрос
РедакторЗапросов.БазовыйЗапросУсловиеДобавить("Справочник1.Реквизит2", "=", "Значение1");

Текст "подзапроса" кешируется, поэтому также сохраняется доступ и к ним

// Кеширование подзапроса
ПодзапросТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	БазовыйЗапрос.*
	|ИЗ
	|	БазовыйЗапрос КАК БазовыйЗапрос
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК РегистрСведений1
	|		ПО БазовыйЗапрос.Ссылка = РегистрСведений1.Измерение1 	
	|ГДЕ
	|	РегистрСведений1.Ресурс1 = &Ресурс1";

Подзапрос = Новый Запрос(ПодзапросТекст); 

ИндексПакета = РедакторЗапросов.ПодзапросДобавить(Подзапрос);
РедакторЗапросов.ЗапросУсловиеДобавить(ИндексПакета, "РегистрСведений1.Ресурс3", "<>", "Значение1");

Итоговый текст запроса:

 

6. При необходимости выполнение "подзапроса" возможно выполнить в привилегированном режиме.

// Выполнение подзапроса в привилегированном режиме
ПодзапросТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	БазовыйЗапрос.*
	|ИЗ
	|	БазовыйЗапрос КАК БазовыйЗапрос
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений3 КАК РегистрСведений3
	|		ПО БазовыйЗапрос.Ссылка = РегистрСведений3.Измерение1";

Подзапрос = Новый Запрос(ПодзапросТекст);
РедакторЗапросов.ПодзапросВПривилегированномРежимеДобавить(Подзапрос);

Итоговый текст запроса:

 

7. После окончания редактирования возможно получить выборку или поместить результат в менеджер временных таблиц для дальнейшего использования.

// Получим выборку
Выборка = РедакторЗапросов.СкомпоноватьИВыбрать();


// Получим выборку и поместим результат во временную таблицу
ВыборкаОписание = РедакторЗапросов.СкомпоноватьИВыбратьСПомещениемВоВременнуюТаблицу();

// ВыборкаОписание.Выборка
// ВыборкаОписание.МенеджерВременныхТаблиц
// ВыборкаОписание.ТаблицаВМенеджере

 

8. Редактор запросов возможно использовать для порционной выборки данных. Базовый запрос выполнится и будет помещен во временную таблицу целиком, а запрос расшифровки будет скользить по базовому в цикле, с установленной порцией.

// Базовый запрос
БазовыйЗапросТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Справочник1.Ссылка КАК Ссылка,
	|	Справочник1.Реквизит1 КАК Реквизит1
	|ИЗ
	|	Справочник.Справочник1 КАК Справочник1
	|
	|УПОРЯДОЧИТЬ ПО
	|	Реквизит1";


// Запрос расшифровки
ЗапросРасшифровкиТекст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	БазовыйЗапрос.Ссылка КАК Ссылка,
	|	РегистрСведений2.Измерение1 КАК Измерение1,
	|	РегистрСведений2.Измерение2 КАК Измерение2,
	|	РегистрСведений2.Измерение3 КАК Измерение3,
	|	РегистрСведений2.Ресурс1 КАК Ресурс1
	|ИЗ
	|	БазовыйЗапрос КАК БазовыйЗапрос
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений2 КАК РегистрСведений2
	|		ПО БазовыйЗапрос.Ссылка = РегистрСведений2.Измерение1";


БазовыйЗапрос 		= Новый Запрос(БазовыйЗапросТекст);
ЗапросРасшифровки 	= Новый Запрос(ЗапросРасшифровкиТекст);

РедакторЗапросов 	= Обработки.га_РедакторЗапросов.Инициализировать(БазовыйЗапрос);	
Выборка			= Неопределено;	

Пока РедакторЗапросов.СкомпоноватьИВыбратьСОбходомПостранично(Выборка, ОбходРезультатаЗапроса.Прямой, 100, ЗапросРасшифровки) Цикл

	// Выборка.Ссылка
	// Выборка.Измерение1
	// Выборка.Измерение2
	// Выборка.Измерение3
	// Выборка.Ресурс1

КонецЦикла;	

 

9. Редактор запросов позволяет использовать программную таблицу "Сведения объектов".

Описание реализации доступно в этой статье.

 

10. Редактор запросов позволяет использовать циклическую вложенную фильтрацию.

Описание реализации доступно в этой статье.

 

Как видите, все просто, данная разработка в помощь!

Обработка является частью модуля Стандартные подсистемы.

Проект и исходный код доступен на GitLab. 

 

 -----

Требования:

- Обработка предназначена для версии платформы >= 8.3.13, тестировалась на 8.3.21.1895

- БСП, процедура "ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру

 

-----

Ссылки:
Проект в GitLab

 

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.243

Вступайте в нашу телеграмм-группу Инфостарт

Редактор запросов Схема запроса

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

10000 руб.

02.09.2020    269039    1497    422    

1180

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    75471    381    170    

326

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    40320    115    54    

127

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    64224    130    36    

139

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    9116    39    50    

54

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    26518    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2704    6    0    

21

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным

9500 руб.

17.05.2024    54900    188    63    

220
Для отправки сообщения требуется регистрация/авторизация