Чтобы сообщить об ошибке, нажмите Ctrl + Enter

		

		

Как перенести пакетный запрос с временными таблицами из отладчика в консоль запросов 1С

Суть задачи

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

Обычной сериализации текста и параметров недостаточно: временные таблицы существуют внутри менеджера текущего сеанса и недоступны в другой точке выполнения. Поэтому запрос, корректно работающий в отладчике, после переноса в консоль может завершиться ошибкой из-за отсутствующих таблиц.

Почему теряется контекст

Пакетный запрос может создавать несколько временных таблиц, последовательно дополнять их и использовать в следующих пакетах. Обработка «Консоль запросов» получает текст запроса и его параметры, но не может автоматически перенести содержимое объекта МенеджерВременныхТаблиц из памяти отлаживаемого сеанса.

Главная задача механизма — превратить необходимые временные таблицы в обычные параметры запроса и дополнить текст пакетами, которые восстановят эти таблицы перед выполнением исходного запроса.

Контракт функции

Расширение содержит общий модуль с экспортной функцией. На вход функция получает объект Запрос, а на выходе возвращает XML-строку с модифицированным текстом и полным набором параметров.

Запрос из отладчика
Восстановление таблиц
XML для консоли

Если свойство МенеджерВременныхТаблиц не заполнено, функция сериализует запрос стандартным способом — аналогично методу ЗапросВСтрокуXML общего модуля ОбщегоНазначения.

Алгоритм работы

  1. Проверить наличие менеджера временных таблиц у переданного запроса.
  2. Получить из менеджера список имен всех хранящихся таблиц.
  3. Определить, какие из них действительно используются в тексте запроса.
  4. Выгрузить данные найденных таблиц и добавить их в новый набор параметров.
  5. Сформировать пакеты, восстанавливающие таблицы из параметров.
  6. Добавить эти пакеты перед исходным текстом запроса.
  7. Сериализовать новую структуру в XML-строку.

Исходный объект запроса остается неизменным: функция работает с новой структурой, отдельной копией параметров и новым текстом.

Формирование параметров

Новая структура параметров объединяет два источника данных:

  • исходные параметры переданного запроса;
  • данные необходимых временных таблиц из менеджера.

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

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

Дополнение текста запроса

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

ВЫБРАТЬ
    Данные.*
ПОМЕСТИТЬ ВТ_ИмяТаблицы
ИЗ
    &ПараметрВТ_ИмяТаблицы КАК Данные
;

////////////////////////////////////////////////////////////////////////////////
Исходный текст пакетного запроса

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

Сериализация в XML

После подготовки параметров и текста функция создает структуру в формате, который понимает «Консоль запросов», и выполняет ее сериализацию.

ДанныеЗапроса = Новый Структура;
ДанныеЗапроса.Вставить("Текст", ДополненныйТекстЗапроса);
ДанныеЗапроса.Вставить("Параметры", НовыеПараметры);

// Сериализация структуры в XML-строку
Возврат СериализоватьЗапрос(ДанныеЗапроса);

Полученную строку можно скопировать из отладчика и импортировать в консоль. Все изменения выполняются над новой структурой, поэтому текст и параметры исходного объекта Запрос не меняются.

Функциональные требования

  • стандартная сериализация запроса без менеджера временных таблиц;
  • получение полного списка таблиц менеджера;
  • фильтрация таблиц по фактическому использованию в тексте;
  • поиск имен с учетом границ идентификаторов;
  • перенос исходных параметров без изменений;
  • добавление данных временных таблиц в новые параметры;
  • генерация служебных пакетов в начале запроса;
  • возврат совместимой XML-строки.

Критерии успешности

  • весь код расширения сформирован ИИ-агентом;
  • XML-строка импортируется в «Консоль запросов» без ошибок;
  • импортированный пакетный запрос выполняется без ошибок;
  • восстановленные таблицы идентичны данным из памяти отладчика;
  • исходный запрос и его параметры не изменяются;
  • расширение работает на любых конфигурациях.

Результат

Готовое расширение содержит общий модуль с экспортной функцией, которая принимает объект Запрос и возвращает XML-строку для импорта в обработку «Консоль запросов».

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

Результат переноса пакетного запроса в консоль запросов 1С
Результат переноса пакетного запроса с временными таблицами в консоль запросов 1С.

Материалы

Скачать расширение и материалы к статье

Никитин Дмитрий

Автор статьи

Никитин Дмитрий

Ведущий разработчик