При настройке прав доступа в конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) разработчики часто сталкиваются с неочевидным поведением системы: после создания новой ограниченной роли для пользователя в форме списка банковских выписок пропадают важные колонки, такие как «Организация», «Поступление» (приход) и «Списание» (расход). При этом права на сам документ поступления или списания на расчетный счет могут быть настроены корректно, а сама организация доступна для чтения. Более того, документы поступления могут не выводиться в самом списке, хотя их можно открыть напрямую через главное меню или «Все функции».
В этой статье мы подробно разберем, почему платформа 1С:Предприятие 8.3 скрывает эти поля в динамических списках, как работает механизм безопасности СКД при работе с журналами документов и как правильно настроить права доступа, чтобы решить эту проблему без ущерба для безопасности данных организации.
Для того чтобы понять логику платформы, проанализируем устройство формы списка «Банковские выписки» в 1С:Бухгалтерии. Данная форма спроектирована не на основе простой таблицы одного документа, а использует системный журнал документов «Деньги». В этот журнал входят как банковские, так и кассовые документы:
ПоступлениеНаРасчетныйСчет (Поступление на расчетный счет)СписаниеСРасчетногоСчета (Списание с расчетного счета)ПриходныйКассовыйОрдер (ПКО)РасходныйКассовыйОрдер (РКО)ОбъявлениеНаВзносНаличными и другие денежные документыКогда платформа строит динамический список на базе такого журнала, поля в списке (графы журнала) являются составными типами данных. Например:
ПоступлениеНаРасчетныйСчет и ПриходныйКассовыйОрдер.СписаниеСРасчетногоСчета и РасходныйКассовыйОрдер.Особенность работы платформы 1С:Предприятие 8.3: Если у пользователя в его ролях полностью отсутствуют права на «Чтение» или «Просмотр» хотя бы для одного из типов документов, входящих в журнал (например, на кассовые документы ПКО и РКО), система компоновки данных (СКД), отвечающая за вывод динамического списка, расценивает эти графы как содержащие недоступные типы данных.
В целях обеспечения безопасности платформа автоматически исключает такие колонки из выборки динамического списка. В результате пользователь видит усеченную таблицу, где отсутствуют колонки организации и сумм, а настроить их видимость через меню «Еще» -> «Изменить форму» невозможно — эти поля там просто отсутствуют.
Давайте рассмотрим подробнее запрос, который лежит в основе динамического списка банковских выписок. Это поможет наглядно увидеть, как левые соединения и выборки зависят от прав доступа к сопутствующим объектам метаданных:
ВЫБРАТЬ
ВЫБОР
КОГДА ЖурналДокументовБанковскиеВыписки.Ссылка ССЫЛКА Документ.СписаниеСРасчетногоСчета
ТОГДА ВЫРАЗИТЬ(ЖурналДокументовБанковскиеВыписки.Ссылка КАК Документ.СписаниеСРасчетногоСчета)
ИНАЧЕ ВЫРАЗИТЬ(ЖурналДокументовБанковскиеВыписки.Ссылка КАК Документ.ПоступлениеНаРасчетныйСчет)
КОНЕЦ КАК Ссылка,
ЖурналДокументовБанковскиеВыписки.Дата КАК Дата,
НАЧАЛОПЕРИОДА(ЖурналДокументовБанковскиеВыписки.Дата, ДЕНЬ) КАК ДатаОтбора,
ЖурналДокументовБанковскиеВыписки.ПометкаУдаления КАК ПометкаУдаления,
ЖурналДокументовБанковскиеВыписки.Номер КАК Номер,
ЖурналДокументовБанковскиеВыписки.Проведен КАК Проведен,
ЖурналДокументовБанковскиеВыписки.Организация КАК Организация,
ЖурналДокументовБанковскиеВыписки.БанковскийСчет КАК БанковскийСчет,
ЖурналДокументовБанковскиеВыписки.Контрагент КАК Контрагент,
ЖурналДокументовБанковскиеВыписки.Доход КАК Поступление,
ЖурналДокументовБанковскиеВыписки.Расход КАК Списание,
ЖурналДокументовБанковскиеВыписки.Валюта КАК Валюта,
ЖурналДокументовБанковскиеВыписки.ВидОперации КАК ВидОперации,
ЖурналДокументовБанковскиеВыписки.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
ЖурналДокументовБанковскиеВыписки.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
ЖурналДокументовБанковскиеВыписки.РучнаяКорректировка КАК РучнаяКорректировка,
ЖурналДокументовБанковскиеВыписки.НазначениеПлатежа КАК НазначениеПлатежа,
ЖурналДокументовБанковскиеВыписки.Ответственный КАК Ответственный,
ЖурналДокументовБанковскиеВыписки.Комментарий КАК Комментарий,
ЖурналДокументовБанковскиеВыписки.Тип КАК Тип,
ВЫБОР
КОГДА ЖурналДокументовБанковскиеВыписки.РучнаяКорректировка = ИСТИНА
ТОГДА ВЫБОР
КОГДА ЖурналДокументовБанковскиеВыписки.ПометкаУдаления = ИСТИНА
ТОГДА 10
КОГДА ЖурналДокументовБанковскиеВыписки.Проведен = ЛОЖЬ
ТОГДА 9
ИНАЧЕ 8
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА ЖурналДокументовБанковскиеВыписки.ПометкаУдаления = ИСТИНА
ТОГДА 2
КОГДА ЖурналДокументовБанковскиеВыписки.Проведен = ИСТИНА
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК СостояниеДокумента,
НаличиеФайлов.ЕстьФайлы КАК ЕстьФайлы,
НЕ ПредупрежденияПриЗагрузкеВыписки.Документ ЕСТЬ NULL КАК ЕстьПредупреждения
ИЗ
ЖурналДокументов.Деньги КАК ЖурналДокументовБанковскиеВыписки
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
ПО ЖурналДокументовБанковскиеВыписки.Ссылка = НаличиеФайлов.ОбъектСФайлами}
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредупрежденияПриЗагрузкеВыписки КАК ПредупрежденияПриЗагрузкеВыписки
ПО ЖурналДокументовБанковскиеВыписки.Ссылка = ПредупрежденияПриЗагрузкеВыписки.Документ
И ЖурналДокументовБанковскиеВыписки.Организация = ПредупрежденияПриЗагрузкеВыписки.Организация}
ГДЕ
(ЖурналДокументовБанковскиеВыписки.Ссылка ССЫЛКА Документ.ПоступлениеНаРасчетныйСчет
ИЛИ ЖурналДокументовБанковскиеВыписки.Ссылка ССЫЛКА Документ.СписаниеСРасчетногоСчета)
Как мы видим из текста запроса, выборка производится непосредственно из таблицы ЖурналДокументов.Деньги. Поскольку в состав этого журнала на уровне метаданных конфигурации входят кассовые ордера, то СУБД при попытке прочитать поля Организация, Доход (Поступление) и Расход (Списание) проверяет права пользователя на все типы документов этого журнала. Отсутствие прав хотя бы на один объект приводит к тому, что СКД не может построить типизированную колонку и полностью скрывает ее из интерфейса.
Для восстановления видимости колонок при сохранении ограничений на редактирование кассовых документов выполним следующие действия:
Откроем конфигуратор, найдем нашу созданную роль (или создадим отдельную вспомогательную роль для чтения денежных документов) и установим для документов ПриходныйКассовыйОрдер (ПКО) и РасходныйКассовыйОрдер (РКО) права «Чтение» и «Просмотр».
Важно: права на изменение, добавление, проведение и отмену проведения должны оставаться выключенными, чтобы пользователь не мог редактировать кассу.
Если мы хотим полностью исключить возможность просмотра содержимого кассовых документов пользователем, в свойствах роли для ПКО и РКО снимем флаг «Интерактивное открытие». В этом случае пользователь будет видеть строки документов в общих журналах, но при попытке дважды кликнуть на кассовый ордер система выдаст предупреждение о нарушении прав доступа.
Чтобы кассовые документы не путали пользователя, исключим их отображение в командном интерфейсе. Для этого проверим настройки подсистем (например, «Банк и касса») и убедимся, что команды открытия списков ПКО и РКО скрыты для данной роли.
Обратим внимание на дополнительные регистры, которые соединяются в запросе динамического списка. В нашем случае это регистры РегистрСведений.НаличиеФайлов и РегистрСведений.ПредупрежденияПриЗагрузкеВыписки. Убедимся, что у созданной роли есть права на «Чтение» и «Просмотр» этих регистров. Также для отображения статусов (например, «Оплачен» в счетах) необходимо предоставить аналогичные права на регистр сведений СтатусыДокументов.
Рассмотрим несколько полезных приемов, которые помогут быстро локализовать аналогичные проблемы в будущем, не тратя время на угадывание недостающих ролей:
Один из самых надежных способов быстро понять, на какой объект наложено ограничение — запустить консоль запросов в режиме «1С:Предприятие» под учетной записью тестируемого пользователя. Выполним простой запрос к журналу документов:
ВЫБРАТЬ * ИЗ ЖурналДокументов.Деньги
При выполнении этого запроса платформа сразу же вернет ошибку СУБД с указанием конкретной таблицы или реквизита, к которому у текущего сеанса нет прав доступа. Это позволит моментально определить недостающий объект метаданных.
В момент открытия проблемной формы списка в Журнале регистрации фиксируются события безопасности. Откроем Журнал регистрации под учетной записью администратора, установим отбор по событию «Отказ в доступе» и проанализируем последние записи. Там будет зафиксирована попытка обращения к недоступным метаданным (например, к кассовым ордерам или служебным регистрам сведений).
В современных типовых конфигурациях на базе БСП (Библиотека стандартных подсистем) встроен удобный инструмент для аудита прав. Перейдем в раздел «Администрирование» -> «Настройки пользователей и прав» -> «Пользователи», выберем нужного сотрудника, нажмем кнопку «Права доступа» и сформируем «Отчет по правам доступа». Установив флаг «Подробно», мы сможем наглядно увидеть детальную карту доступности всех объектов конфигурации для конкретного пользователя.
Таким образом, понимание внутренней структуры журналов документов и особенностей работы динамических списков позволяет гибко настраивать сложные интерфейсы и избегать неожиданного скрытия реквизитов и колонок на формах списков в 1С.