Ситуация, когда после обновления платформы «1С:Предприятие» перестает работать ранее настроенное оборудование, является классической для специалистов по автоматизации. Особенно часто это проявляется в «пустых» или самописных конфигурациях, где механизмы подключения торгового оборудования реализованы вручную в глобальном модуле. Разберем пошагово, почему сканер может перестать генерировать внешние события и как это исправить, опираясь на технические нюансы взаимодействия платформы с драйверами.
Проанализируем основную причину сбоев при обновлении. Современные дистрибутивы 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-битный драйвер сканера");
КонецПопытки;
КонецЕсли;
Если вы используете специфические драйверы, убедитесь, что у вас есть обе версии библиотек в каталоге программы или в макетах конфигурации.
Рассмотрим ситуацию, когда компонента физически присутствует, но система её «не видит». Часто после смены платформы требуется повторная регистрация библиотек в реестре 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, но форма документа «молчит». Выясним возможные причины:
ВнешнееСобытие(Источник, Событие, Данные) в модуле формы. Она должна быть правильно описана, чтобы платформа знала, куда передавать управление.#13 (CR), а сам сканер настроен на передачу только кода без суффикса, драйвер будет бесконечно ждать окончания ввода и не генерировать событие.Рассмотрим наиболее надежный способ решения проблем в долгосрочной перспективе. Использование старых COM-компонент (вроде scanopos.dll) постепенно уходит в прошлое. Современный стандарт 1С предполагает использование Native API драйверов.
Преимущества Native API:
regsvr32.Посмотрим, как рекомендуется реализовать это сегодня: возьмите актуальный драйвер «1С:Сканеры штрихкода» из состава БПО (Библиотеки подключаемого оборудования). Его можно внедрить даже в самую простую конфигурацию как макет с типом «Внешняя компонента». В этом случае подключение будет выглядеть так:
УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера1С");
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера1С", "Сканер", ТипВнешнейКомпоненты.Native);
ОбъектДрайвера = Новый("AddIn.Сканер.BarcodeScanner");
Подводя итог, если после смены платформы сканер перестал работать, выполните следующие действия:
DataEventEnabled = 1.CR (13) или CRLF (13, 10).Такой системный подход позволит не только вернуть работоспособность оборудования, но и сделать систему более устойчивой к будущим обновлениям платформы.