Как в конфигурации 1С:Документооборот 3.0. настроить условия маршрутизации бизнес-процессов на встроенном языке (через скрипт)

Содержание:

В Документооборот 3.0. есть несколько вариантов настройки условий маршрутизации процесса.

В этой статье рассмотрим подробно настройку условий с помощью встроенного языка (скрипта) на трёх примерах:

  1. Простое выражение на сравнение значений реквизитов
  2. Операции со значениями реквизитов
  3. Обращение к дополнительным реквизитам
1

1. Простое выражение на сравнение значений реквизитов в учетной системе 1С

Пример 1: Документ «Служебная записка» должен быть согласован непосредственным руководителем автора документа, при условии, что автор документа не является руководителем подразделения документа.

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

Далее по двойному клику на задачу «Согласование» нужно провалиться в форму настройки задачи и выбрать согласующего из раздела «Автоподстановки» – Непосредственный руководитель подготовившего документ:

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

Для того нужно провалиться в колонку «Условие», в открывшемся справочнике «Алгоритмы проверки» создать новый элемент, указать «Наименование» и «Способ задания» = На встроенном языке:

Правило «Руководитель подразделения документа НЕ РАВЕН автору документа» формируем на встроенном языке:

  1. Пишем вначале «Результат =»;
  2. Далее из списка «Реквизиты документа» выбираем «Подразделение» (по двойному клику или по кнопке) – в поле скрипта автоматически добавиться текст «Предмет.Подразделение»;
  3. Нам нужен Руководитель подразделения, следовательно нужно добраться до реквизита «Руководитель» справочника «Подразделение» – допишем «.Руководитель» после «Предмет.Подразделение»;
  4. Далее нужно сравнить Руководителя подразделения с автором документа, значения не должны совпадать, следовательно, ставим знаки <>;
  5. На следующем шаге из списка «Реквизиты документа» нужно выбрать реквизит «Подготовил» (это автор документа), аналогично пункту 2.

На рисунке ниже части текста, добавленные из списка «Реквизиты документа» выделены красным, остальной текст написан вручную.

Текст выражения:

Проверим корректность выполнения условия, для этого в поле «Проверка», выберем документ:

Проверка выдаёт значение «Ложь «и действительно, Автор документа = Руководителю подразделения:

Проверим другой документ:

Проверка выдаёт значение «Истина», и, действительно, Автор документа НЕ Руководитель подразделения:

Проверка прошла успешно!

2

2. Операции со значениями реквизитов в 1С:Докуметооборот 3 0

Пример 2: «Служебная записка о командировке» согласовывается Финансовым директором, если длительность командировки более 7 дней.

Для указания периода командировки будем использовать типовые реквизиты, которые включаются настройкой «Учитывать срок действия» в настройках Вида документа:

Заходим в настройку задачи на согласование: Вид документа «Служебная записка»-> Настройка обработки-> Правила обработки, проваливаемся в настройку задачи и дальше переходим в «Условия» -> «Алгоритмы проверки». Создадим новый элемент. Из списка «Реквизиты документа» двойным кликом мышки подбираем реквизиты: ДатаНачалаДействия и ДатаОкончанияДействия. Простое выражение типа ДатаОкончанияДействия – ДатаНачалаДействия > 7 будет некорректным, т.к. в результате получим количество секунд, а не дней. Следовательно, чтобы получить количество дней, нужно разделить на 86400 (столько секунд в 1 дне – 24*60*60):

Для того, чтобы убедиться, что выражение считается корректно, выведем его значение в строку сообщений. Для этого вызовем метод Сообщить ((Предмет.ДатаОкончанияДействия – Предмет.ДатаНачалаДействия)/86400):

Проверим алгоритм:

Проверка выдаёт значение «Истина» и сообщает значение выражения, равное 8. Это верно:

Проверим другой документ:

Проверка выдаёт значение «Ложь» и сообщает значение выражения, равное 2. Это верно:

После успешной проверки удаляем функцию Сообщить() из скрипта.

3

3. Обращение к дополнительным реквизитам в системе компоновки данных 1С

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

Для обращения к дополнительным реквизитам нам понадобится значение поля «Имя» из раздела «Для разработчиков» элемента справочника «Дополнительные реквизиты»:

Заходим в настройку задачи на согласование: Вид документа «Служебная записка»-> «Настройка обработки» -> «Правила обработки», проваливаемся в настройку задачи и дальше в «Условия» -> «Алгоритмы проверки». Создадим новый элемент. В списке «Реквизиты документа» дополнительные реквизиты не отображаются в явном виде, поэтому пишем скрипт.

Чтобы добраться до значений нужных дополнительных реквизитов, нужно сначала получить ссылку на сам реквизит с помощью метода «НайтиПоРеквизиту» , запишем полученные значения в переменные «ДатаНачала» и «ДатаОкончания»:

ДатаНачала = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту(“Имя”, “ДатаНачала_73dff61722dc44f797fb7dcc5a7d5d1a”);

ДатаОкончания = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту(“Имя”, “ДатаОкончания_83ea883baf8349a48931a3e7b0fb2763”);

Далее нужно найти значение полученного реквизита в документе («Предмет.Ссылка» в срипте) с помощью метода «УправлениеСвойствами.ЗначениеСвойства», запишем значения в соответствующие переменные «ЗначениеДатаНачала» и «ЗначениеДатаОкончания»:

ЗначениеДатаНачала = УправлениеСвойствами.ЗначениеСвойства(Предмет.Ссылка, ДатаНачала);

ЗначениеДатаОкончания = УправлениеСвойствами.ЗначениеСвойства(Предмет.Ссылка, ДатаОкончания);

И в завершении формируем итоговое выражение:

Результат = (ЗначениеДатаОкончания – ЗначениеДатаНачала)/86400 > 7;

Выведем значения переменных и выражения с помощью метода Сообщить() для проверки:

Сообщить (ДатаНачала);

Сообщить (ДатаОкончания);

Сообщить (ЗначениеДатаНачала);

Сообщить (ЗначениеДатаОкончания);

Сообщить ((ЗначениеДатаОкончания – ЗначениеДатаНачала)/86400);

Сохраняем алгоритм и проверяем на документе:

После успешной проверки удаляем метод Сообщить() из скрипта.

Скрипт готов для использования!