Что такое RPA? Как и зачем его делать на 1С?

05.12.19

Разработка - Инструментарий разработчика

В данной публикации я кратко (наверное, ещё раз) расскажу про подход к автоматизации, который принято называть RPA, и продемонстрирую этот подход применительно к 1С. На Infostart event был мой доклад на эту тему, поэтому не буду повторяться - чуть больше углублюсь в технические детали.

 

Всё новое - это хорошо забытое старое

 

Слышали ли Вы когда-нибудь про AutoIt, AutoHotKey, Sikuli, Selenium? Собственно сам подход стар как мир, но раньше мы его называли "костылями" а теперь более модным словом - RPA. 

На самом деле тут фраза примерно из разряда "DevOps это не про Docker"... "RPA это не про автокликер".

Автокликер всего лишь подход.

RPA - это решение ближе к BPM системам - когда вы визуально описываете по сути рабочий процесс, а потом просто нажимаете кнопку "play" и этот процесс выполняется.

При этом из блоков в нём может присутствовать как "Получить данные из SAP" так и "кликнуть на смешную рожицу".

Главное, что весь программный код (именно так и надо воспринимать робота всё-таки) должен иметь визуальную понятную бизнесу структуру, и также RPA разработчик не должен быть ограничен возможностями 1C/С#/Java/Js/Go и прочих ЯП/Платформ, впрочем вообще никем не должен быть ограничен.

Главная задача - сокращение FTE, если число бесполезных действий пользователя сокращено - проект RPA успешен (в рамках бюджета, конечно :)).

 

Какие Бывают RPA решения

 

Сейчас решений, конечно, уже становится достаточно много, перечислил ниже то, чем более или менее можно пользоваться:

 

UiPath - самый крупный и популярный, соответственно и самый дорогой.

Хорошо: всё продумано, очень много Actions, современный визуальный интерфейс

Плохо: Microsoft Workflow Foundation (этим всё сказано, для тех, кто знает, о чём я). А для тех, кто не знает - штука довольно спорная в визуальном плане. Соответственно .NET и Windows его кредо. Кроме того, жутко дорогая штука (около 8к зеленых за робота в год).

 

AutomationAnyware:

Хорошо: действий просто тонна, старейшее решение.

Плохо: Никакой визуальной части - только код. Только Windows. Естественно жутко дорого. В России практически не представлен

 

BluePrism

Хорошо: Много действий, хорошая документация

Плохо: Ужасный устаревший интерфейс. Только Windows. Естественно жутко дорого. В России практически не представлен

 

PIX

Хорошо: Российская разработка

Плохо: Beta, только код только хардкор. Только Windows.

 

Electroneek

Хорошо: Российская разработка

Плохо: Жуткий интерфейс, малое число действий, использование в работе online сервисов (в т.ч. платных), только Windows, зачем то прикрученный JS.

 

Robin

Хорошо: Российская разработка

Плохо: Непонятно, жив или мёртв. И да, интерфейс жуткий

 

Ну и причём тут 1С?

 

Для тех, кто ещё не понял - на территории РФ 90% всех рутинных операций выполняются в нашей с вами любимой системе.

У особо продвинутых конечно много что автоматизировано. Но вот как раз на стыке со сторонними системами, особенно с Legacy или популярными большими и иностранными (поняли же на кого я намекаю), хотя не только.

Более того, всё чаще в своей деятельности, я встречаю кейсы когда разработчики(!) 1С не всегда имеют право на доступ в часть 1С систем. И доработка (в т.ч.) интеграционная становится - "большим проектом на сотни трудочасов", которые "ставят в план на будущий год". А тем временем люди копируют информацию из одной системы и вставляют её в другую.

Но я даже не знаю что хуже, те кто ждёт проекта или те кто громко кричит:

"Теперь у нас есть RPA" и даже на видео люди не стесняясь показывают заполнение форм 1С путём поиска компонент по рисункам на экране! :).

Почему такое решение использовать хм... "крайне не желательно". Объясню чуть дальше.

А мысль этого абзаца такова - автоматизировать можно всё, даже если нельзя, но очень хочется, то особенно это можно, и особенно актуально это нам в 1С. 

 

Что умеют и что не умеют RPA системы?

 

Вообще, как показывает практика, у нормальной RPA системы должно быть 4 "обязательных" компонента взаимодействия с окружающим миром (у перечисленных выше есть не у всех, кстати):

  • Взаимодействие с интерфейсом посредством имитации действий пользователя
    • Посредством Window Handler
    • Посредством распознавания графических изображений
    • Взаимодействие с web сайтами посредством поиска элементов на Web странице
  • OCR

Все остальные действия могут расходиться от системы к системе.

Для чего целых три метода взаимодействия с интерфейсом? Конечно имитация действий пользователя - дело нестабильное.

И чем больше оно AI, тем менее оно стабильное. Собственно Computer Vision сейчас пошло вперёд, но идентифицировать одну и ту же кнопку в интерфейсе WindowsXP и Windows 10 даже человек не всегда отличит. А там где проблемы есть у человека ИИ пока ещё явно бессилен:

Вообще прибегать к распознаванию изображений для имитации действий пользователя - последнее дело.

В данном случае решения получаются крайне нестабильными, часто их эксплуатация "съедает" всё сэкономленное FTE.

Вариант чуть получше - использование хэндлов элементов управления Windows.

Собственно, кто знаком с Windows API знает. По факту окно и все оконные элементы создаются средствами операционной системы.

