IT-КУБиК-Сервис • Форум 1С
Абстрактный тёмно-синий фон с мягкими геометрическими линиями и оранжевыми акцентами, создающий технологичную атмосферу

Агрегатор публикаций с Инфостарта по 1С:Предприятие — обработки, расширения, конфигурации, интеграции и администрирование. Сообщество специалистов 1С.

Экспорт данных из 1С в JSON для внешней системы

Обмен между 1С и внешними сервисами часто строится вокруг формата JSON. Он подходит для REST API, микросервисов, интернет-магазинов, банковских шлюзов и корпоративных приложений: данные передаются в понятной структуре, а принимающая сторона может обработать их практически на любом языке программирования.

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

Задача Подход в 1С Важные нюансы
Подготовка данных Структура, соответствие или массив Не передавать внутренние объекты без преобразования
Формирование JSON ЗаписатьJSON() или JSON-сериализатор Контролировать типы, даты и пустые значения
Отправка HTTP-соединение и HTTP-запрос Указать Content-Type: application/json
Защита Токен, Basic Auth, сертификат Не хранить секреты в открытом коде
Контроль результата Код HTTP и тело ответа Фиксировать ошибки и идентификатор операции

Подготовка структуры обмена

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

Ссылочные значения обычно преобразуют в строковый идентификатор, код или уникальный идентификатор. Например, вместо ссылки на элемент справочника можно передать его УникальныйИдентификатор() и наименование. Для табличной части удобно использовать массив структур, где каждая строка содержит номенклатуру, количество, цену и ставку НДС.

Поля, которые стоит предусмотреть

Формирование JSON в 1С

Для создания JSON можно использовать объект ЗаписьJSON и глобальную функцию ЗаписатьJSON(). Пример простой функции выглядит так:

Функция ПолучитьJSONДокумента(ДокументОбъект) Экспорт

    Данные = Новый Структура;
    Данные.Вставить("id", Строка(ДокументОбъект.Ссылка.УникальныйИдентификатор()));
    Данные.Вставить("number", ДокументОбъект.Номер);
    Данные.Вставить("date", Формат(ДокументОбъект.Дата, "ДФ=yyyy-MM-ddTHH:mm:ss"));
    Данные.Вставить("amount", ДокументОбъект.СуммаДокумента);

    Строки = Новый Массив;
    Для Каждого СтрокаТовара Из ДокументОбъект.Товары Цикл
        Позиция = Новый Структура;
        Позиция.Вставить("item", Строка(СтрокаТовара.Номенклатура.УникальныйИдентификатор()));
        Позиция.Вставить("quantity", СтрокаТовара.Количество);
        Позиция.Вставить("price", СтрокаТовара.Цена);
        Строки.Добавить(Позиция);
    КонецЦикла;

    Данные.Вставить("items", Строки);

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

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

Конкретный формат даты нужно согласовать с документацией API. JSON не имеет отдельного универсального типа даты, поэтому одна система ожидает ISO 8601, другая — строку в локальном формате или отметку времени Unix. Числа также не следует превращать в текст без необходимости: принимающая сторона может использовать типизацию при разборе сообщения.

Отправка через HTTP-сервис

Для передачи сформированной строки применяется HTTPСоединение, HTTPЗапрос или соответствующие объекты встроенного языка. В запросе указывают адрес метода, HTTP-метод POST или PUT, тело сообщения и заголовок Content-Type.

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

Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Accept", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Запрос.УстановитьТелоИзСтроки(JSONСтрока, КодировкаТекста.UTF8);

Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);

Названия методов могут отличаться в зависимости от версии платформы и используемого шаблона кода. Для больших объемов данных предпочтительнее пакетная отправка: например, передавать по 100–500 объектов с отдельным идентификатором пакета. Это уменьшает количество сетевых соединений и упрощает повторную обработку.

Авторизация и защита канала

Внешний сервис может использовать токен доступа, Basic Authentication, OAuth 2.0, клиентский сертификат или подпись запроса. Секретные параметры лучше хранить в защищенном хранилище, константах с ограниченными правами или отдельном регистре сведений с контролем доступа. Пароли и ключи не должны попадать в тексты ошибок и технологический журнал.

Передачу следует выполнять по HTTPS с проверкой сертификата сервера. Если интеграция запускается регламентным заданием, учетную запись фонового задания ограничивают необходимыми правами. Для входящих вебхуков дополнительно проверяют подпись, IP-адрес отправителя или уникальность события.

Ошибки, повторы и журналирование

Ответ внешней системы нужно анализировать по HTTP-коду и содержимому тела. Коды 200 и 201 обычно означают успешную обработку, 400 указывает на ошибку данных, 401 или 403 — на проблему с авторизацией, а 429 и 5xx часто требуют повторной попытки через заданный интервал.

Проверки перед запуском

В журнале обмена полезно хранить дату попытки, объект 1С, размер сообщения, HTTP-код, текст ответа и статус обработки. Для повторов применяют очередь: запись получает состояние «Ожидает отправки», после успешного ответа переходит в «Передано», а после нескольких неудач — в «Ошибка». Важно предусмотреть идемпотентность, чтобы повторный запрос не создавал дубликат документа.

Когда выбрать готовый механизм интеграции

Если внешний сервис предоставляет полноценный REST API, обмен можно реализовать напрямую в расширении или общем модуле конфигурации. Расширение снижает количество изменений в типовом решении и упрощает обновление. Логику формирования данных при этом лучше отделять от транспорта: один модуль создает структуру, другой сериализует ее, третий выполняет HTTP-вызов.

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

Подготовьте спецификацию полей, реализуйте тестовый контур и проверьте обмен на реальных пограничных случаях: удаленные товары, нулевые суммы, длинные строки, повторная отправка и временная недоступность API. После этого переносите решение в рабочую базу и подключайте мониторинг, чтобы проблемы обнаруживались до появления расхождений в учете.