Как правильно проверить наличие JSON-файла на сайте в 1С?

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

При интеграции 1С с внешними веб-сервисами, которые отдают данные в формате JSON, часто возникает необходимость проверить, существует ли файл по заданному URL. Многие разработчики по привычке используют метод ЧтениеJSON.ОткрытьФайл(), оборачивая его в блок Попытка...Исключение. Однако практика показывает, что такой подход может приводить к аварийному завершению работы (падению) платформы 1С, так как этот объект предназначен для разбора уже полученных данных, а не для обработки сетевых статусов.

Давайте разберем, как сделать эту проверку надежной, быстрой и безопасной для системы.

Почему Попытка-Исключение при чтении файла не всегда работает?

Проблема заключается в том, что ЧтениеJSON пытается инициализировать соединение и начать потоковое чтение файла. Если сервер возвращает ошибку (например, 404 Not Found), 1С может интерпретировать это не как ожидаемое исключение, а как сбой на низком уровне сетевого взаимодействия, что приводит к критической ошибке платформы. Чтобы избежать подобных проблем, нам нужно сначала «спросить» сервер о статусе файла, не пытаясь его сразу прочитать.

Решение: используем HTTPСоединение и HTTPЗапрос

Самым правильным способом является использование встроенных объектов для работы с протоколом HTTP. Мы отправим запрос к серверу, получим ответ и проанализируем его код состояния (HTTP Status Code). Если код равен 200, значит, файл успешно найден и его можно скачивать или читать. Если код другой — например, 404 — мы получим корректный сигнал об отсутствии файла без падения системы.

Рассмотрим по шагам, как это реализовать в коде:

  1. Инициализируем объект HTTPСоединение, указав адрес ресурса.
  2. Формируем HTTPЗапрос с указанием пути к конкретному файлу.
  3. Выполняем метод Получить, который вернет нам объект HTTPОтвет.
  4. Анализируем свойство КодСостояния полученного ответа.

Вот пример того, как это выглядит на практике:


HTTPСоединение = Новый HTTPСоединение("www.floatrates.com",,,,, 60, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/daily/" + СокрЛП(АббревиатураВалюты) + ".json");

Попытка
    Ответ = HTTPСоединение.Получить(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        // Файл существует, можно приступать к парсингу
        ДанныеJSON = Ответ.ПолучитьТелоКакСтроку();
        // Далее обработка данных
    Иначе
        // Обработка случая, когда сервер ответил, но файла нет (код 404) или ошибка сервера (5xx)
        Сообщить("Ошибка доступа к файлу. Код состояния: " + Ответ.КодСостояния);
    КонецЕсли;
Исключение
    // Обработка исключений, связанных с отсутствием сети или таймаутом
    Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;

Важные рекомендации по оптимизации

Чтобы ваше решение работало еще стабильнее, учтите следующие моменты:

Применяя этот подход, вы навсегда избавитесь от внезапных падений обработки и сделаете обмен данными с внешними сайтами профессиональным и предсказуемым.

← На главную