Почему пропадают поля в отчете СКД в режиме предприятия и как это исправить?

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

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

Причина 1: Ограничение видимости по функциональным опциям

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

Рассмотрим, как это работает в СКД. В свойствах самого объекта конфигурации Отчет существует важная настройка. Проанализируем наши действия:

  1. Откроем дерево конфигурации и найдем наш отчет.
  2. Перейдем на вкладку «Состав».
  3. Найдем флаг «Ограничение видимости по функциональным опциям».

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

Причина 2: Использование пользовательских настроек (Кэш)

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

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

  1. Запустим отчет в режиме Предприятия.
  2. Нажмем кнопку «Настройки...».
  3. В открывшемся окне нажмем «Еще» — «Установить стандартные настройки».

Это действие заставит платформу перечитать структуру из XML-схемы, заложенной в конфигураторе, и обновить список доступных полей. Как показывает практика, в 50% случаев проблема «исчезновения» решается именно этим простым действием.

Причина 3: Настройки доступности полей в самой СКД

Если поле доступно для выбора, но его невозможно использовать в отборах, или наоборот, нам необходимо проверить вкладку «Наборы данных» в конструкторе СКД. Посмотрим на колонки ограничений:

Проверьте эти флаги. Иногда при копировании наборов данных или импорте схем эти ограничения устанавливаются автоматически или по ошибке.

Причина 4: Режим отображения отбора

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

  1. Настройки: Это то, что видит пользователь. Здесь каждый элемент (отбор, параметр) имеет свойство Режим отображения. Если установлено Недоступный, пользователь не увидит этот отбор, хотя он будет применяться программно. Установите Обычный или Быстрый доступ.
  2. Фиксированные настройки: Если вы добавили отбор в эту категорию, он будет применяться всегда и «намертво». Пользователь не сможет его увидеть, изменить или отключить в стандартном интерфейсе.

Программный способ управления видимостью полей

В некоторых случаях нам может потребоваться программно проверить, какие поля доступны компоновщику. Рассмотрим пример кода, который можно использовать в модуле отчета для анализа доступных полей компоновки:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Проанализируем доступные поля выбора
    Для Каждого Поле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
        Сообщить("Поле: " + Поле.Заголовок + " | Путь: " + Поле.Поле);
    КонецЦикла;
    
    // Если нужно программно включить поле, игнорируя настройки
    // Это делается через модификацию схемы перед выводом
КонецПроцедуры

Использование этого кода в отладке поможет вам понять, видит ли вообще КомпоновщикНастроек ваше поле. Если в этом цикле поля нет — значит, оно отсечено либо правами доступа (RLS), либо функциональными опциями на уровне метаданных.

Использование внешних инструментов разработчика

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

Если вы работаете в ERP, помните, что из-за использования Управляемых форм и защиты от опасных действий некоторые внешние консоли могут требовать запуска в режиме Толстый клиент (управляемое приложение) или наличия определенных расширений для корректной работы с метаданными.

Заключение

Подведем итог. Если у вас пропало поле в СКД, действуйте по следующему алгоритму:

  1. Проверьте свойство отчета «Ограничение видимости по функциональным опциям» в конфигураторе.
  2. Выполните «Установить стандартные настройки» в режиме Предприятия, чтобы сбросить кэш.
  3. Убедитесь, что в конструкторе СКД на вкладке «Наборы данных» не стоят флаги ограничений (Выбор, Условие, Группировка).
  4. Для отборов проверьте «Режим отображения» (он должен быть отличным от Недоступный).
  5. Проверьте права доступа (роли) текущего пользователя на чтение конкретного реквизита или таблицы.

Эти шаги позволяют решить большинство проблем с видимостью данных в 99% случаев, сохраняя нервы разработчика и время пользователя.

← На главную