Разработка мобильных приложений для работы в связке с экосистемой «1С» — одна из самых частых задач в современной автоматизации бизнеса. Будь то мобильное рабочее место курьера, приложение для сбора заказов торговыми представителями или клиентский сервис, перед разработчиком неизбежно встает вопрос: как правильно связать мобильное приложение (например, на Kotlin или Java) с информационной базой «1С»?
В этой статье мы подробно проанализируем различные подходы к интеграции, выясним, почему классический прямой обмен и выставление «1С» напрямую в интернет — это плохая идея, и разберем наиболее надежную, безопасную и современную архитектуру сопряжения систем с использованием промежуточного сервера (Middleware).
---
Часто у начинающих разработчиков или представителей бизнеса возникает соблазн реализовать обмен «напрямую» самым простым путем. Давайте разберем по шагам, почему классические варианты интеграции таят в себе огромные риски:
HTTPСервисы в «1С» позволяет легко принимать запросы. Однако выставление базы «1С» «лицом» в глобальную сеть создает колоссальные угрозы безопасности. Кроме того, одновременное подключение сотен мобильных устройств создаст лавинообразную нагрузку на сервер «1С», что приведет к транзакционным блокировкам и зависанию работы всей компании.---
Для создания по-настоящему надежной и масштабируемой системы рассмотрим архитектурный паттерн с использованием промежуточного веб-сервиса (бэкенда), который выступает буфером между мобильными устройствами и учетной системой «1С».
Проанализируем, как работает эта схема:
Преимущества такого подхода очевидны: база «1С» полностью закрыта от внешнего мира, системным администраторам не нужно открывать опасные порты наружу, мобильные пользователи получают мгновенный отклик приложения, а при падении или обслуживании сервера «1С» мобильное приложение продолжает полноценно работать в офлайн- или онлайн-режиме, сохраняя заказы в буфере.
---
Разберем по шагам, как настроить отправку и получение данных на стороне «1С» с использованием объекта HTTPСоединение. Предположим, нам необходимо передать на промежуточный сервер информацию об обновлении цен номенклатуры.
Рассмотрим пример кода на языке «1С:Предприятие» для отправки POST-запроса с JSON-пакетом:
&НаСервере
Процедура ОтправитьДанныеНаПромежуточныйСервер(ДанныеЦен)
// Адрес нашего промежуточного сервера и порт
СерверАдрес = "api.my-middleware-server.com";
Порт = 443; // Используем защищенное соединение SSL
// Инициализируем защищенное соединение
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
// Создаем HTTP-соединение
Соединение = Новый HTTPСоединение(СерверАдрес, Порт,,,,, ЗащищенноеСоединение);
// Формируем HTTP-запрос
АдресРесурса = "/v1/update-prices";
Запрос = Новый HTTPЗапрос(АдресРесурса);
// Добавляем обязательные заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ПолучитьТокенАвторизации());
// Сериализуем данные в формат JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеЦен);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Устанавливаем тело запроса
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Попытка
// Отправляем POST-запрос
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЗаписьЖурналаРегистрации("Интеграция.Обмен", СистематичностьИспользования.ИнформационнаяСтатья,,
"Данные цен успешно выгружены на сервер.");
Иначе
ВызватьИсключение "Сервер вернул ошибку с кодом: " + Ответ.КодСостояния;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Интеграция.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Для регулярного выполнения этого кода мы создаем новое РегламентноеЗадание, которое будет запускаться, например, каждые 5 минут, собирать изменившиеся цены и отправлять их на промежуточный сервер, сводя нагрузку на основную базу к минимуму.
---
В процессе интеграции мобильных рабочих мест часто возникает сложная техническая задача: как печатать предчеки или фискальные чеки на принтерах и ККТ непосредственно из мобильного софта?
Существует два проверенных временем решения:
---
Организация VPN-каналов на каждом мобильном устройстве — это постоянная головная боль для технической поддержки: сессии обрываются, ключи устаревают, пользователи путаются в интерфейсах.
Чтобы развернуть надежную систему без VPN, мы рекомендуем использовать концепцию Reverse Proxy (Обратного проксирования):
---
При проектировании систем интеграции важно помнить о правилах лицензирования фирмы «1С». Существует понятие мультиплексирования лицензий.
Если множество мобильных пользователей обращаются к промежуточному серверу, а этот сервер стягивает данные из «1С» под одной технической учетной записью (сеансом), с точки зрения лицензионного соглашения фирмы «1С» каждый фактический пользователь, который вводит или получает данные, должен быть обеспечен клиентской лицензией «1С».
Использование Kotlin-приложения вместо мобильной платформы «1С» позволяет сэкономить на покупке специализированных мобильных лицензий платформы и роялти за публикацию в сторах, однако серверные мощности и сеансы доступа к центральной базе должны быть лицензированы надлежащим образом во избежание юридических рисков.
---
Сопряжение мобильного софта с «1С» через промежуточный REST API сервер — это наиболее надежный, безопасный и масштабируемый стандарт разработки на сегодняшний день. Мы уходим от прямого подключения к базе «1С», защищаем учетную систему от перегрузок и взломов, решаем проблемы администрирования портов и обеспечиваем стабильную и быструю работу мобильных пользователей в любых условиях.