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