В процессе эксплуатации систем на базе 1С:Предприятие мы часто сталкиваемся с ситуациями, когда внешние сервисы — будь то загрузка курсов валют, классификаторов или сервисы 1С-ЭДО — перестают отвечать. При этом не всегда понятно, на чьей стороне проблема: произошел ли сбой на серверах самой фирмы 1С, заблокировал ли трафик локальный провайдер или возникли сложности с сетевыми настройками внутри компании. В этой статье мы подробно разберем, как автоматизировать процесс проверки доступности этих ресурсов и какие инструменты для этого существуют — есть контроль выполнения регламентных заданий с уведомлениями.
Первое, что обычно делает системный администратор или программист для проверки связи с сервером — использует команду ping. Однако в случае с ресурсами 1С этот метод часто дает ложные результаты. Разберем, почему так происходит. Многие современные сервера, включая classifier-repository.1c.ru или currencyrates.1c.ru, настроены на блокировку входящих ICMP-пакетов в целях безопасности. Это означает, что сервер может быть полностью работоспособен и успешно отдавать данные по протоколам HTTP/HTTPS, но при этом не отвечать на классический «пинг».
Проанализируем пример кода, который часто встречается в типовых конфигурациях для проверки связи:
Функция ПроверитьДоступностьСервера(АдресСервера) Экспорт
Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда
ШаблонКоманды = "ping %1 -n 4 -w 1000";
Иначе
ШаблонКоманды = "ping -c 4 -W 1 %1";
КонецЕсли;
// Код выполнения команды в операционной системе...
КонецФункции
Как мы выяснили, такой подход может вернуть «Ложь», даже если сервис доступен. Если вы выполните запрос к серверу через браузер и получите ошибку 403 (Forbidden) или 401 (Unauthorized), это на самом деле хороший знак — поможет инструмент логирования и анализа HTTP-запросов. Это означает, что сетевой уровень (TCP) работает, и сервер 1С видит ваш запрос, просто он отклонен из-за отсутствия авторизации. Поэтому для автоматической проверки мы будем использовать более надежные методы.
Наиболее корректным способом проверки доступности веб-сервисов в среде 1С является попытка установить прямое HTTP-соединение. Разберем, как реализовать универсальный механизм проверки на языке 1С. Мы создадим объект НТТРСоединение с минимальным таймаутом, чтобы система не «зависала» при ожидании ответа от недоступного узла.
Рассмотрим пример функции, которая проверяет физическую доступность сервиса классификаторов:
Функция СервисДоступен(Хост, Порт = 443) Экспорт
Попытка
// Используем защищенное соединение для HTTPS
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Хост, Порт, , , , 5, ЗащищенноеСоединение);
// Пытаемся получить заголовки или минимальный ресурс
Запрос = Новый HTTPЗапрос("/");
Ответ = Соединение.Получить(Запрос);
// Если сервер вернул любой код ответа (даже 403), значит он доступен
Возврат Истина;
Исключение
// Если возникла ошибка работы с Интернет, сервис действительно недоступен
ЗаписьЖурналаРегистрации("ПроверкаСервиса", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеОписаниеОшибки(ИнформацияОбОшибке()));
Возврат Ложь;
КонецПопытки;
КонецФункции
В данном примере мы устанавливаем таймаут в 5 секунд — для этого подойдёт система уведомлений об ошибках 1С в Telegram. Этого достаточно для определения проблем с каналом связи. Обратите внимание, что для работы с HTTPS необходимо использовать объект ЗащищенноеСоединениеOpenSSL.
Если ваша конфигурация построена на базе БСП, в ней уже заложены мощные инструменты для диагностики. Рассмотрим работу подсистемы «Интернет-поддержка пользователей». Фирма 1С использует специализированные API-методы для проверки актуальности данных. Например, для классификаторов используется обращение к конкретной ветке адреса.
Выясним, как это реализовано программно. Вместо проверки «корня» сайта, система обращается к API:
URLОперации = "https://classifier-repository.1c.ru/external-api/version/latest";
РезультатОтправки = ИнтернетПоддержкаПользователей.ЗагрузитьСодержимоеИзИнтернет(URLОперации);
Это более надежный способ, так как корень сайта может отдавать ошибку 403, в то время как программный интерфейс API будет работать исправно. Мы рекомендуем использовать встроенную обработку «Диагностика электронного взаимодействия», которую можно найти в разделе администрирования. Она позволяет в интерактивном режиме проверить доступность всех необходимых ресурсов: от серверов обновлений до шлюзов ЭДО.
Для создания полноценной системы мониторинга нам необходимо знать, какие именно адреса проверять — есть комплексный мониторинг производительности и ошибок 1С. Составим список наиболее важных хостов, от которых зависит работа типовых решений 1С:
Если мы хотим проверить доступность сервисов вне контекста 1С (например, через скрипты мониторинга или PowerShell), нам следует проверять открытие конкретного TCP-порта. Это позволяет исключить влияние настроек самой платформы 1С и сосредоточиться на сетевой доступности.
Разберем команду PowerShell, которая позволяет проверить доступность сервиса через порт 443:
Test-NetConnection -ComputerName classifier-repository.1c.ru -Port 443
Результат TcpTestSucceeded : True однозначно скажет нам о том, что провайдер не блокирует трафик, и физический путь к серверу открыт. Если же тест не проходит, а у вас есть доступ к двум разным провайдерам, вы можете настроить автоматическое переключение маршрутов в случае недоступности порта.
Часто «недоступность» сервисов 1С связана не с отсутствием связи, а с проблемами безопасности на стороне клиента. Если при попытке соединения вы получаете ошибку «Удаленный узел не прошел проверку», проанализируем состояние корневых сертификатов.
В последние годы сервисы 1С активно переходят на использование отечественных сертификатов или обновляют цепочки доверия (например, GlobalSign). Для корректной работы автоматической проверки убедитесь, что:
bin/conf) файл cacert.pem содержит актуальные данные, либо система настроена на использование системного хранилища сертификатов.Для автоматизации проверки этого аспекта можно использовать тестовый вызов https://e-inv.1c.ru/api/v1/health. Успешный ответ в формате JSON подтвердит, что и сеть, и механизмы шифрования работают корректно.
Прежде чем приступать к глубокой отладке кода, полезно заглянуть на официальный ресурс monitoring.1c.ru. Фирма 1С поддерживает страницу статуса, где в реальном времени отображается состояние ключевых систем. Вы можете реализовать в своей 1С простой парсер этой страницы, чтобы оперативно выводить уведомление пользователям: «Внимание, на стороне вендора проводятся технические работы», тем самым снижая нагрузку на службу поддержки.
Подводя итог, скажем, что универсального «однострочного» решения не существует, но комбинация HTTP-запросов к API, использование инструментов БСП и контроль TCP-портов через PowerShell позволяют создать надежную систему автоматического мониторинга сервисов 1С.