При разработке сложных отчетов с использованием Системы Компоновки Данных (СКД) разработчики нередко сталкиваются с ситуацией, когда заранее созданное вычисляемое поле, содержащее функцию обработки данных (например, для очистки текста от HTML-тегов), не возвращает результат или вовсе не отображается в итоговом отчете. Давайте разберемся, почему так происходит и как заставить платформу 1С исполнить ваш код.
Первое, что необходимо понять — СКД — это интеллектуальный механизм, который стремится к максимальной производительности. При формировании отчета система анализирует, какие именно поля участвуют в построении итоговой таблицы. Если вы добавили поле в Выбранные поля, но при этом нигде не используете его в Группировках, Отборах или Сортировках, СКД может принять решение «выбросить» это поле из запроса к базе данных.
Логика 1С проста: зачем тратить ресурсы сервера на выполнение функции очистки HTML для строки, которая в конечном итоге не будет выведена на экран или не повлияет на расчеты? Эта автоматическая оптимизация часто приводит к тому, что функция внутри вычисляемого поля попросту не вызывается, так как само поле исключается из процесса компоновки.
Чтобы гарантированно заставить СКД выполнить ваше вычисление, воспользуйтесь следующими приемами. Разберем их по шагам.
Детальные записи в настройках отчета. Если поле присутствует в списке вывода, система обязана вычислить его значение для каждой строки.Сортировку или Отбор. Даже если условие отбора будет пустым, сам факт участия поля в этих настройках заставит СКД включить его в запрос.
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(
МакетКомпоновкиДанных,
,
ДанныеРасшифровки,
Истина // Установка флага Истина важна для корректной обработки данных
);
При настройке функции очистки HTML, убедитесь, что она отвечает правилам работы с контекстом 1С:
ОбщийМодуль.СтроковыеФункцииСервер). В выражении вычисляемого поля обращайтесь к ней через имя модуля: СтроковыеФункцииСервер.УдалитьHTMLТеги(ПолеСДанными).Строка. Если в процессе работы функции возникает необработанная ошибка (например, передано значение NULL или тип Неопределено), СКД может молча «уронить» расчет этого поля.СКД, проверьте её работоспособность в Консоли запросов или через внешнюю обработку. Прогоните функцию через типичные входные данные, включая пустые строки, чтобы исключить ошибки на уровне алгоритма.Если поле все еще не отображается, проанализируйте реальный запрос, который генерирует СКД. Выведите отчет в Консоль системы компоновки данных и перейдите на вкладку Макет. Внимательно просмотрите текст запроса SELECT. Если вашего поля нет в списке выбираемых полей, значит, система «отсекла» его в ходе оптимизации. В этом случае вернитесь к пунктам о принудительном добавлении поля в структуру или сортировку.
Помните: СКД — это мощный инструмент, и понимание того, как система оптимизирует ресурсы, поможет вам писать более быстрые и предсказуемые отчеты для пользователей 1С:Управление торговлей и других конфигураций.