
Репрайсер и парсер цен в модуле 1С:Виктория. Интеграция с маркетплейсами

1. Постановка задачи
Селлеры на Wildberries и Ozon ежедневно сталкиваются с двумя противоположными по сути, но связанными задачами:
- Удержать цену в заданных границах — не уйти ниже РРЦ дистрибьютора и не выйти выше психологического порога для покупателя.
- Динамически реагировать на спрос — если товар продается слабо, цену нужно понижать; если продажи идут активно, цену можно повышать, оптимизируя маржу.
Сложность в том, что цена, которую видит покупатель на витрине маркетплейса, не равна цене, которую селлер передает в личный кабинет. На нее накладываются:
- СПП (скидка постоянного покупателя на Wildberries) — площадка применяет ее самостоятельно, селлер не управляет ею напрямую, но обязан учитывать.
- Цена «по карте» (Ozon Premium, скидки по Ozon Карте) — аналогичная ситуация на Ozon.
- Промоакции площадки, в которые товар может попадать автоматически.
Реальную итоговую цену нельзя получить ни через официальный API Wildberries, ни через API Ozon — площадки ее не отдают. А именно эта цена интересует селлера, потому что именно по ней покупатель сравнивает товары и принимает решение о покупке.
Модуль «1С:Виктория» решает эту задачу полным циклом: от парсинга реальных витринных цен с сайта маркетплейса до автоматической установки скорректированной цены товара в 1С и отправки ее обратно на площадку.
2. Архитектура решения
Схема архитектуры: база 1С клиента → сервер Victoria (BigData) → парсер-кластер → карточки Wildberries и Ozon
В отличие от классических интеграций «1С ↔ API маркетплейса», репрайсер «Виктории» построен как трехуровневая распределенная система, потому что для решения задачи нужны данные, которые штатным API не отдаются.
Уровень 1. База 1С клиента
- регистры с ценами, загруженными штатным API («Цены товаров»);
- регистры с заказами, загруженными штатным API;
- справочник вмп_ФункцииРепрайсера — настроенные алгоритмы;
- справочник вмп_СценарииРепрайсера — типы алгоритмов и их параметры;
- регистр вмп_ЗаданияПарсера — локальная очередь заданий на парсинг;
- регистры вмп_ЦеныПарсера и вмп_ЦеныТоваровССайта — результаты парсинга;
- регламентные задания, которые запускают процесс по расписанию.
Уровень 2. Сервер Victoria (BigData)
- авторизует клиентскую базу по токену;
- шифрует и маршрутизирует запросы;
- проверяет тариф, лимиты и баланс;
- ставит задания в очередь к парсер-кластеру;
- кэширует результаты (по умолчанию 24 часа на SKU);
- ведет биллинг.
Зачем он нужен: клиентская база 1С не имеет прав и инфраструктуры обращаться напрямую к парсер-кластеру. Сервер Victoria — это единая точка входа с авторизацией, шифрованием тела запросов, маршрутизацией и защитой от перерасхода средств.
Уровень 3. Парсер-кластер
- открывает реальные карточки товаров на wildberries.ru и ozon.ru;
- извлекает цену с учетом СПП и цену по карте Ozon;
- учитывает регион и признак «нет в продаже» (out_of_stock);
- ротирует прокси и пользовательские сеансы, чтобы не попадать под антибот-защиту.
Парсер — самый дорогой по времени и стоимости этап, поэтому весь процесс асинхронный: 1С отправляет задание и продолжает работать, а через минуту-две забирает результат.
3. Программная модель в 1С
3.1. Сценарии репрайсера
Сценарий (вмп_СценарииРепрайсера) — это тип алгоритма. В текущей версии поддерживаются:
- Поддержка цены — удержание в коридоре относительно РРЦ.
- Корректировка цен по спросу — динамическое управление на основе истории заказов.
В форме сценария реализована управляемая видимость реквизитов в зависимости от типа. Это дает пространство для расширения: добавление нового сценария — это новый элемент перечисления вмп_ТипыСценариевРепрайсера и новая ветка в обработчике. Существующие настройки клиента при этом не ломаются.
Если Сценарий.ТипСценария = ПредопределенноеЗначение(
"Перечисление.вмп_ТипыСценариевРепрайсера.КорректировкаЦенПоСпросу")
Тогда
ПроверяемыеРеквизиты.Добавить("ГлубинаАнализа");
ПроверяемыеРеквизиты.Добавить("ШагИзмененияЦены");
ПроверяемыеРеквизиты.Добавить("КритерийПродажМинимум");
ПроверяемыеРеквизиты.Добавить("КритерийПродажМаксимум");
КонецЕсли;
3.2. Функции репрайсера
вмп_ФункцииРепрайсера — конкретная настройка алгоритма для определенного набора учетных записей и номенклатуры.
| Реквизит | Назначение |
|---|---|
| Включено | Флаг участия в регламентном запуске |
| Сценарий | Ссылка на тип алгоритма |
| Периодичность | Минимальный интервал между запусками, сек |
| Время последнего выполнения | Контроль фактических запусков |
| Учетные записи | Отбор по аккаунтам (пусто = все активные) |
| Номенклатура | Отбор по товарам с поддержкой групп |
Контроль обязательности реквизитов реализован декларативно через ОбработкаПроверкиЗаполнения и зависит от выбранного сценария. Пользователь не сможет записать функцию без параметров, действительно необходимых выбранному сценарию.
3.3. Удобство наполнения номенклатуры
Когда в функцию репрайсера нужно добавить 500–5000 SKU, ручной подбор невозможен. Реализована загрузка из Excel по артикулу. Контроль дублей дополнительно срабатывает интерактивно: при ручном выборе через ОбработкаВыбора и при изменении строки табличной части второе вхождение той же номенклатуры удаляется с сообщением «Дубль. Номенклатура не была добавлена». Это критично, потому что один и тот же товар, попавший в репрайсер дважды, мог бы получить противоречивые команды установки цены.
КоличествоТовара = Объект.Номенклатура.НайтиСтроки(
Новый Структура("Номенклатура", Номенклатура)).Количество();
Если КоличествоТовара = 0 Тогда
НоваяСтрока = Объект.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.ВидНоменклатуры = "Товар";
КолвоНовыхНоменклатур = КолвоНовыхНоменклатур + 1;
КонецЕсли;
4. Алгоритмы
4.1. Поддержка РРЦ
Бизнес-задача: дистрибьютор требует не уходить ниже РРЦ. Или, наоборот, не превышать рекомендованную верхнюю границу.
- Из регистра «Цены товаров» берется актуальная цена площадки.
- Выполняется сравнение с видом цены «РРЦ» по выбранной формуле: не ниже РЦ, не выше РЦ или равно РЦ.
- При включенной опции «С учетом СПП» решается обратная задача: вычисляется цена до скидки, которая после применения СПП даст нужное значение.
- Минимальный и максимальный вид цены работают как защитные пороги. Если расчет уводит цену за эти границы, установка блокируется.
- Результат фиксируется либо документом «Установка цен номенклатуры», либо прямой отправкой на сайт.
ЦенаДоСПП = ЦенаРРЦ / (1 − ПроцентСПП)
4.2. Корректировка цен по спросу
- ГлубинаАнализа (дни) — за какой период считать продажи;
- КритерийПродажМинимум / КритерийПродажМаксимум — границы нормы;
- ШагИзмененияЦены (%) — на сколько изменять цену.
- Получить актуальную цену площадки из «Цены товаров».
- Посчитать количество заказов за период ГлубинаАнализа по уже загруженным в 1С заказам.
- Сравнить результат с коридором: ниже минимума — минус шаг, выше максимума — плюс шаг, в коридоре — не менять цену.
- Применить минимальный и максимальный вид цены как ограничители.
- Записать результат документом или прямой отправкой.
Важная деталь: и здесь, и в «Поддержке РРЦ» учитывается СПП. Если на витрине покупатель видит цену с СПП = 1490 ₽, а в учете у нас цена 1990 ₽, алгоритм должен сравнивать продажи именно с витринной ценой. Иначе стратегия перестает быть корректной. Поэтому СПП нужно знать, а получить его без парсинга нельзя.
5. Парсер: почему он необходим и как устроен
5.1. Почему API недостаточно
Ни Wildberries, ни Ozon не возвращают через официальный API актуальную цену с учетом СПП для конкретной карточки, цену по карте Ozon и факт того, что товар временно отсутствует в продаже на витрине, хотя в личном кабинете он активен. Эти данные есть только на самой витрине. Поэтому единственный технически корректный способ их получить — открыть страницу карточки и извлечь данные.
5.2. Как выглядит цикл парсинга
- Submit — отправка списка SKU на парсинг.
- Status — проверка готовности задания.
- Result — получение результатов.
- Limits — получение информации о балансе и квоте.
СтрокаJSON = ПреобразоватьДанныеВJSON(ДанныеЗапросаДляОтправки);
ЗашифрованноеТело = вмп_СлужебныеФункцииСервер.ЗашифроватьТекст(СтрокаJSON);
ЗапросHTTP.УстановитьТелоИзСтроки(ЗашифрованноеТело);
Ответ также расшифровывается. Это нужно для защиты токена и ИНН клиента в канале и для невозможности подсмотреть формат тела сторонней средой.
5.3. Учет типа клиентской инфраструктуры
Модуль работает и в локальных установках клиентов, и в облачной 1С:Фреш, и через сервер партнера. Параметры соединения с BigData в каждом случае разные. Сначала пробуется основной канал, при ошибке — переключение на альтернативный с повтором запроса в той же транзакции. Для клиента отказоустойчивость по каналу прозрачна.
Попытка
ОтветHTTP = Настройки.Соединение.ОтправитьДляОбработки(ЗапросHTTP);
Исключение
Настройки = ПолучитьНастройкиПодключения(ДанныеЗапроса.УчетнаяЗапись, Истина);
ОтветHTTP = Настройки.Соединение.ОтправитьДляОбработки(ЗапросHTTP);
КонецПопытки;
5.4. Пакетная отправка
Парсинг 1000 SKU одним запросом — это и риск таймаута, и риск частичной потери результата. Поэтому отправка идет пакетами по 10 SKU. Если один пакет падает, остальные продолжают идти. В журнал событий пишется источник ошибки, а общий счетчик ошибок отображается пользователю в финальном сообщении.
МаксимумВПакете = 10;
МассивПакетов = РазбитьМассивНаПакеты(НомераТоваров, МаксимумВПакете);
5.5. Получение результатов и классификация ошибок
- Фатальная ошибка — задание сразу помечается ошибочным, в журнал пишется причина.
- Временная ошибка (HTTP 5xx, 429, таймаут) — задание остается активным и будет проверено повторно.
- Жесткий таймаут в 1 час защищает от зависших заданий.
ФатальныеКоды = Новый Массив;
ФатальныеКоды.Добавить("JOB_NOT_FOUND");
ФатальныеКоды.Добавить("JOB_EXPIRED");
ФатальныеКоды.Добавить("INVALID_TOKEN");
ФатальныеКоды.Добавить("LIMIT_EXCEEDED");
ФатальныеКоды.Добавить("SUBSCRIPTION_EXPIRED");
5.6. Кэширование и биллинг
Каждый успешный парсинг карточки кэшируется на сервере BigData, по умолчанию на 24 часа. Повторный запрос того же SKU в течение этого окна не выполняет повторный парсинг карточки, не списывает деньги с баланса и помечается флагом source = "cached". Это критично для регулярных регламентных заданий: можно безопасно ставить опрос каждый час и не расходовать бюджет впустую.
Если ДанныеSKU.Получить("source") = "cached" Тогда
ТекстИнформации = ТекстИнформации + " из кэша";
Иначе
// ...
КонецЕсли;
6. Запуск: регламентные задания и длительные операции
Репрайсер запускается тремя способами:
- Автоматически — общим регламентным заданием по расписанию из настроек модуля.
- Принудительно из списка функций — кнопкой «Выполнить все» или «Выполнить выделенные».
- Из карточки конкретной функции — кнопкой «Выполнить регламентное задание» с передачей ссылки в массив запускаемых функций.
Запуск унифицирован через механизм длительных операций БСП. Это дает клиенту следующее:
- тяжелая обработка не блокирует интерфейс;
- пользователь может закрыть форму и вернуться к результату позже;
- в форме отображается прогресс выполнения;
- по завершении пользователь получает явный статус: выполнено, ошибка с описанием или отменено.
Возврат ДлительныеОперации.ВыполнитьПроцедуру(
ПараметрыВыполнения,
"вмп_Репрайсер.ВыполнитьРегЗаданиеРепрайсер",
ПараметрыВызова
);
7. Защита от типовых ошибок эксплуатации
7.1. Защита от расхождения цен в учете и на витрине
Если установка цены ведется через документ, действует штатный механизм 1С: документ записан, ценообразование срабатывает после проведения и после выгрузки регламентным заданием. При прямой отправке модуль явно предупреждает, что параллельная работа регламентного задания выгрузки цен может перебить результат.
7.2. Защита от «выстрела ниже себестоимости»
Минимальный и максимальный вид цены работают как hard-stop. Если расчет по сценарию дает значение за пределами коридора, установка блокируется, а причина пишется в журнал.
7.3. Защита от дублей в настройках
Механизм отлова дублей в табличной части номенклатуры срабатывает при загрузке из Excel, при подборе и при ручном вводе.
7.4. Защита от перерасхода бюджета на парсинг
Используются кэширование на 24 часа, дневной лимит SKU на стороне BigData и явное разделение тестового и платного режима.
7.5. Защита от зависших заданий
Используются жесткий 1-часовой таймаут на статус задания парсинга и классификация ошибок на фатальные и временные.
8. Что в результате получает клиент
| С точки зрения пользователя | С точки зрения технологии |
|---|---|
| Один раз настроить функции репрайсера: выбрать сценарий, аккаунты, загрузить из Excel номенклатуру, указать виды цен и пороги. | Парсинг витринной цены с учетом СПП и цены по карте Ozon — данных, которых нет в API. |
| Включить флаг «Активна» — после этого функция автоматически выполняется по расписанию. | Алгоритмы принятия решений по ценообразованию с учетом РРЦ и реакции на спрос. |
| Периодически заходить в журнал работы репрайсера и в регистр цен с сайта, чтобы видеть, какие цены сейчас на витрине, какие документы были созданы и какие установки были заблокированы порогами. | Безопасное применение результатов — через документы 1С или прямую отправку, с порогами и контролем дублей. |
Архитектурно решение состоит из трех слоев — база 1С клиента, BigData-сервер Victoria и парсер-кластер на Python. Компоненты взаимодействуют асинхронно через зашифрованные JSON-запросы, поддерживают как локальные, так и облачные базы, отказоустойчивы по каналам связи и снабжены биллинговой моделью с кэшированием и тестовым режимом.
9. Применимость и совместимость
- Поддерживаемые конфигурации 1С: УТ 11.4/11.5, КА 2, ERP 2, УНФ 3.0, Розница 2.3/3.0 (через подсистему интеграции).
- Поддерживаемые площадки в текущей версии репрайсера: Wildberries, Ozon.
- Архитектура парсера расширяется на любую витрину, где цена видна на публичной странице карточки.
- Тарификация: модульная — функциональность включена в подписку PRO, парсинг — отдельная квота SKU/сутки, настраиваемая под объемы клиента.
- Развертывание: не требует доработок ядра клиентской базы, поставляется расширением (*.cfe), не блокирует обновления типовой конфигурации.
Резюме
Репрайсер «1С:Виктория» — это не просто кнопка «изменить цену», а полноценная система динамического ценообразования для маркетплейсов, которая закрывает разрыв между тем, что показывает API маркетплейса, и тем, что реально видит покупатель на витрине.
Подробнее о продукте и сценариях использования — на странице решения.
Смотрите также:






