Терминалы самообслуживания (информационные киоски, кассы самообслуживания, КСО) стали неотъемлемой частью современного ритейла, общепита и сферы услуг. Они позволяют разгрузить персонал, исключить человеческий фактор при вводе данных и ускорить процесс обслуживания клиентов. Однако перед ИТ-специалистами и разработчиками неизбежно встает вопрос: как правильно связать терминальное оборудование с учетной системой на базе 1С:Предприятие (например, «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
Преимущества подхода:
Недостатки подхода:
---
При данном подходе на терминале разворачивается специализированное клиентское ПО, оптимизированное под сенсорные экраны и операционные системы (включая легковесные дистрибутивы Linux). Это ПО общается с 1С посредством отправки JSON- или XML-пакетов через опубликованные на веб-сервере (IIS или Apache) HTTP-сервисы.
Выясним, как выглядит процесс взаимодействия на примере создания нового заказа покупателя через терминал:
Рассмотрим пример кода на языке 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С:Предприятие 8»:
---
Если вы решите реализовать первый вариант и запустить стандартный веб-клиент 1С в браузере терминала, вы обязательно столкнетесь с серьезной технической проблемой: безопасностью браузеров.
Современные браузеры (Chrome, Firefox, Edge) из соображений безопасности изолируют веб-страницы от прямого доступа к локальным портам компьютера (USB, COM-порты). Это означает, что веб-клиент 1С не сможет напрямую отправить команду на печать чека в фискальный регистратор (ККТ) или активировать банковский терминал для приема бесконтактного платежа.
Чтобы обойти это ограничение, нам придется применить один из следующих подходов:
---
Чтобы не разрабатывать сложную интеграцию «велосипедов» с нуля, рекомендуется обратить внимание на готовые решения, представленные на рынке автоматизации:
Подводя итог, для небольших проектов с минимальным бюджетом вполне жизнеспособен вариант запуска тонкого клиента 1С в режиме киоска (параметр /KioskMode). Однако для крупных и стабильно работающих сетей терминалов самообслуживания оптимальным выбором будет гибридная схема: специализированное ПО на терминале, работающее в автономном режиме, и интеграция с 1С через HTTP/REST-сервисы для учета продаж.