В процессе работы с 1С:Документооборот (1С:ДО) часто возникает ситуация, когда автор бизнес-процесса, обладая широкими полномочиями, может случайно или намеренно удалить документ, прикрепленный к процессу. Это создает риски потери данных и нарушения регламентов, особенно если исполнитель уже отчитался о выполнении задачи, прикрепив скан-копию или отчет. Разберемся, почему стандартные настройки «не срабатывают» и как правильно выстроить защиту данных.
Прежде всего, проанализируем важный технический нюанс, который часто упускают администраторы системы. В 1С:ДО есть два разных объекта:
Когда мы устанавливаем галочку Запрещать удалять файлы в настройках вида документа, система блокирует удаление именно файлов из карточки документа. Однако, когда автор заходит в карточку бизнес-процесса (БП) и нажимает Delete на строке с документом, он не удаляет сам документ или файл — он разрывает связь между процессом и этим документом. С точки зрения системы это изменение данных бизнес-процесса, а не документа. Именно поэтому настройки прав доступа к документу здесь могут не помочь. Рассмотрим, как решить эту задачу по шагам.
Это первое, что необходимо проверить. Если документ находится в определенном состоянии (например, «На согласовании» или «Зарегистрирован»), система может блокировать любые действия с ним, включая изменение его связей. Выясним, как это настроить правильно:
Нормативно-справочная информация — Виды документов.Настройки.Использовать состояния документов.Ограничивать доступность полей по состоянию.Настроить рядом с этой опцией.В открывшейся матрице необходимо для каждого состояния, начиная с момента запуска процесса, установить запрет на редактирование. Важно понимать: если в состоянии «На согласовании» разрешено изменение, то автор процесса (имеющий права на редактирование процесса) сможет манипулировать составом предметов.
Важный момент: Проанализируем состояние «Зарегистрирован». Часто пользователи оставляют его открытым для редактирования, что позволяет удалять связи. Для полной защиты рекомендуется закрывать редактирование во всех состояниях, кроме «Проект».
Рассмотрим более тонкую настройку, которая касается непосредственно процесса. В 1С:ДО КОРП управление составом предметов можно регулировать через шаблоны процессов.
В шаблоне процесса (например, «Исполнение» или «Комплексный процесс») для каждого действия можно указать настройки доступа к предметам. Если мы укажем, что предмет является Основным и доступен Только для чтения, это ограничит возможности его изменения исполнителями. Однако автор БП по умолчанию является владельцем объекта БизнесПроцесс, и типовая логика системы в версии 2.1 часто позволяет владельцу менять состав табличных частей.
Чтобы ужесточить контроль, попробуем использовать механизм Проверки условий. Если условие запрещает изменение процесса при наличии определенных признаков, система выдаст ошибку при попытке удаления записи из таблицы Предметы.
Если вы работаете в 1С:Документооборот 3.0, ситуация решается значительно проще. В новой версии реализован механизм Правил обработки документов. Рассмотрим его преимущества:
В версии 3.0, если документ является «Основным предметом» и на нем запущено активное действие, система просто не позволит его удалить, так как он заблокирован самим процессом обработки.
Если типовых настроек в версии 2.1 недостаточно, а автор БП продолжает «заметать следы», удаляя предметы, разберем программный способ защиты. Нам поможет создание подписки на событие ПередЗаписью для объекта БизнесПроцесс (или конкретных его видов, например, БизнесПроцесс.Исполнение).
Проанализируем логику кода, которую можно внедрить:
Процедура ПриЗаписиБизнесПроцессаПередЗаписью(Источник, Отказ) Экспорт
// Если это новый процесс, проверка не нужна
Если Источник.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
// Получаем текущее состояние предметов из базы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Предмет Из БизнесПроцесс.Исполнение.Предметы ГДЕ Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
ТаблицаСтарыхПредметов = Запрос.Выполнить().Выгрузить();
// Сравниваем с тем, что пытается записать Автор
Для Каждого СтрокаСтарая Из ТаблицаСтарыхПредметов Цикл
НайденПредмет = Ложь;
Для Каждого СтрокаНовая Из Источник.Предметы Цикл
Если СтрокаНовая.Предмет = СтрокаСтарая.Предмет Тогда
НайденПредмет = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ НайденПредмет Тогда
// Если предмет удален и пользователь не Администратор
Если НЕ РольДоступна("ПолныеПрава") Тогда
Сообщить("Удаление предметов из запущенного процесса запрещено регламентом!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Такой подход гарантирует 100% защиту, так как он работает на уровне платформы, игнорируя визуальные кнопки интерфейса Delete.
Если документ уже пропал из процесса, не спешите паниковать. В 1С:ДО ведется детальный Протокол работы пользователей. Посмотрим, как найти виновного:
Настройка и администрация — Протокол работы пользователей.Изменение. В деталях записи будет видно, какие строки табличной части были удалены.Также полезно проверить Журнал регистрации по событию Данные.Изменение. Даже если связь удалена, сам документ (предмет) остается в базе данных, его можно найти через поиск или в папке внутренних документов и прикрепить обратно.
Проанализируем настройки прав. В 1С:ДО существует полномочие Добавление и изменение файлов. Убедимся, что у рядовых пользователей и авторов БП нет лишних прав в Политиках доступа. Часто проблема кроется в том, что пользователю выданы права Редактирование на уровне папки внутренних документов, что дает ему избыточную власть над всеми связями документа.
Резюмируем: Для надежного запрета удаления документов из процесса необходимо сочетать настройку состояний документа (запрет редактирования) с настройкой шаблона процесса (основные предметы). Если же эти меры не помогают из-за особенностей прав автора, следует прибегнуть к расширению конфигурации с проверкой удаления предметов программным способом.