Расчёт стоимости

Материал из K3-Macro
Макро | Мебельные команды и функции | Работа с заказом | Длинномеры | Комната | Мебельная панель | Профиль | Каркас | Виды и фильтры | Расчёт стоимости | Мебельные объекты | Работа с изделиями в сцене | Работа с мебельными состояниями | Запрос данных из Номенклатуры | Получение информации о положении вспомогательных файлов | Создание отчётов FastReport | Работа с чертежами | Пользовательские подстановки | Параметризация кривых | Приписывание мебельных позиций | Состояние мебельных пунктов меню и панелей инструментов | Определение мебельных габаритных координат | Заполнение массива параметрами отверстий | Поиск прототипа | Информация о линии свободного крепежа | Хэш-код объекта | Выгрузка информации в мебельную базу

В данном разделе собраны команды и функции по расчёту стоимости мебельных изделий в проекте.

Принцип работы таков. При расчёте стоимости элемента ему приписывается Scratch-атрибут SumCost. В этом атрибуте пишем графы с названиями калькуляций и рассчитанную стоимость по графе. Графа SumCost содержит посчитанную стоимость всего элемента.

Последняя рассчитанная стоимость в Scratch-атрибуте пишется в раздел.

Перед использованием расчёта стоимости нужно задать алгоритмы расчёта для каждого из возможных FurnType'ов (типов мебельных элементов). Если этого не сделано, то берутся алгоритмы по умолчанию.

Для задания алгоритмов, FurnType можно задавать не полностью, а только значащие цифры. Поиск в словаре алгоритмов осуществляется по заданным цифрам.

Если алгоритм не только вычисляет конечную стоимость, но и хочет записать графы калькуляции, то эту информацию в атрибут пишет сам алгоритм. Конечная стоимость, в любом случае, запишется функцией. Стоимость по последнему запущенному алгоритму расчёта пишется в раздел CalcSum. Алгоритм также может записать стоимость в свой раздел со своим названием. Если пользователю этот раздел известен, он сможет ее оттуда прочитать.

Пример Sratch-атрибута SumCost

Scratch-атрибут
SumChildren
SumCost=494.648
CalcSum
SumCost=494.648

В данном случае видно, что по алгоритму "SumChildren" посчитана стоимость в 494.648 ед. По последнему выполненному алгоритму посчитана стоимость в 494.648 ед

Встроенный расчёт стоимости[править | править код]

LOGICAL SumCost(INT <Mode>, VARIANT <Params>)

Функция рассчитывает и возвращает стоимость мебельного элемента, поссчитанную по заданному алгоритму (алгоритмам). Поведение функции зависит от режима <Mode>. Функция возвращает 1 в случае успешного завершения и 0 в случае ошибки.


<Mode>=1 — Задать алгоритмы расчёта

LOGICAL SumCost(1, STRING <FurnType>, {INT <AlgNum> | STRING <MacroName>})

Функция задает алгоритм расчёта стоимости мебельного элемента с типом <FurnType>. Алгоритм задается номером <AlgNum> или именем макропрограммы <MacroName>. Если алгоритмы не заданы, используются алгоритмы по умолчанию. Следует иметь в виду, что некоторые алгоритмы могут использоваться только для расчёта

Номер
Название алгоритма
Описание алгоритма
1

SumChildren

Стоимость элемента равна стоимости составляющих

2


Стоимость элемента считается по графе "Калькуляция" библиотеки прототипов (пока не реализовано)

3

MacroSumCost

Стоимость считается по макро

4

PanelSimple

Стоимость панели - длины*ширина*прайс+цена составляющих

5

PanelPrice

Стоимость панели - длина*ширина*коэфцены*прайс+цена составляющих

6

PanelPriceWaste

Стоимость панели - длина*ширина*коэфцены*коэфотход*прайс+цена составляющих

7

BandSimple

Стоимость кромки - длина*прайс

8

BandPrice

Стоимость кромки - длина*коэфцены*прайс

9

BandPriceWaste

Стоимость кромки - длина*коэфцены*коэфотход*прайс

10

ProfileSimple

Стоимость профиля - длина*прайс

11

ProfilePrice

Стоимость профиля - длина*коэфцены*прайс

12

ProfilePriceWaste

Стоимость профиля - длина*коэфцены*коэфотход*прайс

13

AccSimple

Стоимость комплектующего - прайс

14

AccPrice

Стоимость комплектующего - коэфцены*прайс

15

AccPriceWaste

Стоимость комплектующего - коэфцены*коэфотход*прайс

16

AccSimpleCh

Стоимость комплектующего - прайс+цена составляющих

17

AccPriceCh

Стоимость комплектующего - коэфцены*прайс+цена составляющих

18

AccPriceWasteCh

Стоимость комплектующего - коэфцены*коэфотход*прайс+цена составляющих

19

SumObject

Стоимость изделия - если изделие стандартное или техника и пр - по каталогу. Иначе - по составу

