Как исправить ошибку подключения драйвера сканера штрихкода после обновления 1С:Бухгалтерия

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

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

Проанализируем причину возникновения ошибки

Основная причина кроется в архитектурных изменениях Библиотеки подключаемого оборудования (БПО), которая встроена в большинство современных конфигураций 1С. Фирма «1С» планомерно отказывается от устаревшей технологии COM в пользу NativeApi. Рассмотрим, почему это важно:

  1. Кроссплатформенность: Технология COM жестко привязана к операционной системе Windows. Драйверы NativeApi позволяют сканеру работать под управлением Linux и в веб-клиенте.
  2. Разрядность платформы: Если вы перешли на 64-битную версию платформы 1С, старые 32-битные COM-компоненты работать не будут. NativeApi драйверы обычно поставляются в виде архивов, содержащих библиотеки под обе разрядности.
  3. Обновление интерфейсов: В новых версиях БПО изменяются требования к методам, которые должен поддерживать драйвер. Старая COM-компонента «не понимает» запросы новой конфигурации, из-за чего 1С не может определить ее версию, хотя физически файл компоненты присутствует на диске.

Когда система пишет, что компонента установлена, она видит файл в локальном хранилище пользователя. Но когда она пытается инициализировать объект для работы, происходит сбой из-за несоответствия программных интерфейсов.

Шаг 1. Очистка кэша внешних компонент

Прежде чем приступать к настройке, нам необходимо устранить конфликт версий в локальном кэше. Рассмотрим, как это сделать вручную. Рассмотрим ситуацию, когда переустановка через интерфейс 1С не помогает.

Выясним, где хранятся файлы. Внешние компоненты в 1С сохраняются в специальном каталоге профиля пользователя Windows. Нам необходимо закрыть 1С и полностью удалить содержимое папки:

%AppData%\Roaming\1C\1cv8\ExtCompT

После удаления этой папки 1С «забудет» о старых установленных драйверах и позволит выполнить чистую установку новой версии компоненты.

Шаг 2. Переход на NativeApi версию драйвера

Теперь проанализируем настройки в самой программе. Вместо того чтобы пытаться реанимировать старую запись оборудования, создадим новую, использующую современный стандарт.

  1. Перейдем в раздел Администрирование — Подключаемое оборудование.
  2. Снимем флаг активности со старого устройства (или удалим его, предварительно запомнив настройки порта).
  3. Создадим новое устройство. В поле Драйвер оборудования выберем вариант, содержащий в названии (NativeApi). Например, «1С:Сканеры штрихкода (NativeApi)».
  4. Нажмем кнопку «Установить драйвер». Теперь, после очистки папки ExtCompT, установка должна пройти успешно.
  5. Зайдем в «Настроить» и выполним «Тест устройства». Убедимся, что при сканировании штрихкода данные отображаются в окне теста.

Шаг 3. Корректировка программного кода обработки событий

Самый важный нюанс, с которым сталкиваются разработчики после перехода на Native-компоненту, — это изменение логики формирования внешнего события. В старых COM-драйверах параметры события были жестко заданы. В NativeApi они могут отличаться. Рассмотрим пример внесения изменений в модуль формы или в общую обработку, где перехватывается сканирование. Для решения задачи без доработки кода можно использовать расширение для работы со сканером штрихкодов в документах БП 3.0.

Проанализируем ситуацию: раньше код выглядел примерно так:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Источник = "СканерШтрихкода" И Событие = "ПолученШтрихкод" Тогда
        // Обработка ШК
        Штрихкод = СокрЛП(Данные);
        ОбработатьШтрихкод(Штрихкод);
    КонецЕсли;
КонецПроцедуры

После перехода на NativeApi драйвер Источник и Событие изменятся. Вместо «СканерШтрихкода» может прийти «InputDevice#1», а вместо «ПолученШтрихкод» — просто «Штрихкод».

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


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Используем поиск подстроки, так как номер устройства может меняться (InputDevice#1, InputDevice#2)
    ЭтоСобытиеСканера = (Найти(ВРЕГ(Источник), "INPUTDEVICE") > 0);
    ЭтоНужноеДействие = (Событие = "Штрихкод" Или Событие = "ПолученШтрихкод");

    Если ЭтоСобытиеСканера И ЭтоНужноеДействие Тогда
        // В NativeApi данные могут приходить в разном формате, 
        // иногда требуется дополнительная очистка
        Штрихкод = СокрЛП(Данные);
        ОбработатьШтрихкод(Штрихкод);
    КонецЕсли;
КонецПроцедуры

Нюансы работы с новыми версиями БПО

Важно помнить, что в современных версиях 1С:Бухгалтерии обработка торгового оборудования часто вынесена в специализированные механизмы. Если вы используете типовую форму, проверьте, не переопределены ли методы работы с оборудованием в модуле формы. Проанализируем вызов метода подключения:


// В современных конфигурациях подключение часто выглядит так:
МенеджерОборудованияКлиент.ПодключитьОборудованиеПоТипу(
    УникальныйИдентификатор, 
    Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода
);

Если вы пишете собственную обработку, рекомендуется не зашивать имена источников (InputDevice) в код, а использовать стандартные функции БПО для идентификации устройства. Например, метод МенеджерОборудованияВызовСервера.ПолучитьИдентификаторПоСобытию() позволит системе самой сопоставить пришедшее событие с настроенным в справочнике оборудованием.

Почему не стоит возвращаться к COM?

Может возникнуть соблазн просто найти старый драйвер и зарегистрировать его в системе через regsvr32. Однако рассмотрим последствия такого решения:

Таким образом, переход на NativeApi — это не просто способ исправить текущую ошибку, но и необходимая мера для обеспечения стабильной работы системы в будущем. Следуя приведенной инструкции по очистке кэша и обновлению кода обработки событий, вы сможете быстро восстановить работу склада или торговой точки после обновления 1С.

← На главную