ОС Windows хранит информацию обо всех окнах и элементах, созданных таким образом. В случае если для создания элементов управления используется Windows API - у всех их есть адреса (хэндлы) и к ним можно обратиться напрямую. 

Но и тут бывают трудности - не всегда "кнопки" которые вы видите на экране приложения создаются средствами Windows API. Никто не мешает разработчику разместить на панели картинки и обрабатывать клики по ним. Собственно примерно так и сделано в 1С. Т.е. по факту средствами Windows API можно получать только отдельные окна 1С.

И последний метод обращение к Web браузеру. В современном мире всё больше и больше Web приложений, поэтому данный метод становится всё более актуальным. Он работает достаточно стабильно (относительно распознавания картинок). Но может использоваться только для Web приложений.

А что в 1С? Ну в 1С это только для Web клиента... Притом в случае с 1С данный метод использовать нежелательно.

Web интерфейс - закрыт притом может меняться от версии платформы к версии платформы (и меняется). 

Так как же правильнее всего взаимодействовать с 1С для имитации действий пользователя? Догадались?

Вот так:

Картинки по запросу 1с запись действий пользователя

К сожалению, RPA системы которые есть на рынке этого не умеют и уметь скорее всего не будут.

Собственно это и зародило мысль что не помешала бы своя "1С-ная" RPA платформа:

 

RPA на 1С можно ли?

Собственно далее просто дело техники.

Конструктор процессов

Используется "графическая схема" 1С. Которую вполне можно и удобно редактировать программно.

Подошло практически идеально. Робот в RPA это по сути ни что иное как бизнес процесс. Элементы похожие, схема сериализуется.

Пришлось связать с данными (каждый элемент на схеме = элемент справочника), ну и отдельный справочник который нужен для самих шаблонов действий. Собственно, за счет сериализации достаточно легко сделать оркестратор.

 

Имитация действий

Делится на три части:

- Windows. Тут собственно всё просто - можно использовать AutoIT или выполнить функции WindowsAPI. Так же в .NET есть прекрасная библиотека UIAutomation, которая помимо всего прочего может ещё неплохо распознавать элементы .NET приложений, а это сейчас уже более 30% всех Windows приложений. Используется довольно легко. Как подцепить к 1С? Ну или написать NativeAPI компоненту на C++ или объект который можно зарегистрировать как COM на .NET. И то и другое в целом делается достаточно просто.

- Computer Vision. Если уже пришлось его использовать то не стоит рассчитывать на корректную работу, тем не менее задачу поиска похожего изображения никто не отменял. Для этого существует замечательная и популярная библиотека OpenCV. В С++ её использовать достаточно сложно, поэтому в данном случае компоненту проще сделать через .NET обвязку и подключать к 1С как COM. Можно использовать что-то более "тяжелое" вроде TensorFlow. Но эксперименты показывают что ради пары процентов увеличения в качестве распознавания похожих (которое без правильных настроек всё равно не увидеть) приходится существенно жертвовать производительностью и гибкостью

- Web страница. Тут выбор однозначен - Selenium WebDriver (для него тоже есть обвязки практически для всех языков).  И работает это сейчас намного стабильнее чем всё остальное. Ничего стороннего лучше не брать - просто установить расширение Chrome которое позволяет извлекать селекторы и использовать.

- OCR. В современном мире распознавание текста/лиц/объектов это совсем не сложная задача (если конечно не хочется чтобы оно было лучше чем у всех). Для распознавания попробовал tesseract OpenSource библиотека, по традиции имеющая обвязки под все популярные языки и среды. Путём нехитрых манипуляций оборачивается в COM/.NET объект и качество распознавания... ну знаете без глубокой экспертизы даже с Abby уже будет трудно заметить. Нормальный не испорченный скан с потокового сканера распознаёт практически без ошибок. 

Далее делаем действия по выполнению кода 1С, записанных действий, работы с почтой и FTP (простым кодом 1С) и воаля, прототип RPA платформы на 1С:

Не так уж и плохо выглядит даже в сравнении с лидером рынка:

 

Для запуска действий 1С в целевой системе устанавливается расширение - которое по http получает сериализованных роботов, и просто выполняет их код. 

Конечно не всё так просто - есть переменные, условия, циклы.. процедура выполнения кода получилась достаточно замороченной.

А что ещё мы получаем полезного:

  • С 1С можно работать нативно (вызовом кода)
  • RPA платформа будет кроссплатформенной (кроме Windows библиотеки конечно) - тонкий клиент ведь 1С есть под все популярные платформы
  • Поскольку "справочник" это только запись в БД и все они сериализуются - система получилась расширяемой без проблем.

А теперь самое главное - "зачем я всё это написал"?

  • В первую очередь - для того чтобы показать что на 1С можно делать реально крутые штуки и без особых проблем, при этом скорость разработки не сопоставима с традиционными решениями, а интерфейс вполне конкурентный. При этом платформа 1С скорее преимущество (сериализация, расширяемость, кроссплатформенность)
  • Я не знаю пока будет ли это коммерческий продукт или OpenSource-ный, или вообще будет заброшен, поэтому интересно кто что скажет, даже тролли... особенно тролли
  • Ну и если есть желающие поучаствовать - у проекта будет намного меньше шансов стать заброшенным.

Вступайте в нашу телеграмм-группу Инфостарт

RPA 1C Роботизация Роботы