Предисловие
Доброго всем времени! Поскольку я сейчас в большей степени занимаюсь работой в конфигурации 1С:Управление торговлей 8 (11.5), хотел бы вам сделать один обзор на совершенно типовой функционал этой конфигурации, а именно - работе с запросами по "схемам запросов".
В конфигурации существует одноименный общий модуль, в котором содержится ряд методов, позволяющих "переконструировать" ваш готовый запрос, не лезть в редактор запроса. Простыми методами можно сделать выборку, определить временные таблицы, сделать все виды соединений. Описание методов постараюсь представить достаточно полно и детально.
Я почти уверен, что многие из вас не используют данные возможности, а они будут вам очень полезны при разработке новых и доработке существующих листингов запросов. Отмечу, что похожий модуль так же доступен и в других типовых - например, в БП 3.0 (однако, он там содержит несколько другие методы).
Отмечу, что это не функционал Библиотеки стандартных подсистем (БСП), а функционал типовых, БСП ничего не знает об этом.
В своем обзоре я буду приводить примеры используя конфигурацию 1С:Управление торговлей 11.5.22.92 (длительной поддержки) на Платформе 1С 8.3.27.1688.
Если статья вам "зайдет" - сделаю обзор по методам работы со схемами запросов в БП 3.0... а так же можно далее детально рассмотреть "чистый код" работы по схемам запросов.
Я уверен, что данный материал заинтересует всех желающих - от пользователей до "матерых" кодеров. Перехожу к описанию функционала нескольких методов:
Описание функционала
В основе описания функционала лежит обзор функций общего модуля "СхемыЗапросов". Для начала создадим простой запрос, который будем менять:
// ==== основной подготовленный запрос для изменений =======
Запрос = "ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КПП КАК КПП,
| Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
1. Использование функций добавление в поля выборки ДобавитьПолеВыборкиВЗапрос:
// ===== Добавить поле новой выборки в запрос
ПолеВыборки1 = "Контрагенты.НаименованиеПолное";
НовыйТекстЗапроса = СхемыЗапросов.ДобавитьПолеВыборкиВЗапрос(Запрос,ПолеВыборки1,"НаименованиеПолное");
//Результат, автоматом добавляем поле "НаименованиеПолное":
ВЫБРАТЬ
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
2. Выборка первых записей
// ===== Количество записей ПЕРВЫЕ 5 ===
НовыйТекстЗапроса1 = СхемыЗапросов.УстановитьКоличествоПолучаемыхЗаписей(НовыйТекстЗапроса,5);
// Результат - добавит ключевое слово ПЕРВЫЕ с параметром 5:
ВЫБРАТЬ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
3. Выборка разрешенных записей
// ==== Установить разрешенные в ВЫБРАТЬ ===
НовыйТекстЗапроса2 = СхемыЗапросов.УстановитьВыборкуРазрешенныхЗаписей(НовыйТекстЗапроса1,ИСТИНА);
//Результат (Если ЛОЖЬ - РАЗРЕШЕННЫЕ удалит):
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
4. Помещение запроса во временную таблицу
// ==== Поместить во временную таблицу ===
НовыйТекстЗапроса3 = СхемыЗапросов.УстановитьПомещениеВоВременнуюТаблицу(НовыйТекстЗапроса2,"ВТ_Контрагенты");
//Результат - создал временную таблицу:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
// ==== Индексировать ===
НовыйТекстЗапроса4 = СхемыЗапросов.УстановитьИндексациюПолейЗапроса(НовыйТекстЗапроса3,"ИНН,КПП");
//Результат - а затем, проиндексировал ее по двум полям:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ИНДЕКСИРОВАТЬ ПО
ИНН,
КПП
5. Упорядочение по полям запроса
// === Порядок ====
НовыйТекстЗапроса5 = СхемыЗапросов.ДобавитьПоляУпорядочиванияВЗапрос(НовыйТекстЗапроса2,"ИНН,КПП");
//Результат - сортировка/ порядок по полям:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
УПОРЯДОЧИТЬ ПО
ИНН,
КПП
6. Конструкции соединений в запросах
// === Левое соединение с таблицей контактная информация ====
ОписаниеТаблицы = СхемыЗапросов.ОписаниеТаблицы(
Тип("ТаблицаСхемыЗапроса"),
"Справочник.Контрагенты.КонтактнаяИнформация",
"КонтрагентыКонтактнаяИнформация",
"Ссылка");
ОписаниеСоединения = СхемыЗапросов.ОписаниеСоединения(
ОписаниеТаблицы,
"КонтрагентыКонтактнаяИнформация.Ссылка = &Ссылка",
ТипСоединенияСхемыЗапроса.ЛевоеВнешнее);
ТекстЗапроса = СхемыЗапросов.ДобавитьСоединениеВЗапрос(
НовыйТекстЗапроса2,
"Контрагенты",
ОписаниеСоединения,
0);
//Результат - "автоматом" собрал вот такое ЛЕВОЕ соединение:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ПО (КонтрагентыКонтактнаяИнформация.Ссылка = &Ссылка)
Далее, приведу разбор структур ОписаниеТаблицы:
ОписаниеТаблицы = СхемыЗапросов.ОписаниеТаблицы(
Тип("ТаблицаСхемыЗапроса"),
"Справочник.Контрагенты.КонтактнаяИнформация",
"КонтрагентыКонтактнаяИнформация",
"Ссылка");
"Справочник.Контрагенты.КонтактнаяИнформация" - соединяемая таблица;
"КонтрагентыКонтактнаяИнформация" - псевдоним соединяемой таблицы;
"Ссылка" - Доступные поля;
и ОписаниеСоединения:
ОписаниеСоединения = СхемыЗапросов.ОписаниеСоединения(
ОписаниеТаблицы,
"КонтрагентыКонтактнаяИнформация.Ссылка = &Ссылка",
ТипСоединенияСхемыЗапроса.ЛевоеВнешнее);
ОписаниеТаблицы - конструктор описания таблицы (см выше)
"КонтрагентыКонтактнаяИнформация.Ссылка = &Ссылка" - связь таблиц
ТипСоединенияСхемыЗапроса.ЛевоеВнешнее - тип соединения, где возможно
Внутреннее, ПолноеВнешнее, ЛевоеВнешнее и ПравоеВнешнее
7. Далее, привожу еще один метод, который меняет псевдоним поля в тексте запроса:
НовыйТекстЗапроса5 = СхемыЗапросов.ИзменитьПсевдонимПоляВыборкиВЗапросе(НовыйТекстЗапроса2,"ЮридическоеФизическоеЛицо","юфЛицо1");
//Результат - переименовал псевдоним поля:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК юфЛицо1,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
8. И еще один метод, удаление псевдонимов из запроса:
НовыйТекстЗапроса5 = СхемыЗапросов.УдалитьПоляИзЗапроса(НовыйТекстЗапроса2, "ИНН,КПП");
//Результат - удалил "колонки" по наименованию ИНН, КПП:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 5
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.НаименованиеПолное КАК НаименованиеПолное
ИЗ
Справочник.Контрагенты КАК Контрагенты
Итак, мы рассмотрели несколько методов по доработке и "сборке" запроса, приведены несколько примеров и результаты их выполнения. Теперь, перейдем к заключению и сделаем выводы.
Выводы
В данном материале я сделал небольшой обзор 8 методов на основные типовые возможности по доработке и сборке запросов, использовав конфигурацию 1С:УТ 11.5. Уверен, что кто-то узнал об этом впервые, а кто-то давно использует, но в любом случае - данная шпаргалка будет вам полезна. Хочу так же отметить, что в типовых почему-то не сильно используется данных подход, суда по "глобальному" поиску.
Считаю, что базовое представление об этом функционале поможет вам сэкономить время и силы вместо того, чтобы пересобирать весь запрос традиционным методом и неоправданно усложнять его листинг до нескольких страниц. Вообще любые методы и способы будут хороши, если они сокращают вам время разработки и "убыстряют" выполнение кода.
Более сложные примеры вы по этой теме и другие методы работы по схемам запросов вы можете найти на нашем персональном тг-канале.
Дополнительные материалы
Если вам понравился материал автора, вы можете так же ознакомиться с рядом его интересных разработок для разных конфигураций. Ниже представлена лишь малая часть - по обмену данными, работе с торговым оборудованием на разных БПО и отчеты для типовых УТ 11, ЗУП 3.1 и БП 3.0:
Другие встроенные возможности УТ 11.5:
Печать документов и пречеков на ККМ в УТ 11.5
Редактирование колонки "Цена" в РМК УТ 11.5 [сентябрь 2025]
Типовая работа с табличными частями УТ 11.5, аналог которой программист каждый раз изобретает сам
Обмен данными:
Служебная выгрузка-загрузка номенклатуры, штрихкодов, остатков, видов цен из 1С:Розницы в 1С:Розницу
Простой и быстрый перенос справочника "Номенклатура" из УТ 11.4 в Розницу 2.3
Работа с торговым оборудованием:
Работа с эмулятором дисплея покупателя через БПО
Произвольная текстовая строка в кассовом чеке ККМ по стандарту БПО
Работа с типовыми ЗУП 3.1 и БП 3.0
Штатный программный функционал работы с сотрудниками организаций в ЗУП 3.1
Взаиморасчеты с сотрудниками - начислено, удержано и выплачено для ЗУП 3.1 [Май 2025]
Отработанное и оплаченное время сотрудников организации по видам начислений для ЗУП 3.1
Пересборка отчета по ОС - бухгалтерский учет
Доходы и расходы хозрасчетного плана счетов для 1С:БП 3.0 (2025 г.)
Начисления, НДФЛ и взносы за период для ЗУП 3.1 [Апрель 2025]
Вступайте в нашу телеграмм-группу Инфостарт