Как разрешить добавление присоединенных файлов при доступе к объекту Только чтение в 1С:ЗУП 3.1

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

В практике администраторов и разработчиков 1С часто возникает ситуация, когда пользователю необходимо разрешить прикреплять скан-копии документов к карточке сотрудника или физического лица, но при этом запретить редактирование самих данных этого объекта. На первый взгляд кажется, что достаточно добавить типовые роли для работы с файлами, но стандартные механизмы 1С:ЗУП 3.1 (и других конфигураций на базе БСП) накладывают свои ограничения. Разберем подробно, почему так происходит и как решить эту задачу.

Анализ структуры хранения данных

Прежде всего, проанализируем, как физически хранятся файлы в системе. В современных конфигурациях 1С файлы не записываются непосредственно в реквизиты объекта (например, справочника Сотрудники). Для каждого типа объекта, к которому можно присоединять файлы, создается отдельный подчиненный справочник. В случае с ЗУП 3.1 основной интерес представляют:

Проанализируем ситуацию: если у пользователя есть роль Добавление и изменение папок и файлов, он получает право на запись в эти справочники. Однако кнопка «Добавить» в интерфейсе все равно может отсутствовать, если основной объект (владелец) открыт в режиме «Только чтение».

Влияние логики БСП на доступность интерфейса

Рассмотрим, почему программные механизмы блокируют добавление файлов. Подсистема «Работа с файлами» в Библиотеке стандартных подсистем (БСП) жестко связывает права на основной объект и права на файлы к нему. Логика системы такова: если вам запрещено изменять справочник ФизическиеЛица, то и дополнять его информацию (включая присоединенные файлы) вы не имеете права.

Проанализируем работу программных модулей. За доступность команд добавления отвечает общий модуль РаботаСФайлами. В нем часто вызывается функция ДоступностьДобавленияФайлов(), которая проверяет наличие прав Изменение на объект-владелец. Если право отсутствует, интерфейс командной панели формы списка файлов блокируется программно.

Механизм защиты персональных данных и RLS

Выясним еще одну причину блокировки — влияние подсистемы защиты персональных данных. В 1С:ЗУП 3.1 персональные данные физических лиц защищены на уровне доступа. Если в настройках профиля группы доступа установлено ограничение «Только чтение» для физлиц, то срабатывают механизмы УправлениеДоступом.

Для присоединенных файлов часто используется механизм RLS (Access Control List). В метаданных справочника присоединенных файлов прописывается ограничение, которое проверяет права по «ведущему объекту». Если RLS владельца говорит, что запись запрещена, то запись нового элемента в справочник ФизическиеЛицаПрисоединенныеФайлы будет отклонена на уровне СУБД, даже если в коде 1С вы попытаетесь это сделать.

Варианты решения проблемы

Рассмотрим по шагам способы обхода данного ограничения, от простых к более сложным.

Способ 1: Создание специализированной роли

Попробуем создать отдельную роль в конфигурации (или расширении), которая даст права на добавление и изменение конкретно для справочника присоединенных файлов, игнорируя права владельца. Для этого:

  1. Создадим новую роль, например, ДобавлениеФайловФизЛицБезИзмененияОбъекта.
  2. В правах этой роли найдем Справочник.ФизическиеЛицаПрисоединенныеФайлы.
  3. Установим флажки Чтение, Добавление и Изменение.
  4. Важно: в поле RLS (Ограничение доступа к данным) для условия Добавление и Изменение нужно убедиться, что нет проверки через Владелец.Ссылка, которая требует прав на владельца.

Способ 2: Использование расширения и перехват процедур

Если программная блокировка в модулях БСП продолжает скрывать кнопки, нам потребуется расширение. Разберем пример кода, который можно внедрить через расширение, чтобы принудительно разрешить добавление файлов. Нам нужно переопределить логику в общем модуле РаботаСФайламиКлиентПереопределяемый или в модуле формы присоединенных файлов.

Пример программного изменения прав в расширении (процедура ПриСозданииНаСервере формы списка файлов):


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Разрешаем добавление, даже если владелец только на чтение
    Если ЭтоНоваяРольПользователя("ДобавлениеФайловБезПравНаВладельца") Тогда
        Элементы.ФормаКомандаСоздать.Доступность = Истина;
        Элементы.Список.ТолькоПросмотр = Ложь;
    КонецЕсли;
КонецПроцедуры

В данном примере мы анализируем наличие у пользователя специальной роли и принудительно включаем доступность элементов управления формой.

Способ 3: Настройка через группы доступа (без программирования)

Посмотрим, можно ли решить вопрос стандартными средствами ЗУП. Иногда помогает включение роли Работа с присоединенными файлами в профиль групп доступа, но этот метод редко работает, если на само физлицо стоит жесткий запрет изменения. Тем не менее, стоит проверить настройки в разделе Администрирование — Настройки пользователей и прав — Профили групп доступа. Убедитесь, что у пользователя нет конфликтующих ролей, которые могут накладывать более строгое ограничение по принципу "запрещено всё, что не разрешено явным образом".

Резюме и рекомендации

Проанализировав ситуацию, мы видим, что проблема кроется в глубокой интеграции прав владельца и подчиненного объекта в БСП. Самым чистым решением с точки зрения архитектуры 1С является:

  1. Использование Расширения конфигурации для точечного изменения прав.
  2. Проверка конкретных справочников (например, Справочник.ФизическиеЛицаПрисоединенныеФайлы), так как именно они являются конечным местом хранения.
  3. Контроль настроек защиты персональных данных, так как они могут перекрывать любые настройки ролей.

Помните, что давать права на Изменение самого справочника ФизическиеЛица с последующим программным ограничением полей в форме — это трудоемкий и менее безопасный путь, так как он оставляет дыры в безопасности при программном доступе к объекту. Лучше использовать подход с расширением прав только на файлы.

← На главную