Automation: различия между версиями

Материал из Yolka WMS | wiki
Нет описания правки
(Gaivan изменил модель содержимого страницы Автоматизация с «вики-текст» на «CSS»)
Метка: изменение модели содержимого

Версия от 08:54, 16 марта 2023

'''Актуально для версии > 2.0.8.10.'''

Для настройки автоматизации необходимо перейти в "Администрирование" -> "Автоматизация.

Откроется окно списка автоматизаций.
[[Файл:Auto main.png|слева|мини|1033x1033пкс]]












== Структура элементов ==
[[Файл:АвтоматизацияПоРасписанию.png|мини|516x516пкс|Пример по расписанию]]
'''Состояние''' - включает/выключает автоматизацию.

'''Склад''' - дополнительный параметр (фильтр) с ссылкой на справочник "Склады";

'''Контрагент''' - дополнительный параметр (фильтр) с ссылкой на справочник "Контрагент ";

'''Обработка''' - внешняя обработка справочника "Дополнительные отчеты и обработки";

'''Команда''' - список  зарегистрированных команд в обработке;

'''Тип''' '''автоматизации''' - логика работы автоматизации;

'''Комментарий''' - дополнительное инфо поле; 

'''Объект''' - объект отслеживания (документ, справочник и т.д.);

'''Отслеживать''' - что отслеживаем: реквизит или ТЧ;

'''Реквизит''' - реквизит отслеживания;

'''Значение''' - значение реквизита;

'''Дополнительные параметры''' - таблица значение пары Ключ + Значение (можно получать в коде при срабатывании автоматизации);

== Пример автоматизации по триггеру ==
[[Файл:АвтоматизацияПоРасписанию .png|мини|237x237px|Пример по расписанию]]
В "Объект" указываем справочник "ЕУЗ" (Номенклатура).

В "Контрагент" указываем "Йолка".

В "Реквизит" указываем реквизит отслеживания "Класс".

Установим флаг "Отслеживать точное значение".

В "Значение" установим элемент справочника "Класс".

Теперь, при записи элемента справочника "ЕУЗ" будет проверяться владелец (Контрагент = Йолка), измялось ли значение реквизита "Класс" на "Класс А".

Если условия соответствуют автоматизации, в журнале "Задания для робота" (Администрирование - Задания для робота) создастся задание.
[[Файл:ПримерЗаданияДляРобота.png|мини|Пример строки задания|600x600пкс]]

После, выполнится регламентное задание для этой сроки.




== Описание кода обработки ==
Функции "<code>СведенияОВнешнейОбработке</code>" и "<code>ВыполнитьКоманду</code>" являются стандартными из БСП.

В процедуре "<code>ВыполнитьЗадание</code>" описаны 2 варианта: для автоматизации по расписанию и по триггеру. 

Через "''<code>ДополнительныеПараметры.ДополнительныеПараметрыЗапуска</code>''" можно получить передаваемые параметры из внешней обработке. 

Дополнительные параметры доступны только при указании параметра <code>ПараметрыРегистрации.ВерсияБСП = "1.2.1.4"</code> или больше.  

'''Важно: чтобы отслеживать объекты, необходимо включить "Версионирование" для этого объекта". Подсистема "Версионирование" (доступна с ролью "Полные права").'''

Если тип автоматизации "по триггеру", будет доступна ссылка на объект, для которого сработал триггер ''ДополнительныеПараметры.ДополнительныеПараметрыЗапуска.ОбъектСсылка.''


'''Важно: задания по триггеру выполняются через регистр сведений "Задания для робота".''' 

Если выполняется задача по триггеру, важно вернуть результат выполнения процедуры. 

''<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("Обработан", Истина);</code>'' 

''<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("Ошибка", Ложь);</code>''

''<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("ВыполнитьПослеОшибкиПовторно", Ложь);</code>''

''<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("Комментарий", "Автоматизация по триггеру успешно завершила работу.");</code>''

Если указать ''<code>ВыполнитьПослеОшибкиПовторно = Истина</code>,'' задание повториться и будет произведена еще одна попытка выполнить его. 

Для удаления задания, достаточно указать ''<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("УдалитьЗадание", Истина);</code>'' 

Таким образом можно отрабатывать все исключения и ошибки и в зависимости от типа такой ошибки прерывать задачу. 
[[Файл:E code.png|слева|мини|1077x1077пкс]]











































Пример кода
<code>Функция СведенияОВнешнейОбработке() Экспорт</code>

<code>ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();</code>

<code>ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();</code>

<code>ПараметрыРегистрации.Наименование = "Пример использования автоматизации";</code>

<code>ПараметрыРегистрации.Информация = "Пример использования автоматизации";</code>

<code>ПараметрыРегистрации.Версия = "1.0";</code>

<code>ПараметрыРегистрации.БезопасныйРежим = Ложь;</code>

<code>ПараметрыРегистрации.ВерсияБСП = "1.2.1.4";</code>

<code>Команда = ПараметрыРегистрации.Команды.Добавить();</code>

<code>Команда.Представление = НСтр("ru = 'Выполнить задание по триггеру'");</code>

<code>Команда.Идентификатор = "Триггер";</code>

<code>Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();</code>

<code>Команда = ПараметрыРегистрации.Команды.Добавить();</code>

<code>Команда.Представление = НСтр("ru = 'Выполнить задание по расписанию'");</code>

<code>Команда.Идентификатор = "ПоРасписанию";</code>

<code>Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();</code>

<code>Возврат ПараметрыРегистрации;</code>

<code>КонецФункции</code>

<code>Функция ВыполнитьКоманду(ИдентификаторКоманды, ДополнительныеПараметры) Экспорт</code>

<code>Если ИдентификаторКоманды = "Триггер" Тогда</code>

<code>ВыполнитьЗадание(ДополнительныеПараметры);</code>

<code>ИначеЕсли ИдентификаторКоманды = "ПоРасписанию" Тогда</code>

<code>ВыполнитьЗадание(ДополнительныеПараметры);</code>

<code>КонецЕсли;</code>

<code>КонецФункции</code>

<code>Процедура ВыполнитьЗадание(ДополнительныеПараметры)</code>

<code>Автоматизация = ДополнительныеПараметры.ДополнительныеПараметрыЗапуска.АвтоматизацияСсылка;</code>

<code>Если Автоматизация.ТипАвтоматизации = 1 Тогда</code>

<code>ЗаписьЖурналаРегистрации("Выполнена атоматизация по расписанию.", УровеньЖурналаРегистрации.Предупреждение);</code>

<code>Иначе</code>

<code>ОбъектСсылка = ДополнительныеПараметры.ДополнительныеПараметрыЗапуска.ОбъектСсылка;</code> 

<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("Обработан", Истина);</code> 

<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("Ошибка", Ложь);</code>

<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("ВыполнитьПослеОшибкиПовторно", Ложь);</code>

<code>ДополнительныеПараметры.РезультатВыполнения.Вставить("Комментарий", "Автоматизация по триггеру успешно завершила работу.");</code>

<code>ЗаписьЖурналаРегистрации("Выполнена атоматизация по триггеру для " + Строка(ОбъектСсылка), УровеньЖурналаРегистрации.Предупреждение, ОбъектСсылка);</code>

<code>КонецЕсли;</code>

<code>КонецПроцедуры</code>