1с документооборот дополнительный обработчик бизнес событий

1С:Документооборот помимо настроек различных параметров имеет очень полезный механизм бизнес-событий. Его можно использовать, если стандартных возможностей системы уже не хватает, но уходить с поддержки не хочется. Например, нужно автоматически регистрировать служебные записки после их утверждения, чтобы не усложнять работу пользователей лишней ненужной работой.

Бизнес-события – это отображение факта, что произошло некое важное для организации событие, которое подтверждено изменением данных в информационной базе. К ним можно привязать специальные обработчики, которые помогут реализовывать те или иные механизмы.

В типовой версии уже предустановлены готовые бизнес-события, они формируются автоматом и применяются для разнообразных механизмов (ук примеру, по видам событий «Создание задачи» и «Выполнение задачи» могут быть заданы автоматические уведомления).

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

Бизнес-события состоят из нескольких частей:

  • детекторы событий (типовые и пользовательские);
  • реестр произошедших событий;
  • обработчики событий (типовые и пользовательские).
Рис.1 Бизнес события
Рис.1 Бизнес события

Для использования механизма бизнес-событий в настройках программы должна быть установлена соответствующая галочка. Зайдем в «Настройки программы», в раздел «Настройка и администрирование».

Рис.2 Настройки программы
Рис.2 Настройки программы

Перейдем по гиперссылке «Общие настройки».

Рис.3 Общие настройки
Рис.3 Общие настройки

В настройках должна быть установлена галочка «Бизнес-события».

Рис.4 Бизнес-события в общих настройках
Рис.4 Бизнес-события в общих настройках

Программой «1С:Документооборот» в разделе «Настройка и администрирование-Бизнес-события» предусмотрен справочник «Виды бизнес-событий».

Рис.5 Виды бизнес-событий
Рис.5 Виды бизнес-событий

В справочнике уже заложены предопределенные бизнес-события, которые фиксируются системой автоматически.

Рис.6 Предопределенные бизнес-события
Рис.6 Предопределенные бизнес-события

Перечень типовых бизнес-событий в системе:

  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. Старт процесса

Как только какое-либо событие произошло, происходит запись этого события в регистр сведений «Произошедшие бизнес-события» (доступен в меню «Все функции»).

Рис.7 Произошедшие бизнес-события
Рис.7 Произошедшие бизнес-события

В этом регистре отображается вид события, источник записи, автор и отметка об обработке записи.

Рис.8 Параметры бизнес-событий
Рис.8 Параметры бизнес-событий

Так, например, при создании нового внутреннего документа «Договор аренды» в регистре появляется запись «Создание внутреннего документа», при формировании файла договора в регистре появляется запись «Создание файла» и т.д.

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

Рис.9 Дополнительные обработчики
Рис.9 Дополнительные обработчики

С помощью кнопки «Создать» пользователь может задать дополнительный обработчик бизнес-событий.

Рис.10 Создание дополнительного обработчика бизнес-событий
Рис.10 Создание дополнительного обработчика бизнес-событий

В карточке указывается наименование обработчика, код обработки события и устанавливается галочка «Обработчик включен».

Рис.11 Обработчик включен
Рис.11 Обработчик включен
Рис.12 Код отмены обработки событий
Рис.12 Код отмены обработки событий

В меню «Подписки» пользователь указывает подписку для данного обработчика (кнопка «Создать»).

Рис.13 Меню Подписки
Рис.13 Меню Подписки
Рис.14 Создание Подписки
Рис.14 Создание Подписки

Связь обработчика и вида события производится путем выбора его из справочника.

Рис.15 Виды бизнес событий
Рис.15 Виды бизнес событий

Бизнес-событие может запускаться при создании документа (внутреннего, входящего, исходящего, его регистрации, получении входящего и т.п.).

Рис.16 Связь вида бизнес-события с обработчиком
Рис.16 Связь вида бизнес-события с обработчиком

Связь вида бизнес-события с обработчиком указывается в данной форме.

Кроме типовых бизнес-событий в системе можно добавлять свои события. Для этого необходимо сделать следующее:

  1. В справочнике «Виды бизнес-событий» добавить новое бизнес-событие;
  2. Перейти к созданию детектора бизнес-событий*. У детектора установить флаг «Детектор включен».
  3. Создать дополнительный обработчик. Установить у обработчика флаг «Обработчик включен». Настроить у обработчика подписку на событие.

