0
Отвечен

Выделить отдельно выслугу лет

Алексей П 1 год назад в Прочее обновлен Гашков Николай (Эксперт) 1 год назад 6

Добрый день!
Есть стандартный вид 278 Выслуга лет которая считается по столбцу С1 ТВХ 


Необходимо добавить еще один вид Выслуги, который считал бы с одного конкретного вида начисления. Мы так понимаем, что нужно указать другой столбец для выборки ? 

Подскажите какой алгоритм поставить

Ответ

Ответ

В вашем случае не совсем подойдет прямо данный алгоритм: он высчитывает ставку, а у вас отмечен 1 вид 128 и он в процентах, то что вы отметили его "1" в 28 столбце он взял БЗ 100/18(нрв в днях) и получили 5.55 * рв 8.52 * 0,3(%стаж) = 14,2). Если Вам нужно применить % выслуги к начисленной сумме (128 код в вашем случае) - скорее всего нужен свой алгоритм для данного вида: что-то типа:

Image 7131

в параметрах ставите столбец выборки.

/*********************/

UserAlg978(&info,&r)
{
int NumSet = 78; // номер сетки
int stolbec= 25; // Столбец по умолчанию
struct Struct_Alg Work;
Get_AlgWithParam(Work,info.ikod); // 31.01.1995
// Work.Count_Par - число паpаметpов для кода алгоpитма
//-- параметр 1 - столбец ТВХ
if(Work.Count_Par > 0)
{
int i = atoi(reinterpret_cast_to_string(Work.List_Par[0]));
if ( i>0 ) stolbec = i;
}
// Выслуга лет // 17.04.97
//procent_ot_staga(78,"datavys",1,0,31,info.crow,d1,d2,&n3); //по-старому
double n3;
procent_ot_staga(NumSet,"datavys",1,0,1,info.crow,info.d1,info.d2,n3);
// n3 - % от стажа
double n7;
s100simv("1","н",0,stolbec-1,n7,0);
char t[20];
if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
return code_ReturnCode;

info.n1=n7*n3/100.;

if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("сумма выборки",n7);
infolist.add_record("столбец выборки",stolbec);
infolist.add_record("Процент выслуги",n3);
infolist.add_record("Результат",info.n1);
}
return code_Break;
}

/*************************************/

Стандартный вид 278 (Выслуга лет) должен остаться как поставочный. Если мы добавим еще один вид Выслуги и добавим  Алгоритм 178 с этими параметрами, то это не повлияет на 278 Выслугу?

Нет, конечно. У вас эти выслуги по разным столбцам будут считаться

Алгоритм поставили (на 28 столбец)

Image 7124

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

Считать должно на примере (как хотят увидеть расчетчики)

128 вид 604,36 руб  умнож на % по стажу ( в данном примере 30% должно быть из сетки по выслуге) = 181,3 руб. 


А выходит такой расчет

Image 7125

Image 7126

Как обычная Выслуга 278 вид считается, это устраивает расчетчиков. Такой же алгоритм 178 и высчитывается от 4985,98 на 30% из сетки по выслуге

Image 7127

Как это было настроено в 278 виде мы не совсем понимаем. Но расчетчики хотят увидеть такой же результат у отдельной вида по выслуге 277 который бы считался только с 128 вида


Если будет возможность посмотреть сохраненку ZPL_zplinfo_full(20230209_101856).cab

Ответ

В вашем случае не совсем подойдет прямо данный алгоритм: он высчитывает ставку, а у вас отмечен 1 вид 128 и он в процентах, то что вы отметили его "1" в 28 столбце он взял БЗ 100/18(нрв в днях) и получили 5.55 * рв 8.52 * 0,3(%стаж) = 14,2). Если Вам нужно применить % выслуги к начисленной сумме (128 код в вашем случае) - скорее всего нужен свой алгоритм для данного вида: что-то типа:

Image 7131

в параметрах ставите столбец выборки.

/*********************/

UserAlg978(&info,&r)
{
int NumSet = 78; // номер сетки
int stolbec= 25; // Столбец по умолчанию
struct Struct_Alg Work;
Get_AlgWithParam(Work,info.ikod); // 31.01.1995
// Work.Count_Par - число паpаметpов для кода алгоpитма
//-- параметр 1 - столбец ТВХ
if(Work.Count_Par > 0)
{
int i = atoi(reinterpret_cast_to_string(Work.List_Par[0]));
if ( i>0 ) stolbec = i;
}
// Выслуга лет // 17.04.97
//procent_ot_staga(78,"datavys",1,0,31,info.crow,d1,d2,&n3); //по-старому
double n3;
procent_ot_staga(NumSet,"datavys",1,0,1,info.crow,info.d1,info.d2,n3);
// n3 - % от стажа
double n7;
s100simv("1","н",0,stolbec-1,n7,0);
char t[20];
if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
return code_ReturnCode;

info.n1=n7*n3/100.;

if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("сумма выборки",n7);
infolist.add_record("столбец выборки",stolbec);
infolist.add_record("Процент выслуги",n3);
infolist.add_record("Результат",info.n1);
}
return code_Break;
}

/*************************************/

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