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

В этой статье разберём все способы отправки GET-запросов в 1С 8.3 — от простейшего кода на встроенном языке до работы с HTTPСервис, HTTPСоединение и внешними компонентами. Особое внимание уделим обработке ошибок и тайм-аутам, которые часто становятся причиной падения обменов. Материал актуален для всех актуальных релизов платформы, включая облачные и локальные версии.

1. Базовые способы выполнения GET-запроса в 1С

Начнём с самого простого варианта — использования объекта HTTPСоединение. Этот метод подходит для разовых запросов и не требует подключения дополнительных библиотек. Основные шаги:

  • 🔹 Создать объект HTTPСоединение и указать адрес сервера
  • 🔹 Установить заголовки (при необходимости)
  • 🔹 Выполнить метод Получить() с передачей параметров в URL
  • 🔹 Обработать ответ или ошибку

Пример минимального кода для запроса курса доллара от ЦБ РФ:

Попытка

Соединение = Новый HTTPСоединение("www.cbr.ru");

Ответ = Соединение.Получить("/scripts/XML_daily.asp?date_req=01/01/2026");

Сообщить(Ответ.ПолучитьТекст());

Исключение

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

Этот код работает без авторизации, но для большинства API потребуется добавить заголовки (например, Authorization или Content-Type). Обратите внимание: параметры запроса передаются прямо в URL после знака ?, разделённые символом &.

📊 Какой способ HTTP-запросов вы используете чаще?
HTTPСоединение
HTTPСервис
Внешние компоненты (например, CURL)
Собственные обработки

2. Использование HTTPСервис для сложных запросов

Объект HTTPСервис появился в 1С 8.3.14 и стал более гибкой альтернативой HTTPСоединение. Он поддерживает:

  • 🔧 Настройку тайм-аутов (отдельно на соединение и чтение)
  • 🔧 Работу с прокси-серверами
  • 🔧 Удобное управление заголовками через коллекцию Заголовки
  • 🔧 Поддержку HTTPS с проверкой сертификатов

Пример запроса к API OpenWeatherMap с передачей ключа API и параметров:

HTTPСервис = Новый HTTPСервис();

Заголовки = HTTPСервис.Заголовки;

Заголовки.Вставить("Accept", "application/json");

// Устанавливаем тайм-аут 30 секунд

HTTPСервис.ТаймАут = 30000;

URL = "https://api.openweathermap.org/data/2.5/weather?q=Moscow&appid=ВАШ_КЛЮЧ_API&units=metric";

Ответ = HTTPСервис.Получить(URL);

Если Ответ.КодСостояния = 200 Тогда

ДанныеПогоды = JSON.Прочитать(Ответ.ПолучитьТекст());

Сообщить("Температура: " + ДанныеПогоды.main.temp + "°C");

Иначе

Сообщить("Ошибка: " + Ответ.КодСостояния + " - " + Ответ.ПолучитьТекст());

КонецЕсли;

💡

Всегда проверяйте код состояния ответа (200 — успех, 401 — нет авторизации, 404 — не найдено). Не полагайтесь только на отсутствие исключений!

Для работы с JSON в примере используется встроенный парсер , доступный с версии 8.3.10. Если ваша конфигурация старше, потребуется внешняя компонента или обработка строки вручную.

3. Передача параметров в GET-запросе

Параметры в GET-запросах передаются через строку запроса (query string) после символа ?. Правила формирования:

  • 📌 Параметры разделяются символом &
  • 📌 Значения кодируются с помощью СтрЗначениеВURL() (например, пробел становится %20)
  • 📌 Кириллические символы автоматически преобразуются в UTF-8

Пример формирования URL с параметрами:

БазовыйURL = "https://api.example.com/orders";

Параметры = Новый Структура();

Параметры.Вставить("date_from", "2026-01-01");

Параметры.Вставить("date_to", "2026-01-31");

Параметры.Вставить("status", "completed");

