Разработка отчетов на системе компоновки данных (СКД) — процесс привычный, но иногда разработчики сталкиваются с загадочным поведением системы. Вы создаете отчет, отлаживаете его как внешний файл (через «Файл — Открыть»), и он работает идеально. Однако, как только вы встраиваете этот же отчет в конфигурацию (например, в «1С:Бухгалтерия предприятия 3.0»), он начинает вести себя непредсказуемо: выводит пустые строки, некорректные заголовки или служебные данные вместо реальных значений. Разберем детально, почему это происходит и как исправить ситуацию.
В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) управление отчетами происходит не напрямую через метаданные, а через специальные регистры и справочники. Когда вы открываете внешний отчет, платформа использует его схему «как есть». Но для встроенного отчета БСП пытается применить настройки из своих хранилищ.
Проанализируем шаги для очистки этих данных:
// Пример очистки настроек для конкретного отчета
ИмяОтчета = "ВашОтчет";
ХранилищеОбщихНастроек.Удалить("Общее/НастройкиОтчета", ИмяОтчета, "");
ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиФормы", ИмяОтчета, "");
Это одна из самых скрытых причин. Когда отчет является внешним, платформа зачастую игнорирует проверку функциональных опций (ФО) для полей, используемых в запросе СКД. Как только отчет становится частью конфигурации, срабатывает строгий контроль.
Выясним причину через проверку метаданных:
Если в вашем запросе СКД используются реквизиты объектов, которые привязаны к выключенным функциональным опциям, эти поля будут исключены из компоновки. В итоге отчет может вывести пустую колонку или «сломать» структуру строки, если это поле было ключевым. Проверим в конфигураторе вкладку «Функциональные опции» для всех объектов, задействованных в схеме компоновки.
Посмотрим, как открывается встроенный отчет. В типовых решениях он автоматически использует общую форму ФормаОтчета из БСП. В процедуре ПриСозданииНаСервере этой формы происходит сложная логика инициализации параметров, отборов и прав доступа.
Рассмотрим решение через подмену формы:
ОпределитьНастройкиФормы).При копировании настроек из одного отчета в другой (особенно через XML или загрузку файла .ers) могут продублироваться уникальные идентификаторы вариантов или элементов схемы. Для внешнего файла это не критично, но встроенный отчет регистрируется в системе метаданных.
Проанализируем ситуацию:
Платформа может пытаться сопоставить настройки по UUID и находить старые данные от «отчета-донора». Чтобы исключить это, выполним следующие действия:
Хотя проверка часто проводится под полными правами, механизмы RLS (Record Level Security) могут работать по-разному для внешних и внутренних объектов. Внешние отчеты иногда могут обходить часть проверок контекста безопасности, которые накладываются на встроенные объекты метаданных.
Для проверки этой гипотезы попробуем обернуть выполнение запроса в привилегированный режим. В модуле объекта отчета можно переопределить формирование:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьПривилегированныйРежим(Истина);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Если ваш отчет «ломается» при встраивании, пройдите по этим пунктам:
ДобавитьПрефикс_МойОтчет). Это заставит систему создать новые записи в реестрах БСП./ClearCache и удалите записи из справочника «Варианты отчетов».Следуя этим шагам, мы сможем выявить конкретное место сбоя — будь то застрявшие в кэше старые настройки или специфические ограничения типовой конфигурации на базе БСП.