Всё новое - это хорошо забытое старое
Слышали ли Вы когда-нибудь про 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С для имитации действий пользователя? Догадались?
Вот так:
К сожалению, 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-ный, или вообще будет заброшен, поэтому интересно кто что скажет, даже тролли... особенно тролли
- Ну и если есть желающие поучаствовать - у проекта будет намного меньше шансов стать заброшенным.