UserGetZpGosUzizpId(Uzizp) // todo Вычисление этого идентификатора нужно и в шарпе (например, при валидачии редактируемых данных). Скорее всего его нужно сделать в шарпе (чтобы бы единый вариант). // Идентификатор трудового договора для ЗЛ (для одного Item) (для отдельного элемента блока УЗиЗП) { string contractId = ""; string separator = "~"; if ( (zpgosHowMakeIdUzizp & 0x01)==0 ) { var db = CreateObject("KDate"); var de = CreateObject("KDate"); db.SetVariantDate(Uzizp.Period.DateBeg); de.SetVariantDate(Uzizp.Period.DateEnd); contractId += db.GetStr(); contractId += separator + de.GetStr(); } contractId += separator + Uzizp.Podr.Name; contractId += separator + to_string(Uzizp.Podr.Oid); contractId += separator + Uzizp.PositionCode; for ( int i = 0; i < Uzizp.SouzItems.Count; i++ ) { var souzItem = Uzizp.SouzItems.Get(i); contractId += separator + souzItem.Code; contractId += separator + to_string(souzItem.Value); } contractId += separator + to_string(Uzizp.Contract.Kind); contractId += separator + to_string(Uzizp.Contract.Time); contractId += separator + Uzizp.Qualification.Code; contractId += separator + to_string(Uzizp.Qualification.Level); if ( (zpgosHowMakeIdUzizp & 0x02)==0 ) contractId += separator + to_string(Uzizp.Qualification.StaffUnit); /* for ( int i = 0; i < Uzizp.Qualification.FixedItems.Count; i++ ) contractId += separator + to_string(Uzizp.Qualification.FixedItems.Get(i).Value); */ return contractId; } UserMergeUzizp(UzizpTarget, UzizpSrc) { // Если одинаковость строк анализируется без учета дат, то дополнительно проверим период // на соприкосновение по датам if ( (zpgosHowMakeIdUzizp & 0x01)!=0 ) { var dateTarget = CreateObject("KDate"); dateTarget.SetVariantDate(UzizpTarget.Period.DateBeg); var dateSrc = CreateObject("KDate"); dateSrc.SetVariantDate(UzizpSrc.Period.DateEnd); dateSrc.Inc(); // если дата конца "источника" соприкасается с датой начала "целевого", то расширяем дату начала целевого if ( dateTarget.IsEq(dateSrc) ) UzizpTarget.Period.DateBeg = UzizpSrc.Period.DateBeg; dateTarget.SetVariantDate(UzizpTarget.Period.DateEnd); dateSrc.SetVariantDate(UzizpSrc.Period.DateBeg); dateSrc.Dec(); // если дата начала "источника" соприкасается с датой конца "целевого", то расширяем дату конца целевого if ( dateTarget.IsEq(dateSrc) ) UzizpTarget.Period.DateEnd = UzizpSrc.Period.DateEnd; } var QualificationTarget = UzizpTarget.Qualification; var QualificationSrc = UzizpSrc.Qualification; // объединяем ШЕ (если сверяли без учета ставки) if ( (zpgosHowMakeIdUzizp & 0x02)!=0 ) { double staffUnit = QualificationTarget.StaffUnit + QualificationSrc.StaffUnit; //---nopasss---23.05.2023--- //if ( staffUnit>1.0 ) staffUnit = 1.; staffUnit = RefineZpGosStaffUnit(staffUnit); QualificationTarget.StaffUnit = staffUnit; } // Объединяем фактическое время double frv = QualificationTarget.WorkTimeFact + QualificationSrc.WorkTimeFact; QualificationTarget.WorkTimeFact = frv; // Объединяем "спец.часы" for ( int idx = 0; idx