В розничной торговле стабильная работа интеграции с ЕГАИС является критически важным фактором. Любой сбой в отправке чеков грозит остановкой продаж алкогольной продукции и потенциальными штрафами. Рассмотрим распространенную и неочевидную техническую проблему, с которой сталкиваются системные администраторы и программисты 1С при администрировании кассовых узлов.
Ситуация разворачивается следующим образом: после вынужденного отката платформы 1С:Предприятие на сервере (например, с версии 8.3.16.1063 назад на 8.3.15.1565 из-за некорректной работы печати штрихкодов и ценников) на одной из касс перестает уходить алкогольная продукция. При этом на кассовом компьютере под управлением Windows 7 всё функционирует в штатном режиме, а на кассе с операционной системой Windows 10 чеки ЕГАИС не подписываются, остаются пустыми, а в логах УТМ (Универсального транспортного модуля) фиксируется характерная ошибка, связанная с работой Java.
В этой статье мы подробно проанализируем причины возникновения этой ошибки, выясним, почему она проявляется избирательно на разных операционных системах и версиях платформы, а также разберем по шагам два метода её гарантированного устранения.
Для начала изучим текст ошибки, которую возвращает УТМ ЕГАИС при попытке отправить чек:
java.lang.IllegalArgumentException: org.xml.sax.SAXParseException; cvc-pattern-valid: Value '35.236' is not facet-valid with respect to pattern '[1-9][0-9]{0,9}' for type 'COUNT'.
Давайте разберем, что означает это системное сообщение:
COUNT. К таким элементам относятся, например, number (номер чека ККМ) или shift (номер кассовой смены). По требованиям схемы ЕГАИС, эти поля должны быть строго целыми положительными числами.[1-9][0-9]{0,9} означает, что значение должно начинаться с цифры от 1 до 9, содержать только цифры и иметь длину не более 10 символов. Любые пробелы, запятые, точки или иные спецсимволы в данном поле недопустимы.35236, однако в XML-файл оно записалось с разделительной точкой.Выясним, почему целое число неожиданно превратилось в дробное представление с точкой именно после отката версии платформы 1С и только на операционной системе Windows 10.
Когда прикладное решение 1С формирует XML-пакет для отправки в ЕГАИС, оно преобразует числовые показатели (номера чеков, смен) в строковый формат для записи в атрибуты XML. Способ этого преобразования напрямую зависит от версии платформы 1С и региональных настроек операционной системы:
Строка()) платформа 1С обращается к региональным стандартам операционной системы. Она форматирует число в соответствии с правилами локали, установленными в Windows на конкретном компьютере.8.3.16 чеки уходили без ошибок.." (например, "35.236"). Обычные функции очистки пробелов в коде 1С не рассчитаны на обработку точки в качестве разделителя тысяч. Платформа 1С 8.3.15 сформировала строку "35.236", код интеграции не распознал в точке разделитель групп и отправил строку в УТМ "как есть", что и привело к критической ошибке Java.Если у вас нет возможности оперативно изменить код конфигурации 1С или обновить платформу обратно до стабильной версии, проблему можно решить локально на кассовом компьютере путем изменения региональных стандартов операционной системы Windows 10. Это самый быстрый способ восстановления работоспособности кассы.
Выполним настройку по шагам:
Win + R, введите команду control в появившемся окне "Выполнить" и нажмите клавишу Enter..), то это и есть источник нашей проблемы.После перезапуска 1С попробуйте повторно отправить проблемные чеки из ЕГАИС. Они должны успешно пройти валидацию в УТМ и получить цифровую подпись.
Изменение настроек операционной системы — это эффективный, но локальный метод. При переустановке Windows, сбросе настроек или подключении нового кассового оборудования проблема может возникнуть снова. Чтобы обезопасить систему от подобных сбоев в будущем, рекомендуется внести изменения непосредственно в программный код конфигурации 1С.
Наша задача — принудительно указать платформе 1С, что при конвертации числовых параметров чека (номера чека и номера смены) в строковый формат для XML-пакета ЕГАИС нельзя использовать локальные разделители операционной системы.
Разберем процесс доработки конфигурации в режиме "1С:Предприятие - Конфигуратор":
ИнтеграцияЕГАИС (или схожем по наименованию модуле интеграции с государственными системами);ЧекККМ;Ctrl + Shift + F) по конфигурации по ключевым словам. Ищите фрагменты кода, где в XML записываются атрибуты с именами "number" или "shift" в контексте ЕГАИС. Например, поисковый запрос может выглядеть как .ЗаписатьАтрибут("number".
// Пример проблемного кода:
ЗаписьXML.ЗаписатьАтрибут("number", Строка(НомерЧекаККМ));
ЗаписьXML.ЗаписатьАтрибут("shift", Строка(НомерСменыККМ));
При использовании стандартной функции Строка() платформа задействует региональный разделитель групп разрядов из Windows. Чтобы этого избежать, мы должны использовать функцию Формат() с явным указанием форматной строки, отключающей группировку разрядов.
Замените проблемный участок кода на следующий вариант:
// Исправленный и безопасный вариант кода:
ЗаписьXML.ЗаписатьАтрибут("number", Формат(НомерЧекаККМ, "ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("shift", Формат(НомерСменыККМ, "ЧГ=0"));
Разберем подробнее используемый параметр форматирования:
"ЧГ=0" расшифровывается как "Численная Группировка = 0".Формат(Значение, "ЧГ=0") гарантирует, что число 35236 превратится в строку "35236" на абсолютно любом компьютере, независимо от того, какие региональные настройки установлены в Windows 7, Windows 10 или операционных системах семейства Linux.После внесения изменений выполните синтаксический контроль модуля, сохраните конфигурацию базы данных (клавиша F7) и запустите сеанс "1С:Предприятие" для проверки отправки чеков.
Мы проанализировали неочевидную техническую проблему, возникающую на стыке работы платформы 1С, операционной системы Windows 10 и требований валидации схем ЕГАИС. Причиной ошибки послужило сочетание отката платформы 1С на более старую ветку (8.3.15) и специфической настройки разделителя тысяч в региональных стандартах ОС Windows 10.
Для быстрого исправления ситуации на кассовой точке достаточно скорректировать региональные параметры Windows, убрав точку из разделителей групп разрядов. Для долгосрочного и системного решения проблемы правильным подходом будет небольшая доработка кода 1С с внедрением функции Формат(Значение, "ЧГ=0"), которая сделает выгрузку XML-данных полностью независимой от внешних настроек операционной системы.