1с создать задачу программно

Обновлено: 07.07.2024

Механизм бизнес-процессов автоматически формирует задачи по точкам маршрута в соответствии с настройками свойств адресации.
Однако в некоторых случаях встает необходимость программно переопределить стандартное создание задач. Для этого предназначены обработчики ПередСозданиемЗадач() и ПриСозданииЗадач().

Под согласованием понимается предварительная оценка проекта документа и/или получение согласия на его утверждение.

Бизнес-процесс согласования состоит из трех точек маршрута:
* определение списка рецензентов;
* cогласование рецензентами;
* обработка результата согласования.

В бизнес-процессе участвуют инициатор согласования и рецензенты.

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

После выполнения этой задачи бизнес-процесс завершается.

Так как исполнителей заранее определить нельзя , то в пояснении точек маршрута вписаны строки "Инициатор" и "Рецензенты" для того, чтобы сделать карту нагляднее. С этой же целью точке маршрута "На согласование" установлено свойство "Групповая", хотя реально оно не используется механикой бизнес-процесса, т.к. все задачи формируются программно.

Исполнителем первой и последней точки является инициатор бизнес-процесса. Исполнители точки "На согласование" определяются списком рецензентов, который составляет инициатор.

Формирование задач на точках "Определить список рецензентов" и "Обработать результаты" происходит в обработчике ПередФормированиемЗадач() и отличается тем, что в первом случае свойство "Сотрудник" берется из параметра сеанса, а во втором - из свойства "Инициатор" бизнес-процесса:
Код 1C v 8.х
На точке "На согласование" задачи формируются в обработчике "ПриСозданииЗадач" путем перебора элементов табличной части "Рецензии":
Код 1C v 8.х

Программное формирование задач на точках маршрута

Механизм бизнес-процессов автоматически формирует задачи по точкам маршрута в соответствии с настройками свойств адресации.
Однако в некоторых случаях встает необходимость программно переопределить стандартное создание задач. Для этого предназначены обработчики ПередСозданиемЗадач() и ПриСозданииЗадач() .

Рассмотрим эту возможность на примере бизнес-процесса согласования (см. Демонстрационные конфигурации - Бизнес-процессы - Согласование ).


Под согласованием понимается предварительная оценка проекта документа и/или получение согласия на его утверждение.

Бизнес-процесс согласования состоит из трех точек маршрута:

  • определение списка рецензентов;
  • cогласование рецензентами;
  • обработка результата согласования.

В бизнес-процессе участвует инициатор согласования и рецензенты.

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

После выполнения этой задачи бизнес-процесс завершается.

Так как исполнителей заранее определить нельзя, то в пояснении точек маршрута вписаны строки Инициатор и Рецензенты для того, чтобы сделать карту нагляднее. С этой же целью точке маршрута На согласование установлено свойство Групповая , хотя реально оно не используется механикой бизнес-процесса, т. к. все задачи формируются программно.

Исполнителем первой и последней точки является инициатор бизнес-процесса. Исполнители точки На согласование определяются списком рецензентов, который составляет инициатор.

Формирование задач на точках Определить список рецензентов и Обработать результаты происходит в обработчике ПередФормированиемЗадач() и отличается тем, что в первом случае свойство Сотрудник берется из параметра сеанса, а во втором - из свойства Инициатор бизнес-процесса:

На точке На согласование задачи формируются в обработчике ПриСозданииЗадач путем перебора элементов табличной части Рецензии :


Регламентные задания позволяют выполнять определенные действия по расписанию. Для выполнения используются фоновые задания.

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

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

Регламентные задания

В свойстве Наименование можно указать произвольное наименование регламентного задания. Свойство Ключ аналогично такому же свойству фоновых заданий. Нельзя запустить несколько фоновых заданий с одним ключом и связанных с одним регламентным заданием.

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

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

Расписание регламентных заданий

Для настройки расписания нужно нажать на гиперссылку Открыть рядом со свойством Расписание. Будет открыто окно настройки расписания:

Расписание регламентных заданий

Для примера настроим чтобы регламентное задание выполнялось каждые 5 минут. Для этого на закладке Общее укажем, что нужно повторять задание каждый день:

Расписание регламентных заданий

Расписание регламентных заданий

Нажмем ОК, сохраним конфигурацию базы данных. Теперь каждые 5 минут будет запускаться фоновое задание и выполнять код из процедуры, которая указана в свойстве Имя метода.

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

Для программного открытия окна настройки расписания регламентного задания в пользовательском режиме можно воспользоваться следующим кодом:

