Как интегрировать 1С 7.7 с KKMServer для работы с онлайн-кассами

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Проблема легализации старых систем на базе 1С 7.7 под современные требования законодательства (54-ФЗ) стоит перед многими разработчиками. Использование KKMServer является одним из самых эффективных способов, так как этот программный продукт выступает универсальным мостом между учетной системой и кассовым оборудованием. В этой статье мы подробно разберем, как «подружить» 1С 7.7 с KKMServer, какие инструменты для этого потребуются и с какими техническими сложностями придется столкнуться.

Почему KKMServer — оптимальный выбор для 1С 7.7

Основная сложность «семерки» заключается в отсутствии прямой поддержки современных драйверов торгового оборудования и протоколов обмена данными. Проанализируем преимущества использования промежуточного сервера:

  1. Абстракция от модели ККТ: Вам не нужно писать код под конкретный «Атол» или «Штрих-М». Вы отправляете стандартную команду на сервер, а он сам транслирует ее в низкоуровневые команды драйвера.
  2. Сетевой доступ: К одной кассе могут обращаться сразу несколько рабочих станций с 1С 7.7. KKMServer самостоятельно выстраивает очередь печати.
  3. Поддержка маркировки: Сервер берет на себя формирование специфических тегов (например, тег 1162 для системы «Честный ЗНАК»), что крайне сложно реализовать напрямую в 1С 7.7.

Организация HTTP-взаимодействия в 1С 7.7

Для взаимодействия с 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");

Проблема формирования и парсинга JSON

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""}";

Реализация печати чека по шагам

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

  1. Подготовка данных: Выгружаем данные из табличной части документа 1С в массив объектов JSON.
  2. Отправка команды: Вызываем метод Send объекта WinHttp.
  3. Обработка результата: Получаем ответ в виде строки JSON и проверяем поле 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 позволяет продлить жизнь старым конфигурациям, обеспечивая полную совместимость с требованиями законодательства при минимальных затратах на переработку кода.

← На главную