Авторегистрация документа при подписании

От:

!С Документооборот 2.1

Иногда требуется автоматическая регистрация документов в момент их подписания должностным лицом. Данный вопрос можно решить без изменения кода и открытия конфигуратора.

Переходим в раздел «Настройка и администрирование» — «Бизнес-события» — «Дополнительные обработчики»

Создаём новый обработчик

Записываем в него такой код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Поиск объекта
Задача = Событие.Источник;
Выполнять = Ложь;
Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Утверждение") Тогда
  Если Задача.БизнесПроцесс.РезультатУтверждения = Перечисления.РезультатыУтверждения.Утверждено Тогда
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    Предметы.РольПредмета,
        |    Предметы.Предмет
        |ИЗ
        |    Задача.ЗадачаИсполнителя.Предметы КАК Предметы
        |ГДЕ
        |    Предметы.Ссылка = &ЗадачаСсылка";
        Запрос.УстановитьПараметр("ЗадачаСсылка",Задача);
        Результат = Запрос.Выполнить();
        Если Не Результат.Пустой() Тогда
          Выборка = Запрос.Выполнить().Выбрать();
          Пока Выборка.Следующий() Цикл
            Объект = Выборка.Предмет.ПолучитьОбъект();
            Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда 
              Если  (СокрЛП(Объект.ВидДокумента) = "Сигнал") Тогда
                 Выполнять = Истина;
              КонецЕсли;
            КонецЕсли;
          КонецЦикла;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
 
 
Если Выполнять Тогда
// Регистрация  
    Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
    Если ЗначениеЗаполнено(Нумератор) Тогда // автоматическая нумерация
        ДатаРегистрации = ТекущаяДата();
        ТекущийПользователь = Пользователи.ТекущийПользователь();
                Объект.ДатаРегистрации = ДатаРегистрации;
                // сформируем текущий номер
                СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
                Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, Объект.ЧисловойНомер);
                ОписанияОшибок = Новый СписокЗначений;
                СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
                Нумерация.СформироватьСтроковыйНомерДокумента(СтруктураПараметров, Объект.РегистрационныйНомер, ОписанияОшибок);
                Объект.Зарегистрировал = ТекущийПользователь;
                Объект.Записать();
                Делопроизводство.ЗаписатьСостояниеДокумента(
                    Объект.Ссылка, 
                    ДатаРегистрации, 
                    Перечисления.СостоянияДокументов.Зарегистрирован, 
                    ТекущийПользователь);
    КонецЕсли;
КонецЕсли;

На вкладке «Подписки» указать событие – Выполнение задачи

Включить обработчик

В настройках вида документа добавить автоматическую нумерацию

Если нужного нумератора нет, добавить

Выбрать полученную нумерацию

Записать закрыть

Проверить результат

Должно выполняться фоновое задание «Обработка произошедших бизнес-событий»

В регистре «Произошедшие бизнес события» всё должно выполняться без ошибок


Комментарии закрыты