Интеграция 1С:ERP с Ozon через API за 5 шагов в 2026

Коротко: интеграция 1С:ERP с Ozon строится на Seller API v3 и состоит из 5 шагов: получение Client-Id и Api-Key в личном кабинете продавца, регистрация HTTP-сервисов в 1С, настройка регламентных заданий для обмена, реализация загрузки заказов (метод /v3/posting/fbs/list) и выгрузки остатков и цен. Базовая настройка занимает 3-5 рабочих дней, обмен заказами выполняется каждые 5-15 минут.
Что такое Ozon Seller API и зачем интегрировать его с 1С:ERP?
Ozon Seller API — это программный интерфейс маркетплейса, который позволяет автоматизировать обмен данными между учётной системой продавца и площадкой. В 2026 году ручное ведение продаж на Ozon через личный кабинет при обороте от нескольких десятков заказов в день становится практически невозможным: менеджеры не успевают подтверждать отправления, остатки расходятся, цены не синхронизируются с акциями.
Интеграция с задачи по 1С:ERP решает три ключевые задачи:
- Загрузка заказов — новые отправления FBS/FBO автоматически попадают в 1С как документы реализации или заказы клиента;
- Обновление остатков — данные о свободных остатках со складов передаются на Ozon, исключая продажу отсутствующего товара;
- Синхронизация цен — актуальные цены из 1С выгружаются на площадку с учётом наценок и акций.
В отличие от типовых решений вроде «1С:Управление торговлей. Модуль для маркетплейсов», прямая интеграция через API даёт полный контроль над логикой обмена и не требует промежуточных сервисов.
Важно: Ozon регулярно обновляет версии API. На момент 2026 года актуальны методы v3 и v4. Перед внедрением сверяйтесь с официальной документацией docs.ozon.ru/api/seller.
Шаг 1. Как получить доступ к API Ozon: Client-Id и Api-Key?
Любая интеграция начинается с получения учётных данных. Для работы с Seller API нужны два параметра — Client-Id (идентификатор продавца) и Api-Key (секретный ключ).
Где взять ключи в личном кабинете?
- Войдите в личный кабинет продавца Ozon Seller;
- Перейдите в раздел «Настройки» → «Seller API»;
- Нажмите «Сгенерировать ключ» и выберите тип доступа (для интеграции с 1С обычно достаточно прав «Admin read only» либо полного доступа при необходимости подтверждать отправления);
- Скопируйте
Client-Idи сгенерированныйApi-Key— последний показывается только один раз.
Эти данные нужно сохранить в 1С в защищённом виде. Рекомендуется создать справочник «НастройкиМаркетплейсов» или использовать константы с хранением в безопасном хранилище.
// Сохранение ключей доступа в безопасное хранилище
Процедура СохранитьКлючиOzon(ClientId, ApiKey) Экспорт
ДанныеДоступа = Новый Структура;
ДанныеДоступа.Вставить("ClientId", ClientId);
ДанныеДоступа.Вставить("ApiKey", ApiKey);
// Запись в безопасное хранилище общих данных
УстановитьБезопасноеХранилищеДанных("ИнтеграцияOzon", "Доступ", ДанныеДоступа);
КонецПроцедуры
// Чтение ключей доступа
Функция ПолучитьКлючиOzon() Экспорт
Возврат ПолучитьИзБезопасногоХранилища("ИнтеграцияOzon", "Доступ");
КонецФункцииШаг 2. Как настроить HTTP-соединение с Ozon в 1С:ERP?
Все запросы к Ozon API выполняются по протоколу HTTPS на адрес api-seller.ozon.ru. В заголовках каждого запроса передаются Client-Id и Api-Key, а тело запроса формируется в формате JSON.
Базовая функция отправки запроса
Создадим универсальную функцию, которая будет использоваться для всех методов API. Она инкапсулирует логику установки соединения, заголовков и обработки ответа.
// Универсальная функция выполнения POST-запроса к Ozon API
Функция ВыполнитьЗапросOzon(МетодAPI, ПараметрыЗапроса) Экспорт
КлючиДоступа = ПолучитьКлючиOzon();
Если КлючиДоступа = Неопределено Тогда
ВызватьИсключение "Не настроены ключи доступа к Ozon API";
КонецЕсли;
// Настройка защищённого соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение(
"api-seller.ozon.ru",
443,
,
,
,
30,
ЗащищенноеСоединение);
// Формирование тела запроса в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
ТелоЗапроса = ЗаписьJSON.Закрыть();
// Заголовки авторизации
Заголовки = Новый Соответствие;
Заголовки.Вставить("Client-Id", КлючиДоступа.ClientId);
Заголовки.Вставить("Api-Key", КлючиДоступа.ApiKey);
Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос = Новый HTTPЗапрос(МетодAPI, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
// Выполнение запроса
Попытка
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
ЗаписьЖурналаРегистрации("ИнтеграцияOzon.Ошибка",
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат Неопределено;
КонецПопытки;
// Разбор ответа
Результат = Новый Структура;
Результат.Вставить("КодСостояния", HTTPОтвет.КодСостояния);
Результат.Вставить("Тело", HTTPОтвет.ПолучитьТелоКакСтроку());
Возврат Результат;
КонецФункцииОбратите внимание на использование ЗащищенноеСоединениеOpenSSL() — без него запросы по HTTPS работать не будут. Таймаут в 30 секунд подобран эмпирически: при больших объёмах данных его можно увеличить.
Шаг 3. Как загружать заказы из Ozon в 1С:ERP?
Заказы (в терминологии Ozon — «отправления», postings) загружаются методом /v3/posting/fbs/list для схемы FBS (продажа со склада продавца) и /v2/posting/fbo/list для FBO (продажа со склада Ozon).
Какой формат запроса заказов использовать?
Запрос принимает фильтр по дате и статусу. Для регулярного обмена удобно запрашивать заказы за последние сутки со статусом «awaiting_packaging» (ожидают сборки) и «awaiting_deliver» (ожидают отгрузки).
// Загрузка новых отправлений FBS из Ozon
Функция ПолучитьЗаказыOzon(ДатаНачала, ДатаОкончания) Экспорт
Фильтр = Новый Структура;
Фильтр.Вставить("since", Формат(ДатаНачала, "ДФ=yyyy-MM-ddTHH:mm:ss.000Z"));
Фильтр.Вставить("to", Формат(ДатаОкончания, "ДФ=yyyy-MM-ddTHH:mm:ss.000Z"));
Фильтр.Вставить("status", "awaiting_packaging");
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("dir", "ASC");
ПараметрыЗапроса.Вставить("filter", Фильтр);
ПараметрыЗапроса.Вставить("limit", 1000);
ПараметрыЗапроса.Вставить("offset", 0);
Ответ = ВыполнитьЗапросOzon("/v3/posting/fbs/list", ПараметрыЗапроса);
Если Ответ = Неопределено ИЛИ Ответ.КодСостояния <> 200 Тогда
Возврат Новый Массив;
КонецЕсли;
// Разбор JSON-ответа
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.Тело);
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат ДанныеОтвета.result.postings;
КонецФункцииКак создать документ реализации на основе заказа?
Каждое отправление содержит номер (posting_number), список товаров с артикулами (offer_id) и количеством. На основе этих данных формируем документ «ЗаказКлиента» или «РеализацияТоваровУслуг».
// Создание заказа клиента из данных отправления Ozon
Процедура СоздатьЗаказИзОтправления(ДанныеОтправления) Экспорт
НомерОтправления = ДанныеОтправления.posting_number;
// Проверка на дубль — не создаём заказ повторно
Если ЗаказСОтправлениемСуществует(НомерОтправления) Тогда
Возврат;
КонецЕсли;
ЗаказКлиента = Документы.ЗаказКлиента.СоздатьДокумент();
ЗаказКлиента.Дата = ТекущаяДатаСеанса();
ЗаказКлиента.Партнер = ПолучитьПартнераOzon();
ЗаказКлиента.Контрагент = ПолучитьКонтрагентаOzon();
ЗаказКлиента.НомерОтправленияМаркетплейс = НомерОтправления;
ЗаказКлиента.Организация = ПолучитьОрганизациюПоУмолчанию();
// Заполнение товаров
Для Каждого ТоварОтправления Из ДанныеОтправления.products Цикл
Номенклатура = НайтиНоменклатуруПоАртикулу(ТоварОтправления.offer_id);
Если Номенклатура = Неопределено Тогда
ЗаписьЖурналаРегистрации("ИнтеграцияOzon",
УровеньЖурналаРегистрации.Предупреждение,,,
"Не найдена номенклатура с артикулом: " + ТоварОтправления.offer_id);
Продолжить;
КонецЕсли;
НоваяСтрока = ЗаказКлиента.Товары.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = ТоварОтправления.quantity;
НоваяСтрока.Цена = Число(ТоварОтправления.price);
КонецЦикла;
Попытка
ЗаказКлиента.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ЗаписьЖурналаРегистрации("ИнтеграцияOzon.Ошибка",
УровеньЖурналаРегистрации.Ошибка,,,
"Ошибка проведения заказа " + НомерОтправления + ": "
+ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедурыСвязка артикула Ozon (offer_id) с номенклатурой 1С — критичный момент. Рекомендуется хранить артикул маркетплейса в отдельном реквизите справочника «Номенклатура» или в регистре сведений «АртикулыНоменклатурыМаркетплейсов».
Шаг 4. Как выгружать остатки товаров на Ozon?
Передача остатков выполняется методом /v2/products/stocks. Ozon ограничивает количество товаров в одном запросе — до 100 позиций, поэтому при большом ассортименте данные отправляются пакетами.
Откуда брать данные об остатках в ERP?
В 1С:ERP свободные остатки получают из регистра накопления «ТоварыНаСкладах» с учётом резервов. Для маркетплейса важно передавать именно доступное к продаже количество.
// Получение свободных остатков для выгрузки на Ozon
Функция ПолучитьОстаткиДляOzon(Склад) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АртикулыМаркетплейсов.АртикулOzon КАК АртикулOzon,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток
|ИЗ
| РегистрСведений.АртикулыНоменклатурыМаркетплейсов КАК АртикулыМаркетплейсов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,
| Склад = &Склад) КАК ТоварыНаСкладахОстатки
| ПО АртикулыМаркетплейсов.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
|ГДЕ
| АртикулыМаркетплейсов.АртикулOzon <> """"";
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
МассивОстатков = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ЭлементОстатка = Новый Структура;
ЭлементОстатка.Вставить("offer_id", ВыборкаДетальныеЗаписи.АртикулOzon);
ЭлементОстатка.Вставить("stock", ВыборкаДетальныеЗаписи.Остаток);
ЭлементОстатка.Вставить("warehouse_id", ПолучитьИдСкладаOzon(Склад));
МассивОстатков.Добавить(ЭлементОстатка);
КонецЦикла;
Возврат МассивОстатков;
КонецФункции
// Отправка остатков пакетами по 100 позиций
Процедура ВыгрузитьОстаткиOzon(Склад) Экспорт
ВсеОстатки = ПолучитьОстаткиДляOzon(Склад);
РазмерПакета = 100;
Для НомерПакета = 0 По Цел(ВсеОстатки.Количество() / РазмерПакета) Цикл
ТекущийПакет = Новый Массив;
Для Индекс = (НомерПакета * РазмерПакета) По вычислить минимум через условие, т.к. встроенной функции Мин() в 1С нет Цикл
ТекущийПакет.Добавить(ВсеОстатки[Индекс]);
КонецЦикла;
Если ТекущийПакет.Количество() = 0 Тогда
Прервать;
КонецЕсли;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("stocks", ТекущийПакет);
ВыполнитьЗапросOzon("/v2/products/stocks", ПараметрыЗапроса);
КонецЦикла;
КонецПроцедуры
Найдите специалиста для решения этой задачи на koderion.ru