import "layer92.dll"


UserAlgorithmCalc(&info,&r)
{
   // инициализация локальных переменных
   int RetFlag       = code_Break,
       crow          = info.crow,
       b3            = info.b3,
       ikod          = info.ikod,
       kod_alg       = info.kod_alg,
       pos           = info.pos,
       mkat          = info.mkat,
       krabot        = info.krabot,
       tip_s9600     = info.tip_s9600,
       flag_propusk0 = info.flag_propusk0,
       z1            = info.z1,
       z2            = info.z2;

   double h[4];
   double kod        = info.kod,
          n1         = info.n1,
          d1         = info.d1,
          d2         = info.d2,
          bz         = info.bz;
          h[0]       = info.h[0],
          h[1]       = info.h[1],
          h[2]       = info.h[2],
          h[3]       = info.h[3];

   int rowkod[ROWMAX],i,m,m1,b1,b2,mvrem;
   char t[20],str[81],str1[81];
   double n2,n3,n4,n5,n6,n7,n8,n9,n10,r8,r9,k;

   /*-----------------------------------------------------*/
   /* tip_s9600=0 - функция обработки СУММЫ по строке     */
   /*               (s9600) - обнуляет РВ, если СУММА==0. */
   /* tip_s9600=1 - не обнуляет (в спец.случаях)          */
   /*-----------------------------------------------------*/

   /*-----------------------------------------------------*/
   /* Если flag_propusk0=1, то расчет данного вида по его */
   /* алгоритму производится только через режимы "Расчет  */
   /* произвольного вида", "Доп.расчеты" и при расчете от-*/
   /* дельной строки в "Просмотре, корректировке ЛС".     */
   /* flag_propusk0=3, то же, что =1, только в этом случае*/
   /* программа работает со строкой вида даже если у нее  */
   /* вышли даты действия (например, для квартал.дотаций).*/
   /* В остальных режимах - если есть СУММА, то подается  */
   /* на корректировку, иначе - вид пропускается в расчете*/
   /*-----------------------------------------------------*/

   int c=-4096;

   switch(kod_alg)
   {
      // Сюда можно вставлять вызов собственных алгоритмов расчета.
      // Примеры функций с алгоритмами  находятся
      // в файле SCRIPT\ALGSYS.S

      // начало описания алгоритмов пользователя
  /* процентная премия за месяц */
           /* при изменениях измените и в s100ras() */
  /*            s100("н",0,1,n1);
           if ( r[2]==0. && mrasch<=mtek ) r[2]=bz;
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=n1*r[2]/100.;
           break;
*/
case 536: /* Проверка тетрадей
     (БЕ(Базовая единица) /Норму дней )х Отраб время х Ставку х К.Образования *БЗ%.
      Доп. Рек : БЕ, Ставка, К.Образования*/
    return UserAlg536(info,r); 
case 537: /* Замена с 09.2016 год
     (БЕ х БК х Кр х КК)/СМ_Норму х Кол.Часов
      Доп. Рек : БЕ,БК,Кр,КК,СМ_Норма*/
    return UserAlg537(info,r); 

case 538: /* Коэф за интенсивность работы с 09.2017 год ДС Солнышко
   (БазОкл х К_квал)+(БазОкл х К_Спец)+(БазОкл х К_МасшУпр)+(БазОк хКУрУп)/Норм.час х Кол.Часов хБЗ%
      Доп. Рек : БЕ,К_Квал,К_Спец,К_МасУп,К_УрУпр*/
    return UserAlg538(info,r); 

case 136:   /* К-т реализации программ с высшим образованием */
           /* БЗ - тариф доплаты */
           r[2]=r[2]-h[2];  // учет для случая пересчета
           indstr(scr04,mrasch,windrow,r,t,1);
           r[2]=r[2]+h[2];  // учет для случая пересчета
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n3=n4=0.; /* 4.02.94 */
           s96(d1,d2,n5,1);
           if ( uprc!=NO_SCREEN )
              { flagrow[jf][2]=1;
                zaprosd(scr04,windrow+1,0,
                  "Отработанные дни ",7,r[2],n3,-500.,500.,0);
                zaprosd(scr04,windrow+2,0,
                  "Ставка ",7,0.,n4,-500.,500.,0);
              }
           //n6=1.5; /* процент доплаты тарифа за первые 2 часа */
           //n7=2 ; /* процент доплаты тарифа за след. часы */
           //n1 = n5 * ( n3*n6 + n4*n7 );
          // n1=n3*(bz/norm(1))*n4/100.;
           sumvid("*",129.,0,n5);
//         n1=((5955/norm(1)*n3)*n4)*bz/100.;//2011
//         n1=((6372/norm(1)*n3)*n4)*bz/100.;//С 01.01.2012
           n1=((6723/norm(1)*n3)*n4)*bz/100.;//c 01.01.2013
//   n1=(((4482*bz/100)/norm(1)*n3)*n4)*25/100.;//c 01.01.2013
           r[2]=bz;
           break;

case 165:   /* К-т реализации программ не с высшим образованием*/
           /* БЗ - тариф доплаты */
           r[2]=r[2]-h[2];  // учет для случая пересчета
           indstr(scr04,mrasch,windrow,r,t,1);
           r[2]=r[2]+h[2];  // учет для случая пересчета
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n3=n4=0.; /* 4.02.94 */
           s96(d1,d2,n5,1);
           if ( uprc!=NO_SCREEN )
              { flagrow[jf][2]=1;
                zaprosd(scr04,windrow+1,0,
                  "Отработанные дни ",7,r[2],n3,-500.,500.,0);
                zaprosd(scr04,windrow+2,0,
                  "Ставка ",7,0.,n4,-500.,500.,0);
              }
           //n6=1.5; /* процент доплаты тарифа за первые 2 часа */
           //n7=2 ; /* процент доплаты тарифа за след. часы */
           //n1 = n5 * ( n3*n6 + n4*n7 );
          // n1=n3*(bz/norm(1))*n4/100.;
           sumvid("*",129.,0,n5);
//         n1=((5955/norm(1)*n3)*n4)*bz/100.;//2011
//         n1=((6372/norm(1)*n3)*n4)*bz/100.;//С 01.01.2012
           n1=((6274.80/norm(1)*n3)*n4)*bz/100.;//c 01.01.2013
           r[2]=bz;
           break;

case 163:   /* К-т реализации программ не с высшим образованием*/
           /* БЗ - тариф доплаты */
           r[2]=r[2]-h[2];  // учет для случая пересчета
           indstr(scr04,mrasch,windrow,r,t,1);
           r[2]=r[2]+h[2];  // учет для случая пересчета
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n3=n4=0.; /* 4.02.94 */
           s96(d1,d2,n5,1);
           if ( uprc!=NO_SCREEN )
              { flagrow[jf][2]=1;
                zaprosd(scr04,windrow+1,0,
                  "Отработанные дни ",7,r[2],n3,-500.,500.,0);
                zaprosd(scr04,windrow+2,0,
                  "Ставка ",7,0.,n4,-500.,500.,0);
              }
           //n6=1.5; /* процент доплаты тарифа за первые 2 часа */
           //n7=2 ; /* процент доплаты тарифа за след. часы */
           //n1 = n5 * ( n3*n6 + n4*n7 );
          // n1=n3*(bz/norm(1))*n4/100.;
           sumvid("*",129.,0,n5);
//         n1=((5955/norm(1)*n3)*n4)*bz/100.;//2011
//         n1=((6372/norm(1)*n3)*n4)*bz/100.;//С 01.01.2012
           n1=((5826.6/norm(1)*n3)*n4)*bz/100.;//c 01.01.2013
           r[2]=bz;
           break;


case 155:   /* БК Гос */
         /* БЗ - пpоцент */
        r[2]=bz;
        if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
       sumvid("*",133.,0,n1);
          n1=n1*bz/100;
           break;

case 156:   /* СВТ Гос */
         /* БЗ - пpоцент */
        r[2]=bz;
        if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
       sumvid("*",133.,0,n1);
       sumvid("*",155.,0,n2);
       sumvid("*",126.,0,n3);
          n1=(n1+n2+n3)*bz/100;
           break;

case 157:   /* БК Сп */
         /* БЗ - пpоцент */
        r[2]=bz;
        if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
       sumvid("*",132.,0,n1);
      // sumvid("*",196.,0,n2);
          n1=n1*bz/100;
           break;

case 158:   /* ТК Раб */
         /* БЗ - пpоцент */
        r[2]=bz;
        if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
       sumvid("*",4.,0,n1);
          n1=n1*bz/100;
           break;

case 123:   /* кму */
         /* БЗ - пpоцент */
       r[2]=bz; 
       if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
       sumvid("*",122.,0,n1);
       sumvid("*",151.,0,n2);
        n1=(n1+n2)*bz/100;
          break;

case 129:   /* КК преподователа */
         /* БЗ - пpоцент */
       r[2]=bz; 
       if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
       sumvid("*",2.,0,n1);
       sumvid("*",154.,0,n2);
         n1=(n1+n2)*bz/100;
           break;

case 122:   /* оклад */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*bz/norm(1);
           /* bz - базовое значение по строке вида Н-У */
           break;

case 130:   /* Оплата за Завед.Кабинетом, за секцию */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=(r[2]*bz/norm(1))*0.10;
           /* bz - базовое значение по строке вида Н-У */
           break;

case 131:   /* Оплата за Завед.Кабинетом, за секцию */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=(r[2]*bz/norm(1))*0.05;
           /* bz - базовое значение по строке вида Н-У */
           break;


case 146:   /* Оплата за реализацию программ */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=(r[2]*bz/norm(1))*0.25;
           /* bz - базовое значение по строке вида Н-У */
           break;

case 137:   /* Оплата за Завед.Кабинетом, за секцию */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=(r[2]*bz/norm(1))*0.15;
           /* bz - базовое значение по строке вида Н-У */
           break;

case 17:/* ночные */
           m1=s98(0,n6);   
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           if (m1==1)
                 {s97(d1,d2,n5,k,1); /* дневные */
            /*      n1=n5*norm(1)/norm(2)*r[2]*40./100;  }*/
                  n1=n5*r[2];  }

             else 
                 {s96(d1,d2,n2,1);    /* часовые */
               /*  n1=n2*r[2]*bz/100; }*/
                 n1=n2*r[2]; }

           break;
case 133:/* праздничные (одинарные) */
           m1=s98(0,n6);
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           if (m1==1) 
              {s97(d1,d2,n5,k,1); /* дневные */
               n1=(n5*norm(1)/norm(2)*r[2])*bz/100.;}  
           else 
              {s96(d1,d2,n2,1);    /* часовые */
               n1=(n2*r[2])*bz/100.;}
           break;                   

case 111:   /* диффеpенциpованнаяя; РВ - в часах */
           /* БЗ - процент доплаты */
       sumvid ("*",4.,0,n9);
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) ;
           n1=n9*bz/100;
           break;
case 102:   /* замена; РВ - в часах */
           /* БЗ - процент доплаты */
       sumvid ("*",4.,0,n9);
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*n9/bz;
           break;

case 120:  /* проверка тетрадей*/
           /* при изменениях измените и в s100ras() */
            s97(d1,d2,n2,k,1); /* дневные */  
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
      //     flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n1=n2/18; /* тариф */
           r[2]=n3;
           n1=n1*n4*r[2]*bz/100;
           break;

case 721:   /* вpедность*/

            s97(d1,d2,n2,k,1); /* дневные */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
    //       if (mmimo==1) break;
    //       flagrow1[jf1]=crow;
               flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n1=n2/18; /* тариф */
           r[2]=n3;
           n1=n1*n4*r[2]*bz/100;
           break;

case 119:   /* классное руководство */
           /* БЗ - часы работы */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=norm(1)*0.20;
           break;

case 3:    /* сдельно */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if ( r[2]==0.)
              { if (nkalend==knorm)
                   /* если строка считается по основному графику ЛС */
                   skoljko(r[2],data,z1,z2,rsimv,calm,cht); }
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           break;

case 2:    /* оклад */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*bz/norm(1);
           /* bz - базовое значение по строке вида Н-У */
           break; 

case 18:    /* совмещение */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*bz/100;
           /* bz - разряд из Сетки окладов бюджетников,r[2]-процент от ставки */
           break;

case 5:    /* почасовая тарифная оплата, БЗ - тариф в коп. */
case 192:  /* почасовая тарифная оплата, БЗ - тариф в руб. */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              skoljko(r[2],data,z1,z2,rsimv,calm,cht);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           if (kod_alg==192)  n1=r[2]*bz;
           else  n1=r[2]*bz;
           break;

case 6:    /* часовая оплата по окладу */
           worktime(crow,b3,0);
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              skoljko(r[2],data,z1,z2,rsimv,calm,cht);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*bz;
           break;
case 9:    /* часовая оплата по окладу */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              skoljko(r[2],data,z1,z2,rsimv,calm,cht);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*bz/norm(2);
           break;


//case 12:   /* процентная премия за месяц */
 //             s100("н",0,1,n1);
 //          if ( r[2]==0. && mrasch<=mtek ) r[2]=bz;
  //         if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
  //         n1=n1*r[2]/100.;
  //         break;        

case 20:case 24:case 74:  /* проверка тетрадей*/
         /* при изменениях измените и в s100ras() */
            s97(d1,d2,n2,k,1); /* дневные */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
   //        flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n1=n2/18; /* тариф */
           r[2]=n3;
           n1=n1*n4*r[2]*bz/100;
           break;

case 49:  /* проверка тетрадей*/
         /* при изменениях измените и в s100ras() */
            s97(d1,d2,n2,k,1); /* дневные */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
    //       flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n1=n2/20; /* тариф */
           r[2]=n3;
           n1=n1*n4*r[2]*bz/100;
           break;

case 22:  /* проверка тетрадей*/
         /* при изменениях измените и в s100ras() */
            s97(d1,d2,n2,k,1); /* дневные */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
   //        flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n1=n2/20; /* тариф */
           r[2]=n3;
           n1=n1*n4*r[2]*bz/100;
           break;

case 29:   /* обучение на дому*/
         /* при изменениях измените и в s100ras() */
            s97(d1,d2,n2,k,1); /* дневные */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
    //       flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n1=n2/bz; /* тариф */
           r[2]=n3;
           n1=n1*n4*r[2]*0.20;
           break;

case 13:   /* премия суммой за месяц */
           if ( n1==0. && func[6] )  n1=bz;
           break;
case 59:   /* подписка метод лит за месяц */
           if ( n1==0. && func[6] )  n1=bz;
           break;
case 34:case 51:case 57:   /* оклад неделя 18 часов */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
//           flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n2=bz/(norm(1)*18); /* тариф */
           r[2]=n3;
           n1=n2*n4*r[2];
           break;
case 149:   /* оклад АКТИРОВАННЫЕ ДНИ 18 часов */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);                 
             /* учет для случая пересчета */        
