Содержание:
Файлы материала

Описание
При доработке конфигурации, периодически требуется изменить существующий “Запрос”. Раньше такая задача решалась с помощью строковой функции по типу СтрЗаменить(“ТекстЗапроса”, “Поле КАК Поле”, “Поле КАК Поле, МоеПоле КАК МоеПоле”).
Такой подход не всегда удобен и может привести к ошибкам после изменения исходного запроса в обновлении.
Начиная с платформы 8.3.5 появилась возможность работать с объектной моделью запроса, реализованная через объект с типом “СхемаЗапроса”. В который можно загрузить существующий запрос и откорректировать его или создать новый запрос с нуля.
Ниже приведены примеры по работе со схемой запроса:
Добавление поля в запрос

1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Инициализация схемы запроса СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапросаДо); ПоследнийЗапросПакета = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество() - 1]; ОператорПоследнегоЗапроса = ПоследнийЗапросПакета.Операторы[0]; // Установка поля в схему запроса ОператорПоследнегоЗапроса.ВыбираемыеПоля.Добавить("Сотрудники.ФизическоеЛицо"); ПоследнийЗапросПакета.Колонки[ПоследнийЗапросПакета.Колонки.Количество()-1].Псевдоним = "ФизическоеЛицо"; // Получение результата ТекстЗапросаПосле = СхемаЗапроса.ПолучитьТекстЗапроса(); |
Добавление условия в запрос

1 2 3 4 5 6 7 8 9 10 11 12 |
// Инициализация схемы запроса СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапросаДо); ПоследнийЗапросПакета = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество() - 1]; ОператорПоследнегоЗапроса = ПоследнийЗапросПакета.Операторы[0]; // Установка условия в схему запроса ОператорПоследнегоЗапроса.Отбор.Добавить("Сотрудники.ПометкаУдаления = Ложь"); // Получение результата ТекстЗапросаПосле = СхемаЗапроса.ПолучитьТекстЗапроса(); |
Добавление левого соединения

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Инициализация схемы запроса СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапросаДо); ПоследнийЗапросПакета = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество() - 1]; ОператорПоследнегоЗапроса = ПоследнийЗапросПакета.Операторы[0]; // Установка левого соединения в схему запроса ИсточникСотрудники = ОператорПоследнегоЗапроса.Источники[0]; ПсевдонимИсточникаСотрудники = ИсточникСотрудники.Источник.Псевдоним; ИсточникКадроваяИстория = ОператорПоследнегоЗапроса.Источники.Добавить("РегистрСведений.КадроваяИсторияСотрудников", "КадроваяИсторияСотрудников"); ИсточникКадроваяИстория.Соединения.Очистить(); УсловиеСоединения = ПсевдонимИсточникаСотрудники + ".Ссылка = КадроваяИсторияСотрудников.Сотрудник"; ИсточникСотрудники.Соединения.Добавить(ИсточникКадроваяИстория.Источник.Псевдоним, УсловиеСоединения); УсловиеСоединения = ПсевдонимИсточникаСотрудники + ".ФизическоеЛицо = КадроваяИсторияСотрудников.ФизическоеЛицо"; ИсточникСотрудники.Соединения.Добавить(ИсточникКадроваяИстория.Источник.Псевдоним, УсловиеСоединения); // Получение результата ТекстЗапросаПосле = СхемаЗапроса.ПолучитьТекстЗапроса(); |
Помещение во временную таблицу

1 2 3 4 5 6 7 8 9 10 11 |
// Инициализация схемы запроса СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапросаДо); ПоследнийЗапросПакета = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество() - 1]; // Установка временной таблицы ПоследнийЗапросПакета.ТаблицаДляПомещения = "ВТСотрудники"; // Получение результата ТекстЗапросаПосле = СхемаЗапроса.ПолучитьТекстЗапроса(); |
Далеко не полный перечень возможностей “Схемы запросов”. Со временем будет дополняться. Так же в начале описания доступна обработка для скачивания.