Разработка отчетов на базе Системы компоновки данных (СКД) — это стандарт индустрии для современной платформы 1С. Однако часто разработчики сталкиваются с необъяснимым поведением системы: в конфигураторе поле добавлено, в запросе оно присутствует, но при запуске отчета в пользовательском режиме (в тонком или толстом клиенте) это поле отсутствует в списке доступных для выбора. Пользователь попросту не может добавить его в группировки, отборы или выбранные поля.
В этой статье мы подробно разберем, почему так происходит, проанализируем основные причины — от настроек прав доступа до влияния механизмов функциональных опций — и научимся их устранять.
Как показала практика обсуждения, это самая частая и при этом неочевидная причина. Функциональные опции в 1С позволяют динамически изменять интерфейс и состав доступных объектов в зависимости от настроек программы. Если поле в схеме СКД связано с объектом метаданных (например, справочником или реквизитом), который включен в состав какой-либо функциональной опции, и эта опция в данный момент выключена, СКД автоматически скроет это поле из настроек.
Рассмотрим пример: В конфигурации «Зарплата и управление персоналом» (ЗУП) использование штатного расписания регулируется соответствующей функциональной опцией. Если в настройках программы ведение штатного расписания отключено, любые поля в отчетах, ссылающиеся на справочник Должности (если они привязаны к ФО), могут исчезнуть из видимости СКД.
Как проверить и исправить:
Важно помнить, что СКД проверяет функциональные опции «на лету», в то время как консоль запросов часто игнорирует эти ограничения, что и вводит разработчика в заблуждение.
Часто разработчики забывают о настройках ограничений на уровне самой схемы. Проанализируем вкладку «Наборы данных» в СКД. Для каждого поля набора данных предусмотрен ряд флажков, которые могут блокировать его использование.
Разберем основные колонки ограничений:
Если вы столкнулись с исчезновением поля, убедитесь, что в этих колонках не стоят лишние галочки. Также проверьте свойство Роль. Если поле помечено как «Обязательное», оно может вести себя специфическим образом при автоматическом заполнении настроек.
Когда мы работаем с управляемыми формами и Библиотекой стандартных подсистем (БСП), система активно сохраняет пользовательские настройки. Если вы добавили новое поле в существующий отчет, пользователь может его не увидеть, так как система загружает «старый» вариант настроек из хранилища, где этого поля еще не существовало.
Как принудительно обновить настройки:
Если это не помогает, можно прибегнуть к программному методу или очистке кэша. Для внешних отчетов (файлы .erf) платформа часто кэширует структуру по внутреннему идентификатору. Попробуйте изменить Имя (не синоним) отчета в конфигураторе — это заставит систему воспринимать его как абсолютно новый объект и корректно инициализировать все поля.
Если у пользователя полные права, он видит всё. Но как только мы переходим к тестированию под обычным пользователем, могут включиться механизмы RLS (Record Level Security). Если в запросе СКД используется соединение с таблицей, на которую у пользователя нет прав даже на чтение определенных полей, система компоновки «заботливо» исключит эти поля из доступных, чтобы отчет не завершился с ошибкой доступа.
Проанализируем ситуацию: в консоли запросов под администратором все поля видны, а в отчете под пользователем — нет. Вывод очевиден: нужно проверить роли и права доступа к объектам, участвующим в запросе.
Иногда поля исчезают из-за сложной структуры запроса. Если поле имеет составной тип (например, Регистратор в регистрах бухгалтерии или накопления), и вы пытаетесь обратиться к его реквизитам через точку в вычисляемых полях или настройках, СКД может скрыть такое поле, если хотя бы один из типов в составе недоступен (по причине тех же ФО или прав).
Рассмотрим пример обращения к реквизиту:
// В СКД это поле может пропасть, если у пользователя нет прав
// на какой-то конкретный вид документа-регистратора
Выборка.Регистратор.Дата
Для решения подобных проблем рекомендуется явно типизировать поле в запросе с помощью функции ВЫРАЗИТЬ(...), чтобы система четко понимала, с каким типом данных она работает.
В конфигурациях на базе БСП информация о вариантах отчетов хранится в специальных справочниках. Если вы встроили отчет в конфигурацию, простого обновления конфигурации базы данных иногда недостаточно. Информация в справочнике «Варианты отчетов» может остаться устаревшей.
Для исправления ситуации воспользуемся технологической обработкой из состава БСП:
ОбновлениеВспомогательныхДанных.epf.Это принудительно обновит метаданные отчетов в системных таблицах и сделает новые поля доступными для пользователей.
Мы выяснили, что «исчезновение» полей в СКД — это не магия, а работа защитных и оптимизирующих механизмов платформы 1С. Последовательно проверяя функциональные опции, ограничения в схеме, настройки RLS и сбрасывая кэш вариантов настроек, вы сможете гарантированно вернуть нужные данные в отчет.
Главный совет: всегда начинайте диагностику с проверки функциональных опций и сброса настроек варианта к стандартным — в 90% случаев решение кроется именно здесь.