СтрокаПараметров = "";

Для Каждого Параметр Из Параметры Цикл

Если СтрокаПараметров <> "" Тогда

СтрокаПараметров = СтрокаПараметров + "&";

КонецЕсли;

СтрокаПараметров = СтрокаПараметров + СтрЗначениеВURL(Параметр.Ключ) + "=" + СтрЗначениеВURL(Параметр.Значение);

КонецЦикла;

ПолныйURL = БазовыйURL + "?" + СтрокаПараметров;

Символ Кодировка в URL Пример
Пробел %20 или + Москва%20город
= %3D filter%3Dactive
& %26 param1%26param2
? %3F query%3Fsearch
Что будет если не кодировать параметры?

Если не использовать СтрЗначениеВURL(), сервер может неправильно интерпретировать пробелы, кириллицу или специальные символы.

Например, запрос с параметром city=Нью Йорк без кодировки прервётся на пробеле, и сервер получит только city=Нью,

что приведёт к ошибке 400 (Bad Request).

4. Обработка ответа: JSON, XML и бинарные данные

Ответ от сервера может приходить в разных форматах. В их обрабатывают так:

  • 📄 JSON: используйте встроенный парсер JSON.Прочитать() (доступен с 8.3.10)
  • 📄 XML: загружайте в ЧтениеXML или парсите через DOM
  • 📄 Бинарные данные (PDF, изображения): сохраняйте в ДвоичныеДанные или файл
  • 📄 Простой текст: используйте ПолучитьТекст() или ПолучитьПоток()

Пример разбора JSON-ответа с погодой:

ОтветJSON = JSON.Прочитать(Ответ.ПолучитьТекст());

Температура = ОтветJSON.main.temp;

Влажность = ОтветJSON.main.humidity;

Сообщить(СтрШаблон("Температура: %1°C, Влажность: %2%",

Температура, Влажность));

Для XML подходит следующий подход:

ЧтениеXML = Новый ЧтениеXML();

ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТекст());

// Пример чтения курса валюты из XML ЦБ РФ

Пока ЧтениеXML.Прочитать() Цикл

Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда

Если ЧтениеXML.Имя = "Valute" Тогда

КодВалюты = ЧтениеXML.ПолучитьАтрибут("ID");

ИначеЕсли ЧтениеXML.Имя = "Value" Тогда

Курс = ЧтениеXML.ПолучитьТекстовоеСодержимое();

Сообщить(СтрШаблон("Курс %1: %2", КодВалюты, Курс));

КонецЕсли;

КонецЕсли;

КонецЦикла;

🔹 Код состояния = 200 (успех)

🔹 Длина ответа > 0 байт

🔹 Формат данных соответствует ожидаемому (JSON/XML)

🔹 Отсутствуют ошибки парсинга-->

5. Типичные ошибки и их решение

При работе с GET-запросами в чаще всего возникают следующие проблемы:

⚠️ Внимание: Если сервер требует HTTPS, но у вас самоподписанный сертификат, добавьте строку HTTPСервис.ИгнорироватьОшибкиСертификата = Истина; перед выполнением запроса. Это отключит проверку подлинности сертификата (небезопасно для продакшена!).
Ошибка Причина Решение
Ошибка соединения (12029) Неверный URL или сервер недоступен Проверьте адрес, прокси, интернет-соединение
401 Unauthorized Отсутствует или неверный токен авторизации Добавьте заголовок Authorization: Bearer ТОКЕН
403 Forbidden IP-адрес заблокирован или нет прав Проверьте белый список IP в настройках API
Тайм-аут соединения Сервер долго отвечает Увеличьте HTTPСервис.ТаймАут (по умолчанию 60 сек)

Ещё одна распространённая ошибка — некорректная кодировка параметров. Например, если в параметре передаётся дата в формате DD.MM.YYYY, а API ожидает YYYY-MM-DD, сервер вернёт 400 Bad Request. Всегда уточняйте требования к формату данных в документации API.