//             if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;    
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
//           flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n2=bz/(norm(1)*18); /* тариф */
           r[2]=n3;
           n1=n2*n4*0.70*r[2];
           break;

case 30:   /* внеклассная работа */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);   
//           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
    //       if (mmimo==1) break;
     //      flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n2=bz/(norm(1)*18); /* тариф */
           r[2]=n3;
           n1=n2*n4*r[2];
           break;
case 75:   /* внеклассная работа */
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);   
//           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
      //     if (mmimo==1) break;
      //     flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n2=bz/(norm(1)*20); /* тариф */
           r[2]=n3;
           n1=n2*n4*r[2];
           break;
       
case 194:  /*замещение*/
           worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */
           if (nkalend==knorm)
              /* если строка считается по основному графику ЛС */
              r[2]=dney_v_tab(rsimv,calm,z1,z2);   
//           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           /* БЗ - тариф доплаты */            
                      indstr(scr04,mrasch,windrow,r,t,1);
//           if (mmimo==1) break;
     //      flagrow1[jf1]=crow;
           flagrow[jf][2]=1;
           ifraznicu(h);
           if ( uprc!=NO_SCREEN )
              { zaprosd(scr04,windrow+1,0,
                  "ОТРАБОТАННЫЕ ДНИ МЕСЯЦА",7,r[2],n3,-1500.,1500.,0);
                zaprosd(scr04,windrow+2,0,
                  "ОТРАБОТАННЫЕ ЧАСЫ НЕДЕЛИ",7,0.,n4,-500.,500.,0);
              }
           ubrraznicu(h);
           n2=bz/72; /* тариф */
           r[2]=n3;
           n1=n2*n4;
           break;
         
