При работе с конфигурацией «Торговля и Склад 9.2» на платформе 1С:Предприятие 7.7 часто встречается неприятная проблема: при запуске программы или при попытке обращения к фискальному регистратору система наглухо зависает на сообщении «Выполняется обработка». Процесс 1cv7s.exe перестает откликаться и не завершается даже через Диспетчер задач или утилиту taskkill.
Посмотрим, почему происходит этот сбой, проанализируем основные причины и разберем проверенные способы решения данной проблемы.
Выясним главные факторы, вызвающие блокировку потока исполнения 1С 7.7 при вызове метода ЗагрузитьВнешнююКомпоненту:
"DrvFR.dll") заставляет 1С искать библиотеку по очереди в каталоге программы (папка BIN), каталоге базы данных, текущем рабочем каталоге и папках переменной PATH. Если текущий каталог изменился или в системе присутствуют устаревшие дубликаты, загружается не тот файл.DllRegisterServer). Метод ЗагрузитьВнешнююКомпоненту автоматически пытается зарегистрировать DLL в реестре Windows. При недостатке прав администратора или блокировке ключей HKCR\AddIn.DrvFR процесс зависает в ожидании ответа от ОС.sqlite.dll (или sqlite3.dll) и файла лицензии DrvFR.lic. Если их нет рядом с исполняемой библиотекой, процесс инициализации DLL зацикливается.DrvFR.dll может опрашивать доступные последовательные порты. Если в системе установлено ПО банковского эквайринга (например, пинпад Сбербанка) и создан виртуальный COM-порт, драйвер ФР попадает в бесконечное ожидание отклика от занятого порта.Рассмотрим самое быстрое и эффективное решение. Вместо использования относительно имени файла сформируем полный путь к компоненте с помощью встроенных функций платформы КаталогПрограммы() или КаталогБД().
Найдем в конфигурации или обработке торгового оборудования место вызова внешней компоненты и заменим короткое имя на явный абсолютный путь:
// Не рекомендуется: 1С ищет файл по непредсказуемому пути
// ЗагрузитьВнешнююКомпоненту("DrvFR.dll");
// Рекомендуется: явное указание каталога программы
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "DrvFR.dll");
// Или явный путь к системному каталогу, если файл размещен там:
// ЗагрузитьВнешнююКомпоненту("C:\Windows\System32\DrvFR.dll");
Передача полного пути гарантирует, что платформа обратится именно к той версии файла, которая размещена в папке с платформой 1С или в системном каталоге.
Проанализируем состав файлов драйвера. Для полноценной работы драйверам ККМ от компании «Штрих-М» требуются дополнительные библиотеки. Если положить в папку BIN только один файл DrvFR.dll, вызов компоненты будет завершаться сбоем.
Проверим наличие и скопируем в каталог, где расположена DrvFR.dll (например, в C:\Program Files\1Cv77\BIN\), следующие файлы из дистрибутива драйвера:
sqlite.dll (или sqlite3.dll) — библиотека базы данных для работы драйвера;DrvFR.lic — файл лицензии драйвера;DrvFR.ini — файл конфигурации параметров подключения.Чтобы исключить попытки платформы 1С 7.7 регистрировать библиотеку при каждом запуске, выполним регистрацию вручную в операционной системе под правами администратора.
Разберем по шагам порядок действий:
cmd.exe) от имени Администратора.
regsvr32 "C:\Program Files\1Cv77\BIN\DrvFR.dll"
ЗагрузитьВнешнююКомпоненту на инициализацию уже зарегистрированного COM-объекта через метод ПодключитьВнешнююКомпоненту:
Если ПодключитьВнешнююКомпоненту("AddIn.DrvFR") = 0 Тогда
Предупреждение("Не удалось подключить внешнюю компоненту DrvFR!");
КонецЕсли;
Этот подход полностью предотвращает зависание при старте, так как 1С обращается к уже готовой записи в реестре Windows без выполнения синхронного вызова DllRegisterServer.
Если сбой возник после установки ПО банковского терминала, проанализируем настройки драйвера ККМ:
COM1), к которому подключен фискальный регистратор. Это исключит попытки драйвера опрашивать виртуальный порт эквайринга.DrvFR.dll из каталогов C:\Windows\System32 и C:\Windows\SysWOW64, чтобы в системе осталась только одна актуальная версия библиотеки.