*Детектор бизнес события – это механизм, который отслеживает выполнение заданного условия и создает определенное событие в информационной базе.

Детектор отслеживает события. Как только условие детектора выполнено, система фиксирует новое бизнес-событие. Затем новое бизнес-событие в соответствии с подписками на него будет обработано связанным обработчиком.

Мы познакомились с мощным и очень полезным механизмом бизнес-событий в 1С:Документооборот, который позволяет существенно расширять типовые возможности системы, не внося изменений в конфигурацию и не снимая ее с поддержки. Таким образом, можно достаточно серьезно расширить функционал системы, не лишая ее стандартных обновлений.

Чтобы правильно настроить и использовать все богатые возможности 1С:Документооборот, обращайтесь к профессионалам, мы сделаем вашу работу с документами легкой и эффективной.

Бизнес-события

Как сделать, чтобы по документу при наступлении определенного условия автоматически стартовал процесс.

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

Для классификации таких событий есть специальный справочник «Виды бизнес событий» (сами же события система записывает в регистр сведений «Произошедшие бизнес-события»). Также важными частями механизма бизнес-событий являются детекторы бизнес-событий и обработчики бизнес-событий, но о них ниже.

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

Создадим вид для бизнес-события, которое будет формироваться при наступлении данного условия.


Теперь нужно добавить «Детектор бизнес-события». Детектор бизнес-события — это как раз та часть механизма, которая отслеживает выполнение условия и создает соответствующее событие в системе.

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

ВАЖНО: Если не установлен флаг «Детектор включен», код детектора исполняться не будет!

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

Код детектора:

 Результат = Ложь;

ВидыДокументов = Новый Массив;

ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию(«Служебная записка», Истина));

Запрос = Новый Запрос;

Запрос.Текст =

                «ВЫБРАТЬ ПЕРВЫЕ 1

                |               ИСТИНА

                |ИЗ

                |               Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

                |                               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы

                |                               ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла

|                               ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы

                |                               ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет

                |ГДЕ

                |               КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL

                |               И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)

                |               И НЕ ВнутренниеДокументы.ПометкаУдаления

                |               И Файлы.ПодписанЭП = ИСТИНА

                |               И НЕ Файлы.ПометкаУдаления»;

Запрос.УстановитьПараметр(«ВидыДокументов», ВидыДокументов);

РезультатЗапроса = Запрос.Выполнить();           

Если Не РезультатЗапроса.Пустой() Тогда

                Результат = Истина;

КонецЕсли;

Выполнение детекторов и формирование событий выполняет регламентное задание «Обработка детекторов бизнес-событий». Это задание исполняется один раз в минуту и выполняет все детекторы событий с флагом Включен.

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

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

Код обработчика:

 ВидыДокументов = Новый Массив;

ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию(«Служебная записка», Истина));

Запрос = Новый Запрос;

Запрос.Текст =

                «ВЫБРАТЬ

                |               ВнутренниеДокументы.Ссылка

                |ИЗ

                |               Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

                |                               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы

                |                               ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла

                |                               ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы

                |                               ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет

                |ГДЕ

                |               КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL

                |               И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)

                |               И НЕ ВнутренниеДокументы.ПометкаУдаления

                |               И Файлы.ПодписанЭП = ИСТИНА

                |               И НЕ Файлы.ПометкаУдаления»;

Запрос.УстановитьПараметр(«ВидыДокументов», ВидыДокументов);

РезультатЗапроса = Запрос.Выполнить();           

Если Не РезультатЗапроса.Пустой() Тогда

Выборка = РезультатЗапроса.Выбрать();

                ШаблонПроцесса = Справочники.ШаблоныКомплексныхБизнесПроцессов.НайтиПоНаименованию(«Обработка записок», Истина);

    Пока Выборка.Следующий() Цикл

                               Документ = Выборка.Ссылка;

                               БизнесПроцессОбъект = БизнесПроцессы.КомплексныйПроцесс.СоздатьБизнесПроцесс();

                               БизнесПроцессОбъект.ЗаполнитьПоШаблонуИПредмету(ШаблонПроцесса, Документ, Документ.Подготовил);

                               БизнесПроцессОбъект.Записать();

                               Если ПолучитьФункциональнуюОпцию(«ИспользоватьФоновыйСтартПроцессов») Тогда

                РегистрыСведений.ПроцессыДляЗапуска.ДобавитьПроцессДляФоновогоСтарта(БизнесПроцессОбъект.Ссылка);

                               Иначе

                                               БизнесПроцессОбъект.Старт();

                               КонецЕсли;

                КонецЦикла;

