Синтаксис скриптів
Скрипти в Pricer24 дозволяють гнучко автоматизувати розрахунок цін (динамічне ціноутворення / репрайсинг), керувати активністю товарів та створювати власні розрахункові колонки у звітах.
Скрипти виконуються у внутрішньому захищеному середовищі на основі синтаксису C# / .NET.
Типи скриптів
У системі використовуються 3 типи скриптів:
- Product (Скрипт товару): автоматичний розрахунок цін вашого магазину, зміна наявності, встановлення тегів та кастомних властивостей
- Status (Скрипт статусу): автоматичне переведення товарів в активний або архівний стан
- 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
Дякуємо!