В данной статье пойдет речь об алгоритмах визирования в конфигурации Бит Финанс. Многие программисты сталкивались с проблемой, что в Алгоритмах визирования в Бит Финанс отсутствует возможность возвращать алгоритм к предыдущим точкам маршрута. Как только вы попытаетесь это сделать, система выдаст ошибку.
Вопрос, возможно, кем-то и решенный, но я на просторах интернета так и не нашел решения. Пришлось колдовать самому. Представляю вниманию небольшой набор средств для организации возможности условного и безусловного возврата на предыдущие шаги визирования в алгоритме согласования. Я не претендую на истину в последней инстанции, однако система работает. Итак, приступим.
Идея очень простая. Для возврата на предыдущий этап будем использовать «Решение».
Например, что б вернуть Заявку на этап визирования «Руководитель ЦФО», создадим решение «Возврат рук ЦФО», а для возврата в начало инициатору, создадим решение «Возвращено на доработку»
Теперь создаем регистр сведений «ТочкиВозврат».
Заходим в программу , и заполняем регистр.
По решению «Возвращен на доработку» Алгоритм визирования должен вернуться в начало.
А по решению «Возврат рук ЦФО» алгоритм должен вернуться в точку «Проект договора. Рук ЦФО».
Естественно для каждого алгоритма и решения, нужно указывать свои точки.
Теперь приступим к программированию.
Нам нужно написать Функцию которая определит , что алгоритм запущен повторно БылиВозвраты.
Процедура очистки виз ВернутьНаДоработку.
Создадим общий модуль Алгоритмы и в нем пропишем нужные процедуры и функции , которые будем использовать в алгоритмах.
Итак, приступим:
Теперь собственно реализуем наш механизм. Для реализации механизма , мы воспользуемся алгоритмом изменения статусов.
Для начала в создадим колено с условием , где проверим, что есть решения по возврату . Это собственно и будет путь перенаправления маршрута назад.
Ну и самый ключевой шаг , это присвоение статуса "Возращено на доработку". Обработчике , пропишем вызов нашей процедуры возврата . Пожалуй, это и все.
Но нет, не все. Есть еще один маленький шаг. При возврате алгоритма назад, к началу, инициатор должен будет сделать какие то действия с документом (исправить ошибки и т.п.), и после этого,каким то образом сообщить системе что исправления завершены. Соответственно делаем колено, в котором проверяем, это loop или нет. Если это итерация, а не первый проход, то просим Инициатора подтвердить, что он учел все замечания и исправил документ.