Как подключить фискальный регистратор Меркурий 119 к 1С 7.7

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

Подключение современного торгового оборудования к устаревшим платформам, таким как 1С:Предприятие 7.7, всегда сопряжено с поиском компромиссов между новыми требованиями законодательства (54-ФЗ, маркировка) и ограниченными возможностями старого программного кода. Фискальный регистратор Меркурий 119 (производства компании Инкотекс) — это современный аппарат, ориентированный на работу с драйверами нового поколения, однако его вполне реально интегрировать в среду 7.7. Рассмотрим подробно, как это реализовать.

Выбор технологической базы: COM-объект против Native API

Первое, что нам необходимо уяснить: платформа 1С 7.7 не поддерживает современную технологию Native API, на которой основано большинство драйверов для 1С 8.3. Для успешного сопряжения нам потребуется использовать COM-интерфейс драйвера. Разработчик ККТ предоставляет библиотеку MercuryCom.dll, которая регистрирует в системе необходимый нам объект.

Проанализируем программный способ инициализации драйвера. В коде 1С 7.7 обращение к устройству будет выглядеть следующим образом:


// Инициализация объекта драйвера Меркурий
Попытка
    ККТ = СоздатьОбъект("MercuryCom.OfdFPDriver");
    Сообщить("Драйвер Меркурий успешно загружен!");
Исключение
    Предупреждение("Не удалось создать объект MercuryCom.OfdFPDriver. Проверьте регистрацию библиотеки в системе.");
    Возврат;
КонецПопытки;

Важно отметить, что использование CreateObject (в синтаксисе 1С 7.7) позволяет напрямую взаимодействовать с методами драйвера, минуя промежуточные слои, которые часто отсутствуют для седьмой версии платформы.

Адаптация существующих обработок обслуживания

Разберем ситуацию, когда написание кода «с нуля» нецелесообразно. На практике программисты часто используют готовую обработку для работы с кассами Атол по стандарту 54-ФЗ (например, frATOL54_comm.ert) и модифицируют её под протокол Меркурия. Рассмотрим основные этапы такой адаптации:

  1. Загрузка драйвера: Вместо объектов Атола в коде прописываем вызов MercuryCom.OfdFPDriver.
  2. Корректировка XML-пакетов: Большинство современных драйверов обмениваются данными с 1С через XML-структуры. Однако теги и параметры могут отличаться. Выясним основные отличия: например, там, где Атол ожидает параметр Amount (сумма), драйвер Меркурия может требовать Cash.
  3. Параметры скидок: Обратим внимание, что драйвер Меркурий часто ожидает передачу цены единицы товара уже с учетом всех скидок и наценок. Это означает, что логику расчета скидок нужно реализовать внутри 1С, а в ККТ передавать уже «чистый» результат.

Пример корректировки передачи данных в обработке:


// Пример формирования структуры для регистрации позиции
ТекстXML = "<InputParameters>
| <Parameters 
|  Name=""" + СокрЛП(ТоварНаименование) + """ 
|  Quantity=""" + Строка(Колво) + """ 
|  Price=""" + Строка(ЦенаСоСкидкой) + """ 
|  Tax=""" + СтавкаНДС + """ />
|</InputParameters>";

Настройка физического подключения и портов

При подключении Меркурий 119 к компьютеру через USB-интерфейс, система создает два виртуальных COM-порта. Это критически важный момент для настройки. Проанализируем назначение этих портов:

  1. Первый порт: Предназначен для обмена командами управления между 1С и фискальным накопителем (печать чеков, X-отчеты, Z-отчеты). Именно его номер мы должны указать в настройках торгового оборудования в 1С.
  2. Второй порт: Служит для работы встроенного модема, который отправляет данные в ОФД. Если занять этот порт в 1С, передача данных в налоговую будет заблокирована.

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

Реализация базовых операций чека

Рассмотрим по шагам, какие методы драйвера необходимо вызывать для пробития чека. Если вы решили не использовать типовые обработки, а писать прямые вызовы COM-объекта, придерживайтесь следующей последовательности:

  1. OpenCheck(ТипЧека) — открытие документа. Параметр 0 обычно соответствует приходу, 1 — возврату.
  2. Registration(Наименование, Количество, Цена, СтавкаНДС, Сумма) — регистрация каждой позиции в чеке. Повторяется в цикле для каждой строки документа 1С.
  3. CloseCheck(СуммаНал, СуммаБезнал) — закрытие чека и фискализация. Здесь важно следить, чтобы сумма типов оплат была строго равна или больше суммы всех зарегистрированных позиций, иначе аппарат вернет ошибку.

Пример реализации закрытия чека:


// Закрытие чека с оплатой картой
Результат = ККТ.CloseCheck(0, СуммаЧека, 0, 0); // Параметры: Нал, Безнал, Тара, Кредит
Если Результат <> 0 Тогда
    Сообщить("Ошибка при закрытии чека: " + ККТ.LastErrorDescription);
КонецЕсли;

Проблема маркировки и тега 1162

Для работы с товарами, подлежащими обязательной маркировке («Честный ЗНАК»), необходимо передавать специальный код маркировки. В платформе 1С 7.7 штатных механизмов для передачи тега 1162 нет. Решим эту задачу через доработку драйвера:

Драйвер Меркурия поддерживает передачу маркировки через специальные методы расширения. Вам необходимо получить строку кода маркировки из документа (DataMatrix), преобразовать её в нужный формат (иногда требуется Base64) и передать в объект ККТ перед вызовом метода Registration. Рассмотрим подробнее: в некоторых версиях драйвера используется метод SetTag(1162, ЗначениеМаркировки).

Дополнительные настройки стабильности

Поскольку 1С 7.7 — система старая, она чувствительна к разрывам связи. Выясним причины частых зависаний кассы при простое. В операционных системах Windows 10/11 по умолчанию включен режим экономии энергии для USB.

Обязательно выполните следующие действия:

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

Использование сервисных утилит

Прежде чем приступать к отладке кода в 1С, проанализируем работоспособность аппарата через утилиту Mercury 119 Service Tool. Это позволит убедиться, что драйвер установлен корректно, ОФД настроен, а аппарат исправен. Если чек пробивается через сервисную утилиту, но не идет из 1С — проблему следует искать исключительно в формировании XML-пакета или правильности передачи параметров в COM-объект.

Подводя итог, можно сказать, что связка Меркурий 119 + 1С 7.7 вполне жизнеспособна. Основной упор следует сделать на использование COM-интерфейса драйвера и тщательную сверку структуры XML-данных с актуальной документацией производителя, так как именно в именах тегов кроется большинство ошибок интеграции.

← На главную