0
Отвечен

Расчет отпуска из таблицы

mid2018 4 года назад в Расчеты начислений и удержаний / Отпускные обновлен Гашков Николай (Эксперт) 4 года назад 3

Добрый день!

Написал ф-цию,  которая позволяет производить расчет отпуска из таблицы по, ранее полученной информации 

о датах начала и конца отпуска.

Ф-ция создана на основе двух систмных:  SysIntegrProcessOneOtpusk  и  SrOtp.

Расчет полностью повторяет тот расчет, который запускается по Alt_F2.

Но есть одна особенность - в расчете из таблицы появляется сообщение:

                    В периоде отпуска обнаружен период: ”прочие исключаемые периоды”
                                       с 15.05.2020 по 31.05.2020 — Основной отпуск

                                       с 15.05.2020 по 31.05.2020 — прочие исключаемые периоды

                                       Продолжить расчет отпуска?

Возможно это тот случай, который предсказал  Damir 1 неделю назад

 ”И возможно будут подводные камни, которые понадобится дорабатывать разработчикам.”

Но если,  несмотря на сообщение, продолжить то, расчет полностью совпадает с расчетом по Alt_F2,

включая заполнение табеля.

Ф-ция работает из  USFUNCRW:

SrOtpTab(tab,Src,Beg,End)
{
int tn = atoi(tab);
char ls1[90]; lsname(Find_Full_TN(tn),ls1); FreeSpaceString(ls1,3,"");
lsread(ls1,0); // инициализация ТН

bool calcBySrc=false;
if (Str_Cmp(Src," "," ")!=0) calcBySrc=true; //указали источник

var BegKD=KDateFromStr(Beg);
var EndKD=KDateFromStr(End);

int tmpMrasch=mrasch;
for ( int m=BegKD.GetAbs(); m<=EndKD.GetAbs(); m++ )
{
if (mmtek+B2MES) continue;
s50(m);
int z1,z2;
s6400(BegKD.GetDouble(),EndKD.GetDouble(),z1,z2,data);

zamena_simv_v_tab("nrsw","О",calm,z1,z2,EOF,0);
s145(colc2,1); //сохранение табеля за месяц
}
s50(tmpMrasch);
//return 0;

int TypeOtp; TypeOtp = OTPUSK_OSN;
var BegD=KDateFromStr(Beg);
var EndD=KDateFromStr(End);
int monthSr=0; // месяц для расчета среднего


var Sredn = CreateObject("KCalcSredn"); //класс для расчета среднего
//Sredn.InitOtp(DateBeg,0); // Инициализация способа расчета "по-среднему"
Sredn.InitOtp2(BegD,EndD,TypeOtp,monthSr,0);

var Nastr = Sredn.GetNastr();
string OTPUSK_CNF_TABLE = "отпуск";
int flag_rvmes=GetCommonCnfInt("FLAG_RVMES",OTPUSK_CNF_TABLE);
int tip_koef =GetCommonCnfInt("TIP_KOEF",OTPUSK_CNF_TABLE);
Nastr.SetNastr(FLAG_RVMES,flag_rvmes);
Nastr.SetNastr(TIP_KOEF,tip_koef);
Nastr.SetNastr(FLAG_SILENT,1);

Sredn.Calculate(1,2);

if (!calcBySrc)
return Sredn.SumSredn();
else
{
var Prop = CreateObject("APropBE"); Prop.InitSrc(ExtSrcToInt(Src[0]));
return Sredn.SumSrednAProp(Prop);
}
}

Отпускные
На рассмотрении

Добрый день.

Отключить сообщение можно через настройку 

Настройка -> 4. Настройки параметров расчета -> 3. Настройка расчета отпуска -> Проверка периода отпуска

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