Для отладки полезно выводить полный URL запроса и заголовки:

Сообщить("URL: " + URL);

Сообщить("Заголовки: " + HTTPСервис.Заголовки.ПолучитьКлючиИЗначения());

6. Альтернативные методы: внешние компоненты и REST-расширения

Если встроенных средств недостаточно (например, нужна поддержка gzip, OAuth 2.0 или сложная обработка ошибок), используйте:

  • 🛠️ Внешние компоненты: CURL, HTTPClient (например, от Infostart)
  • 🛠️ REST-расширения: готовые обработки для работы с API (доступны на Infostart, 1С-Галлерея)
  • 🛠️ Web-сервисы: если API поддерживает SOAP, можно использовать WS-ссылки

Пример вызова внешней компоненты HTTPClient:

Попытка

HTTPClient = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");

HTTPClient.Open("GET", "https://api.example.com/data", Ложь);

HTTPClient.SetRequestHeader("Authorization", "Bearer ТОКЕН");

HTTPClient.Send();

Если HTTPClient.Status = 200 Тогда

Ответ = HTTPClient.ResponseText;

// Обработка ответа

Иначе

Сообщить("Ошибка: " + HTTPClient.Status + " - " + HTTPClient.StatusText);

КонецЕсли;

Исключение

Сообщить("Ошибка COM: " + ОписаниеОшибки());

КонецПопытки;

⚠️ Внимание: Внешние компоненты требуют регистрации на клиентских машинах и могут не работать в 1С:Предприятие для Linux или веб-клиенте. Перед использованием проверьте совместимость с вашей версией платформы.

Для облачных решений (например, 1С:Fresh) внешние компоненты недоступны — в этом случае используйте встроенный HTTPСервис или организуйте промежуточный сервер (proxy) на стороне вашего бэкенда.

7. Оптимизация и безопасность GET-запросов

При регулярных запросах к API следует учитывать:

  • 🔒 Кэширование: сохраняйте ответы в РегистрСведений или файл, чтобы не отправлять повторные запросы
  • 🔒 Ограничение частоты: многие API имеют лимиты (например, 60 запросов в минуту)
  • 🔒 Логирование: ведите журнал запросов и ошибок для отладки
  • 🔒 Безопасность: не храните токены и пароли в коде — используйте ХранилищеОбщихНастроек

Пример кэширования курса валюты:

Функция ПолучитьКурсВалюты(КодВалюты, Дата)

// Проверяем кэш

Запись = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(КодВалюты, Дата);

Если Не Запись.Пустая() Тогда

Возврат Запись.Курс;

КонецЕсли;

// Если в кэше нет — запрашиваем API

HTTPСервис = Новый HTTPСервис();

URL = "https://api.example.com/rates?code=" + КодВалюты + "&date=" + Формат(Дата, "ДЛФ=YYYY-MM-DD");

Ответ = HTTPСервис.Получить(URL);

Если Ответ.КодСостояния = 200 Тогда

Данные = JSON.Прочитать(Ответ.ПолучитьТекст());

Курс = Данные.rate;

// Сохраняем в кэш

Запись = РегистрыСведений.КурсыВалют.СоздатьЗапись();

Запись.КодВалюты = КодВалюты;

Запись.Дата = Дата;

Запись.Курс = Курс;

Запись.Записать();

Возврат Курс;

Иначе

ВызватьИсключение "Не удалось получить курс валюты: " + Ответ.ПолучитьТекст();

КонецЕсли;

КонецФункции

💡

Всегда ограничивайте количество повторных попыток при ошибках соединения (например, 3 попытки с интервалом 5 секунд). Бесконечные ретраи могут заблокировать ваш IP в API.

Для защиты токенов API используйте ХранилищеОбщихНастроек:

// Сохранение токена

Хранилище = ХранилищеОбщихНастроек.Получить();

Хранилище.Вставить("API_Токен", "ваш_секретный_токен");

