Работа с торговым эквайрингом в терминальной среде 1С 7.7 часто превращается в квест, особенно когда к одному серверу подключено несколько кассовых мест с разными фискальными регистраторами. Основные сложности возникают из-за конфликтов логических устройств (ЛУ) в драйвере ККТ и проблем с отображением диалоговых окон банковского ПО. В этой статье мы подробно разберем, как правильно изолировать рабочие места и настроить взаимодействие системы так, чтобы чеки печатались на нужных устройствах, а окна оплаты не «прятались» от кассира.
Рассмотрим странную ситуацию: при запуске сетевой версии 1С с аппаратным ключом защиты (1cv7.exe) окно ожидания карты не отображается, тогда как в версии без защиты (1cv7s.exe) всё работает корректно. Выясним причину такого поведения. Разница часто кроется в механизмах предотвращения выполнения данных (DEP) и правах доступа, которые накладываются на защищенный исполняемый файл. Система может блокировать отрисовку дочерних окон внешних библиотек (компонент Сбербанка), считая их потенциально опасными.
Для решения проблемы с невидимыми окнами проанализируем настройки в файле pinpad.ini. Нам важны два параметра:
sbpilot.dll использовать стандартные диалоговые окна Windows. В терминальной сессии это критически важно, так как стандартные окна отрисовываются операционной системой более стабильно и реже пропадают за фоновым окном 1С.Дополнительно рекомендуется добавить исполняемые файлы 1cv7.exe и 1cv7s.exe в исключения системы DEP в настройках Windows. Если вы используете компоненты 1C++ или FormEx, убедитесь, что они не перехватывают фокус окна принудительно, что также может приводить к «схлопыванию» банковского интерфейса.
Главная проблема при работе 4-х и более логических устройств (ЛУ) на одном сервере — это путаница в путях к настройкам. Если все пользователи обращаются к одной папке C:\sc552, то настройки одного кассира будут постоянно перезаписывать настройки другого. Чтобы этого избежать, мы применим метод индивидуальных рабочих каталогов.
Разберем по шагам, как настроить изоляцию:
C:\Sber_Term1, C:\Sber_Term2 и так далее.Sberbank.Gate или аналогичный) будем динамически определять путь к нужной папке, используя переменную окружения %CLIENTNAME% (имя клиентского компьютера, с которого зашли в терминал).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) отклик кассы может быть медленнее обычного.
Выясним причины и способы устранения:
CheckPaper и DeviceEnabled). Если в кассе закончилась бумага, банк всё равно проведет операцию, а 1С выдаст ошибку, что приведет к расхождению и необходимости делать отмену по карте.Подводя итог, скажем: стабильная работа эквайринга в 1С 7.7 на терминале обеспечивается строгой изоляцией файлов pinpad.ini по папкам пользователей и отказом от самостоятельной печати чека библиотекой Сбербанка в пользу печати средствами 1С. Это исключает путаницу с логическими устройствами и позволяет полностью контролировать процесс оформления продажи.