Как настроить автоматическую регистрацию документа в 1С:Документооборот при закрытии карточки

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

При внедрении системы 1С:Документооборот (версий 2.1 или 3.0) часто возникает потребность минимизировать рутинные действия пользователей. Одной из таких задач является автоматическая регистрация документа сразу после того, как автор заполнил карточку и нажал кнопку Записать и закрыть. В стандартном функционале регистрация обычно является осознанным действием (нажатие кнопки «Зарегистрировать» или выполнение соответствующей задачи), однако методология некоторых организаций требует мгновенного присвоения номера. Рассмотрим подробнее, какими способами можно реализовать этот механизм, проанализируем возможные риски и выберем оптимальный вариант.

Способ 1. Использование стандартных бизнес-событий и детекторов

В системе 1С:Документооборот существует мощный механизм бизнес-событий. Вместо того чтобы пытаться перехватить именно момент закрытия формы (что является чисто клиентским событием), мы рекомендуем ориентироваться на серверное событие записи объекта. Разберем этот процесс по шагам.

Во-первых, проанализируем стандартные события: Создание внутреннего документа, Изменение внутреннего документа. Для реализации авторегистрации нам необходимо создать детектор, который будет отслеживать запись нового документа. Однако, чтобы регистрация не происходила при каждом промежуточном сохранении «черновика», в обработчик события необходимо добавить условие проверки состояния документа.

Проанализируем пример кода для обработчика бизнес-события:


Если Объект.РегистрационныйНомер = "" 
   И Объект.Состояние = Перечисления.СостоянияДокументов.Проект 
   И НЕ Объект.ПометкаУдаления Тогда
    
    // Вызываем процедуру регистрации
    Попытка
        РаботаСВнутреннимиДокументами.ЗарегистрироватьОбъект(Объект.Ссылка);
    Исключение
        ЗаписьЖурналаРегистрации("Авторегистрация", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
    КонецПопытки;
    
КонецЕсли;

Важно помнить, что если мы используем версию 2.1, процедура ЗарегистрироватьОбъект находится в модуле РаботаСВнутреннимиДокументами. При этом система должна иметь возможность подобрать номер согласно настройкам Нумератора. Если нумератор не настроен или требует ручного ввода, автоматика выдаст ошибку.

Способ 2. Настройка автоматической регистрации через бизнес-процессы (без программирования)

Рассмотрим вариант, который не требует написания кода, что будет полезно для администраторов системы. Мы можем настроить шаблон бизнес-процесса (например, «Исполнение» или «Ознакомление»), который будет стартовать автоматически при создании документа.

  1. Создаем новый шаблон процесса, где первым (или единственным) шагом будет задача Зарегистрировать.
  2. В настройках шаблона устанавливаем Автоматический старт при создании документа по условию (например, для конкретного вида документа).
  3. Чтобы задача выполнялась «сама», используем механизм эскалации задач. Настраиваем правило: через 1 минуту после создания задачи система должна автоматически выполнить её с результатом «Зарегистрировано».

Этот способ методологически более мягкий, так как позволяет системе отработать в штатном режиме через очередь заданий, избегая прямых блокировок в момент записи карточки пользователем.

Способ 3. Программная доработка через расширение (кнопка «Записать и закрыть»)

Если требуется, чтобы регистрация происходила именно в момент нажатия пользователем кнопки в форме, мы можем воспользоваться механизмом расширений. Выясним, как это реализовать. Нам необходимо перехватить процедуру ПослеЗаписи на форме документа.

Рассмотрим пример логики в расширении формы:


&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    // Проверяем, что это новый документ или он еще не зарегистрирован
    Если НЕ ЗначениеЗаполнено(Объект.РегистрационныйНомер) Тогда
        ВыполнитьРегистрациюНаСервере(Объект.Ссылка);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВыполнитьРегистрациюНаСервере(СсылкаНаДокумент)
    УстановитьПривилегированныйРежим(Истина);
    Попытка
        // Используем типовой механизм регистрации
        Менеджер = СсылкаНаДокумент.ПолучитьОбъект();
        РаботаСВнутреннимиДокументами.ЗарегистрироватьОбъект(Менеджер);
    Исключение
        Сообщить("Ошибка авторегистрации: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важный нюанс: использование УстановитьПривилегированныйРежим(Истина) критически важно. Часто у обычного пользователя нет прав на ручную правку регистрационного номера, и без привилегированного режима программный вызов завершится ошибкой доступа. Для этой задачи также можно использовать готовое расширение для авторегистрации внутренних документов при записи.

Способ 4. Особенности реализации в 1С:Документооборот 3.0

В третьей версии платформы архитектура работы с документами значительно изменилась. Выясним, как упростить задачу в «тройке». В версии 3.0 появилась встроенная концепция правил обработки документов.

Вместо создания сложных детекторов, мы можем зайти в настройки вида документа и в схеме обработки добавить действие Регистрация. Если в настройках указать, что регистрация должна происходить «В начале обработки», то система предложит пользователю нажать кнопку «Отправить в обработку». С точки зрения интерфейса 3.0 это заменяет привычное «Записать и закрыть» для инициирования жизненного цикла документа.

Анализ проблем: Блокировки и права доступа

Проанализируем основные сложности, с которыми сталкиваются разработчики при внедрении авторегистрации:

  1. Конфликт блокировок: Когда пользователь нажимает «Записать и закрыть», транзакция записи еще может быть не завершена в базе данных. Если в этот момент фоновое задание (детектор событий) попытается захватить этот же объект для присвоения номера, возникнет ошибка Конфликт блокировок при выполнении транзакции. Рекомендуется использовать отложенный старт обработчика (через несколько секунд) или выполнять код в событии формы ПослеЗаписи, когда основная транзакция уже зафиксирована.
  2. Настройки доступности по состоянию: Как только документ получает регистрационный номер, его состояние меняется на Зарегистрирован. В 1С:Документооборот по умолчанию для этого состояния запрещено редактирование большинства реквизитов. Убедитесь, что в справочнике Настройки доступности по состоянию корректно выставлены права, иначе пользователь не сможет внести правки, если регистрация произошла слишком быстро.
  3. Обязательные поля: Регистрация невозможна, если не заполнены обязательные реквизиты (например, «Подготовил», «Гриф доступа», «Подразделение»). При программной регистрации обязательно проверяйте заполнение этих полей, иначе система выдаст исключение, которое может «уронить» процесс записи документа.

Таким образом, мы рассмотрели различные подходы к автоматизации. Наиболее стабильным для версии 2.1 является использование бизнес-событий с небольшой задержкой, а для версии 3.0 — использование правил обработки документов. Выбор конкретного метода зависит от того, насколько жестко в вашей организации регламентирован процесс создания документов и готовы ли вы к небольшим программным доработкам в расширениях.

← На главную