В современной разработке на платформе 1С:Предприятие часто возникает задача интеграции с внешними веб-сервисами. Одной из самых распространенных подзадач является получение данных с сайта или API в формате JSON и их последующее сохранение для обработки. Несмотря на то что «Обычное приложение» ассоциируется со старыми конфигурациями, платформа предоставляет все необходимые инструменты для решения этой задачи. Разберем пошагово, как реализовать этот механизм, учитывая современные требования безопасности и форматы данных.
Для выполнения запроса к интернет-ресурсу в 1С используются встроенные объекты. Нам понадобятся три «кита» обмена данными:
HTTPСоединение — устанавливает сессию с сервером (хостом).HTTPЗапрос — формирует конкретное обращение к ресурсу с указанием заголовков и параметров.HTTPОтвет — объект, в который платформа помещает результат выполнения запроса.Рассмотрим подробнее процесс подготовки и отправки запроса. Проанализируем типичную ситуацию: нам нужно обратиться к адресу, получить ответ и записать его на диск.
Поскольку большинство современных ресурсов работают через протокол SSL/TLS, создание простого соединения без параметров безопасности приведет к ошибке. Проанализируем, как инициализировать защищенное соединение. Для этого используется объект ЗащищенноеСоединениеOpenSSL.
// Инициализируем защищенное соединение
// Используем системные сертификаты для проверки
Защита = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
Использование СертификатыУдостоверяющихЦентровWindows() позволяет 1С доверять тем же сайтам, которым доверяет ваша операционная система, что избавляет от необходимости вручную прописывать каждый сертификат.
Теперь создадим объект HTTPСоединение. Важно помнить, что в параметрах конструктора указывается только доменное имя (хост), а не полная ссылка.
Сервер = "api.example.com"; // Только домен!
Порт = 443; // Стандартный порт для HTTPS
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Защита);
Здесь 30 — это таймаут ожидания в секундах. Если сервер не ответит вовремя, программа не «зависнет» навсегда, а выдаст исключение, которое мы сможем обработать.
После установки соединения нам нужно указать, какую именно страницу или метод API мы вызываем, и сообщить серверу, что мы ожидаем данные в формате JSON. Разберем, как это сделать через HTTPЗапрос.
АдресРесурса = "/v1/getData?type=json";
Запрос = Новый HTTPЗапрос(АдресРесурса);
// Указываем заголовки, чтобы сервер понял формат обмена
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Accept", "application/json");
Важный момент: Если сервис требует авторизации, например, по токену, его также необходимо добавить в заголовки:
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Выясним причину, по которой запрос может не сработать. Для этого всегда нужно проверять КодСостояния ответа. Код 200 означает успех, остальные коды (404, 500, 401) сигнализируют о проблемах.
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Читаем тело ответа как строку в кодировке UTF-8
СтрокаJSON = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Иначе
Сообщить("Ошибка сервера! Код состояния: " + Ответ.КодСостояния);
Возврат;
КонецЕсли;
Исключение
Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Автор вопроса просил именно записать результат в файл. В 1С для этого удобнее всего использовать объект ЗаписьТекста. Посмотрим на пример реализации:
ПутьКФайлу = "C:\Temp\result.json";
Запись = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
Запись.Записать(СтрокаJSON);
Запись.Закрыть();
Сообщить("Данные успешно сохранены в файл: " + ПутьКФайлу);
Использование КодировкаТекста.UTF8 критически важно, так как стандарт JSON подразумевает именно эту кодировку. Если записать файл в системной кодировке Windows (ANSI), то кириллица в других программах превратится в нечитаемые символы.
В некоторых случаях, особенно на очень старых версиях платформы 1С 8.2 или при специфических настройках прокси-серверов, встроенные объекты могут работать нестабильно. В такой ситуации мы можем воспользоваться системной библиотекой Windows. Разберем этот вариант.
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2, "UTF-8"); // Установка кодировки
WinHttp.Open("GET", "https://api.example.com/data", Ложь);
WinHttp.SetRequestHeader("Content-Type", "application/json");
Попытка
WinHttp.Send();
Если WinHttp.Status = 200 Тогда
СтрокаJSON = WinHttp.ResponseText;
// Далее сохраняем в файл, как в предыдущем примере
КонецЕсли;
Исключение
Сообщить("Ошибка COM-объекта: " + ОписаниеОшибки());
КонецПопытки;
Хотя задача стояла только в сохранении файла, на практике программисту часто нужно сразу прочитать полученные данные. Проанализируем различия версий платформы:
ЧтениеJSON. Это позволяет мгновенно превратить строку в структуру 1С.MSScriptControl.ScriptControl с использованием языка JScript.Пример для современных версий платформы:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Теперь с данными можно работать как с обычной структурой
Если Данные.Свойство("ИмяПользователя") Тогда
Сообщить(Данные.ИмяПользователя);
КонецЕсли;
Мы рассмотрели полный цикл работы с HTTP-запросом в обычном приложении 1С. Основные шаги включают настройку безопасного соединения, формирование запроса с правильными заголовками, получение тела ответа в корректной кодировке и его сохранение на диск. Помните, что работа с внешними ресурсами всегда должна сопровождаться блоками Попытка...Исключение, так как интернет-соединение и внешние сервисы являются нестабильными звеньями системы.