Разработчики и администраторы систем на платформе 1С часто сталкиваются с «мистическим» поведением отчетов, построенных на Системе компоновки данных (СКД). Под учетной записью администратора (с полными правами) отчет работает безупречно: доступны все возможные отборы — по организации, контрагенту, подразделению или периоду. Однако стоит запустить этот же отчет под правами обычного пользователя, как вкладка настроек отборов оказывается пустой или на ней отображается лишь малая часть полей (например, только период).
В этой статье мы подробно разберем, почему платформа скрывает элементы компоновки данных, и по шагам пройдем весь путь диагностики — от проверки базовых прав доступа до тонкостей работы с функциональными опциями и кэшем Библиотеки стандартных подсистем (БСП).
Самая распространенная причина, по которой СКД «молча» исключает поля из доступных отборов — это отсутствие у пользователя прав на чтение таблиц базы данных, используемых в запросе отчета. Платформа 1С заботится о безопасности данных: если пользователю не разрешено читать источник, то он не должен иметь возможности даже узнать структуру этого источника через конструктор настроек.
Проанализируем ситуацию. Отчет может обращаться к справочникам напрямую, но гораздо чаще данные выбираются из регистров накопления, сведений или бухгалтерии. Если у пользователя есть права на справочник Организации, но нет прав на регистр, из которого отчет берет обороты по этой организации, поле «Организация» в отборах СКД будет скрыто.
Разберем по шагам, как проверить и исправить права доступа:
ИЗ (например, РегистрНакопления.Продажи.Обороты).Иногда разработчики предоставляют право «Чтение» на объект метаданных, но забывают про право «Просмотр» либо ограничивают его для отдельных реквизитов. В системе прав 1С эти разрешения работают на разных уровнях:
Если у пользователя на регистр или справочник стоит галочка «Чтение», но снята галочка «Просмотр», то отчет сформируется (если запущен в привилегированном режиме или код написан корректно), но настроить отбор по этому полю пользователь не сможет. Проверьте роли в конфигураторе и убедитесь, что право «Просмотр» установлено как для самого объекта метаданных, так и для всех его измерений и реквизитов в отдельности.
Функциональные опции — мощный инструмент 1С для управления интерфейсом. Если в конфигурации отключена какая-то функциональная опция (например, «Вести учет по нескольким организациям» или «Использовать подразделения»), платформа автоматически скрывает связанные реквизиты со всех форм, списков и из настроек компоновки данных.
Рассмотрим, как это влияет на отчеты:
Чтобы проверить эту гипотезу, найдите в конфигураторе интересующий вас реквизит (например, измерение регистра Подразделение), откройте его свойства и посмотрите свойства на вкладке «Дополнительно» в разделе «Функциональные опции». Если реквизит привязан к ФО, проверьте значение этой опции в режиме «1С:Предприятие» под учетной записью проблемного пользователя.
Если ваша конфигурация разработана на основе Библиотеки стандартных подсистем (БСП), настройки отчетов сохраняются в системных механизмах (в регистрах сведений ВариантыОтчетов, ПользовательскиеНастройкиОтчетов и др.).
При изменении прав доступа или структуры отчета старый кэш настроек в базе данных может блокировать отображение новых полей для конкретного пользователя. Простой сброс настроек на «Стандартные» кнопкой в форме отчета не всегда решает проблему полностью.
Выполним очистку настроек через административные функции БСП:
Иногда разработчики используют программное управление компоновкой, чтобы ограничить доступ к определенным данным без настройки сложных механизмов RLS. Ограничения могут накладываться непосредственно в модуле объекта отчета или в модуле формы.
Проанализируем программный код. Откроем модуль объекта отчета и найдем предопределенное событие ПриКомпоновкеРезультата. Посмотрим, нет ли там условий, проверяющих роли текущего пользователя и принудительно отключающих доступность полей отбора.
Пример кода, который может отключать доступность поля Организация для пользователей без полных прав:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Проверим наличие роли у текущего пользователя
Если Не РольДоступна("ПолныеПрава") Тогда
// Найдем поле "Организация" в доступных полях выбора и отбора
Для Каждого Поле Из СхемаКомпоновкиДанных.ПараметрыДанных.Элементы Цикл
// Программное изменение доступности параметров
КонецЦикла;
Для Каждого ПолеКомпоновки Из СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля Цикл
Если ПолеКомпоновки.ПутьКДанным = "Организация" Тогда
ПолеКомпоновки.ОграничениеОтбора = Истина;
ПолеКомпоновки.ОграничениеИспользованияВОтборе = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Если в коде вашего отчета присутствует подобная логика, то даже при наличии всех прав в конфигураторе поля отборов будут скрываться алгоритмом программно. Измените код или назначьте пользователю требуемую роль.
Еще одна деталь скрывается в настройках самого отчета в схеме СКД. У каждого элемента отбора существует свойство «Режим отображения», определяющее, как именно данный отбор показывается пользователю.
Рассмотрим возможные варианты этого свойства на вкладке «Настройки» -> «Отбор» (нажав на кнопку дополнительных свойств элемента):
Убедитесь, что для необходимых полей отбора не установлен режим «Недоступный», который делает настройки невидимыми для всех, у кого нет прав на изменение самого варианта отчета.