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

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

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

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

Причина №1: Влияние функциональных опций (ФО)

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

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

Как проверить и исправить:

  1. Перейдем в конфигуратор и найдем поле, которое пропадает.
  2. Проверим, к каким объектам метаданных оно относится.
  3. Найдем эти объекты в дереве метаданных и посмотрим список «Входит в функциональные опции».
  4. Если опция есть, проверим ее значение в пользовательском режиме через «Настройки» или через константы.

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

Причина №2: Установленные ограничения в схеме компоновки

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

Разберем основные колонки ограничений:

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

Причина №3: Сохраненные варианты настроек и кэширование

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

Как принудительно обновить настройки:

  1. В режиме пользователя зайдем в отчет, нажмем кнопку «Еще» — «Прочее» — «Изменить вариант отчета».
  2. В открывшемся окне нажмем «Еще» — «Установить стандартные настройки». Это сбросит текущий вариант к тому виду, который задан в конфигураторе.

Если это не помогает, можно прибегнуть к программному методу или очистке кэша. Для внешних отчетов (файлы .erf) платформа часто кэширует структуру по внутреннему идентификатору. Попробуйте изменить Имя (не синоним) отчета в конфигураторе — это заставит систему воспринимать его как абсолютно новый объект и корректно инициализировать все поля.

Причина №4: Ограничения прав доступа (RLS)

Если у пользователя полные права, он видит всё. Но как только мы переходим к тестированию под обычным пользователем, могут включиться механизмы RLS (Record Level Security). Если в запросе СКД используется соединение с таблицей, на которую у пользователя нет прав даже на чтение определенных полей, система компоновки «заботливо» исключит эти поля из доступных, чтобы отчет не завершился с ошибкой доступа.

Проанализируем ситуацию: в консоли запросов под администратором все поля видны, а в отчете под пользователем — нет. Вывод очевиден: нужно проверить роли и права доступа к объектам, участвующим в запросе.

Причина №5: Особенности составных типов и обращений через точку

Иногда поля исчезают из-за сложной структуры запроса. Если поле имеет составной тип (например, Регистратор в регистрах бухгалтерии или накопления), и вы пытаетесь обратиться к его реквизитам через точку в вычисляемых полях или настройках, СКД может скрыть такое поле, если хотя бы один из типов в составе недоступен (по причине тех же ФО или прав).

Рассмотрим пример обращения к реквизиту:


// В СКД это поле может пропасть, если у пользователя нет прав 
// на какой-то конкретный вид документа-регистратора
Выборка.Регистратор.Дата

Для решения подобных проблем рекомендуется явно типизировать поле в запросе с помощью функции ВЫРАЗИТЬ(...), чтобы система четко понимала, с каким типом данных она работает.

Причина №6: Использование БСП и обработки «Обновление вспомогательных данных»

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

Для исправления ситуации воспользуемся технологической обработкой из состава БСП:

  1. Найдем в составе поставки БСП обработку ОбновлениеВспомогательныхДанных.epf.
  2. Запустим ее в пользовательском режиме.
  3. Выберем пункт, связанный с обновлением вариантов отчетов.

Это принудительно обновит метаданные отчетов в системных таблицах и сделает новые поля доступными для пользователей.

Заключение

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

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

← На главную