Алименты по месяцу начисления
Здравствуйте.
На старом форуме взял скрипт, позволяющий рассчитать алименты с учётом сумм заработка по месяцу начисления (актуально для расчёта алиментов с сумм "переходящего отпуска"):
UserAlg608(&info,&r) // алименты по по мес начисл
{
int stolbec = 9; //--- выборка начислений за текущий месяц
double n2;
toMatrLS();
n2=CollectSumm(stolbec-1,0,mrasch, CL_MV | CL_COL | CL_NACH );
//--- выборка удержаний за текущий месяц
double n3;
n3 = CollectSumm(stolbec-1,0,mrasch, CL_MV | CL_COL | CL_UD);
//--- выборка удержаний за прошлый месяц, если они назначены
double n4=0;
double k_nep; int mes = 0;
char M_T_1[90];
sprintf(M_T_1,"%i.01",atoi(data));
double MesTek1 = static_cast_to_double(M_T_1); char M_T_2[90];
sprintf(M_T_2,"%i.%i",atoi(data),atoi(countday));
double MesTek2 = static_cast_to_double(M_T_2); double zz1=info.d1; if(atoi(info.d1) < atoi(MesTek1)) zz1=MesTek1;
double zz2=info.d2; if(atoi(info.d2) > atoi(MesTek2)) zz2=MesTek2; nepoln(zz1,zz2,MesTek1,MesTek2,k_nep,1); double t_nu=n2-n3-n4;
double res1 = t_nu*info.bz/100.;
info.n1=res1*k_nep; if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("Начисления",n2);
infolist.add_record("Удержания",n3);
infolist.add_record("Столбец Т/В",stolbec);
infolist.add_record("Начисл. - Удержержано",t_nu);
infolist.add_record("Проц. алиментов",info.bz);
infolist.add_record("ПромежутРезультат",res1); infolist.add_record("Дат_нач",info.d1);
infolist.add_record("Дат_кон",info.d2);
//infolist.add_record("Зед_1",z1);
//infolist.add_record("Зед_2",z2);
infolist.add_record("Неполн",k_nep);
infolist.add_record("ДатТек1",MesTek1);
infolist.add_record("ДатТек2",MesTek2);
infolist.add_record("ИтоговыйРезультат",info.n1);
}
var simv=poiskprch(info.ikod);
if(simv == 4)
{
char str[81];
char str1[81];
Rkv_from(GetCode(info.crow),"долг",str1,str);
// Долг по алиментам уменьшается при переходе
// в новый месяц на сумму, вычисленную ниже
var r9=atof(str);
if(r9 && r9 < info.n1)
{
// Долг по алиментам ведется и
// долг по алиментам < суммы алиментов
char str1[80];
sprintf(str1,"Долг по алиментам %-8.2f",r9);
if(uprc != NO_SCREEN)
vwriteat(scr04,windrow+1,0,str1);
info.n1=r9;
}
}
return code_Break;
}
Работает всё хорошо, но только если в ЛС один источник/совместительство. Если их несколько, в выборку попадают суммы по всем источникам/совместительствам.
Можно ли функцию CollectSumm научить выбирать суммы только по тому источнику/совместительству, по которому заведён вид алиментов? Ну или что можно использовать вместо неё?
З.Ы. Смотрел "стандартный" скрипт алиментов:
// алименты
// 06.10.1999
//--- выборка начислений за текущий месяц
s1001simv("1","н",info.d1,info.d2,0,ST_ALIMENT,info.n1,2,0); // 08.11.95
//--- выборка удержаний за текущий месяц
double n3;
s1001simv("1","у",info.d1,info.d2,0,ST_ALIMENT,n3,2,0);
//--- выборка удержаний за прошлый месяц, если они назначены
double n4;
s1001simv("2","у",info.d1,info.d2,-1,ST_ALIMENT,n4,2,0);
var t_nu=info.n1-n3-n4;
info.n1=info.n1-n3-n4;
info.n1=info.n1*info.bz/100.;
if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("Столбец Т/В",ST_ALIMENT+1);
infolist.add_record("Начисл. - Удержержано",t_nu);
infolist.add_record("Проц. алиментов",info.bz);
infolist.add_record("Результат",info.n1);
}
var simv=poiskprch(info.ikod);
if(simv == 4)
{
char str[256];
char str1[256];
Rkv_from(GetCode(info.crow),"долг",str1,str);
// Долг по алиментам уменьшается при переходе
// в новый месяц на сумму, вычисленную ниже
var r9=atof(str);
if(r9 && r9 < info.n1)
{
// Долг по алиментам ведется и
// долг по алиментам < суммы алиментов
char str1[80];
sprintf(str1,"Долг по алиментам %-8.2f",r9);
if(uprc != NO_SCREEN)
vwriteat(scr04,windrow+1,0,str1);
info.n1=r9;
}
}
return code_MDefault;
}
Тут другая беда: функция s1001simv умеет выбирать суммы с учетом источника/совместительства, но не умеет выбирать суммы по месяцу начисления. Чем её можно заменить?
Ответ
var CurProp = GetCurPropCountLS(); ... n2=CollectSummProp(stolbec-1,0,mrasch, CL_MV | CL_COL | CL_NACH,CurProp); ... n3 = CollectSummProp(stolbec-1,0,mrasch, CL_MV | CL_COL | CL_UD,CurProp);
Вместо s1001simv можно использовать s1001simv_mv ( Flag==CL_MV | CL_COL | CL_NACH)
Это первое что попробовал.
Делал так:
s1001simv("1","н",info.d1,info.d2,0,ST_ALIMENT,info.n1,2,0);
заменил на:
info.n1 = s1001simv_mv("1",info.d1,info.d2,0,ST_ALIMENT,2, CL_MV | CL_COL | CL_NACH, 0 );
Не взлетело
Что сделал не так?
s1001simv_mv выборку по источникам делает (в данном случае по всем источникам). Если у вас источники - то взлетит если вместо 0 перед ST_ALIMENT укажете mrasch.
Если же исп.должности нужны то
var CurProp = GetCurPropCountLS(); info.n1 = s1001simv_mv("1",info.d1,info.d2,mrasch,ST_ALIMENT,2, CL_MV | CL_COL | CL_NACH, CurProp);
CL_COL надо тоже убрать из параметров.
Правильный флаг: CL_EXACT | CL_MV | CL_NACH для начислений и CL_EXACT | CL_MV | CL_UD - для удержаний. В противном случае если будет несколько строк с одинаковым кодом, суммы по этому коду удвоятся.
Оба алгоритма поправили :)
Может нам параметризовать поставочный? :)
Большинству клиентов реализованный в КЗ расчёт алиментов с преходящего отпуска категорически не нравится. Но есть и такие, которых всё устраивает (м.б. просто не обращают внимание?). Поэтому параметризовать поставочный было бы здорово.
Скорее всего он перестал им категорически не нравится после того как отпускные перестали неожиданно быть зарплатой и стали облагаться по месяцу начисления.
в поставку добавили параметр 0 - по принадлежности, 1 - по начислению
Добрый день!
Поменяли у вида алиментов параметр По начислению=1.
Начисляем отпуск в марте за апрель, допустим, с 10.04 по 15.04.
С этой суммы отпускных в марте алименты не удерживаются, закрываем месяц, переходим на апрель, и в апреле алименты не посчитались с этой суммы.
Здравствуйте.
Надеялись, что поправили, когда алименты по начислению не видят строки за пределами действия дат текущего месяца (бл, отп и тд) :(
Поправьте, пожалуйста или скажите, как правильнее поправить.
можете пока что 2 поставить в параметры алгоритма (но тогда лучше исключить вид 318 при пересчетах за прошлые месяцы)
в поставке такой же расчет сделаем по-умолчанию с "Месяц начала расчета НДФЛ по кассе"
Не совсем понятно, как будет отрабатывать 2, если возможные значения первого параметра 0 и 1
в списке изменений к 11.05.2018 релиз 597.19
есть пункт 8) Еще один способ выборки доходов для алиментов. По месяцу начисления, без учета дат действия строк (в ТВХ в первом параметре для 218 алгоритма надо поставить 2)
Здравствуйте.
Надеялись, что поправили, когда алименты по начислению не видят строки за пределами действия дат текущего месяца (бл, отп и тд) :(
Поправьте, пожалуйста или скажите, как правильнее поправить.
Сервис поддержки клиентов работает на платформе UserEcho