При отладке проведения документов в типовых конфигурациях, таких как УТ 11, часто возникают ситуации, когда в МенеджерВременныхТаблиц неожиданно появляются таблицы, хотя в текущем модуле их никто не объявлял. Это может привести к ошибкам дублирования или избыточному потреблению памяти. Давайте разберем, как проанализировать этот процесс и найти источник данных таблиц.
В типовых конфигурациях на БСП (Библиотека стандартных подсистем) проведение документов — это сложный многоступенчатый процесс. Часто один и тот же МенеджерВременныхТаблиц передается через ДополнительныеСвойства между различными модулями. Это делается для того, чтобы оптимизировать запросы и не пересчитывать одни и те же данные (например, остатки или цены) несколько раз.
Если вы видите, что перед вызовом Объект.Движения.Записать() таблиц нет, а при попадании в ПередЗаписью они уже появились, значит, между этими точками отработал код, который инициировал создание запроса и выполнение метода Выполнить() или ВыполнитьПакет().
Самый эффективный способ увидеть «скрытые» операции — это замер производительности. Выполним следующие действия:
Выполнить() или ВыполнитьПакет(). Именно в этих местах происходит материализация временных таблиц в СУБД.МенеджерВременныхТаблиц.Таблицы.Если замер не дает четкого ответа, воспользуемся поиском по коду. Важно помнить, что временные таблицы часто создаются динамически.
Проанализируем все места, где используется конструкция ПОМЕСТИТЬ. Хотя это не всегда срабатывает из-за динамического формирования текста запроса, поиск по строке часто выводит на нужные модули. Рассмотрим пример кода, который часто встречается в типовых решениях:
// Пример формирования временной таблицы
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_Товары ИЗ &Список КАК Список";
Запрос.Выполнить();
Если вы нашли подобный блок в модуле менеджера или подписке на событие, значит, именно здесь «рождаются» таблицы.
Помните, что запись набора записей регистра накопления — это событие, которое может запускать целый каскад подписок. Проверьте следующие области:
ПередЗаписью или ПриЗаписи, которые вы можете не видеть в основной конфигурации.ДополнительныеСвойства.Если вышеперечисленные методы не привели к успеху, используйте Технологический журнал. Это самый надежный способ увидеть, что реально отправляет сервер 1С в СУБД. Настройте фильтр событий на DBPROC (процедуры базы данных). В логах вы увидите полные тексты всех запросов, включая инструкции CREATE TABLE для временных таблиц. Это позволит точно определить, какая часть кода отправляет запрос к базе, содержащий инструкцию ПОМЕСТИТЬ.
Работая сообща с этими методами, вы сможете точно локализовать место, где создается временная таблица, и понять, является ли ее появление штатным поведением типовой конфигурации или следствием сторонней доработки.