Почему после отката платформы 1С перестал отправляться алкоголь в ЕГАИС и как решить проблему?

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

В розничной торговле стабильная работа интеграции с ЕГАИС является критически важным фактором. Любой сбой в отправке чеков грозит остановкой продаж алкогольной продукции и потенциальными штрафами. Рассмотрим распространенную и неочевидную техническую проблему, с которой сталкиваются системные администраторы и программисты 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'.

Давайте разберем, что означает это системное сообщение:

  1. Валидация по XSD-схеме: УТМ ЕГАИС перед отправкой данных на серверы ФСРАР осуществляет строгую проверку входящих XML-пакетов на соответствие установленным схемам разметки (XSD).
  2. Тип данных COUNT: В структуре XML-документа чека ЕГАИС присутствуют элементы с типом данных COUNT. К таким элементам относятся, например, number (номер чека ККМ) или shift (номер кассовой смены). По требованиям схемы ЕГАИС, эти поля должны быть строго целыми положительными числами.
  3. Регулярное выражение схемы: Ограничение [1-9][0-9]{0,9} означает, что значение должно начинаться с цифры от 1 до 9, содержать только цифры и иметь длину не более 10 символов. Любые пробелы, запятые, точки или иные спецсимволы в данном поле недопустимы.
  4. Аномальное значение: Ошибка указывает на то, что система пытается передать значение "35.236" (или аналогичное, например, "35.353") в качестве номера чека. Очевидно, что реальный номер чека — это целое число 35236, однако в XML-файл оно записалось с разделительной точкой.

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

Взаимосвязь платформы 1С и региональных настроек Windows

Когда прикладное решение 1С формирует XML-пакет для отправки в ЕГАИС, оно преобразует числовые показатели (номера чеков, смен) в строковый формат для записи в атрибуты XML. Способ этого преобразования напрямую зависит от версии платформы 1С и региональных настроек операционной системы:


Способ 1. Корректировка региональных настроек в Windows 10 (Быстрое решение)

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

Выполним настройку по шагам:

  1. На кассовом компьютере под управлением Windows 10 закройте программу "1С:Предприятие".
  2. Откройте классическую Панель управления. Для этого нажмите комбинацию клавиш Win + R, введите команду control в появившемся окне "Выполнить" и нажмите клавишу Enter.
  3. В правом верхнем углу окна "Панель управления" в поле "Просмотр" установите значение "Крупные значки" или "Мелкие значки".
  4. Найдите и откройте раздел Региональные стандарты (в некоторых версиях Windows он называется "Регион").
  5. В открывшемся диалоговом окне на вкладке "Форматы" обратите внимание на нижнюю часть окна и нажмите кнопку Дополнительные параметры....
  6. В появившемся окне "Настройка формата" перейдите на вкладку Числа.
  7. Найдите параметр Разделитель групп разрядов. Обратите внимание: если в этом поле установлена точка (.), то это и есть источник нашей проблемы.
  8. Измените значение в поле "Разделитель групп разрядов". Рекомендуется либо полностью удалить этот символ (оставив поле пустым), либо заменить его на стандартный символ пробела.
  9. Нажмите кнопку Применить, а затем кнопку ОК во всех открытых окнах настроек региона.
  10. Критически важно: Обязательно перезагрузите кассовый компьютер или как минимум полностью завершите сеанс пользователя Windows и войдите заново. Это необходимо для того, чтобы запущенные процессы платформы 1С:Предприятие пересчитали новые региональные настройки операционной системы.

После перезапуска 1С попробуйте повторно отправить проблемные чеки из ЕГАИС. Они должны успешно пройти валидацию в УТМ и получить цифровую подпись.


Способ 2. Исправление программного кода в 1С (Надежное системное решение)

Изменение настроек операционной системы — это эффективный, но локальный метод. При переустановке Windows, сбросе настроек или подключении нового кассового оборудования проблема может возникнуть снова. Чтобы обезопасить систему от подобных сбоев в будущем, рекомендуется внести изменения непосредственно в программный код конфигурации 1С.

Наша задача — принудительно указать платформе 1С, что при конвертации числовых параметров чека (номера чека и номера смены) в строковый формат для XML-пакета ЕГАИС нельзя использовать локальные разделители операционной системы.

Разберем процесс доработки конфигурации в режиме "1С:Предприятие - Конфигуратор":

  1. Запустите базу данных 1С:Управление торговлей 10.3 в режиме Конфигуратор с правами администратора.
  2. Откройте конфигурацию (меню Конфигурация -> Открыть конфигурацию).
  3. Нам необходимо локализовать модуль, отвечающий за формирование XML-документа чека для ЕГАИС. В зависимости от релиза конфигурации и используемого механизма интеграции (прямая интеграция или через обработку обслуживания фискального регистратора), этот код может находиться:
    • В общем модуле ИнтеграцияЕГАИС (или схожем по наименованию модуле интеграции с государственными системами);
    • В модуле объекта документа ЧекККМ;
    • В обработках обслуживания торгового оборудования (фискальных регистраторов).
  4. Выполните глобальный поиск (клавиши Ctrl + Shift + F) по конфигурации по ключевым словам. Ищите фрагменты кода, где в XML записываются атрибуты с именами "number" или "shift" в контексте ЕГАИС. Например, поисковый запрос может выглядеть как .ЗаписатьАтрибут("number".
  5. Проанализируем найденный фрагмент кода. Обычно формирование атрибута выглядит так:

// Пример проблемного кода:
ЗаписьXML.ЗаписатьАтрибут("number", Строка(НомерЧекаККМ));
ЗаписьXML.ЗаписатьАтрибут("shift", Строка(НомерСменыККМ));

При использовании стандартной функции Строка() платформа задействует региональный разделитель групп разрядов из Windows. Чтобы этого избежать, мы должны использовать функцию Формат() с явным указанием форматной строки, отключающей группировку разрядов.

Замените проблемный участок кода на следующий вариант:


// Исправленный и безопасный вариант кода:
ЗаписьXML.ЗаписатьАтрибут("number", Формат(НомерЧекаККМ, "ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("shift",  Формат(НомерСменыККМ, "ЧГ=0"));

Разберем подробнее используемый параметр форматирования:

После внесения изменений выполните синтаксический контроль модуля, сохраните конфигурацию базы данных (клавиша F7) и запустите сеанс "1С:Предприятие" для проверки отправки чеков.

Заключение

Мы проанализировали неочевидную техническую проблему, возникающую на стыке работы платформы 1С, операционной системы Windows 10 и требований валидации схем ЕГАИС. Причиной ошибки послужило сочетание отката платформы 1С на более старую ветку (8.3.15) и специфической настройки разделителя тысяч в региональных стандартах ОС Windows 10.

Для быстрого исправления ситуации на кассовой точке достаточно скорректировать региональные параметры Windows, убрав точку из разделителей групп разрядов. Для долгосрочного и системного решения проблемы правильным подходом будет небольшая доработка кода 1С с внедрением функции Формат(Значение, "ЧГ=0"), которая сделает выгрузку XML-данных полностью независимой от внешних настроек операционной системы.

← На главную