Почему не работает сканирование в 1С 64-бит и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием
← На главную

При переходе на 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-битного процесса.

Решение №1: Установка 32-битной версии клиента

Самый надежный и проверенный способ решить проблему — использовать 32-битную версию клиентской части 1С. Важно понимать: вам не нужно удалять 64-битную платформу. Платформы разных разрядностей прекрасно сосуществуют на одном компьютере.

Разберем по шагам процесс установки:

  1. Скачайте дистрибутив «Технологическая платформа 1С:Предприятие для Windows» (именно 32-битную версию).
  2. Запустите установку. По умолчанию 64-битная версия устанавливается в папку C:\Program Files, а 32-битная — в C:\Program Files (x86). Эти пути не пересекаются.
  3. После установки у вас в системе будет два набора исполняемых файлов.

Теперь, когда у нас установлены обе версии, нам нужно научить 1С запускать конкретную базу именно в 32-битном режиме.

Решение №2: Настройка приоритета запуска в списке баз

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

  1. Выделите нужную базу в списке и нажмите кнопку «Изменить».
  2. Перейдите на последнюю закладку настроек (где указывается версия платформы).
  3. Найдите поле «Разрядность». Вместо значения «Авто» выберите «32 (x86)».
  4. Также можно использовать поле «Дополнительные параметры запуска», прописав там параметр /arch x86.

После этих манипуляций, даже если основной клиент у вас 64-битный, данная конкретная база будет открываться через 32-битное приложение, и условие ТипПлатформы.Windows_x86 будет успешно выполняться. Кнопка сканирования станет видимой и активной.

Технические подробности: TWAIN и WIA

Разберем подробнее, почему возникают такие сложности. Существует два основных протокола взаимодействия со сканерами:

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-битного клиента, если драйвер сканера поддерживает этот протокол.

Почему нельзя просто переписать код под 64 бит?

Часто возникает вопрос: «Почему 1С не сделает универсальную компоненту?». Проблема не в самой 1С, а в производителях «железа». Если производитель вашего сканера выпустил драйвер только в 1998 или 2010 году, он с вероятностью 99% является 32-битным. Чтобы 64-битная 1С смогла с ним работать, ей нужен «мостик» (Bridge), который будет запускать отдельный скрытый 32-битный процесс для связи со сканером. В современных версиях Библиотеки стандартных подсистем (БСП) такие механизмы начинают появляться, но в старых релизах ERP единственным стабильным решением остается использование 32-битного клиента.

Заключение и рекомендации

Мы выяснили, что отсутствие сканирования в 64-битной версии — это не ошибка программы, а архитектурное ограничение. Для восстановления работы рекомендуем придерживаться следующего алгоритма:

Использование 32-битного клиента для рабочих мест бухгалтеров и кладовщиков, где активно используется сканирование документов, на данный момент является «золотым стандартом», обеспечивающим максимальную совместимость с парком офисного оборудования.

← На главную