SrOtp_KBM(Date)
{
  //Дата, на которую считаем резерв
  var DateBeg=CreateObject("KDate");
  DateBeg.SetDate(static_cast_to_string(Date));

  //класс для расчета среднего
  var Sredn = CreateObject("KCalcSredn");
  Sredn.InitOtp(DateBeg,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);   // расчет среднего
  return Sredn.SumSredn();
}


SrOtp_333()
{
//Дата, на которую считаем отпуск
  var DateBeg=CreateObject("KDate");
  string Date = "01.03.2019";
  DateBeg.SetDate(to_string(Date));
//класс для расчета среднего
  var Sredn = CreateObject("KCalcSredn");
  Sredn.InitOtp(DateBeg,0);    // Инициализация способа расчета - отпуск
//  Sredn.Calculate(0);   // расчет среднего без вывода панели
  Sredn.Calculate(1);   // расчет среднего  с выводом панели

}


SrOtp(Date,Src)
{
  bool calcBySrc=false;
  if (Str_Cmp(Src," "," ")!=0) //указали источник 
    calcBySrc=true;
  //Дата, на которую считаем резерв
  var DateBeg=CreateObject("KDate");
  DateBeg.SetDate(static_cast_to_string(Date));

  //класс для расчета среднего
  var Sredn = CreateObject("KCalcSredn");
  Sredn.InitOtp(DateBeg,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); // расчет среднего c выводом таблицы расчета среднего

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

TarifStrVzn0(Date,StrSimv)
{
   var Dat = CreateObject("KDate");
   Dat.SetDate(static_cast_to_string(Date));
   
   int len = strlen(StrSimv);
   double Procent = 0.;
   for (int idx=0; idx<len; ++idx)
   {
      char SimvTax = GetCharFromStr(StrSimv,idx);
      double Sum=R_TaxSc2(1,Dat.GetRel(),Dat.GetRel(),SimvTax,12,2);
      double Pr=R_TaxSc2(32,Dat.GetRel(),Dat.GetRel(),SimvTax,12,2);
      Procent += GetFirstProcentTax();
   }
   return Procent;
}

TarifStrVzn1(Date,StrAlg)
{
   var Map = CreateObject("MapString");

   var Par=CreateObject("ParamFuncRW");
   Par.IInitial(static_cast_to_string(StrAlg),", ",100);

   double Procent = 0.;
   for (int idx=0; idx<Par.Count(); ++idx)
   {
      int Alg = atoi(Par.Get(idx));
      Map.Clear();
      Procent+=ProcentTaxAlg(Alg,Date,1,Map);
   }
   return Procent;
}

TarifStrVzn(Date,StrAlg)
{
   var Map = CreateObject("MapString");
   var Dat = CreateObject("KDate");
   Dat.SetDate(static_cast_to_string(Date));

   var Par=CreateObject("ParamFuncRW");
   Par.IInitial(static_cast_to_string(StrAlg),", ",100);
   char Buf[256];
   sprintf(Buf,"TABL_K%-d",CalcKategESN_PF());
   string PseudNastr = Buf;
   GetKchValue("d_inv",Buf,255,Dat);
   if ( GetGroupInv(Buf) )
      PseudNastr="TABL_INV";
   char Arg[256];

   double Procent = 0.;
   for (int idx=0; idx<Par.Count(); ++idx)
   {
      int Alg = atoi(Par.Get(idx));
      Map.Clear();
      if ( Alg!=261 )
      {
         sprintf(Arg,"%d,1,%d,%d,Источник выплаты,*,%d",1,Dat.GetRel(),Dat.GetRel(),Alg);
         R_Tax(Arg,Buf,12,2);
         sprintf(Arg,"option,%s",PseudNastr);
         string NumTables = R_Tax(Arg,Buf,12,0);
         Procent+=ProcentTaxAlg(Alg,Date,atoi(NumTables),Map);
      }
      else
      {
           var Par2=CreateObject("ParamFuncRW");
           Par2.IInitial(Par.Get(idx),"-",2);
           sprintf(Arg,"%d,1,%d,%d,Источник выплаты,*,%d,status3=%d",32,Dat.GetRel(),Dat.GetRel(),Alg,atoi(Par2.Get(1)));
           Procent += R_Tax(Arg,Buf,12,2);
      }
   }
   return Procent;
}
