//-------------------------------------------------------
&PrintAllTabl(N,2,0) = 0;   // печать всей первой таблицы или только итоговой строки
&PrintExcel(N,2,0) = 0;   // 1 - печать формы в Excel, 0 - текстовая
#ЧЗАП(N,5,0)=ЧИСЛО_ЗАПИСЕЙ(0);        // Число рабочих записей в таблице
$ЕСЛИ(_EQ(ЧЗАП))
  $ВЫХОД
$КОНЕЦ_ЕСЛИ
$BEG_SCRIPT
   PrintExcel = GetCommonCnfInt("EXCEL_BL","блист");  
   if ( PrintExcel )
   {
      UnloadScriptModule("forms\\formbl");
      LoadScriptModule("forms\\formbl");
      PrintFormBL(DATBEG,SERBL,NUMBL,TIPRASSR,DATBRRULE);
      UnloadScriptModule("forms\\formbl");
   }
$END_SCRIPT
$ЕСЛИ(_EQ(PrintExcel-1))
  $ВЫХОД
$КОНЕЦ_ЕСЛИ
${ЗОНА(5. Разделитель строк списка)
  $УСТАН(ЧИСЛО_РАЗД_СТР,0);  // 0 (1,...) - количество пропусков строк
  $УСТАН(РАЗД_СТР,"-");      // символ для отчерков: "-" (или др.символ)
$}ЗОНА(5. Разделитель строк списка)
${ЗОНА(6. Разделитель столбцов списка)
  $УСТАН(ЧИСЛО_РАЗД_СТЛ,1); // 1,2,...-число символов для разделения колонок
  $УСТАН(РАЗД_СТЛ,"|");     // символы-разделители колонок (| или || и т.п.)
$}ЗОНА(6. Разделитель столбцов списка)
${ЗОНА(7. Признак печати нуля)
  $УСТАН(НУЛЬ_СУММ," "); // " " (пробел) - не печатать нули, "0" - печатать
$}ЗОНА(7. Признак печати нуля)
${ЗОНА(1. Заголовок списка)
// Вводите под этим комментарием необходимый текст ЗАГОЛОВКА списка
#TN(N,6,0)=R_Face(tn);
#PD(N,6,0)=R_Face(podr);
#FIO(C,40,0)=R_Name(1);
#inn(C,14,0)=R_Face(inn_fl);
#dolgn(C,35,0)=R_Face(dolgnost,DATBEG);
#snils(C,14,0)=R_Face(strah_n);
&TypeBl(N, 6, 0)=0; 
$BEG_SCRIPT
   PrintAllTabl= GetCommonCnfInt("TYP_PR_BL","блист");   // печать всей первой таблицы или только итоговой строки
   UnloadScriptModule("forms\\blreestr_2");
   UnloadScriptModule("forms\\formbl");
   LoadScriptModule("forms\\blreestr_2");
   LoadScriptModule("forms\\formbl");
   char Buf[512];
   print("             Справка о заработной плате для расчета пособия");
   print("                    по временной нетрудоспособности");
   print("");
   sprintf(Buf,"Подpазделение:   %6.6s        Должность: %35.35s",PD,dolgn);
   print(Buf);
   sprintf(Buf,"Табельный номер: %6.6s        ИНН: %14.14s",TN,inn);
   print(Buf);
   // sprintf(Buf,"Серия б/л: %10.10s          Номер б/л: %10.10s",SERBL,NUMBL);
   char StrSer[81]; 
   if ( Str_Cmp(SERBL," ", " ") )
      sprintf(StrSer,"Серия б/л: %10.10s          ",SERBL);
   else
      StrSer[0]=0; 
   sprintf(Buf,"%sНомер б/л: %12.12s",StrSer,NUMBL);
   print(Buf);
   sprintf(Buf,"СНИЛС: %14.14s",snils);
   print(Buf);
   print("");

   int year,month,day;
   TypeBl = atoi(GetInfoBL(DATBEG,"ВИДБЛ"));

   // Массив для сохранения строк печати
   string BufPrint[20]; for(int i=0; i<20; ++i) BufPrint[i] = "";
   int ChStr = 0;
   // Заголовок для "Назначение пособия"
   CreateZglNazPos(DATBEG,FIO,DATBRRULE,TypeBl,year,month,day,BufPrint,ChStr);
   for(int i=0; i<ChStr; ++i) print(BufPrint[i]);
      
   var rez = GetStrYMD(year,month,day);
   sprintf(Buf,"Продолжительность страхового стажа %d %s %d %s %d %s",year,rez[0],month,rez[1],day,rez[2]);
   print(Buf);
   print("");
   print("Сведения о заработной плате");
   UnloadScriptModule("forms\\blreestr_2");
   UnloadScriptModule("forms\\formbl");

   var CTabl = CreateObject("CurPrnTbl"); 
   int FldDbl = CTabl.Find_Name_Fld("SUMM_SR_DB"); 
   if ( FldDbl>=0 && atof(CTabl.Text(FldDbl,CTabl.Count_Rcr()-1))<0. )
      CTabl.SText(FldDbl,CTabl.Count_Rcr()-1," "); 
$END_SCRIPT
// Месячный оклад @OKLAD        руб.  Тарифная ставка @STVK          руб.
$ЕСЛИ(_NE(TIPRASSR-3))
&PrintAllTabl=1;
  Во всех случаях в сумму фактического заработка не включается плата
за сверхурочные работы, за совместительство и единовременные выплаты
$КОНЕЦ_ЕСЛИ
$}ЗОНА(1. Заголовок списка)
&ЗАП(N,5,0)=0;
// $ЕСЛИ(_EQ(PrintAllTabl)) 
// "старый" вариант сокращенной таблицы, когда печаталась только строка итогов, при
// этом не печатался диапазон месяцев
//   &ЗАП=ЧЗАП-1;
// $КОНЕЦ_ЕСЛИ
/////////////////////////////////
//Печать сумм с др. места работы
/////////////////////////////////
$BEG_SCRIPT
  var Tabl = CreateObject("CurPrnTbl");
  var MonthBeg = CreateObject("KDate");
  var MonthEnd = CreateObject("KDate");
  MonthBeg.SetDate("01."+Tabl.Text(0,0));
  int EndRcr=Tabl.Count_Rcr()-2;
  if ( EndRcr<0 ) EndRcr=0;
  MonthEnd.SetDate("01."+Tabl.Text(0,EndRcr));
  MonthEnd.SetDateII(MonthEnd.CountDay(),MonthEnd.GetAbs());
  int FirstYear = MonthBeg.GetYear();
  int LastYear = MonthEnd.GetYear(); 
  char Buf[512];
  double eps = 0.001;
  var AllSprOtherWork = CreateObject("KOtherEnterprisesCollectionReferences");
  AllSprOtherWork.LoadFromLS();
  if ( AllSprOtherWork.Size() )
  {
     int PrZgl = 0; //Печать Заголовка
     for ( int i=FirstYear; i<=LastYear; ++i ) 
     {
       // "Сводная" информация с других мест работы для 1-ого года
        var InfOtherWork = AllSprOtherWork.CollectInfoBLByYear(static_cast_to_int(i));
        double SummaOW = InfOtherWork.Summa(); //сумма дополнительно учитываемая при расчете среднего
        int ExcDays    = InfOtherWork.ExcludeDays(); //количество исключаемых дней для этого года

        // Если есть суммы с др мест работы 
        if ( nabs(SummaOW)>eps )
        {
           if ( !PrZgl )
           {
              if ( TypeBl==1 )
              {
print("1. Заработок за расчетные года с других мест работы");
print("------------------------------------------------------------------");
print("  Год  |  Сумма фактич.  | Число исключ.|   Страхователь         |");
print("       |    заработка    |    дней      |                        |");
print("------------------------------------------------------------------");
              }
              else
              {
print("1. Заработок за расчетные года с других мест работы");
print("------------------------------------------------------------------");
print("  Год  |  Сумма фактич.заработка   |        Страхователь         |");
print("------------------------------------------------------------------");
              }
              PrZgl = 1;
           }
           if ( TypeBl==1 )
           {
sprintf(Buf, " %6d| %16.2f| %12d |Предыдущий страхователь |",i,SummaOW,ExcDays); print(Buf);
           }
           else
           {
sprintf(Buf, " %6d| %26.2f| Предыдущий страхователь     |",i,SummaOW); print(Buf);
           }
        }
     }
     if ( PrZgl )
     {
print("------------------------------------------------------------------");
print("2. Расчет среднего заработка");
     }
  }
