Как автоматически проверить доступность сервисов 1С?

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

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

Проблема использования стандартного Ping (ICMP)

Первое, что обычно делает системный администратор или программист для проверки связи с сервером — использует команду 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С видит ваш запрос, просто он отклонен из-за отсутствия авторизации. Поэтому для автоматической проверки мы будем использовать более надежные методы.

Проверка доступности через HTTP-соединение

Наиболее корректным способом проверки доступности веб-сервисов в среде 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. login.1c.ru — центральный узел аутентификации. Если он недоступен, вы не сможете зайти в сервисы под своей учетной записью ИТС.
  2. portal.1c.ru — портал ИТС, ответственный за проверку правомерности использования обновлений.
  3. update.1c.ru — сервер, с которого скачиваются дистрибутивы обновлений конфигураций и платформы.
  4. classifier-repository.1c.ru — хранилище классификаторов (адресный классификатор ФИАС, классификатор банков и т.д.).
  5. currencyrates.1c.ru — сервис загрузки актуальных курсов валют.
  6. api.1c-edo.ru — основной шлюз для обмена электронными документами.

Диагностика со стороны системного администратора (TCP Port Check)

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

Разберем команду PowerShell, которая позволяет проверить доступность сервиса через порт 443:

Test-NetConnection -ComputerName classifier-repository.1c.ru -Port 443

Результат TcpTestSucceeded : True однозначно скажет нам о том, что провайдер не блокирует трафик, и физический путь к серверу открыт. Если же тест не проходит, а у вас есть доступ к двум разным провайдерам, вы можете настроить автоматическое переключение маршрутов в случае недоступности порта.

Проблема сертификатов и SSL-соединения

Часто «недоступность» сервисов 1С связана не с отсутствием связи, а с проблемами безопасности на стороне клиента. Если при попытке соединения вы получаете ошибку «Удаленный узел не прошел проверку», проанализируем состояние корневых сертификатов.

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

Для автоматизации проверки этого аспекта можно использовать тестовый вызов https://e-inv.1c.ru/api/v1/health. Успешный ответ в формате JSON подтвердит, что и сеть, и механизмы шифрования работают корректно.

Официальный мониторинг работоспособности

Прежде чем приступать к глубокой отладке кода, полезно заглянуть на официальный ресурс monitoring.1c.ru. Фирма 1С поддерживает страницу статуса, где в реальном времени отображается состояние ключевых систем. Вы можете реализовать в своей 1С простой парсер этой страницы, чтобы оперативно выводить уведомление пользователям: «Внимание, на стороне вендора проводятся технические работы», тем самым снижая нагрузку на службу поддержки.

Подводя итог, скажем, что универсального «однострочного» решения не существует, но комбинация HTTP-запросов к API, использование инструментов БСП и контроль TCP-портов через PowerShell позволяют создать надежную систему автоматического мониторинга сервисов 1С.

← На главную