Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

Особенности нумерации блоков

нумерация блоков в схемах типовых маршрутов проставляется автоматически – в левом верхнем углу блока. Если со схемы удалить блок типового маршрута, то при добавлении нового блока он отмечается очередным номером;
порядок выполнения блоков определяют стрелки, соединяющие блоки, а не номера блоков;
при создании жесткого типового маршрута блок начала нумеруется с 0, а блок конца маршрута с 1;
если создать и стартовать задачу по свободному типовому маршруту, нумерация начинается с блока задачи с 1. Затем нумеруется блок начала и блок конца типового маршрута;
порядок нумерации блоков, должен, по возможности, соответствовать направлению основного потока бизнес-процесса;
при разработке типового маршрута учитывайте, что очередность выполнения параллельных блоков зависит от очередности создания соединительных связей (стрелок) к этим блокам. Связь к одному из параллельных блоков созданная ранее остальных выполнится первой;
нумерация блоков может использоваться в SQL запросах. Таблица SBTaskRoute содержит данные о каждом этапе маршрута задач, в том числе Number – номер этапа или блока;
в таблице SBTaskJob значения в поле WorkflowBlockID соответствуют ИД блоков типового маршрута из XML-схемы задачи. Напротив, ИД блоков XML-схемы задачи не всегда совпадает с ИД тех же блоков на схеме типового маршрута.

Особенности нумерации циклов

В таблице SBTaskJob поле WorkflowCycleBlockID содержит ИД блока типового маршрута начала цикла. Если установлено значение -1, значит блок не входит в цикл. В поле WorkflowIteration указывается номер текущей итерации блока. Одновременно могут существовать задания с разных итераций, например, на первой итерации его уже выполнили, а на второй уже создалось новое.

Параметры WorkflowCycleBlockID и WorkflowIteration можно применять в жестких типовых маршрутах для решения  задач, например:

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

Допустим, необходимо в жестком типовом маршруте определить, выполняется ли последнее задание по блоку. Если блок находится в цикле, учитываются параметры WorkflowCycleBlockID и WorkflowIteration текущего блока.

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

 

LastJob = true

Task = Tasks.GetObjectByID(Object.Info.TaskID)

TaskDDS = Task.DetailDataSet(3)

TaskDDS.First

while not TaskDDS.EOF

  if (TaskDDS.WorkflowBlockID = Sender.ID) and (TaskDDS.JobState == 'В работе') and (TaskDDS.ИД <> Object.Info.ID)

    LastJob = false

  endif

  TaskDDS.Next

endwhile

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

пример незамкнутой ветки цикла в схеме задачи:

Щелкните для увеличения изображения

пример исправленной схемы задачи:

Щелкните для увеличения изображения

XML-схема типового маршрута

Общая XML-схема типового маршрута имеет вид:

 

<Settings>
<Event>
  <!--ISBL-текст обработчика события «Автозаполнение».-->
</Event>
<StartedAskableParams>
  <!--Установки запрашиваемых параметров при выполнении типового маршрута.-->
</StartedAskableParams>
<Params>
  <!--Описание параметров, задаются по кнопке «Параметры».-->  
</Params>
<Properties>
  <!--Описание параметров задачи: текст, тема, важность и вложения.-->
</Properties>
<Blocks>
  <!--Описание блоков типового маршрута и их свойств.-->
</Blocks>
<Route>
  <!--Описание связей между блоками и код результата выполнения.-->
</Route>
<ExecutedBlocks>
  <!--Выполняемые блоки: тип, ИД, начало цикла, количество итераций и др.-->
</ExecutedBlocks>
<CurrentBlocks>
  <!--Описание текущего выполняемого блока.-->
</CurrentBlocks>
</Settings>

XML-схему типового маршрута можно получить несколькими способами:

нажать горячие клавиши ALT+X в открытой записи компоненты Типовые маршруты;
выполнить ISBL-код.

Текст XML-схемы типового маршрута хранится в параметре ISBSearchCondition компоненты Типовые маршруты, с помощью вычисления можно прочесть это реквизит, например:

 

TMCode = <Код типового маршрута>

// Получить справочник "Типовые маршруты".

TMTReference = References.ТМТ.GetComponent

TMTReference.Open

if TMTReference.Locate(SysReq_CODE; TMCode)

  // Типовой маршрут с заданным кодом найден.

  TMTReference.OpenRecord

  // Получить ИД типового маршрута.

  TMID = TMTReference.ID

  // Получить XML-схему типового маршрута.

  TMScheme = TMTReference.Form.View.Component.DataSet.Requisites('ISBSearchCondition').AsString

  EditText(TMScheme)

else

  // Типовой маршрут с заданным кодом не найден.

  TMTReference.Close

  Raise(CreateException(" "; "Типовой маршрут с кодом'" & TMCode & "' не найден"; ecWarning))

endif

 

Также XML-схема хранится в реквизите главного раздела задачи (задания, уведомления) WorkflowDescription, тогда можно применить код:

 

Task = Tasks.GetObjectByID(<Ид задачи>)

XMLDocument = CreateObject("MSXML.DOMDocument")

XMLDocument.LoadXML(Task.WorkflowDescription)

EditText(XMLDocument.xml)

вызвать SQL-запрос.
© Компания DIRECTUM, 2018 Сообщество пользователей DIRECTUM
.navbar > a:hover { background: #FFD73B; }