Обмен OZON - 1С. Основные методы API

0. 51 07.01.21 13:00 Сейчас в теме
Обмен 1С - ОЗОН (ozon.ru). Обработка позволяет выполнить: 1. Загрузку списка товаров с сайта и информации о нём. 2. Обновить карточки, остатки и цены товара на сайте. 3. Загрузить заказы с сайта. 4. Создать документы "Заказ клиента" на основании данных OZON. 5. Подтвердить сборку заказа. 6. Отменить заказ. 7. Получить этикетку по указанному заказу. 8. Получение передаточных документов. Разработка служит, по большей части, как шаблон для дальнейшей интеграции в вашу торговую систему на платформе 1С для управляемых форм .

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. FreeArcher 110 08.01.21 05:52 Сейчас в теме
А выгрузка товаров на озон не реализована?
2. machnef 51 08.01.21 12:22 Сейчас в теме
(1) Не делал, механизм добавления схож с обновлением карточки товара.
3. user1121689 18.01.21 12:25 Сейчас в теме
А по какой документации вы делали запросы?
По этой документации https://docs.ozon.ru/api/seller#/info таких методов как у вас в обработке нет
/v1/product/import/stocks
/v1/product/list
v2/product/info/list
5. machnef 51 18.01.21 20:48 Сейчас в теме
(3) просто изначально начинал разработку с этой инструкции, когда ещё не было новой. И сам ОЗОН пишет про новую:
"Мы сейчас активно работаем над этой страницей, поэтому не все данные здесь актуальные.
Перейти к старой документации"
6. gam23400 18.01.21 21:45 Сейчас в теме
Вообще нужен автоматический обмен остатков, цен, получение заказов. Обработка как я понял ориентирована на ручной обмен.
- Предусмотрена ли в обработке какая либо работа в фоновом режиме?
- Если нет, в целом функционал реализован в форме, не в модуле объекта? (удобно ли будет переделать под фоновые задания)
7. machnef 51 19.01.21 09:20 Сейчас в теме
(6) Да, эта разработку сделал как универсальную, чтобы отразить основные методы взаимодействия. Есть у меня обработка, которая выполняет обмен в фоновом режиме и основной функционал реализован в модуле обработки. Но она заточена под конкретного заказчика, со своими особенностями: 1. Подключены характеристики товара, с отбором по доп. реквизиту; 2. Подключены несколько магазинов со своими ключами авторизации 3. и много прочего.
Могу скинуть вам её, если скачаете эту. Но не уверен, что от неё будет проще оттолкнуться. Она написана под измененную конфигурацию КА 2.0
8. machnef 51 19.01.21 09:35 Сейчас в теме
(6)
- Если нет, в целом функционал реализован в форме, не в модуле объекта? (удобно ли будет переделать под фоновые задания)


Там на самом деле не много усилий, чтобы перенести текст в модуль обработки.
1. Добавляем команды:
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("1.1.1.1");
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.3";
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	
	СтрокаКоманды = ПараметрыРегистрации.Команды.Добавить();
	СтрокаКоманды.Представление = НСтр("ru = 'Обмен ОЗОН (регл. задание)'");
	СтрокаКоманды.Идентификатор = "ОбменОЗОН_Регламент";
	СтрокаКоманды.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	СтрокаКоманды.ПоказыватьОповещение = Истина;
	
	СтрокаКоманды = ПараметрыРегистрации.Команды.Добавить();
	СтрокаКоманды.Представление = НСтр("ru = 'Обмен ОЗОН (регл. задание полный обмен)'");
	СтрокаКоманды.Идентификатор = "ОбменОЗОН_РегламентПолный";
	СтрокаКоманды.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	СтрокаКоманды.ПоказыватьОповещение = Истина;
	
	СтрокаКоманды = ПараметрыРегистрации.Команды.Добавить();
	СтрокаКоманды.Идентификатор = Новый УникальныйИдентификатор;
	СтрокаКоманды.Представление = "Обмен ОЗОН";
	СтрокаКоманды.ПоказыватьОповещение = Истина;
	СтрокаКоманды.Использование = "ОткрытиеФормы";
	
	Возврат ПараметрыРегистрации;	
КонецФункции
Показать

2. Прописываем процедуру выполнения команды:
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ПараметрыОбработки = Неопределено) Экспорт
	Если ИдентификаторКоманды = "ОбменОЗОН_Регламент" Тогда
		ПолныйОбмен = Ложь;
	Иначе
		ПолныйОбмен = Истина;
	КонецЕсли;
	ВыполнитьРегламентноеЗадание(ПолныйОбмен);
КонецПроцедуры
Показать