КонецЕсли;

Обработчик бизнес-события и бизнес-событие необходимо связать между собой при помощи команды Подписки
в панели навигации обработчика. В открывшемся списке нужно нажать Создать и указать ссылку на созданный ранее вид бизнес-события.

После этого необходимо проверить работу детектора и обработчика, если код написан без ошибок — новые события будут появляться и обрабатываться встроенным механизмом.

Отлаживать же механизм можно частями — проконтролировать появление новых событий можно, открыв регистр сведений «Произошедшие бизнес события» (все события механизм запишет сюда), срабатывание обработчика можно увидеть тут-же по появлению флага «Обработано», а саму правильность кода обработчика — по появлению запланированного результата (в нашем примерe — создан процесс по документу).

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

Для этих задач может хорошо подойти механизм бизнес-событий.
Бизнес-событие – это отражение факта, что произошло некоторое важное для организации событие, которое подтверждено изменением данных в информационной базе. И к таким событиям можно привязать обработчики на встроенном языке 1С.

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

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

  • детекторы событий (типовые и пользовательские), 
  • реестр произошедших событий, 
  • обработчики событий (типовые и пользовательские).

Детекторы используются для того, чтобы обнаруживать события. Как только детектор «сработал», записывается новое бизнес-событие. Затем новое бизнес-событие в соответствии с подписками на него будет обработано специальными обработчиками.Обработка одного события происходит в границах одной транзакции. После успешной обработки событие получает статус Задание выполнено. Если событие обработано с ошибками, программа предпримет попытку обработать его несколько раз, а затем удалит, если исправить эту ошибку окажется невозможным. 

Если хоть один обработчик событий завершит свою операцию с ошибкой, то обработка всех событий и все действия других обработчиков будут отменены. Во всех случаях информация о результатах обработки будет записана в журнал регистрации.
По необработанным событиям будет произведена попытка выполнения обработчиков 3 раза. Необработанные бизнес-события будут храниться в регистре сведений «Произошедшие бизнес-события», чтобы администратор мог разобраться с причинами ошибок и устранить их. Обработанные бизнес-события будут храниться определенное кол-во дней (указывается в настройках программы), а потом будут удалены.
Чтобы включить механизм бизнес-событий нужно в настройках программы активировать настройку «Использовать бизнес-события».
Далее можно использовать типовые бизнес-события такие, как:

  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. Старт процесса

Кроме типовых бизнес-событий в системе можно добавлять свои события. Для этого необходимо сделать следующее:

  1. В справочнике «Виды бизнес-событий» добавить новое бизнес-событие.
  2. Создать детектор для этого события. У детектора установить флаг «Детектор включен».
  3. Создать дополнительный обработчик. Установить у обработчика флаг «Обработчик включен». Настроить у обработчика подписку на событие.

Рассмотрим самый простой вариант привязки типового обработчика к типовому событию.

Открываем шаблон процесса. Переходим на форму назначения видам документов.

На закладке «Автоматический запуск» указываем событие «Создание внутреннего документа».

Создадим новый документ. Открываем регистр сведений «Произошедшие бизнес-события». Видим, что наше событие пока не обработано.

После обработки события данный справочник будет выглядеть следующим образом. Видим, что по внутреннего документу был запущен комплексный процесс.

Рассмотрим теперь более сложный случай привязки типового события к своему обработчику.

Открываем в разделе «Настройка и администрирование» справочник «Дополнительные обработчики».

Создаем новый обработчик бизнес-события. Заполняем его наименование, описание и код обработки события. Устанавливаем флаг «Обработчик включен».

Указываем подписку для данного обработчика.

Теперь при создании нового внутреннего документа у нас будет не только запускаться комплексный процесс по шаблону, но и производиться его дополнительная обработка.

Поскольку к одному событию теперь привязано два обработчика, то возникает вопрос: в каком порядке будут выполняться обработчики? Порядок вызова обработчиков не определен, поэтому нужно при использовании нескольких обработчиков предусматривать все возможные порядки запуска.

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

15.11.2019

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

Случается ситуация, когда нужно в бизнес-процессе сделать параллельный порядок исполнения(кто первый встал, того и тапки), но при этом дополнительно уведомлять смежных исполнителей путем рассылки вопросов(можете заменить на свой вариант).