$END_SCRIPT
/////////////////////////////////
//Печать развернутой таблицы
/////////////////////////////////
$ЕСЛИ(PrintAllTabl)  // полная таблица
&ЛИСТ(N,5,0)=1;                                 // Счетчик страниц
#РАЗЛ(N,3,0)=РАЗМ_ЛИСТА();                      // Размер страницы
//${ЗОНА(Шапка табицы)
  #КОДВ=ПЕЧ_ТАБЛ(ЛИНИЯ,ЗАГОЛОВОК,ЛИНИЯ)             // Печать заголовка
  #КОДВ=ПЕЧ_ТАБЛ(СБРОС_СУММ_ЛИСТА);                 // Сброс сумм по листу
//$}ЗОНА(Шапка табицы)
$ПОВТОРЯТЬ                                             // Цикл  по записям таблицы
  //${ЗОНА(Строка ведомости)
    #КОДВ=ПРИЗН_УЧАСТ(ЗАП);                         // Признак печати записи
    $ЕСЛИ(КОДВ)
      #КОДВ=ПЕЧ_ТАБЛ(РАЗДЕЛИТЕЛЬ_СТРОК,СТРОКА,ЗАП)  // Печать одной строки таблицы
    $КОНЕЦ_ЕСЛИ
  //$}ЗОНА(Строка ведомости)
  &ЗАП=ЗАП+1;
  #СЧСТР(N,5,0)=СЧЕТЧИК_СТРОК();                 // Счетчик строк на листе
  $ЕСЛИ(_GE(СЧСТР+6-РАЗЛ)+_EQ(ЗАП-ЧЗАП))
    //${ЗОНА(Итог листа)
      #КОДВ=ПЕЧ_ТАБЛ(ЛИНИЯ);                       // Печать итога по листу.
      #КОДВ=ПЕЧ_ТАБЛ(СБРОС_СУММ_ЛИСТА);            // Сброс итога по листу.
    //$}ЗОНА(Итог листа)
    ${ЗОНА(3. Подножие листа)
// Вводите под этим комментарием необходимый текст для подножия листа
    $}ЗОНА(3. Подножие листа)
    $ЕСЛИ(_LT(ЗАП-ЧЗАП))
      $ПЕРЕВОД_ЛИСТА
      ${ЗОНА(2. Заголовок листа)
// Вводите под этим комментарием необходимый текст заголовка листа

      $}ЗОНА(2. Заголовок листа)
      //${ЗОНА(Шапка табицы). НАЧАЛО ЗАГОЛОВКА ЛИСТА.
        #КОДВ=ПЕЧ_ТАБЛ(ЛИНИЯ,ЗАГОЛОВОК,ЛИНИЯ)             // Печать заголовка
        #КОДВ=ПЕЧ_ТАБЛ(СБРОС_СУММ_ЛИСТА);                 // Сброс сумм
      //$}ЗОНА(Шапка табицы). КОНЕЦ ЗАГОЛОВКА ЛИСТА.
    $КОНЕЦ_ЕСЛИ
  $КОНЕЦ_ЕСЛИ
