При проведении оплаты по платежной карте в режиме Рабочего места кассира (РМК) или при закрытии кассовой смены пользователи конфигурации 1С:Розница 2.2 могут столкнуться с проблемой. После проведения операции через эквайринговый терминал Сбербанка и перед печатью чека на фискальном регистраторе (например, Атол 30Ф) программа выдает ошибку вида: «Текст XML содержит недопустимый символ в позиции...». В результате чек не печатается, а работа кассы блокируется.
В этом материале мы подробно проанализируем причины возникновения этой проблемы и рассмотрим проверенные способы ее решения.
Проанализируем ситуацию: платформа 1С:Предприятие 8 при формировании данных чека и обмене с драйвером подключаемого оборудования использует строгое соответствие спецификации XML 1.0. При приеме оплаты эквайринговый терминал Сбербанка возвращает в 1С текст слип-чека или служебные данные, в которых могут содержаться непечатные ASCII-символы (символы перевода строки, управляющие байты отреза чека, ESC-последовательности или спецсимволы разметки).
Когда 1С пытается сформировать XML-структуру из полученной строки, платформа обнаружвает спецсимволы (в диапазоне 0x00–0x1F) и прерывает операцию из-за невозможности выполнить XML-сериализацию.
Наиболее эффективным решением является обновление библиотек взаимодействия с банковским терминалом и правильная настройка оборудования в 1С.
Разберем порядок действий по шагам:
C:\sc552).regdll.bat.Если обновление компонентов недоступно, проанализируем настройки подключаемого оборудования непосредственно в конфигурации. В некоторых релизах проблему удается решить сменной обработчика оборудования.
1С:Эквайринговые терминалы Сбербанк на СБРФ Эквайринг.Посмотрим на настройки взаимодействия банковской утилиты с печатающим устройством. В каталоге установки эквайрингового ПО найдем файл pinpad.ini.
pinpad.ini через текстовый редактор.PrinterEnd, отвечающий за отправку управляющих символов отреза чека.16) или очистите этот параметр, если автоотрез настроен средствами самого ККТ Атол.Если конфигурация находится на доработке или используются расширения, рассмотрим программный способ фильтрации текста слип-чека перед его упаковкой в XML.
Для этого воспользуемся функциями Библиотеки Стандартных Подсистем (БСП) ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML() или системным методом НайтиНедопустимыеСимволыXML().
Рассмотрим пример кода:
// Очищаем текст слип-чека от непечатных управляющих символов
ТекстСлипа = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстСлипа);
// Проверяем наличие управляющих символов в строке
ПозицияОшибки = НайтиНедопустимыеСимволыXML(ТекстСлипа);
Если ПозицияОшибки > 0 Тогда
// Удаляем невалидный символ из строки
ТекстСлипа = Лев(ТекстСлипа, ПозицияОшибки - 1) + Сред(ТекстСлипа, ПозицияОшибки + 1);
КонецЕсли;
Применение данных способов позволяет полностью устранить ошибку XML-сериализации при взаимодействии 1С:Розницы 2.2 с эквайринговыми терминалами и кассовой техникой.