В конфигурации 1С:Управление производственным предприятием (УПП) на обычных формах «Универсальный отчет» является мощным инструментом для анализа данных. Однако при использовании его в качестве внешнего отчета (файла .erf) программисты часто сталкиваются с проблемой: флажок «Использовать свойства и категории» включен, но сами дополнительные реквизиты в настройках отчета не появляются. Особенно странно это выглядит, когда в одной базе всё работает корректно, а в другой — при идентичном коде — функционал недоступен.
В этой статье мы разберем причины такого поведения системы и найдем способы решения проблемы, чтобы внешние отчеты работали так же полноценно, как и встроенные в конфигурацию.
Разберем, как «Универсальный отчет» определяет, какие свойства и категории ему нужно подтянуть. Внутренняя логика подсистемы построена на обращении к метаданным объекта. Рассмотрим ситуацию подробнее: когда отчет встроен в конфигурацию, функция ЭтотОбъект.Метаданные().Имя возвращает фиксированное имя, по которому система ищет настройки в планах видов характеристик и регистрах сведений.
У внешнего отчета имя в метаданных может быть пустым или произвольным (например, «ВнешнийОтчет»). Если в модуле объекта в процедуре УстановитьНачальныеНастройки переменная мНазваниеОтчета не заполнена явно строковым значением, механизмы подсистемы свойств просто «не понимают», к какому объекту привязывать дополнительные поля. Проанализируем пример кода, который должен присутствовать в модуле объекта внешнего отчета:
Процедура УстановитьНачальныеНастройки(ЛокальныйСтандартныйПериод = Неопределено) Экспорт
// Явное указание имени отчета крайне важно для внешних объектов
мНазваниеОтчета = "ВедомостьПоТоварамНаСкладах";
// Остальные настройки...
УниверсальныйОтчет.мВыбиратьИспользоватьСвойства = Истина;
КонецПроцедуры
Если в базе №1 отчет был сохранен с одним именем, а в базе №2 — с другим, или если переменная мНазваниеОтчета заполняется динамически через Метаданные().Имя, это может привести к потере связи со свойствами. Проверьте, чтобы название соответствовало ожидаемому в логике построителя.
Выясним причину, связанную с административными настройками. В 1С:УПП внешние отчеты часто регистрируются в справочнике ВнешниеОбработки. У каждой записи есть флажок «Безопасный режим».
Важный момент: если отчет запущен в безопасном режиме, платформа ограничивает его доступ к некоторым метаданным и методам, которые могут потребоваться для динамического формирования запроса по свойствам и категориям. Система свойств в УПП обращается к Планам видов характеристик СвойстваОбъектов и НазначениеСвойствОбъектов. В безопасном режиме обращение к этим данным может блокироваться или возвращать пустой результат.
Попробуем следующее решение:
Проанализируем ситуацию, когда свойства настроены в базе, но отчет их не видит. Для того чтобы построитель отчета вывел свойства, например, для справочника Номенклатура, в системе должна быть установлена связь. За это отвечает План видов характеристик СвойстваОбъектов.
Рассмотрим по шагам, что нужно проверить:
СправочникСсылка.Номенклатура) созданы свойства.Иногда во второй базе просто отсутствует запись в регистре назначений, либо тип объекта в запросе универсального отчета не совпадает с типом, для которого определены свойства. В Универсальном отчете за построение дерева свойств отвечает процедура ДобавитьСвойстваИКатегории. Она опирается на массив ПостроительОтчета.ИсточникДанных.Колонки. Если во второй базе состав колонок основного запроса по какой-то причине не типизирован (например, из-за пустых итогов в регистре), построитель не найдет подходящих свойств.
Если код отчетов идентичен, а поведение в двух базах разное, нельзя исключать проблему кэширования. При работе с внешними отчетами сервер 1С кэширует структуру метаданных. Если ранее этот же отчет запускался с ошибкой или с другими параметрами, сервер мог запомнить старую структуру.
Рассмотрим порядок действий для очистки кэша:
AppData\Local\1C\1cv8).snccntx и reg_1541 внутри каталога данных сервера.Внимание: очистка серверного кэша — процедура серьезная, её рекомендуется выполнять во время регламентных работ.
Проанализируем еще один скрытый фактор — настройки пользователя. В УПП существует регистр сведений «Настройки пользователей». В нем может быть установлен флаг, запрещающий использование свойств и категорий на уровне интерфейса конкретного пользователя.
Посмотрим на пример: если у пользователя в базе №2 в настройках стоит запрет на вывод дополнительных реквизитов, Универсальный отчет, обращаясь к глобальной переменной мВыбиратьИспользоватьСвойства, может инициализировать её значением Ложь, игнорируя внутренние установки отчета.
Подводя итог, можно сказать, что решение проблемы отсутствия свойств во внешних отчетах УПП обычно кроется в правильной инициализации переменной мНазваниеОтчета и проверке параметров безопасности. Если «внутри» конфигурации отчет работает, а «снаружи» — нет, в первую очередь убедитесь, что отчет не запущен в безопасном режиме и что его имя в коде прописано жестко, без использования динамических методов определения метаданных.