Как правильно настроить сопряжение мобильного приложения с 1С с помощью HTTP-сервисов?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

Разработка мобильных приложений для работы в связке с экосистемой «1С» — одна из самых частых задач в современной автоматизации бизнеса. Будь то мобильное рабочее место курьера, приложение для сбора заказов торговыми представителями или клиентский сервис, перед разработчиком неизбежно встает вопрос: как правильно связать мобильное приложение (например, на Kotlin или Java) с информационной базой «1С»?

В этой статье мы подробно проанализируем различные подходы к интеграции, выясним, почему классический прямой обмен и выставление «1С» напрямую в интернет — это плохая идея, и разберем наиболее надежную, безопасную и современную архитектуру сопряжения систем с использованием промежуточного сервера (Middleware).

---

Почему традиционные и «простые» методы обмена больше не работают?

Часто у начинающих разработчиков или представителей бизнеса возникает соблазн реализовать обмен «напрямую» самым простым путем. Давайте разберем по шагам, почему классические варианты интеграции таят в себе огромные риски:

  1. Прямая загрузка/выгрузка файлов по таймеру (FTP, Excel, XML). Этот метод кажется простым в реализации, но он абсолютно не подходит для работы в режиме реального времени. Мобильный пользователь хочет видеть актуальные остатки товаров и мгновенно отправлять заказы в работу. Таймеры и файлы порождают рассинхронизацию данных, конфликты версий и задержки в бизнес-процессах.
  2. Прямое обращение к СУБД «1С» (SQL-запросы). Попытки читать или записывать данные напрямую в таблицы MS SQL или PostgreSQL, минуя платформу «1С», категорически запрещены лицензионным соглашением. Более того, структура таблиц «1С» оптимизирована под платформу, и прямая запись транзакций гарантированно приведет к разрушению целостности базы данных.
  3. Публикация HTTP/SOAP-сервисов «1С» напрямую наружу. Казалось бы, штатный механизм HTTPСервисы в «1С» позволяет легко принимать запросы. Однако выставление базы «1С» «лицом» в глобальную сеть создает колоссальные угрозы безопасности. Кроме того, одновременное подключение сотен мобильных устройств создаст лавинообразную нагрузку на сервер «1С», что приведет к транзакционным блокировкам и зависанию работы всей компании.

---

Оптимальная архитектура: Использование промежуточного сервера (Middleware)

Для создания по-настоящему надежной и масштабируемой системы рассмотрим архитектурный паттерн с использованием промежуточного веб-сервиса (бэкенда), который выступает буфером между мобильными устройствами и учетной системой «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 минут, собирать изменившиеся цены и отправлять их на промежуточный сервер, сводя нагрузку на основную базу к минимуму.

---

Решение проблемы удаленной печати предчеков и чеков

В процессе интеграции мобильных рабочих мест часто возникает сложная техническая задача: как печатать предчеки или фискальные чеки на принтерах и ККТ непосредственно из мобильного софта?

Существует два проверенных временем решения:

  1. Использование локального Web-сервера АТОЛ (ДККТ 10). Компания АТОЛ предоставляет в комплекте со своими драйверами встроенный веб-сервер (работающий на технологии Java). Он запускается локально на ПК, к которому подключено печатающее устройство, и слушает порт (по умолчанию 16732). Мобильное приложение на Kotlin отправляет обычные HTTP POST-запросы с JSON-заданием на печать. Веб-сервер АТОЛ самостоятельно парсит JSON, выстраивает очередь и отправляет команды на принтер. Установка сложных драйверов на само мобильное устройство при этом не требуется.
  2. Облачная фискализация. Если курьеры или менеджеры работают на выезде, физически возить с собой кассовые аппараты нерационально. Оптимальный современный подход — интеграция мобильного приложения или промежуточного сервера с сервисами облачных касс (например, АТОЛ Онлайн). Мобильное приложение шлет запрос в облако, касса в дата-центре пробивает фискальный чек, а покупателю отправляется электронная копия по СМС или e-mail в соответствии с 54-ФЗ.

---

Безопасность и организация сети без использования VPN

Организация VPN-каналов на каждом мобильном устройстве — это постоянная головная боль для технической поддержки: сессии обрываются, ключи устаревают, пользователи путаются в интерфейсах.

Чтобы развернуть надежную систему без VPN, мы рекомендуем использовать концепцию Reverse Proxy (Обратного проксирования):

---

Важные юридические нюансы: Лицензирование «1С»

При проектировании систем интеграции важно помнить о правилах лицензирования фирмы «1С». Существует понятие мультиплексирования лицензий.

Если множество мобильных пользователей обращаются к промежуточному серверу, а этот сервер стягивает данные из «1С» под одной технической учетной записью (сеансом), с точки зрения лицензионного соглашения фирмы «1С» каждый фактический пользователь, который вводит или получает данные, должен быть обеспечен клиентской лицензией «1С».

Использование Kotlin-приложения вместо мобильной платформы «1С» позволяет сэкономить на покупке специализированных мобильных лицензий платформы и роялти за публикацию в сторах, однако серверные мощности и сеансы доступа к центральной базе должны быть лицензированы надлежащим образом во избежание юридических рисков.

---

Подведем итоги

Сопряжение мобильного софта с «1С» через промежуточный REST API сервер — это наиболее надежный, безопасный и масштабируемый стандарт разработки на сегодняшний день. Мы уходим от прямого подключения к базе «1С», защищаем учетную систему от перегрузок и взломов, решаем проблемы администрирования портов и обеспечиваем стабильную и быструю работу мобильных пользователей в любых условиях.

← На главную