Подключение современного торгового оборудования к устаревшим платформам, таким как 1С:Предприятие 7.7, всегда сопряжено с поиском компромиссов между новыми требованиями законодательства (54-ФЗ, маркировка) и ограниченными возможностями старого программного кода. Фискальный регистратор Меркурий 119 (производства компании Инкотекс) — это современный аппарат, ориентированный на работу с драйверами нового поколения, однако его вполне реально интегрировать в среду 7.7. Рассмотрим подробно, как это реализовать.
Первое, что нам необходимо уяснить: платформа 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) и модифицируют её под протокол Меркурия. Рассмотрим основные этапы такой адаптации:
MercuryCom.OfdFPDriver.Amount (сумма), драйвер Меркурия может требовать Cash.Пример корректировки передачи данных в обработке:
// Пример формирования структуры для регистрации позиции
ТекстXML = "<InputParameters>
| <Parameters
| Name=""" + СокрЛП(ТоварНаименование) + """
| Quantity=""" + Строка(Колво) + """
| Price=""" + Строка(ЦенаСоСкидкой) + """
| Tax=""" + СтавкаНДС + """ />
|</InputParameters>";
При подключении Меркурий 119 к компьютеру через USB-интерфейс, система создает два виртуальных COM-порта. Это критически важный момент для настройки. Проанализируем назначение этих портов:
Совет: Если 1С выдает ошибку «Порт занят» или «Устройство не отвечает», попробуйте поменять номер порта в настройках на соседний.
Рассмотрим по шагам, какие методы драйвера необходимо вызывать для пробития чека. Если вы решили не использовать типовые обработки, а писать прямые вызовы COM-объекта, придерживайтесь следующей последовательности:
OpenCheck(ТипЧека) — открытие документа. Параметр 0 обычно соответствует приходу, 1 — возврату.Registration(Наименование, Количество, Цена, СтавкаНДС, Сумма) — регистрация каждой позиции в чеке. Повторяется в цикле для каждой строки документа 1С.CloseCheck(СуммаНал, СуммаБезнал) — закрытие чека и фискализация. Здесь важно следить, чтобы сумма типов оплат была строго равна или больше суммы всех зарегистрированных позиций, иначе аппарат вернет ошибку.Пример реализации закрытия чека:
// Закрытие чека с оплатой картой
Результат = ККТ.CloseCheck(0, СуммаЧека, 0, 0); // Параметры: Нал, Безнал, Тара, Кредит
Если Результат <> 0 Тогда
Сообщить("Ошибка при закрытии чека: " + ККТ.LastErrorDescription);
КонецЕсли;
Для работы с товарами, подлежащими обязательной маркировке («Честный ЗНАК»), необходимо передавать специальный код маркировки. В платформе 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-данных с актуальной документацией производителя, так как именно в именах тегов кроется большинство ошибок интеграции.