case 14:   /* -- д о п л а т а  за сверхур. */
           /* БЗ - тариф доплаты */
           r[2]=r[2]-h[2];  // учет для случая пересчета
           indstr(scr04,mrasch,windrow,r,t,1);
           r[2]=r[2]+h[2];  // учет для случая пересчета
           n3=n4=0.; /* 4.02.94 */
           if ( uprc!=NO_SCREEN )
              { flagrow[jf][2]=1;
                zaprosd(scr04,windrow+1,0,
                  "Сверхурочное РВ за первые 2 часа",7,r[2],n3,-500.,500.,0);
                zaprosd(scr04,windrow+2,0,
                  "Сверхурочное РВ за следующие часы",7,0.,n4,-500.,500.,0);
              }
           n5=bz; /* тариф */
           n6=0.5; /* процент доплаты тарифа за первые 2 часа */
           n7=1. ; /* процент доплаты тарифа за след. часы */
           n1 = n5 * ( n3*n6 + n4*n7 )/100.;
           r[2]=n3+n4;
           break;

case 19:   /* классное руководство */
           /* БЗ - часы работы */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=bz/norm(1)*r[2]*0.20;
           break;
case 23:   /* классное руководство */
           /* БЗ - часы работы */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=bz/norm(1)*r[2]*0.1;
           break;
