Otp_Ras(__AdrTable)  // расчет отпуска из таблицы  "Расчет отп ОК-КБМ 202006"
                     // вызов модуля из "Конец расчета таблицы"__:
                     // LoadScriptModule("user\\kbm_otp");return Otp_Ras(__AdrTable);
                     // таблица находится в T_PROC   
{
 var CTabl = CreateObject("CurPrnTbl");
 CTabl.Initial(__AdrTable);



 for (int zap=0; zap<CTabl.Count_Rcr(); zap++)
  {
    int tn = atoi(CTabl.TextS("C_FIO",zap));   
    char ls1[90];    lsname(Find_Full_TN(tn),ls1);   FreeSpaceString(ls1,3,"");    
    lsread(ls1,0);                  // инициализация ТН

    string Beg = CTabl.TextS("Date_Beg",zap);
    string End = CTabl.TextS("Date_End",zap);

      var BegKD=KDateFromStr(Beg);
      var EndKD=KDateFromStr(End);
      if (!BegKD.IsValid() || !EndKD.IsValid()) return -1;
      int tmpMrasch=mrasch;
      for ( int m=BegKD.GetAbs(); m<=EndKD.GetAbs(); m++ )
      {
         if (m<mtek-P2MES || m>mtek+B2MES)  continue;
         s50(m);
         int z1,z2;
         s6400(BegKD.GetDouble(),EndKD.GetDouble(),z1,z2,data);
         //zamena_simv_v_tab("nrsw",SimvTabel,calm,z1,z2,EOF,0); //меняем в табеле все нормативные, рабочие, выходные на наш символ (если уже заполнены О,Б,Д то они останутся)
         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);

      var Otp= CreateObject("KCalcSredn"); //установит func[0]=2 - глобальный режим "расчет отпуска", восстановит при разрушении
      int monthSr=0; // месяц для расчета среднего
      Otp.InitOtp2(BegD,EndD,TypeOtp,monthSr,0);

      return Otp.Calculate(1,2);


  }
}




Otp(Beg,End)
{
      var BegKD=KDateFromStr(Beg);
      var EndKD=KDateFromStr(End);
      if (!BegKD.IsValid() || !EndKD.IsValid()) return -1;
      int tmpMrasch=mrasch;


      for ( int m=BegKD.GetAbs(); m<=EndKD.GetAbs(); m++ )
      {
         if (m<mtek-P2MES || m>mtek+B2MES)  continue;
         s50(m);
         int z1,z2;
         s6400(BegKD.GetDouble(),EndKD.GetDouble(),z1,z2,data);
         //zamena_simv_v_tab("nrsw",SimvTabel,calm,z1,z2,EOF,0); //меняем в табеле все нормативные, рабочие, выходные на наш символ (если уже заполнены О,Б,Д то они останутся)
         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);

   var Otp= CreateObject("KCalcSredn"); //установит func[0]=2 - глобальный режим "расчет отпуска", восстановит при разрушении
   int monthSr=0; // месяц для расчета среднего
   Otp.InitOtp2(BegD,EndD,TypeOtp,monthSr,0);

   return Otp.Calculate(1,2);
}




SrOtp(tab,Date,Src,Beg,End)        // из  ReservOtp
{
    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 DateBeg=CreateObject("KDate");               //Дата, на которую считаем резерв
  DateBeg.SetDate(static_cast_to_string(Date));
  if ( !DateBeg.IsValid() ) return 0.;


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

      int tmpMrasch=mrasch;
      for ( int m=BegKD.GetAbs(); m<=EndKD.GetAbs(); m++ )
      {
         if (m<mtek-P2MES || m>mtek+B2MES)  continue;
         s50(m);
         int z1,z2;
         s6400(BegKD.GetDouble(),EndKD.GetDouble(),z1,z2,data);
         //zamena_simv_v_tab("nrsw",SimvTabel,calm,z1,z2,EOF,0); //меняем в табеле все нормативные, рабочие, выходные на наш символ (если уже заполнены О,Б,Д то они останутся)
         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(0);                              // расчет среднего
  Sredn.Calculate(1,2);   //Sredn.Calculate(1);

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


SysIntegrProcessVidNU(typeOrd,doljnAmbaId,AmbaKey,xmlNode)
{
 //... 

   // РАЗНОСКА 
   string BegD=GetXmlValue(xmlNode, "ДНач");
   string EndD=GetXmlValue(xmlNode, "ДКон");

   var kdBeg=KDateFromStr(BegD);
   if (!kdBeg.IsValid())     kdBeg.SetDate("  .  .    ");
   var kdEnd=KDateFromStr(EndD);
   if (kdEnd.IsEqI(INVALID_DATE_VALUE))     kdEnd.SetDate("01.01.2050");

   string PeriodDat=" ("+kdBeg.GetStr()+"-"+kdEnd.GetStr()+")";//для комментариев в ошибках

   double dBeg=kdBeg.GetDouble();
   double dEnd=kdEnd.GetDouble();

   bool bNewOrder=!VarHasValue(AmbaKey) || AmbaKey=="";




}









