// Справка 417 var CTabl; // объект класса для работы таблицей int NumStTV = 0; // номер столбца ТабВх // если нужно что бы вид не попадал поставить у него '0', иначе '1' //Номера сеток int NumSet2 = 78,// сетка для видов помеченных '2' - выслуга; NumSet3 = 80,// сетка для видов помеченных '3' - северные надбавки; NumSet4 = 81,// сетка для видов помеченных '4' - северные надбавки; NumSet5 = 0, // сетка для видов помеченных '5' NumSet6 = 0, // сетка для видов помеченных '6' NumSet7 = 0, // сетка для видов помеченных '7' NumSet8 = 0, // сетка для видов помеченных '8' NumSet9 = 0; // сетка для видов помеченных '9' // максимальное число листов в книге (для печати в Excel) (+1 это шаблон) int cListInBook = 200+1; // SUM_STR - режим выборки сумм // (0-по месяцу принадлежности; 1-по месяцу начисления) int SUM_STR = 0; int rasRV =0; // Настройка для того чтобы таблица с суммами по месяцам // начиналась со второй страницы int FirstList = 0;// иначе 0 // Настройка для того чтобы таблица с суммами по месяцам // разделялась по страницам int RazrList = 0;// иначе 0 // Печатать РВ для видов Н-У int PrRV = 0; // 1 - печатать, 0 - нет // Совмещения int PrintCOMB = 0; // 0 - печать все совместительства вместе, 1 - по каждому отдельно // Для ФОТ int fl_1dat = 1; // 1 - первая дата ограничивается началом периода, 0 - нет // Настройки варианта для Челябинска // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int PrPRIK=0; // 1 - печать № приказов и даты приказов, 0 - нет int PrVOtp=0; // 0 - нет, 1 - печать виды отпусков, 2 - печать виды отпусков для Челяб. // Следующие настр. используется если PrPRIKAZ==1 int FlDatPr=1; // 1 - обрезается дата приказа (из доп.рекв.) для ФОТ, 0 - нет int FlPrOtp=1; //Дата и номер приказа по отпуску вводится через доп.реквизит // 1 - по структуре "Надбавки" (в ТВХ символ -"З", псевдоним реквизита-"pr") // 0 - по структуре "Оклада"(в ТВХ символ -"В", псевдоним реквизита-"p") int CountPr=0; // 1 - на одну дату, может быть несколько приказов // 0 - выводить только 1 номер приказа для 1 даты int CommPr=0; // 1 - выводить комментарий к номеру приказа (вид ФОТ) // 0 - не выводить char SimDR[256]; //символы доп.реквизитов для ТВХ double tmp = 0.0, eps = 0.001; string ar[15]; string ar2[15]; string ar_rv[15]; double ArOst[256],ArDol[256]; char SrcF[200]; f417(rasRV,StTV,FList) { var array_param[5]; array_param[0]=4; //количество параметров array_param[1]=rasRV; array_param[2]=StTV; array_param[3]=FList; array_param[4]=RazrList; f417_new(array_param); return 0; } f417_new(array_param) //========================================= // Основная процедура //========================================= { InitParam(array_param); var CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати CFile.SetFlagBrowse(0); // запрещаем просмотр CFile.SetFlag_Print(0); CTabl=CreateObject("CurPrnTbl"); // объект класса для работы с текущей таблицей int cr=CTabl.Count_Rcr(); // число рабочих записей в таблице OpenExcel(); SrcF = ""; R_TEXT_FLD("SRC",SrcF,10,0); // Источник FreeSpaceString(SrcF,3,""); try { var CMsg = 0; // Процент выполненной работы int bTime = false; // false-показывать процент, // true-показывать оставшееся время CMsg=CreateObject("ProgressBar"); CMsg.Initial(0,100,1); CMsg.SetShowTime(static_cast_to_int(bTime)); if ( !FillNumFld() ) return false; //определяем необходимые нам номера полей // Определяем ка печатать совместительства (все вместе, отдельно) PrintCOMB = atoi(CTabl.Get_Bottom_Text(Fld[idxFlComb])); if ( FirstList ) tPageBreaks(24); // Разбивку страницы добавляем if ( RazrList ) tPageBreaks(39); // Разбивку страницы добавляем char code[256], str[256],podr[256], arg[256], nnn[256], sss[256]; double mes; double mSumN[12], mSumU[12], iSum[12]; string SumN[12], SumU[12], SumI[12]; string strok; bool flagPrintInfOtpuskAliment=true, fl_inf=true ; bool fl =true ; int j=0; int NumFOT=0; char DatUval[256]; FillArray(); if ( PrRV ) for ( int i=0; i<12 ;i++ ) { if (i<6) sprintf(nnn,"%s%d",ar_rv[i],25); else sprintf(nnn,"%s%d",ar_rv[i-6],40); tWriteStringToCell(nnn,OemToAnsi("РВ")); } if ( PrVOtp==1 || PrVOtp==2 ) tWriteStringToCell("X18",OemToAnsi("вид отпуска")); string mes1,mesJ; mes1=static_cast_to_string(CTabl.Text(Fld[idxMES],0)); UpperString(mes1); mesJ="ЯНВАРЬ"; if(reinterpret_cast_to_long(strstr(mes1,mesJ))==0) { AmbaMessageBox("Период должен начинаться с января!","Ошибка!",0,0); return 0; } int len =256; int cpod,nu, ShN,ShU, kod, k, DopStN, DopStU, KolU; int oldtn = atoi(CTabl.Text(Fld[idxTN],0)); int tn = atoi(CTabl.Text(Fld[idxTN],0)); char mnim =0;// мнимость int comb = 0, oldcomb = 0; if ( PrintCOMB ) { comb = atoi(CTabl.Text(Fld[idxCmbInt],0)); oldcomb = comb; } char sim; char key[256]; ShN=30; DopStN=15; ShU=44; PrintHead(); PrintFooter(); CopyWsh(0); for ( int i=0; i<12 ;i++ ) { mSumN[i]=0.; mSumU[i]=0.; iSum[i]=0.; } // отпуск ============================ int cot = 1; // количество отпусков // (beg) отпуск - инициализация переменных и массивов для работы с отпусками int koOsn[4],koUch[4],koKom[4], koDop[4], koK28[4]; for ( int i = 0; i < 4; i++ ) { koOsn[i] = 0; koUch[i] = 0; koKom[i] = 0; koDop[i] = 0; koK28[i] = 0; } var Lst = CreateObject("ParamFuncRW"); // Читаем настройки отпуска GetCommonCnf ("COUNT_FOND","отпуск",str,len-1); int cFond = atof(str); for ( int i = 0; i < 4; i++ ) { string sf = "FONDSRED" + static_cast_to_string(i); if ( cFond > i ) { GetCommonCnf(sf,"отпуск",str,len-1); Trim(str); Lst.IInitial1(static_cast_to_string(str),",",30); int clm = Lst.Count(); if ( clm > 16 ) { if ( clm > 10 ) koOsn[i] = atoi(Lst.Get(10)); if ( clm > 11 ) koUch[i] = atoi(Lst.Get(11)); if ( clm > 12 ) koKom[i] = atoi(Lst.Get(12)); if ( clm > 17 ) koDop[i] = atoi(Lst.Get(17)); if ( clm > 18 ) koK28[i] = atoi(Lst.Get(18)); } else { if ( clm > 8 ) koOsn[i] = atoi(Lst.Get(8)); if ( clm > 9 ) koUch[i] = atoi(Lst.Get(9)); if ( clm > 10 ) koKom[i] = atoi(Lst.Get(10)); if ( clm > 15 ) koDop[i] = atoi(Lst.Get(15)); //if ( clm > 18 ) koK28[i] = Lst.Get(18); } } } for ( int i = 0; i < 4; i++ ) { if ( !koOsn[i] ) koOsn[i] = -1; if ( !koUch[i] ) koUch[i] = -1; if ( !koKom[i] ) koKom[i] = -1; if ( !koDop[i] ) koDop[i] = -1; if ( !koK28[i] ) koK28[i] = -1; } int co = 22; // первая строка для печати отпуска int ca = 22; // первая строка для печати алиментов //========================================== int T1_N=0, T1_U=0, T2_N=0, T2_U=0 ; double hig_ot = 12; var MapSTV = CreateObject("MapString"); MapSTV.Clear(); // цикл по записям таблицы for (int zap=0; zap0 && atoi(Buf)!=31) NumStTV=atoi(Buf); } NumStTV = NumStTV-1; if ( count>=9 ) { PrRV = atoi(array_param[5]); PrPRIK = atoi(array_param[6]); PrVOtp = atoi(array_param[7]); FlDatPr= atoi(array_param[8]); FlPrOtp= atoi(array_param[9]); } SimDR="З"; if ( count>=10 ) { CountPr = atoi(array_param[10]); CommPr = atoi(array_param[11]); SimDR = static_cast_to_string(array_param[12]); } if ( count>=13 ) fl_1dat = atoi(array_param[13]); } int n_wsh=1; OpenExcel() { char Dir[128]; // строка для текущей директории GetCurrentDirectory(128,Dir); // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу) string nm="417.xlt"; // имя Excel'евского файла var WorkDir = Dir + "\\"+NameCommonDir()+"\\"; string fullFileName = GetPathXLT(NameCommonDir(),nm); tPrepereOfficeForWork(); // определяем работать на Excel или на Calc (определяем какой из офисов (MS Office или OpenOffice) установлен и какой предпочтительнее) //tCreateXlsObjects(WorkDir+nm,"Карточка-справка(форма 417)"); // создание основных объектов tCreateXlsObjects(fullFileName,"Карточка-справка(форма 417)"); // создание основных объектов //tMakeXlsVisible(); // делаем форму видимой tGetWshByIndex(1); // получаем ссылку на лист (worksheet) tWshSelect(); } PrintHead() { //--blig char s[256]; int perEnd = atoi(CTabl.Text(Fld[idxAEMES],0)); sprintf(s,"за %d год",KDateFromInt(perEnd).GetYear()); tWriteStringToCell("BU2",OemToAnsi(s)); //--) int len=256; char Org[len]; GetEnterpriseVar("ИМЯП", Org,len-1); // Наименование предприятия или отделения иностранной организации FreeSpaceString(Org,3,""); OemToChar(Org,Org); tWriteStringToCell("N3",Org); char Okp[len]; // код общероссийского классификатора прелприятий и организаций GetEnterpriseVar("ОКПО", Okp,len-1); FreeSpaceString(Okp,3,""); UpperString(Okp); OemToChar(Okp,Okp); tWriteStringToCell("ES3",Okp); } PrintFooter() { int len=256; //Должность исполнителя , расшифровка char tmp[len]; GetEnterpriseVar("ДОЛЖОТВНАЛ", tmp,len-1); FreeSpaceString(tmp,3,""); OemToChar(tmp,tmp); //нашли настройку if ( IsCommonCnfExist("DolgnIsp","f417") ) { char Buf[81]; GetCommonCnf("DolgnIsp","f417",Buf,80); FreeSpaceString(Buf,3,""); if (strlen (Buf)>0) OemToChar(Buf,tmp); } tWriteStringToCell("N54",tmp); GetEnterpriseVar("ОТВНАЛ", tmp,len-1); FreeSpaceString(tmp,3,""); OemToChar(tmp,tmp); if ( IsCommonCnfExist("Rasshifr","f417") ) { char Buf[81]; GetCommonCnf("Rasshifr","f417",Buf,80); FreeSpaceString(Buf,3,""); if (strlen (Buf)>0) OemToChar(Buf,tmp); } tWriteStringToCell("BI54",tmp); //дата формирования var DataStr=CreateObject("KDate"); DataStr.SetDate(static_cast_to_string(datatek)); tWriteStringToCell("DF54",DataStr.GetDay()); R_DATA_PROPIS(datatek,tmp,20,0); FreeSpaceString(tmp,2," "); OemToChar(tmp,tmp); var PartData = CreateObject("ParamFuncRW"); PartData.IInitial1(static_cast_to_string(tmp)," ",3); if (PartData.Count()>1) tWriteStringToCell("DM54",PartData.Get(1)); tWriteStringToCell("EK54",SubStr(DataStr.GetYear(),2,2)); } CopyWsh(zap) { // название листа = фамилия + tn var Par = CreateObject("ParamFuncRW"); Par.IInitial(static_cast_to_string(CTabl.Text(Fld[idxFIO],zap))," ",2); string s_tn = static_cast_to_string(CTabl.Text(Fld[idxTN],zap)); FreeSpaceString(s_tn,3,""); // копируем шаблон, название листа = фамилия + tn if ( !PrintCOMB ) tCopyWshByIndex(n_wsh,Par.Get(0)+" "+s_tn); else { string s_comb = static_cast_to_string(CTabl.Text(Fld[idxCmbCod],zap)); FreeSpaceString(s_comb,3,""); tCopyWshByIndex(n_wsh,Par.Get(0)+"("+s_comb+") "+s_tn); } tGetWshByIndex(n_wsh); n_wsh++; // увеличиваем счетчик листов tWshSelect(); } ///////////////// int NumSetki[10]; WriteNumSet() { for (int i=0;i<10;i++) NumSetki[i] = 0; NumSetki[2] = NumSet2; // сетка для видов помеченных '2' - выслуга; NumSetki[3] = NumSet3; // сетка для видов помеченных '3' - северные надбавки; NumSetki[4] = NumSet4; // сетка для видов помеченных '4' NumSetki[5] = NumSet5; // сетка для видов помеченных '5' NumSetki[6] = NumSet6; // сетка для видов помеченных '6' NumSetki[7] = NumSet7; // сетка для видов помеченных '7' NumSetki[8] = NumSet8; // сетка для видов помеченных '8' NumSetki[9] = NumSet9; // сетка для видов помеченных '9' return 1; } ////////////////////////////////// PrintInfOtpuskAliment(tn,zap,comb,&ShN,&cot,&co,&ca, cFond,koOsn,koUch,koKom,koDop,koK28) // Заполнение разделов: // "Сведения об использовании отпусков" // "Виды и суммы постоянных удержаний" { co = 22; // первая строка для печати отпуска ca = 22; // первая строка для печати алиментов //========================== // чтение ЛС if ( 1 != LSRead(tn, 10000) ) { AmbaMessageBox("Невозможно прочитать ЛС!","Ошибка!",0,0); return 0; } char str[256], arg[256]; int len = 256; double hig_ot = 12; // Добавляем строку в шаблон, для копирования tInsertRows(co+1,1); tCopyRow(co+1); // для периода int pBeg = atoi(CTabl.Text(Fld[idxABMES],zap)), pEnd = atoi(CTabl.Text(Fld[idxAEMES],zap)), pBegOt = atoi(CTabl.Text(Fld[idxDatBeg],zap)); //========================= // расчет рабочего времени int mraschold = mrasch; int mesec, cnt, chet=0; for (mesec=pBeg; mesec<=pBeg+11; ++mesec) if ( mesec < mtek+9 ) { if ( rasRV==0 )//рабочие время по табелю { s50(mesec); cnt = dney_v_tab("r",calm,1,countday); } if ( rasRV==1 ) //рабочие время через виды { double n6; s98(pBegOt+chet,n6); cnt = n6*norm(1); // - отработанных дней } if (chet<6) sprintf(str,"%s%d",ar2[chet],27+cot); else sprintf(str,"%s%d",ar2[chet-6],42+cot); // записываем РВ tWriteStringToCell(str,cnt); chet++; } else { // если выходим за пределы, рабочие время заполняем нулями if (chet<6) sprintf(str,"%s%d",ar2[chet],27+cot-1); else sprintf(str,"%s%d",ar2[chet-6],42+cot-1); tWriteStringToCell(str,0); chet++; } if ( mraschold!=mrasch ) s50(mraschold); //=============================================== //R_Caln(ddd,ttt,255,0); // если форма создается по источнику финансирования, то // определяем его код string src_tabl=""; char src_sim; if (SrcF!="") { double vnKod1 = atof(CTabl.Text(Fld[idxKODt],0)); double iKod1 = Extern_To_InternE(vnKod1); src_tabl = static_cast_to_string(IntSrcToExt(GetSrcOfCod(iKod1))); src_sim = GetSrcOfCod(iKod1); } // Map хранящий отпуска (по датам) var MapOTP = CreateObject("MapString"); MapOTP.Clear(); for (int row=0; row 28"); break; } } } else { // Виды отпуска для Челябинска for ( int i = 0; i < cFond; i++ ) { if (atoi(iKod)==40) { fot=1; vid=OemToAnsi("Отпуск"); break; } if (atoi(iKod)==45) { fot=1; vid=OemToAnsi("Учеб.отпуск"); break; } if (atoi(iKod)==105|| atoi(iKod)==75 || atoi(iKod)==103){ fot=1; vid=OemToAnsi("Отпуск до 1,5 лет"); break; } if (atoi(iKod)==129|| atoi(iKod)==36 || atoi(iKod)==77) { fot=1; vid=OemToAnsi("Отпуск до 3 лет"); break; } } } if ( fot && ( src_tabl=="" || src_tabl==src ) && ( !PrintCOMB || comb==iCmb ) ) { int mAbs; // абсолютный месяц var BegStr=CreateObject("KDate"); // дата начала действия строки var EndStr=CreateObject("KDate"); // дата конца действия строки int dper = pEnd - pBeg + 1; double bDat=GetBegDate(row); BegStr.SetDateD(bDat); // дата начала строки double eDat=GetEndDate(row); EndStr.SetDateD(eDat); // дата конца строки int aBeg = BegStr.GetAbs(), aEnd = EndStr.GetAbs(); int cmes = aEnd - aBeg + 1; char sd1[len], sd2[len]; sprintf(sd1,"%02d.%02d.%04d",BegStr.GetDay(),BegStr.GetMonth(),BegStr.GetYear()); sprintf(sd2,"%02d.%02d.%04d",EndStr.GetDay(),EndStr.GetMonth(),EndStr.GetYear()); if ( sd1 == "00.00.0000" ) sd1 = " . . "; if ( sd2 == "00.00.0000" ) sd2 = " . . "; // количество дней int rv = 0; for ( int m = aBeg; m <= aEnd; m++ ) { rv += CashSumm(0,iKod,m,m,42,CL_EXACT|CL_M,0); } string skey = static_cast_to_string(sd1+" "+sd2); // проверяем принадлежит ли отпуск заданному периоду if ( (pBeg<=aBeg)&&(pBeg+11>=aEnd)&&(rv!=0) && !MapOTP.IsExist(skey) ) // повторять отпуск не нужно { MapOTP.Add(skey,skey); // если отпуск не первый добовляем строку if ( co>22 ) { tInsertRows(co+1,1); tCopyRow(co+1); ShN++; cot++; } // печатаем начало и конец отпуска sprintf(str,"AL%d",co); tWriteStringToCell(str,sd1+"-"+sd2); hig_ot = 24; tRowHeight(co,hig_ot); // печатаем количество дней sprintf(str,"AY%d",co); tWriteStringToCell(str,rv); // печатаем вид отпуска вместе с кол-вом дней if ( PrVOtp==3 ) { // печатаем вид отпуска sprintf(arg,"%d (%s)",rv,vid); tWriteStringToCell(str,arg); // увеличиваем высоту ячейки var RazbW_ot = CreateObject("ParamFuncRW"); RazbW_ot.IInitialW(static_cast_to_string(arg),12,255," ,.;'\""); int h_ot = 12*RazbW_ot.Count(); if (h_ot>hig_ot) { tRowHeight(co,h_ot); hig_ot = h_ot; } else tRowHeight(co,hig_ot); } if ( PrPRIK ) { // добавим № приказа char sim_dr = Sim_For_Extern_Cod(static_cast_to_string(vnKod),19); char str_comm[256],str_buf[256],str_ls[256]; string prikaz = ""; if ( !FlPrOtp ) { if ( sim_dr==-126 )//'В' )//оклад { Rkv_from(iKod,"p", str_comm,str_ls); str_ls = OemToAnsi(str_ls); FreeSpaceString(str_ls,3,""); prikaz = str_ls; } } else for ( int j=0 ; jhig_ot) { tRowHeight(co,h_ot); hig_ot = h_ot; } else tRowHeight(co,hig_ot); } co++; } } //otp bil /////////////////////// алименты /////////////// //iKod = GetCode(row); // внутренний код строки (точный) //double eKod =Intern_To_ExternE(iKod);// внешний код строки (точный) //int vnKod=atoi(eKod) ; // внешний код строки int Bz =atoi(GetBase(row)); string BzStr=static_cast_to_string(GetBase(row)); FreeSpaceString(BzStr,3,""); char sim; // символ в 20-ого столбца ТВ для вида sim = Sim_For_Extern_Cod(static_cast_to_string(vnKod),19); if ( sim=='4' && ( src_tabl=="" || src_tabl==src ) && ( !PrintCOMB || comb==iCmb ) ) { var BegStr=CreateObject("KDate"); // дата начала действия строки var EndStr=CreateObject("KDate"); // дата конца действия строки double bDat=GetBegDate(row); BegStr.SetDateD(bDat); // дата начала строки double eDat=GetEndDate(row); EndStr.SetDateD(eDat); // дата конца строки int aBeg = BegStr.GetAbs(), aEnd = EndStr.GetAbs(); // сумма алиментов выплаченная за период double SumAl = 0; for ( int m = pBeg; m <= pBeg+11; m++ ) { SumAl += CashSumm(0,iKod,m,m,32,CL_EXACT|CL_M,0); //CashSumm(0,iKod,aem,aem,32,CL_EXACT|CL_MV,0); } // проверяем принадлежат ли алименты заданному периоду //if ((pBeg<=aBeg)&&(pBeg+11>=aEnd)&& if (SumAl!=0) { // если строк алиментов больше чем строк // отпусков - добовляем строку if ( ca >= co && ca> 22 ) { tInsertRows(ca+1,1); tCopyRow(ca+1); ShN++; cot++; } // печатаем вид удержания long k = poisk1(atoi(iKod),kodnu1,cntplus,1); if (k!=-1) sprintf(arg,"%s",OemToAnsi(GetNameKodNU(k))); else arg=" "; char razm[256], name[256]; sprintf(name,"%7.7s",arg); for (int i=7; i<14; i++) razm[i-7]=arg[i]; sprintf(str,"CW%d",ca); tWriteStringToCell(str,name); // печатаем размер удержания sprintf(str,"ED%d",ca); tWriteStringToCell(str,BzStr); FreeSpaceString(razm,3,""); if ( razm=="%" ) tWriteStringToCell(str,BzStr+razm); // даты char sd1[len], sd2[len]; sprintf(sd1,"%02d.%02d.%04d",BegStr.GetDay(),BegStr.GetMonth(),BegStr.GetYear()); sprintf(sd2,"%02d.%02d.%04d",EndStr.GetDay(),EndStr.GetMonth(),EndStr.GetYear()); if ( sd1 == "00.00.0000" || sd1 == "01.01.2050" ) sd1 = " . . "; if ( sd2 == "00.00.0000" || sd2 == "01.01.2050" ) sd2 = " . . "; // печатаем дату первого удержания sprintf(str,"DJ%d",ca); tWriteStringToCell(str,sd1); // печатаем дату последнего удержания sprintf(str,"DR%d",ca); tWriteStringToCell(str,sd2); char LongStr[256]; int dl = 12; char str_comm[256],str_buf[256],str_ls[256]; // печатаем № (читаем доп.реквизиты) Rkv_from(iKod,"исп_лист", str_comm,str_buf); str_buf = OemToAnsi(str_buf); FreeSpaceString(str_buf,3,""); sprintf(str,"BZ%d",ca); tWriteStringToCell(str,str_buf); // печатаем кому (читаем доп.реквизиты) Rkv_from(iKod,"кому", str_comm,str_buf); str_buf = OemToAnsi(str_buf); FreeSpaceString(str_buf,3,""); sprintf(str,"EL%d",ca); tWriteStringToCell(str,str_buf); LongStr = str_buf; // печатаем кому (читаем доп.реквизиты) Rkv_from(iKod,"куда", str_comm,str_buf); str_buf = OemToAnsi(str_buf); FreeSpaceString(str_buf,3,""); sprintf(str,"EZ%d",ca); if( str_buf!="" ) tWriteStringToCell(str,str_buf); else { Rkv_from(iKod,"лиц_счет", str_comm,str_ls); str_ls = OemToAnsi(str_ls); FreeSpaceString(str_ls,3,""); if( str_ls!="" ) tWriteStringToCell(str,str_ls); str_buf = str_ls; } if ( strlen(LongStr)12 && hig>=hig_ot) tRowHeight(ca,hig); else tRowHeight(ca,hig_ot); ca++; } } ////////////////////////////////////////////// }//po strokam ls tDeleteRows(ShN-7,1); return 0; } ////////////////////////////////// FondOplTr(tn, &NumFOT, DatUval, comb) // Функция заполнения ФОТ (2-ая таблица) // Раздел "Отметки о приеме на работу и переводах" { // чтение ЛС if ( 1 != LSRead(tn, 10000) ) { AmbaMessageBox("Невозможно прочитать ЛС!","Ошибка!",0,0); return 0; } WriteNumSet(); var mapFOT = CreateObject("MapString"); mapFOT.Clear(); char sim; char key[256];//, str[256]; char nnn[256], arg[156], name[256], razm[256]; var BegMonPer=CreateObject("KMonth"); // месяц начала периода var EndMonPer=CreateObject("KMonth"); // месяц конца периода BegMonPer.SetMonth(static_cast_to_string(CTabl.Text(Fld[idxABMES],0))); EndMonPer.SetMonth(static_cast_to_string(CTabl.Text(Fld[idxAEMES],0))); if ( BegMonPer.GetYear()!=EndMonPer.GetYear() ) { AmbaMessageBox("Даты начала и конца периода должны принадлежать одному календарному году!","Ошибка!",0,0); return 0; } var BegStr=CreateObject("KDate"); // дата начала действия строки var EndStr=CreateObject("KDate"); // дата конца действия строки var BegDayPer=CreateObject("KDate"); // день начала периода var EndDayPer=CreateObject("KDate"); // день конца периода BegDayPer.SetDateIM(1,BegMonPer); EndDayPer.SetDateIM(EndMonPer.CountDay(),EndMonPer); // если форма создается по источнику финансирования, то // определяем его код string src_tabl=""; char src_sim='0'; if (SrcF!="") { double vnKod = atof(CTabl.Text(Fld[idxKODt],0)); double iKod = Extern_To_InternE(vnKod); src_tabl = static_cast_to_string(IntSrcToExt(GetSrcOfCod(iKod))); src_sim = GetSrcOfCod(iKod); } var DateFOT=CreateObject("KDate"); // дата начала действия строки var DateDop=CreateObject("KDate"); var RazbSk = CreateObject("ParamFuncRW"); var RazbSkDat = CreateObject("ParamFuncRW"); bool Cur; double Date = 0., DateFirst = 0., DateEnd = 0. ; char ddd[256]; char sss[256]; for (int row=0; row9 ) n = 0; int NumSet = NumSetki[n]; if ( sim!='0' && sim=='1') { double GGGGMM=GetDateFromFuncRWScript(Mes); bz_kod(atoi(iKod),GGGGMM,Bz,rz); Bz=rz; } else if ( sim!='0' && NumSet!=0 ) { //считаем значения по сетки по стажу procent_ot_staga(NumSet,"datavys",1,MesOtn,1,row,bDat,eDat,rz); Bz=rz; } string BzStr=static_cast_to_string(Bz); FreeSpaceString(BzStr,3,""); // выбираем сумму по виду double Summa=0.; double TmpSum=0.; for (int mes=BegMonPer.GetAbs(); mes<=EndMonPer.GetAbs(); mes++) { if (atoi(SUM_STR)==1) { TmpSum+=CollectSumm(iKod,0,mes,CL_MV | CL_EXACT); } else { TmpSum+=CollectSumm(iKod,mes,0,CL_M | CL_EXACT); } }//по месяцам периода if ( ( src_tabl=="" || src_tabl==src ) && // по источнику ( !PrintCOMB || comb==iCmb ) ) // по совмещению { if( nu==1 && TmpSum!=0 && sim!='0' && Bz!=0 ) { // добавим в МАР № приказа char sim_dr; char str_comm[256],str_buf[256],str_ls[256]; string prikaz = ""; if ( PrPRIK ) { sim_dr = Sim_For_Extern_Cod(static_cast_to_string(vnKod),19); if ( sim_dr==-126)//'В' )//оклад { Rkv_from(iKod,"p", str_comm,str_ls); str_ls = OemToAnsi(str_ls); FreeSpaceString(str_ls,3,""); prikaz = str_ls; } else for ( int j=0 ; j BegDate ) DateFirst = d_rb; //дату приема на работу берем за начальную дату else DateFirst = BegDate; //дату начала периода берем за начальную дату // Добовляем строку в шаблон, для копирования tInsertRows(16,1); tCopyRow(16); int j=0, NumStr=15; var map = CreateObject("MapString"); map.Clear(); string KeyZam[10], KeyDel[10], NewBZ[10]; int KolIzm=0; bool flDate = true; for ( Cur=mapFOT.InitIterator(); Cur; Cur=mapFOT.Next() ) { RazbSkDat.IInitial1(static_cast_to_string(mapFOT.GetCurValue()),"/",20); Date = atof(RazbSkDat.Get(0)); // определим первую дату if ( Date<=BegDate && Date>DateFirst && Date!=0 ) { DateFirst = Date; } } // выбираем даты из КЧ для должности string str=GetListDatBeg("dolgnost",BegMonPer.GetStr(),EndMonPer.GetStr()); char value[256]; value=""; var RazbDateKCh = CreateObject("ParamFuncRW"); RazbDateKCh.IInitial1(str,",",GetCountDatBeg(str)); // в случае если первая дата будет из КЧ double PDateKCh = DateFirst; if ( DateFirst != BegDate ) { for ( int i=0; iPDateKCh) { PDateKCh = DateKCh; } } DateFirst = PDateKCh; } for ( ;flDate; ) { DateFOT.SetDateD(DateFirst); sprintf(nnn,"%s%d","A",NumStr); sprintf(ddd,"%02d.%02d.%04d",DateFOT.GetDay(),DateFOT.GetMonth(),DateFOT.GetYear()); tWriteStringToCell(nnn,ddd); bool flNPr = true; string Prik=""; if ( !PrPRIK ) flNPr = false; for (Cur=mapFOT.InitIterator(); Cur; Cur=mapFOT.Next() ) { RazbSkDat.IInitial1(static_cast_to_string(mapFOT.GetCurValue()),"/",40); Date = atof(RazbSkDat.Get(0)); RazbSk.IInitial1(static_cast_to_string(mapFOT.GetCurKey()),"/",4); if ( Date <= DateFirst && Str_Cmp(mapFOT.GetCurValue(),""," ") ) { if ( j<8 ) { // заполнение шапки sprintf(nnn,"%s%d",ar[j],13); long k = poisk1(atoi(RazbSk.Get(1)),kodnu1,cntplus,1); if (k!=-1) sprintf(arg,"%s",OemToAnsi(GetNameKodNU(k))); else arg=" "; sprintf(name,"%7.7s",arg); for (int i=7; i<14; i++) razm[i-7]=arg[i]; tWriteStringToCell(nnn,name+" "+razm); //базовое значение sprintf(nnn,"%s%d",ar[j],NumStr); tWriteStringToCell(nnn,RazbSkDat.Get(1)); if ( flNPr && Str_Cmp(RazbSkDat.Get(2),""," ") ) { // приказ sprintf(nnn,"%s%d","O",NumStr); flNPr = false; Prik = RazbSkDat.Get(2); if ( CommPr ) Prik += "-"+name; FreeSpaceString(Prik,2,""); OemToAnsi(Prik); if ( FlDatPr ) Prik = SubStr(Prik,11); tWriteStringToCell(nnn,Prik); } else if ( CountPr && !flNPr && Str_Cmp(RazbSkDat.Get(2),""," ") ) { // приказ sprintf(nnn,"%s%d","O",NumStr); string SecondPr = RazbSkDat.Get(2); if ( CommPr ) SecondPr += "-"+name; if ( FlDatPr ) SecondPr = SubStr(SecondPr,11); OemToAnsi(SecondPr); Prik += ", "+ SecondPr; FreeSpaceString(Prik,2,""); tWriteStringToCell(nnn,Prik); // увеличиваем высоту ячейки var RazbPr = CreateObject("ParamFuncRW"); RazbPr.IInitialW(static_cast_to_string(Prik),15,255," ,.;'\""); int hig = 12*RazbPr.Count(); if (hig>24) tRowHeight(NumStr,hig); else tRowHeight(NumStr,24); } } // если дату выводили то убираем string val; val=""; for ( int idx=3; idxDateFirst && Date!=0 ) { SledDate = Date; } } if ( SledDate == EndDate )//изменений нет { flDate = false; } else { flDate = true; //////////////////////////// // вывод заработной платы // double rez = 0.; GetRasNormzar(DateFirst,SledDate,src_tabl,src_sim,comb,rez); sprintf(nnn,"%s%d","BO",NumStr); sprintf(ddd,"%.2f",rez); tWriteStringToCell(nnn,ddd); /////////////////////////////////////// //если между датами есть изменения в КЧ value = ""; string strok=GetListDatBeg("dolgnost",BegMonPer.GetStr(),EndMonPer.GetStr()); for ( int i=0; iDateFirst && DateKChDateFirst && DateKCh<=EndDate ) { tInsertRows(NumStr+2,1); tCopyRow(NumStr+2); NumStr++; //приказа нет для должности sprintf(nnn,"%s%d","O",NumStr); tWriteStringToCell(nnn," "); //должность value = GetKchDatBegForDolg("dolgnost",strok,i); // value = GetKchDatBeg("dolgnost",strok,i); // GetDoljnNameFromID(atol(value),value,255); FreeSpaceString(value,2," "); sprintf(nnn,"%s%d","AY",NumStr); OemToChar(value,value); tWriteStringToCell(nnn,value); //дата начала DateFOT.SetDateD(DateKCh); sprintf(nnn,"%s%d","A",NumStr); sprintf(ddd,"%02d.%02d.%04d",DateFOT.GetDay(),DateFOT.GetMonth(),DateFOT.GetYear()); tWriteStringToCell(nnn,ddd); } // если в текущую дату сменилась и должность if ( value!="" && DateKCh==DateFirst ) { //должность value = GetKchDatBegForDolg("dolgnost",strok,i); // value = GetKchDatBeg("dolgnost",strok,i); // GetDoljnNameFromID(atol(value),value,255); FreeSpaceString(value,2," "); OemToChar(value,value); sprintf(nnn,"%s%d","AY",NumStr); tWriteStringToCell(nnn,value); sprintf(nnn,"%s%d","AY",NumStr+1); tWriteStringToCell(nnn,value); } } // Если человек уволен double DatUv = GetDateFromFuncRWScript(DatUval); if ( DatUv >= BegDate && DatUv <= EndDate ) { //добавляем строку tInsertRows(NumStr+2,1); tCopyRow(NumStr+2); NumStr++; //приказа нет для должности sprintf(nnn,"%s%d","O",NumStr); tWriteStringToCell(nnn,OemToAnsi("уволен")); //дата начала sprintf(nnn,"%s%d","A",NumStr); tWriteStringToCell(nnn,DatUval); } tDeleteRows(NumStr+1,1); tmp_comb=0; } sum_po_mes(mes,&mSumN,mnim,kod,ShN,i) //====================================================== // Процедура заполнения сумм + подсчет итоговой суммы //====================================================== { char nnn[256]; char str[256]; if (i<6) sprintf(nnn,"%s%d",ar2[i],ShN); else sprintf(nnn,"%s%d",ar2[i-6],ShN); sprintf(str,"%14.2f",mes); tWriteStringToCell(nnn,str); if (mnim=='0') { if (kod==1) ArOst[i]=mes; else if (kod==200) ArDol[i]=mes; else if ((kod!=1)&&(kod!=200)) mSumN[i]+=mes; } } rv_po_mes(mes,ShN,i) //====================================================== // Процедура заполнения РВ + подсчет итоговой суммы //====================================================== { char nnn[256], str[256]; if (i<6) sprintf(nnn,"%s%d",ar_rv[i],ShN); else sprintf(nnn,"%s%d",ar_rv[i-6],ShN); sprintf(str,"%14.2f",mes); tWriteStringToCell(nnn,str); } KodStroki( U1,U11,U2,I2, cot) //================================================= //процедура заполнения столбца КодСтроки //================================================= { int k=3; char str[256],kod[256]; int Beg = 30+cot; for ( int i=Beg;i1 ) { if ( PanelZap(rez_zapr)==ESC ) { fl_zapr = true; return 0; } fl_zapr = true; } return rez_zapr; } PanelZap(&rez) { rez = 0; var Map = CreateObject("MapString"); Map.Add("1" ,"по каждому отдельно"); Map.Add("2" ,"по всем, общим списком"); string Title = "Совместительства"; var MapRez = CreateObject("MapString"); if ( PanelValueFromMap(Map,MapRez,1,Title) == ESC ) return ESC; if ( !MapRez.InitIterator() ) return 0; rez = atoi(MapRez.GetCurKey()); if ( rez==2 ) rez = 0; return 0; }