Схема запроса: практические примеры использования

06.12.23

Разработка - Запросы

Учимся использовать схему запроса.

Несмотря на то, что объект СхемаЗапроса стал доступен довольно-таки давно (в платформе 8.3.5), коллеги продолжают работать с текстом запроса по старинке как с текстом. Попробуем начать с малого и использовать данный объект на нескольких простых примерах, с которыми мне пришлось столкнуться в реальных задачах.

 
 Пример 1. Модификация динамических списков
 
 Пример 2. Программное добавление динамического списка на форму
 
 Пример 3. Динамическое редактирование запроса СКД

 

Жду от вас замечаний, вопросов, комментариев и предложений! Надеюсь, в будущем пополню данную статью и другими примерами использования объекта СхемаЗапроса!

Напоследок, конечно же, хотелось бы выразить огромную благодарность Евгении Карук и ее замечательной статье Объектная модель запроса "Схема запроса" - теория и примеры использования, без которой, предполагаю, потратил бы в свое время не один час на разбор данного механизма платформы!

 

Что ещё почитать по теме:

Модель запроса

Объектная модель запроса "Схема запроса" 2

 

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159605    874    399    

862

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    9905    sergey279    18    

64

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5194    XilDen    36    

80

Запросы Программист Запросы Бесплатно (free)

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

16.08.2024    7926    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

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

08.07.2024    2399    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8711    implecs_team    6    

47

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3392    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kser87 2470 09.11.22 09:52 Сейчас в теме
В схеме запросов есть один тупейший момент. при добавлении 2 таблиц 1Ска иногда сама выставляет соединения. как при работе с конструктором запросов. мешает сильно
user847517; dhurricane; RocKeR_13; +3 Ответить
8. dhurricane 09.11.22 20:48 Сейчас в теме
(1) Еще один тупейший момент: добавление псевдонимов для выражений расширения языка запросов схемы компоновки данных. Тоже как при работе с конструктором. В итоге СКД работает некорректно, часть сложных отборов может сломаться. Так что я бы предостерег желающих исправлять запросы СКД схемой запросов.
zqzq; kser87; +2 Ответить
9. kser87 2470 09.11.22 23:15 Сейчас в теме
(8) точно. Много неудобств в схеме запроса. Вспомнил, что лично мне еще мешало отсутствие возможности работать со сложными полями. Например, Выбор когда тогда в полях запроса. Функций тоже не припоминаю. Приходилось ручками писать.
2. coollerinc 196 09.11.22 10:35 Сейчас в теме
Пробовал использовать схему запросов, вместо замены текста. Но так и не понял выйгрыша. Что бы изменить условие, порой приходилось писать еще больше кода, чем просто СтрЗаменить. Добавил новую временную таблицу и все нахрен сломалось в схеме. Со временем в индексах уже запутался: что у тебя под индексом 7, а что под индексом 8.
Revachol; rpgshnik; Yashazz; dabu-dabu; ltfriend; sapervodichka; Dach; +7 Ответить
3. RocKeR_13 1366 09.11.22 10:49 Сейчас в теме
(2) Во многих случаях так действительно проще и сам продолжаю использовать СтрЗаменить. Тут ситуация чем-то схожа с формированием XML-файла с использованием XDTO: иногда все же проще использовать ЗаписьXML) Но схема запроса дает возможность работать с запросом не просто как с текстом, а как с объектом: в случае необходимости сложных манипуляций будет проще использовать схему запроса, чем писать некий парсер текста. Плюс исходный запрос остается читаемым для конструктора запросов. В этом отношении самый удачный - 3 пример: когда встала данная задача, в базе было добавлено около 20 макетов со схемами компоновки данных, почти во всех использовалась виртуальная таблица оборотов выручки (где-то и не раз); в итоге задача решилась 20 строчками кода вместо рутинной корректировки всех запросов и на будущее освободила от необходимости прописывать эти отборы в новых СКД.
Andreev.a; +1 Ответить
5. WorkerPavel 09.11.22 15:47 Сейчас в теме
(3)Код из примера 3 вызывается в "ПриКомпоновкеРезультата" или где?
6. RocKeR_13 1366 09.11.22 16:04 Сейчас в теме
(5) Схемы компоновки данных используются в качестве своеобразного конструктора показателя для расчета премии. Они все компонуются программно вне контекста отчета.