case 11:   /* классное руководство */
           /* БЗ - часы работы */
            s97(d1,d2,n2,k,1); /* дневные */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=(n2*r[2])*bz/100;
           break;
case 72:   /* ПЕРЕВОД Ч/З ДОРОГУ */
           /* БЗ - ОКЛАД */
            s97(d1,d2,n2,k,1); /* дневные */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=n2*r[2]*0.15;
           break;
case 37:   /* пpовеpка тетpадей нач классов */
           /* БЗ - часы работы */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=bz/norm(1)*r[2]*0.10;
           break;
case 25:case 26:   /* качественное обучение */
case 32:case 31: case 28: case 33:         /* БЗ - %доплаты */
           s97(d1,d2,n2,k,1); /* дневные */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=n2*r[2]*bz/100;
           break;
case 27:   /* 2-х сменная */
         /* БЗ - оклад */
           r[2]=r[2]+h[2];  /* учет для случая пересчета */
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=bz/norm(1)*r[2]*0.20;
           break;
case 35:  /* учебные дни, БЗ-процент от ставочной оплаты дня */
          s97(data+.01,data+countday/100.,n2,k,1);
          if (nkalend==knorm)
             /* если строка считается по основному графику ЛС */
             r[2]=dney_v_tab("У",calm,z1,z2);
          if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
          n1=r[2]*n2*bz/100.;
          break;


