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

Интеграция 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 (секретный ключ).

Где взять ключи в личном кабинете?

  1. Войдите в личный кабинет продавца Ozon Seller;
  2. Перейдите в раздел «Настройки» → «Seller API»;
  3. Нажмите «Сгенерировать ключ» и выберите тип доступа (для интеграции с 1С обычно достаточно прав «Admin read only» либо полного доступа при необходимости подтверждать отправления);
  4. Скопируйте 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

Читайте также