import "useful.dll" import "layer92.dll" sub21a() { return PriorityCall("UserSub21a","SysSub21a"); } sub21() { return PriorityCall("UserSub21","SysSub21"); } sub21b() { return PriorityCall("UserSub21b","SysSub21b"); } SysSub21a() /* Первоначальные запросы для аванса, если нужны */ //////////////////////////////////////////////////////////// // vspom[0] - процент аванса*100(чтобы м.б.дробные доли указывать) // ( или 0, если аванс суммой ) // vspom[1] - 0 - округлять, 1 - отбрасывать // vspom[2] - округлять до ... // vspom[3] - вид аванса //////////////////////////////////////////////////////////// { var AVANS_CNTR_CNF = "аванс"; int vidavans = 201; int i, pos; var oHelp = CreateObject("IKSimpleHelp"); oHelp.HelpInitial("Аванс"); char StrProc[81]; GetCommonCnf("PROC_AV",AVANS_CNTR_CNF,StrProc,80); double Proc = atof(StrProc); vspom[0] = Proc*100+0.0001; vspom[1] = GetCommonCnfInt("ROUND_AV",AVANS_CNTR_CNF); vspom[2] = GetCommonCnfInt("S_ROUND",AVANS_CNTR_CNF); vspom[2] = max ( vspom[2], GetStdControl(CN_ROUND_NU) ); if ( (pos=poisk1(vidavans,kodnu1,cntplus,1))==EOF ) return ESC; i=kodnu4[pos]; if ( sub252spec(scr04,5,15,"Укажите вид аванса",i,pos) == ESC ) return ESC; vspom[3]=kodnu1[pos]; if ( vspom[0] ) { if (zaprosd(scr04,7,20, "Процент ###### ( 0 - суммой ) ", // 3,vspom[0],vspom[0],0,1000,10)==ESC) return ESC; 6,Proc,Proc,0,1000,10)==ESC) return ESC; vspom[0] = Proc*100+0.0001; } vclear ( scr04 ); if ( IsCommonCnfExist("bFRV_NRV",AVANS_CNTR_CNF) ) vspom[4] =GetCommonCnfInt("bFRV_NRV",AVANS_CNTR_CNF); return 1; } SysSub21() { var AVANS_CNTR_CNF = "аванс"; int kod,row,i,da40=0; char t[20],str1[81]; double r[4],r9,k,d1,d2,bz; var oHelp = CreateObject("IKSimpleHelp"); oHelp.HelpInitial("Аванс"); int nRet=1; if ( func[4]+func[5]+func[6]==0 ) return(0); // учет источника, выбранного в панели запроса var Src=GetCommonProp(CMN_SRC_MASS_LS); var ts1 = CreateObject("TempCommonSrc"); ts1.TempCommonSrcInitial(CMN_SRC_C_WORK); SetCommonProp(CMN_SRC_C_WORK,Src); var ts2 = CreateObject("TempCommonSrc"); ts2.TempCommonSrcInitial(CMN_SRC_INT_LS); SetCommonProp(CMN_SRC_INT_LS,Src); var ts3 = CreateObject("TempCommonSrc"); ts3.TempCommonSrcInitial(CMN_SRC_COUNT_LS); SetCommonProp(CMN_SRC_COUNT_LS,Src); kod=vspom[3]; r[1]=0.; s50(mtek); if ((row=poisk_row(kod,0,data,0))==EOF) { vclear(scr04); return(nRet); } var Prop=GetPropOfCod(GetCode(row)); var Combine=CreateObject("TmpCurCombine"); if (Prop.GetCombine()!=GetGeneralCombineLS()) // код совместительства строки аванса не основной Combine.Init(Prop.GetCombine()); d1 = GetBegDate(row); d2 = GetEndDate(row); bz = GetBase(row); bz_kod(GetCode(row),data,bz,bz); //stccpy(str1,kch+poskch[10],11); kch_from("data_uv",str1); /* дата увольнения */ s69(r9,str1,1); if (r9!=0. && r9countday || halfDay<=0 ) halfDay = countday/2. + 0.9999; int howCalcFrvNrv=vspom[4]; if (da40==0 && !howCalcFrvNrv) //если пользователь выбрал в настройках рассчитывать аванс пропорционально ФРВ/НРВ, то нет необходимости проверять табель на предмет наличия "нерабочих" периодов { string msg = ""; string dop = ""; var arSimvT = GetArray('Н','Б','Д','О'); int cntSimv = GetUBound(arSimvT)+1; var arSimvComm = GetArray("неявки на работу по невыясненным причинам","больничный лист","отпуск по беременности","ежегодный отпуск"); int cntSimvComm = GetUBound(arSimvComm)+1; char FlagsSimv[cntSimv]; char FlagTotal=0; for ( int j=0; j=1; i--) { if ( msg!="" && dop=="" ) dop = ", "; for(int num=GetLBound(arSimvT); num0.001 ? frv/nrv : 1; r[1]*=frv_nrv; if(!vspom[0]) r[2]=frv; } /*----------------------------------------------*/ /* vspom[1] - 0-округлять, 1-отбрасывать */ /* vspom[2] - до скольки округлять, отбрасывать */ /*----------------------------------------------*/ if (vspom[0]) round2(r[1],vspom[1],vspom[2],r[1]); else round2(r[1],0,do_chisla(kod),r[1]); if (func[6]) if ( indstr(scr04,mrasch,5,r,t,3)==ESC) {Combine=0;return(ESC);} indstr(scr04,mrasch,5,r,t,1); PutSumm(row,colc1,r[1]); if ( r[1] == 0. ) r[2]=r[0]=0.; PutTime(row,colc2,r[2]); PutCashMonth(row,colc2,r[0]); korrls=2; /* менялись значения для строк Н-У в ЛС */ izls(1,0); /* "ЛС не рассчитан" */ vclear(scr04); Combine=0; return(nRet); } SysSub21b() { return(1); } // ╘єэъЎш  юяЁхфхы хЄ ьюцэю ыш ЁрёёўшЄ√трЄ№ яхЁтє■ яюыютшэє ьхё Ўр (absm) фы  єърчрээюую ╦╤ (tn) ш єърчрээющ шёяюыэ хьющ фюыцэюёЄш (combine) // ╧юсюўэ√щ ¤ЇЇхъЄ - ьюцхЄ яхЁхюяЁхфхышЄ№ фхэ№, фю ъюЄюЁюую фхырЄ№ ЁрёўхЄ. // ▌Єю шчьхэхэшх сєфхЄ ыюъры№э√ь шьхээю фы  ¤Єющ шёяюыэ хьющ фюыцэюёЄш (эх фы  ╦╤ т Ўхыюь) // ъюф√ тючтЁрЄют: 0 - ьюцэю яЁюфюыцрЄ№ ЁрёўхЄ // ESC - яЁхъЁрЄшЄ№ ЁрёўхЄ ртрэёр тююс∙х // -1 - яЁюяєёЄшЄ№ шёя.фюыцэюёЄ№ CheckCanCalcHalfMonth(tn,combine,absm,&dayOfMonth) { return PriorityCall("UserCheckCanCalcHalfMonth","SysCheckCanCalcHalfMonth",tn,combine,absm,dayOfMonth); } SysCheckCanCalcHalfMonth(tn,combine,absm,&dayOfMonth) { var AVANS_CNTR_CNF = "аванс"; int howSkip = GetCommonCnfInt("HowSkipUvl",AVANS_CNTR_CNF); // эшўхую эх яЁюяєёърхь (эшцх яюЄюьє ўЄю Єюы№ъю рэрышч єтюыхээюёЄш) if ( !howSkip ) return 0; var endMonth = KDateFromInt_LastDay(absm); char Buf[256]; GetKchValue("data_uv", Buf, 255, endMonth); var dateUvl = KDateFromStr(Buf); // ─ы  єтюыхээ√ї т ьхё Ўх ЁрёўхЄр шыш Ёрэ№°х ртрэё эх ёўшЄрхь. if (dateUvl.IsValid() && ((howSkip == 1 && dateUvl.GetAbs()