case 178:  // Выслуга лет
        {  int mec,I;
           char Str_Work[11];
           kch_from("datavys",Str_Work);
           mec=Transl_Date_To_Abs(Str_Work);
           for ( I=1000;I>=0; I-- )
           {
               if ( mrasch-mec>=I &&  Value_For_Table_Cod(78,I,data,n3)!=EOF )
                  break;
           }
           s98(0,n6);
           r[2]=n6*norm(1);
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           s97(d1,d2,n2,n5,1);  /* дневная ставка */
           n1=r[2]*n3*n2/100.;
           break;
        }


case 185:  /* питание */
           n3=dney_v_tab("НПС",calm,z1,z2);
           r[2]=norm(1)-n3;
           if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break;
           n1=r[2]*bz/norm(1);
           break;

case 215: /* СУММА=БЗ */
          if (n1==0.) n1=bz;
          break;

case 225:  /* профс.взносы */
           s1001("н",d1,d2,0,ST_PROFS,r9,2);  // 08.11.95
           n1=r9*0.01;
           break;

      // конец описания алгоритмов пользователя

      // Пример вызова алгоритма пользователя.
      //case 4:
      //   return UserAlg4(info,r);

      // case 712:
      //   return UserAlg712(info,r);

      default:
         RetFlag=0;
         break;
   }

   if ( RetFlag )
   {
      info.crow            = crow,
      info.b3              = b3,
      info.kod             = kod,
      info.ikod            = ikod,
      info.kod_alg         = kod_alg,
      info.n1              = n1,
      info.d1              = d1,
      info.d2              = d2,
      info.pos             = pos,
      info.mkat            = mkat,
      info.krabot          = krabot,
      info.tip_s9600       = tip_s9600,
      info.flag_propusk0   = flag_propusk0,
      info.z1              = z1,
      info.z2              = z2,
      info.h[0]            = h[0],
      info.h[1]            = h[1],
      info.h[2]            = h[2],
      info.h[3]            = h[3],
      info.bz              = bz;

      if (c<=-4096) c=1;
      info.c               = c;
   }
   return RetFlag;
}

