При автоматизации государственного сектора часто возникает необходимость использования терминалов сбора данных (ТСД) для проведения инвентаризации основных средств. Одной из популярных моделей является Opticon Smart под управлением ПО MobileLogistics (ПО АТОЛ). Однако при попытке интеграции этого оборудования с конфигурацией «1С:Бухгалтерия государственного учреждения» (БГУ) технические специалисты сталкиваются с двумя серьезными проблемами:
System Error. Code: 2. Не удается найти указанный файл (Порт недоступен) при физическом отключении ТСД от USB-кабеля в процессе работы.В этой статье мы подробно рассмотрим и разберем по шагам, как решить обе проблемы, адаптировать обработку обмена под специфику учета БГУ и заставить драйвер стабильно работать при отключении провода без перезапуска всей системы 1С.
---
Проанализируем ситуацию: в отличие от коммерческих предприятий, где объектом учета и инвентаризации является номенклатура товаров со штрихкодами, в госучреждениях учет ведется в разрезе Основных средств (ОС) и Инвентарных номеров. В стандартных конфигурациях БГУ 1.0 и БГУ 2.0 заложен штатный механизм работы с ТСД, использующими драйвер «АТОЛ: Терминалы сбора данных MobileLogistics».
Если вам необходимо адаптировать имеющуюся обработку обслуживания (например, ATOLTSD_v2.epf) от УТ или Розницы под БГУ самостоятельно, нужно изменить логику сопоставления данных. Разберем этот процесс по шагам.
Шаг 1. Переориентация метаданных со справочника «Номенклатура» на «Основные средства»
В торговых конфигурациях ТСД ожидает получить структуру: Штрихкод — Наименование — Цена — Количество — Характеристика. В БГУ нам требуется передавать и принимать другие реквизиты: Штрихкод — Наименование ОС — Инвентарный номер — Количество (обычно 1) — Субъект учета (МОЛ).
Для модификации структуры выгрузки в модуле внешней обработки необходимо найти процедуру экспорта данных (обычно она называется ВыгрузитьТаблицуСправочника() или аналогично) и переписать заполнение полей. Посмотрим на концептуальный пример кода для подготовки таблицы выгрузки основных средств:
// Создаем таблицу для выгрузки в ТСД по структуре MobileLogistics
ТаблицаВыгрузки = Новый ТаблицаЗначений;
ТаблицаВыгрузки.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(20)));
ТаблицаВыгрузки.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(100)));
ТаблицаВыгрузки.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(50)));
ТаблицаВыгрузки.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
// Заполняем таблицу данными из документа Инвентаризация ОС
Для Каждого СтрокаОС Из ОбъектИнвентаризации.ОсновныеСредства Цикл
НоваяСтрока = ТаблицаВыгрузки.Добавить();
НоваяСтрока.Штрихкод = ПолучитьШтрихкодОС(СтрокаОС.ОсновноеСредство);
НоваяСтрока.Наименование = СтрокаОС.ОсновноеСредство.Наименование;
НоваяСтрока.ИнвентарныйНомер = СтрокаОС.ОсновноеСредство.Код; // или реквизит ИнвентарныйНомер
НоваяСтрока.Количество = 1;
КонецЦикла;
Шаг 2. Использование встроенной Библиотеки Подключаемого Оборудования (БСП / БПО)
Выясним причину, почему не всегда требуется писать код с нуля. В современных релизах «1С:БГУ 2.0» внедрена подсистема БПО. Мы можем подключить Opticon Smart как стандартное оборудование. Для этого перейдем в меню «Администрирование» — «Подключаемое оборудование», добавим новое устройство с типом «Терминалы сбора данных» и выберем сертифицированный драйвер от АТОЛ. В этом случае БГУ будет использовать штатные механизмы обмена, транслируя данные из документов инвентаризации напрямую в драйвер.
Шаг 3. Использование готовых сторонних модулей
Если адаптация кода вызывает сложности из-за нехватки опыта программирования, рекомендуется обратить внимание на готовые решения, разработанные специально для БГУ (например, программные продукты Клеверенс или Сканпорт). Они предлагают готовые конфигурации для ТСД, умеющие "из коробки" работать со справочником основных средств, амортизацией и инвентарными номерами госучреждений, поддерживая обмен как через USB-кабель, так и по сети Wi-Fi.
---
Разберем природу возникновения популярной ошибки: Терминал сбора данных: ошибка при подключении. Порт недоступен (System Error. Code: 2. Не удается найти указанный файл).
При использовании старых ТСД (например, Opticon 1004) устройство устанавливается в подставку (крэдл), которая постоянно подключена к ПК. С точки зрения операционной системы Windows, виртуальный COM-порт, созданный драйвером USB-to-Serial, активен круглосуточно. В случае с Opticon Smart подключение идет напрямую через интерфейсный кабель microUSB-USB.
Когда выдергивается кабель из разъема, Windows мгновенно уничтожает виртуальный COM-порт. Драйвер АТОЛ, инициализированный внутри 1С при запуске, теряет дескриптор связи. При повторном подключении кабеля Windows создает COM-порт заново, но сессия 1С продолжает обращаться по "старому" адресу, который завис в памяти драйвера, выдавая ошибку отсутствия файла COM-порта в операционной системе.
Рассмотрим подробнее способы исправления этой ситуации без необходимости перезапуска программы 1С.
Это наиболее простой и эффективный метод, не требующий изменения программного кода конфигурации:
В чем суть настройки? Теперь 1С не будет держать COM-порт постоянно открытым в течение всего сеанса работы. Порт будет инициализироваться программой ровно на долю секунды — только в момент нажатия кнопок «Выгрузить данные» или «Загрузить данные». Все остальное время ТСД можно безопасно отключать от кабеля, перемещаться по складу/учреждению и подключать обратно. Windows будет корректно пересоздавать порт, а 1С обратится к нему только в момент непосредственного обмена.
Если вы разрабатываете собственную обработку обмена, мы можем управлять активностью порта принудительно. Для этого используется свойство драйвера DeviceEnabled (или Включено). Перед началом передачи данных необходимо программно включить устройство, а по окончании — обязательно выключить его, чтобы освободить порт для операционной системы.
Посмотрим на пример реализации такого механизма:
// Функция безопасного обмена данными с ТСД
Процедура ВыполнитьОбменДанными(ОбъектДрайвера, ТаблицаДанных)
// Шаг 1. Пытаемся занять порт и активировать устройство
Попытка
ОбъектДрайвера.DeviceEnabled = 1; // Включаем устройство в драйвере
Исключение
Предупреждение("Не удалось открыть COM-порт! Проверьте подключение кабеля ТСД.");
Возврат;
КонецПопытки;
// Шаг 2. Производим запись или чтение данных
ЗаписатьДанныеВТерминал(ОбъектДрайвера, ТаблицаДанных);
// Шаг 3. Обязательно освобождаем COM-порт для ОС Windows
Попытка
ОбъектДрайвера.DeviceEnabled = 0; // Отключаем устройство
Исключение
ЗаписьЖурналаРегистрации("ТСД. Ошибка отключения порта", УровеньЖурналаРегистрации.Предупреждение);
КонецПопытки;
КонецПроцедуры
Если ошибка System Error. Code: 2 уже произошла, а перезапускать тяжелую базу 1С:БГУ крайне нежелательно (например, открыто много несохраненных документов), восстановить связь можно вручную:
Проанализируем специфику работы, если база 1С развернута на сервере, а пользователи подключаются через удаленный рабочий стол (RDP). При физическом выдергивании кабеля на локальном ПК механизм проброса портов (Port Mapping) протокола RDP полностью ломается и не восстанавливается автоматически.
Для решения этой проблемы в терминальном режиме рекомендуется соблюдать следующие правила:
COM5), запретив Windows назначать его динамически.Применяя указанные методики настройки драйверов и адаптации кода под таблицы основных средств БГУ, вы сможете добиться стабильного, бесперебойного процесса инвентаризации с использованием ТСД Opticon Smart.