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