Часто после обновления конфигурации «1С:Розница 2.2» (например, при переходе с релизов 2.2.7 на 2.2.9 и выше) пользователи сталкиваются с неприятной ситуацией: автоматический обмен с ЕГАИС по расписанию перестает работать под учетными записями кассиров. При этом, если зайти в систему под правами администратора, обмен выполняется корректно. Ситуация осложняется, когда база опубликована на веб-сервере, а магазины распределены территориально.
В данной статье мы подробно разберем причины этой проблемы, проанализируем архитектурные изменения в логике работы 1С и предложим пошаговое решение для восстановления стабильного обмена.
Разберем ситуацию: почему раньше под кассиром все работало, а теперь нет? В последних релизах 1С усилила контроль безопасности при выполнении фоновых заданий. Для того чтобы регламентное задание могло инициировать HTTP-запрос к УТМ (Универсальному транспортному модулю), текущему пользователю недостаточно прав Продавец-кассир.
Проанализируем необходимые действия:
Интеграция с ЕГАИС или Работа с ЕГАИС. В новых версиях без этих ролей подсистема обмена может блокировать попытки создания фоновых заданий программным способом.Если ваша база работает через веб-сервер (IIS или Apache), механизм выполнения фоновых задач в файловом варианте меняется. Рассмотрим подробнее, как это происходит. В файловой базе регламентные задания запускаются либо специальным выделенным сеансом, либо внутри активного пользовательского сеанса.
Когда мы устанавливаем флаг «Выполнять обмен на сервере 1С:Предприятие» в настройках обмена ЕГАИС, система пытается выполнить запрос к УТМ не с компьютера пользователя, а с того компьютера, где установлен веб-сервер. Выясним причину возможного отказа: пользователь, под которым запущен веб-сервер (например, IUSR или NetworkService), может просто не иметь прав на выход в интернет или доступ к порту 8080 магазина.
Для решения этой задачи выполним следующие шаги:
ExchangeRobot) с полными правами.Обмен с ЕГАИС и в поле Пользователь укажем нашего созданного администратора.Это позволит системе игнорировать ограниченные права кассира при выполнении фонового задания, так как оно будет запускаться от имени «технического» администратора.
Проанализируем ситуацию, когда сервер 1С находится в облаке или в центральном офисе, а УТМ — в магазине за маршрутизатором с динамическим IP. Рассмотрим, как сервер узнает, куда отправлять запросы.
Если вы открываете порт 8080 на маршрутизаторе магазина (проброс портов / Port Forwarding), вы создаете серьезную уязвимость. Любой злоумышленник, зная ваш IP, сможет получить доступ к данным ЕГАИС. Кроме того, при смене динамического IP адрес в настройках 1С станет неактуальным.
Рассмотрим правильные способы решения этой проблемы:
Вариант А: Использование Dynamic DNS (например, No-IP)
Этот сервис привязывает ваше динамическое подключение к постоянному доменному имени. В настройках магазина в 1С вместо IP-адреса (например, 178.1.2.3) мы указываем хост: magazin1.myvnc.com. Однако, даже в этом случае порт 8080 остается открытым всему миру.
Вариант Б: Настройка VPN-канала (Рекомендуется)
Посмотрим на пример организации сети через VPN (OpenVPN, WireGuard или ZeroTier). Это объединит сервер и все магазины в одну виртуальную локальную сеть. В этом случае сервер 1С будет обращаться к УТМ по внутреннему адресу, например 192.168.1.50:8080. Это безопасно, стабильно и не требует проброса портов наружу.
Иногда проблема кроется в том, что при первом запуске после обновления 1С пытается установить обновленную компоненту для работы с криптографией и HTTP-запросами. Рассмотрим, почему это не срабатывает у кассира. Обычно у пользователя Windows, под которым работает кассир, нет прав на запись в системные папки или установку расширений.
Выполним следующие действия для исправления:
Разберем правовой аспект, упомянутый в обсуждении. Согласно требованиям ФСРАР, аппаратный ключ (JaCarta или Рутокен) и сам УТМ должны физически находиться по месту осуществления деятельности, указанному в лицензии (для крепкого алкоголя). Попытка собрать все ключи на одном сервере в центральном офисе является нарушением. 1С должна обращаться к УТМ именно в магазин.
Посмотрим на пример кода, который можно использовать в отладчике или внешней обработке, чтобы проверить доступность УТМ прямо из сеанса кассира:
НТТРЗапрос = Новый HTTPСоединение("192.168.1.50", 8080);
Попытка
Ответ = НТТРЗапрос.Получить(Новый HTTPЗапрос("/"));
Сообщить("Соединение с УТМ установлено успешно! Код ответа: " + Ответ.КодСостояния);
Исключение
Сообщить("Ошибка подключения к УТМ: " + ОписаниеОшибки());
КонецПопытки;
Для восстановления работы обмена по расписанию мы рекомендуем выполнить комплексную проверку:
Соблюдение этих шагов обеспечит стабильную работу системы и позволит избежать ручного вмешательства в процесс обмена данными с государственными информационными системами.