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