Closed unpete closed 6 years ago
// на входе в переменной obj имеем:
// {
// ox, - объект характеристики текущей продукции
// elm, - текущий элемент, обычно - профиль
// cnstr, - номер конструкции или элемента для привязки параметров
// inset, - вставка элемента или допвставка
// row_ins, - строка спецификации вставки, из которой произведён вызов формулы
// row_spec - строка спецификации изделия, в которой заполняем totqty1
// }
// получаем ссылку параметра, значение которого используем при поиске характеристики
const {elm, row_ins, row_spec} = obj;
// габаритная площадь
row_spec.s = row_spec.totqty = row_spec.len * row_spec.width;
// коэффициент формы
let kf = 1;
// стеклопакет прямоугольный?
if(!elm.is_rectangular){
const {profiles, path} = elm;
// у фигуры есть искривления?
if(path.hasHandles()){
let curvs = 0; // количество искривлений > 1?
let ccw = false;// вогнутость
profiles.forEach(({sub_path}) => {
if(sub_path.hasHandles()){
curvs++;
if(!ccw){
ccw = sub_path.getCurvatureAt(sub_path.length / 2) < 0;
}
}
});
kf = (curvs > 1 || ccw) ? 2 : 1.5;
}
// искривлений нет
else {
// в зависимости от числа рёбер
kf = profiles.length <= 4 ? 1.3 : 1.5;
}
}
// коэффициент площади
let ks = 1;
if(row_spec.s <= 0.3){
ks = 1.25;
}
else if(row_spec.s > 3 && row_spec.s <= 4){
ks = 1.25;
}
else if(row_spec.s > 4){
ks = 3;
}
row_spec.totqty1 = row_spec.s * kf * ks;
return row_ins.quantity;
По мотивам задачи про наценку стеклопакетов в зависимости от формы и площади.
totqty
иtotqty1
- первое хранит чистую потребность (например, площадь стеклопакета или длину профиля), второе - потребность с учетом коэффициента потерьloss_factor
(обрезь, усыхание, брак и т.д.)totqty1
. Традиционно, он рассчитывается, какtotqty
, умноженный наloss_factor
из карточки номенклатуры, но нам никто не мешает рассчитывать этот показатель формулой, внутри которой легко заложить нелинейность и (или) аппроксимацииЗадача с наценкой сводится к написанию формулы - текст приведу ниже.
Искривления
totqty1
можно использовать не только в ценообразовании и не только в сторону увеличения. Например, если две строки спецификации делаются из одной заготовки (штапик и створка в деревянных окнах), отражение такой потребности можно украсить с помощью этого механизма.