Почему 1С:Розница аварийно завершает работу при обмене с УТМ ЕГАИС и как решить эту проблему?

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

При работе с ЕГАИС пользователи розничных конфигураций 1С (в частности, 1С:Розница 2.2 и 1С:Управление торговлей 11 на платформе 8.3.10 и смежных релизах) часто сталкиваются с крайне неприятной проблемой. При попытке выполнить обмен в разделе «Закупки» — «Входящие ТТН» программа внезапно закрывается («вылетает»). При этом на долю секунды на экране появляется стандартное системное окно платформы с текстом: «Пожалуйста подождите, выполняется сохранение информации об ошибке...», после чего сеанс полностью завершается, а в журнале регистрации 1С и системных журналах событий Windows (Event Viewer) не остается никаких диагностических записей.

В этой статье мы подробно проанализируем технические причины такого поведения системы, разберем по шагам эффективные методы устранения этой ошибки и выясним, как правильно настроить программное окружение для стабильной работы с УТМ ЕГАИС.

Окно с сообщением о сохранении информации — это штатная реакция платформы 1С:Предприятие на критическую ошибку (крэш) процесса 1cv8.exe. Платформа пытается записать аварийный дамп памяти для последующей отправки разработчикам. Давайте разберемся, из-за чего это происходит в процессе обмена с УТМ.

Когда мы запускаем обмен в клиентском режиме, происходят следующие процессы:

  1. Программа отправляет HTTP-запросы к Универсальному транспортному модулю (УТМ) и скачивает входящие пакеты (ТТН, акты, квитанции, тикеты) в формате XML.
  2. Для каждого полученного файла на стороне клиента запускается цикл обработки данных.
  3. После обработки очередного документа система генерирует оповещение для динамического обновления форм списков (используются методы ОповеститьОбИзменении или Оповестить). Это необходимо, чтобы пользователь сразу видел изменившийся статус накладной на экране.
  4. Если в очереди УТМ накопилось много документов (более нескольких десятков или сотен), этот циклический процесс вызывает лавинообразный рост вызовов обработчиков интерфейсных событий. В старых версиях платформы это приводило к критическому переполнению стека (stack overflow), утечке памяти в интерфейсном потоке и моментальному падению клиентского приложения без возможности записать ошибку в журнал регистрации.

Рассмотрим пошагово основные способы решения этой проблемы.

Способ №1: Перенос обмена на сервер («Обмен на сервере»)

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

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

  1. Перейдем в раздел Администрирование, далее выберем пункт Настройки интеграции с ЕГАИС (или настройки обмена с ЕГАИС в зависимости от релиза конфигурации).
  2. Найдем настройки нашего классификатора УТМ (Параметры подключения к УТМ).
  3. Установим флаг (галочку) «Обмен на сервере».
  4. Сохраним настройки и попробуем запустить обмен повторно.

Включение этой опции в большинстве случаев мгновенно решает проблему вылетов программы, однако здесь кроются важные сетевые нюансы, которые мы проанализируем ниже.

Важные подводные камни при включении серверного обмена

Если ваша база данных является файловой и расположена на том же компьютере, где установлен УТМ, то включение опции «Обмен на сервере» пройдет безболезненно. Но если вы работаете в клиент-серверном режиме (база данных крутится на MS SQL Server или PostgreSQL, а сервер приложений 1С установлен на отдельном компьютере), то стандартная настройка может нарушить обмен.

Выясним причину: по умолчанию в адресе подключения к УТМ указывается локальный IP-адрес 127.0.0.1 или имя localhost. При включенной галочке «Обмен на сервере» сервер приложений 1С начнет искать транспортный модуль на самом себе (по адресу 127.0.0.1), где его физически нет, так как УТМ и аппаратный ключ (Рутокен или JaCarta) подключены к локальному компьютеру кассира.

Чтобы решить эту сетевую проблему, выполним следующие действия:

  1. На компьютере кассира (где установлен УТМ) определим его реальный IP-адрес в локальной сети (например, 192.168.1.50). Для этого можно запустить командную строку Windows и выполнить команду ipconfig.
  2. В настройках подключения к ЕГАИС в 1С заменим адрес localhost или 127.0.0.1 на реальный IP-адрес компьютера кассира (например, http://192.168.1.50:8080).
  3. На компьютере кассира откроем настройки Брандмауэра Windows (или стороннего антивируса) и добавим разрешающее правило для входящих подключений по TCP-порту 8080. Это необходимо, чтобы сервер 1С, находящийся на другом компьютере, мог беспрепятственно отправлять HTTP-запросы к транспортному модулю кассы.

Способ №2: Очистка зависшей очереди входящих документов УТМ

Зачастую лавинообразное падение интерфейса провоцирует огромное количество скопившихся в УТМ старых документов. Это могут быть неотвеченные акты списания, необработанные тикеты прошлых периодов или зависшие квитанции. При каждом нажатии на кнопку обмена 1С честно пытается вычитать и обработать всю эту гигантскую очередь.

Рекомендуется произвести ручную очистку очередей транспортного модуля. Сделать это можно двумя путями:

  1. Откроем встроенную веб-страницу домашней страницы УТМ (обычно она доступна в браузере по адресу http://localhost:8080). Перейдем на вкладку «Входящие» или «Исходящие» и удалим зависшие запросы вручную.
  2. Используем консольные запросы для массового удаления зависших пакетов. Мы можем отправить команду удаления напрямую в УТМ.

Рассмотрим пример команды удаления документа с помощью утилиты curl (выполняется в командной строке):


curl -X DELETE http://localhost:8080/opt/out/waybill_v3/1
curl -X DELETE http://localhost:8080/opt/out/ticket/2

После очистки транспортного модуля от старого «мусора» очередь документов сократится до актуального минимума, и нагрузка на систему при обмене упадет в разы.

Способ №3: Использование регламентных заданий для фонового обмена

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

Разберем настройку по шагам:

  1. Перейдем в раздел Администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания.
  2. Найдем в списке регламентное задание с именем «Обработка ответов ЕГАИС».
  3. Включим его и настроим расписание (например, выполнять обмен каждые 15 минут в рабочее время).

В таком режиме система будет незаметно для кассира порциями забирать документы из УТМ в фоновом режиме, распределяя нагрузку и исключая необходимость ручного нажатия кнопки «Выполнить обмен».

Способ №4: Кардинальное решение — обновление платформы и конфигурации

Описанная проблема с лавинообразными оповещениями была признана разработчиками 1С. В более новых версиях платформы (начиная с 8.3.15) и в современных редакциях конфигураций (например, 1С:Розница 2.3 и 3.0) механизмы взаимодействия с государственными информационными системами были кардинально переписаны.

Синхронные тяжелые циклы обработки на стороне клиента уступили место асинхронным функциям. Теперь обработка XML-пакетов происходит изолированно в фоновых потоках, что полностью страхует программу от падений из-за перегрузки интерфейса. Если у вас есть возможность обновить платформу до актуального релиза (например, ветки 8.3.20 или 8.3.22) и обновить саму конфигурацию, обязательно сделайте это.

Способ №5: Проверка криптопровайдера и СКЗИ

В редких случаях моментальный вылет процесса 1cv8.exe в момент инициализации обмена может быть вызван сбоем в работе средств криптографической защиты информации (СКЗИ), установленных на клиентской машине. При обмене происходит обращение к компонентам подписи, и если в системе установлена устаревшая версия КриптоПро CSP или VipNet CSP, либо повреждены библиотеки веб-клиента для работы с двухфакторной авторизацией, программа может аварийно завершиться.

Для предотвращения подобных сбоев рекомендуется:

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

← На главную