При переходе на 64-битную версию платформы 1С:Предприятие пользователи часто сталкиваются с неприятной ситуацией: в документах (например, в 1С:ERP или 1С:Комплексная автоматизация) внезапно исчезает кнопка "Сканировать". При этом само оборудование исправно, а драйверы установлены. Давайте вместе разберемся, почему это происходит, проанализируем программный код и выясним, как вернуть функционал сканирования без переустановки всей системы.
Проанализируем ситуацию. Основная причина кроется в архитектуре взаимодействия 1С с внешним оборудованием. Большинство сканеров используют стандарт TWAIN. Исторически сложилось так, что драйверы TWAIN и соответствующие им библиотеки (DLL) выпускались в 32-битном исполнении. Согласно правилам операционной системы Windows, 64-битный процесс (которым является современный клиент 1С) не может напрямую загрузить и использовать 32-битную динамическую библиотеку.
В типовых конфигурациях, таких как ERP, разработчики предусмотрели жесткую проверку. Если система видит, что запущен 64-битный клиент, она просто отключает видимость кнопок сканирования, так как «родная» компонента 1С для работы со сканером (например, 1c-scantwain) в старых версиях БСП существовала только для 32-битной архитектуры.
Рассмотрим, как это выглядит «под капотом» программы. Обратим внимание на функцию ПроинициализироватьКомпоненту. В коде часто встречается проверка системной информации. Посмотрим на типичный фрагмент кода, который блокирует работу:
Если СистемнаяИнформация.ТипПлатформы <> ТипПлатформы.Windows_x86 Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент Тогда
ТекстСообщения = НСтр("ru = 'Для сканирования необходимо использовать 32-битную версию программы для ОС Windows.'");
ПоказатьПредупреждение(, ТекстСообщения);
Возврат;
КонецЕсли;
В данном примере объект СистемнаяИнформация возвращает тип платформы. Если значение не равно Windows_x86 (что соответствует 32-битной версии), выполнение процедуры прерывается. Именно поэтому простое «включение» кнопки в коде не поможет — внешняя компонента все равно не сможет загрузиться в адресное пространство 64-битного процесса.
Самый надежный и проверенный способ решить проблему — использовать 32-битную версию клиентской части 1С. Важно понимать: вам не нужно удалять 64-битную платформу. Платформы разных разрядностей прекрасно сосуществуют на одном компьютере.
Разберем по шагам процесс установки:
C:\Program Files, а 32-битная — в C:\Program Files (x86). Эти пути не пересекаются.Теперь, когда у нас установлены обе версии, нам нужно научить 1С запускать конкретную базу именно в 32-битном режиме.
Чтобы пользователю не приходилось каждый раз выбирать версию вручную, мы можем закрепить разрядность за конкретной информационной базой. Рассмотрим, как это сделать в окне запуска 1С:
/arch x86.После этих манипуляций, даже если основной клиент у вас 64-битный, данная конкретная база будет открываться через 32-битное приложение, и условие ТипПлатформы.Windows_x86 будет успешно выполняться. Кнопка сканирования станет видимой и активной.
Разберем подробнее, почему возникают такие сложности. Существует два основных протокола взаимодействия со сканерами:
1. TWAIN (Technology Without An Interesting Name) — классический стандарт. Большинство драйверов TWAIN являются 32-битными. Для работы 64-битного приложения с ними требуется специальный менеджер источников данных (DSM) версии 2.0, но даже он не всегда гарантирует стабильную работу старых 32-битных драйверов в 64-битной среде.
2. WIA (Windows Image Acquisition) — более современный стандарт от Microsoft. Он лучше работает с 64-битными системами. Если ваша конфигурация 1С поддерживает выбор протокола (это можно проверить в меню «Настройка сканирования»), попробуйте переключиться на WIA. Иногда это позволяет сканировать даже из 64-битного клиента, если драйвер сканера поддерживает этот протокол.
Часто возникает вопрос: «Почему 1С не сделает универсальную компоненту?». Проблема не в самой 1С, а в производителях «железа». Если производитель вашего сканера выпустил драйвер только в 1998 или 2010 году, он с вероятностью 99% является 32-битным. Чтобы 64-битная 1С смогла с ним работать, ей нужен «мостик» (Bridge), который будет запускать отдельный скрытый 32-битный процесс для связи со сканером. В современных версиях Библиотеки стандартных подсистем (БСП) такие механизмы начинают появляться, но в старых релизах ERP единственным стабильным решением остается использование 32-битного клиента.
Мы выяснили, что отсутствие сканирования в 64-битной версии — это не ошибка программы, а архитектурное ограничение. Для восстановления работы рекомендуем придерживаться следующего алгоритма:
/arch x86.ПроинициализироватьКомпоненту или аналогичных местах в модуле РаботаСИзображениямиКлиент.Использование 32-битного клиента для рабочих мест бухгалтеров и кладовщиков, где активно используется сканирование документов, на данный момент является «золотым стандартом», обеспечивающим максимальную совместимость с парком офисного оборудования.