Писалось на конфе: Документооборот 8 КОРП, редакция 2.1 (2.1.14.4), платформа 8.3.13.1690

При закрытии основной задачи все порождённые вопросы закрываются автоматически.

Автору процесса вопросы не приходят.

//УведомлениеПараллельныхИсполнителей
//Подписка: Задача выполнена

Задача   = Событие.Источник;
БПроцесс  = Задача.БизнесПроцесс;
ТекШаг   = 0;
врИсполнителиСтрокой= "";

Если ЗначениеЗаполнено(Задача) И ТипЗнч(БПроцесс) = Тип("БизнесПроцессСсылка.Исполнение") Тогда
//При выполнении задачи закрыть все вопросы
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЗадачаИсполнителя.Ссылка КАК Ссылка
|ИЗ
| БизнесПроцесс.РешениеВопросовВыполненияЗадач КАК РешениеВопросовВыполненияЗадач
|  ЛЕВОЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
|  ПО (ЗадачаИсполнителя.БизнесПроцесс = РешениеВопросовВыполненияЗадач.Ссылка)
|ГДЕ
| РешениеВопросовВыполненияЗадач.ПредметРассмотрения = &ПредметРассмотрения
| И РешениеВопросовВыполненияЗадач.Наименование ПОДОБНО ""Рассмотрение вопроса: Выполнена смежная задача:%""
| И ЗадачаИсполнителя.Выполнена = ЛОЖЬ");
Запрос.УстановитьПараметр("ПредметРассмотрения", Задача);
НайтиВопросы = Запрос.Выполнить().Выбрать();
Пока НайтиВопросы.Следующий() Цикл
ТекЗадача = НайтиВопросы.Ссылка.ПолучитьОбъект();
ТекЗадача.РезультатВыполнения = "#АВТО: Выполнение задачи: "+СокрЛП(Задача);
ТекЗадача.ВыполнитьЗадачу();
КонецЦикла;

// Расчитать шаги выполнения
ИсполнителиДляУведомления = БПроцесс.Исполнители.Выгрузить();
ИсполнителиДляУведомления.Колонки.Добавить("Шаг");
РаботаСБизнесПроцессамиКлиентСервер.ЗаполнитьШаг(ИсполнителиДляУведомления);

// Определить текущий шаг по задаче
НайтиТекШаг = ИсполнителиДляУведомления.Найти(Задача,"ЗадачаИсполнителя");
Если НайтиТекШаг <> Неопределено Тогда
ТекШаг = НайтиТекШаг.Шаг;
КонецЕсли;

//Удалить строки лишних шагов, у кого задача выполнена и текущего исполнителя
//Если в шаге больше одной строки то это параллельное исполнение
Сч = 0;
Пока Сч < ИсполнителиДляУведомления.Количество() Цикл
Если ИсполнителиДляУведомления[Сч].Шаг <> ТекШаг Тогда
ИсполнителиДляУведомления.Удалить(Сч);
ИначеЕсли ИсполнителиДляУведомления[Сч].Исполнитель = Задача.Исполнитель
ИЛИ   ИсполнителиДляУведомления[Сч].Исполнитель = БПроцесс.Автор Тогда
ИсполнителиДляУведомления.Удалить(Сч);
ИначеЕсли НЕ ЗначениеЗаполнено(ИсполнителиДляУведомления[Сч].ЗадачаИсполнителя) Тогда
ИсполнителиДляУведомления.Удалить(Сч);
ИначеЕсли ИсполнителиДляУведомления[Сч].ЗадачаИсполнителя.Выполнена Тогда
ИсполнителиДляУведомления.Удалить(Сч);
Иначе
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;

