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