string __MonitoringMedRegion; string __MonitoringMedRegionFileName; string __MonitoringMedMO; string __MonitoringMedMO_OID; string __tablePseudo="formMed"; var MapNuRv=CreateObject("MapLong"); //виды из которых брать ФРВ var MapNuSovm=CreateObject("MapLong"); //виды с оплатой внутреннего совместительства (когда не заводят отдельные исп должности) var MapNuRest=CreateObject("MapLong"); //виды при наличии которых в отчет добавляем и нулевые строки var MapDepartmentName=CreateObject("MapString"); var MapDepartmentOID=CreateObject("MapString"); var __ClosedSources=CreateObject("MapString"); var __propArray_415=CreateObject("APropArray"); //список источников с выплатами по пп 415 var __propArray_484=CreateObject("APropArray"); //список источников с выплатами по пп 484 var __propArray_3118=CreateObject("APropArray"); //список источников с выплатами по "Дополнительные выплаты медицинским и иным работникам в соответствии с РП РФ №3118-р" var __propArray_Covid=CreateObject("APropArray"); //список источников с выплатами covid-19 bool __sortByFio=false; bool __sortBySnils=false; bool __mainDolgFirst=false; bool __takeFRMRDolgnName=false; // название должности определять через справочник ФРМР bool __useOkpdtrDolgnName=false; // название должности определять через ОКПДТР bool __frv_nrvFromMainProp=false; bool __frvBySrc=false; //учитываем источник строки при выборке ФРВ "по видам" bool __frvBySubj=false;//учитываем обьект строки при выборке ФРВ "по видам" bool __frvByDep=false; //учитываем подразделение строки при выборке ФРВ "по видам" bool __takeDepartmentNameFromSet=false;//брать наименование подразделение из сетки OID bool __takeRKFromNu=false; int __summFlag=CL_MV; //флаг выборки сумм (по месяцу начисления/месяцу принадлежности) string __prefixSnils=""; string reportKeyDelim="^";//разделитель значений int __reportType; int idxReportType_MinstryHealth =1, //"Форма для заполнения" (Минздрав) idxReportType_MinstryWork =2, //"Форма для заполнения" (Минтруд) idxReportType_MinstryWork04_2020 =3, //"Форма для заполнения" (Минтруд) 04.2020 idxReportType_MinstryHealth04_2020=4, //"Форма для заполнения" (Минздрав)04.2020 idxReportType_MinstryHealth11_2020=5, //"Форма для заполнения" (Минздрав)11.2020 idxReportType_MinstryHealth01_2021=6; //"Форма для заполнения" (Минздрав)01.2021 var __reportParam; int __flagPrint;//1-"Печать" Определяет номер столбца Excel int __flagPrint_PrintALL;//Печатать все столбцы (игнорировать при печати noPrintColumns) InitMonitoringMed(reportType) { __reportType=reportType; char BufCnf[256]; GetCommonCnf("region",__tablePseudo,BufCnf,255); __MonitoringMedRegion=__MonitoringMedRegionFileName=RTrimS(BufCnf); GetCommonCnf("regionFile",__tablePseudo,BufCnf,255); if(!StringIsEmpty(BufCnf)) __MonitoringMedRegionFileName=RTrimS(BufCnf); GetCommonCnf("MO",__tablePseudo,BufCnf,255); __MonitoringMedMO=RTrimS(BufCnf); GetCommonCnf("MO_OID",__tablePseudo,BufCnf,255); __MonitoringMedMO_OID=RTrimS(BufCnf); MapNuRv.Clear(); GetCommonCnf("CllNU_Rv",__tablePseudo,BufCnf,255); var arr; int countElem =ListNUToSafeArray(BufCnf,' ',arr); for (int i=0;i=397) //01.2021 { reportType=idxReportType_MinstryHealth01_2021; noPrintColumns.Add("22",""); noPrintColumns.Add("23",""); noPrintColumns.Add("55",""); noPrintColumns.Add("56",""); noPrintColumns.Add("57",""); noPrintColumns.Add("58",""); noPrintColumns.Add("59",""); noPrintColumns.Add("60",""); noPrintColumns.Add("61",""); noPrintColumns.Add("65",""); } else if(reportMonth>=395) reportType=idxReportType_MinstryHealth11_2020; } __reportParam = CreateObject("Map"); __reportParam.Add("reportMonth",to_string(reportMonth)); __reportParam.Add("reportType",to_string(reportType)); __reportParam.Add("noPrintColumns",noPrintColumns); } //получаем данные для таблицы GetTableRow() { int reportPeriodMB = KDateFromStr(Str_Date_0).GetAbs(); int reportPeriodME = KDateFromStr(Str_Date_1).GetAbs(); try { var kcp = CreateObject("KPeriodsIterations");kcp.ClearAll(); //цикл по всем Aprop в ЛС var APropArr=CreateObject("APropArray");APropArr.GetPropListLS(); for ( int idxAprop=0; idxAprop0.001) //указаны виды для сов-ва + по видам есть суммы -> добавляем строку с "фиктивным" внутренним совместительством kcp.AddPeriod(MakeRecordKey(month,curProp,true),to_string(datatek),to_string(datatek)); } } } catch(object err) { SayError(err); //выводим сообщение о ошибке } catch(...) { SayUndefinedScriptError(); } } GetDolgnName(prop,month,btakeFRMR) { return PriorityCall("UserMonitoringGetDolgnName","SysMonitoringGetDolgnName",prop,month,btakeFRMR); } SysMonitoringGetDolgnName(prop,month,btakeFRMR) /* если есть должность ФРМР - берем ее если есть должность ОКПДТР - берем ее иначе берем то название должности что используется в организации. */ { if(prop.GetCombine()==-1) return "Должность внутреннего совместительства не определена"; var doljnElem=GetDoljnFromKCH(KDateFromInt_LastDay(month).GetStr(),prop.GetCombine()); if(doljnElem.IsEmpty()) return "Должность не определена"; //если есть должность ФРМР - берем ее if(btakeFRMR && doljnElem.GetFrmrCode()!=0) return RTrimS(doljnElem.GetFrmrName()); //если есть должность ОКПДТР - берем ее if(__useOkpdtrDolgnName && doljnElem.GetOKPDTRCode()!=0) return GetOKPDTRDoljnName(doljnElem.GetOKPDTRCode()); //берем должность из К.Ч. return RTrimS(doljnElem.GetName()); } GetDolgnDepartmentName(prop,month,params) { return PriorityCall("UserGetDolgnDepartmentName","SysGetDolgnDepartmentName",prop,month,params); } SysGetDolgnDepartmentName(prop,month,params) { //можно брать название из подразделения указанного в строке вида //todo:названия подразделений контролировать по справочнику формы- предупредить if (prop.GetCombine()==-1) return "Подразделение внутреннего совместительства не определено"; var departmentCode=DolgnDepartmentCode(prop.GetCombine(),month); if(__takeDepartmentNameFromSet && MapDepartmentName.IsExist(to_string(departmentCode))) return MapDepartmentName.GetValue(to_string(departmentCode)); return RTrimS(GetOtdName(departmentCode)); } DolgnDepartmentCode(combine,month) { var doljnElem=GetDoljnFromKCH(KDateFromInt_LastDay(month).GetStr(),combine); if(doljnElem.IsEmpty()||doljnElem.GetPodr()==0) { var CL=CreateObject("CombineList"); if(CL.GetPodr(combine)>0) return CL.GetPodr(combine); return kch_from_int("podr");//-1; todo: может все же лучше возвращать -1? } return doljnElem.GetPodr(); } GetWorkTypeName(prop,month,params) { return PriorityCall("UserGetWorkTypeName","SysGetWorkTypeName",prop,month,params); } SysGetWorkTypeName(prop,month,params) { if (IsEmployeeExtSovm(month)) return "Внешнее совместительство"; if(prop.GetCombine()==GetGeneralCombineLS()) return "Основное"; return "Внутреннее совместительство"; } IsEmployeeExtSovm(month) { var d=KDateFromInt_LastDay(month); char s[256];GetKchValue("kod_rab",s,99,d); return atoi(s)==4||atoi(s)==9; } GetDolgnStavka(prop,month) { return PriorityCall("UserMonitoringGetDolgnStavka","SysMonitoringGetDolgnStavka",prop,month); } SysMonitoringGetDolgnStavka(prop,month) { if(prop.GetCombine()==-1) return -1; return DefineKEmploy(prop.GetCombine(),KDateFromInt_LastDay(month)); } GetDolgnDepartmentOID(prop,month,params) { return PriorityCall("UserMonitoringGetDolgnDepartmentOID","SysMonitoringGetDolgnDepartmentOID",prop,month,params); } SysMonitoringGetDolgnDepartmentOID(prop,month,params) { if (prop.GetCombine()==-1) return "OID подразделения не определен"; var departmentCode=DolgnDepartmentCode(prop.GetCombine(),month); if (!MapDepartmentOID.IsExist(to_string(departmentCode))) return "OID подразделения не определен"; return MapDepartmentOID.GetValue(to_string(departmentCode)); } GetSrcType(prop) { var multiPropArray= CreateObject("MultiPropArray"); string srcList=RTrimS(GetCommonCnfStr("LIST_SRC01",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "ОМС"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC02",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Средства бюджета на финансовое обеспечение государственного задания"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC03",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидии из средств бюджета"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC04",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Средства от платных мед услуг"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC05",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Иные средства от приносящих доход деятельности"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC06",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия федерального бюджета по ПП РФ №415"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC07",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия бюджета субъекта Российской Федерации по ПП РФ №415"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC08",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия бюджета органа местного самоуправления по ПП РФ №415"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC09",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Иные источники софинансирования по ПП РФ №415"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC10",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия федерального бюджета по ПП РФ №484"; } //отпускные с ковидных выплатами srcList=RTrimS(GetCommonCnfStr("LIST_SRC26",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия федерального бюджета по ПП РФ №415 (отпускные)"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC27",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия бюджета субъекта Российской Федерации по ПП РФ №415 (отпускные)"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC28",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия бюджета органа местного самоуправления по ПП РФ №415 (отпускные)"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC29",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Иные источники софинансирования по ПП РФ №415 (отпускные)"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC30",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидия федерального бюджета по ПП РФ №484 (отпускные)"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC40",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Дотация бюджетам субъектов Российской Федерации по РП РФ №3118-р (отпускные)"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC41",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Дотация бюджетам субъектов Российской Федерации по РП РФ №3118-р"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC42",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидии из средств бюджета субъекта на выплаты за работу с COVID-19"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC43",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Субсидии из средств органа местного самоуправления на выплаты за работу с COVID-19"; } srcList=RTrimS(GetCommonCnfStr("LIST_SRC44",__tablePseudo)); if(strlen(srcList)) { multiPropArray.LoadFromStr(srcList); if(multiPropArray.IsElemValid(prop)) return "Иные источники софинансирования выплат за работу с COVID-19"; } return "Источник не определен"; } GetFrvMed(prop,month,isSovmByNu) { return PriorityCall("UserGetFrvMed","SysGetFrvMed",prop,month,isSovmByNu); } SysGetFrvMed(prop,month,isSovmByNu) { //настройка брать РВ с главного, но prop не главный if(__frv_nrvFromMainProp && !prop.IsEQ(GetLsMainProp())) return 0.; double totalRv=0.; if(!isSovmByNu && MapNuRv.Size()<1)//берем ФРВ из табеля { var tmpComb=CreateObject("TmpCurCombine");tmpComb.Init(prop.GetCombine()); //устанавливаем должность текущей int tmpMrasch = mrasch; s50(month); skoljko(totalRv,data,1,countday,rsimv,calm,cht); if ( mrasch!=tmpMrasch ) s50(tmpMrasch); } else //берем РВ из видов { var propTmp = CreateObject("APropBE");propTmp.Init(CLL_TOTAL_SRC,CLL_TOTAL_SUBJECT,CLL_TOTAL_PODR,prop.GetCombine()); if(__frvBySrc) propTmp.SetSrc(prop.GetSrc()); if(__frvBySubj) propTmp.SetSubject(prop.GetSubject()); if(__frvByDep) propTmp.SetPodr(prop.GetPodr()); if(isSovmByNu) { //ФРВ берем из видов, указанных в настройках CllNU_Rv И CllNU_Sov if( MapNuRv.Size()<1 || MapNuSovm.Size()<1 ) return 0.; string nuList=GetNuListIntersect(StrFromMap(MapNuRv," "),StrFromMap(MapNuSovm," ")); var arr; int countElem =ListNUToSafeArray(nuList,' ',arr); for (int i=0;i0)//исключаем виды, указанные в MapNuSovm nuList=GetNuListExcept(nuList,StrFromMap(MapNuSovm," ")); return GetReportSummNuList(prop,month,nuList,__summFlag); } GetSummGroupFiltered(prop,month,groupNum,isSovmByNu,filterPropArray) { if( filterPropArray.FindTotal(prop)==-1) //prop не содержится в filterPropArray return 0.; return GetSummGroup(prop,month,groupNum,isSovmByNu); } DefineRkByProp(prop,month) { var date=KDateFromInt_LastDay(month); if(__takeRKFromNu) { //пытаемся найти действующую строку РК //если БЗ вида непустое - возвращаем значение БЗ char nuList[256]; GetCommonCnf("CllNU_3",__tablePseudo,nuList,255); var arr; int cntNu=ListNUToSafeArray(nuList,' ',arr); for(int i=0;i0 && MapNuRv.Size()>0) //нужно выставить флаг "суммируемое поле" для полей с ФРВ return true; return false; } GetSnilsPartSortKey() { if( !__sortByFio && !__sortBySnils ) return ""; if(__sortByFio) return GetFioFromKch(); return GetSnilsDigits(); } GetMainDolgnPartSortKey(workTypeName) { if(!__mainDolgFirst) return ""; return workTypeName=="Основное"?"1":"2"; } GetSnilsDigits() { char Buf[256];kch_from("strah_n",Buf);Buf=RTrimS(Buf); char digits[256]; // тут будет результат // Копируем в digits только цифры int digitCount=0; for (int i=0; i='0' && Buf[i]<='9') digits[digitCount++] = Buf[i]; return to_string(digits); } GetReportValue(idx) { var kcp = CreateObject("KPeriodsIterations"); return Split(kcp.GetCurCod(),reportKeyDelim)[idx]; } CalcFlagSumm(res) { for(int idx=idxSum1;idx<=idxLastSumm;idx++) { //для отчета минздрава не учитываем столбцы РК и Северная надбавка if( __reportType==idxReportType_MinstryHealth04_2020 && ( idx==idxRk_415 || idx==idxRk_484 || idx==idxSev_415) ) continue; //ФРВ COVID учитываем только для отчета idxReportType_MinstryHealth01_2021 if( ( idx==idxFrv_Covid) && __reportType!=idxReportType_MinstryHealth01_2021 ) continue; //нашли ненулевую сумму if(nabs(atof(Split(res,reportKeyDelim)[idx]))>0.00001) return 1; } return 0; } CalcFlagRest(month,curProp) { if (nabs(GetReportSummNuList(curProp,month,StrFromMap(MapNuRest," "),CL_M))>0.00001) return 1; return 0; /* int bFindRest=0; //смотрим наличие в табеле символов "ОДТ" int combine=atoi(Split(res,reportKeyDelim)[idxSummComb]); var tmpComb=CreateObject("TmpCurCombine");tmpComb.Init(combine); //устанавливаем должность текущей int month=atoi(Split(res,reportKeyDelim)[idxMonthAbs]); int tmpMrasch = mrasch; s50(month); for ( int day=1; day <= countday; day++ ) if (calm[day-1]=='О' || calm[day-1]=='Д' || calm[day-1]=='Т' ) { bFindRest=1; break; } if ( mrasch!=tmpMrasch ) s50(tmpMrasch); return bFindRest; */ } //печатаем для Минтруда PrintMonitoringMinistryWork() { PrintMonitoringBase(idxReportType_MinstryWork); } PrintMonitoringMinistryWork04_2020() { PrintMonitoringBase(idxReportType_MinstryWork04_2020); } //печатаем для Минздрава PrintMonitoringMed() { PrintMonitoringBase(idxReportType_MinstryHealth); } //печатаем для Минздрава PrintMonitoringMed04_2020() { PrintMonitoringBase(idxReportType_MinstryHealth04_2020); } DefineXltPath(reportType) { char Dir[256]; // строка для текущей директории GetCurrentDirectory(255,Dir); // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу) // если шаблона нет, на лок.машине, и версия сетевая...то берем шаблон с // серверной машины if ( !IsLocalZPL() && IsCommonResource(NameCommonDir()) ) { //берем путь к сетевому ZPL GetCommonZPL(Dir,255); } string fileName="monitoringMed.xlt"; if( reportType==idxReportType_MinstryWork ) fileName="monitoringMinistryWork.xlt"; else if ( reportType==idxReportType_MinstryWork04_2020 ) fileName="monitoringMinistryWork_2020.xlt"; else if( reportType==idxReportType_MinstryHealth04_2020 ) fileName="monitoringMed2020.xlt"; else if( reportType==idxReportType_MinstryHealth11_2020 ) fileName="monitoringMed2020_11.xlt"; else if( reportType==idxReportType_MinstryHealth01_2021 ) fileName="monitoringMed2021_01.xlt"; char NameXlt[256]; sprintf(NameXlt,"%s\\%s\\%s",Dir,NameCommonDir(),fileName); char userNameXlt[256];sprintf(userNameXlt,"%s\\%s\\user_%s",Dir,NameCommonDir(),fileName); //файл нашли-> берем пользовательский шаблон if (access(userNameXlt,0) == 0) NameXlt=userNameXlt; return NameXlt; } PrintMonitoringBase(reportType) { var CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати CFile.SetFlagBrowse(0); CFile.SetFlag_Print(0); var CTabl=CreateObject("CurPrnTbl"); // объект класса для работы с текущей таблицей InitReportParams(CTabl,reportType); int reportMonth=atoi(__reportParam.GetValue("reportMonth")); reportType=atoi(__reportParam.GetValue("reportType")); var noPrintColumns=__reportParam.GetValue("noPrintColumns"); InitMonitoringMed(reportType); if(!CheckBeforePrint(CTabl)) return; string NameXlt=DefineXltPath(reportType); tPrepereOfficeForWork(); // определяем работать на Excel или на Calc (определяем какой из офисов (MS Office или OpenOffice) установлен и какой предпочтительнее) tOpenXlsObjects(to_string(NameXlt),""); string wshName= (reportType==idxReportType_MinstryHealth) ? "Лист1" : "Таблица 1"; tGetWshByName(OemToAnsi(wshName)); //tGetWshByIndex(1); // получаем ссылку на лист (worksheet) tWshSelect(); var CMsg = 0; // Процент выполненной работы int bTime = false; // false-показывать процент, // true-показывать оставшееся время CMsg=CreateObject("ProgressBar"); CMsg.Initial(0,100,1); CMsg.SetShowTime(static_cast_to_int(bTime)); int cntExcelColumn=CTabl.Count_Fld(); int cntExcelRow=CTabl.Count_Rcr(); var printData[cntExcelColumn][cntExcelRow]; int idxFldFlagSumm=CTabl.Find_Name_Fld("flagSumm"); int idxFldFlagRest=CTabl.Find_Name_Fld("flagRest"); //определяем в каком порядке печатать колонки ( пользователь может определить свой шаблон и внем порядок колонок может быть другим) var MapColumnOrder; int columnCount=FillColumnOrder(CTabl,reportType,MapColumnOrder); if(columnCount==-1) { tEndXlsWork(1); // делаем форму видимой return 0; } try { int rowIndex=0; //индекс строки в printData int firstExcelRow=reportType==idxReportType_MinstryWork04_2020?5:4;//начинаем печатать в 4 строку int npp=0;//порядковый номер строки // цикл по записям таблицы for (int record=0; record0; bool haveRest=idxFldFlagRest==-1||atoi(CTabl.Text(idxFldFlagRest,record))>0; if ( !haveSumm && !haveRest) continue; if( reportType==idxReportType_MinstryWork04_2020 ) npp++; //добавляем строки tInsertRows(firstExcelRow+1,1);tCopyRow(firstExcelRow+2); //пишем данные в printData PrintOneRow(CTabl,record,rowIndex++,npp,noPrintColumns,printData,MapColumnOrder); } int lastExcelRow=firstExcelRow+rowIndex-1; if(rowIndex) //если есть что печатать tSetRangeValue(firstExcelRow,1,lastExcelRow,columnCount,printData); //удаляем "пустые" строки tDeleteRows(lastExcelRow+1,3); // чтобы не было выделенной строки после всех манипуляций с копированием // выделим отдельную ячейку. tWshCellSelect(4,1); } // блок try catch(object err) { tEndXlsWork(1); // делаем форму видимой SayError(err); return 1; } catch(...) { SayUndefinedScriptError(); } if( reportType==idxReportType_MinstryHealth11_2020 ) { string filePath=MakeReportName(reportMonth); if(!StringIsEmpty(filePath) && CheckFileExistAndDelete(filePath)) tSaveXlsObjects(filePath); } tEndXlsWork(1); // делаем форму видимой return 0; } FillColumnOrder(CTabl,reportType,&MapColumnOrder) { int columnIndex=0; int maxExcelColumnNumber=0; if( reportType==idxReportType_MinstryWork04_2020 ) columnIndex++;//оставляем место под "номер п/п" var UsedExcelColumn=CreateObject("MapString");UsedExcelColumn.Clear(); MapColumnOrder=CreateObject("MapLong");MapColumnOrder.Clear(); for(int tableColumn=0;tableColumn0 && !MapColumnOrder.IsExist(tableColumn)) { //проверяем - может этот номер уже был указан для другого столбца... if(UsedExcelColumn.IsExist(excelColumnNumber)) { MsgBox(OemToAnsi("Столбец Excel с номером "+to_string(excelColumnNumber)+" зарезервирован для печати данных из столбца "+UsedExcelColumn.GetValue(excelColumnNumber)),"",MB_OK|MB_ICONWARNING); return -1; } else UsedExcelColumn.Add(excelColumnNumber,RTrimS(CTabl.Name(tableColumn))); MapColumnOrder.Add(tableColumn,excelColumnNumber-1); //минус 1 т.к. мечатаем через матрицу if(excelColumnNumber>maxExcelColumnNumber) maxExcelColumnNumber=excelColumnNumber; } } else MapColumnOrder.Add(tableColumn,columnIndex++); } return max(columnIndex,maxExcelColumnNumber); } CheckBeforePrint(tabl) { int reportMonth=atoi(__reportParam.GetValue("reportMonth")); int reportType=atoi(__reportParam.GetValue("reportType")); if(reportType==idxReportType_MinstryHealth11_2020 && reportMonth>=395) { //Источник финансирования <субсидия федерального бюджета по ПП РФ 415> исключен начиная с отчета за ноябрь 2020 года, то есть выплаты по данному источнику будут считаться ошибкой!!!. int fldSum_415=tabl.Find_Name_Fld("S36"); int fdVznosi_415=tabl.Find_Name_Fld("S37"); //Источник финансирования <субсидия федерального бюджета по ПП РФ 484> исключен в связи с прекращением действия ПП РФ №484 начиная с отчета за ноябрь 2020 года, то есть выплаты по данному источнику будут считаться ошибкой!!! int fldSum_484=tabl.Find_Name_Fld("S39"); int fdVznosi_484=tabl.Find_Name_Fld("S40"); int fldSrcName=tabl.Find_Name_Fld("SrcName"); bool bFindSummClosedSource=false; string curSrcName=""; // цикл по записям таблицы for (int record=0; record0.001) { bFindSummClosedSource=true; break; } } if( bFindSummClosedSource && MsgBox(OemToAnsi("Внимание! В таблице присутствуют суммы по источнику '" + curSrcName + "' (исключен с ноября 2020 года)\r\nПродолжить печать?"),"",MB_YESNO)!=IDYES) return false; //не печатаем } return true;//все ок } MakeReportName(absMonth) { char dir[256]; GetCurrentDirectory(255,dir); dir+="\\"+NameCommonDir()+"\\MonitoringMedReports\\"; //создаем директорию var dirInfo = CreateObject("DirectoryInfo"); dirInfo.Init(to_string(dir)); if (!dirInfo.Exists()) dirInfo.Create(); //в Panel_Path надо передать путь в дос кодировке dir=AnsiToOem(dir); if(Panel_Path("Каталог для сохранения отчета",dir,0)==ESC) return ""; var kdate=KDateFromInt(absMonth); char filePath[256]; sprintf(filePath,"%s%s_%02d_%04d.xls",OemToAnsi(RTrimS(dir)),OemToAnsi(__MonitoringMedRegionFileName),kdate.GetMonth(),kdate.GetYear()); return to_string(filePath); } CheckFileExistAndDelete(filePath) { var fileInfo = CreateObject("FileInfo"); fileInfo.Init(to_string(filePath)); var dirInfo = CreateObject("DirectoryInfo"); dirInfo.Init(fileInfo.Directory()); //создаем директорию if (!dirInfo.Exists()) { if(!dirInfo.Create()) return false; } //файл уже создан ранее.. если пользователь согласен перезаписать его - удаляем файл. if (fileInfo.Exists()) { string msg = "Внимание!\nФайл '" + AnsiToOem(filePath) + "' существует. \n\nПерезаписать?"; int res = AmbaMessageBox(msg, "Контур-Зарплата", MB_YESNOCANCEL|MB_ICONWARNING|MB_DEFBUTTON2, 0); if (res != IDYES) return false; fileInfo.Delete(); } return true; } PrintOneRow(&CTabl,record,rowIndex,npp,noPrintColumns,&printData,MapColumnOrder) { if (npp>0) printData[0][rowIndex]=npp; for(int tableColumn=0;tableColumn0 ? prop.GetCombine() : GetGeneralCombineLS(); //для сов-ва "через вид" берем должность помеченную главной var tmpComb=CreateObject("TmpCurCombine");tmpComb.Init(combine); //устанавливаем должность текущей char str[256]; GetKchValue("empcontr",str,255,KDateFromInt_LastDay(month));//берем "значение" из поля к.ч. Трудовой договор на дату=последнее число для month str = KZMainDomain().EmploymentContract(to_string(str)).Number; if(StringIsEmpty(str)) return "б/н"; return to_string(str); } //дата трудового договора GetContractDate(month,prop) { return PriorityCall("UserGetContractDate","SysGetContractDate",month,prop); } bool bTakeDateRb=false;//если в к.ч. дата договора не заполнена - брать дату приема SysGetContractDate(month,prop) { int combine=prop.GetCombine()>0 ? prop.GetCombine() : GetGeneralCombineLS(); //для сов-ва "через вид" берем должность помеченную главной var tmpComb=CreateObject("TmpCurCombine");tmpComb.Init(combine); //устанавливаем должность текущей char str[256]; GetKchValue("empcontr",str,255,KDateFromInt_LastDay(month));//берем "значение" из поля к.ч. Трудовой договор на дату=последнее число для month var datV = KZMainDomain().EmploymentContract(to_string(str)).ContractDate; var kd = CreateObject("KDate"); kd.SetVariantDate(datV); if(kd.IsValid()) return kd.GetStr(); GetKchDate("empcontr",str,255,KDateFromInt_LastDay(month));//берем "дату" из поля к.ч. Трудовой договор на дату=последнее число для month //если в к.ч. дата договора не заполнена брать дату приема?? if(bTakeDateRb && !KDateFromStr(str).IsValid()) return to_string(kch_from_safe("data_rb")); return to_string(str); } //Продолжительность рабочего времени в неделю ( часы ) GetWeekTime(month,prop) { return PriorityCall("UserGetWeekTime","SysGetWeekTime",month,prop); } SysGetWeekTime(month,prop) { int combine=prop.GetCombine()>0 ? prop.GetCombine() : GetGeneralCombineLS(); //для сов-ва "через вид" берем должность помеченную главной var tmpComb=CreateObject("TmpCurCombine");tmpComb.Init(combine); //устанавливаем должность текущей char kchvalue[256]; int numgr = atoi(GetKchValue("grafik",kchvalue,255,KDateFromInt_LastDay(month))); if ( !numgr ) numgr = 1; int parentNum = GetNumParentCalend(numgr); if ( parentNum ) numgr = parentNum; return GetCountWeekHours(numgr); }