Как правильно организовать интеграцию 1С с терминалами самообслуживания?

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

Терминалы самообслуживания (информационные киоски, кассы самообслуживания, КСО) стали неотъемлемой частью современного ритейла, общепита и сферы услуг. Они позволяют разгрузить персонал, исключить человеческий фактор при вводе данных и ускорить процесс обслуживания клиентов. Однако перед ИТ-специалистами и разработчиками неизбежно встает вопрос: как правильно связать терминальное оборудование с учетной системой на базе 1С:Предприятие (например, «1С:Управление торговлей» или «1С:Розница»)?

В этой статье мы подробно разберем существующие архитектурные подходы, проанализируем технические нюансы работы с периферийным оборудованием, развеем популярные мифы о лицензировании и рассмотрим примеры интеграции.

---

Архитектурные подходы к проектированию системы

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

  1. Полностью на стороне 1С (Native Frontend): Интерфейс для терминала создается непосредственно в среде 1С на управляемых формах. Терминал запускается в режиме веб-клиента или тонкого клиента, который обращается к серверу 1С напрямую.
  2. Гибридная схема (Внешний Frontend + 1С как бэк-офис): На самом терминале работает специализированное легкое приложение (написанное на C#, C++, JS/HTML или специализированный софт вроде Smartix, Artix), а 1С выступает в роли СУБД и бэк-офиса, отдавая и принимая данные по API (через HTTP- или SOAP-сервисы).

Давайте детально проанализируем плюсы и минусы каждого подхода, чтобы сделать осознанный выбор.

---

Вариант 1. Запуск 1С непосредственно на терминале самообслуживания

Этот вариант кажется наиболее простым в реализации для 1С-разработчиков, так как вся разработка ведется в одной привычной конфигурации. Для реализации красивого и отзывчивого интерфейса под сенсорный экран в управляемой форме 1С часто используют элемент управления ПолеHTMLДокумента, куда загружается сверстанная под требования UI-дизайна страница со стилями CSS и скриптами JS.

Для предотвращения несанкционированного доступа пользователей к операционной системе терминала, платформу «1С:Предприятие» запускают со специальным ключом командной строки /KioskMode (режим киоска). Этот параметр скрывает все системные меню, панели задач и не позволяет пользователю свернуть приложение или получить доступ к рабочему столу.

Пример строки запуска тонкого клиента в режиме киоска:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\Base1C" /N "TerminalUser" /P "Password" /KioskMode

Преимущества подхода:

Недостатки подхода:

---

Вариант 2. Гибридный подход с использованием веб-сервисов (HTTP-REST)

При данном подходе на терминале разворачивается специализированное клиентское ПО, оптимизированное под сенсорные экраны и операционные системы (включая легковесные дистрибутивы Linux). Это ПО общается с 1С посредством отправки JSON- или XML-пакетов через опубликованные на веб-сервере (IIS или Apache) HTTP-сервисы.

Выясним, как выглядит процесс взаимодействия на примере создания нового заказа покупателя через терминал:

  1. Терминал запрашивает у 1С актуальный список услуг и цен (меню/номенклатуру) при старте смены или периодически кэширует его на локальном накопителе.
  2. Клиент выбирает товары на экране и переходит к оплате.
  3. После успешного прохождения транзакции по банковскому терминалу, управляющее ПО терминала отправляет в 1С HTTP-запрос (POST) с деталями заказа и параметрами оплаты.
  4. 1С принимает запрос, в фоновом режиме создает документ оплаты/продажи и возвращает терминалу статус успешного проведения.

Рассмотрим пример кода на языке 1С для обработки входящего HTTP-запроса от терминала самообслуживания:


Функция ДобавитьЗаказИзТерминала(Запрос) Export
    
    // Получаем тело запроса в формате JSON
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
    ДанныеЗаказа = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Начинаем транзакцию для обеспечения целостности данных
    НачатьТранзакцию();
    
    Попытка
        // Создаем новый документ "Заказ клиента" или напрямую "Чек ККМ"
        НовыйЗаказ = Документы.ЗаказКлиента.СоздатьДокумент();
        НовыйЗаказ.Дата = ТекущаяДата();
        НовыйЗаказ.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", ДанныеЗаказа.ИННОрганизации);
        НовыйЗаказ.Склад = Справочники.Склады.НайтиПоНаименованию("Склад Терминала 1");
        
        // Заполняем табличную часть товары
        Для Каждого СтрокаТовара Из ДанныеЗаказа.Товары Цикл
            НоваяСтрока = НовыйЗаказ.Товары.Добавить();
            НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Код", СтрокаТовара.КодТовара);
            НоваяСтрока.Количество = СтрокаТовара.Количество;
            НоваяСтрока.Цена = СтрокаТовара.Цена;
            НоваяСтрока.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена;
        КонецЦикла;
        
        // Записываем и проводим документ
        НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
        
        ЗафиксироватьТранзакцию();
        
        // Формируем успешный ответ для терминала
        Ответ = Новый HTTPСервисОтвет(200);
        Ответ.Заголовки.Вставить("Content-Type", "application/json");
        Ответ.УстановитьТелоИзСтроки("{""status"":""success"",""document_number"":""" + НовыйЗаказ.Номер + """}");
        Возврат Ответ;
        
    Исключение
        ОтменитьТранзакцию();
        
        // Обработка ошибки
        ЗаписьЖурналаРегистрации("ИнтеграцияТерминал", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        
        Ответ = Новый HTTPСервисОтвет(500);
        Ответ.Заголовки.Вставить("Content-Type", "application/json");
        Ответ.УстановитьТелоИзСтроки("{""status"":""error"",""message"":""Не удалось записать документ на сервере 1С""}");
        Возврат Ответ;
    КонецПопытки;

КонецФункции

Преимущества гибридного подхода:

---

Лицензирование 1С при работе с терминалами самообслуживания

Вопрос лицензирования часто вызывает споры на форумах. Существует ошибочное мнение, что согласно лицензионному соглашению 1С необходимо приобретать клиентскую лицензию на каждого подходящего к терминалу покупателя. Это миф.

Давайте разберем реальные правила лицензирования программных продуктов «1С:Предприятие 8»:

---

Важный нюанс: Подключение торгового оборудования через Web-клиент

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

Современные браузеры (Chrome, Firefox, Edge) из соображений безопасности изолируют веб-страницы от прямого доступа к локальным портам компьютера (USB, COM-порты). Это означает, что веб-клиент 1С не сможет напрямую отправить команду на печать чека в фискальный регистратор (ККТ) или активировать банковский терминал для приема бесконтактного платежа.

Чтобы обойти это ограничение, нам придется применить один из следующих подходов:

  1. Использовать тонкий клиент 1С вместо браузера (веб-клиента). Тонкий клиент представляет собой полноценное Windows/Linux приложение и имеет беспрепятственный доступ к локальным драйверам торгового оборудования БПО.
  2. Использовать специализированный локальный веб-сервер оборудования (например, локальную службу, транслирующую запросы из браузера по протоколу WebSocket в COM/USB-порты устройств).

---

Готовые коробочные решения

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

Подводя итог, для небольших проектов с минимальным бюджетом вполне жизнеспособен вариант запуска тонкого клиента 1С в режиме киоска (параметр /KioskMode). Однако для крупных и стабильно работающих сетей терминалов самообслуживания оптимальным выбором будет гибридная схема: специализированное ПО на терминале, работающее в автономном режиме, и интеграция с 1С через HTTP/REST-сервисы для учета продаж.

← На главную