UserAlg4(&info,&r)
{
  return SysAlg4(info,r);
}

UserAlg536(&info,&r)
{
  double code=GetCode(info.crow); //точный внутренний код рассчитываемой строки
  //получаем данные из доп. реквизитов строки
  infolist.add_record("Доп.реквизиты:","-------------------------------");
  char DopRkv[256], comm[256];
  Rkv_from(code,"be",comm,DopRkv);
  double be=atof(DopRkv);
  infolist.add_record("БазЕд",be);
 
  Rkv_from(code,"stavka",comm,DopRkv);
  double stavka=atof(DopRkv);
  if (stavka<0.00001) stavka=1.; //если ставка равна 1 - можно не запольнять соответствующий доп. реквизит
  infolist.add_record("Ставка",stavka);
 
  Rkv_from(code,"koefObr",comm,DopRkv);
  double koefObr=atof(DopRkv);
  infolist.add_record("КоэфОбраз",koefObr);
  
  worktime(info.crow,info.b3,0);
  if(nkalend == knorm) //* если строка считается по основному графику ЛС
    r[2]=dney_v_tab(rsimv,calm,info.z1,info.z2);
    
  char t[20];
  if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
    return code_ReturnCode;
  infolist.add_record("РВ",r[2]);
  infolist.add_record("НРВ",norm(1));
  infolist.add_record("Процент",info.bz);

  info.n1=(be/norm(1))*r[2]*stavka*koefObr*info.bz/100.;

  infolist.add_record("результат",info.n1);
  
  return code_Break;

}

UserAlg537(&info,&r)
{
  double code=GetCode(info.crow); //точный внутренний код рассчитываемой строки
  //получаем данные из доп. реквизитов строки
  infolist.add_record("Доп.реквизиты:","-------------------------------");
  char DopRkv[256], comm[256];
  Rkv_from(code,"be",comm,DopRkv);
  double be=atof(DopRkv);
  infolist.add_record("БазЕд",be);
 
  Rkv_from(code,"Kob",comm,DopRkv);
  double Kob=atof(DopRkv);
  infolist.add_record("КоэфОбраз",Kob);

  Rkv_from(code,"Krl",comm,DopRkv);
  double Krl=atof(DopRkv);
  infolist.add_record("К_Реал",Krl);
 
  Rkv_from(code,"Kkv",comm,DopRkv);
  double Kkv=atof(DopRkv);
  infolist.add_record("К_Квал",Kkv);

  Rkv_from(code,"Smn",comm,DopRkv);
  double Smn=atof(DopRkv);
  infolist.add_record("СМ_Норма",Smn);

  
 // worktime(info.crow,info.b3,0);
 // if(nkalend == knorm) //* если строка считается по основному графику ЛС
 //   r[2]=dney_v_tab(rsimv,calm,info.z1,info.z2);

    r[2]=r[2];  // учет для случая пересчета

  char t[20];
  if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
    return code_ReturnCode;
  infolist.add_record("РВ",r[2]);
 // infolist.add_record("НРВ",norm(1));
  infolist.add_record("Процент",info.bz);
 double n2;
 double n3;
 double n4;

  n2=be*Kob;
  n3=n2*Krl;
  n4=n2*Kkv;
  info.n1=(n2+n3+n4)/Smn*r[2];

  infolist.add_record("результат",info.n1);
  
  return code_Break;

}
UserAlg538(&info,&r)
{
  double code=GetCode(info.crow); //точный внутренний код рассчитываемой строки
  //получаем данные из доп. реквизитов строки
  infolist.add_record("Доп.реквизиты:","-------------------------------");
  char DopRkv[256], comm[256];
  Rkv_from(code,"be",comm,DopRkv);
  double be=atof(DopRkv);
  infolist.add_record("БазЕд",be);
 
  Rkv_from(code,"Kkv",comm,DopRkv);
  double Kkv=atof(DopRkv);
  infolist.add_record("К_квал",Kkv);

  Rkv_from(code,"Kspec",comm,DopRkv);
  double Kspec=atof(DopRkv);
  infolist.add_record("К_Спец",Kspec);
 
  Rkv_from(code,"Kmup",comm,DopRkv);
  double Kmup=atof(DopRkv);
  infolist.add_record("К_МасУп",Kmup);

  Rkv_from(code,"Kuup",comm,DopRkv);
  double Kuup=atof(DopRkv);
  infolist.add_record("К_УрУп",Kuup);

  
  worktime(info.crow,info.b3,0);
  if(nkalend == knorm) //* если строка считается по основному графику ЛС
   r[2]=dney_v_tab(rsimv,calm,info.z1,info.z2);

    r[2]=r[2];  // учет для случая пересчета

  char t[20];
  if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
    return code_ReturnCode;
  infolist.add_record("РВ",r[2]);
  infolist.add_record("НРВ",norm(1));
  infolist.add_record("Процент",info.bz);

 double n2;
 double n3;
 double n4;
 double n5;

  n2=be*Kkv;
  n3=be*Kspec;
  n4=be*Kmup;
  n5=be*Kuup;
  info.n1=(be+n2+n3+n4+n5)/norm(1)*r[2]*info.bz/100.;


  infolist.add_record("результат",info.n1);
  
  return code_Break;

}

