Проблема легализации старых систем на базе 1С 7.7 под современные требования законодательства (54-ФЗ) стоит перед многими разработчиками. Использование KKMServer является одним из самых эффективных способов, так как этот программный продукт выступает универсальным мостом между учетной системой и кассовым оборудованием. В этой статье мы подробно разберем, как «подружить» 1С 7.7 с KKMServer, какие инструменты для этого потребуются и с какими техническими сложностями придется столкнуться.
Основная сложность «семерки» заключается в отсутствии прямой поддержки современных драйверов торгового оборудования и протоколов обмена данными. Проанализируем преимущества использования промежуточного сервера:
Для взаимодействия с KKMServer нам необходимо отправлять HTTP-запросы в формате POST. Рассмотрим доступные инструменты. Хотя стандартная компонента v7plus.dll поддерживает работу с HTTP, на практике она часто оказывается нестабильной при работе с современными протоколами защиты и кодировками.
Рекомендуем использовать системный объект Windows WinHttp.WinHttpRequest.5.1. Он работает через COM-интерфейс и обеспечивает высокую надежность соединения. Разберем пример инициализации и отправки запроса:
// Создаем объект для работы с HTTP
Попытка
HTTPЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Исключение
Сообщить("Не удалось создать объект WinHttp! Проверьте наличие библиотеки в системе.");
Возврат;
КонецПопытки;
// Настраиваем параметры запроса (обычно порт 5893)
URL = "http://localhost:5893/Execute";
HTTPЗапрос.Open("POST", URL, 0); // 0 - синхронный режим
HTTPЗапрос.SetRequestHeader("Content-Type", "application/json; charset=utf-8");
KKMServer обменивается данными исключительно в формате JSON. Поскольку в 1С 7.7 нет встроенных функций для работы с этим форматом, нам придется решать эту задачу обходными путями. Проанализируем два основных подхода:
1. Ручная сборка строки JSON. Если структура чека простая и не содержит вложенных массивов с десятками позиций, можно использовать обычную склейку строк. Однако важно помнить о необходимости экранирования кавычек и спецсимволов в наименованиях товаров.
2. Использование MSScriptControl. Это более профессиональный метод. Мы можем подключить MSScriptControl.ScriptControl и использовать возможности JavaScript для формирования JSON-объектов. Рассмотрим на примере:
// Инициализация скрипта для работы с JSON
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "JScript";
Скрипт.AddCode("function str(obj) { return JSON.stringify(obj); }");
Скрипт.AddCode("function parse(str) { return JSON.parse(str); }");
// Пример формирования простого JSON-запроса на печать чека
// (упрощенная структура для понимания принципа)
ТекстЗапроса = "{""Command"":""RegisterCheck"", ""NumDevice"":0, ""InnKkm"":""1234567890""}";
Разберем процесс формирования чека подробнее. Процедура должна включать в себя подготовку данных о товарах, отправку запроса и обязательный анализ ответа сервера.
Send объекта WinHttp.Error.Посмотрим на пример кода обработки ответа:
// Отправляем данные
Попытка
HTTPЗапрос.Send(ТекстJSON);
ОтветСервера = HTTPЗапрос.ResponseText;
Исключение
Сообщить("Ошибка связи с KKMServer: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Анализируем ответ через ScriptControl
Результат = Скрипт.Run("parse", ОтветСервера);
Если Результат.Error <> "" Тогда
Сообщить("Ошибка ККМ: " + Результат.Error);
Иначе
Сообщить("Чек успешно напечатан, номер чека: " + Результат.CheckNumber);
КонецЕсли;
Если по каким-то причинам KKMServer вам не подходит, существуют альтернативные решения, которые также можно интегрировать с 1С 7.7 через HTTP или внешние компоненты:
При внедрении данного решения обязательно обратите внимание на следующие моменты:
Кодировки: 1С 7.7 работает в кодировке Windows-1251. KKMServer ожидает UTF-8. При передаче данных через WinHttpRequest убедитесь, что преобразование происходит корректно, иначе вместо названий товаров в чеке будут «кракозябры».
Таймауты: Печать фискального чека — операция не мгновенная. Установите таймаут ожидания ответа в WinHttp не менее 30 секунд, чтобы избежать разрыва соединения до завершения печати.
Лицензирование: Помните, что KKMServer — платный продукт. Лицензия обычно привязывается к заводскому номеру ККТ. При замене кассы (например, поломке) потребуется перерегистрация лицензии.
Таким образом, использование связки 1С 7.7 + WinHttp + KKMServer позволяет продлить жизнь старым конфигурациям, обеспечивая полную совместимость с требованиями законодательства при минимальных затратах на переработку кода.