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

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

При интеграции 1С с внешними веб-сервисами разработчики часто сталкиваются с задачей получения XML-данных по HTTP-запросу. Рассмотрим типичную проблему: когда метод Получить объекта HTTPСоединение возвращает статус 200 (успех), но файл на диске не создается или остается пустым. Разберем по шагам, как правильно организовать обмен данными.

Разбор ошибки при работе с HTTPСоединение

Основная сложность заключается в непонимании того, как именно работает метод Получить. Многие разработчики ошибочно ожидают, что вызов этого метода автоматически запишет ответ сервера в указанный путь. Однако в платформе 1С метод Получить требует явного указания параметров для сохранения данных на диск. Если вы не передаете путь к файлу вторым аргументом, 1С вернет объект HTTPОтвет, который содержит результат запроса в оперативной памяти, а не на жестком диске.

Решение №1: Прямая работа с телом ответа в оперативной памяти

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

Когда вы выполняете запрос, сначала необходимо получить объект ответа. Затем, используя методы объекта HTTPОтвет, вы можете извлечь данные. Это исключает проблемы с правами доступа к каталогам и ускоряет работу системы.


// Создаем соединение
Соединение = Новый HTTPСоединение("адрес.сайта");
Запрос = Новый HTTPЗапрос("/modules/info");

// Выполняем запрос
Ответ = Соединение.Получить(Запрос);

// Проверяем статус ответа
Если Ответ.КодСостояния = 200 Тогда
    // Получаем XML как строку
    СтрокаXML = Ответ.ПолучитьТелоКакСтроку();
    // Далее обрабатываем строку через ЧтениеXML или DOM
Иначе
    Сообщить("Ошибка при получении данных: " + Ответ.КодСостояния);
КонецЕсли;

Решение №2: Корректное сохранение ответа в файл

Если вам все же необходимо сохранить полученные данные в файл (например, для последующей загрузки стандартными средствами 1С), нужно убедиться, что вы передаете второй параметр в метод Получить правильно. Рассмотрим, как это сделать по шагам:

  1. Определите путь для сохранения файла. Рекомендуется использовать функцию ПолучитьИмяВременногоФайла("xml"), чтобы избежать конфликтов имен и проблем с правами доступа.
  2. Передайте этот путь вторым параметром в метод Получить.

// Формируем путь к временному файлу
ПутьКФайлу = ПолучитьИмяВременногоФайла("xml");

// Выполняем запрос с сохранением в файл
Соединение = Новый HTTPСоединение("адрес.сайта");
Соединение.Получить("/modules/info", ПутьКФайлу);

// После выполнения в файле по адресу ПутьКФайлу будут лежать данные XML

Важные аспекты работы с HTTP-запросами

Для того чтобы обмен данными проходил стабильно, проанализируем еще несколько технических деталей:

Таким образом, для получения XML достаточно либо правильно использовать второй параметр метода Получить для записи файла, либо сразу считывать тело ответа методом ПолучитьТелоКакСтроку(). Выбирайте вариант, который лучше подходит под архитектуру вашей задачи!

← На главную