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