К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как передать параметры в GET-запросе в 1С

Как передать параметры в GET-запросе из 1С: формирование строки запроса, кодирование кириллицы, HTTPСоединение, приём параметров в HTTP-сервисе. Примеры кода.

Передача параметров в GET-запросе — одна из самых частых задач при интеграции 1С с внешними сервисами: обращение к REST API, выгрузка данных на сайт, проверка статусов, обмен с веб-приложениями. В 1С параметры GET-запроса не передаются отдельным объектом — они добавляются прямо в адрес ресурса в виде строки вида ?ключ=значение&ключ2=значение2.

Основные сложности у разработчиков возникают с тремя вещами: корректным кодированием значений (кириллица, пробелы, спецсимволы), правильным разделением адреса сервера и относительного пути, а также приёмом параметров на стороне 1С, когда сама база выступает сервером через HTTP-сервис. Ниже разобраны оба направления — исходящие и входящие запросы.

Как устроены параметры в строке GET-запроса

GET-запрос не имеет тела, поэтому все данные передаются в адресной строке после знака вопроса. Формат строго определён: пары «имя=значение» соединяются амперсандом &. Например: /catalog/get?article=АБ123&quantity=5. Пробелы, кириллица, символы &, =, + и другие служебные знаки внутри значений должны быть закодированы, иначе сервер разберёт строку неправильно.

На практике это означает, что нельзя просто склеить строку конкатенацией, если значения содержат русские буквы или вводятся пользователем. Значение «Товар №5» в незакодированном виде сломает запрос, а сервер вернёт ошибку 400 или неверно интерпретирует данные.

Исходящий запрос: передача параметров через HTTPСоединение

Для обращения к внешнему сервису используются объекты HTTPСоединение и HTTPЗапрос. Параметры помещаются в относительный адрес ресурса, который передаётся в конструктор HTTPЗапрос. Базовый пример:

Соединение = Новый HTTPСоединение("api.example.ru", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);

АдресРесурса = "/v1/orders?status=new&limit=100";

Запрос = Новый HTTPЗапрос(АдресРесурса);

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

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

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

КонецЕсли;

Метод Получить() — это и есть GET-запрос. Все параметры уже находятся в АдресРесурса, поэтому отдельной коллекции параметров у объекта HTTPЗапрос нет. Если нужно передать несколько значений, удобно собирать строку программно, особенно когда набор параметров динамический.

Безопасная сборка строки параметров

Надёжный шаблон — собирать параметры через массив и соединять их, кодируя каждое значение:

Параметры = Новый Массив;

Параметры.Добавить("date=" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd"));

Параметры.Добавить("name=" + КодироватьСтроку(НаименованиеТовара,

СпособКодированияСтроки.КодированиеВURL));

АдресРесурса = "/v1/goods?" + СтрСоединить(Параметры, "&");

Кодирование значений: кириллица и спецсимволы

Функция КодироватьСтроку(Строка, СпособКодированияСтроки.КодированиеВURL) преобразует значение в безопасный для URL вид. Кодировать нужно только значения — имена параметров обычно состоят из латиницы и не требуют обработки. Кодировать всю строку целиком нельзя: знаки ?, = и & тоже будут закодированы, и запрос развалится.

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

Типичные ошибки
01
Склейка строки без кодирования значений — запрос ломается на первом же пробеле или кириллице
02
Кодирование всей строки целиком — символы ?, = и & превращаются в %3F и %3D, сервер не видит параметры
03
Передача даты в произвольном формате — внешний API ожидает строгий формат, обычно ISO (yyyy-MM-dd)
04
Дублирование знака вопроса при подстановке готового адреса — получается двойной ?? в URL

Приём параметров на стороне 1С: HTTP-сервисы

Когда 1С сама принимает GET-запросы, используется объект конфигурации «HTTP-сервис». В шаблоне URL создаётся шаблон, например /status, а параметры строки запроса доступны в обработчике через свойство Запрос.ПараметрыЗапроса — это соответствие, где ключи и значения уже раскодированы платформой.

Функция statusПолучить(Запрос)

НомерЗаказа = Запрос.ПараметрыЗапроса.Получить("number");

Если НомерЗаказа = Неопределено Тогда

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

Ответ.УстановитьТелоИзСтроки("Не указан параметр number");

Возврат Ответ;

КонецЕсли;

// поиск заказа и формирование ответа

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

Обязательно проверяйте наличие параметра через Получить() и сравнение с Неопределено: клиент может не передать параметр, и обращение напрямую вызовет ошибку. Все входные значения приходят строками — числа и даты нужно преобразовывать вручную с обработкой исключений.

Параметры в шаблоне URL и в строке запроса

Параметры можно передавать двумя способами: в самом пути (/orders/АБ-123, доступ через Запрос.ПараметрыURL) и в строке запроса (/orders?number=АБ-123, доступ через ПараметрыЗапроса). Первый вариант уместен для идентификаторов ресурса, второй — для фильтров, флагов и необязательных настроек.

Сравнение вариантов

Параметры в пути (ПараметрыURL)

Подходит для обязательных идентификаторов ресурса; требует описания переменных в шаблоне URL

Параметры в строке запроса (ПараметрыЗапроса)

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

Проверка результата и отладка

Проверять исходящий запрос удобнее всего, выводя итоговый адрес ресурса в журнал регистрации или сообщение перед отправкой — так сразу видно, корректно ли закодированы значения. Код состояния ответа — первый индикатор: 200 означает успех, 400 обычно указывает на неверные параметры, 404 — на неправильный адрес ресурса.

Контрольные точки

Как проверить результат

Строка адреса перед отправкой
Норма

Один знак ?, параметры разделены &, значения закодированы

Тревожный признак

Двойной ??, незакодированные пробелы и кириллица в значениях

Код состояния ответа
Норма

200 (или другой успешный код API)

Тревожный признак

400 — ошибка в параметрах, 401/403 — проблема с авторизацией

Приём параметров в HTTP-сервисе
Норма

ПараметрыЗапроса.Получить() возвращает ожидаемое значение

Тревожный признак

Неопределено при переданном параметре — проверьте имя и публикацию сервиса

Для отладки входящих HTTP-сервисов полезно временно записывать все полученные параметры в журнал регистрации. Это позволяет увидеть, как именно внешняя система формирует запрос, — расхождения в именах параметров и регистре букв встречаются часто.

Частые вопросы

Можно ли передать массив значений в GET-запросе из 1С?

Строгого стандарта нет. Распространённые подходы: повторение параметра (id=1&id=2&id=3), значения через запятую (ids=1,2,3) или индексы (id[0]=1). Выбор зависит от того, как принимающий сервер разбирает строку — уточняйте в документации API. В HTTP-сервисе 1С повторяющиеся параметры доступны как массив значений в соответствии ПараметрыЗапроса.

Почему сервер возвращает 400, хотя параметры указаны?

Чаще всего причина в незакодированных спецсимволах в значениях или неверном формате даты/числа. Выведите итоговый адрес ресурса перед отправкой и сравните с рабочим примером из документации API. Также проверьте, не потерян ли знак вопроса перед первым параметром.

Как передать дату в параметре GET-запроса?

Преобразуйте дату в строку заранее в формате, который ожидает сервер, обычно ISO: Формат(Дата, "ДФ=yyyy-MM-dd"). Для даты со временем используйте формат вида yyyy-MM-ddTHH:mm:ss. Не передавайте дату в представлении по умолчанию — оно зависит от региональных настроек и содержит пробелы и точки.

Чем отличаются ПараметрыURL и ПараметрыЗапроса в HTTP-сервисе?

ПараметрыURL — это переменные, объявленные в шаблоне URL самого сервиса (часть пути). ПараметрыЗапроса — пары «ключ=значение» после знака вопроса в адресе. Первые подходят для идентификаторов, вторые — для необязательных фильтров и настроек.

Есть ли ограничение на длину GET-запроса в 1С?

Сама платформа жёсткого лимита не накладывает, но веб-серверы (IIS, Apache) и прокси ограничивают длину URL — типичные значения составляют несколько килобайт. Если нужно передать большой объём данных, используйте POST-запрос с телом вместо GET.

Как передать булево значение в параметре?

Булево передаётся строкой — чаще всего true/false или 1/0, в зависимости от ожиданий API. На стороне приёма в 1С сравнивайте строку явно, например Значение = "true", так как автоматического преобразования типов не происходит.

Итог

Что важно запомнить

Параметры GET-запроса в 1С добавляются в строку адреса ресурса после знака вопроса. Значения с кириллицей и спецсимволами кодируются через КодироватьСтроку по отдельности. На стороне приёма параметры читаются из Запрос.ПараметрыЗапроса с обязательной проверкой на Неопределено. Чувствительные данные в GET не передают — для них используют заголовки или POST.