Почему падает 1С при оплате картой через терминал Сбербанка и как это исправить?

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

В процессе автоматизации розничной торговли одной из самых частых и неприятных проблем является внезапное аварийное завершение работы (краш) платформы 1С:Предприятие в момент проведения оплаты по банковскому терминалу. Кассир выбирает безналичный расчет, отправляет команду на терминал, клиент прикладывает карту, и в этот момент программа 1С просто закрывается без вывода каких-либо предупреждений или ошибок. В журнале событий Windows при этом регистрируется классическая ошибка нарушения прав доступа к памяти с кодом исключения 0xc0000005 (Access Violation).

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

Почему происходит падение 1С при обращении к терминалу?

Прежде чем переходить к практическим действиям, выясним физическую природу этой системной ошибки. Взаимодействие между 1С и платежным терминалом Сбербанка традиционно строится на использовании динамических библиотек (DLL). Старые интеграционные механизмы используют COM-компоненту sbrfcom.dll или интерфейсную библиотеку sbrf.dll.

Когда кассир инициирует оплату, платформа 1С загружает эту библиотеку в свое адресное пространство и передает ей управление для связи с пин-падом. Если библиотека Сбербанка написана некорректно, содержит ошибки управления динамической памятью или пытается выполнить исполняемый код из защищенных областей стека, операционная система Windows расценивает это как потенциальную вирусную угрозу или критический сбой и принудительно завершает процесс 1cv8.exe или 1cv8c.exe.

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

Решение 1. Переход на современный драйвер Сбербанка версии 2.Х в БПО

Самым надежным и современным способом навсегда забыть о падениях 1С из-за терминала является обновление Библиотеки подключаемого оборудования (БПО) и переход на сертифицированный драйвер «1С:Эквайринговые терминалы Сбербанк 2.Х». Этот драйвер кардинально меняет архитектуру взаимодействия устройств.

В отличие от старых версий, которые работали внутри процесса 1С, новый драйвер взаимодействует со специальной внешней утилитой Сбербанка — sb_pilot.exe (входит в состав ПО Сбера WinCLI). Обмен данными происходит через внешние файлы или именованные каналы. Это означает, что даже если в процессе связи с банком или при обработке карты внутри драйвера произойдет критическая ошибка, упадет только внешний процесс утилиты, а сама программа 1С продолжит работать в штатном режиме, корректно обработав прерывание и выведя понятное сообщение пользователю.

Для реализации этого решения выполним следующие действия:

  1. Обновим конфигурацию 1С (или отдельно Библиотеку подключаемого оборудования) до актуального релиза.
  2. Перейдем в меню «Администрирование» — «Подключаемое оборудование» — «Драйверы оборудования».
  3. Убедимся, что в списке присутствует драйвер «1С:Эквайринговые терминалы Сбербанк 2.Х».
  4. Перенастроим карточку нашего эквайрингового терминала в 1С на использование нового драйвера.
  5. Обратимся в техническую поддержку Сбербанка с просьбой перевести интеграцию терминала на использование ПО sb_pilot.exe (WinCLI) вместо устаревшей библиотеки sbrfcom.dll.

Решение 2. Настройка предотвращения выполнения данных (DEP) в Windows

Если по каким-то причинам оперативно обновить конфигурацию 1С невозможно (например, конфигурация сильно кастомизирована или находится на поддержке сторонних разработчиков), мы можем решить проблему на уровне операционной системы Windows. Нам необходимо объяснить системе безопасности Windows, что платформе 1С разрешено выполнять код, который подгружается из внешних библиотек терминала.

Для этого настроим службу DEP (Data Execution Prevention):

  1. Откроем «Панель управления» на компьютере кассира и перейдем в раздел «Система» (или нажмем комбинацию клавиш Win + Break).
  2. Выберем пункт «Дополнительные параметры системы» в левой панели.
  3. В открывшемся окне на вкладке «Дополнительно» найдем раздел «Быстродействие» и нажмем кнопку «Параметры».
  4. Перейдем на вкладку «Предотвращение выполнения данных».
  5. Установим переключатель в положение «Включить DEP для всех программ и служб, кроме выбранных ниже».
  6. Нажмем кнопку «Добавить» и укажем путь к исполняемым файлам используемой платформы 1С. Обычно они располагаются по пути:
    
    C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\1cv8.exe
    C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\1cv8c.exe
    
    (где 8.3.XX.XXXX — номер вашей текущей версии платформы).
  7. Нажмем кнопку «Применить» и обязательно перезагрузим компьютер для вступления изменений в силу.

После этой настройки Windows перестанет блокировать попытки библиотек Сбербанка работать с оперативной памятью внутри процесса 1С, и падения прекратятся.

Решение 3. Проверка прав доступа к рабочим каталогам Сбербанка

Очень часто драйвер Сбербанка пытается записать логи транзакций, промежуточные файлы авторизации или конфигурационные файлы в свои рабочие папки (по умолчанию это C:\sc552 или C:\SBERBANK). Если у пользователя Windows, под учетной записью которого работает кассир, ограничены права на запись в эти папки, библиотека Сбера при попытке записи файла получит системный отказ и мгновенно завершит работу аварийно.

Проанализируем и настроим права доступа следующим образом:

  1. Откроем Проводник Windows и перейдем на диск C:.
  2. Найдем рабочую папку Сбербанка (например, sc552).
  3. Нажмем на нее правой кнопкой мыши и выберем пункт «Свойства».
  4. Перейдем на вкладку «Безопасность» и нажмем кнопку «Изменить».
  5. Выберем группу пользователей «Все» (или конкретную учетную запись локального кассира) и установим галочку напротив пункта «Полный доступ» (Full Control).
  6. Нажмем «Применить» и «ОК», убедившись, что права наследовались на все вложенные файлы и папки.

Решение 4. Совместимость разрядности платформы и внешних библиотек

Обратим внимание на важную деталь, указанную автором в начале обсуждения: используется 32-битная платформа 1С (x86). При работе с внешним оборудованием разрядность платформы 1С и разрядность регистрируемых в системе DLL-файлов должны строго совпадать.

Если технические специалисты Сбербанка по ошибке установили на компьютер 64-битную версию программного обеспечения терминала (UPOS), то при вызове методов эквайринга из 32-битной 1С произойдет аппаратный конфликт архитектур процессора, приводящий к немедленному падению программы.

Для устранения этой проблемы выполним перерегистрацию библиотеки вручную через командную строку с правами администратора. Запустим консоль cmd от имени администратора и выполним команды:


regsvr32 /u C:\sc552\sbrfcom.dll
regsvr32 C:\sc552\sbrfcom.dll

Если при регистрации возникает ошибка, убедитесь, что в операционной системе установлены все необходимые распространяемые пакеты Microsoft Visual C++ Redistributable (для x86-архитектур, начиная с версий 2008 и 2010 года), так как библиотеки Сбербанка написаны на C++ и напрямую зависят от этих системных компонентов.

Временные обходные решения

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

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

← На главную