UserAlg539(&info,&r)
{
  double code=GetCode(info.crow); //точный внутренний код рассчитываемой строки
  //получаем данные из доп. реквизитов строки
  infolist.add_record("Доп.реквизиты:","-------------------------------");
  char DopRkv[256], comm[256];
  Rkv_from(code,"be",comm,DopRkv);
  double be=atof(DopRkv);
  infolist.add_record("БазЕд",be);
 
  Rkv_from(code,"Kkv",comm,DopRkv);
  double Kkv=atof(DopRkv);
  infolist.add_record("К_квал",Kkv);

  Rkv_from(code,"Kspec",comm,DopRkv);
  double Kspec=atof(DopRkv);
  infolist.add_record("К_Спец",Kspec);
 
  Rkv_from(code,"Kmup",comm,DopRkv);
  double Kmup=atof(DopRkv);
  infolist.add_record("К_МасУп",Kmup);

  Rkv_from(code,"Kuup",comm,DopRkv);
  double Kuup=atof(DopRkv);
  infolist.add_record("К_УрУп",Kuup);

  
  worktime(info.crow,info.b3,0);
  if(nkalend == knorm) //* если строка считается по основному графику ЛС
 //  r[2]=dney_v_tab(rsimv,calm,info.z1,info.z2);
skoljko(r[2],data,info.z1,info.z2,rsimv,calm,cht);

 //   r[2]=r[2];  // учет для случая пересчета

  char t[20];
  if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
    return code_ReturnCode;
  infolist.add_record("РВ",r[2]);
  infolist.add_record("НРВ",norm(2));
  infolist.add_record("Процент",info.bz);

 double n2;
 double n3;
 double n4;
 double n5;

  n2=be*Kkv;
  n3=be*Kspec;
  n4=be*Kmup;
  n5=be*Kuup;
  info.n1=(be+n2+n3+n4+n5)/norm(2)*r[2]*info.bz/100.;


  infolist.add_record("результат",info.n1);
  
  return code_Break;

}




