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