ДиалогРасп = Новый ДиалогРасписанияРегламентногоЗадания ( Расп ) ; ОбратныйВызов = Новый ОписаниеОповещения ( "ЗаписатьРасписание" , ЭтотОбъект ) ; РеглЗад = РегламентныеЗадания . НайтиПредопределенное ( "РегламентноеЗадание1" ) ; Процедура ЗаписатьРасписание ( Расп , ДопПараметры ) Экспорт РеглЗад = РегламентныеЗадания . НайтиПредопределенное ( "РегламентноеЗадание1" ) ;

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

Расписание регламентных заданий

Расписание можно создать программно:

РеглЗад = РегламентныеЗадания . НайтиПредопределенное ( "РегламентноеЗадание1" ) ;

Теперь регламентное задание будет выполняться каждую минуту.

Рассмотрим некоторые настройки расписания:

Те же самые примеры, но программно:

НовоеРасп . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 1 , 0 , 0 ) ; НовоеРасп . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 1 , 0 , 0 ) ; НовоеРасп . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 1 , 0 , 0 ) ; Расп 1 . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 13 , 0 , 0 ) ; Расп 2 . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 18 , 0 , 0 ) ; //каждый день, в 13:00 и в 18:00, но только с 1 по 10 мая 2021 года Расп 1 . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 13 , 0 , 0 ) ; Расп 2 . ВремяНачала = Новый Дата ( 1 , 1 , 1 , 18 , 0 , 0 ) ;

Планировщик регламентных заданий

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

В файловом варианте регламентные задания выполняются на клиентском приложении. Причем только на одном. Это будет самое первое запущенное клиентское приложение. Если его закрыть, то регламентные задания начнут выполняться на другом клиентском приложении. Если больше нет запущенных клиентских приложений, то регламентные задания не будут выполняться. Если расписание регламентного задания было настроено на час ночи, а в этом время не был запущен ни один сеанс, то такое задание не будет выполнено. Обработка регламентных заданий выполняется один раз в 60 секунд. Если при запуске регламентного задания на этом клиентском сеансе уже выполняются какие-нибудь фоновые задания, то регламентное задание будет выполнено только после завершения всех текущих фоновых заданий.

До версии платформы 8.3.3.641 в файловом варианте не было автоматического выполнения регламентных заданий. Нужно было программно вызывать метод ВыполнитьОбработкуЗаданий. Обычно для этого запускался отдельный сеанс и в нем через обработчик ожидания вызывался данный метод.

Программная работа с регламентными заданиями

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

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

Процедура Действие1ПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка)

где ФормируемыеЗадачи то куда помещается задача
СтандартнаяОбработка, что бы отменить стандартное создание задач

Но все это в бизнесс процессе! А если хочется обойтись без бизнесс процесса, можно ли оперировать программно созданием задач, отменяя стандартную обработку?

(0) "Выявил что программно можно создавать задачи только в бизнесс процессах".
Сам придумал себе проблему, сам решай теперь
А так нужно привязываться к бизнес процессу, к другому объекту, и как я вижу уже дорабатывать все на его форме.
То его пользователь уже, для постановки задач должен открывать форму не задачи а бизнес процесса?
И сама эта форма должна содержать всю необходимую информацию для создания задачи одному исполнителю или нескольким.
Остаётся один вопрос: зачем пользователю все задачи, а не ему выданные или те, автором которых он был? Тут тебе виднее.
(4) Если я хочу сам создавать задачи, можно это делать в самой задаче? Там нет процедур для создания в модулях. Как отменять автоматическую обработку, стандартное проведение?
Я смотрю Миста за ТС с пятницы делает проект по контролю выполнения задач.
Деньги за проект тоже будут на всю Мисту делиться? :)

(5) при любом тебе нужном. Хочешь создавай и записывай, если есть все данные, если нет выдай форму для заполнения пользователю

Задача, такой же объект как и документ (с некоторыми особенностями), рули как тебе нужно

(8) Ну если так то уже лучше.
Тогда лучше создавать задачу со сторонней формы?
Или не по кнопке ок, в задаче?
Так как по кнопке ок, срабатывает механизм стандартного автоматического создания задачи?

(9) >>Тогда лучше создавать задачу со сторонней формы?
смотри по ситуации, если задач несколько (разные объекты Задача, типа: Напоминание, Задание, Уведомление), делай одну форму или журнал, если в конфигурации Задача одна (используешь один тип задач, например, Напоминание, как в ранних типовых) тогда отдельная форма незачем

>>Так как по кнопке ок, срабатывает механизм стандартного автоматического создания задачи?
Посиди и подумай, какое автоматическое создание задачи без наличия БП ты ожидаешь? Ты придумал когда и как тебе нужно создать задачу, вот и рули этим процессом сам, а автоматику оставь в покое.

Автоматика срабатывает по типовой кнопке "Ок" да?

Можно тогда её сделать не активной и пробовать делать создание своих задач, по своему алгоритму.

Читайте также: