Как построить сложный запрос в JSON в 1С и исправить ошибку 405?

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

При интеграции 1С с внешними API часто возникает необходимость передавать сложные вложенные структуры данных. Одной из распространенных проблем является ошибка HTTP 405 (Method Not Allowed), а также сложности с корректной сериализацией данных. Давайте разберем, как правильно формировать JSON-запросы и на что обратить внимание при отладке.

Разбираем формирование сложного JSON

Для создания вложенных структур в 1С лучше всего использовать связку объектов Структура, Массив и ЗаписьJSON. В отличие от простой записи, ЗаписьJSON позволяет более гибко контролировать итоговый вид строки.

Пример формирования структуры типа Bundle (часто используемой в стандартах типа FHIR):


Bundle = Новый Структура;
entry = Новый Массив;
fullUrl = Новый Структура;
resource = Новый Структура;
identifier = Новый Массив;
system = Новый Структура;

Bundle.Вставить("resourceType", "Bundle");
Bundle.Вставить("type", "collection");
Bundle.Вставить("entry", entry);

fullUrl.Вставить("fullUrl", "3213215");
fullUrl.Вставить("resource", resource);

resource.Вставить("resourceType", "tract");
resource.Вставить("identifier", identifier);

system.Вставить("system", "codes");
system.Вставить("value", "123");

identifier.Добавить(system);
entry.Добавить(fullUrl);

// Сериализация в строку
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Bundle);
СтрокаДляЗапроса = ЗаписьJSON.Закрыть();

Важно помнить: если при отладке вы используете функцию Сообщить() или выводите JSON в поле формы, 1С может обрезать длинную строку. Это не означает, что данные сформированы неверно. Для проверки полного текста используйте ЗаписатьТекстовыйФайл().

Почему возникает ошибка HTTP 405?

Ошибка 405 Method Not Allowed означает, что сервер получил запрос, но не поддерживает указанный HTTP-метод для данного ресурса. Чаще всего причина кроется не в теле JSON, а в конфигурации HTTP-соединения:

  1. Неверный HTTP-метод: Проверьте, какой метод ожидает API (POST, PUT, PATCH или GET). Если API ждет PUT, а вы отправляете POST, сервер вернет 405.
  2. Адрес (URL): Убедитесь, что эндпоинт указан корректно. Часто требуется дописывать идентификатор ресурса в конец пути, например /api/v1/resource/123.
  3. Заголовки запроса: Если отсутствует или неверно указан заголовок Content-Type: application/json, сервер может отклонить запрос еще до анализа тела.

Как эффективно отлаживать запрос

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

  1. Сравнение с Postman: Если в Postman запрос работает, а из 1С нет, значит, 1С добавляет лишние заголовки или использует некорректный метод. Скопируйте RAW-тело из Postman и сравните его с результатом вашей функции ЗаписатьJSON.
  2. Анализ объекта HTTPЗапрос: Внимательно проверьте параметры объекта HTTPЗапрос. Установите заголовки вручную:

HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса, "utf-8");

Помните: Если вы используете структуру с типами данных 1С (ссылки, даты, GUID), их нужно предварительно преобразовать в строку с помощью функции Строка() или УникальныйИдентификатор(), так как стандартный сериализатор JSON может неверно обработать внутренние типы платформы.

Если проблема сохраняется, обязательно запросите логи у администратора сервера, к которому обращаетесь. Часто в логах сервера содержится детальная причина отказа, которая гораздо информативнее стандартного кода ошибки 405.

← На главную