$ПОКА(_GT(ЧЗАП-ЗАП))
$КОНЕЦ_ЕСЛИ
/////////////////////////////////
//Cокращенный вариант таблицы
/////////////////////////////////
$ЕСЛИ(_EQ(PrintAllTabl)+_EQ(PrintAllTabl-2)) // сокращенный вариант таблицы
$BEG_SCRIPT
  if ( atoi(PrintAllTabl)==2 )
    print("");
  var Tabl = CreateObject("CurPrnTbl");
  var MonthBeg = CreateObject("KDate");
  var MonthEnd = CreateObject("KDate");
  MonthBeg.SetDate("01."+Tabl.Text(0,0));
  int EndRcr=Tabl.Count_Rcr()-2;
  if ( EndRcr<0 ) EndRcr=0;
  MonthEnd.SetDate("01."+Tabl.Text(0,EndRcr));
  MonthEnd.SetDateII(MonthEnd.CountDay(),MonthEnd.GetAbs());
  char NameMB[31], NameME[31];
  R_DATA_EX("11,"+MonthBeg.GetStr(),NameMB,30,0);
  R_DATA_EX("11,"+MonthEnd.GetStr(),NameME,30,0);
  FreeSpaceString(NameMB,2,"");
  FreeSpaceString(NameME,2,"");
  char Buf[512];
  if ( TypeBl==1 )
  {
print("---------------------------------------------------------------------------");
print("   Расчетный период     |Число   |Число   |Сумма фактич.  |   Средний     |");
print(" для исчисления пособия |календ. |исключ. |заработка за   |   дневной     |");
print("                        | дней   |дней    |расчетный пер. |   заработок   |");
print("---------------------------------------------------------------------------");
  }
  else
  {
print("------------------------------------------------------------------");
print("   Расчетный период     |Число   |Сумма фактич.  |   Средний     |");
print(" для исчисления пособия |календ. |заработка за   |   дневной     |");
print("                        | дней   |расчетный пер. |   заработок   |");
print("------------------------------------------------------------------");
  }
  int ItogRcr = Tabl.Count_Rcr()-1;
  int FirstYear = MonthBeg.GetYear();
  int LastYear = MonthEnd.GetYear(); 
  double SumFirst=0., SumLast = 0.; 
  double RvFirst=0. ,  RvLast=0. ; 
  double RvMinusFirst=0. , RvMinusLast=0. ; 
  int FldMinus = Tabl.Find_Name_Fld("MINUS_DNI"); 
  double SumSredn = atof(Tabl.Text(3,ItogRcr));
  var Month = CreateObject("KMonth"); 
  for ( int Rcr=0;  Rcr<ItogRcr; ++Rcr )
  {
     Month.SetDate(static_cast_to_string(Tabl.Text(0,Rcr)));
     double Sum = atof(Tabl.Text(2,Rcr)); 
     double Rv = atof(Tabl.Text(1,Rcr)); 
     double RvMinus = FldMinus==-1? 0. : atof(Tabl.Text(FldMinus,Rcr));  
     if ( Month.GetYear()==FirstYear ) SumFirst+=Sum, RvFirst+=Rv, RvMinusFirst+= RvMinus; 
     else SumLast += Sum, RvLast+=Rv, RvMinusLast += RvMinus; 
  }
  bool bYear = LastYear-FirstYear>1; 
  char BufPeriod[81]; 
  if ( bYear )
     sprintf(BufPeriod, " %s - 31.12.%04d и",MonthBeg.GetStr(), MonthBeg.GetYear()); 
  else
     sprintf(BufPeriod, "c  %02d %-8.8s %4d года", MonthBeg.GetDay(), NameMB, MonthBeg.GetYear()); 
  // sprintf(Buf, "%-24.24s|        |               |          |               |",BufPeriod);

  if ( TypeBl==1 )
     sprintf(Buf, "%-24.24s| %7.2f| %7.2f|  %12.2f |  %12.12s |", BufPeriod,RvFirst,RvMinusFirst/*atof(Tabl.Text(1,ItogRcr))*/,SumFirst,
          ""/*SumSredn*/);
  else
     sprintf(Buf, "%-24.24s| %7.2f|  %12.2f |  %12.12s |", BufPeriod,RvFirst/*atof(Tabl.Text(1,ItogRcr))*/,SumFirst,
          ""/*SumSredn*/);
  print(Buf);
  // double stvk = atof(OKLAD);
  // if ( !stvk ) stvk = atof(STVK);
  if ( bYear )
     sprintf(BufPeriod, " 01.01.%04d - %s ", MonthEnd.GetYear(),MonthEnd.GetStr()); 
  else
     sprintf(BufPeriod, "по %02d %-8.8s %4d года",MonthEnd.GetDay(),NameME,MonthEnd.GetYear()); 

  // sprintf(Buf, "%-24.24s| %7.2f|  %12.2f |  %12.3f |", BufPeriod,atof(Tabl.Text(1,ItogRcr)),atof(Tabl.Text(2,ItogRcr)),
  //         atof(Tabl.Text(3,ItogRcr)));
  if ( TypeBl==1 )
     sprintf(Buf, "%-24.24s| %7.2f| %7.2f|  %12.2f |  %12.12s |", BufPeriod,RvLast,RvMinusLast,SumLast,"");
  else
     sprintf(Buf, "%-24.24s| %7.2f|  %12.2f |  %12.12s |", BufPeriod,RvLast,SumLast,"");
  print(Buf);
   int Accuracy = 3; 
   if (  IsCommonCnfExist("ACC_SR","блист") ) 
	{
      char Tmp[256]; 
		Accuracy = atoi(GetCommonDateCnf("ACC_SR","блист",DATBEG,Tmp,255));
		if ( Accuracy>5 || Accuracy<0 )  Accuracy=3;
	}
  if ( TypeBl==1 )
  {
print("---------------------------------------------------------------------------");
sprintf(Buf, "%-24.24s| %7.2f| %7.2f|  %12.2f |  %12.*f |", "Итого",RvFirst+RvLast,RvMinusFirst+RvMinusLast,SumFirst+SumLast,Accuracy,SumSredn);print(Buf); 
print("---------------------------------------------------------------------------");
  }
  else
  {
print("------------------------------------------------------------------");
sprintf(Buf, "%-24.24s| %7.2f|  %12.2f |  %12.*f |", "Итого",RvFirst+RvLast,SumFirst+SumLast,Accuracy,SumSredn);print(Buf); 
print("------------------------------------------------------------------");
  }
$END_SCRIPT
$КОНЕЦ_ЕСЛИ
$ВЫХОД