3. Создаем дерево значений, для обработки заказов:
&НаСервере
Процедура ВыполнитьРегламентноеЗадание(пПолныйОбмен=Ложь) Экспорт
	
	ЗагрузитьНастройкиФормы();
	
	МассивТиповЧисло = Новый Массив;
	МассивТиповЧисло.Добавить(Тип("Число"));
	КЧ = Новый КвалификаторыЧисла(30);
	ОписаниеЧисло = Новый ОписаниеТипов(МассивТиповЧисло,КЧ);
	
	МассивТиповСтрока = Новый Массив;
	МассивТиповСтрока.Добавить(Тип("Строка"));
	КС = Новый КвалификаторыСтроки(0);
	ОписаниеСтрока = Новый ОписаниеТипов(МассивТиповСтрока, КС);
	
	НовыеЗаказы.Колонки.Добавить("shipment_date", 	ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("order_id", 	 	ОписаниеЧисло);
	НовыеЗаказы.Колонки.Добавить("order_number",  	ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("posting_number", 	ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("status", 			ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("cancel_reason_id", ОписаниеЧисло);
	НовыеЗаказы.Колонки.Добавить("created_at", 		ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("in_process_at", 	ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("sku", 			ОписаниеЧисло);
	НовыеЗаказы.Колонки.Добавить("name", 			ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("quantity", 		ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("offer_id", 		ОписаниеСтрока);
	НовыеЗаказы.Колонки.Добавить("price", 			ОписаниеСтрока);
	
	//синзронизация товара
	
	Для Каждого ТорговаяПлощадка Из Api_Key Цикл
		ПолучениеСпискаТоваровС_ОЗОН_НаСервере(Истина, ТорговаяПлощадка.Значение);
		//создание документов "Заказ клиента" на основе полученных данных
		Если не ПолныйОбмен Тогда
			СоздатьЗаказыНаСервере(Истина, ТорговаяПлощадка.Значение);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать


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

&НаСервере
Процедура СохранитьНастройкиФормы()

	Настройки = Новый Структура;
	Настройки.Вставить("Host", 		Объект.Host );
	Настройки.Вставить("Client_Id", Объект.Client_Id );
	Настройки.Вставить("Api_Key", 	Объект.Api_Key );

	ДополнительнаяОбработкаОбъект = Параметры.ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
	ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(Настройки);
	ДополнительнаяОбработкаОбъект.Записать();		

КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНастройкиФормы()	
	Попытка	
		//Настройки = ХранилищеОбщихНастроек.Загрузит("Обработка.ОЗОН", "НастройкаОбмена",,"ПользовательОбмена");
		ХранилищеНастроек = Параметры.ДополнительнаяОбработкаСсылка.ХранилищеНастроек;
		Настройки = ХранилищеНастроек.Получить();		
		Если Настройки <> Неопределено Тогда
			ЗаполнитьЗначенияСвойств(Объект, Настройки, "Host, Client_Id, Api_Key");
		КонецЕсли;
	Исключение
			СписокСобытий = Новый СписокЗначений;
			СтруктураСобытия = Новый Структура;
			СтруктураСобытия.Вставить("ИмяСобытия", "Обмен ОЗОН (ошибка загрузки настроек)");
			СтруктураСобытия.Вставить("ПредставлениеУровня", "Ошибка");
			СтруктураСобытия.Вставить("Комментарий", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			СписокСобытий.Добавить(СтруктураСобытия);
			ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СписокСобытий);
	КонецПопытки;
КонецПроцедуры 
Показать


Переносим процедуры, которые будут выполняться в фоне из модуля формы в модуль обработки.

и вместо СообщитьПользователю(), при ошибках обмена, прописываем запись в журнал регистрации:
&НаСервере
Процедура ЗаписатьОтобразитьОшибку(ИмяСобытия, ТекстОшибки)
	Перем Ошибки;
	Если ЭтоФоновоеЗадание Тогда
		СписокСобытий = Новый СписокЗначений;
		СтруктураСобытия = Новый Структура;
		СтруктураСобытия.Вставить("ИмяСобытия", ИмяСобытия);
		СтруктураСобытия.Вставить("ПредставлениеУровня", "Ошибка");
		СтруктураСобытия.Вставить("Комментарий", ТекстОшибки);
		СписокСобытий.Добавить(СтруктураСобытия);
		ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СписокСобытий);
		врВызватьИсключение = Истина;
	Иначе
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "", ИмяСобытия + Символы.ПС + ТекстОшибки, "");
		ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки);
	КонецЕсли;
КонецПроцедуры
Показать
9. user1541569 09.02.21 07:04 Сейчас в теме
День добрый. Так все-таки на какой версии API сделан текущий обмен?
10. machnef 51 09.02.21 09:38 Сейчас в теме
11. user1540659 10.02.21 17:40 Сейчас в теме
Здравствуйте, подходит ли данный модуль для УНФ?
12. machnef 51 11.02.21 09:46 Сейчас в теме
(11) Здравствуйте точного ответа дать не могу, потому как нет УНФ для теста.
Обработка не является конечным продуктом, и нужны навыки программирования для доработки под ваши задачи.
13. jimli 18.02.21 13:17 Сейчас в теме
Подскажите, на УТ 11.4.11.93 будет работать?
14. machnef 51 18.02.21 13:46 Сейчас в теме
Протестировал на 11.4.6.174, работает! Думаю на вашем релизе проблем не возникнет.
15. jimli 26.02.21 13:15 Сейчас в теме
(14) Спасибо, решаю вопрос с добычей стартмани. Не хватает, не писатель я :-(
18. mrwhited 28.02.21 14:18 Сейчас в теме
скажите, а был опыт общения с ТП озона по апи?
к сожалению не нашел на просторах инета живого обсуждения озоновского апи.

у меня пара вопросов нарисовалось. Но такое ощущение, что до компетентных людей вопросы не доходят.
Пытался сделать обновление карточки товара. В доке написано, что обязательных полей нет, кроме айди.
ТП говорит, что метод update устарел и надо пользовать import для обновления карточки товара
с указанием вообще всех полей. Лютый треш какой-то.
И удаление товара. Дока говорит, что можно удалить товар без SKU. Но как избавить карточку от SKU непонятно

Не решали такие задачи?
19. machnef 51 28.02.21 17:05 Сейчас в теме
(18)Организация которой настраивал обмен решили добавлять, редактировать и удалять карточки непосредственно в личном кабинете, поэтому этот вопрос обошёл меня стороной.
Оставьте свое сообщение
Вопросы с вознаграждением