Почему во внешних универсальных отчетах УПП не отображаются свойства и категории и как это исправить

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В конфигурации 1С:Управление производственным предприятием (УПП) на обычных формах «Универсальный отчет» является мощным инструментом для анализа данных. Однако при использовании его в качестве внешнего отчета (файла .erf) программисты часто сталкиваются с проблемой: флажок «Использовать свойства и категории» включен, но сами дополнительные реквизиты в настройках отчета не появляются. Особенно странно это выглядит, когда в одной базе всё работает корректно, а в другой — при идентичном коде — функционал недоступен.

В этой статье мы разберем причины такого поведения системы и найдем способы решения проблемы, чтобы внешние отчеты работали так же полноценно, как и встроенные в конфигурацию.

Анализ механизма идентификации метаданных

Разберем, как «Универсальный отчет» определяет, какие свойства и категории ему нужно подтянуть. Внутренняя логика подсистемы построена на обращении к метаданным объекта. Рассмотрим ситуацию подробнее: когда отчет встроен в конфигурацию, функция ЭтотОбъект.Метаданные().Имя возвращает фиксированное имя, по которому система ищет настройки в планах видов характеристик и регистрах сведений.

У внешнего отчета имя в метаданных может быть пустым или произвольным (например, «ВнешнийОтчет»). Если в модуле объекта в процедуре УстановитьНачальныеНастройки переменная мНазваниеОтчета не заполнена явно строковым значением, механизмы подсистемы свойств просто «не понимают», к какому объекту привязывать дополнительные поля. Проанализируем пример кода, который должен присутствовать в модуле объекта внешнего отчета:


Процедура УстановитьНачальныеНастройки(ЛокальныйСтандартныйПериод = Неопределено) Экспорт

    // Явное указание имени отчета крайне важно для внешних объектов
    мНазваниеОтчета = "ВедомостьПоТоварамНаСкладах";
    
    // Остальные настройки...
    УниверсальныйОтчет.мВыбиратьИспользоватьСвойства = Истина;
    
КонецПроцедуры

Если в базе №1 отчет был сохранен с одним именем, а в базе №2 — с другим, или если переменная мНазваниеОтчета заполняется динамически через Метаданные().Имя, это может привести к потере связи со свойствами. Проверьте, чтобы название соответствовало ожидаемому в логике построителя.

Проверка безопасного режима в справочнике «Внешние обработки»

Выясним причину, связанную с административными настройками. В 1С:УПП внешние отчеты часто регистрируются в справочнике ВнешниеОбработки. У каждой записи есть флажок «Безопасный режим».

Важный момент: если отчет запущен в безопасном режиме, платформа ограничивает его доступ к некоторым метаданным и методам, которые могут потребоваться для динамического формирования запроса по свойствам и категориям. Система свойств в УПП обращается к Планам видов характеристик СвойстваОбъектов и НазначениеСвойствОбъектов. В безопасном режиме обращение к этим данным может блокироваться или возвращать пустой результат.

Попробуем следующее решение:

  1. Откроем справочник «Внешние обработки, отчеты и заполнение табличных частей».
  2. Найдем наш отчет.
  3. Снимем флажок «Безопасный режим», если он установлен.
  4. Перезапустим отчет.

Регистр сведений «Назначение свойств объектов»

Проанализируем ситуацию, когда свойства настроены в базе, но отчет их не видит. Для того чтобы построитель отчета вывел свойства, например, для справочника Номенклатура, в системе должна быть установлена связь. За это отвечает План видов характеристик СвойстваОбъектов.

Рассмотрим по шагам, что нужно проверить:

  1. Зайдем в меню «Операции» — «План видов характеристик» — «Свойства объектов».
  2. Убедимся, что для нужного типа объекта (например, СправочникСсылка.Номенклатура) созданы свойства.
  3. Проверим, разрешено ли использование этих свойств в отчетах.

Иногда во второй базе просто отсутствует запись в регистре назначений, либо тип объекта в запросе универсального отчета не совпадает с типом, для которого определены свойства. В Универсальном отчете за построение дерева свойств отвечает процедура ДобавитьСвойстваИКатегории. Она опирается на массив ПостроительОтчета.ИсточникДанных.Колонки. Если во второй базе состав колонок основного запроса по какой-то причине не типизирован (например, из-за пустых итогов в регистре), построитель не найдет подходящих свойств.

Очистка кэша метаданных на сервере и клиенте

Если код отчетов идентичен, а поведение в двух базах разное, нельзя исключать проблему кэширования. При работе с внешними отчетами сервер 1С кэширует структуру метаданных. Если ранее этот же отчет запускался с ошибкой или с другими параметрами, сервер мог запомнить старую структуру.

Рассмотрим порядок действий для очистки кэша:

  1. Для клиентского кэша: удалим базу из списка запуска и добавим её заново (это создаст новую папку в AppData\Local\1C\1cv8).
  2. Для серверного кэша: необходимо остановить службу «Агент сервера 1С:Предприятия» и очистить содержимое папок snccntx и reg_1541 внутри каталога данных сервера.

Внимание: очистка серверного кэша — процедура серьезная, её рекомендуется выполнять во время регламентных работ.

Глобальные настройки пользователя

Проанализируем еще один скрытый фактор — настройки пользователя. В УПП существует регистр сведений «Настройки пользователей». В нем может быть установлен флаг, запрещающий использование свойств и категорий на уровне интерфейса конкретного пользователя.

Посмотрим на пример: если у пользователя в базе №2 в настройках стоит запрет на вывод дополнительных реквизитов, Универсальный отчет, обращаясь к глобальной переменной мВыбиратьИспользоватьСвойства, может инициализировать её значением Ложь, игнорируя внутренние установки отчета.

Заключение

Подводя итог, можно сказать, что решение проблемы отсутствия свойств во внешних отчетах УПП обычно кроется в правильной инициализации переменной мНазваниеОтчета и проверке параметров безопасности. Если «внутри» конфигурации отчет работает, а «снаружи» — нет, в первую очередь убедитесь, что отчет не запущен в безопасном режиме и что его имя в коде прописано жестко, без использования динамических методов определения метаданных.

← На главную