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

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

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. FreeArcher 110 08.01.21 05:52 Сейчас в теме
А выгрузка товаров на озон не реализована?
2. machneff 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. machneff 18.01.21 20:48 Сейчас в теме
(3) просто изначально начинал разработку с этой инструкции, когда ещё не было новой. И сам ОЗОН пишет про новую:
"Мы сейчас активно работаем над этой страницей, поэтому не все данные здесь актуальные.
Перейти к старой документации"
6. gam23400 18.01.21 21:45 Сейчас в теме
Вообще нужен автоматический обмен остатков, цен, получение заказов. Обработка как я понял ориентирована на ручной обмен.
- Предусмотрена ли в обработке какая либо работа в фоновом режиме?
- Если нет, в целом функционал реализован в форме, не в модуле объекта? (удобно ли будет переделать под фоновые задания)
7. machneff 19.01.21 09:20 Сейчас в теме
(6) Да, эта разработку сделал как универсальную, чтобы отразить основные методы взаимодействия. Есть у меня обработка, которая выполняет обмен в фоновом режиме и основной функционал реализован в модуле обработки. Но она заточена под конкретного заказчика, со своими особенностями: 1. Подключены характеристики товара, с отбором по доп. реквизиту; 2. Подключены несколько магазинов со своими ключами авторизации 3. и много прочего.
Могу скинуть вам её, если скачаете эту. Но не уверен, что от неё будет проще оттолкнуться. Она написана под измененную конфигурацию КА 2.0
8. machneff 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. machneff 09.02.21 09:38 Сейчас в теме
11. user1540659 10.02.21 17:40 Сейчас в теме
Здравствуйте, подходит ли данный модуль для УНФ?
12. machneff 11.02.21 09:46 Сейчас в теме
(11) Здравствуйте точного ответа дать не могу, потому как нет УНФ для теста.
Обработка не является конечным продуктом, и нужны навыки программирования для доработки под ваши задачи.
13. jimli 18.02.21 13:17 Сейчас в теме
Подскажите, на УТ 11.4.11.93 будет работать?
14. machneff 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. machneff 28.02.21 17:05 Сейчас в теме
(18)Организация которой настраивал обмен решили добавлять, редактировать и удалять карточки непосредственно в личном кабинете, поэтому этот вопрос обошёл меня стороной.
Оставьте свое сообщение
Вопросы с вознаграждением