Почему в отчете СКД пропадают поля и группировки в режиме 1С:Предприятие?

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

При разработке отчетов на базе Системы компоновки данных (СКД) разработчики периодически сталкиваются с ситуацией: в конфигураторе схема настроена корректно, все поля и группировки доступны, однако при запуске отчета в режиме «1С:Предприятие» часть полей или группировок бесследно исчезает. При этом в копии базы отчет может работать исправно, а в консоли запросов или консоли отчетов данные выводятся без ошибок. Разберем по шагам, почему возникает такое поведение платформы и как правильно локализовать и устранить данную проблему.

Механизм влияния функциональных опций на доступные поля СКД

Главная и наиболее частая скрытая причина такого поведения — работа механизма функциональных опций платформы 1С:Предприятие. Система компоновки данных тесно интегрирована с функциональными опциями на уровне ядра платформы.

Проанализируем механику работы:

  1. Если объект метаданных (документ, справочник, регистр) или его отдельный реквизит включен в состав функциональной опции, платформа связывает видимость этого объекта с активностью соответствующей опции (обычно определяемой значением константы).
  2. Когда пользователь открывает отчет в пользовательском режиме, СКД инициализирует коллекцию ДоступныеПоляКомпоновкиДанных с учетом текущего состояния функциональных опций сеанса.
  3. Если функциональная опция выключена, все входящие в нее реквизиты и объекты автоматически исключаются платформой из доступных полей СКД. В результате пользователь видит пустые группировки, а выбранные поля просто пропадают из настроек и отчета.
  4. При этом прямой запрос через Запрос.Выполнить() или в консоли запросов продолжает возвращать данные, так как язык запросов не фильтрует метаданные по функциональным опциям (если нет ограничений на уровне RLS). Это часто сбивает разработчиков с толку.

Пошаговый поиск и устранение проблемы

Разберем последовательность действий для проверки и восстановления доступности полей отчета.

Шаг 1. Проверка состава функциональных опций

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

Шаг 2. Анализ корректности состава опции

Часто разработчики ошибочно включают сам прикладной объект в состав опций, управляющих вспомогательными механизмами. Например, при внедрении функционала прикрепления файлов документ включают в функциональную опцию ХранитьФайлыВТомахНаДиске. Если в информационной базе файлы хранятся в базе данных, а не в томах, эта опция отключена, что приводит к полному сокрытию самого документа из СКД.

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

Шаг 3. Включение функциональной опции в пользовательском режиме

Если объект действительно должен управляться функциональной опцией, проверим ее активность в рабочей базе. Перейдем в настройки программы и включим соответствующий флаг (константу). После изменения значения константы обновим интерфейс или перезапустим сеанс «1С:Предприятие».

Программная проверка состояния функциональных опций

Рассмотрим пример кода, с помощью которого можно программно проверить активность функциональной опции перед формированием отчета или при инициализации формы:


Если Не ПолучитьФункциональнуюОпцию("ХранитьФайлыВТомахНаДиске") Тогда
    Сообщить("Внимание: функциональная опция отключена, часть полей может быть недоступна в отчете!");
КонецЕсли;

Если опция зависит от параметров интерфейса, состояние проверяется с передачей структуры параметров:


ПараметрыОпции = Новый Структура("Организация", ТекущаяОрганизация);
АктивностьОпции = ПолучитьФункциональнуюОпцию("ВестиУчетПоОрганизации", ПараметрыОпции);

Другие возможные причины скрытия полей

Если проверка функциональных опций показала, что объект в них не входит, проанализируем альтернативные причины:

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