Автоматизация · 9 мин
Как загрузить данные из API в 1С
Как загрузить данные из внешнего API в 1С: HTTP-запросы, разбор JSON, обработка ошибок, регламентные задания и типичные ошибки интеграции.
Под «загрузкой API в 1С» обычно понимают получение данных из внешнего веб-сервиса по протоколу HTTP и запись их в объекты конфигурации: справочники, документы, регистры сведений. Типовые сценарии — курсы валют, остатки поставщика, статусы заказов из CRM, каталог товаров маркетплейса. Во всех случаях механика одинакова: сформировать запрос, выполнить его средствами платформы, разобрать ответ и записать данные.
В 1С:Предприятии 8.3 для этого есть встроенные объекты HTTPСоединение и HTTPЗапрос, а также механизм чтения JSON. Никаких внешних компонентов для базовой интеграции не требуется — всё делается кодом на встроенном языке. Если конфигурация типовая и дорабатывать её нельзя, остаются варианты через внешние обработки или промежуточные файлы обмена.
Что понадобится перед началом работы
До написания кода соберите три вещи. Во-первых, документацию целевого API: адрес (endpoint), метод запроса (GET, POST), формат авторизации и структуру ответа. Во-вторых, учётные данные для доступа — API-ключ, токен или логин с паролем. В-третьих, решите, куда в конфигурации будут попадать данные: в существующий справочник, в специально созданный регистр сведений или напрямую в документы.
Проверьте также сетевую доступность: сервер 1С (или клиентская машина, если код выполняется на клиенте) должен иметь доступ к адресу API. В корпоративных сетях исходящие запросы часто закрыты файрволом, и это выясняется именно на этапе первого тестового запроса.
Выполняем HTTP-запрос к API
Базовый код обращения к сервису выглядит так: создаётся объект соединения с указанием хоста, затем объект запроса с адресом ресурса и заголовками, после чего выполняется метод GET или POST. Пример для получения данных методом GET:
Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/stocks");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
Для незащищённого соединения (http) параметр защищённого соединения не указывается. При работе через прокси его параметры передаются в конструктор HTTPСоединение. Код состояния 200 означает успех; коды 401 и 403 — проблемы с авторизацией, 429 — превышение лимита запросов, 5xx — ошибки на стороне сервиса.
- 1Изучите документацию API: адрес, метод, заголовки, формат авторизации
- 2Проверьте запрос во внешнем инструменте (Postman, браузер) — так проще найти ошибку
- 3Напишите код соединения и запроса в 1С, выведите ответ в сообщение
- 4Разберите JSON и сопоставьте поля объектам конфигурации
- 5Добавьте обработку ошибок и запись в журнал регистрации
- 6Настройте регламентное задание для периодической загрузки
Разбираем ответ: JSON и XML
Большинство современных API возвращают JSON. В платформе есть штатный механизм: объект ЧтениеJSON с методом ПрочитатьJSON превращает строку в соответствие или структуру, с которой удобно работать в коде.
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстОтвета);
Данные = ПрочитатьJSON(Чтение); // Соответствие или Массив
Чтение.Закрыть();
Если сервис отдаёт XML, используются объекты ЧтениеXML или фабрика XDTO — последняя удобна, когда есть XSD-схема и структура строго типизирована. Перед записью в базу всегда проверяйте наличие ожидаемых полей: внешний сервис может изменить формат, и обращение к несуществующему ключу вызовет исключение.
Записываем данные в объекты 1С
После разбора ответа данные сопоставляются с объектами конфигурации. Ключевой принцип — поиск существующего элемента перед созданием нового, иначе каждая загрузка будет плодить дубли. Поиск обычно ведётся по коду, артикулу, внешнему идентификатору (для него полезно завести отдельный реквизит или регистр соответствия).
Для периодических данных вроде курсов валют или цен лучше подходят регистры сведений с измерением «Период» — они естественно хранят историю. Для каталогов — справочники. Запись больших объёмов выполняйте в транзакции, но не держите её открытой на всю пачку из тысяч элементов: разбивайте на порции, чтобы не блокировать работу пользователей.
Как проверить результат
Совпадает с количеством элементов в ответе API
Записей меньше — часть данных потерялась без ошибок в журнале
Данные обновляются, дублей не появляется
Каждый запуск создаёт новые элементы справочника
Есть информационные записи о начале и конце загрузки
Ошибки записываются молча или задание падает без следов
Настраиваем автоматическую загрузку по расписанию
Разовая загрузка запускается из обработки или кнопки в интерфейсе. Регулярная — через регламентное задание: в конфигураторе создаётся объект «Регламентное задание», указывается метод общего модуля (серверный, без параметров) и расписание. Для файловой базы задания выполняются при запущенном сеансе, для клиент-серверной — сервером 1С автоматически.
Учитывайте лимиты внешних API: многие сервисы ограничивают число запросов в минуту или в сутки. Не ставьте расписание чаще, чем реально обновляются данные на стороне сервиса, — это бесполезная нагрузка и риск блокировки ключа.
Альтернативные способы без доработки конфигурации
Если конфигурация на поддержке без возможности изменения или нет доступа к конфигуратору, есть обходные пути. Внешняя обработка (.epf) с кодом загрузки подключается через «Файл → Открыть» или механизм дополнительных отчётов и обработок БСП — конфигурация при этом не меняется. Расширение конфигурации позволяет добавить регламентное задание и общий модуль, не снимая основную конфигурацию с поддержки.
Ещё один вариант — промежуточный слой: скрипт на Python или PowerShell забирает данные из API и складывает их в CSV/XML-файл, а в 1С данные загружаются типовой обработкой загрузки табличных данных. Это удобно, когда интеграцией занимается специалист без глубокого знания встроенного языка 1С.
Сравнение вариантов
Полный контроль и регламентные задания, но усложняет обновление типовой конфигурации
Конфигурация остаётся на поддержке; ограничения — не все объекты можно добавлять
Быстрый старт без изменений в базе, но запуск вручную или через механизм дополнительных обработок
Не требует кода в 1С, но добавляет ручной шаг и зависимость от внешнего скрипта
Типичные ошибки и ограничения
Самая частая проблема — код выполняется на клиенте, а доступа в интернет у клиентской машины нет, либо наоборот: тонкий клиент не поддерживает нужный контекст. Размещайте интеграционный код в серверных общих модулях. Вторая типичная ошибка — игнорирование кодировки: кириллица в ответе превращается в нечитаемые символы, если не указать кодировку при получении тела ответа.
Также встречаются: отсутствие таймаута (зависшее соединение блокирует регламентное задание надолго), запись данных без транзакции (при сбое база остаётся в частично загруженном состоянии) и отсутствие журналирования — когда интеграция молча не работает неделями, и это обнаруживается только по устаревшим данным.
Частые вопросы
Можно ли загружать данные из API в 1С без программирования?
Частично. Если сервис умеет отдавать данные в CSV или Excel, файл можно скачать и загрузить типовой обработкой. Полноценная автоматическая интеграция без кода возможна только через готовые коннекторы, если они существуют для конкретного сервиса и вашей конфигурации.
Что делать, если API требует авторизацию по OAuth 2.0?
Потребуется двухшаговая схема: сначала запрос на получение токена (с логином, секретом и областью доступа), затем использование токена в заголовке основных запросов. Токены обычно ограничены по времени жизни — код должен обновлять их автоматически при получении ответа 401.
Работает ли HTTPСоединение в файловой базе?
Да, объект доступен независимо от режима работы базы. Отличие в выполнении регламентных заданий: в файловом режиме они запускаются только при работающем сеансе, поэтому для автоматической загрузки сеанс 1С должен быть открыт.
Как загрузить данные, если ответ API очень большой?
Используйте постраничную выгрузку (пагинацию), если API её поддерживает — параметры вроде page и limit. Получение тела ответа целиком в строку при больших объёмах расходует много памяти; альтернатива — получение ответа в поток и потоковое чтение JSON.
Куда смотреть, если загрузка не работает?
Сначала журнал регистрации: там видны ошибки регламентного задания и исключения кода. Затем проверьте тот же запрос во внешнем инструменте (Postman, curl) — так отделяются проблемы сети и авторизации от ошибок в коде 1С.
Что важно запомнить
Загрузка из API в 1С строится на связке HTTPСоединение + HTTPЗапрос + ПрочитатьJSON. Ключевые правила: код на сервере, поиск перед созданием, транзакции при записи, таймауты, журналирование и тест на копии базы перед запуском в рабочей среде.