Статті на: Розробникам
Ця стаття також доступна на:

Синтаксис скриптів

Скрипти в Pricer24 дозволяють гнучко автоматизувати розрахунок цін (динамічне ціноутворення / репрайсинг), керувати активністю товарів та створювати власні розрахункові колонки у звітах.


Скрипти виконуються у внутрішньому захищеному середовищі на основі синтаксису C# / .NET.


Типи скриптів


У системі використовуються 3 типи скриптів:

  1. Product (Скрипт товару): автоматичний розрахунок цін вашого магазину, зміна наявності, встановлення тегів та кастомних властивостей
  2. Status (Скрипт статусу): автоматичне переведення товарів в активний або архівний стан
  3. Analysis (Скрипти аналітики): генерація кастомних колонок у звітах із власною логікою розрахунків, бейджами та підсвічуванням



Загальні дані (доступні в усіх типах скриптів)


У будь-якому скрипті доступний контекст із глобальними даними системи:


1. Довідники системи: Data (лише для читання)

  • Data.MainCurrency — базова системна валюта (UAH, EUR, USD).
  • Data.Category — словник категорій за ключем ExternalId.
  • Data.Contractor — словник контрагентів (конкурентів) за ключем UnifiedName.
  • Data.ProductPriceType — словник типів цін за ключем UnifiedName.
  • Data.PriceSet — словник груп цін (competitors, competitors_promo).
  • Data.AvailabilityType — типи наявності.


2. Ціни та пропозиції конкурентів

  • ContractorPrices — масив зібраних цін конкурентів для поточного товару (ReevaluationContractorPrice[]).
    • Поля елемента: Price, Currency, Contractor, PriceSet, Code, Name, Url, ParsedOn.
  • ContractorOffers — масив пропозицій конкурентів:
    • Поля елемента: IsAvail, Contractor, Code, Name, Url, ParsedOn.


3. Допоміжні методи розрахунку

  • ConvertPrice(price, fromCurrency, toCurrency) — конвертує ціну з однієї валюти в іншу за системним курсом.
  • GetPrices(predicate) — повертає обгортку над цінами конкурентів з підтримкою фільтрації:
    • Методи обгортки: .Min(), .Max(), .Avg(), .Any(), .Count().
  • GetOffers(predicate) — повертає пропозиції конкурентів з методами .Any(), .Count().
  • Round(value, decimals) — округлює число до заданої кількості знаків (якщо decimals < 0 — округлює до десятків, сотень).
  • Logs.Add(message) — запис повідомлення в журнал виконання для налагодження скрипта.



1. Скрипт товару (Product Script)


Використовується для переоцінки товарів (Repricing).


Вхідні дані: ProductOld (лише для читання)

Поточні параметри вашого товару до переоцінки:

  • ProductOld.ExternalId — код товару у вашій системі.
  • ProductOld.Name — назва товару.
  • ProductOld.Vendor / ProductOld.VendorCode / ProductOld.Barcode.
  • ProductOld.Price["UnifiedName"] — поточна ціна товару за типом ціни.
  • ProductOld.Property["UnifiedName"] — значення кастомної характеристики (наприклад, собівартість).
  • ProductOld.Tag["UnifiedName"] — наявність тегу (true / false).


Результат виконання: Product (об'єкт для запису)

  • Product.Price["UnifiedName"] — нова розрахована ціна (число або null).
  • Product.Availability — новий статус наявності товару.
  • Product.Tag["UnifiedName"] — призначення або зняття тегу.
  • Product.Property["UnifiedName"] — оновлення значення властивості.


Приклад скрипта репрайсингу:

Задача: встановити роздрібну ціну на 5 грн нижче мінімальної ціни конкурентів у наявності, але не нижче собівартості + 10%.


// 1. Отримуємо мінімальну ціну конкурентів у наявності
var competitorPrices = GetPrices(p => p.PriceSet == "competitors");

if (competitorPrices.Any())
{
    double minCompetitorPrice = competitorPrices.Min().Value;
    double targetPrice = minCompetitorPrice - 5;

    // 2. Отримуємо собівартість із кастомної властивості товару
    if (double.TryParse(ProductOld.Property["cost_price"], out double costPrice))
    {
        double minAllowedPrice = costPrice * 1.10; // собівартість + 10%
        
        if (targetPrice < minAllowedPrice)
        {
            targetPrice = minAllowedPrice;
            Product.Tag["margin_protection"] = true; // ставимо тег захисту маржі
        }
    }

    // 3. Записуємо нову округлену роздрібну ціну
    Product.Price["retail_price"] = Round(targetPrice, 0);
}


Розраховані скриптом нові ціни можна автоматично передавати на ваш сайт через Вебхук: передача цін



2. Скрипт статусу (Status Script)


Керує активністю товару в системі.


  • ProductOld — дані товару (аналогічно скрипту товару).
  • Product.IsActive — булевий статус товару (true — активний, false — архівний).


Приклад:

Задача: архівувати товар, якщо він відсутній у нашому каталозі понад 30 днів і немає в наявності в жодного конкурента.


bool hasCompetitorStock = GetOffers(o => o.IsAvail).Any();

if (ProductOld.Availability == "out_of_stock" && !hasCompetitorStock)
{
    Product.IsActive = false;
}
else
{
    Product.IsActive = true;
}



3. Скрипти аналітики (Analysis Scripts)


Складаються з двох частин: конфігурація колонок (Columns) та заповнення клітинок (Data).


Скрипт колонок (виконується один раз):

Columns.Add(
    dataField: "PriceDiffPercent",
    caption: "Відхилення від РРЦ, %",
    width: 120,
    alignment: "Right"
);


Скрипт заповнення клітинок (виконується для кожного товару):

double? myPrice = ProductOld.Price["retail_price"];
double? rrpPrice = ProductOld.Price["rrp"];

if (myPrice.HasValue && rrpPrice.HasValue && rrpPrice.Value > 0)
{
    double diff = Round(((myPrice.Value - rrpPrice.Value) / rrpPrice.Value) * 100, 1).Value;
    
    Cell["PriceDiffPercent"].Text = diff + " %";

    // Якщо ціна нижче РРЦ — підсвічуємо червоним
    if (diff < 0)
    {
        Cell["PriceDiffPercent"].Color = "#D32F2F";
        Cell["PriceDiffPercent"].Bold = true;
        Cell["PriceDiffPercent"].ToolTip = "Ціна нижче рекомендованої роздрібної!";
    }
}



Не знайшли відповіді на своє питання? Напишіть нам у чат підтримки в правому нижньому кутку кабінету — ми завжди поруч! 🙋‍♂️

Оновлено: 04/11/2026

Чи була ця стаття корисною?

Поділіться своїм відгуком

Скасувати

Дякуємо!