Работа с табличными частями и алгоритмами
Для просмотра процесса «Выполнить проверку заказа» и алгоритма «Цена по таблице»:
- В окне «Шаблоны процессов» выбрать процесс «Проверить заказ».
- Откроется диалоговое окно «Проверить заказ (Шаблоны процессов)». Перейти в раздел «Схема».
- Нажать на задачу «Выполнить проверку заказа».
- Откроется диалоговое окно «Выполнить проверку заказа (События)». Перейти на вкладку «Заполнение».
- В графе «Алгоритм», в строке с текстом «Цена по таблице», нажать на значок с двумя квадратиками в конце строки.
- Откроется диалоговое окно «Цена по таблице (Алгоритмы)». Перейти на вкладку «Алгоритм».
- Для раскрытия подсказки нажать на зеленый значок «больше» рядом с текстом «Подсказка».
Пример алгоритма «Цена по таблице»
В табличной части (Рис. 3) имеется реквизит «Цена». Реквизит «Цена» нужно заполнить с помощью алгоритма на основании реквизита табличной части «Документы».
Особенность в том, что значения, хранящиеся в реквизитах табличных частей, представлены в системе в виде массивов.
В алгоритме используется переменная «Контекст.ТекущееЗначение» (Рис.4). Этой переменной будет передана вся правая часть таблицы, то есть значения элемента.
В правой части значения элемента выбран путь к цене из табличной части (Товары,работы,услуги) из «Заказа покупателя». Таким образом в реквизите «Контекст.ТекущееЗначение» будет массив, на каждом индексе которого находится значение из соответствующей строки табличной части.
Например, нулевой элемент массива будет соответствовать строке табличной части под номером 1 и так далее. То есть индексы в массиве и индексы в табличной части получаются одинаковые. Данный алгоритм работает для заполнения из таблицы в таблицу.
Данные по табличным частям являются массивами и записываются в структуру, которая называется «Набор записей регистра сведений значения реквизитов объектов».
Реквизит «Контекст.ТекущийОбъект» — это не задача, а набор записей регистра сведений значения реквизитов объектов.
В «Отбор» и «Значение» табличной части установлена ссылка на текущую задачу (ЗадачаСсылка = Контекст.ТекущийОбъект.Отбор.Объект.Значение).
Алгоритм решается за два прохода. Необходимо проверить заполнение объекта задачи, то есть набор записей регистра сведений.
В первом проходе объект задачи не заполнен и содержит пустую ссылку на зарезервированный объект. (Если НЕ ЗадачаСсылка.ПолучитьОбъект() = Неопределено).
Если объект задачи заполнен, определяется количество строк в табличной части (МаксИндекс = Контекст.ТекущееЗначение.ВГраница()) и заполняется значение по формуле. Строк будет столько, сколько элементов в массиве. В примере (Рис.3) 4 строки.
В переменную «Запасы заказа» получаем табличную часть из бизнес-процесса, из инициатора, который запустил бизнес-процесс (ЗапасыЗаказа = ЗадачаСсылка.БизнесПроцесс.Инициатор.Запасы). Запасы – это имя в конфигураторе, синоним (Товары, работы, услуги).
Затем для каждого индекса в текущий массив заносятся значения по формуле «Цена равно сумма делить на количество» (Контекст.ТекущееЗначение[ТекИндекс] = ЗапасыЗаказа[ТекИндекс]. Сумма/ЗапасыЗаказа[ТекИндекс].Количество).
Проверка алгоритма
Для проверки алгоритма «Цена по таблице»:
- В окне «Цена по таблице (Алгоритмы)» вкладка «Алгоритмы» дописать в формуле Контекст.ТекущееЗначение[ТекИндекс] = ЗапасыЗаказа[ТекИндекс]. Сумма/ЗапасыЗаказа[ТекИндекс]. Количество – 1.
- Нажать на кнопку «Записать и закрыть» в трех окнах последовательно.
- Нажать в левой части окна под панелью разделов текст «Заказы покупателей».
- Создать новый заказ копированием.
- Откроется диалоговое окно «Заказ покупателя (Создание)». Нажать на кнопку «Провести». Бизнес-процесс запускается автоматически.
- Откроется диалоговое окно «Выполнить проверку заказа». Если цены отличаются на единицу от того, что выбрано в документе, то алгоритм работает.
Важно вернуть значение в формуле алгоритма к первоначальному состоянию, для этого в окне «Цена по таблице (Алгоритмы)» вкладка «Алгоритмы» убрать -1 в формуле Контекст.ТекущееЗначение[ТекИндекс]=ЗапасыЗаказа[ТекИндекс]. Сумма/ ЗапасыЗаказа[ТекИндекс]. Количество.