Как определить, откуда 1С берет драйверы подключаемого оборудования

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

При настройке торгового оборудования нередко возникает ситуация, когда на одном компьютере развернуто несколько информационных баз, но одна из них успешно взаимодействует с онлайн-кассой или сканером, а вторая выдает ошибки или сообщает о несоответствии версии драйвера. При этом версия, отображаемая в окне настроек 1С, может совершенно не совпадать с версией установленного в операционной системе пакета драйверов (например, ДТО АТОЛ). Разберем подробно внутренние механизмы платформы 1С, выясним все возможные источники загрузки библиотек и рассмотрим пошаговые методы точной диагностики.

Почему версия драйвера в 1С отличается от установленной в Windows

Проанализируем архитектуру работы современных конфигураций на базе Библиотеки подключаемого оборудования (БПО). Главная причина путаницы заключается в разнице между двумя компонентами:

  1. Интеграционная компонента 1С — специальная внешняя библиотека (DLL/ZIP), созданная производителем оборудования или фирмой «1С» в соответствии с требованиями стандарта БПО. Именно ее номер версии отображается в интерфейсе 1С.
  2. Системный драйвер торгового оборудования (ДТО) — основной пакет драйверов и служб, инсталлируемый непосредственно в операционную систему Windows.

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

Основные источники, откуда 1С загружает компоненты оборудования

Рассмотрим по порядку все места, где платформа 1С ищет и откуда загружает файлы драйверов:

  1. Таблицы информационной базы (Справочник «Драйверы оборудования»): в типовых конфигурациях интеграционные компоненты хранятся в виде двоичных данных непосредственно в базе. При открытии сеанса или выполнении теста платформа с помощью метода ПодключитьВнешнююКомпоненту() выгружает DLL во временный каталог текущего пользователя (%TEMP%\v8_*.tmp) и загружает ее в память.
  2. Общие макеты конфигурации: если внешняя компонента не была загружена из внешнего файла, платформа берет предопределенный архив из общих макетов конфигурации (например, Макет_ДрайверАТОЛККТ54ФЗ). Если конфигурации баз отличаются по релизам, версии встроенных макетов также будут разными.
  3. Кэш внешних компонент платформы: файлы могут кэшироваться в профиле пользователя по пути %APPDATA%\1C\1cv8\ExtCompT или в системном каталоге ExtCompT.
  4. Каталог установки платформы и папка базы: при использовании старых механизмов интеграции платформа может искать библиотеки в каталоге исполняемых файлов C:\Program Files\1cv8\8.3.X.X\bin\ или в корневом каталоге файловой информационной базы.
  5. Системный реестр Windows (COM-объекты): для старых версий драйверов (например, АТОЛ 8/9), работающих по технологии COM, 1С обращается к системе по ProgID. Путь к физическому файлу определяется записями в реестре (HKEY_CLASSES_ROOT\CLSID\ или HKEY_CLASSES_ROOT\WOW6432Node\CLSID\ для 32-битного клиента).

Проблема разрядности клиента 1С

Обратим внимание на разрядность клиентского приложения. 32-битный клиент 1С (1cv8.exe) может загружать исключительно 32-битные библиотеки DLL, а 64-битный клиент (1cv8c.exe) — только 64-битные. Если одна база на рабочем месте запущена под 32-битной платформой, а вторая под 64-битной, они будут использовать совершенно разные ветки реестра и разные файлы драйверов в каталогах System32 и SysWOW64.

Пошаговый поиск фактического пути загруженного драйвера

Разберем по шагам, как с абсолютной точностью выяснить, какой именно файл DLL использует конкретный процесс 1С в реальном времени:

  1. Запустим нужную информационную базу 1С и откроем форму подключения или теста оборудования (чтобы компонента инициализировалась в памяти).
  2. Скачаем и откроем системную утилиту Process Explorer от Microsoft Sysinternals от имени Администратора.
  3. В верхнем списке процессов найдем нужный процесс 1cv8.exe или 1cv8c.exe.
  4. Нажмем комбинацию клавиш Ctrl + D для отображения нижней панели со списком загруженных DLL-модулей (Lower Pane View -> DLLs).
  5. В списке библиотек отфильтруем модули по имени производителя (например, fptr10.dll, fptr.dll, FprnM1C.dll). В колонке Path увидим точный каталог на диске, из которого 1С подгрузила библиотеку.

Как синхронизировать и обновить драйверы между базами

Для устранения расхождений выполним следующие практические действия:

  1. Обновление драйвера в справочнике: перейдем в раздел Администрирование -> Подключаемое оборудование -> Драйверы оборудования. Выберем нужный драйвер, нажмем Функции -> Установить драйвер или Обновить из файла и загрузим одинаковый архив интеграционной компоненты в обе базы.
  2. Очистка временных файлов: закроем все запущенные сеансы 1С и очистим содержимое каталогов %LOCALAPPDATA%\Temp\ (папки v8_*) и %APPDATA%\1C\1cv8\ExtCompT, чтобы исключить подхват зависших старых сборок из кэша.
  3. Проверка переменной PATH: при использовании современных Native-компонент убедимся, что в системной переменной среды PATH указан корректный путь к рабочему каталогу с системными библиотеками драйвера ККТ.
← На главную