0
Отвечен

Ограничение РВ нормой месяца

KTV 5 месяцев назад в Расчеты начислений и удержаний / Алгоритмы обновлен Гашков Николай (Эксперт) 3 месяца назад 8

Добрый день!

В алгоритме расчета с номером 6, указываю вот такие параметры

Image 8479

РВ берется для этого вида с другого вида (оклады).

Единичка, отмеченная маркером в параметрах, вроде должна ограничивать взятое РВ нормой месяца, если его много, но почему-то это не делается.

Пробовала поставить еще один следующий параметр 2=приводить к норме месяца, он работает, если РВ много. А если не весь месяц отработан, то дополняется до нормы, что тоже неправильно.

Как настроить?

Здравствуйте.

Единичка, отмеченная маркером в параметрах, вроде должна ограничивать взятое РВ нормой месяца, если его много, но почему-то это не делается.

Не должна.

Единичка в шестом параметре приводит результат к числу месяцев периода, заданного 3-м и 4-м параметрами.

Чтобы ограничить РВ нормой месяца, единичку надо ставить в пятый параметр, а шестой не указывать. Если же в шестом поставить двоечку, то результат, каким бы он ни был, будет приведён к норме месяца.


З.Ы. На мой взгляд, очень странная попытка модификации 6-го алгоритма: D1 у Вас в днях (первый параметр), а D2 вычисляете путем деления БЗ на НРВ в часах...

Ох ты ж... Видимо недельная жара сказалась.

Это я вообще в справке не ту функцию посмотрела, надо Ф, а я посмотрела ФВ (она же Л), и пытаюсь нарисовать не те параметры.

Ну и единица тоже...

В общем, все работает, спасибо, что не оставили без внимания.

Нет, все-таки не так.

D1=Ф(2,60,0,0,1,0) - пишу так, что получается: если часов больше нормы, то берет норму, это правильно, а если меньше нормы (отработан неполный месяц), то все равно берет норму, а это уже не правильно.

Надо, чтобы брал часы с вида, но не больше нормы.

Странно... видимо, где-то что-то поломатое...

Тогда как-то так:

case 999:
{
struct Struct_Alg Work;
Get_AlgWithParam(Work,info.ikod);
//Первый параметр алгоритма - номер столбца ТВХ для выборки ФРВ
int NumCol=25; // номер столбца ТВХ по умолчанию
if (Work.Count_Par>0)
{
NumCol = atoi(reinterpret_cast_to_string(Work.List_Par[0]));
}
var D = CreateObject("KDate");
D.SetMonth(mtek);
double dn = 0., ch = 0.;
RVFromNUCol(D.GetRel(),ch,dn,NumCol-1);
if(ch>=norm(2)) r[2] = norm(2);
else r[2] = ch;
info.n1 = bz/norm(2)*r[2];

if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("НРВ",norm(2));
infolist.add_record("ФРВ по столбцу",ch);
infolist.add_record("ФРВ для расчета",r[2]);
infolist.add_record("Базовое значение",bz);
infolist.add_record("Результат",n1);
}
return code_Break;
}

Добрый день!

А  подскажите, пожалуйста, а переменную bz как определить?

Код надо вставить в ..\RASCHET\SCRIPT\user\USALG.S между строками

// начало описания алгоритмов пользователя
// конец описания алгоритмов пользователя

Переменная bz в USALG.S уже определена.

USALG.S

Игорь, благодарю, все получилось.

Сервис поддержки клиентов работает на платформе UserEcho