Общая информация
При загрузке прайсов у наших пользователей часто есть потребность изменения этих данных.
Например:
- габариты товара поставщик предоставляет в прайс листе одной строкой вида 433/66/38 , это ширина/высота/длина. И нужно это разделить на три параметра соответственно
- сформировать строку вида артикул+бренд для построения связей по этой строке
- отредактировать имя товара вида: Брюки сварщика Brodeks FS38-01, т.синий/черный (46), убрав текст в скобках у всех товаров
- и много других частных случаев, которые актуальны для конкретного поставщика или продавца.
Подстроить стандартный функционал под множество таких случаи невозможно, поэтому мы сделали возможность создавать скрипты, где можно с данным сделать любые операции самостоятельно.
Писать скрипт можете Вы самостоятельно, если владеете базовыми навыками программирования, либо может писать ваш или любой другой программист.
Язык программирования скриптов - JavaScript.
Скрипт запускается после загрузки данных от поставщика (неважно каким способом) перед сохранением продукта в Прайсматрикс.
Где настраиваются скрипты?
Все зависит от того, на каком этапе вам нужно поменять данные:
1. В конкретном прайсе поставщика (если нужно поправить данные только этого файла до сохранения в систему).
Переходим в нужный прайс поставщика → заходим в Свойства → ищем поле JavaScript Скрипт перед сохранением продукта → нажимаем Открыть в редакторе.

2. В Главном Прайсе (если нужно изменить правила для всего вашего каталога).
Переходим в Функции → Обновить цены и остатки главного прайса → кликаем на Скрипт после обновления JS open in editor.
Обратите внимание: этот скрипт срабатывает уже ПОСЛЕ переоценки. То есть Прайматрикс сначала пересчитывает все цены и остатки, и только потом поверх них запускает ваш код.

