0
Отвечен

Ночные

Наталья78 3 года назад в Расчеты начислений и удержаний / Алгоритмы обновлен Игорь Шалдин 10 месяцев назад 12

Добрый день! создали свой вид НУ ночные 707, но считает не верно. по 25 столбцу включат в расчет ставки и отпускные.  zpl_zplinfo(20210729_220227).cab. И еще вопрос: у сторожа настроен график на год, средняя НРВ 164,33, в 82 и 83 сетке значения поставлены, но он не видит их

расчет нужен БЗ (оклад) /НРВ(средняя по году 164,33) *35%*ФРВ ночных часов

На рассмотрении

Добрый день!

Для начала попробуйте простой алгоритм:

UserAlg817(&info,&r)
{
// Ночные=БЗ(оклад)/НРВ(средняя по году 164.33) *35%*ФРВ ночных часов
// допл. за ночн. время; РВ - в часах
// БЗ - процент доплаты
double n5, r9, nrv;
// s96(info.d1,info.d2,n5,1);
poiskbz(0, 4.,0," ",r9); n5=r9; //сумма БЗ вида 104(Оклад)
char t[20];
if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
return code_ReturnCode;
nrv=164.33;
info.n1=n5/nrv*r[2]*info.bz/100.;
if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("Оклад (104 вид)",n5);
infolist.add_record("НРВ",nrv);
infolist.add_record("Рабочее время",r[2]);
infolist.add_record("Процент выплаты",info.bz);
infolist.add_record("Результат",info.n1);
}
return code_Break;
}

Вставьте его в файл SCRIPT\user\USALG.S в самый конец, а в начале файла USALG.S напишите обращение к этому алгоритму (выделено жирным текстом):

// case 712:
// return UserAlg712(info,r);

case 817: 
return UserAlg817(info,r);

default:
RetFlag=0;
break;

В ТВХ у вида 707 поставьте алгоритм 817.

Image 8236

USALG.S

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


Вставили предложенный алгоритм в файл, при расчете 117вида вышла ошибка. Посмотрите пожалуйста, где допустили ошибку.

ZPL_zplinfo(20240311_121539).cab

Добрый день!

Поправил ссылку на 106 вид (у вас, оказывается нужна ссылка на 106 вид, а не на 104).

Посчитал вид 106 и затем посчитал вид 117 с РВ=10 . Получил:

Image 8239

Image 8241

Перепишите весь файл USALG.S в каталог SCRIPT\user вместо старого файла и оттранслируйте его (старый файл USALG.S можете где-нибудь сохранить).

Благодарю ! Всё получилось.)

А можно еще чтоб и по совместительству считался? Оклад по совместительству 206.

Через универсальный алгоритм 1 будет так:

Image 8244

В 82 сетку надо добавить вид 707 и поставить для него НРВ на 2024 год.

Расчет ставки производится по стандартному столбцу ТВХ. Оба оклада д.б. в нем отмечены символом 1.

Если стандартный столбец не подходит, надо добавить свой и указать его в параметрах: А(2,номер_столбца)

Поправка: параметры алгоритма д.б. такие:

1=А(0)/Ч(607,82);2=П(1)*У;15=П(2)*Ч(607,83);11=У;17=2  

Если через параметры 1-го алгоритма не хотите, вот скриптовый алгоритм:

case 607:
{
// Доплата за ночное время сторожам;
// Ставка считается по столбцу, заданному в параметре 1
// НРВ - из сетки с номером, заданном в параметре 2
// БЗ - из сетки с номером, заданном в параметре 3

// Параметры алгоритма
struct Struct_Alg Work;
Get_AlgWithParam(Work,info.ikod);
// Параметр 1 - номер столбца для расчёта ставки.
int stolbec=1001; // Столбец ТВХ по умолчанию
if (Work.Count_Par>0)
{
stolbec = atoi(reinterpret_cast_to_string(Work.List_Par[0]));
}
// Параметр 2 - номер сетки с НРВ
int NumSetNRV=82; // Номер сетки с НРВ по умолчанию
if (Work.Count_Par>1)
{
NumSetNRV = atoi(reinterpret_cast_to_string(Work.List_Par[1]));
}
// Параметр 3 - номер сетки с коэфф. доплаты
int NumSetKFC=83; // Номер сетки с коэфф. доплаты по умолчанию
if (Work.Count_Par>1)
{
NumSetNRV = atoi(reinterpret_cast_to_string(Work.List_Par[1]));
}

char t[20];
if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
return code_ReturnCode;

var D = CreateObject("KDate");
D.SetDateII(countday,mrasch);
double NormZar=0.;
ras_normzar(stolbec-1,"*",5,4,NormZar,D); // Ставка в месяц

double nrv=0.;
Value_For_Table_Cod(NumSetNRV,info.kod,data,nrv); // НРВ из сетки

double kfc=0.;
Value_For_Table_Cod(NumSetKFC,info.kod,data,kfc); // коэфф. доплаты из сетки

info.n1=NormZar/nrv*r[2]*kfc; // Результат

if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("Ставка",NormZar);
infolist.add_record("НРВ",nrv);
infolist.add_record("Рабочее время",r[2]);
infolist.add_record("Коэфф. доплаты",kfc);
infolist.add_record("Результат",info.n1);
}
return code_Break;
}

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

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

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

В ТВХ у вида 707 поставить алгоритм 607.

З.Ы. Стандартный столбец для расчёта ставки (1-й столбец спецТВХ) в вашем случае скорее всего не подойдёт. Слишком много в нём отмечено видов, не входящих в расчёт ночных. Да и заполнен он, мягко говоря, странно и с ошибками (не по правилам заполнения столбца для расчёта ставки).

Лучше добавить в пользовательскую ТВХ отдельный столбец для расчёта ночных и указать его номер в первом параметре 607-го алгоритма.

З.З.Ы.

Если заменили свой ..\SCRIPT\user\USALG.S на выложенный выше, проверьте работоспособность 175-го вида. Есть подозрение, что для него вы написали скриптовый алгоритм, который остался в "старом" USALG.S

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