Как настроить эквайринг Сбербанка на терминальном сервере 1С 7.7 при работе с несколькими кассами

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

Разбираемся с отображением окна терминала: 1cv7.exe против 1cv7s.exe

Рассмотрим странную ситуацию: при запуске сетевой версии 1С с аппаратным ключом защиты (1cv7.exe) окно ожидания карты не отображается, тогда как в версии без защиты (1cv7s.exe) всё работает корректно. Выясним причину такого поведения. Разница часто кроется в механизмах предотвращения выполнения данных (DEP) и правах доступа, которые накладываются на защищенный исполняемый файл. Система может блокировать отрисовку дочерних окон внешних библиотек (компонент Сбербанка), считая их потенциально опасными.

Для решения проблемы с невидимыми окнами проанализируем настройки в файле pinpad.ini. Нам важны два параметра:

  1. ShowScreens=1 — этот параметр отвечает за то, где будет отображаться интерфейс: на мониторе компьютера или только на самом пинпаде. Если стоит 0, то в 1С вы не увидите никаких окон взаимодействия.
  2. ScreenType=1 — этот параметр заставляет библиотеку sbpilot.dll использовать стандартные диалоговые окна Windows. В терминальной сессии это критически важно, так как стандартные окна отрисовываются операционной системой более стабильно и реже пропадают за фоновым окном 1С.

Дополнительно рекомендуется добавить исполняемые файлы 1cv7.exe и 1cv7s.exe в исключения системы DEP в настройках Windows. Если вы используете компоненты 1C++ или FormEx, убедитесь, что они не перехватывают фокус окна принудительно, что также может приводить к «схлопыванию» банковского интерфейса.

Изоляция пользователей на терминальном сервере

Главная проблема при работе 4-х и более логических устройств (ЛУ) на одном сервере — это путаница в путях к настройкам. Если все пользователи обращаются к одной папке C:\sc552, то настройки одного кассира будут постоянно перезаписывать настройки другого. Чтобы этого избежать, мы применим метод индивидуальных рабочих каталогов.

Разберем по шагам, как настроить изоляцию:

  1. Для каждого кассового места создадим отдельную папку на сервере, например: C:\Sber_Term1, C:\Sber_Term2 и так далее.
  2. В коде 1С при инициализации библиотеки эквайринга (объект Sberbank.Gate или аналогичный) будем динамически определять путь к нужной папке, используя переменную окружения %CLIENTNAME% (имя клиентского компьютера, с которого зашли в терминал).
  3. В каждой папке должен быть свой экземпляр pinpad.ini, настроенный на конкретный COM-порт или IP-адрес терминала, привязанного к этому рабочему месту.

Посмотрим на пример того, как можно реализовать выбор пути в коде 1С 7.7:


// Пример получения пути к папке Сбера в зависимости от имени терминального клиента
WshShell = СоздатьОбъект("WScript.Shell");
ИмяКлиента = WshShell.ExpandEnvironmentStrings("%CLIENTNAME%");
ПутьКБанку = "C:\Sber_" + ИмяКлиента + "\";
// Далее инициализируем библиотеку, указывая этот путь

Привязка эквайринга к конкретному Логическому Устройству (ЛУ)

Ситуация, когда при печати контрольной ленты эквайринг «перескакивает» с устройства №4 на устройство №3, связана с тем, как драйвер ККТ (например, Штрих-М) хранит индекс последнего активного устройства в реестре. Библиотека банка при попытке напечатать чек обращается к драйверу ККТ по умолчанию, не зная, что в системе зарегистрировано несколько касс.

Проанализируем два способа решения этой проблемы через параметр PrinterType в pinpad.ini:

Способ 1: Отказ от прямой печати банком (Рекомендуемый)
Установим PrinterType=0. В этом режиме Сбербанк не пытается сам управлять кассой. Он просто проводит транзакцию и возвращает текст чека (слипа) обратно в 1С. Программист 1С получает этот текст и сам отправляет его на печать, используя стандартные методы драйвера ККТ. Это самый надежный вариант для терминала, так как 1С точно «знает», с каким ЛУ она работает в данный момент.

Способ 2: Явное переключение устройства перед оплатой
Если библиотека банка должна печатать чек сама (PrinterType=1), необходимо в коде 1С ПЕРЕД вызовом метода оплаты принудительно установить фокус драйвера на нужную кассу. Рассмотрим пример кода:


// Перед обращением к банку фиксируем нужное логическое устройство
ДрайверФР.Password = "30"; // Пароль администратора
ДрайверФР.LogicalDeviceNumber = 4; // Номер нашего ЛУ
ДрайверФР.SetActiveDevice(); // Активируем устройство
Если ДрайверФР.ResultCode <> 0 Тогда
    Предупреждение("Ошибка активации кассы №4!");
КонецЕсли;
// Только после этого вызываем операцию эквайринга

Устранение ошибки «Включите ККМ или замените ленту»

Эта ошибка часто является ложной. Она возникает, когда банк успешно списал деньги, но при попытке напечатать чек через драйвер возникла задержка. В терминальной сессии из-за проброса портов (RDP) отклик кассы может быть медленнее обычного.

Выясним причины и способы устранения:

  1. Таймауты в драйвере: Зайдите в «Тест драйвера ККТ» -> «Настройка свойств» -> «Параметры связи». Увеличьте значение «Таймаут» до 2000–5000 мс. Это даст системе больше времени на получение ответа от удаленной кассы через RDP-канал.
  2. Проверка состояния перед печатью: Перед отправкой команды в банк всегда проверяйте состояние ФР (флаги CheckPaper и DeviceEnabled). Если в кассе закончилась бумага, банк всё равно проведет операцию, а 1С выдаст ошибку, что приведет к расхождению и необходимости делать отмену по карте.

Подводя итог, скажем: стабильная работа эквайринга в 1С 7.7 на терминале обеспечивается строгой изоляцией файлов pinpad.ini по папкам пользователей и отказом от самостоятельной печати чека библиотекой Сбербанка в пользу печати средствами 1С. Это исключает путаницу с логическими устройствами и позволяет полностью контролировать процесс оформления продажи.

← На главную