При создании специализированных пользовательских ролей «с нуля» разработчики часто сталкиваются с нестандартным поведением типовых отчетов: форма открывается, но не позволяет выбрать счет, при формировании возникают программные исключения или схема компоновки данных (СКД) сообщает об отсутствии наборов данных. Разберем по шагам цепочку ошибок, возникающих при ограничении прав на стандартный отчет ОборотноСальдоваяВедомостьПоСчету в конфигурации «1С:Бухгалтерия предприятия 3.0», выясним причины такого поведения платформы и рассмотрим правильные варианты реализации задачи.
Проанализируем первую характерную ошибку, возникающую сразу после открытия формы отчета при попытке изменить параметры:
Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.ФормаОтчета.Форма(143): Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
ЗаполнитьЗначенияСвойств(Отчет, РезультатВыбора, "НачалоПериода,КонецПериода");
по причине:
Недопустимое значение параметра (параметр номер '3') (Поле 'КонецПериода' объекта '' недоступно для записи)
Выясним причину такого поведения. В управляемой форме отчета реквизиты объекта (такие как НачалоПериода, КонецПериода, Счет) привязаны к объекту отчета. Если в новой роли разработчик отметил для отчета права Чтение и Просмотр, но забыл установить флажки в колонке Редактирование для самих реквизитов объекта, платформа переводит поля формы в режим «только для чтения» на уровне метаданных. Метод ЗаполнитьЗначенияСвойств не может поместить выбранное пользователем значение в заблокированный реквизит.
Решение: в дереве прав роли раскроем ветку отчета и обязательно установим право Редактирование как для самого отчета, так и для всех его реквизитов и табличных частей.
После предоставления прав на реквизиты отчет запускается, но падает при инициализации настроек компоновки со следующими системными сообщениями:
Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.ФормаОтчета.Форма(978): Значение не является значением объектного типа (Поле)
НоваяСтрока.Поле = Поле.Поле;
...
Отчет не сформирован! Поле объекта не обнаружено (ОсновнойНаборДанных)
Разберем фундаментальное различие между правами Чтение и Просмотр в платформе «1С:Предприятие 8.3»:
Схема компоновки данных при построении дерева доступных полей ориентируется именно на право Просмотр. Если на объект РегистрБухгалтерии.Хозрасчетный у роли выданы права Чтение и Изменение, но снят флаг Просмотр, механизм СКД полностью исключает таблицы регистра из схемы. В результате типовой код отчета пытается прочитать описание источника с именем ОсновнойНаборДанных, получает пустое значение и падает при попытке обратиться к вложенным свойствам.
Решение: проверим права на регистр бухгалтерии (в типовых конфигурациях это РегистрБухгалтерии.Хозрасчетный) и обязательно включим право Просмотр.
Даже когда отчет начинает формироваться, при попытке настроить группировки может появиться ошибка о недоступности полей Субконто1, Субконто2 или их реквизитов. Рассмотрим, почему это происходит.
Поля субконто в регистре бухгалтерии имеют составной тип, определяемый планом видов характеристик ВидыСубконтоХозрасчетные. Чтобы СКД могла развернуть составной тип и получить поля группировки (например, наименование номенклатуры, склад или контрагента), платформе требуются права Чтение и Просмотр на следующие метаданные:
ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура, Контрагенты, Склады, ДоговорыКонтрагентов, документы-регистраторы и т. д.).Хозрасчетный с правами на просмотр и ввод по строке.Если у пользователя нет прав на просмотр справочника, являющегося типом субконто, СКД не сможет отобразить это поле в настройках отчета.
Отчеты в типовой конфигурации «1С:Бухгалтерия предприятия 3.0» работают под управлением Библиотеки Стандартных Подсистем (БСП). Для корректного запуска формы пользователю необходим доступ к служебной инфраструктуре:
ОбластьДанныхОсновныеДанные), для них должны быть включены права на просмотр.ВариантыОтчетов, ПользовательскиеНастройкиОтчетов).БазовыеПраваБСП или ЗапускУправляемогоКлиента.Нередко возникает бизнес-задача: предоставить кладовщику или менеджеру доступ только к остаткам товаров на счете 41 и закрыть доступ ко всей остальной бухгалтерии. Разберем технические ограничения и варианты решения этой задачи.
Стандартный механизм ролей 1С работает по принципу «разрешено все, что не запрещено». Если пользователю открыт доступ к отчету ОборотноСальдоваяВедомостьПоСчету и к регистру бухгалтерии, стандартная форма позволит выбрать абсолютно любой бухгалтерский счет (например, 51, 60, 70), на который у пользователя есть право просмотра в плане счетов.
Попытка ограничить доступ к конкретному счету через RLS (ограничение доступа на уровне записей) для регистра бухгалтерии не рекомендуется, так как RLS на регистры бухгалтерии в типовых решениях часто приводит к критическому снижению производительности при проведении документов и формировании отчетности.
Для решения задачи корректнее применить один из следующих подходов:
ОборотноСальдоваяВедомостьПоСчету. В процедуре ПриСозданииНаСервере или ПриОткрытии программно зафиксируем счет 41 для конкретного профиля доступа и сделаем элемент формы выбора счета недоступным для редактирования (свойство Доступность = Ложь).ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары). Пользователю назначим права только на этот отчет, исключив из его прав стандартные бухгалтерские отчеты конфигурации.