При интеграции конфигураций 1С (таких как 1С:Управление торговлей 10.3 или 1С:Розница) с весами с печатью этикеток Штрих-Принт по интерфейсу Ethernet нередко возникает специфический сбой: тест подключения проходит успешно, небольшие порции товаров (до 5–6 штук) записываются без сбоев, но при выгрузке большего объема данных процесс прерывается сообщением «Невозможно осуществить выгрузку по следующим причинам: Нет связи». Разберем основные причины такого поведения оборудования и пошагово устраним неполадку.
Выясним причину, почему весы обрывают сетевое соединение именно после отправки первых нескольких позиций номенклатуры:
УстановитьСвязь() и разрыва соединения вызываются на каждой итерации цикла перебора строк. Встроенный Ethernet-контроллер весов не успевает освобождать сетевые порты и очищать буфер, в результате чего стек переполняется на 6–7 пакете и связь сбрасывается.Разберем самый быстрый способ решения, не требующий изменения программного кода. Проблема с прерыванием выгрузки на шестом товаре часто устраняется установкой актуальной версии драйвера весов Штрих-Принт.
Если обновление драйвера не помогло или используется нестандартная конфигурация, проанализируем и исправим программный код внешней обработки обслуживания (EPF). Основная задача — вынести открытие и закрытие сессии за пределы цикла отправки данных и явно передавать параметры подключения.
Рассмотрим правильную структуру организации выгрузки в коде обработки:
// Подготовка параметров подключения к весам
ОбъектДрайвера.IPAddress = НастройкиВесов.IPАдрес;
ОбъектДрайвера.TCPPort = НастройкиВесов.Порт; // По умолчанию 1111 или 5001
ОбъектДрайвера.Password = 30; // Системный пароль администратора весов
ОбъектДрайвера.Timeout = 2000; // Увеличенный таймаут ожидания ответа (в мс)
// Устанавливаем связь ОДИН раз перед началом выгрузки массива данных
Если ОбъектДрайвера.Connect() <> 0 Тогда
Сообщить("Не удалось установить связь с весами: " + ОбъектДрайвера.ResultCodeDescription);
Возврат;
КонецЕсли;
Попытка
Для Каждого СтрТовар Из ТаблицаВыгрузки Цикл
// Нормализуем наименование и данные PLU
ОбъектДрайвера.PLUNumber = СтрТовар.КодPLU;
ОбъектДрайвера.Price = СтрТовар.Цена;
ОбъектДрайвера.ItemCode = СтрТовар.КодТовара;
// Ограничиваем длину строки до допустимого лимита протокола
ОбъектДрайвера.Name = Лев(СокрЛП(СтрТовар.Наименование), 28);
// Запись одной позиции PLU в память весов
Если ОбъектДрайвера.SetPLU() <> 0 Тогда
Сообщить("Ошибка записи товара " + СтрТовар.Наименование + ": " + ОбъектДрайвера.ResultCodeDescription);
Прервать;
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Критический сбой при выгрузке: " + ОписаниеОшибки());
КонецПопытки;
// Разрываем соединение строго после завершения всего цикла выгрузки
ОбъектДрайвера.Disconnect();
Проанализируем передаваемые в весы данные, чтобы исключить программные отказы из-за некорректных значений:
\r\n, табуляции или неразрывные пробелы, нарушающие целостность команд протокола обмена.