Почему зависает 1С при обмене с ТСД Opticon на этапе вызова метода НачалоОтчета и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При подключении терминалов сбора данных (ТСД) марки Opticon (модели OPL-9728, PHL-1300, OPH-1004 и др.) через драйвер «Штрих-М» на операционных системах Windows 7 специалисты нередко сталкиваются с неприятным поведением: тест драйвера отрабатывает корректно, однако при попытке загрузки или выгрузки данных непосредственно из 1С система намертво зависает. Терминал переходит в статус «Готов к запросу», после чего обмен останавливается, а вывести устройство из этого состояния удается только клавишей сброса (Clr).

Разберем детально, в чем кроется техническая причина такого сбоя, на каких участках программного кода 1С он проявляется и какие шаги необходимо предпринять для восстановления стабильной работы оборудования.

Где и почему происходит зависание в кодовой базе 1С?

Проанализируем типовой стек вызовов Библиотеки подключаемого оборудования (БПО). Сбой происходит в клиентском модуле при обращении к внешнему COM-объекту драйвера ТСД. Ошибка локализуется в процедуре начала обмена данными:


// Модуль: ОбщийМодуль.ПодключаемоеОборудованиеШтрихМТерминалыСбораДанныхКлиент
Процедура НачатьЗагрузку(ОбъектДрайвера, Параметры, ПараметрыПодключения, Количество, ВыходныеПараметры) Экспорт

    // Перевод терминала в режим формирования пакета данных
    ОбъектДрайвера.НачалоОтчета; 

    // На этой строке выполнение блокируется: внешняя компонента ожидает ответа от порта
    // и не возвращает управление в платформу 1С:Предприятие
КонецПроцедуры

Вызов метода НачалоОтчета переводит компоненту драйвера в режим синхронного ожидания подтверждающего сигнала от ТСД через виртуальный COM-порт. Если на уровне драйвера включен некорректный механизм межпроцессного или сетевого обмена, либо параметры последовательного порта не согласованы с протоколом прошивки ТСД, драйвер уходит в бесконечный цикл ожидания данных (Deadlock), блокируя основной поток клиента 1С.

Способ 1. Отключение использования библиотеки NetU.dll в параметрах драйвера

Наиболее частая причина зависания метода ОбъектДрайвера.НачалоОтчета в версиях драйвера «Штрих-М: Драйвер ТСД» (например, 3.6.x) — попытка драйвера использовать вспомогательную сетевую динамическую библиотеку NetU.dll для маршрутизации пакетов.

Выполним корректировку параметров драйвера по следующим шагам:

  1. Откроем интерфейс настройки драйвера «Штрих-М» (через меню Сервис → Параметры или через утилиту «Тест драйвера ТСД»).
  2. Перейдем на вкладку Драйвер ТСД (версия 3.6 или аналогичная).
  3. Найдем параметр Использовать обмен данными NetU.dll и снимем с него флаг (чекбокс).
  4. Нажмем кнопку Применить (или ОК) и закроем окно настроек.
  5. Перезапустим сеанс 1С:Предприятия и проверим повторную выгрузку/загрузку данных.

Способ 2. Корректировка параметров виртуального COM-порта в Windows

Если отключение NetU.dll не решило проблему целиком или драйвер продолжает периодически терять связь с устройством, проанализируем настройки COM-порта подставки (кредла) или кабеля ТСД в диспетчере устройств операционной системы.

  1. Номер COM-порта: Убедимся, что виртуальному порту назначен номер из диапазона от COM1 до COM4. Устаревшие 32-битные драйверы некорректно обрабатывают порты с большими номерами (COM10 и выше).
  2. Буферизация FIFO: Откроем свойства порта в «Диспетчере устройств», перейдем на вкладку Параметры порта → Дополнительно. Уменьшим размеры буферов приёма и передачи (FIFO) до минимальных значений либо временно отключим буфер FIFO.
  3. Параметр Latency Timer: Если адаптер построен на микросхеме FTDI, изменим время задержки (Latency Timer) со стандартных 16 мс на 1–2 мс. Это исключит задержку при передаче коротких управляющих байтов инициализации отчета.
  4. Управление потоком (Flow Control): Сверим тип управления потоком в свойствах порта (аппаратное RTS/CTS или отсутствует None). Значение должно строго совпадать с настройками, заданными в прошивке самого терминала.
  5. Синхронизация скорости: Установим одинаковую скорость обмена (Baud Rate) в трех местах: в меню настроек ТСД, в свойствах порта Windows и в окне подключения оборудования в 1С (рекомендуемые стабильные скорости: 19200 или 38400 бод).

Способ 3. Настройка электропитания USB-концентраторов

В операционной системе Windows 7 активны агрессивные схемы энергосбережения, которые могут временно обесточивать кредл ТСД при смене фаз обмена данными:

  1. В панели управления Windows откроем раздел Электропитание → Настройка плана электропитания → Изменить дополнительные параметры питания.
  2. В ветке Параметры USB переведем параметр Параметр временного отключения USB-порта в значение Запрещено.
  3. В «Диспетчере устройств» откроем свойства всех устройств раздела Контроллеры USB (Корневой USB-концентратор), перейдем на вкладку Управление электропитанием и снимем флаг Разрешить отключение этого устройства для экономии энергии.

Способ 4. Корректная регистрация COM-компоненты для 32-разрядной платформы

Платформа «1С:Предприятие» в подавляющем большинстве клиентских рабочих мест запускается как 32-битный процесс. В 64-разрядной среде Windows 7 регистрация библиотек драйвера должна осуществляться через специализированный системный интерпретатор.

Выполним перерегистрацию библиотеки драйвера в командной строке (CMD), запущенной от имени Администратора:


C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\ShtrihM\DrvTSD\DrvTSD.dll"

После выполнения команды должно появиться системное сообщение об успешном завершении вызова DllRegisterServer.

Особенности работы с базовыми версиями конфигураций

В базовых версиях конфигураций (например, «1С:Розница Базовая» или «1С:Управление торговлей Базовая») прямое редактирование модулей конфигуратора заблокировано. В такой ситуации скорректировать программный код вызова ОбъектДрайвера.НачалоОтчета невозможно.

В этом случае рекомендуются следующие архитектурные решения:

  1. Внешняя обработка заполнения табличной части: Создается дополнительная внешняя обработка (подключаемая через подсистему «Дополнительные отчеты и обработки»), которая опрашивает драйвер ТСД напрямую через объект Новый COMОбъект("AddIn.Terminals") с собственными безопасными таймаутами и алгоритмами разбора данных.
  2. Текстовый файловый обмен: Выгрузка собранных штрихкодов и количеств из ТСД в текстовый файл с разделителями (CSV/TXT) при помощи штатной утилиты терминала и последующая загрузка в документы 1С стандартным инструментом загрузки строк из внешнего файла.
← На главную