Как организовать ценообразование в 1С:УНФ на основе данных стороннего сайта?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

Автоматизация мониторинга цен конкурентов и построение собственного прайс-листа на основе внешних источников — частая задача в интернет-торговле. Разберем по шагам, как выстроить архитектуру сбора данных, загрузить номенклатуру с изображениями и настроить формулы пересчета цен в конфигурации 1С:Управление нашей фирмой 1.6.

1. Стратегия сбора данных и обход ограничений сайта-источника

При сборе данных напрямую со сторонних сайтов основной проблемой являются антибот-системы и лимиты на количество запросов. Проанализируем ключевые принципы эффективного парсинга:

  1. Сбор цен со страниц со списками товаров. Не следует открывать карточку каждого отдельного товара при регулярном обновлении цен. На страницах категорий интернет-магазинов уже выводятся наименование, базовая цена, артикул и ссылка. Обход 10–20 страниц каталога создает минимальную нагрузку на целевой сайт и исключает риск блокировки.
  2. Снижение частоты запросов. Добавим задержки между вызовами и настроим регулярное регламентное задание на ночное время или часы минимальной нагрузки.
  3. Ротация IP-адресов. При регулярных выгрузках больших каталогов используем промежуточные прокси-серверы, чтобы избежать блокировок по IP-адресу.
  4. Анализ фоновых сетевых запросов (внутреннего API). Большинство современных сайтов подгружают каталог асинхронно. Открыв консоль разработчика в браузере, можно перехватить прямые вызовы к REST API сайта, получая данные в формате JSON без необходимости разбирать сложную HTML-разметку.

2. Программное получение данных средствами платформы 1С

Рассмотрим, как средствами встроенного языка получить данные страницы через объект HTTPСоединение и разобрать структурированный ответ.

Если сайт отдает чистый JSON через внутренний интерфейс, разберем пример чтения ответа:


Соединение = Новый HTTPСоединение("api.targetsite.com", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL());
ЗапросHTTP = Новый HTTPЗапрос("/v1/catalog/products?category=123");
ЗапросHTTP.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");

ОтветHTTP = Соединение.Получить(ЗапросHTTP);
Если ОтветHTTP.КодСостояния = 200 Тогда
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ОтветHTTP.ПолучитьТелоКакСтроку());
    ДанныеКаталога = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
КонецЕсли;

Если данные встроены в статический HTML, для извлечения фрагментов используем объект ЧтениеHTML или строим DOM-модель через ДокументHTML, исключая ненадежную обработку сырыми регулярными выражениями.

3. Загрузка изображений и создание номенклатуры

При первоначальном заполнении базы или появлении новых позиций необходимо загрузить базовые реквизиты и картинки. Рассмотрим по шагам процесс сохранения изображения товара в 1С:УНФ:

  1. Получаем изображение в виде двоичных данных по прямой ссылке через HTTPСоединение.
  2. Создаем элемент справочника Номенклатура.
  3. Создаем связанный элемент в справочнике НоменклатураПрисоединенныеФайлы, помещая полученные двоичные данные в хранилище.

Посмотрим на пример загрузки файла картинки:


СоединениеФайлов = Новый HTTPСоединение("images.targetsite.com", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL());
ЗапросКартинки = Новый HTTPЗапрос("/img/item123.jpg");
ОтветКартинки = СоединениеФайлов.Получить(ЗапросКартинки);

Если ОтветКартинки.КодСостояния = 200 Тогда
    КартинкаДвоичныеДанные = ОтветКартинки.ПолучитьТелоКакДвоичныеДанные();
    
    ПрисоединенныйФайл = Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент();
    ПрисоединенныйФайл.ВладелецФайла = СсылкаНаНоменклатуру;
    ПрисоединенныйФайл.Наименование = "Основное изображение";
    ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
    ПрисоединенныйФайл.ФайлХранилище = Новый ХранилищеЗначения(КартинкаДвоичныеДанные, Новый СжатиеДанных());
    ПрисоединенныйФайл.Записать();
КонецЕсли;

4. Сопоставление позиций и хранение внешних идентификаторов

Поиск номенклатуры только по наименованию приводит к регулярным ошибкам и дублям. Проанализируем надежный подход к связыванию данных:

  1. Ключи сопоставления. В качестве основного идентификатора используем артикул производителя, код EAN-13 (штрихкод) или внутренний ID товара на сайте-источнике.
  2. Таблица соответствий. Создаем отдельный независимый регистр сведений (например, СоответствиеНоменклатурыВнешнимИсточникам), в измерениях которого хранятся внешний идентификатор и ссылка на Справочник.Номенклатура (и Справочник.ХарактеристикиНоменклатуры при наличии). Это позволяет при повторных запусках парсера обновлять только цены существующих связок.

5. Настройка видов цен и формул расчета в 1С:УНФ 1.6

После получения цен стороннего сайта задействуем штатный механизм ценообразования конфигурации. Разберем настройку по шагам:

  1. Создание входящего вида цены. В разделе Продажи — Виды цен создаем отдельный вид цены, например, «Цена конкурента» со способом расчета «Статический». В этот вид цены обработка парсинга будет записывать актуальные значения через документ Установка цен.
  2. Настройка собственных видов цен. Создаем вид цены «Розничная». Выбираем способ расчета «Динамический» (цена вычисляется «на лету» в документах продажи) либо «Расчетный» (цена фиксируется отдельным документом с возможностью ручной корректировки).
  3. Задание формулы. В настройках вида цены указываем формулу наценки относительно базового вида цены (например: [Цена конкурента] * 0.98 для дисконта в 2% или [Цена конкурента] + 150). Также настраиваем правила округления (до 1 рубля, до 10 рублей и т.д.).
  4. Массовый пересчет. Для регулярного обновления прайса используем документ Установка цен либо обработку «Формирование цен», где по нажатию кнопки пересчитываются все зависимые цены на основании свежезагруженной цены конкурента.

6. Альтернативный вариант: вынос парсера за контур 1С

Если сайт конкурента защищен сложной капчей, требует эмуляции действий пользователя в браузере или работает на SPA-фреймворках (клиентский рендеринг JavaScript), целесообразно вынести сбор данных во внешний скрипт (Node.js, Python, C#):

  1. Внешний скрипт по расписанию собирает актуальные цены конкурента.
  2. В 1С создается собственный HTTP-сервис или настраивается обращение через интерфейс OData.
  3. Скрипт отправляет готовый JSON-массив [ { "ID": "...", "Price": 12000 } ] в опубликованный HTTP-сервис базы 1С.
  4. Метод веб-сервиса в 1С выполняет сопоставление по регистру сведений и автоматически проводит документ Установка цен.

Такая схема защищает базу 1С от зависаний фоновых заданий при сетевых сбоях и позволяет использовать специализированные инструменты для обхода комплексных веб-защит.

← На главную