Как организовать выгрузку остатков из 1C 7.7 на маркетплейсы Ozon и Wildberries через API?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Перевод обмена данными на современные рельсы API в среде 1С 7.7 — задача нетривиальная. Основная сложность заключается в том, что платформа создавалась задолго до появления современных стандартов веб-обмена. Однако, несмотря на почтенный возраст системы, реализовать полноценную интеграцию с Ozon и Wildberries возможно. Рассмотрим подробно, как преодолеть технические барьеры и настроить стабильную выгрузку остатков.

Анализ технических ограничений 1С 7.7

Прежде чем приступать к написанию кода, проанализируем основные препятствия, с которыми мы столкнемся при работе с API маркетплейсов из "семерки":

Настройка транспортного уровня (WinHttp)

Для решения проблемы с HTTP-запросами и поддержкой TLS мы будем использовать системный объект WinHttp.WinHttpRequest.5.1. Это наиболее надежный способ взаимодействия с веб-сервисами из 1С 7.7 без использования сторонних платных компонент. Проанализируем пример создания объекта и настройки параметров соединения:


// Создаем объект для работы с HTTP
Попытка
    HttpЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Исключение
    Сообщить("Ошибка создания объекта WinHttp: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Настройка TLS 1.2 (важно для работы с современными серверами)
// 128 - это флаг для включения TLS 1.2
HttpЗапрос.Option(9, 128); 

Если ваша операционная система (например, Windows Server 2008) не поддерживает TLS 1.2 по умолчанию, убедитесь, что установлены необходимые обновления системы, иначе соединение будет обрываться с ошибкой безопасности. В качестве альтернативы системным библиотекам можно использовать внешнюю компоненту для выполнения HTTP(S)-запросов из 1С 7.7.

Работа с JSON: формирование строки запроса

Поскольку у нас нет метода ЗаписатьJSON(), разберем, как сформировать структуру запроса. Самый простой и быстрый способ в 7.7 — это прямая склейка строк. Рассмотрим пример формирования структуры для обновления остатков на Ozon:


ТекстJSON = "{
|  ""stocks"": [
|    {
|      ""offer_id"": """ + СокрЛП(Товар.Артикул) + """,
|      ""product_id"": " + СокрЛП(Товар.КодOzon) + ",
|      ""stock"": " + Строка(ТекущийОстаток) + "
|    }
|  ]
|}";

Важный момент: При ручной склейке JSON необходимо следить за тем, чтобы в строковых значениях (например, в артикулах) не было двойных кавычек или спецсимволов. Если они возможны, их нужно экранировать (заменять " на \").

Интеграция с API Ozon

Для Ozon крайне важно правильно передать авторизационные данные в заголовках. Разберем по шагам процесс отправки данных на метод /v3/product/stocks/update:


URL = "https://api-seller.ozon.ru/v3/product/stocks/update";
HttpЗапрос.Open("POST", URL, 0);
HttpЗапрос.SetRequestHeader("Client-Id", ИдентификаторКлиента);
HttpЗапрос.SetRequestHeader("Api-Key", ВашAPIKey);
HttpЗапрос.SetRequestHeader("Content-Type", "application/json");

HttpЗапрос.Send(ТекстJSON);

Если HttpЗапрос.Status <> 200 Тогда
    Сообщить("Ошибка при выгрузке: " + HttpЗапрос.Status + " " + HttpЗапрос.ResponseText);
Иначе
    Сообщить("Остатки успешно обновлены!");
КонецЕсли;

Специфика Wildberries API

Работа с Wildberries имеет свои особенности. В частности, для обновления остатков требуется предварительно получить warehouseId (идентификатор склада). Выясним, как выглядит структура запроса для WB на адрес /api/v3/stocks/{warehouseId}:

  1. Используется заголовок Authorization, куда передается ваш токен.
  2. Обновление происходит по баркодам товаров.
  3. Необходимо передавать массив stocks, содержащий пары "баркод — количество".

Проанализируем пример формирования данных для WB:


// Формируем JSON для Wildberries
ТекстJSON_WB = "{ ""stocks"": [";
Пока ВыборкаТоваров.ПолучитьОбъект() = 1 Цикл
    ТекстJSON_WB = ТекстJSON_WB + "{ ""sku"": """ + СокрЛП(ВыборкаТоваров.Баркод) + """, ""amount"": " + ВыборкаТоваров.Остаток + " },";
КонецЦикла;
// Убираем последнюю запятую и закрываем скобки
ТекстJSON_WB = Лев(ТекстJSON_WB, СтрДлина(ТекстJSON_WB) - 1) + "] }";

Подготовка справочников в 1С 7.7

Чтобы обмен работал корректно, нам нужно где-то хранить соответствия между нашей номенклатурой и объектами маркетплейса. Мы рекомендуем добавить в справочник Номенклатура следующие реквизиты:

Автоматизация выгрузки

В 1С 7.7 нет встроенных регламентных заданий. Для реализации автоматической выгрузки по расписанию мы можем использовать следующий алгоритм:

  1. Создаем отдельную внешнюю обработку (файлик .ert), которая при открытии запускает процесс выгрузки и закрывает программу.
  2. В процедуре ПриОткрытии() пишем логику: Если Форма.Параметр = "Автостарт" Тогда ... СтатусВозврата(0); КонецЕсли;.
  3. Используем Планировщик задач Windows (Task Scheduler). Создаем задачу, которая запускает 1С с параметрами командной строки: "C:\Program Files\1Cv77\bin\1cv7s.exe" enterprise /d"ПутьКБазе" /n"Робот" /p"Пароль" /execute"ПутьКОбработке.ert".

Обработка ответов и логирование

При работе с API крайне важно знать, почему запрос не прошел. Маркетплейсы часто возвращают подробные описания ошибок в формате JSON. Чтобы прочитать их в 7.7, можно воспользоваться объектом MSScriptControl.ScriptControl, который позволяет исполнять код JavaScript для разбора JSON-строки:


ScritptControl = СоздатьОбъект("MSScriptControl.ScriptControl");
ScritptControl.Language = "JScript";
// Функция для получения значения свойства из JSON-строки
JSONОбъект = ScritptControl.Eval("(" + HttpЗапрос.ResponseText + ")");
Сообщить("Результат операции: " + JSONОбъект.result);

Рассмотрим ситуацию, когда API возвращает ошибку 429 (Too Many Requests). Это означает, что вы превысили лимиты на количество запросов в минуту. В этом случае в коде 1С необходимо предусмотреть паузу или уменьшить порции передаваемых данных (например, отправлять не более 100 товаров в одном пакете).

Таким образом, используя системные объекты Windows и корректную обработку строковых данных, мы можем превратить 1С 7.7 в мощный инструмент для работы с современными торговыми площадками, сохраняя при этом привычную учетную среду.

← На главную