Перевод обмена данными на современные рельсы API в среде 1С 7.7 — задача нетривиальная. Основная сложность заключается в том, что платформа создавалась задолго до появления современных стандартов веб-обмена. Однако, несмотря на почтенный возраст системы, реализовать полноценную интеграцию с Ozon и Wildberries возможно. Рассмотрим подробно, как преодолеть технические барьеры и настроить стабильную выгрузку остатков.
Прежде чем приступать к написанию кода, проанализируем основные препятствия, с которыми мы столкнемся при работе с API маркетплейсов из "семерки":
v7plus.dll поддерживает только устаревшие протоколы, что делает её бесполезной для прямой отправки запросов.Api-Key или Authorization.Для решения проблемы с 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(), разберем, как сформировать структуру запроса. Самый простой и быстрый способ в 7.7 — это прямая склейка строк. Рассмотрим пример формирования структуры для обновления остатков на Ozon:
ТекстJSON = "{
| ""stocks"": [
| {
| ""offer_id"": """ + СокрЛП(Товар.Артикул) + """,
| ""product_id"": " + СокрЛП(Товар.КодOzon) + ",
| ""stock"": " + Строка(ТекущийОстаток) + "
| }
| ]
|}";
Важный момент: При ручной склейке JSON необходимо следить за тем, чтобы в строковых значениях (например, в артикулах) не было двойных кавычек или спецсимволов. Если они возможны, их нужно экранировать (заменять " на \").
Для 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 имеет свои особенности. В частности, для обновления остатков требуется предварительно получить warehouseId (идентификатор склада). Выясним, как выглядит структура запроса для WB на адрес /api/v3/stocks/{warehouseId}:
Authorization, куда передается ваш токен.stocks, содержащий пары "баркод — количество".Проанализируем пример формирования данных для WB:
// Формируем JSON для Wildberries
ТекстJSON_WB = "{ ""stocks"": [";
Пока ВыборкаТоваров.ПолучитьОбъект() = 1 Цикл
ТекстJSON_WB = ТекстJSON_WB + "{ ""sku"": """ + СокрЛП(ВыборкаТоваров.Баркод) + """, ""amount"": " + ВыборкаТоваров.Остаток + " },";
КонецЦикла;
// Убираем последнюю запятую и закрываем скобки
ТекстJSON_WB = Лев(ТекстJSON_WB, СтрДлина(ТекстJSON_WB) - 1) + "] }";
Чтобы обмен работал корректно, нам нужно где-то хранить соответствия между нашей номенклатурой и объектами маркетплейса. Мы рекомендуем добавить в справочник Номенклатура следующие реквизиты:
АртикулМП (Строка) — артикул продавца (Offer ID).КодOzon (Число/Строка) — внутренний ID товара в системе Ozon.БаркодWB (Строка) — основной штрихкод для Wildberries.IDСклада (Строка) — если у вас несколько складов отгрузки.В 1С 7.7 нет встроенных регламентных заданий. Для реализации автоматической выгрузки по расписанию мы можем использовать следующий алгоритм:
.ert), которая при открытии запускает процесс выгрузки и закрывает программу.ПриОткрытии() пишем логику: Если Форма.Параметр = "Автостарт" Тогда ... СтатусВозврата(0); КонецЕсли;."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 в мощный инструмент для работы с современными торговыми площадками, сохраняя при этом привычную учетную среду.