Коллеги, имею проблемы.

Извините, за сумбурность изложения, в силу моей неопытности.

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

То есть работает все так:   импортируются данные (посредством импорта exel) в договоры, в договорах фиксируется вся информация, в том числе информация по клиенту «ФИО, ИНН, другая информация», состояние новых договоров «новые».

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

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

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

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

 

Пример: есть

-договор 1 (из первоначального файла импорта) от клиента 1   

-договор 2  от того же клиента 1

После импорта создаются две записи в разделе «договора»   : договор 1, и договор 2 со статусом «новый»

По сигналу запускается от договоров, запускается бизнес процесс по созданию клиентов.

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

Нравится

3 комментария
Лучший ответ

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

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

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

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

Какие условия проверки наличия контрагента в БП? Она точно корректно отрабатывает? 

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

Показать все комментарии

Коллеги, приветствую.

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

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

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

С помощью какого элемента это можно реализовать и каким образом вынести это в системные настройки?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

1 комментарий

Нашел, собственно, в "Промежуточные- обрабатывающие" - элемент "Таймер"..

Показать все комментарии

Здравствуйте!

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

Вопрос: как установить элементу задержки нужное значение задержки (из БД оно получено и записано в var DelayTime, т.е. как обратится к эл-ту?). Возможно ли это вообще? Допустим, эл-т задержки имеет имя DelayBlock, но вариант типа DelayBlock.Value = DelayTime; не работает...

Нравится

2 комментария

Юрий, необходимо подключить к скрипту БП скрипт scr_WorkflowUtils. Далее для получения элемента задержки и установить ему нужные значения, необходимо создать обработчик события OnAfterExecute для элемента, который выполняется непосредственно перед задержкой (я так понимаю, это отправка письма). В обработчик вставляем такой текст:

function wda_SendEmailOnAfterExecute(ActionItem, IsComplete) {
	if (IsComplete) {
		var Diagram = GetDiagramByItem(ActionItem);
		var DelayItem = Diagram.Items.ItemsByName('DelayBlock');
		DelayItem.DelayType = 2;
		DelayItem.Value = 5;
	}
}

Соответствие значений типа задержки (DelayType) и времени:

0 - секунда;
1 - минута;
2 - час;
3 - день;
4 - неделя;
5 - месяц;
6 - квартал;
7 - год;
8 - пользовательский (вычисляется при обработке события OnGetCustomDelay).

Большое спасибо!

Показать все комментарии

Уважаемые коллеги!

Имеется следующая ситуация: при подготовке маркетингового мероприятия исполняется бизнес-процесс. В этом бизнес-процессе есть два шага, дата совершения которых зависит от даты проведения этого мероприятия, например:

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

Дата мероприятия известна, это реквизит "Actual start" маркетингового воздействия, а вот как подставить в задачу расчетные даты [Actual start - 2 раб. дня] с минимумом программирования?

Если кто делал, буду благодарен за решение!

Нравится

1 комментарий

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

Если Вам необходимо, чтобы дата зависела от другого параметра, нужно изменить обработку события OnExecute скрипта wa_TaskActionScript в месте, где определяется значение переменной ExecuteDate, или установить нужное значение для StartDate:

	var ExecuteDate = ItemDataset.ValAsDateTime('ExecuteDate');
	var ExecuteAfterTimeTypeID = 
		WFGetParamsMapItemValue(ActionItem, 'ExecuteAfterTimeTypeID');
	var ExecuteAfterTimeValue = 
		parseInt(WFGetParamsMapItemValue(ActionItem, 'ExecuteAfterTimeValue'));
	ExecuteDate = WFCalcExecuteTime(ExecuteDate, ExecuteAfterTimeTypeID, 
		ExecuteAfterTimeValue);
	ExecuteDate = ExecuteDate.getVarDate();
	DefaultValues.Add('StartDate', ExecuteDate);

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

Показать все комментарии