UserAlg712(&info,&r)
{
   struct Struct_Alg Work;
   var mes1=0;
   var mes2=0;
   var stolbec=ST_MPREM+1;

   // символы для выборки
   // по умолчанию - по всем ненулевым
   char StrSimv[51];
   sprintf(StrSimv,"*");
   Get_AlgWithParam(Work,info.ikod);   // 31.01.1995
   // Work.Count_Par - число паpаметpов для кода алгоpитма
   //-- параметр 1 - столбец таблицы входимости
   if(Work.Count_Par > 0)
   {
      var i=atoi(reinterpret_cast_to_string(Work.List_Par[0]));
      if( i > 0 && i <= 99 ) stolbec=i;
   }

   //-- параметр 2 - месяц начала выборки (относительно расчетного)
   //   (по умолчанию берется за один текущий месяц)
   if(Work.Count_Par > 1)
   {
      var i=atoi(reinterpret_cast_to_string(Work.List_Par[1]));
      if( i >= (- PMES) && i <= BMES )  mes1=mes2=i;
   }

   //-- параметр 3 - месяц конца выборки (относительно расчетного)
   //   (по умолчанию берется за один месяц, указанный параметром 2)
   if(Work.Count_Par > 2)
   {
      var i=atoi(reinterpret_cast_to_string(Work.List_Par[2]));
      if( i >= mes1 && i <= BMES ) mes2=i;
   }

   //-- параметр 4 - символы выборки
   if(Work.Count_Par > 3)
      sprintf(StrSimv,"%.50s",reinterpret_cast_to_string(Work.List_Par[3]));

   var   n5=0.;
   for(var m=mes1; m<=mes2; m++)
   {
      double r9;
      s1001simv(StrSimv,"*",info.d1,info.d2,m,stolbec-1,r9,4,0);
      n5+=r9;
   }


   // Заполним таблицу уже найденными значениями
   if(FL_V_ALG && uprc != NO_SCREEN)
   {
      infolist.add_record("Месяц начала выборки",mes1);
      infolist.add_record("Месяц окончания выборки",mes2);
      infolist.add_record("Столбец выборки",stolbec);
      infolist.add_record("Символы выборки",StrSimv);
      infolist.add_record("Сумма выборки",n5);
   }

   // А теперь пройдемся по полю кадровой части "procPREM"
   // И возьмем оттуда все значения процентов, действовавшие
   // в рассчитываемом месяце
   info.n1=0.;  // обнулили итоговую сумму

   // Дата конца действия очередного значения процента
   // В самом начале она равна последнему дню месяца.
   var DateEnd = CreateObject("KDate");
   DateEnd.SetDateII(countday,mrasch);

   // Найдем дату начала действия очередного значения процента
   char StrD[21];
   GetKchDate("procPREM",StrD,10,DateEnd);
   var Date=CreateObject("KDate");
   Date.SetDate(static_cast_to_string(StrD));
   // Если вдруг дата начала пустая или выходит за рамки расчетного
   // месяца, то установим ее равной первому числу расчетного месяца
   if ( Date.IsEqI(INVALID_DATE_VALUE) || Date.GetAbs()<mrasch )
   {
      Date.SetDateII(1,mrasch);
      sprintf(StrD,"%02d.%02d.%4d",Date.GetDay(),Date.GetMonth(),Date.GetYear());
   }

   // Ну и просматриваем все значения процентов, действовавшие в
   // рассматриваемом месяце
   char StrProc[21];
   while ( 1 )
   {
      // находим очередное значение процента
      double Proc=atof(GetKchValue("procPREM",StrProc,20,DateEnd));

      // определяем коэффициент неполноты для очередного значения процента
      // (неполнота по нормативным дням)
      double KoefNepoln = 1.;
      nepoln(Date.GetDouble(),DateEnd.GetDouble(),info.d1,info.d2,KoefNepoln,2);

      // записываем, если надо, в таблицу найденные значения
      if(FL_V_ALG && uprc != NO_SCREEN)
      {
         infolist.add_record("------------------------","---------------------");
         infolist.add_record("Начало действия процента",StrD);
         sprintf(StrD,"%02d.%02d.%4d",DateEnd.GetDay(),DateEnd.GetMonth(),DateEnd.GetYear());
         infolist.add_record("Конец  действия процента",StrD);
         infolist.add_record("Коэффициент",KoefNepoln);
         infolist.add_record("Процент",Proc);
      }

      // Увеличиваем итоговую сумму на очередную порцию премии
      info.n1 += n5*Proc*KoefNepoln/100.;

      // Устанавливаем дату конца очередного значения процента
      // равной дате начала уже рассмотренного значения минус один день.
      DateEnd.SetDateD(Date.GetDouble());
      DateEnd.Dec();

      // Если дата конца вышла за пределы расчетного месяца - выходим
      if ( DateEnd.IsEqI(INVALID_DATE_VALUE) || DateEnd.GetAbs()<mrasch )
         break;

      // Находим дату начала для очередного значения премии
      GetKchDateP("procPREM",StrD,10,Date);
      Date.SetDate(static_cast_to_string(StrD));
      // Если вдруг дата начала пустая или выходит за рамки расчетного
      // месяца, то установим ее равной первому числу расчетного месяца
      if ( Date.IsEqI(INVALID_DATE_VALUE) || Date.GetAbs()<mrasch )
      {
         Date.SetDateII(1,mrasch);
         sprintf(StrD,"%02d.%02d.%4d",Date.GetDay(),Date.GetMonth(),Date.GetYear());
      }
   }

   // выводим в таблицу окончаительный результат
   if(FL_V_ALG && uprc != NO_SCREEN)
   {
      infolist.add_record("------------------------","---------------------");
      infolist.add_record("Результат",info.n1);
   }
   return code_MDefault;
}
