При работе с маркетплейсом Ozon продавцы часто сталкиваются с необходимостью отразить результаты продаж в учетной системе. При скачивании отчета из личного кабинета Ozon (раздел Финансы → Документы → Отчёты о реализации) формируется файл Excel, представляющий собой печатную форму с шапкой, реквизитами, подвалом и факсимильной синей печатью. Загрузить такой документ напрямую с помощью стандартных универсальных загрузчиков или построителей сложно, так как они ожидают сплошную плоскую таблицу.
Разберем, как решить эту задачу в программах 1С (в частности, в 1С:УНФ 3.0), выясним, нужно ли вручную удалять шапку и подвал, а также рассмотрим технические нюансы программного разбора и возможности API маркетплейса.
Самое простое и эффективное решение — использовать штатные механизмы конфигурации. Начиная с современных версий «1С:Управление нашей фирмой» (УНФ 3.0), функционал интеграции с маркетплейсами включает специализированные парсеры отчетов о продажах.
Проанализируем особенности типовой загрузки:
НоменклатураКонтрагентов. После первичной настройки привязки система будет определять товары автоматически.Если специфика учета требует использования собственной обработки или стороннего универсального загрузчика, которому критически необходим плоский табличный вид, получить его из личного кабинета можно несколькими путями:
Существует распространенное заблуждение, что отчет о реализации невозможно получить через API. Это не так: маркетплейс предоставляет официальные методы для автоматического получения финансовых результатов:
/v2/finance/realization позволяет получать данные отчета о реализации в виде чистого структурированного JSON. В ответе содержатся данные по SKU, ценам, вознаграждению маркетплейса, возвратам и компенсациям./v1/finance/realization/by-day.Использование API позволяет полностью исключить этап ручного скачивания Excel-файлов из личного кабинета и последующей передачи их в учетную систему.
Если вы разрабатываете собственную обработку для разбора официального Excel-файла Ozon, рассмотрим правильный подход к чтению данных с точки зрения платформы 1С.
Не следует использовать COM-соединение с Excel.Application: такой метод не работает на серверах под управлением Linux, требует установленного офисного пакета и нестабилен при выполнении в фоновых заданиях. Оптимальный встроенный способ платформы — использование объекта ТабличныйДокумент.
Посмотрим на пример базового алгоритма чтения файла:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Текст);
НомерСтрокиШапки = 0;
ВсегоСтрок = ТабДок.ВысотаТаблицы;
// Ищем строку с заголовками таблицы
Для НомерСтроки = 1 По ВсегоСтрок Цикл
ТекстЯчейки = ТабДок.ПолучитьОбласть(НомерСтроки, 1).Текст;
Если СтрНайти(ТекстЯчейки, "Артикул") > 0 Или СтрНайти(ТекстЯчейки, "Код товара") > 0 Тогда
НомерСтрокиШапки = НомерСтроки;
Прервать;
КонецЕсли;
КонецЦикла;
Если НомерСтрокиШапки = 0 Тогда
ВызватьИсключение "Не удалось определить строку заголовков отчета Ozon.";
КонецЕсли;
// Считываем строки данных
Для НомерСтроки = (НомерСтрокиШапки + 1) По ВсегоСтрок Цикл
Артикул = ТабДок.ПолучитьОбласть(НомерСтроки, 1).Текст;
// Прерываем обработку при достижении подвала отчета
Если ПустаяСтрока(Артикул) Или СтрНайти(Артикул, "Итого") > 0 Тогда
Прервать;
КонецЕсли;
// Обработка числовых показателей
СтрокаКоличество = ТабДок.ПолучитьОбласть(НомерСтроки, 5).Текст;
// Очищаем строку от неразрывных пробелов (код 160)
СтрокаКоличество = СтрЗаменить(СтрокаКоличество, Символ(160), "");
СтрокаКоличество = СтрЗаменить(СтрокаКоличество, " ", "");
Количество = Число(СтрокаКоличество);
// Дальнейшее заполнение документа...
КонецЦикла;
Обратите внимание на важные детали реализации:
Число(), платформа вызовет исключение. Строку обязательно нужно предварительно очистить через СтрЗаменить().