BreakByShz(&info,&r)
{
   // для распределения отпуска
  int n,k;
  double r9;
  int rowkod[ROWMAX];
  var Prop=GetPropOfCod(GetCode(info.crow));
  int id_combine=GetIDCombineOfCod(GetCode(info.crow));
  Prop.SetCombine(id_combine);
  var ts1 = CreateObject("TempCommonSrc");
  ts1.TempCommonSrcInitial(CMN_SRC_C_WORK);
  SetCommonProp(CMN_SRC_C_WORK,Prop);

  var ListPartTable = CreateObject("KListPartitionTables");
  unsigned idPartTable = ListPartTable.AddTable(0);
  ListPartTable.ClearBlock();

  for (int i=-1;i>-4;i--)
     ListPartTable.s100("н",i,14,r9);
  // ListPartTable.ViewTable(idPartTable);

  var PartTable = ListPartTable.GetTable(idPartTable);
  PartTable.SetBegin();
  if ( PartTable.End() ) 
       return code_Break;

  n=poiskosnkod(info.ikod+0.,rowkod,0,0);
  for ( ; !PartTable.End(); PartTable.Next() ) // добавить виды по ШПЗ
  { 
     string Shz = PartTable.GetKey();
     k = 0;
     for(int i=0; i<n && !k; i++)
     { 
        if( !CompareSHZ(Shz,GetShifrZatrSumC1(rowkod[i],mrasch)) )
          k=1;
     }
     if (k==0)
     {
       otkrsnu(info.ikod+0.,0.,205001.01,0,Shz,0);
       PutSumm(countkod-1,colc1,PartTable.GetSumma());
       PutCashMonth(countkod-1,colc2,mtek);
     }
   }

   PartTable.SetBegin();
   for ( ; !PartTable.End(); PartTable.Next() ) // заполнить ШПЗ
   {
      string Shz = PartTable.GetKey();
      if( !CompareSHZ(Shz,GetShifrZatrSumC1(info.crow,mrasch)) )
      {  
         info.n1=PartTable.GetSumma();
         return code_Break;
      }
   }
   info.n1 = 0.;
   return code_Break;
}


ChangeSimvDayWeek(MonthB,MonthE,DayWeek,SimvChg)
// Замена дней в табеле
// MonthB,MonthE - дата в любом допустимом формате
// DayWeek - день недели (1 - понедельник, ..., 7-воскресенье)
// SimvChg - строка допустимых для пятницы дней, причем
//           первым должен быть указан, тот символ, на который
//           мы поменяем символ в табеле, если он был "недопустимым".
{
   if ( DayWeek<1 || DayWeek>7 ) return;
   char BufSimv[2];
   BufSimv[1]=0;
   char SimvForChange = GetCharFromStr(SimvChg,0);

   // Определяем месяц и день начала замены и месяц и день - конца
   var Dat = CreateObject("KDate");
   Dat.SetDateD(GetDateFromFuncRWScript(MonthB));
   int absm1=Dat.GetAbs();
   int day1 = Dat.GetDay();
   Dat.SetDateD(GetDateFromFuncRWScript(MonthE));
   int absm2=Dat.GetAbs();
   int day2 = Dat.GetDay();
   if ( absm1==INVALID_MONTH_VALUE || absm2==INVALID_MONTH_VALUE ) return;

   // если вдруг месяцы задали задом наперед
   if ( absm1>absm2 )
   {
      int tmp = absm2;
      absm2 = absm1;
      absm1 = tmp;
      tmp = day2;
      day2=day1;
      day1=tmp;
   }

   // запоминаем исходный месяц
   int mraschtmp = mrasch;

   // проходим по всем заданным месяцам
   for ( int absm=absm1; absm<=absm2; ++absm )
   {
      if ( mrasch!=absm )
         s50(absm);


      int FirstDay = (absm==absm1)?day1:1;
      int LastDay = (absm==absm2)?day2:countday;
      int dnned = dnedeli(data+FirstDay/100.);
      if ( dnned!=DayWeek ) // не угадали и 1-ое не нужный нам день
      {
         int Day = FirstDay+DayWeek-dnned;
         if ( Day<FirstDay ) Day += 7;
         FirstDay = Day;
      }
      bool bCalmChanged = false;
      for ( int day=FirstDay; day<=LastDay; day+=7 ) // смотрим только на пятницы
      {
         int idx = day-1;
         BufSimv[0] = calm[idx]; // символ табеля помещаем в строку
         // Если символ в табеле отсутствует, среди символов SimvChg, то надо
         // произвести замену
         if ( !IsSubStrPresent(SimvChg,BufSimv) )
         {
            calm[idx]=SimvForChange;
            bCalmChanged = true;
         }
      }

      // если табель изменяли - сохраняем
      if ( bCalmChanged )
         s145(s120(mrasch),1);
   }

   // возвращаемся к исходному месяцу
   if ( mrasch!=mraschtmp )
      s50(mraschtmp);

   return;
}

CountWorkDaysOtp(DateBegOtp,DateEndOtp)
// Подсчет рабочих дней приходящихся на отпуск
// DateBegOtp,DateEndOtp - дата в любом допустимом формате
{
   // Определяем месяц и день начала и месяц и день конца
   var Dat = CreateObject("KDate");
   Dat.SetDateD(GetDateFromFuncRWScript(DateBegOtp));
   int absm1=Dat.GetAbs();
   int day1 = Dat.GetDay();
   Dat.SetDateD(GetDateFromFuncRWScript(DateEndOtp));
   int absm2=Dat.GetAbs();
   int day2 = Dat.GetDay();
   if ( absm1==INVALID_MONTH_VALUE || absm2==INVALID_MONTH_VALUE ) return 0;

   char BufSimv[2];
   BufSimv[1]=0;
   
   // если вдруг месяцы задали задом наперед
   if ( absm1>absm2 )
   {
      int tmp = absm2;
      absm2 = absm1;
      absm1 = tmp;
      tmp = day2;
      day2=day1;
      day1=tmp;
   }

   // запоминаем исходный месяц
   int mraschtmp = mrasch;
   char SimvNorm[512];
   zamena_oboz("nr",SimvNorm);

   int CountWorkDays = 0;

   // проходим по всем заданным месяцам
   for ( int absm=absm1; absm<=absm2; ++absm )
   {
      if ( mrasch!=absm )
         s50(absm);


      int FirstDay = (absm==absm1)?day1:1;
      int LastDay = (absm==absm2)?day2:countday;
      for ( int day=FirstDay; day<=LastDay; ++day )
      {
         int idx = day-1;
         if ( calm[idx]=='O' || calm[idx]=='“' ) // если отпуск 
         {
            BufSimv[0]=calmras[idx]; // символ графика помещаем в строку
            if ( IsSubStrPresent(SimvNorm,BufSimv) )
              ++CountWorkDays;
         }
      }
   }

   // возвращаемся к исходному месяцу
   if ( mrasch!=mraschtmp )
      s50(mraschtmp);

   return CountWorkDays;
}