I.png Некоторые комплектующие имеют составные части. Например, мебельная ручка имеет в своем составе набор крепежей, который может быть посчитан отдельно. В этом случае правильней использовать алгоритм расчёта комплектующих с учетом цены составляющих.
I.png "Коэфцены" и "Коэфотход" это свойства PriceCoeff и WasteCoeff (коэффициент цены и коэффициент отхода) из Номенклатурного справочника. если эти свойства не заданы явно, то берутся значения, равные единице

По умолчанию заданы следующие алгоритмы расчёта:

FurnType
Название алгоритма
Описание алгоритма
01****

Стоимость панели - длины*ширина*прайс+цена составляющих

Стоимость панели - длины*ширина*прайс+цена составляющих

02****

ProfileSimple

Стоимость профиля - длина*прайс

04****

AccSimpleCh

Стоимость комплектующего - прайс+цена составляющих

05****

BandSimple

Стоимость кромки - длина*прайс

10****

SumObject

Стоимость изделия - если изделие стандартное или техника и пр - по каталогу. Иначе - по составу

Остальные

SumChildren

Стоимость элемента равна стоимости составляющих


<Mode>=2 — Рассчитать стоимость

LOGICAL SumCost(2, DOUBLE VARNAME <Sum>[, OBJECT <Object>])

Функция рассчитывает стоимость мебельного элемента <Object> (или всех мебельных элементов сцены, если параметр <Object> не задан) по заданным алгоритмам (см. выше). Рассчитанная стоимость и калькуляция (если есть) пишется в Scratch-атрибут SumCost. Сама сумма при этом возвращается в переменную <Sum>.


<Mode>=3 — Вернуть рассчитанную стоимость

LOGICAL SumCost(3, DOUBLE <Sum>[, OBJECT <Object>[, STRING <Volume>]])

Функция возвращает посчитанную ранее (не пересчитывая) стоимость мебельного элемента <Object>. Если задан параметр <Volume>, то возвращается стоимость, посчитанная по разделу с названием <Volume>. Иначе возвращается последняя посчитанная стоимость. Если не заданы ни <Object>, ни <Volume>, то возвращается последняя рассчитанная стоимость всей сцены.

Pluso.png Стоимость всей сцены считается как сумма последних рассчитанных стоимостей всех мебельных элементов верхнего уровня, находящихся в сцене.

Расчёт стоимости по макро[править | править код]

Если стоимость считается по макро, то в макро в качестве параметров передаются ссылка на элемент. В переменную состояния SumCost пишется рассчитанная стоимость элемента. Если она меньше нуля, то стоимость посчитать не удалось. Также макро должен присвоить элементу атрибут SumCost с калькуляцией расчёта по общим правилам.

Пример макрорасчёта стоимости[править | править код]

//-- Расчет стоимости изделия по макро

defarr pan[10];
NULLOUT=initarray(pan,0);
defarr xm[6];

getpar obj; //-- Получаем объект

//-- Проверяем, не панель ли это?
ft=getattr(obj,"FurnType","");
if (left(ft,2)!="01") //-- Это не панель
{
  NULLOUT=setvarinst(1,"SumCost",-1);
}
//-- Инициализируем панель
pan[1]=obj;
NULLOUT=getpan6par(1,pan);
//-- Читаем материал панели
pan[1]=0;
NULLOUT=getpan6par(2,pan);
matID=pan[1];
//-- Читаем цену материала
Price=priceinfo(matID,"PRICE",0);
//-- Читаем размеры панели
pan[1]=0;
NULLOUT=getpan6par(11,pan);
if (pan[1]!=2)  //-- Если панель не прямоугольная, читаем ее габариты
{
  NULLOUT=objgab3(obj,xm);
  length=xm[4]-xm[1];
  width=xm[5]-xm[2];
}
else  //-- Иначе бедем все их параметров
{
  length=pan[2];
  width=pan[3];
}
//-- Очищаем структуру панели
NULLOUT=getpan6par(999,pan);
//-- Считаем стоимость
SumCost=length*Width*Price/1000000;
//-- Записываем ее в системную переменную
NULLOUT=setvarinst(1,"SumCost",SumCost);
exit;

Макро | Мебельные команды и функции | Работа с заказом | Длинномеры | Комната | Мебельная панель | Профиль | Каркас | Виды и фильтры | Расчёт стоимости | Мебельные объекты | Работа с изделиями в сцене | Работа с мебельными состояниями | Запрос данных из Номенклатуры | Получение информации о положении вспомогательных файлов | Создание отчётов FastReport | Работа с чертежами | Пользовательские подстановки | Параметризация кривых | Приписывание мебельных позиций | Состояние мебельных пунктов меню и панелей инструментов | Определение мебельных габаритных координат | Заполнение массива параметрами отверстий | Поиск прототипа | Информация о линии свободного крепежа | Хэш-код объекта | Выгрузка информации в мебельную базу