В практике крупных предприятий часто встречается ситуация, когда сервер приложений 1С находится в «стерильной» зоне — он полностью изолирован от внешней сети интернет в целях безопасности. В то же время пользователи работают на локальных машинах, которые имеют доступ к глобальной сети. Проблема возникает при попытке использовать современные сервисы, такие как 1С:Контрагент (заполнение реквизитов по ИНН), 1С-Отчетность или Досье контрагента. Поскольку в актуальных версиях программ (например, 1С:Бухгалтерия 3.0) основной программный код выполняется на сервере в режиме &НаСервере, система не может достучаться до API фирмы «1С», и сервис выдает ошибку.
В этой статье мы подробно разберем, как обойти это ограничение, рассмотрим технические настройки прокси-серверов, использование распределенных баз и альтернативные методы интеграции через клиентскую часть.
Прежде всего, проанализируем ситуацию с точки зрения архитектуры платформы. В управляемом приложении 1С:Предприятие 8.3 большинство процедур, связанных с получением данных извне, реализовано в серверных модулях. Это сделано для оптимизации трафика и безопасности. Когда вы нажимаете кнопку «Заполнить по ИНН» в карточке контрагента, запрос формируется и отправляется не с вашего компьютера, а с сервера, на котором крутится рабочий процесс rphost.exe. Если сервер заблокирован файрволом, запрос не уходит. Разберем рабочие варианты решения этой задачи.
Это наиболее технологичный и правильный способ с точки зрения системного администрирования. Если политика безопасности запрещает прямой выход в интернет, администраторы могут выделить прокси-сервер, который будет пропускать трафик только к определенным доверенным адресам 1С.
Важно помнить: 1С:Предприятие часто игнорирует системные настройки прокси Windows, заданные в панели управления. Для того чтобы серверный процесс «увидел» прокси, необходимо создать или отредактировать файл inetcfg.xml. Рассмотрим алгоритм действий:
C:\Program Files\1cv8\conf.inetcfg.xml (если его там еще нет).
<?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С:Предприятия, чтобы настройки вступили в силу.
Если администраторы готовы пойти навстречу, но требуют конкретные адреса для открытия доступа, мы можем предоставить список узлов. Сервисы 1С не «гуляют» по всему интернету, они обращаются к строго определенным доменам. Для работы заполнения по ИНН и проверки контрагентов необходимо открыть порт 443 (HTTPS) для следующих ресурсов:
Проанализируем ситуацию: открытие доступа к этим четырем адресам практически не несет рисков безопасности, так как это доверенные ресурсы правообладателя ПО.
Если сервер закрыт «намертво» и админы не дают прокси, мы можем прибегнуть к программной хитрости. Мы можем использовать расширение или внешнюю обработку, которая будет выполнять запрос к стороннему 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С инициирует соединение с компьютера бухгалтера. Поскольку у бухгалтера интернет работает, данные будут успешно получены и переданы на форму, а затем сохранены в базу на сервере. Это «чистый» способ, не нарушающий сетевой изоляции сервера.
Этот метод часто называют вариантом «для сложных случаев». Мы создаем в системе еще один узел РИБ и настраиваем его в файловом варианте на том самом компьютере «доверенного лица», где есть интернет.
Схема работы выглядит так:
Несмотря на кажущуюся громоздкость, этот метод позволяет использовать штатный функционал 1С без написания кода и внесения изменений в настройки безопасности сервера.
Рассмотрим ситуацию, когда интернет есть только на одной машине в сети. На эту машину можно установить легкий прокси-сервер (например, SmallProxy или 3proxy).
Последовательность действий:
inetcfg.xml на сервере) указываем IP-адрес этого клиентского компьютера в качестве прокси-сервера.Важный нюанс: Этот способ требует, чтобы компьютер-шлюз был постоянно включен, пока серверу требуется доступ к интернет-сервисам.
Подводя итог, можно сказать, что наиболее стабильным решением является настройка inetcfg.xml в сочетании с «белым списком» на корпоративном шлюзе. Это позволяет сохранить целостность типовой конфигурации и обеспечить безопасность данных. Если же административный ресурс исчерпан, использование HTTP-запросов на клиенте через сторонние API является самым гибким и быстрым способом автоматизации ввода данных без привлечения системных администраторов.