Кусок кода:
Функция ВыполнитьСхемуКомпоновкиДанных(ВариантСхемы, ЗначенияПараметров, ЗначениеПоУмолчанию = 0) Экспорт
	
	ТЗ 					= Новый ТаблицаЗначений;
	Если ВариантСхемы.ИмяПредопределенногоМакета = "Произвольная" Тогда
		Схема = ВариантСхемы.ХранилищеСхемыКомпоновкиДанных.Получить();
	Иначе
		Схема = Справочники.ВариантыСхемКомпоновкиДанных.ПолучитьМакет(ВариантСхемы.ИмяПредопределенногоМакета);
	КонецЕсли;
	ПрименитьНастройкиРасчетаПремий(Схема.НаборыДанных[0].Запрос, ЗначенияПараметров);
Показать


Вот в процедуре ПрименитьНастройкиРасчетаПремий и модифицируется текст запроса с использованием схемы запроса
12. SlavaKron 10.11.22 09:19 Сейчас в теме
(6)
Схемы компоновки данных используются в качестве своеобразного конструктора показателя для расчета премии.
А как это выглядит в пользовательском интерфейсе?
13. RocKeR_13 1366 10.11.22 10:14 Сейчас в теме
(12) На первом скрине - это элемент справочника, храняющего схемы компоновки данных. Имя схемы содержит список предопределенных в расширении макетов со схемами; можно указать имя схемы "Произвольная" и в толстом клиенте добавить свою в режиме предприятия. Ну и самое интересное начинается при редактировании формулы расчета премии (второй скриншот): жирным шрифтом выделены использованные схемы компоновки данных, после "&" указаны значения интерактивных параметров в виде "ИмяПараметра=ЗначениеПараметра", которые задают сами пользователи при переносе схемы в формулу (gif-анимация).

Если будут еще вопросы по данному механизму, предлагаю переместить обсуждение собственно в интересующую вас публикацию https://infostart.ru/1c/articles/1411336/
Прикрепленные файлы:
SlavaKron; +1 Ответить
4. avp449 09.11.22 14:05 Сейчас в теме
На мой взгляд, в простых случаях (например, при изменении условий в запросе) лучше использовать старый добрый СтрЗаменить.

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

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

Во-вторых, она при редактировании автоматически делает часть работы. Например, при соединении с таблицей автоматически могут добавиться связи; при добавлении поля в одном из блоков объединения оно попадает куда попало. Впрочем, если это всё учитывать, с этим можно жить.
7. RocKeR_13 1366 09.11.22 16:05 Сейчас в теме
(4)
Схему хорошо использовать для чего-то сложного.

Именно так, в (3) это уже отметил
10. shard 281 10.11.22 02:39 Сейчас в теме
(4)
Схему хорошо использовать для чего-то сложного

получается формирование текста запроса динамического списка номенклатуры формы подбора в документ продажи в конфигурации УТ 11.5.9 (функции ПодборТоваровСервер.ТекстЗапросаСпискаФормыПодбора и ПодборТоваровСервер.ПодстрокаЗаменыПараметраШаблонаТекстаЗапроса) - случай несложный? =)
11. Aletar 10.11.22 07:15 Сейчас в теме
В контексте темы можно ещё вот эту достойную публикацию по работе со схемой запроса упомянуть: https://infostart.ru/1c/articles/1390402/
Aleskey_K; JohnyDeath; RocKeR_13; +3 Ответить
14. dhurricane 10.11.22 14:06 Сейчас в теме
15. alex_sayan 52 10.11.22 14:41 Сейчас в теме
СхемаЗапроса - это та возможность, которую желательно использовать по-немногу. Сложное редактирование текстов запросов через СхемаЗапроса превращается в отборный лапшекод
Оставьте свое сообщение