Разберем ситуацию, которая часто встречается при разработке отчетов в конфигурации 1С:Управление торговлей 11 и других современных системах на платформе 1С:Предприятие 8.3. Представьте: вы создали вычисляемое поле в схеме компоновки данных (СКД), прописали для него выражение (возможно, с использованием функций общих модулей), добавили его в настройки «Выбранные поля», но при формировании отчета колонка просто отсутствует. Рассмотрим подробно, почему это происходит и как мы можем решить данную проблему.
Одной из наиболее частых причин отсутствия поля является использование в выражении вычисляемого поля функций общего модуля. Для того чтобы СКД могла вызвать внешнюю функцию, необходимо правильно инициализировать ПроцессорКомпоновкиДанных. Проанализируем пример программного вывода отчета в модуле объекта. Если вы хотите упростить этот процесс и сократить объем кода, можно использовать СКДБилдер для программного создания СКД. В стандартном же варианте мы должны перехватить обработку и явно указать системе, что использование внешних функций разрешено.
Рассмотрим код процедуры ПриКомпоновкеРезультата, который позволяет корректно вывести данные:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Отключаем стандартный механизм вывода
// Получаем текущие настройки компоновщика
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
// Инициализируем макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
// Важный этап: Инициализация процессора компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
// Четвертый параметр (Истина) разрешает использование внешних функций в выражениях СКД
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Обратите внимание на параметр ВозможностьИспользованияВнешнихФункций (четвертый аргумент метода Инициализировать). Если он не установлен в значение Истина, любое поле, в выражении которого есть вызов серверной функции, будет проигнорировано или вызовет ошибку.
Если программный код написан верно, но поле всё равно не выводится, нам следует применить метод исключения. Проанализируем ситуацию по шагам:
"Тест вывода". Если после этого поле появилось в отчете — проблема в самой функции или в передаваемых в неё данных.Часто программисты допускают ошибку в настройках самой структуры отчета. Выясним, где именно добавлено наше поле. Если в отчете используются группировки, а поле добавлено только в корень отчета (на верхний уровень настроек), оно может не попасть в детальные записи.
Посмотрим на настройки выбранных полей в каждой группировке. Убедимся, что у группировки Детальные записи в разделе «Выбранные поля» либо стоит флаг «Использовать настройки вышестоящего элемента», либо поле добавлено туда вручную. Также стоит проверить, не является ли поле «левым» по отношению к группировке. Помните: в группировку нельзя вывести поле, которое не является ресурсом и не входит в состав полей группировки, если мы не используем детальные записи.
В типовых конфигурациях, таких как УТ 11, ERP или КА 2, активно используются функциональные опции. Разберем, как они влияют на СКД. Если ваше вычисляемое поле прямо или косвенно зависит от реквизита, который отключен функциональной опцией (например, учет по сериям или характеристикам), СКД автоматически скроет это поле из всех настроек.
Проверим также настройки RLS (Record Level Security). Даже под полными правами иногда могут возникать нюансы при программном формировании макета. Если вы сталкиваетесь с ограничениями доступа, которые мешают корректному выводу данных, можно рассмотреть использование привилегированных отчетов для обхода RLS в нужных случаях.
Выясним еще одну неочевидную причину: влияние сохраненных настроек пользователя. В 1С настройки отчета кэшируются. Если вы добавили поле в конфигураторе, оно может не появиться в режиме предприятия, так как система использует старый вариант настроек из хранилища. Чтобы исключить этот фактор, выполним следующие действия:
СоставОчищенный на СоставНовый), чтобы заставить систему создать новый идентификатор для поля.Проанализируем закладку «Наборы данных» в схеме СКД. У каждого поля есть колонка «Ограничение поля». Проверьте, не стоит ли там галочка в столбце «Поле». Если она установлена, поле будет доступно для условий отбора, но его будет невозможно выбрать для вывода в отчет. Это техническое ограничение часто устанавливается случайно при быстром редактировании схемы.
Также убедимся, что в поле выражения вычисляемого поля не возникает ошибка NULL. Если вы складываете строку с NULL, результатом будет NULL. Рекомендуется использовать конструкцию ЕСТЬNULL(ПолеЗапроса, "") внутри выражения, чтобы гарантировать корректный результат для функции очистки текста или вывода данных.