Хранилище.Записать();

// Чтение токена

Хранилище = ХранилищеОбщихНастроек.Получить();

Токен = Хранилище.Получить("API_Токен");

8. Примеры реальных интеграций

Рассмотрим несколько практических сценариев использования GET-запросов в :

  • 📦 Обновление справочника номенклатуры: запрос списка товаров с маркетплейса (например, Wildberries или Ozon)
  • 💰 Загрузка банковских выписок: получение транзакций по API банка (Сбер, Тинькофф, Точка)
  • 📊 Аналитика продаж: запрос данных из Google Analytics или Яндекс.Метрики
  • 🚚 Отслеживание доставки: получение статусов заказов от транспортных компаний (СДЭК, Boxberry)

Пример интеграции с API СДЭК для отслеживания посылки:

Функция ПолучитьСтатусДоставки(НомерЗаказа)

HTTPСервис = Новый HTTPСервис();

HTTPСервис.Заголовки.Вставить("Authorization", "Token ВАШ_ТОКЕН_SDEK");

URL = "https://api.cdek.ru/v2/orders/" + НомерЗаказа + "/statuses";

Ответ = HTTPСервис.Получить(URL);

Если Ответ.КодСостояния = 200 Тогда

Данные = JSON.Прочитать(Ответ.ПолучитьТекст());

Возврат Данные.statuses[0].code; // Например, "Delivered"

Иначе

ВызватьИсключение "Ошибка получения статуса: " + Ответ.ПолучитьТекст();

КонецЕсли;

КонецФункции

Для работы с OAuth 2.0 (например, API МойСклад или Bitrix24) потребуется сначала получить токен доступа, а затем использовать его в заголовках. Этот процесс обычно включает:

  1. Формирование URL авторизации с client_id и redirect_uri
  2. Обмен временного кода на токен (POST-запрос)
  3. Использование токена в последующих GET-запросах
Как обновить истёкший OAuth-токен?

Для обновления токена отправьте POST-запрос на эндпоинт /oauth/token с параметрами:

grant_type=refresh_token, refresh_token=ВАШ_REFRESH_TOKEN и client_id/secret.

Пример для МойСклад:

HTTPСервис.ОтправитьPOST("https://online.moysklad.ru/oauth/token",

"grant_type=refresh_token&refresh_token=XXX&client_id=YYY&client_secret=ZZZ");

Новый access_token будет в ответе в поле access_token.

Для сложных интеграций рекомендуем использовать готовые решения от партнёров , такие как:

  • 🔗 1С-Рарус: Интеграция с маркетплейсами
  • 🔗 Клеверенс: Мобильная интеграция
  • 🔗 Атлант: Обмен с банками
FAQ: Частые вопросы по GET-запросам в 1С

1. Можно ли отправить GET-запрос без HTTPS?

Да, но это небезопасно. Для тестовых целей можно использовать HTTP, но в продакшене всегда применяйте HTTPS.

2. Как передать массив параметров в GET?

В GET-запросах массивы передаются через повторяющиеся параметры, например:

?id=1&id=2&id=3. Некоторые API ожидают формат ?id[]=1&id[]=2.

3. Почему 1С ругается на сертификат при HTTPS-запросе?

Это происходит, если сервер использует самоподписанный сертификат. Решения:

  • Добавьте сертификат в доверенные на сервере .
  • Отключите проверку (небезопасно): HTTPСервис.ИгнорироватьОшибкиСертификата = Истина.

4. Как увеличить лимит времени на запрос?

По умолчанию тайм-аут — 60 секунд. Увеличьте его через свойство:

HTTPСервис.ТаймАут = 120000; // 2 минуты.

5. Можно ли отправить GET-запрос из отчёта или обработки?

Да, но учитывайте, что в тонком клиенте и веб-клиенте некоторые методы могут быть ограничены. Для надёжности выполняйте запросы на сервере (в модуле объекта или общем модуле с флагом Сервер).