Как организовать работу интернет-сервисов 1С, если у сервера нет доступа к интернету?

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

В практике крупных предприятий часто встречается ситуация, когда сервер приложений 1С находится в «стерильной» зоне — он полностью изолирован от внешней сети интернет в целях безопасности. В то же время пользователи работают на локальных машинах, которые имеют доступ к глобальной сети. Проблема возникает при попытке использовать современные сервисы, такие как 1С:Контрагент (заполнение реквизитов по ИНН), 1С-Отчетность или Досье контрагента. Поскольку в актуальных версиях программ (например, 1С:Бухгалтерия 3.0) основной программный код выполняется на сервере в режиме &НаСервере, система не может достучаться до API фирмы «1С», и сервис выдает ошибку.

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

Причина проблемы: Серверный контекст выполнения

Прежде всего, проанализируем ситуацию с точки зрения архитектуры платформы. В управляемом приложении 1С:Предприятие 8.3 большинство процедур, связанных с получением данных извне, реализовано в серверных модулях. Это сделано для оптимизации трафика и безопасности. Когда вы нажимаете кнопку «Заполнить по ИНН» в карточке контрагента, запрос формируется и отправляется не с вашего компьютера, а с сервера, на котором крутится рабочий процесс rphost.exe. Если сервер заблокирован файрволом, запрос не уходит. Разберем рабочие варианты решения этой задачи.

Решение 1: Настройка доступа через прокси-сервер с помощью inetcfg.xml

Это наиболее технологичный и правильный способ с точки зрения системного администрирования. Если политика безопасности запрещает прямой выход в интернет, администраторы могут выделить прокси-сервер, который будет пропускать трафик только к определенным доверенным адресам 1С.

Важно помнить: 1С:Предприятие часто игнорирует системные настройки прокси Windows, заданные в панели управления. Для того чтобы серверный процесс «увидел» прокси, необходимо создать или отредактировать файл inetcfg.xml. Рассмотрим алгоритм действий:

  1. Перейдем в каталог установки сервера 1С на серверной машине. Обычно это путь: C:\Program Files\1cv8\conf.
  2. Создадим в этой папке текстовый файл с именем inetcfg.xml (если его там еще нет).
  3. Пропишем в нем настройки прокси-сервера. Выглядеть это должно следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<InternetProxy
    protocols="http=192.168.1.100:8080 https=192.168.1.100:8080"
    user="proxy_user"
    password="proxy_password"
    bypassOnLocal="true">
</InternetProxy>

Где 192.168.1.100:8080 — это адрес и порт вашего прокси-сервера. После сохранения файла необходимо перезапустить службу Агент сервера 1С:Предприятия, чтобы настройки вступили в силу.

Решение 2: Организация «белого списка» на шлюзе предприятия

Если администраторы готовы пойти навстречу, но требуют конкретные адреса для открытия доступа, мы можем предоставить список узлов. Сервисы 1С не «гуляют» по всему интернету, они обращаются к строго определенным доменам. Для работы заполнения по ИНН и проверки контрагентов необходимо открыть порт 443 (HTTPS) для следующих ресурсов:

Проанализируем ситуацию: открытие доступа к этим четырем адресам практически не несет рисков безопасности, так как это доверенные ресурсы правообладателя ПО.

Решение 3: Использование сторонних сервисов (DaData) через клиентский контекст

Если сервер закрыт «намертво» и админы не дают прокси, мы можем прибегнуть к программной хитрости. Мы можем использовать расширение или внешнюю обработку, которая будет выполнять запрос к стороннему API (например, DaData) не на сервере, а непосредственно на клиенте (на компьютере пользователя, где интернет есть).

Разберем пример кода, который можно использовать в обработке. Обратите внимание на директиву &НаКлиенте:


&НаКлиенте
Процедура ЗаполнитьПоИНН_НаКлиенте(ИНН)
    // Используем HTTPСоединение непосредственно с клиентской машины
    Соединение = Новый HTTPСоединение("suggestions.dadata.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    
    Запрос = Новый HTTPЗапрос("/suggestions/api/4_1/rs/findById/party");
    Запрос.Заголовки.Вставить("Content-Type", "application/json");
    Запрос.Заголовки.Вставить("Authorization", "Token " + ВашТокенДаДата);
    
    ТелоЗапроса = "{ ""query"": """ + ИНН + """ }";
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        // Разбираем JSON и заполняем реквизиты формы
        // ...
    КонецЕсли;
КонецПроцедуры

В данном случае платформа 1С инициирует соединение с компьютера бухгалтера. Поскольку у бухгалтера интернет работает, данные будут успешно получены и переданы на форму, а затем сохранены в базу на сервере. Это «чистый» способ, не нарушающий сетевой изоляции сервера.

Решение 4: Распределенная информационная база (РИБ)

Этот метод часто называют вариантом «для сложных случаев». Мы создаем в системе еще один узел РИБ и настраиваем его в файловом варианте на том самом компьютере «доверенного лица», где есть интернет.

Схема работы выглядит так:

  1. Пользователь в файловой базе вводит ИНН. Поскольку база файловая, запрос 1С:Контрагент уходит с локальной машины и успешно отрабатывает.
  2. Данные о новом контрагенте сохраняются в локальной базе.
  3. Выполняется синхронизация между файловой базой и основной серверной базой через общую папку или FTP-ресурс внутри локальной сети.

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

Решение 5: Локальный прокси-сервер (SmallProxy)

Рассмотрим ситуацию, когда интернет есть только на одной машине в сети. На эту машину можно установить легкий прокси-сервер (например, SmallProxy или 3proxy).

Последовательность действий:

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

Выводы и рекомендации

Подводя итог, можно сказать, что наиболее стабильным решением является настройка inetcfg.xml в сочетании с «белым списком» на корпоративном шлюзе. Это позволяет сохранить целостность типовой конфигурации и обеспечить безопасность данных. Если же административный ресурс исчерпан, использование HTTP-запросов на клиенте через сторонние API является самым гибким и быстрым способом автоматизации ввода данных без привлечения системных администраторов.

← На главную