Для чего нужно?
Задачи, которые ставятся перед такой архитектурой:
- Возможность не публиковать 1С HTTP-сервис во внешний интернет. Вместо этого публикуется маленький скрипт, по желанию - либо на собственном сервере/компьютере, либо на VPS. Это позволяет работать даже тем клиентам, у кого нет ни серверной 1С, ни как такового сервера, при этом не нужно выносить данные в облако. Безопасность остается на уровне.
- Повышение производительности за счет архитектуры и технологии. Отзывчивость таких запросов значительно выше, чем у HTTP-запроса, за счет того, что не нужно устанавливать соединение. Также архитектура выполнения обработчиков не синхронная, как в случае обычного online, а всегда асинхронная, что позволяет разгрузить приложение.Можно разгрузить бек систему за счет распределения нагрузки на шину
- Приложение может работать с бесконечным количеством серверов, либо распределенных серверов
Как это работает?
1. Публикуется скрипт «шина». Для целей именно обработчиков полноценная шина SimpleBus не нужна, поэтому я сделал упрощенный скрипт из полутора сотен строчек. Оттуда убраны очереди, кеширование данных, http-интерфейс и все что не нужно, осталось только необходимое. GitHub тут https://github.com/dvdocumentation/simplebuslite
Это если вы хотите разместить шину у себя. По умолчанию можно работать через мою такую же шину на VPS, настройки прописаны в расширениях по умолчанию.
По умолчанию авторизация отключена, но можно завести пользователей (в СУБД на шине) и включить авторизацию.
Скрипт можно переписать, в т.ч. на более быстром языке. Это не принципиально, важно задать архитектуру и стандарт.
2. В 1С устанавливается расширение, которое работает как клиент для этого скрипта-шины. Там нужно прописать настройки – URL шины, токен (об этом далее)
3. Вся адресация работает на «токенах». Например, у вас есть конфигурация 1С: ERP , вы публикуете от нее токен SimpleConnect_erp_692f4a8d_2c68_40be_82df_4f4b9224ee1e (имя сгенерировано автоматически) и шина теперь «знает», что владелец токена – это вот этот клиент SimpleConnect_erp_692f4a8d_2c68_40be_82df_4f4b9224ee1e. Но клиенты, подключенные к шине (Simple), не знают такой длинный токен, у них в конфигурации прописано просто “erp” – это псевдоним токена. На клиенте хранится БД соответствия токенов и их псевдонимов. Клиент, например, через QR считывает настройки вашей ERP и теперь его Simple запомнил, что erp это SimpleConnect_erp_692f4a8d_2c68_40be_82df_4f4b9224ee1e. Теперь, когда он передает запрос, он в назначении указывает именно это токен. Звучит сложновато? На самом деле это все делается автоматически. А нужно это для того, чтобы: 1) клиент мог работать с несколькими базами одновременно в рамках одной конфигурации 2) чтобы можно было работать в облаке с одной конфой, но разными серверами (например, эти примеры к статье – у всех прописано bp, шина допустим одна (моя на VPS) но токены у всех разные, за счет такой архитектуры каждый работает в рамках своего токена)
4. В Simple один раз сканируются настройки (их также можно установить из кода) и он начинает отправлять синхронные и асинхронные запросы. Работает это так. Возникает событие, запускается обработчик onlinews. Он может быть синхронным, асинхронным или «с прогресс-баром». Для каждого вызова приваривается уникальный номер execute_id, который уходит в запросе на шину, а потом в бек-систему, а потом возвращается в виде «ответа». Ответ в кавычках, потому что в архитектуре веб-сервисов нет ответов, это просто сообщения. Все это время Simple терпеливо ждет сообщения от шины с таким execute_id. В случае синхронного запуска он блокирует UI и «подвешивает» систему. В случае runprogress показывает крутилку. В случае асинхронного обработчика ничего не блокируется, но когда будет получен ответ, может быть выполнен обработчик postExecute
Вместе с запросом туда-сюда ходит стек переменных/команд. Ожидание ограничено временем ожидания (по умолчанию 10сек, задается в настройках)
Таким образом вся обработка выполняется на стороне 1С. Отладка, естественно, тоже доступна на стороне 1С.
Вот пример обработчика события new_barcodes_detected. Тут он берет из массива найденных штрихкодов кадре штрихкод, ищет по базе, подкрашивает надпись в предпросмотре камеры и открывает диалог для ввода количества.
По сути дела, в Simple изначально всегда был онлайн-режим. Симпл с этого начинался много лет назад. Всегда можно было выполнять обработчики в 1С или в любой другой бек-системе онлайн. В плане функционала нового не появилось. Новый онлайн режим делает то же самое но по другому. У разработчика есть выбор каким режимом пользоваться. Но, в некотрых случаях асинхронная архитектура прям сильно напрашивается
Конфигурации-примеры для 1С: Бухгалтерия предприятия 3 и 1С:Управление торговлей 11.4
Данные конфигурации демонстрируют новый подход к онлайн обработчикам (я его называю «онлайн 2.0») и также демонстрируют и новый подход к работе с штрихкодами и OCR, т.н. "ActiveCV 2.0" описанный в этой статье https://habr.com/ru/articles/874560/
Вопрос: можно ли было это сделать на обычном онлайне через HTTP (тип обработчика online)? Конечно. Но у каждого инструмента свое назначение. Где то хватает обычного онлайна, где то нет.
Обе конфигурации рассчитаны на телефоны (работа с камерой), а не на ТСД. В ТСД обычно плохие камеры и нет gpu, зато есть сканер. Поэтому для работы со штрихкодами на ТСД лучше использовать сканер, а не камеру. С OCR (распознавание инвентарных номеров) лучше работать на телефоне с хорошей камерой (я для всех примеров использую Samsung Note 10). Так как обе на ActiveCV, то оба примера ориентированы на потоковое сканирование а не на сканирование "по одному объекту за раз".
Оба примера – своего рода заготовки, для того чтобы сделать под себя для нужных документов. Оба примера максимально актуальны на начало 2025 года – используются все последние достижения и подходы.
Для работы потребуется самая последняя версия Simple 14.05.00 и 1С разумеется не ниже 8.3.7.
Расширения написаны под старые версии конфигураций Бухгалтерия предприятия, редакция 3.0 (3.0.83.33) и Управление торговлей, редакция 11 (11.4.13.123). Если не ставится из-за версии совместимости (выше) то можно поставить через сравнение и объединение.
Заполнение приходных ордеров онлайн для УТ11
Задача конфигурации – взять готовый Приходный ордер и проставить в нем количество факт онлайн, т.е. прямо в 1С. Идентификация – по штрихкоду. Кол-во вводится в диалоге. Все это можно сделать на симпле и в других вариантах (например, кол-во вводить на экране, редактировать таблицу, не использовать ActiveCV а использовать обычный Штрихкод), но сделано так, чтобы показать возможности последних двух релизов. Раскраской помечаются расхождения.
Инвентаризация ОС для БП3 с идентификацией OCR
Вот это пример где ActiveCV работает на все 100%, т.к. процесс не прерывается как в предыдущем примере на ввод кол-ва, а просто непрерывно сканируются инвентарные номера. Собственно, также хорошо это работает с штрихкодами, например DataMatrix, скорость сканирования OCR почти не отличается от штрихкодов, все нюансы отработаны. Т.е. хорошо ActiveCV использовать когда есть непрерывное сканирование уникальных объектов.
Инвентарные номера предварительно загружаются в датасет (Важно! Только латинские буквы и цифры). Затем задача простая : OCR читает номер и отмечает в документе что ОС найден, также помечает цветом найденные. Если в документе нет, то добавляет.
К сожалению, до живого примера с инвентарными номерами ехать далеко, поэтому написал рандомные номера на доске. По особенностям сканирования номеров лучше посмотреть в моей статье на Хабре, приведенной выше, ну и периодически я показываю в статьях заковыристые случаи.
Работа с несколькими базами одновременно, сохранение настроек и использование токенов
Simple коннектится к шине, но также он должен присоединиться к токенам баз, с которыми он работает (это речь про приложение). Т.е. одновременно может выполнять обработчики в нескольких серверах. А вот конфигурация ничего не знает ни про шину ни про токены, но она работает с псевдонимами токенов.
Выглядит это так. Есть список токенов через запятую, которые нужны конфе.
И есть токен по умолчанию (это чтобы не указывать во всех обработчиках в явном виде токен)
Таким образом к токену по умолчанию обращение как к просто обработчику
А к конкретному токену вот так
Ну и собственно остается на устройстве привязать токены. Либо с помощью меню Онлайн-Отладка QR либо программным способом.
Сохранение настроек.
Есть настройки шины и есть настройки токенов. Настройки шины хранятся в меню настроек. Их можно задать вручную, передать через QR описанный ранее и также передать обычным способом через файл/QR/команду общим способом https://uitxt.readthedocs.io/ru/latest/settings.html#qr
Разница в QR-ах заключается только в том, что в общем случае установки настроек, они просто запишутся, а веб сервис не будет сразу пытаться соединиться (только после перезапуска). В тех QR-ах которые в промерах-конфигурациях сокет сразу соединяется.
Для записи токенов программным способом есть команда SetTokens с JSON-массивом в качестве параметра: [{"alias":<alias>,"token":<token>}]
Также есть команда SetSimpleBusSettings для того, чтобы установить настройки шины, не записывая их в настройки (т.е. они будут действовать до перезапуска) с JSON-параметром с ключами token,url,id,password,enable и команда ConnectSimpleBus для немедленного соединения с шиной.
Посмотреть примеры (ui-файлы) можно на https://seditor.ru:1555/ или развернув редактор локально (https://github.com/dvdocumentation/web_simple_editor).
Скачать apk 12.05 можно тут: https://simpleui.ru/
Конечно же, Телеграмм-канал проекта, в котором масса всего полезного: https://t.me/devsimpleui
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.74.69
- Управление торговлей, редакция 11, релизы 11.4.13.46