1с документооборот создать процесс программно
В статье демонстрируется возможный пример реализации бизнес-процесса в ДО на примере практической задачи. Материал может быть полезен тем, кому быстро надо разобраться в архитектуре комплексных БП Документооборот.
Задача была сформулирована как необходимость отразить ход бизнес-процесса из внешней системы в ДО программно, используя типовой функционал с возможностью перевода пользователей на ведение этого БП в ДО.
Во внешней системе ведется цепочка согласования «Заявки на Страхование» перед оформлением договора, результатом работы является либо созданный договор либо отказ в создании договора.
Я задачу дефрагментировал на части:
1) Настройка демо базы ДО КОРП. (в базе должен быть нужный нам вид внутреннего документа, работающий шаблон комплексного БП, роли исполнителей которые нужны для работы с документом )
К статье приложены
1) архив демо базы с настройкой.
2) обработка для программного управления БП с реализованным интерактивным отчетом отражающим текущее место нашей Заявки на Страхование в схеме БП (в пищевой цепочке).
По Документообороту достаточно много статей на портале 1С, на какую либо оригинальность я не претендую, но я думаю что кому- то этот материал три-пять часов "изысканий" может сэкономить, этим и полезен.
В процессе реализации стало очевидно, что логику переходов между точками можно строить по-разному.
В данном случае я создаю внутренний документ - Предмет , по Предмету создаю БП , далее я модифицирую реквизиты в предмете что влияет на логику переходов схемы и толкаю незавершенный БП на следующий шаг. Документооборот согласно состоянию Предмета в зависимости от того где он находится сейчас генерирует очередную задачу согласно логике схемы. Это автоматическая маршрутизация.
Заложена ли возможность директивной маршрутизации на произвольную точку схемы БП в типовую модель Документооборота - я пока не разобрался (тот случай, когда новую задачу по БП или подчиненный БП создаешь сам и желательно на произвольную точку БП)
Вопросы и комментарии категорически приветствуются.
Тестировалось на Документооборот 8 КОРП, редакция 2.1 (2.1.12.2) и 1С:Предприятие 8.3 (8.3.12.1529)
Код рабочий (без закомментированной строки), но процесс запускается отдельно (параллельно) с главным БП (Параллельные процессы.jpg).
Если посмотреть в Процессы, например, которые запускаются (не программно) подобным образом, то у них заполнен реквизит "Ведущая задача" (Ведущая задача.jpg) и они создаются вложенными в главный БП (Вложенные процессы.jpg)
Так что, ВОЗМОЖНО, необходимо определить ВедущуюЗадачу создаваемого процесса, но проблема в том, что у главного БП она создается, видимо, как-то неявно, и непонятно, как ее получить.
Помогите советом, пожалуйста.
(1) Можно сделать намного проще.
После блока обработки добавьте нужный вам процесс, а в обработке работайте с ним уже. Там как раз можно поменять все реквизиты. Вот пример кода из обработки. На прикрепленном рисунке как это выглядит.
(3) Пытаюсь сделать по Вашей схеме.
Нужно запустить процесс рассмотрения для основного адресата, а также доп адресатов.
Создан блок с процессом рассмотрения, у него имя "Действие1".
Создан блок обработки, в котором должен запускаться процесс из блока "Действие1":
Пыталась отладить в Условии, ругается:
Полноценный запуск компл. процесса "тест схема" выводит ошибку:
Во время старта этого процесса произошла ошибка:
: Ошибка при вызове метода контекста (Старт)
БизнесПроцесс.Старт();
по причине:
Ошибка при выполнении обработчика - 'ВложенныйПроцессПередСозданиемВложенныхБизнесПроцессов'
по причине:
: Значение не является значением объектного типа (Старт)
ДействиеРассмотрения.Процесс.Старт();
Попробуйте стартовать процесс еще раз.
(4) Опять не верно, я показывал на схеме как должно быть, после обработчика добавьте на схему нужный вам процесс.
ДействиеРассмотрения = ПараметрыДействийСхемы.Найти("Действие1", "Имя");
Вот тут вроде только имя процесса указывается, посмотрите в примере который я скинул.
Стартовать его не нужно. тем более в цикле. В цикле можно адресатов добавить в табличную часть.
действие же ищется в действиях схемы ВСЕГО ПРОЦЕССА.
В методе "Найти" можно указать имя столбца, где искать, как у меня, но в первоначальном варианте пробовала без указания столбца искать, все равно та же ошибка.
В процессе рассмотрения нет табличной части исполнителей, в этом, собственно, и вся проблема.
Там есть только реквизит "Исполнитель", так как типовая конфа предполагает, что рассматривать должен только один пользователь за раз почему-то.
Поэтому у меня параллельно стартует основной блок рассмотрения для основного адресата, а в обработчике - с помощью цикла процессы рассмотрения по тому же основному блоку для доп. адресатов.
Кстати, вот это имя действия "СогласованиеСРуководителем" - у вас в имени блока согласования указано, как у меня на скрине?
(6) по тому что после обработчика должно запускаться какой то событие, а у вас его нет. Добавьте его и попробуй стартовать. Кстати на форме бизнес процесса можно отлаживать реквизиты.
Для этого добавьте (блок схему условие) внутри её укажите произвольное условие и туда перенесите код из вашего обработчика и выберите запущенный бизнес процесс, там через Сообщить() можно ловить значения реквизитов.
Реквизит ВедущаяЗадача у создаваемого процесса заполняется. Если остановить или прервать главный процесс, создаваемый внутри него тоже останавливается или прерывается.
НО в "Процессах и задачах" документа, по которому запускается процесс, создаваемый процесс все равно не вложен в главный, а висит параллельно.
Что-то все-таки неправильно, возможно, нужно копать в сторону механизма отображения этих процессов, чтобы понять, по какому принципу он строит дерево процессов.
Конфигурация документооборот.
Необходимо при создании не типового документа,
создать типовой бизнес процесс "Исполнение".
И заполнить поля, -
Наименование
Описание
Тч.Исполнители - исполнитель
Проверяющий
Контроллер
Подскажите пожалуйста по коду, как это можно сделать?
Поясни, почему ты не хочешь запускать бизнес-процесс, формирующий документы, пытаясь сделать наоборот?
(2) Как это сделать?
Все задачи -> Создать - Новый процесс - Исполнение
там есть пункт добавить заполняемый предмет.
Это и есть прикрепление документа к бизнес процессу
Исполнение?
повторю свой совет почитать книжку про документооборот.
нет ничего сложного.
концепция программного создания бизнес процесс при создании документа порочна.
понимаешь.. у тебя конфигурация даже называется Документо! Оборот!
то есть обращение документов.
не создание исполнений из пустого места при создании чего-то там нетипового.
чтобы документ начал обращаться - нужно его сначала создать и записать.
и только когда он готов. а никак не при создании. создавать процесс(хоть программно хоть как) в который уже пожалуйста добавляй свой документ который по этому процессу пойдет, заполняй все прочие реквизиты и запускай.
все.
Суть задачи такова:
процесс Исполнение (его я выбрал как аналог Заявки). И привязывать к нему не типовые документы заявка.
Но хотелось бы что бы этот бизнес процесс и задача создавались автоматически, при создании, проведении
не типового документа заявка. И адресовывались пользователю. Как аналог созданных в ручную.
отображались у него в списке задач при открытии.
Не могу найти примеров кода для создания по подобию.
Подскажите пожалуйста по коду.
Ты вообще читаешь, что тебе пишут? Ты создаёшь какую-то идиотию, телегу ставишь перед лошадью через дебильный костыль. Зачем тебе БП создавать ПОСЛЕ проведения документа? К чему это? Зачем тебе вообще нужен этот документ "Заявка" при наличии бизнес-процесса? Поясни ход своих мыслей.
(12) Руководитель отдела поставил задачу, разработать
размещенными на ней в требуемом ему виде.
в левой части формы и документами (заявками) в правой
части формы. С заданной фильрацией по отделам, пользователям.
Внизу под правым списком документов, должны быть поля,
в которых отображается содержимое реквизитов документа.
При установке на нем курсора.
специальная разработка, в которой нет ничего лишнего.
Это сделано. Сейчас задача привязать это или к этому
создание типовых бизнес процессов. Что бы помимо этих
документов была адресация ещё по бизнес процесса.
Так как при открытии конфигурации пользователи видят
окно адресованных и не выполненных ими бизнес процессов.
Иначе это все будет отображаться только в форме списка
этих документов.
постановщик должен будет создавать бизнес процесс в
ручную и привязывать к нему этот документ.
Покажи код как ты автоматизировал процесс создания документа.
Кстати, как называется документ и для чего он нужен?
(14) Это херня полная. Дичь. Рукль либо проверяет твою компетентность, либо сам идиот. Тебе нужно создать бизнес-процесс, который, в свою очередь (если это нужно) будет формировать на определённом этапе (как правило, на этапе завершения) какие-либо документы. Постановщик должен стартовать БП и заполнять нужные формы в объекте "Задача", привязанном к этому БП.
(17) Вы наверное упорно работали над задачами и бизнес
процессами. Кто спорит то что вы не правы?!
Я с задачами и бизнес процессами сталкивался в меньшей
степени. И данная постановка на стадии развития.
И возможно выльется в решение которое вы озвучили в (17).
(22) Покажи код как ты автоматизировал процесс создания документа.
Кстати, как называется документ и для чего он нужен?
(25) Даже не пытался, я ответил лишь.
(26) То есть что бы не автоматически, а по нажатию кнопки?
А почему так? То все автоматически было бы, если при
проведении, а то кнопку нужно добавлять.
Ну это если к примеру не каждому пользователю нужен бизнес процесс. То тогда да, кнопкой можно управлять его создание.
(27) Ты сначала сделай кнопку. Убедись, что работает, а потом уже подвяжешь автоматизацию, если это понадобится.Если пользователь создаёт документ интерактивно, то дополнительно нажать еще одну кнопку совсем не трудно.
(27) нельзя при проведении. Потому что документ часто перепроводят. Вот пользователь нажал два раза провести, а него 2 бизнес-процесса создадутся. Поэтому идею с проведением сразу выбросьте, она неправильная.
(30) Можно же проверить наверное. Новый проводится
документ, или перепроводится?
Поле объекта не обнаружено Свойства_ОписаниеДополнительныхРеквизитов .
(14) странная постановка задачи.
может руководителю тоже дать посмотреть обзорную рекламку про ДО? там буквально пара страниц на пальцах в картинках объясняющих основы.
Похоже я чт от оне досоздал при программном создании бизнес процесса:
Да (35) при проведении сломало, все задачи стали открываться с этой ошибкой.
В чем может быть её причина, что так на что повлияло?
Сейчас создание БП перенес в кнопку.
Вот сейчас восстановился из резервной копии.
Сделал кнопку, как посоветовали в (30).
Создал БП, он есть у адресата и ошибки этой нет.
Что там было не понятно!
Данная функция позволяет автоматически подставлять объекты адресации из предмета процесса в роль с объектом адресации. Для добавления новых автоподстановок в адресной книге необходимо нажать кнопку "Обновить автоподстановки":
После обновления появятся автоподстановки для ролей, которые используются с объектами адресации:
Допустим у нас есть роль "_Тест":
Исполняет данную роль пользователь "Администратор" по организации "ООО Управляющая компания" и по подразделению "Администрация":
Автоподставнока "_Тест (Роль)" со скришота выше сможет автоматически определить объекты адресации по предмету для роли "_Тест".
В расширении изменения объекта проверяются другим способом. Если хотя бы один реквизит из документа изменен, тогда файлы, которые не заняты на редактирование, созданы по шаблону, не помечены на удаление обновляются данными документа.
Настройка данной функции выполняется в виде внутреннего/исходящего документа.
Данная функция работает только при создании процесса по шаблону. В шаблоне процесса добавлен реквизит "Создавать задачу ознакомления":
В данном реквизите настраивается вариант создания задачи ознакомления.
Для заполнения реквизита "Создавать задачу ознакомления" после обновления расширения запустите обработку "Перенос значения реквизита не создавать задачу ознакомления".
Запрет повторного запуска комплексного процесса по предмету.
При открытии формы комплексного процесса стоит проверка, если пользователь пытается запустить более 1 комплексного процесса по документу форма нового процесса не открывается и пользователю выдается предупреждение.
Настройки расширения находятся в отдельной подсистеме "Дополнительные функции":
Динамические роли включены по умолчанию без возможности отключения.
Пользовательские автоподстановки.
Добавлена новая функция "Пользовательские автоподстановки". С помощью данной функции можно добавлять собственные автоподстановки для шаблонов бизнес-процессов в режиме предприятия. Пользовательские автоподстановки находятся в подсистеме "Дополнительные функции":
На закладке "Тестирование" можно проверить автоподстановку с нужными параметрами (если они требуются), результат работы кода автоподстановки выводится в список значений:
Технически пользовательские автоподстановки реализованы следующим образом:
- В функции"ПолучитьСписокДоступныхФункций" общего модуля "ШаблоныБизнесПроцессов" добавляются автоподстановки из справочника.
К имени функции автоподстановки добавляется префикс "ПользовательскаяАвтоподстановка_" для поиска элемента справочника с программным кодом при получении значения автоподстановки.
- В функцию "ПолучитьЗначениеАвтоподстановки" общего модуля "ШаблоныБизнесПроцессов" добавлена дополнительная проверка. В функции автоподстановки выполняется поиск префикса "ПользовательскаяАвтоподстановка_", если данный префикс найден, тогда выполняется поиск элемента справочника пользовательской автоподстановки по наименованию. Далее выполняется программный код элемента справочника. Запись пользовательских автоподстановок с одинаковым наименованием запрещена, поэтому при поиске элемента по наименованию будет найдено не более 1 автоподстановки.
Указание минут и секунд в правилах эскалации задач.
В правила эскалации задач добавлена возможность указания минут и секунд:
Автоматическое расширение рабочей группы связанных документов.
В справочник "Типы связей" добавлен реквизит "Автоматически вести состав участников рабочей группы":
При установке данного флага состав рабочей группы для связанных документов по данному типу связи будет вестись автоматически.
При установке связи "Договор" из документа "Закупка дисков для СХД" участники рабочей группы документа "Закупка дисков для СХД" будут автоматически перенесены в связанный договор:
При дальнейшем изменении рабочей группы документа "Закупка дисков для СХД" новые пользователи, которые были добавлены в рабочую группу документа будут автоматически перенесены в документ "Договор на поставку бетона".
Автоматическое создание делегирования прав заместителям при создании отсутствия.
При создании документа "Отсутствие" автоматически создаются делегирования прав доступа заместителям. Данная функция работает только для новых документов отсутствия.
Алгоритмы обработки задач и бизнес-процессов.
В шаблоны бизнес-процессов добавлены закладки "Назначения алгоритмов обработки задач", "Назначения алгоритмов обработки процессов":
На данных закладках можно назначить произвольные алгоритмы, которые будут выполняться перед записью задачи или бизнес-процесса. В дальнейшем будут добавлено событие "При записи".
На данный момент для выбора доступно только событие перед записью:
Для переноса настроенных алгоритмов из старой версии (до 2.1.27.1) расширения запустите обарботку "Перенос алгоритмов в новые объекты" из подсистемы "Дополнительные функции". В обработке нажмите кнопку "Запустить перенос".
Для переноса алгоритмов в единый справочник из старой версии (до 2.1.18.12) запустите обработку "Перенос алгоритмов в новый справочник, изменение назначений алгоритмов обработки". В обработке нажмите кнопку "Запустить перенос".
Отображение связей предметов на формах выполнения задач.
Добавлено отображение связанных документов, файлов связанных документов на формах выполнения задач, на форме "Задачи мне":
Отображение листа согласования на форме выполнения бизнес-процесса "Утверждение/Подписание".
Добавлено отображение листа согласования на форму выполнения утверждения/подписания:
Перенос файлов из задачи в предметы процесса.
Настройка переноса файлов из задачи в предметы процесса настраивается в шаблоне процесса:
В настройке необходимо указать имя предмета, в который необходимо переносить файл. При включенной настройке файлы не будут дублироваться в задаче. При добавлении файла в задачу файл будет добавлен в предмет в процесса.
Автоматическое добавление подразделения ответственного/подготовившего/подразделения из документа в рабочую группу документа.
Добавлена функция "Автоматическое добавление подразделения ответственного/подготовившего/подразделения из документа в рабочую группу документа" для внутренних, входящих, исходящих документов.
Настройка выполняется в виде документа:
Запрет интерактивного создания документов.
Добавлена функция "Запрет интерактивного создания документов" для внутренних, входящих, исходящих документов.
Настройка выполняется в виде документа:
- Добавлен механизм пользовательских автоподстановок
- Добавлена возможность отключения создания задачи ознакомления для регистрации и утверждения/подписания. Функция работает также как и отключение создания задачи ознакомления для согласования.
- В пользовательскую автоподстановку добавлена возможность прикрепления ссылки на файл (удобно хранить файлы с внешними обработками тестирования и т.д.):
Такой способ является не совсем оптимальным, но через расширение проблематично подключить собственный объект к посистеме хранения файлов, если перенести доработку в основную конфигурацию, то естественно удобнее использовать существующую подсистему хранения файлов.
- Поднят режим совместимости расширения до версии 8.3.14.
- Функции расширения переведены на новую версию конфигурации.
- В правила эскалации задач добавлена возможность указания минут и секунд
- Автоматическое расширение рабочей группы связанных документов
- Автоматическое создание делегирования прав заместителям при создании отсутствия
- Выполнение произвольного алгоритма перед записью задачи
- Отображение связей предметов в формах выполнения задач
- Отображение листа согласования в форме выполнения бизнес-процесса "Утверждение/Подписание"
- В пользовательские автоподстановки добавлен реквизит "ЗависитОтПредмета" для разделения автоподстановок, которые зависят от предмета процесса
- Выполнение произвольного алгоритма перед записью бизнес-процесса
- Удалены условия на пустую ссылку и состояние бизнес-процесса в произвольных алгоритмах перед записью задачи и перед записью бизнес-процесса
- Изменена логика работы алгоритмов перед записью задач и процессов
- Добавлена новая функция - перенос файлов из задачи в предметы процесса
- Добавлена функция "Автоматическое добавление подразделения ответственного/подготовившего/подразделения из документа в рабочую группу документа" для внутренних, входящих, исходящих документов
- Добавлена функция "Запрет интерактивного создания документов"
- Алгоритмы обработки задач и бизнес-процессов перенесены в единый справочник
- Настройка функции "Автоматическое обновление файлов данными владельца" перенесена в вид внутреннего/исходящего документа
- Исправлена ошибка записи документа при автоматическом расширении рабочей группы документов
- Исправлена ошибка при открытии формы "Задачи мне"
- Реквизиты с префиксом "Удалить" убраны с форм "Назначения алгоритмов обработки задач", "Назначения алгоритмов обработки процессов"
Данное расширение тестировалось на версии 2.1.28.14 1С:Документооборот КОРП.
В системе 1С: Документооборот существует понятие бизнес-событий (событий произошедших в программе). Для того чтобы можно было использовать этот механизм, необходимо его включить в настройках программы:
Для классификации таких событий есть специальный справочник «Виды бизнес событий» (сами же события система записывает в регистр сведений «Произошедшие бизнес-события»). Также важными частями механизма бизнес-событий являются детекторы бизнес-событий и обработчики бизнес-событий, но о них ниже.
Создадим вид для бизнес-события, которое будет формироваться при наступлении данного условия.
Теперь нужно добавить "Детектор бизнес-события". Детектор бизнес-события - это как раз та часть механизма, которая отслеживает выполнение условия и создает соответствующее событие в системе.
Добавим новый детектор в справочнике «Детекторы бизнес-событий». В его карточке укажем вид бизнес-события, который создали ранее. В поле «Выражение на встроенном языке» необходимо написать код, который проверяет, есть ли хотя бы один объект, для которого условие истинно. Если есть, то переменной «Результат» нужно присвоить значение Истина. В этом случае система создаст бизнес-событие с указанным видом.
ВАЖНО: Если не установлен флаг «Детектор включен», код детектора исполняться не будет!
В нашем случае нужен запрос, который проверяет, что есть документы с выполненным условием (к документу приложен файл, подписанный электронной подписью и по этому документу нет процессов обработки). Если такие документы есть — значит наше событие произошло. Таким образом событие будет сгенерировано, когда в системе есть один или несколько документов, для которых все условия выполнились, и по ним нужно стартовать процесс.
Код детектора:
ВидыДокументов = Новый Массив;
ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Служебная записка", Истина));
Запрос = Новый Запрос;
"ВЫБРАТЬ ПЕРВЫЕ 1
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы
| ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла
| ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы
| ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет
| КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL
| И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)
| И НЕ ВнутренниеДокументы.ПометкаУдаления
| И Файлы.ПодписанЭП = ИСТИНА
| И НЕ Файлы.ПометкаУдаления";
Если Не РезультатЗапроса.Пустой() Тогда
Далее необходимо выполнить обработку сформированных бизнес-событий. В нашем случае это запуск процессов по документам. Для обработки бизнес-события в программе используется справочник "Дополнительные обработчики-бизнес событий".
В нем также необходимо написать код на встроенном языке, который будет выполнять необходимые действия. В нашем случае фрагмент кода должен находить конкретные документы, для которых выполнились условия, и создавать для них процессы.
ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Служебная записка", Истина));
Запрос = Новый Запрос;
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы
| ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла
| ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы
| ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет
| КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL
| И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)
| И НЕ ВнутренниеДокументы.ПометкаУдаления
| И Файлы.ПодписанЭП = ИСТИНА
| И НЕ Файлы.ПометкаУдаления";
Если Не РезультатЗапроса.Пустой() Тогда
ШаблонПроцесса = Справочники.ШаблоныКомплексныхБизнесПроцессов.НайтиПоНаименованию("Обработка записок", Истина);
Пока Выборка.Следующий() Цикл
БизнесПроцессОбъект.ЗаполнитьПоШаблонуИПредмету(ШаблонПроцесса, Документ, Документ.Подготовил);
Если ПолучитьФункциональнуюОпцию("ИспользоватьФоновыйСтартПроцессов") Тогда
Обработчик бизнес-события и бизнес-событие необходимо связать между собой при помощи команды Подписки в панели навигации обработчика. В открывшемся списке нужно нажать Создать и указать ссылку на созданный ранее вид бизнес-события.
После этого необходимо проверить работу детектора и обработчика, если код написан без ошибок - новые события будут появляться и обрабатываться встроенным механизмом.
Отлаживать же механизм можно частями - проконтролировать появление новых событий можно, открыв регистр сведений «Произошедшие бизнес события» (все события механизм запишет сюда), срабатывание обработчика можно увидеть тут-же по появлению флага «Обработано», а саму правильность кода обработчика — по появлению запланированного результата (в нашем примерe - создан процесс по документу).
Для тестирования программы 1С:Документооборот вам достаточно заполнить форму, нажав на кнопку ниже.
Читайте также: