Сразу оговорюсь, эта статья не про отладку больших пакетных запросов. На эту тему есть много хороших статей, например эта или эта.
Эта статья именно про удобный просмотр содержимого большого пакетного запроса в режиме отладки. Когда нужно видеть, что получилось в одной ВТ, что в другой, в третьей, потом опять вернуться в первую, ну в общем, вы понимаете, о чем я. Работать с запросами, содержащими большое количество временных таблиц, приходится очень часто. Например в механизмах расчета зарплаты в ЗУП, в подборе видов запасов или расчете себестоимости в ЕРП или УТ и во многих других.
Статья очень короткая, и, наверно, не заслуживает того, чтобы быть размещенной на INFOSTART. Но мне просто очень понравилась совсем незначительная доработка, которая позволила экономить много времени. По этому, спешу поделиться.
И так, ближе к делу.
Не для кого не секрет, что начиная с платформы 1С 8.3.8 появился очень удобный механизм для просмотра результата выполнения пакетного запроса.
Во-первых, у объекта встроенного языка «Запрос» появился новый метод «ВыполнитьПакетСПромежуточнымиДанными», который позволяет получить результат с промежуточными результатами временных таблиц:
Напомню, существующий ранее метод «ВыполнитьПакет» возвращает в результате выполнения только данные о количестве строк временных таблиц.
Во-вторых, у объекта встроенного языка «МенеджерВременныхТаблиц» появилось новое свойство «Таблицы», которое содержит коллекцию временных таблиц хранящуюся в менеджере:
Для каждой временной таблицы можно выполнить метод «ПолучитьДанные», который содержит результат запроса этой таблицы. Затем можно выгрузить данные в таблицу значений. Полный синтаксис ниже:
МенеджерВременныхТаблиц.Таблицы[Номер].ПолучитьДанные().Выгрузить()
В результате, можно получить данные каждой таблицы менеджера ВТ в виде таблицы значений:
Пользоваться объектом «МенеджерВременныхТаблиц» более удобно, так как можно посмотреть все таблицы, сформированные для менеджера. Таблицы могут формироваться отдельно, в разных процедурах. Также можно увидеть имена временных таблиц в свойстве таблицы менеджера «ПолноеИмя». Это очень помогает при большом их количестве.
Все это, без условно, очень удобно. Раньше для этих же целей приходилось использовать специальные процедуры общих модулей «ПоказатьВременнуюТаблицу» для просмотра содержимого пакетного запроса или изворачиваться, как описано здесь. Теперь всего этого делать не нужно.
Все бы хорошо, но есть один нюанс. Если временных таблиц много, а часто их бывает действительно много, очень не удобно постоянно возвращаться в отладчике к списку таблиц менеджера ВТ, чтобы посмотреть номер интересующей таблицы:
МенеджерВременныхТаблиц.Таблицы
А потом подставлять этот номер в выражение:
МенеджерВременныхТаблиц.Таблицы[Номер].ПолучитьДанные().Выгрузить()
Хотелось бы быстро перемещаться между таблицами менеджера и просматривать их содержимое.
Такая возможность есть. Для этого нужно разместить экспортную функцию с очень простым кодом в любом серверном общем модуле. Если конфигурация на замке, можно добавить расширение.
Код функции следующий:
//ИДС_ОбщегоНазначенияСервер.ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц)
Функция ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц) Экспорт
СтруктураДанных = новый Структура;
Для каждого Таблица Из МенеджерВременныхТаблиц.Таблицы Цикл
ТЗ_ВыборкаИзТаблицы = Таблица.ПолучитьДанные().Выгрузить();
СтруктураДанных.Вставить(Таблица.ПолноеИмя, ТЗ_ВыборкаИзТаблицы);
КонецЦикла;
Возврат СтруктураДанных;
КонецФункции
Данная функция создает структуру, в которую добавляет все временный таблицы менеджера ВТ. Ключ структуры – имя таблицы, значение – данные этой таблицы, выгруженные в таблицу значений.
Теперь в режиме отладки, в форме расчета выражения можно вставить следующую строку:
ИДС_ОбщегоНазначенияСервер.ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц)
Если менеджер ВТ называется по другому, соответственно, нужно изменить имя переменной.
В результате мы получаем структуру с данными, которую можно удобно и быстро просматривать:
Согласитесь, это значительно удобнее, чем запоминать номера таблиц и получать отдельно данные для каждой таблицы.
Расширение с общим модулем и приведенной в статье экспортной функцией можно скачать ниже.
Расширение можно использовать для любой конфигурации 1С, работающей в режиме совместимости 8.3.12.
Другие мои статьи из серии «практика программирования»:
- Отслеживание выполнения фонового задания
- Чеки ККМ для расчетов с ИП по безналу. Новые обязательные реквизиты в чеке
- Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4
- Исправление отрицательных остатков по организациям в УТ 11.4, КА 2.4, ЕРП 2.4. Интеркампани, механизм формирования резервов