Как проверить и сохранить скрипт
Чтобы убедиться, что код работает корректно и не ломает данные, обязательно протестируйте его перед сохранением:
- Загружаем тестовый товар (блок 1):
Впишите артикул товара из вашего прайса и нажмите кнопку Загрузить. Справа отобразятся его исходные данные (например, текущая цена). - Вставляем скрипт и запускаем тест (блок 2):
Вставьте ваш JS-скрипт в редактор слева и нажмите кнопку Тестировать. - Проверяем результат (блок 3):
Внизу в окне Log отобразится ход выполнения скрипта, а в правом нижнем блоке - итоговый JSON товара с обновленными значениями. - Сохраняем (блок 4):
Если логи и результат в порядке, нажмите Сохранить в левом верхнем углу.
Основные поля товара, с которыми будем работать
Вот самые частые названия параметров (полей), которые вы будете менять или использовать в условиях:
| Поле в коде | За что отвечает | Поле в коде | За что отвечает |
|---|---|---|---|
product.Name |
Название товара | product.BarCode |
Штрихкод |
product.Sku |
Артикул | product.Height |
Высота |
product.SkuParent |
Родительский артикул | product.Width |
Ширина |
product.MPN |
Артикул завода | product.Depth |
Глубина / Длина |
product.Price |
Продажная цена | product.Weight |
Вес |
product.PriceOld |
Старая цена | product.Manufacturer |
Бренд / Производитель |
product.RRP |
РРЦ | product.Description |
Полное описание |
product.WholesalePrice |
Закупочная цена | product.ShortDescription |
Короткое описание |
product.Qty |
Количество (остаток) | product.ExternalId |
Внешний ID |
Примеры готовых решений под частые задачи
Обнулить остатки всех товаров
Полезно, если нужно временно скрыть позицию или пересчитать с нуля.
product.Qty = 0;
Обнулить остатки только для конкретной категории
Например, нужно занулить все товары в категории "Батарейки->Батарейки (тип C)":
console.log("Qty on start:" + product.Qty);
for(var i = 0 ; i < product.CategoriesFullPaths.length; i++)
{
var c = product.CategoriesFullPaths[i];
console.log("cat path:" + c);
if (c == "Батарейки->Батарейки (тип C)")
{
product.Qty = 0;
}
}
console.log("Qty on finish:" + product.Qty);
Если остаток от поставщика = 10, сделать у меня остаток = 1
console.log("product.Qty ДО : " + product.Qty);
if (product.Qty === 10) {
product.Qty = 1;
}
console.log("Результат product.Qty: " + product.Qty);
Накинуть доставку на итоговую цену
Цену доставки грузим в любое свободное поле, в нашем случае это PriceOld, складываем еt с основной ценой и очищаем временно занятую ячейку:
if (product.PriceOld) {
product.Price += product.PriceOld;
product.PriceOld = 0;
}
Рассчитать стоимость товара в зависимости от Объемного веса
Сначала считаем объемный вес, и если он больше 100 - увеличиваем цену:
product.WeightVolume = (product.Height * product.Width * product.Depth) / 1000000;
if (product.WeightVolume > 100) {
product.Price *= 1.15;
}
Добавить бренд к названию товара
console.log("старое имя товара: " + product.Name);
if (product.Manufacturer) {
product.Name = product.Name + " " + product.Manufacturer;
}
console.log("новое имя товара: " + product.Name);
Убрать из названия все, что написано в круглых скобках
Превратит "Брюки (размер 46)" в просто "Брюки":
if (product.Name) {
product.Name = product.Name.replace(/[^)]+/g, '').trim();
}
Обрезать слишком длинное название (например, до 100 символов)
if (product.Name && product.Name.length > 100) {
product.Name = product.Name.substring(0, 100);
}
Рассчитать Объемный вес
product.WeightVolume = product.Height*product.Width*product.Depth/10000;
console.log("Объемный вес = " + product.WeightVolume);
Разделить габариты на Высоту, Ширину, Глубину
К примеру, вот такую строку "1.4/31.3/6.1" нужно разделить на составляющие - Высота, Ширина, Глубина.
Для решения этой задачи габариты загружаем в поле Code. И уже поле Code с помощью скрипта разбиваем на части.
if (product.Code) {
var parts = product.Code.split('/');
product.Height = parts[0];
product.Width = parts[1];
product.Depth = parts[2];
}
Очистить поле Родительский артикул (SkuParent)
product.SkuParent = "";
Очистить поле Внешний ID (ExternalId)
Когда нужно обновление делать по артикулу по какой то причине, актуально для Мойсклад, insales, маркетплейсов.
product.ExternalId = "";
Оставить только первую картинку (остальные удалить)
if (product.Images && product.Images.length > 1) {
for (var i = product.Images.length - 1; i >= 1; i--) {
product.Images.RemoveAt(i);
}
}
Добавить расширение .png к ссылке на фото
product.Images[0].OriginalUrl = product.Images[0].OriginalUrl + ".png";
console.log(product.Images[0].OriginalUrl);
Получить значение характеристики
const minOrderFeature = product.FeatureValueGet("Минимальная партия");
Создать новую характеристику
product.FeatureAdd("цвет", "красный")
Первое значение в скобках - это название характеристики,
второе значение - значение характеристики.
Переименовать характеристику у товара
Например, заменяем кривое название "Высота общая" на понятное "Высота":
if (product.Features) {
for (var i = 0; i < product.Features.length; i++) {
if (product.Features[i].Name === "Высота общая") {
product.Features[i].Name = "Высота";
}
}
}
К значению характеристики добавить название товара
const features = product.Features;
function findFeatureByName(features, name) {
const feature = features.find(item => item.Name === name);
return feature;// ? feature.Value : null;
}
const nameToFind = "Размер";
let f = findFeatureByName(features, nameToFind);
if (f)
{
f.value = f.value + " " + product.Name;
}
Удалить мусорные характеристики со значением #NULL!
if (product.Features) {
var count = product.Features.Count || product.Features.length;
for (var i = count - 1; i >= 0; i--) {
if (product.Features[i].Value === "#NULL!") {
product.Features.RemoveAt(i);
}
}
}
Скрипт для Обновления ГП, который ищет по связям поставщика "Поставщик_1" и копирует его остаток в Qty2
var refs = ReferencesHelper.ReferedProductsForMainProduct(Database, product);
var t = JsonConvert.SerializeObject(refs);
product.Qty2 = 0;
for(var i = 0 ; i < refs.Count;i++)
{
var ref = refs[i];
t = JsonConvert.SerializeObject(ref);
if (ref.PriceName == "Поставщик_1")
{
product.Qty2 = ref.Quantity;
console.log("Qty2 was set to " + product.Qty2);
}
}
Скрипт для Обновления ГП, который складывает остатки всех связанных поставщиков
var refs = ReferencesHelper.ReferedProductsForMainProduct(Database, product);
var t = JsonConvert.SerializeObject(refs);
product.Qty = 0
for (var i = 0; i < refs.Count; i++) {
var reference = refs[i];
t = JsonConvert.SerializeObject(reference);
var refProd = Product.LoadFlat(Database, reference.ProductId);
trefProd = JsonConvert.SerializeObject(refProd);
product.Qty += refProd.Qty;
console.log("Qty now is " + product.Qty);
}
Как написать скрипт с помощью ChatGPT
Если вы не владеете JavaScript, можно попросить ChatGPT подготовить скрипт для вашей задачи. Чем подробнее вы опишете исходные данные и желаемый результат, тем проще будет получить подходящий код.
Как правильно сформулировать запрос
Укажите:
- Что нужно изменить: название, артикул, цену, остаток, характеристики или другое поле.
- В каком поле находятся исходные данные.
- Как должен выглядеть результат.
- Нужно ли учитывать условия и исключения.
- Где будет запускаться скрипт: в прайсе поставщика или при обновлении Главного прайса.
Пример запроса
"Напиши JavaScript-скрипт для Прайсматрикс. Задача: есть название товара в поле product.Name и бренд в поле product.Manufacturer. Нужно добавить бренд в конец названия через дефис. Если бренд отсутствует, название не изменять. Добавь вывод исходного и итогового названия в лог. "
После получения кода:
- Скопируйте его в редактор скриптов Прайсматрикс.
- Запустите тестирование.
- Проверьте выходные данные и лог.
- Если возникла ошибка, передайте ChatGPT полный текст ошибки и уточните, что скрипт запускается в Прайсматрикс.
- Сохраните код только после проверки результата.
Примеры использования ChatGPT при создании скриптов:

Готовый пример загрузки из API поставщика
Посмотрите также пример создания скрипта для загрузки данных из API поставщика Svarog RF:
Пишем скрипт с помощью ИЛИ: загрузка из API поставщика Svarog RF
Нужна помощь со скриптом?
Если вы не знаете, как реализовать нужное преобразование, опишите задачу и приведите пример исходных данных и ожидаемого результата. Это поможет быстрее разобраться в задаче и подготовить подходящий скрипт.
Свяжитесь с поддержкой Прайсматрикс, если у вас появились вопросы.
