В этой статье мы подробно разберем ситуацию, когда при попытке программного подключения к ККМ «Штрих-М» из 1С ничего не происходит, хотя стандартная утилита «Тест драйвера ФР» видит устройство и успешно выполняет команды. Проанализируем, почему так происходит и как правильно настроить подключение, если касса подключена к компьютеру по сети (через TCP-сокет или в режиме RNDIS), а не через стандартный COM-порт. Это базовый этап, без которого невозможна дальнейшая настройка торгового оборудования, включая разрешительный режим на кассах и онлайн проверку в «Честном знаке».
Рассмотрим типичную ситуацию. Вы пишете код для печати строки на фискальном регистраторе:
Попытка
Аппарат = Новый COMОбъект("AddIn.Drvfr");
Аппарат.StringForPrinting = "Тестовая строка";
Аппарат.PrintString();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
При выполнении этого кода явных ошибок не возникает, но и на ККМ ничего не печатается. Если в отладчике проверить свойства созданного COM-объекта `Аппарат`, то можно увидеть, что многие из них (например, ResultCodeDescription) возвращают ошибку «COM порт недоступен».
Ключевая причина кроется в способе подключения. По умолчанию драйвер «Штрих-М» при создании объекта COMОбъект("AddIn.Drvfr") пытается установить соединение через локальный COM-порт, параметры которого он берет из своих настроек по умолчанию (часто это COM1). Однако современные ККМ, такие как «Штрих ON-LINE», часто подключаются через USB-кабель в режиме RNDIS. Этот режим эмулирует сетевое подключение, то есть для операционной системы касса выглядит как сетевое устройство со своим IP-адресом (например, 192.168.137.111).
Утилита «Тест драйвера ФР» работает корректно, так как в её настройках вы заранее указываете правильный тип соединения (TCP-сокет), а также вводите IP-адрес и порт. В коде 1С эти параметры не были заданы, поэтому драйвер даже не пытается искать устройство в сети. Наша задача — явно указать в коде все необходимые сетевые параметры перед установкой соединения.
Чтобы успешно подключиться к кассе по сети, необходимо перед вызовом метода Connect() задать свойства COM-объекта. Разберем процесс по шагам.
Создание COM-объекта
Этот шаг остается стандартным — мы создаем экземпляр объекта драйвера.
Аппарат = Новый COMОбъект("AddIn.Drvfr");
Установка параметров соединения
Это самый важный этап. Нужно сообщить драйверу, что мы используем не COM-порт, а TCP-подключение.
ConnectionType — тип соединения. Для прямого подключения по TCP-сокету необходимо установить значение 6.
Другие значения:
UseIPAddress — флаг использования IP-адреса. Устанавливаем в Истина.IPAddress — строковое представление IP-адреса вашей ККМ.TCPPort — сетевой порт (стандартный для «Штрих-М» — 7778).Password — пароль доступа. По умолчанию для администратора — "30", для кассира — "1".Пример установки свойств в коде:
// Настраиваем сетевое подключение
Аппарат.ConnectionType = 6; // Подключение через TCP-сокет
Аппарат.UseIPAddress = Истина;
Аппарат.IPAddress = "192.168.137.111"; // Укажите IP-адрес вашей кассы
Аппарат.TCPPort = 7778; // Стандартный порт Штрих-М
// Устанавливаем пароль администратора
Аппарат.Password = "30";
Установка соединения и проверка результата
После задания параметров вызываем метод Connect(). Обязательно проверяйте результат: если метод возвращает 0, соединение успешно. Любое другое значение сигнализирует об ошибке, причины которой мы разбирали в отдельной статье.
РезультатПодключения = Аппарат.Connect();
Если РезультатПодключения <> 0 Тогда
ТекстОшибки = "Ошибка подключения к ККМ! Код: " + РезультатПодключения + ". Описание: " + Аппарат.ResultCodeDescription;
Сообщить(ТекстОшибки);
Возврат;
КонецЕсли;
Выполнение команд
После успешного подключения можно отправлять данные на печать. На этом этапе вы можете реализовать любую логику, вплоть до настройки печати на ККT c нескольких рабочих мест, если архитектура сети это позволяет.
Аппарат.StringForPrinting = "Подключение успешно! Печатаем строку.";
Аппарат.PrintString();
Завершение работы
После завершения операций, например, после печати чека или программного снятия Z-отчета, обязательно закройте соединение методом Disconnect(), чтобы освободить ресурсы для других приложений. Кстати, если у вас периодически возникают проблемы с чеками при закрытии месяца, убедитесь, что соединения с кассой корректно завершаются во всех фоновых заданиях.
Аппарат.Disconnect();
Соберем все этапы в готовый фрагмент кода. Рекомендуется использовать конструкцию Попытка-Исключение для обработки возможных ошибок COM-соединения.
Процедура ПечатьНаККМПоСети(СтрокаДляПечати)
Если Не ЗначениеЗаполнено(СтрокаДляПечати) Тогда
Возврат;
КонецЕсли;
Аппарат = Неопределено;
Попытка
// 1. Создание объекта
Аппарат = Новый COMОбъект("AddIn.Drvfr");
// 2. Настройка параметров
Аппарат.ConnectionType = 6;
Аппарат.IPAddress = "192.168.137.111";
Аппарат.TCPPort = 7778;
Аппарат.Password = "30";
// 3. Подключение
Если Аппарат.Connect() <> 0 Тогда
Сообщить("Не удалось подключиться к ККМ: " + Аппарат.ResultCodeDescription);
Возврат;
КонецЕсли;
// 4. Печать
Аппарат.StringForPrinting = СтрокаДляПечати;
Аппарат.PrintString();
Сообщить("Команда успешно отправлена на ККМ.");
Исключение
Сообщить("Произошла ошибка при работе с ККМ: " + ОписаниеОшибки());
КонецПопытки;
// 5. Завершение сеанса
Если Аппарат <> Неопределено Тогда
Аппарат.Disconnect();
КонецЕсли;
КонецПроцедуры
Аппарат.TimeOut = 10000; (10 секунд). Это особенно актуально, если вы экспериментируете с нестандартными решениями, например, реализуете печать на мобильных принтерах по bluetooth и сети.Таким образом, для стабильной работы 1С с ККМ по сети достаточно правильно определить тип физического подключения и явно инициализировать сетевые параметры драйвера в программном коде перед вызовом команды соединения.