Как настроить сканер штрихкодов в пустой конфигурации 1С после обновления платформы

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Проблема разрядности платформы (x86 против x64)

Проанализируем основную причину сбоев при обновлении. Современные дистрибутивы 1С часто устанавливают 64-битную версию клиента по умолчанию. Если ваша предыдущая платформа была 32-битной (x86), а новая — 64-битной (x86_64), старые драйверы (например, классический scanopos.dll или старые компоненты АТОЛ) просто не смогут загрузиться в процесс 1С.

Важно понимать: 64-битное приложение не может использовать 32-битные динамические библиотеки (DLL) напрямую. Выясним, как программно определить разрядность и загрузить нужную библиотеку. Для этого в процедуре ПриНачалеРаботыСистемы глобального модуля рекомендуется использовать следующий код:


СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформы1С = СистемнаяИнформация.ТипПлатформы;

Если ТипПлатформы1С = ТипПлатформы.Windows_x86 Тогда
    Попытка
        ЗагрузитьВнешнююКомпоненту("scanopos.dll");
    Исключение
        Сообщить("Не удалось загрузить 32-битный драйвер сканера");
    КонецПопытки;
ИначеЕсли ТипПлатформы1С = ТипПлатформы.Windows_x86_64 Тогда    
    Попытка
        ЗагрузитьВнешнююКомпоненту("scanopos64.dll");
    Исключение
        Сообщить("Не удалось загрузить 64-битный драйвер сканера");
    КонецПопытки;
КонецЕсли;

Если вы используете специфические драйверы, убедитесь, что у вас есть обе версии библиотек в каталоге программы или в макетах конфигурации.

Регистрация COM-соединения и библиотек

Рассмотрим ситуацию, когда компонента физически присутствует, но система её «не видит». Часто после смены платформы требуется повторная регистрация библиотек в реестре Windows. Рассмотрим, как это сделать вручную или программно. Для работы с объектами через COM необходимо убедиться, что зарегистрирована библиотека comcntr.dll, соответствующая новой версии платформы.

Также не забывайте про стандартную регистрацию самих драйверов сканера. Выполните команду в консоли (cmd) от имени администратора:

regsvr32 "путь_к_файлу\scanopos.dll"

Настройка параметров драйвера АТОЛ

Если вы используете драйверы АТОЛ, разберем программную инициализацию устройства. Часто настройки не сохраняются из-за того, что объект инициализируется в памяти, но не записывает свои параметры в реестр или файл настроек при закрытии. Посмотрим на пример кода, который гарантирует правильную установку параметров при каждом запуске:


Сканер = Новый("AddIn.Scaner45"); // Пример для АТОЛ
Сканер.AddDevice();
Сканер.CurrentDeviceName = "COM_Scanner";
Сканер.PortNumber = 1; // Номер вашего порта
Сканер.DataEventEnabled = 1; // Критически важно для внешнего события
Сканер.Suffix = Символ(13) + Символ(10); // Установка суффикса CR + LF
Сканер.DeviceEnabled = 1;

Обратите особое внимание на свойство DataEventEnabled. Если оно установлено в 0, драйвер будет получать данные от сканера, но не будет передавать их в 1С как ВнешнееСобытие. Именно это часто объясняет ситуацию, когда в «тесте устройства» данные видны, а в документе — нет.

Почему не срабатывает ВнешнееСобытие в форме

Проанализируем ситуацию: драйвер загружен, DataEventEnabled = 1, но форма документа «молчит». Выясним возможные причины:

  1. Фокус на форме: Внешнее событие доходит только до активной формы. Если в момент сканирования открыто модальное окно или фокус находится в специфическом поле, которое перехватывает ввод (режим клавиатуры), событие может не возникнуть.
  2. Обработчик в форме: Проверьте наличие предопределенной процедуры ВнешнееСобытие(Источник, Событие, Данные) в модуле формы. Она должна быть правильно описана, чтобы платформа знала, куда передавать управление.
  3. Суффиксы и префиксы: Драйвер часто ожидает определенный «символ завершения» (суффикс), чтобы понять, что чтение кода закончено. Если в настройках драйвера указан суффикс #13 (CR), а сам сканер настроен на передачу только кода без суффикса, драйвер будет бесконечно ждать окончания ввода и не генерировать событие.

Переход на современные Native API драйверы

Рассмотрим наиболее надежный способ решения проблем в долгосрочной перспективе. Использование старых COM-компонент (вроде scanopos.dll) постепенно уходит в прошлое. Современный стандарт 1С предполагает использование Native API драйверов.

Преимущества Native API:

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


УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера1С");
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера1С", "Сканер", ТипВнешнейКомпоненты.Native);
ОбъектДрайвера = Новый("AddIn.Сканер.BarcodeScanner");

Итоги и рекомендации

Подводя итог, если после смены платформы сканер перестал работать, выполните следующие действия:

  1. Проверьте разрядность новой платформы (Справка -> О программе). Если там указано 64-бит, замените 32-битные библиотеки драйвера на 64-битные или перейдите на Native API.
  2. Убедитесь, что в коде инициализации явно прописано DataEventEnabled = 1.
  3. Проверьте настройки суффикса в самом сканере (путем сканирования служебных кодов из инструкции к нему) и сопоставьте их с настройками в 1С. Обычно это CR (13) или CRLF (13, 10).
  4. Если настройки драйвера не сохраняются через стандартный интерфейс «Параметры», реализуйте их жесткое прописывание в коде при старте системы.

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

← На главную