База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать отчет по ежедневным продажам на OZON, РВБ и Яндекс.Маркете через API › Ответ в теме: Как создать отчет по ежедневным продажам на OZON, РВБ и Яндекс.Маркете через API
Для получения ежедневных продаж с маркетплейсов ОЗОН, Wildberries (РВБ) и Яндекс.Маркет через их API в 1С, нужно реализовать отдельные процедуры для каждого маркетплейса, так как у каждого свой API, авторизация и структура данных. Ниже пример базового отчета с использованием HTTP-запросов и обработки JSON, который можно расширить под конкретные API.
—
### Общие рекомендации
— Для каждого маркетплейса нужно получить API ключи и токены.
— Запросы делать с учетом ограничений API (периоды, лимиты).
— Обрабатывать пагинацию, если есть.
— Сохранять данные в регистр сведений или временную таблицу для отчета.
— Использовать HTTPСоединение и HTTPЗапрос для вызова API.
— Парсить JSON через ЧтениеJSON.
—
### Пример структуры отчета (упрощенный)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
&НаКлиенте Перем HTTPКодУспеха = 200; Перем ТаймаутЗапроса = 200; Процедура СформироватьОтчет(ДатаНачала, ДатаОкончания) Экспорт // Получаем данные с каждого маркетплейса ПродажиОзон = ПолучитьПродажиОзон(ДатаНачала, ДатаОкончания); // Обработка и вывод данных (например, заполнение табличного документа) ТабДок = Новый ТабличныйДокумент; ТабДок.Колонки.Добавить("Дата"); ТабДок.Колонки.Добавить("Маркетплейс"); ТабДок.Колонки.Добавить("Артикул"); ТабДок.Колонки.Добавить("Количество"); ТабДок.Колонки.Добавить("Сумма"); // Заполняем из ОЗОН Для Каждого Строка Из ПродажиОзон Цикл НоваяСтрока = ТабДок.ДобавитьСтроку(); НоваяСтрока["Дата"] = Строка.Дата; НоваяСтрока["Маркетплейс"] = "OZON"; НоваяСтрока["Артикул"] = Строка.Артикул; НоваяСтрока["Количество"] = Строка.Количество; НоваяСтрока["Сумма"] = Строка.Сумма; КонецЦикла; // Вывод отчета Форма = ПолучитьОбщуюФорму("ФормаТабличногоДокумента"); Форма.ТабличныйДокумент = ТабДок; Форма.Открыть(); КонецПроцедуры // --- Функции получения данных --- // Получение продаж с OZON Функция ПолучитьПродажиОзон(ДатаНачала, ДатаОкончания) Экспорт Результат = Новый Массив; // Настройки API ApiKey = "<Ваш API ключ OZON>"; URL = "https://api-seller.ozon.ru/v2/posting/fbo/list"; // пример метода Заголовки = Новый Соответствие; Заголовки.Вставить("Client-Id", ApiKey); Заголовки.Вставить("Api-Key", ApiKey); // Формируем тело запроса с фильтром по дате ТелоЗапроса = Новый Структура; ТелоЗапроса.Вставить("dir", "asc"); ТелоЗапроса.Вставить("filter", Новый Структура("since, to", ДатаНачала, ДатаОкончания)); ТелоЗапроса.Вставить("limit", 100); ТелоЗапроса.Вставить("offset", 0); // Реализация пагинации и вызова POST запроса с таймаутом Повтор Ответ = ВыполнитьHttpPost(URL, ТелоЗапроса, Заголовки); Если Ответ.КодСостояния <> HTTPКодУспеха Тогда ВызватьИсключение "Ошибка получения данных OZON: " + Ответ.ПолучитьТелоКакСтроку(); КонецЕсли; ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ТекстОтвета); Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); ЧтениеJSON.Закрыть(); Для Каждого Элемент Из Данные.postings Цикл НоваяСтрока = Новый Структура; НоваяСтрока.Вставить("Дата", Элемент.shipmentDate); НоваяСтрока.Вставить("Артикул", Элемент.offerId); НоваяСтрока.Вставить("Количество", Элемент.quantity); НоваяСтрока.Вставить("Сумма", Элемент.price); Результат.Добавить(НоваяСтрока); КонецЦикла; ТелоЗапроса.offset = ТелоЗапроса.offset + ТелоЗапроса.limit; Всего = Данные.paging.total; Пока ТелоЗапроса.offset < Всего; Возврат Результат; КонецФункции // Получение продаж с Wildberries (РВБ) Функция ПолучитьПродажиРВБ(ДатаНачала, ДатаОкончания) Экспорт Результат = Новый Массив; КлючАПИ = "<Ваш ключ Wildberries>"; Хост = "statistics-api.wildberries.ru"; ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; СоединениеHttp = Новый HTTPСоединение(Хост, , , , , ТаймаутЗапроса, ЗащищенноеСоединение); Заголовки = Новый Соответствие; Заголовки.Вставить("Authorization", КлючАПИ); Заголовки.Вставить("Content-Type", "application/json"); АдресРесурса = "api/v5/supplier/reportDetailByPeriod?dateFrom=" + Формат(ДатаНачала, "ДФ=гггг-ММ-ддT00:00:00") + "&dateTo=" + Формат(ДатаОкончания, "ДФ=гггг-ММ-ддT23:59:59") + "&limit=100000"; ЗапросHttp = Новый HTTPЗапрос(АдресРесурса, Заголовки); ОтветHttp = СоединениеHttp.Получить(ЗапросHttp); Если ОтветHttp.КодСостояния = HTTPКодУспеха Тогда ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветHttp.ПолучитьТелоКакСтроку()); МассивТранзакций = ПрочитатьJSON(ЧтениеJSON, Ложь); ЧтениеJSON.Закрыть(); Для Каждого Транзакция Из МассивТранзакций Цикл НоваяСтрока = Новый Структура; НоваяСтрока.Вставить("Дата", Транзакция.date); НоваяСтрока.Вставить("Артикул", Транзакция.supplier_article); НоваяСтрока.Вставить("Количество", Транзакция.quantity); НоваяСтрока.Вставить("Сумма", Транзакция.totalPrice); Результат.Добавить(НоваяСтрока); КонецЦикла; Иначе ВызватьИсключение "Ошибка получения данных Wildberries: " + ОтветHttp.ПолучитьТелоКакСтроку(); КонецЕсли; Возврат Результат; КонецФункции // Получение продаж с Яндекс.Маркет Функция ПолучитьПродажиЯндекс(ДатаНачала, ДатаОкончания) Экспорт Результат = Новый Массив; ApiToken = "<Ваш токен Яндекс.Маркет>"; URL = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders.json"; Заголовки = Новый Соответствие; Заголовки.Вставить("Authorization", "OAuth " + ApiToken); Параметры = Новый Соответствие; Параметры.Вставить("fromDate", Формат(ДатаНачала, "ДФ=гггг-ММ-ддT00:00:00+00:00")); Параметры.Вставить("toDate", Формат(ДатаОкончания, "ДФ=гггг-ММ-ддT23:59:59+00:00")); Адрес = URL + "?fromDate=" + Параметры.fromDate + "&toDate=" + Параметры.toDate; Соединение = Новый HTTPСоединение("api.partner.market.yandex.ru", , , , , ТаймаутЗапроса); Запрос = Новый HTTPЗапрос(Адрес, Заголовки); Ответ = Соединение.Получить(Запрос); Если Ответ.КодСостояния = HTTPКодУспеха Тогда ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); ЧтениеJSON.Закрыть(); Для Каждого Заказ Из Данные.orders Цикл НоваяСтрока = Новый Структура; НоваяСтрока.Вставить("Дата", Заказ.creationDate); НоваяСтрока.Вставить("Артикул", Заказ.items[0].offerId); НоваяСтрока.Вставить("Количество", Заказ.items[0].count); НоваяСтрока.Вставить("Сумма", Заказ.total.sum); Результат.Добавить(НоваяСтрока); КонецЦикла; Иначе ВызватьИсключение "Ошибка получения данных Яндекс.Маркет: " + Ответ.ПолучитьТелоКакСтроку(); КонецЕсли; Возврат Результат; КонецФункции // Вспомогательная функция для POST запроса (пример) Функция ВыполнитьHttpPost(URL, Тело, Заголовки) Экспорт Соединение = Новый HTTPСоединение(НайтиХостПоURL(URL), , , , , ТаймаутЗапроса); Запрос = Новый HTTPЗапрос(URL, Заголовки); ТелоJSON = ЗаписатьJSON(Тело); Запрос.УстановитьТелоИзСтроки(ТелоJSON, "application/json"); Ответ = Соединение.Отправить(Запрос, "POST"); Если Ответ.КодСостояния <> HTTPКодУспеха Тогда ВызватьИсключение "Ошибка HTTP POST: " + Ответ.КодСостояния + " " + Ответ.ПолучитьТелоКакСтроку(); КонецЕсли; Возврат Ответ; КонецФункции |
—
### Важные моменты
— Для каждого маркетплейса нужно изучить актуальную документацию API, так как методы, параметры и форматы могут меняться.
— Для Wildberries пример взят из их официального API статистики (v5).
— Для OZON и Яндекс.Маркет нужно реализовать авторизацию и пагинацию согласно их API.
— Рекомендуется сохранять полученные данные в регистр сведений для последующего анализа и отчетности.
— Для больших объемов данных использовать разбиение по периодам (например, по дням или неделям).
— Обработка ошибок и логирование обязательны для стабильной работы.
—
### Рекомендации по документации API
— OZON API: https://docs.ozon.ru/api/seller/
— Wildberries API: https://suppliers-api.wildberries.ru/swagger/index.html
— Яндекс.Маркет API: https://yandex.ru/dev/market/partner/doc/dg/concepts/about.html
—
Если нужно, могу помочь с конкретным примером по одному из маркетплейсов с более детальной реализацией.
—
https://infostart.ru/1c/articles/1930563/ (OZON API)
https://yandex.ru/dev/market/partner/doc/dg/concepts/about.html (Яндекс.Маркет API)