Предисловие
Доброго всем времени! Поскольку я сейчас в большей степени занимаюсь работой в конфигурации 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. Уверен, что кто-то узнал об этом впервые, а кто-то давно использует, но в любом случае - данная шпаргалка будет вам полезна. Хочу так же отметить, что в типовых почему-то не сильно используется данных подход, суда по "глобальному" поиску.
Считаю, что базовое представление об этом функционале поможет вам сэкономить время и силы вместо того, чтобы пересобирать весь запрос традиционным методом и неоправданно усложнять его листинг до нескольких страниц. Вообще любые методы и способы будут хороши, если они сокращают вам время разработки и "убыстряют" выполнение кода.
Более сложные примеры вы по этой теме и другие методы работы по схемам запросов вы можете найти на нашем персональном тг-канале.



