Почему аварийно завершается 1С при настройке ККТ АТОЛ по 54-ФЗ в УТ 10.3?

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

При подключении контрольно-кассовой техники (ККТ) нового образца по требованиям 54-ФЗ в конфигурациях на обычных формах (таких как «Управление торговлей 10.3» или «Управление производственным предприятием 1.3») специалисты нередко сталкиваются с внезапным падением программы. В момент открытия формы настройки торгового оборудования или при попытке создать объект драйвера процесс 1cv8.exe закрывается без отображения стандартных сообщений об ошибках.

Разберем детально, почему возникает эта ошибка, как работает механизм загрузки внешних компонент и какие существуют способы устранения проблемы.

Анализ проблемы и причин падения платформы

Проанализируем программный код обработки обслуживания торгового оборудования, на котором происходит сбой:


Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);
ПодключитьВнешнююКомпоненту(Адрес, "ИнтеграционнаяКомпонента", ТипВнешнейКомпоненты.Native); 
Драйвер = Новый("AddIn.ИнтеграционнаяКомпонента.ATOL_KKM_1C82_54FZ");

Метод ПодключитьВнешнююКомпоненту возвращает значение Истина, однако на строке создания объекта Новый("AddIn...") платформа мгновенно завершает свою работу. Выясним основные причины такого поведения:

  1. Несовместимость технологии Native API с устаревшими версиями Windows. Внешние компоненты АТОЛ (на базе ДТО 8/9/10), скомпилированные с использованием технологии Native API, задействуют функции Windows API и системные библиотеки C Runtime (CRT), которые некорректно работают или отсутствуют в Windows XP. При прямом вызове C++ структур через Native API возникает необработанное исключение нарушения прав доступа (Access Violation 0xC0000005), что приводит к закрытию процесса 1С.
  2. Различия в архитектуре клиентов 1С. В управляемых формах (например, в «1С:Розница 2») обращение к драйверу изолировано в отдельном контексте либо компонента подключается через COM-модель (AddIn.ATOL_KKM_1C82_54FZ.ATOL_KKM_1C82_54FZ). В толстом клиенте обычного приложения при прямой загрузке Native-библиотеки из временного хранилища любая системная ошибка приводит к падению всего приложения.
  3. Специфика версий платформы 1С:Предприятие 8.3. В линейках 8.3.6–8.3.8 встроенный менеджер Native-компонент имеет внутренние особенности инициализации библиотек из макетов в режиме обычного приложения.
  4. Блокировка механизмом DEP (Data Execution Prevention). Системная защита от выполнения данных операционной системы может расценивать вызовы динамически загруженного машинного кода компоненты как потенциальную угрозу и принудительно останавливать процесс.

Способ 1. Обновление операционной системы (Рекомендуемый)

Наиболее надежным и правильным решением является переход на современную операционную систему (Windows 7, 10 или 11). Начиная с релиза платформы 8.3.11, поддержка Windows XP со стороны разработчиков 1С была полностью прекращена.

Кроме того, для полноценной работы онлайн-касс в соответствии с 54-ФЗ требуется шифрование каналов связи по протоколу TLS 1.2 для отправки фискальных данных операторам (ОФД), поддержка которого на уровне системных криптопровайдеров Windows XP штатно отсутствует. После установки актуальной ОС библиотека FprnM1C82_54FZ.dll инициализируется и работает без ошибок.

Способ 2. Переключение на COM-модель подключения вместо Native API

Если обновление операционной системы на рабочем месте кассира временно невозможно, перейдем на использование стандартной технологии COM-соединения, которая обрабатывается операционной системой более стабильно.

Разберем по шагам, как изменить механизм инициализации драйвера:

  1. Установим на клиентском компьютере полный дистрибутив «АТОЛ: Драйверы торгового оборудования» (версии 8.14.2–8.16.x).
  2. Зарегистрируем библиотеку интеграции в операционной системе вручную от имени администратора. Для этого запустим командную строку и выполним команду: regsvr32 "C:\Program Files\ATOL\Drivers8\1Cv82\FZ54\FprnM1C82_54FZ.dll"
  3. В конфигураторе или во внешней обработке обслуживания торгового оборудования заменим блок инициализации Native-компоненты на COM-вызов:
    
    ПрогИД = "AddIn.ATOL_KKM_1C82_54FZ";
    Если ПодключитьВнешнююКомпоненту(ПрогИД) Тогда
        Попытка
            Драйвер = Новый(ПрогИД);
        Исключение
            Драйвер = Новый COMОбъект(ПрогИД);
        КонецПопытки;
    Иначе
        Сообщить("Не удалось подключить внешнюю компоненту АТОЛ по технологии COM");
    КонецЕсли;
    

Способ 3. Запуск толстого клиента под платформой 1С:Предприятие 8.2

Если конфигурация «Управление торговлей 10.3» работает в режиме совместимости с платформой 8.2, можно запустить базу напрямую через исполняемый файл платформы 8.2, которая проектировалась с учетом архитектуры Windows XP.

Для этого в диалоге запуска 1С:Предприятия выделим нужную базу, нажмем кнопку Изменить, перейдем на последнюю страницу настроек и в поле Версия 1С:Предприятия принудительно укажем 8.2. При таком варианте запуска компоненты инициализируются штатно.

Способ 4. Дополнительные системные настройки

Если требуется сохранить текущую конфигурацию системы без изменения кода, проверим следующие системные параметры:

  1. Установка пакетов Microsoft Visual C++ Redistributable. Убедимся, что на компьютере установлены библиотеки распространяемых пакетов Visual C++ (x86) версий 2008, 2010, 2012 и 2013 годов, совместимые с текущей ОС.
  2. Настройка исключений DEP. Откроем Свойства системы → Дополнительно → Быстродействие (Параметры) → Предотвращение выполнения данных. Переключим режим на «Включить DEP для всех программ и служб, кроме выбранных ниже» и добавим в список исполняемый файл 1cv8.exe.
← На главную