Как передать массив контрагентов в одном POST-запросе к сервису DaData?

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

При работе с внешними API, такими как сервис DaData, у разработчиков часто возникает желание оптимизировать взаимодействие, отправив список данных (например, массив ИНН контрагентов) одним запросом. Однако, столкнувшись с реализацией, важно понимать архитектурные особенности используемого метода. Давайте разберем, почему «пакетный» запрос может не работать и как правильно организовать процесс проверки контрагентов в 1С.

Анализ проблемы: ограничение API

Автор вопроса пытался сформировать массив данных в формате JSON для передачи в метод /suggest/party. Ожидалось, что сервер примет список и вернет результат для каждого элемента. Однако, согласно документации и специфике работы метода подсказок, сервис DaData разработан для получения данных по одному поисковому запросу за раз.

Метод /suggest/party предназначен для интерактивного поиска (автодополнения), когда пользователь вводит часть названия или ИНН. Он не предназначен для пакетной обработки справочников. Попытки отправить JSON-массив будут либо проигнорированы, либо приведут к ошибке разбора запроса на стороне сервера, так как структура API ожидает конкретное поле query с одной строкой, а не массив объектов.

Решение: циклическая обработка запросов

Так как пакетного метода для этой задачи нет, единственно верным архитектурным решением является выполнение запросов в цикле. Давайте рассмотрим, как грамотно реализовать этот алгоритм в 1С.

  1. Подготовка данных: Получите список контрагентов из вашей информационной базы, например, с помощью Запрос к справочнику Контрагенты.
  2. Итерация: Пройдите по списку в цикле Для Каждого.
  3. Формирование JSON: Для каждого итерационного шага формируйте корректный JSON-объект, содержащий только один ИНН.
  4. Отправка: Используйте объект HTTPСоединение и HTTPRequest для каждого вызова.

Пример формирования структуры для одного запроса:


СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("query", КонтрагентИНН);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
СтрокаJSON = ЗаписьJSON.Закрыть();

Важные рекомендации при массовой проверке

Работа с внешними сервисами через цикл требует соблюдения ряда правил, чтобы избежать блокировок со стороны провайдера API и зависаний системы 1С:

Подводим итоги

Попытка отправить массив контрагентов в одном POST-запросе в данном случае была ошибочной, так как метод suggest работает только с одиночными строками запроса. Использование циклической обработки является штатным методом решения такой задачи. При этом, чтобы система работала надежно, обязательно учитывайте ограничения пропускной способности API, выносите выполнение запросов в фоновый режим и не забывайте про обработку исключительных ситуаций. Это обеспечит стабильную интеграцию вашей базы 1С с сервисом DaData.

← На главную