//Создаем вопросы(уведомления)
Для каждого ТекИсполн из ИсполнителиДляУведомления Цикл
//Соберём список оставшихся исполнителей
трИсполнителиСтрокой = "";
Для каждого врТекИсполн из ИсполнителиДляУведомления Цикл
Если НЕ врТекИсполн.Исполнитель = ТекИсполн.Исполнитель Тогда
трИсполнителиСтрокой = трИсполнителиСтрокой+Символы.ПС+врТекИсполн.Исполнитель;
КонецЕсли;
КонецЦикла;
НовыйВопрос = БизнесПроцессы.РешениеВопросовВыполненияЗадач.СоздатьБизнесПроцесс();
НовыйВопрос.ВидВопроса  = Перечисления.ВидыВопросовВыполненияЗадач.Иное;
НовыйВопрос.Описание  = "Выполнена смежная задача: "+СокрЛП(Задача)+
?(СтрДлина(трИсполнителиСтрокой)>0, Символы.ПС+"Исполнители кроме Вас: "+трИсполнителиСтрокой, "");
НовыйВопрос.ПредметРассмотрения = ТекИсполн.ЗадачаИсполнителя;
НовыйВопрос.ГлавнаяЗадача = ТекИсполн.ЗадачаИсполнителя;
НовыйВопрос.Дата   = ТекущаяДатаСеанса();
НовыйВопрос.СрокИсполнения = ТекущаяДатаСеанса();
НовыйВопрос.Автор   = БПроцесс.Автор;  //От кого
НовыйВопрос.ИнициаторПроцесса= ТекИсполн.Исполнитель;//Кому
НовыйВопрос.Записать();
НовыйВопрос.Старт();
//Создать связь с основным процессом
ЗаписьДБПроцессы = РегистрыСведений.ДочерниеБизнесПроцессы.СоздатьМенеджерЗаписи();
ЗаписьДБПроцессы.РодительскийПроцесс= БПроцесс;
ЗаписьДБПроцессы.СвязующаяЗадача = ТекИсполн.ЗадачаИсполнителя;
ЗаписьДБПроцессы.ДочернийПроцесс = НовыйВопрос.Ссылка;
ЗаписьДБПроцессы.Записать();
врИсполнителиСтрокой = врИсполнителиСтрокой +Символы.ПС+ ТекИсполн.Исполнитель;
КонецЦикла;
КонецЕсли;

//Записываем результат в ЖР
Если СтрДлина(врИсполнителиСтрокой)>0 Тогда
ЗаписьЖурналаРегистрации("ТМ.Уведомление параллельных исполнителей",
УровеньЖурналаРегистрации.Информация,Задача.Метаданные(),Задача.Ссылка,
"Автор процесса: "   +СокрЛП(БПроцесс.Автор)+Символы.ПС+
"Выполнил(а) задачу: "  +СокрЛП(Задача.Исполнитель)+Символы.ПС+
"Задача: "     +СокрЛП(Задача)+Символы.ПС+
"Отправлен(ы) вопрос(ы): " +врИсполнителиСтрокой);
КонецЕсли;

И ещё один обработчик, для автоматического закрытия ознакомлений:

//АвтоЗакрытиеОзнакомленияСОтветомНаВопросВыполненаСмежнаяЗадача
//Подписка: Создание задачи

Задача = Событие.Источник;
Если ВРег(Лев(Задача.Наименование, 59)) = "ОЗНАКОМИТЬСЯ С ОТВЕТОМ НА ВОПРОС: ВЫПОЛНЕНА СМЕЖНАЯ ЗАДАЧА:" Тогда
ТекущаяЗадача = Задача.ПолучитьОбъект();
ТекущаяЗадача.ВыполнитьЗадачу();
КонецЕсли;

Статья про настройку обработчиков Бизнес-событий:

//infostart.ru/public/618153/

UPD 2023/11/14 Добавил связь с основным процессом

Перейти к основному содержанию

Автоматическое создание входящего документа из исходящего в 1С Документооборот

Статья описывает подход к автоматизации создания и регистрации входящих документов при регистрации исходящих при взаимодействии в системе 1С Документооборот двух организаций. Статья даёт ответы на следующие вопросы:

  • Как запрограммировать и настроить дополнительные обработчики бизнес-событий?
  • Как автоматизировать взаимодействие двух организаций в 1С Документооборот при обмене корреспонденцией?
  • Как программно создавать входящие документы?
  • Как копировать файлы из одного документа в другой?
  • Как программно регистрировать документы?

Цель – исключить ручное заведение входящих документов при отправке исходящего документа между организациями, работающими в системе.

Для создания нового обработчика необходимо войти в меню Настройка и администрирование – Дополнительные обработчики, создать новый дополнительный обработчик бизнес-события и назвать его «автосоздание_входящих».
Далее необходимо заполнить код обработчика и выбрать ответственного.

форма дополнительного обработчика бизнес-события


