При автоматизации розничной торговли и подключении нескольких весов с печатью этикеток (например, линейки «Штрих-Принт») нередко возникает ситуация, когда при попытке отправить данные на вторые весы выгрузка всё равно уходит на первое устройство либо завершается ошибкой. При этом в настройках торгового оборудования 1С для каждого экземпляра заданы уникальные IP-адреса и сетевые порты, а по отдельности каждое устройство функционирует штатно.
Разберем подробнее, почему возникает такое поведение, где кроются аппаратные дубли настроек и как устроен механизм логических устройств в драйвере торгового оборудования.
Самая распространенная аппаратная причина — копирование системных настроек с одних весов на другие с помощью сервисной утилиты производителя без изменения идентификатора устройства.
Сетевая плата и прошивка весов «Штрих-Принт» используют внутренний номер устройства (Broadcast/Target ID) для подтверждения сетевых пакетов. Если при переносе параметров поменяли IP-адрес, но оставили прежним внутренний номер в энергонезависимой памяти, весы могут игнорировать адресованные им пакеты либо драйвер будет ошибочно адресовать команды первому найденному в сети устройству с таким же номером.
Проанализируем шаги по исправлению этой ситуации:
1, весы №2 — номер 2).В типовых решениях 1С (особенно на обычных формах, таких как «Управление торговлей» ред. 10.3 / 2.2) объект внешней компоненты драйвера создается один раз при инициализации торгового оборудования. Драйвер весов «Штрих-М» хранит список подключенных весов в виде таблицы логических устройств (ЛУ) в системном реестре Windows.
Рассмотрим, как 1С выполняет переключение между весами в коде обработки обслуживания:
Функция НачатьВыгрузку()
// Установка активного логического устройства перед передачей данных
Объект.Драйвер.НомерЛУ = Объект.ИДУстройства;
Объект.Драйвер.УстановитьАктивноеЛУ();
КонецФункции
Если в коде обработки логическое устройство переключается некорректно или его параметры в драйвере затираются, возникают следующие сбои:
AddLD / ДобавитьЛУ) вместо выбора существующего, таблица драйвера быстро заполняется (до лимита в 30–99 записей). После этого драйвер перестает регистрировать новые весы и перенаправляет все вызовы на первое доступное ЛУ.IPAddress, TCPPort, AdminPassword) должны быть явно переданы в свойства драйвера непосредственно перед установкой связи с конкретными весами.HKCU\Software\SHTRIH-M из-за ограничений прав пользователя, сбрасывая активный профиль на значение по умолчанию.Разберем по шагам, как гарантировать корректную передачу данных на группу весов:
Объект.Драйвер.НомерЛУ = ИдентификаторВесов;
Объект.Драйвер.УстановитьАктивноеЛУ();
Объект.Драйвер.IPAddress = ТекущийIPАдрес;
Объект.Драйвер.TCPPort = ТекущийПорт;
Объект.Драйвер.AdminPassword = ПарольАдминистратора;
Объект.Драйвер.ConnectionTimeout = 3000;
Если Объект.Драйвер.Connect() <> 0 Тогда
ВызватьИсключение "Не удалось установить связь с весами: " + Объект.Драйвер.ErrorDescription;
КонецЕсли;
Disconnect(), чтобы освободить сетевой сокет на плате весов перед переходом к следующей итерации цикла.ConnectionTimeout не менее 3000–5000 мс.