Тип свойства: выражение

Иногда бывает полезно вычислять некоторые значения свойств на основе уже имеющихся. Например, объем упаковки (параллелепипеда со сторонами a, b и c) вычисляется по формуле V = a * b * c.

Пример посложнее: вычислить массу автомобильной шины с пригодной для практического применения точностью можно по формуле M = 0.000014 * (D ^ 1.6) * (W * 17 + W * (H - 15) * 0.69), где D - посадочный диаметр в дюймах, W - ширина в миллиметрах, H - высота в процентах от ширины.

Для вычисления таких значений в catalog.app есть тип свойства "выражение". Впрочем, его возможности гораздо шире, это полноценный язык программирования.

Для описания выражений мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев. Подробнее с языком можно ознакимиться здесь.

Дополнительно доступна функция возведения в степень pow.

Объект с данными доступен в свойстве model. Проверить корректность работы выражения можно нажав на кнопку "Тест". После этого появится окно "Результаты", в котором, появится результат выражения или сообщения об ошибках. Модель данных можно увидеть, нажав на кнопку "Модель". И для проверки корректности, и для просмотра модели данных необходимо указать Id товара, который будет использован в качестве тестовой модели.

В объект с данными товара другие вычисляемые свойства не добавляются.

Пример модели данных:

{
    "Category": "Шины",
    "Vendor": "Formula",
    "Name": "Шина зимняя(Ice 235/55R17 103T,шипы)",
    "Article": null,
    "Color": null,
    "Ean": "8019227278347",
    "Properties": {
        "Ширина профиля": 235.000000,
        "Диаметр": 17.000000,
        "Шипы": true,
        "Возможность ошиповки": false,
        "Тип автомобиля": ["легковой"],
        "Способ герметизации": ["бескамерные"],
        "Конструкция": "радиальные",
        "Страна производства": "Китай",
        "Высота профиля": 55,
        "Производитель": "Formula",
        "Импортер": "ООО ПОКРЫШКИНО Минский р-н, Щомыслицкий с/с, 31-1 район аг. Озерцо, каб. 107",
        "Ставка НДС": 20.000000
    },
    "Tags": [
        {
            "Id": 1,
            "Name": "Черная пятница"
        },
        {
            "Id": 2,
            "Name": "11.11"
        }
    ]
}

Пример вычисления массы шины по представленной модели:

d = model.Properties["Диаметр"];
w = model.Properties["Ширина профиля"];
h = model.Properties["Высота профиля"];
ret 0.000014 * pow(d, 1.6) * (w * 17 + w * (h - 15) * 0.69);

Результат:

13,653658330880194600000000000