// ИНН первой организации (организация 1)
ИНН1 = "1111111111";
// ИНН второй организации (организация 2)
ИНН2 = "2222222222";
// Предполагается, что для каждой организации используется свой вид входящего документа
// Название вида входящего документа для Организации 1
НазваниеВидаВходящего1="Входящий Организация 1";
// Название вида входящего документа для Организации 2
НазваниеВидаВходящего2="Входящий Организация 2";

// проверка исходящего на предмет взаимодействия Организации 1 и Организации 2
ПроверкаПрошла = Истина;
Исходящий = Событие.Источник;
Если Не (Исходящий.Организация.ИНН = ИНН1 Или Исходящий.Организация.ИНН = ИНН2) Тогда
	ПроверкаПрошла = Ложь;
КонецЕсли;
Если Не (Исходящий.Получатели[0].Получатель.ИНН = ИНН1 Или 
	Исходящий.Получатели[0].Получатель.ИНН = ИНН2) Тогда
	ПроверкаПрошла = Ложь;
КонецЕсли;

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

	входящий.ИсходящаяДата = Исходящий.ДатаРегистрации;
	входящий.ИсходящийНомер = Исходящий.РегистрационныйНомер;
	
	входящий.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", 
		Исходящий.Получатели[0].Получатель.ИНН);
	// поиск пользователя по наименованию контактного лица из исходящего документа
	// предполагается, что контактные лица организаций заведены с такими же наименованиями 
	//   как пользователи организаций
	входящий.Адресат =
		Справочники.Пользователи.НайтиПоНаименованию(Исходящий.Получатели[0].Адресат.Наименование);
	входящий.Подразделение = входящий.Адресат.Подразделение;
	входящий.СпособПолучения = Исходящий.Получатели[0].СпособОтправки;
	входящий.СрокИсполнения = Исходящий.СрокИсполнения;
	входящий.Проект = Исходящий.Проект;
	
	Если входящий.Организация.ИНН=ИНН2 Тогда   
        входящий.ВидДокумента = 
			Справочники.ВидыВходящихДокументов.НайтиПоНаименованию(НазваниеВидаВходящего2);
	Иначе 
		входящий.ВидДокумента = 
	        Справочники.ВидыВходящихДокументов.НайтиПоНаименованию(НазваниеВидаВходящего1);
	КонецЕсли;
	
	входящий.Записать();

	// автоматическая регистрация входящего документа
	Нумератор = Нумерация.ПолучитьНумераторДокумента(входящий); 
	ВыполнятьРегистрацию = Ложь;
	Если ЗначениеЗаполнено(Нумератор) Тогда        
		//Автоматическая регистрация возможна, входящий документ ещё не зарегистрирован.
		ВыполнятьРегистрацию = Истина;
	КонецЕсли;

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

	// копировать файлы из источника (Исходящий) в приёмник (созданный входящий)
	МассивФайлов = Новый Массив();
	исх_файлы = Справочники.Файлы.Выбрать(,,Новый Структура("ВладелецФайла", Исходящий));
	Пока исх_файлы.Следующий() Цикл
		МассивФайлов.Добавить(исх_файлы.Ссылка);
	КонецЦикла;
			
	Если МассивФайлов.Количество()>0 Тогда
		РаботаСФайламиВызовСервера.СкопироватьФайлы(МассивФайлов, входящий.Ссылка);
	КонецЕсли;
КонецЕсли;

После создания обработчика на вкладке «Подписки» формы обработчика добавляем подписку на событие «Регистрация исходящего документа».
Подписка предназначена для связи вида бизнес-события и обработчика. В данном случае выбран предопределенный вид события.

форма привязки подписки к обработчику

После настройки остаётся установить флаг «Обработчик влючен» на форме обработчика.

Первичный анализ событий и результатов работы обработчика можно производить с использованием регистра сведений «Произошедшие бизнес-события» (меню Все функции — регистры сведений).
Для каждого зарегистрированного события после его обработки дополнительным обработчиком бизнес-событий устанавливается либо флаг «Обработано», либо флаг «Не удалось обработать».

регистр сведений Произошедшие бизнес-события

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

Тэги: 

  • Статьи
  • документооборот
  • программирование

Понравилась статья? Поделить с друзьями:
  • 1с как обратиться к реквизиту формы добавленному программно
  • 1с как программно добавить реквизит формы в табличную часть
  • 1с найти значение дополнительного реквизита по наименованию
  • 1с отбор в динамическом списке по реквизиту табличной части
  • 1с программно добавить колонку реквизита в таблицу значений