-- Шаблон создан мастером бланков
-- 12.12.2008 10:47:15
--
БланкСШаблоном [29.12.2007] "Расходное расписание исходящие (печатная форма)", Редактор РПО_РР_ИСХ;

var ВерхРегистр:L;
var ПравилоКуда:I=[2];

var inRec:Record;
var inКолКопий:I;
var inПечать:L;
var inУтвДок:L;

КолКопий:I=[2];

var fDuplexPrn:L;
var EnableDuplex:L;
var EnableDuplex_:S=if(EnableDuplex,"Разрешить","Запретить");

var DevS:S=""; --сингл
var DevD:S=""; --дуплекс

var Pages:I;

var РБС_РПО_КБП:S=if(Создан=1,"",РБС.РПО_КБП); --Не заполняется если сформирован ГРБС
var РБС_Банк_РПО_ЛСчет:S=if(Создан=3 or ДопФин,"",РБС_Банк.РПО_ЛСчет); --Не заполняется если сформирован ПБС или дополнительное финансирование
var РБС_Банк_РПО_ОФК_Код:S=if(Создан=3 or ДопФин,"",РБС_Банк.РПО_ОФК_Код); --Не заполняется если сформирован ПБС, а также администраторм ИФД ? или дополнительное финансирование

var ПБС_Банк_РПО_ОФК_Код:S=if(Создан=3 or ДопФин or ПравилоКуда=0 or not SubStr(РБС_Банк.РПО_ОФК_Код,1,ПравилоКуда)=SubStr(ПБС_Банк.РПО_ОФК_Код,1,ПравилоКуда),ПБС_Банк.РПО_ОФК_Код,""); ----заполняется если сформировал ПБС или доп.фин или ОФК Отпра<>ОФК Получ

var Секрет_:S=if(Секрет=1:"ДСП"|Секрет=2:"Секретно"|Секрет=3:"Совершенно секретно"|True:"");

var Экз:I;
var ТекстТитулВ:S=if(Секрет>0,Секрет_+" Экз.№"+if(Экз=0,"____",Str(Экз)),"");
var ТекстТитулН:S=if(Секрет>1,"","");

var Buf[]:S;

var BufКБК[]:S;
var BufСум1[]:N;
var BufСум2[]:N;
var BufСум3[]:N;
var BufПримеч[]:S;

S0: Section; --ТекстТитулВ
S1: Section; --#ГРБС
S2: Section; --Распорядитель (получатель) бюджетных средств, администратор источников финансирования дефицита бюджета с полномочиями главного администратора
S2a: Section; --Наименование бюджета
S3: Section; --Финансовый орган
S4: Section; --Федеральное казначейство, орган Федерального казначейства
S5: Section; --Распорядитель (получатель) бюджетных средств, администратор источников финансирования дефицита бюджета с полномочиями главного администратора, администратор источников финансирования дефицита бюджета, иной получатель бюджетных средств
S6: Section; --Наименование органа Федерального казначейства
S7: Section; --Специальные указания
S8: Section; --Номер страницы+Всего страниц
S9: Section; --#ТекстТитулН
S10: Section; --Разделы
S11: Section; --Ответственный исполнитель+Дата подписи
S12: Section; --Номер страницы+Всего страниц
S13: Section; --#ТекстТитулН
S14: Section; --Это канец
S15: Section; --Оборотный шатмп

var SelfCrd:S="РПО_РР_ИСХ";
var SelfBln:S="РБС.РР_ИСХ_ПЕЧАТЬ";
var SelfCfg:S="ТББ.ДОКУМЕНТЫ.ЛБО.РР_ИСХ_ПЕЧАТЬ.000.cfg";

var XS:I=2100; --Размер листа
var YS:I=2970; --Размер листа

var yy:i; --рабочая область листа
var y0:i; --начальная координата текущего листа
var hsub:i;  --высота области номер страницы+всего страниц+секрет нижний
var hlast:i; --высота области исполнитель+дата подписи+номер страницы+всего страниц+секрет нижний

var Т1:S="2 экз.";
Т2:S=["в адрес"];
Т3:S=["в дело"];
Т4:S=["ФИО"];
Т5:S=["ФИО с ЖМД №"];
Т6:S=["000-00-00"];
Т7:S;
Д1:D;
--
--Процедуры и функции -------------
Proc Настр(Flag:L);
end;

Proc ЗначНастр;
var OWA,OA,nr,n,n2,nr2:I;
var ID:S;
 OWA=OpenWorkArea("РПО_СТАТУС","","ID='"+SelfCrd+"'");
 Try
  nr=Records(OWA);
  if not nr=0:
     OA=OpenArray(OWA,1,"Позиции","");
     nr2=Records(OA);
     for n2=1..nr2 do
      ID=GetFieldS(OA,n2,"ID");
      if ID="ВерхРегистр": ВерхРегистр=GetFieldL(OA,n2,"VAL_L");
        |ID="ПравилоКуда": ПравилоКуда=GetFieldI(OA,n2,"VAL_I");
      fi;
     od;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func FixUp(Val:S):S;
 ^if(ВерхРегистр,Up(Val),Val);
end;

Func РасчетРаздела (aHandle:S):I;
var Iter,nn,z:I;
var КБК,ДопКл,Примеч:S;
var Сум1,Сум2,Сум3:N;
 ClearVariable(Buf);
 ClearVariable(BufКБК);
 ClearVariable(BufСум1);
 ClearVariable(BufСум2);
 ClearVariable(BufСум3);
 ClearVariable(BufПримеч);
 nn=if(aHandle="Ассигн":Ассигн|aHandle="ЛБО":ЛБО|aHandle="ПОФ":ПОФ);
 for Iter=1..nn do
  КБК=GetVariableS(aHandle+"["+Str(Iter)+"].БК")+"."+GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ");
  КБК=Раб.Формат.ReplaceSubstr(КБК,".","");
  ДопКл=GetVariableS(aHandle+"["+Str(Iter)+"].ДопКл");
  Сум1=GetVariableN(aHandle+"["+Str(Iter)+"].Сум1");
  if not aHandle="ПОФ":
     Сум2=GetVariableN(aHandle+"["+Str(Iter)+"].Сум2");
     Сум3=GetVariableN(aHandle+"["+Str(Iter)+"].Сум3");
  fi;
  Примеч=GetVariableS(aHandle+"["+Str(Iter)+"].Примеч");
  z=SearchInArray(Buf,КБК+"#"+ДопКл,True);
  if z=-1:
     z=InsertInArraySort(Buf,КБК+"#"+ДопКл);
     InsertInArray(BufКБК,z,КБК);
     InsertInArray(BufСум1,z,Сум1);
     InsertInArray(BufСум2,z,Сум2);
     InsertInArray(BufСум3,z,Сум3);
     InsertInArray(BufПримеч,z,Примеч);
    else
     BufСум1[z]=BufСум1[z]+Сум1;
     BufСум2[z]=BufСум2[z]+Сум2;
     BufСум3[z]=BufСум3[z]+Сум3;
     BufПримеч[z]=BufПримеч[z]+Примеч;
  fi;
 od;
 ^LengthOfArray(Buf);
end;

Func Str2Word (Val1:S; Val2:S):I;
var l1,l2,p:i;
var ch,tmp:S;
 ClearVariable(Buf);
 l1=Length(Val1);
 l2=Length(Val2);
 tmp="";
 for p=1..l1+l2 do
  if p<=l1: ch=SubStr(Val1,p,1); else ch=SubStr(Val2,p-l1,1); fi;
  if ch=" ":
     AddInArray(Buf,False,True,tmp);
     tmp="";
    else
     tmp=tmp+ch;
  fi;
 od;
 AddInArray(Buf,False,True,tmp);
 ^LengthOfArray(Buf);
end;

Func Str4Word (Val1:S; Val2:S; Val3:S; Val4:S):I;
var l1,l2,l3,l4,p:i;
var ch,tmp:S;
 ClearVariable(Buf);
 l1=Length(Val1);
 l2=Length(Val2);
 l3=Length(Val3);
 l4=Length(Val4);
 tmp="";
 for p=1..l1+l2+l3+l4 do
  if p<=l1: ch=SubStr(Val1,p,1); 
    |p<=l1+l2: ch=SubStr(Val2,p-l1,1);
    |p<=l1+l2+l3: ch=SubStr(Val3,p-l1-l2,1);
    |True: ch=SubStr(Val4,p-l1-l2-l3,1);
  fi;
  if ch=" ":
     AddInArray(Buf,False,True,tmp);
     tmp="";
    else
     tmp=tmp+ch;
  fi;
 od;
 AddInArray(Buf,False,True,tmp);
 ^LengthOfArray(Buf);
end;


Proc Отрисовать512 (Name: S; Row:I; Col:I; Links:S; Val1:S; Val2:S);
var w,ww,row0:i;
var tmp:S;
var Obj: Object;
 if FindObject(Name,Obj):
    Obj.RowsCount=Row;
    if Length(Val1)+Length(Val2)<=255:
       Obj.Cell(Row,Col,CellContents,Val1+Val2,True);
       Obj.CellLinks(Col,Row,Col,Row); --Вызываем перерисовку!
      else
       tmp="";
       Row0=Row;
       ww=Str2Word(Val1,Val2);
       for w=1..ww do
        if not AsInteger(Obj.Cell(Row,Col,CellLinesCount,Trim(tmp+" "+Buf[w])))=1:
           Obj.Cell(Row,Col,CellContents,tmp,True);
           Obj.Cell(Row,Col,CellBorder,"0,0,0,0");
           Obj.CellLinks(Col,Row,Col,Row); --Вызываем перерисовку!
           Row=Row+1;
           Obj.RowsCount=Row;
           tmp=Buf[w];
           Obj.Cell(Row,Col,CellBorder,"0,0,0,1");
          else
           tmp=Trim(tmp+" "+Buf[w]);
        fi; --if not AsInteger(Obj.Cell(Row,Col,CellLinesCount,""))=1:
       od; --for w=1..ww do
       Obj.Cell(Row,Col,CellContents,tmp,True);
       Obj.CellLinks(Col,Row,Col,Row); --Вызываем перерисовку!
       if not Links="":
          ww=WordsCount(Links,";");
          for w=1..ww do
           tmp=ExtractWord(w,Links,";");
           Obj.CellLinks(Int(ExtractWord(1,tmp,",")),Row0,Int(ExtractWord(2,tmp,",")),Row);
          od;
       fi; --if not Links="":
    fi; --if Length(Val1)+Length(Val2)<=255:
 fi; --if FindObject(Name,Obj):
end;

Proc Отрисовать1024 (Name: S; Row:I; Col:I; Links:S; Val1:S; Val2:S; Val3:S; Val4:S);
var w,ww,row0:i;
var tmp:S;
var Obj: Object;
 if FindObject(Name,Obj):
    Obj.RowsCount=Row;
    if Length(Val1)+Length(Val2)+Length(Val3)+Length(Val4)<=255:
       Obj.Cell(Row,Col,CellContents,Val1+Val2+Val3+Val4,True);
       Obj.CellLinks(Col,Row,Col,Row); --Вызываем перерисовку!
      else
       tmp="";
       Row0=Row;
       ww=Str4Word(Val1,Val2,Val3,Val4);
       for w=1..ww do
        if not AsInteger(Obj.Cell(Row,Col,CellLinesCount,Trim(tmp+" "+Buf[w])))=1:
           Obj.Cell(Row,Col,CellContents,tmp,True);
           Obj.Cell(Row,Col,CellBorder,"0,0,0,0");
           Obj.CellLinks(Col,Row,Col,Row); --Вызываем перерисовку!
           Row=Row+1;
           Obj.RowsCount=Row;
           tmp=Buf[w];
           Obj.Cell(Row,Col,CellBorder,"0,0,0,1");
          else
           tmp=Trim(tmp+" "+Buf[w]);
        fi; --if not AsInteger(Obj.Cell(Row,Col,CellLinesCount,""))=1:
       od; --for w=1..ww do
       Obj.Cell(Row,Col,CellContents,tmp,True);
       Obj.CellLinks(Col,Row,Col,Row); --Вызываем перерисовку!
       if not Links="":
          ww=WordsCount(Links,";");
          for w=1..ww do
           tmp=ExtractWord(w,Links,";");
           Obj.CellLinks(Int(ExtractWord(1,tmp,",")),Row0,Int(ExtractWord(2,tmp,",")),Row);
          od;
       fi; --if not Links="":
    fi; --Length(Val1)+Length(Val2)+Length(Val3)+Length(Val4)<=255:
 fi; --if FindObject(Name,Obj):
end;

Proc Сброс;
var c,s:i;
var Obj:Object;
 for s=1..7 do
  if FindObject("s"+str(s),Obj):
     Obj.RowsCount=1; Obj.CellLinks(1,1,1,1); Obj.CellLinks(2,1,2,1); Obj.CellLinks(3,1,3,1); Obj.CellLinks(4,1,4,1);
  fi;
 od;
 s8.Row(1,RowHeight,10);
 if FindObject("s10",Obj):
    Obj.RowsCount=1;
    Obj.Row(1,RowNewPage,False);
    for c=1..12 do
     Obj.CellLinks(1,1,1,1);
     Obj.Cell(1,c,CellBorder,"0,0,0,0");
     Obj.Cell(1,c,CellAlignment,0);
     Obj.Cell(1,c,CellFieldType,cftStaticText);
     Obj.Cell(1,c,CellContents,"",True);
     Obj.Cell(1,c,CellFontSize,8);
    od;
 fi;
 s12.Row(1,RowHeight,10);
end;

Func ВысотаОбласти (Obj1: Object; r1:I; Obj2: Object; r2:i): I;
var y1,y2:i;
 y1=AsInteger(Obj1.Row(r1,RowTop,""));
 y2=AsInteger(Obj2.Row(r2,RowTop,""));
 ^y2-y1;
end;

Proc ВариантШтампа;
var Obj: Object;
 if FindObject("S15",Obj):
    Obj.Row(6,RowVisible,Секрет>1);
    Obj.Row(8,RowVisible,Секрет>1);
 fi;
end;

Func ВставитьТутулВ (Obj: Object; r:I): I;
var i,c:i;
 Pages=Pages+1;
 if r+4>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+100; fi;
 --Титул секретки
 if not ТекстТитулВ="":
    c=1; Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftCommonField); Obj.Cell(r,c,CellContents,"ТекстТитулВ",True); Obj.Cell(r,c,CellReadOnly,True); Obj.Cell(r,c,CellFontSize,10);
         Obj.CellLinks(1,r,12,r);
         Obj.Row(r,RowNewPage,True);
         y0=AsInteger(Obj.Row(r,RowTop,""));  --начальная координата текущего листа (задаем каждый раз когда начинаем новую страницу)
         r=r+1;
   else
    y0=AsInteger(Obj.Row(r,RowTop,""));  --начальная координата текущего листа (задаем каждый раз когда начинаем новую страницу)
 fi;
 --Верхний титул
 c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Форма 0531722 с.2",True);
       Obj.CellLinks(1,r,12,r);
       Obj.Row(r,RowNewPage,ТекстТитулВ="");
       r=r+1;
 c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Расходное расписание №",True);
       Obj.CellLinks(1,r,10,r);
 c=11; Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,НомерДок,True);
       Obj.CellLinks(11,r,12,r);
       r=r+1;
 c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,'от "',True);
       Obj.CellLinks(1,r,8,r);
 c=9;  Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Format("%.2d",Day(ДатаДок)),True);
 c=10; Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,'"',True);
 c=11; Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Месяца(Mon(ДатаДок))+" "+Str(Year(ДатаДок))+" г.",True);
       Obj.CellLinks(11,r,12,r);
 ^r;
end;

Func ВставитьТутулН (Obj: Object; r:I; h:i; aHandle:S; CloseTable:L): I;
var i,c:i;
var bb:s;
 Obj.RowsCount=r; --уменьшаем размерность таблицы для сброса обеъеденных клеток, иначе может быть ошибка при переобъеденеии
 Obj.RowsCount=r+100;
 bb=if(CloseTable,"0,2,0,0","0,0,0,0");
 c=1;  Obj.Cell(r,c,CellBorder,bb);          Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Str(h),True); Obj.Cell(r,c,CellFontSize,1);
       if aHandle="ПОФ": Obj.CellLinks(1,r,5,r); else Obj.CellLinks(1,r,12,r); fi;
       Obj.Row(r,RowHeight,h);
 if aHandle="ПОФ":
    c=6; Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True); Obj.Cell(r,c,CellFontSize,1);
    Obj.CellLinks(6,r,12,r);
 fi;
       r=r+1;
 c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Номер страницы",True);
       Obj.CellLinks(1,r,11,r);
 c=12; Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Str(Pages),True);
       r=r+1;
 c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Всего страниц",True);
       Obj.CellLinks(1,r,11,r);
 c=12; Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftCommonField);Obj.Cell(r,c,CellContents,"Pages",True);
 if not ТекстТитулН="":
          r=r+1;
    c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,ТекстТитулН,True);2 0Obj.Cell(r,c,CellFontSize,10); Obj.Cell(r,c,CellReadOnly,True);
          Obj.CellLinks(1,r,12,r);
 fi;
 ^r;
end;


Func ДобавитьШапкуРаздела (Obj: Object; r:i; aHandle:S; Short:L):I;
var c:i;
var Загл,ЗаглКБК:S;
var ДатаВД:D;
 if r+6>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+100; fi;
 if not Short:
    Загл=if(aHandle="Ассигн":"Раздел I. Бюджетные ассигнования"|aHandle="ЛБО":"Раздел II. Лимиты бюджетных обязательств"|aHandle="ПОФ":"Раздел III. Предельные объемы финансирования"|true:"");
    ЗаглКБК=if(aHandle="Ассигн","Код по БК","Код расхода по БК");
    ДатаВД=if(aHandle="Ассигн":ДатаВД1|aHandle="ЛБО":ДатаВД2|aHandle="ПОФ":ДатаВД3);
    --Заголовок
    c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Загл,True); Obj.Cell(r,c,CellFontSize,9); Obj.Cell(r,c,CellFontStyle,1);
          Obj.CellLinks(1,r,12,r);
    --Дата введение в действие
          r=r+1;
    c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,'Дата введения в действие раздела  "',True);
          Obj.CellLinks(1,r,2,r);
    c=3;  Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(ДатаВД=1.1.100,"",Format("%.2d",Day(ДатаВД))),True);
    c=4;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,'"',True);
    c=5;  Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(ДатаВД=1.1.100,"",Месяца(Mon(ДатаВД))+" "+Str(Year(ДатаВД))+" г."),True);
          Obj.CellLinks(5,r,6,r);
    c=7;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(7,r,12,r);
          r=r+1;
 fi;
    c=1;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.Cell(r,c,CellFontSize,1);
          Obj.CellLinks(1,r,12,r);
          Obj.Row(r,RowHeight,20);
 if not Short:
    --Шапка
          r=r+1;
    c=1;  Obj.Cell(r,c,CellBorder,"0,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,ЗаглКБК,True);
          Obj.CellLinks(1,r,1,r+1);
    c=2;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Сумма на текущий финансовый год",True);
          Obj.CellLinks(2,r,5,r+1);
    if aHandle="ПОФ":
       c=6;  Obj.Cell(r,c,CellBorder,"1,1,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Примечание",True);
             Obj.CellLinks(6,r,12,r+1);
             r=r+1;
      else
       c=6;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Сумма на плановый период",True);
             Obj.CellLinks(6,r,7,r);
       c=8;  Obj.Cell(r,c,CellBorder,"1,1,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Примечание",True);
             Obj.CellLinks(8,r,12,r+1);
             r=r+1;
       c=6;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"первый год",True);
       c=7;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"второй год",True);
    fi;
    --1,2,3,4,5
 fi;
       r=r+1;
 c=1;  Obj.Cell(r,c,CellBorder,"0,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"1",True);
 c=2;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"2",True);
       Obj.CellLinks(2,r,5,r);
 if aHandle="ПОФ":
    c=6;  Obj.Cell(r,c,CellBorder,"1,1,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"3",True);
          Obj.CellLinks(6,r,12,r);
   else
    c=6;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"3",True);
    c=7;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"4",True);
    c=8;  Obj.Cell(r,c,CellBorder,"1,1,0,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"5",True);
          Obj.CellLinks(8,r,12,r);
 fi;
 ^r;
end;

Func ДобавитьСтрокуРаздела (Obj: Object; r:i; aHandle:S; n:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+100; fi;
 c=1;  Obj.Cell(r,c,CellBorder,"2,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,BufКБК[n],True);
 if aHandle="ПОФ":
    c=2;  Obj.Cell(r,c,CellBorder,"1,1,2,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(BufСум1[n],2)=0,"0",Format("%.2F",BufСум1[n])),True);
          Obj.CellLinks(2,r,5,r);
    c=6;  Obj.Cell(r,c,CellBorder,"1,1,0,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,SubStr(BufПримеч[n],1,254),True);
          Obj.CellLinks(6,r,12,r);
   else
    c=2;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(BufСум1[n],2)=0,"0",Format("%.2F",BufСум1[n])),True);
          Obj.CellLinks(2,r,5,r);
    c=6;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(BufСум2[n],2)=0,"0",Format("%.2F",BufСум2[n])),True);
    c=7;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(BufСум3[n],2)=0,"0",Format("%.2F",BufСум3[n])),True);
    c=8;  Obj.Cell(r,c,CellBorder,"1,1,2,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,SubStr(BufПримеч[n],1,254),True);
          Obj.CellLinks(8,r,12,r);
 fi;
 ^r;
end;

Func ДобавитьИтогРаздела (Obj: Object; r:i; aHandle:S; nn:i):I;
var c:i;
var ИтогСум1,ИтогСум2,ИтогСум3:n;
 ИтогСум1=SumOfArray(BufСум1,nn);
 ИтогСум2=SumOfArray(BufСум2,nn);
 ИтогСум3=SumOfArray(BufСум3,nn);
 if r+2>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+100; fi;
 c=1;  Obj.Cell(r,c,CellBorder,"0,2,2,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Итого",True);
 c=2;  Obj.Cell(r,c,CellBorder,"2,1,1,2"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(ИтогСум1,2)=0,"0",Format("%.2F",ИтогСум1)),True);
       Obj.CellLinks(2,r,5,r);
 if aHandle="ПОФ":
    c=6;  Obj.Cell(r,c,CellBorder,"2,0,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(6,r,12,r);
   else
    c=6;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(ИтогСум2,2)=0,"0",Format("%.2F",ИтогСум2)),True);
    c=7;  Obj.Cell(r,c,CellBorder,"1,1,2,2"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(ИтогСум3,2)=0,"0",Format("%.2F",ИтогСум3)),True);
    c=8;  Obj.Cell(r,c,CellBorder,"2,2,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(8,r,12,r);
 fi;
 r=r+1; --пустая строка
 ^r;
end;

Func ДобавитьРаздел (Obj: Object; r:i; aHandle:S):I;
var n,nn,y,h:i;
var rШ,rТ:i;
 rШ=r-1;
 if aHandle="Ассигн": h=if(not ЛБО=0 or not ПОФ=0,hsub,hlast);
   |aHandle="ЛБО":    h=if(not ПОФ=0,hsub,hlast);
   |aHandle="ПОФ":    h=hlast;
 fi;
 nn=РасчетРаздела(aHandle);
 if not nn=0:
    r=ДобавитьШапкуРаздела(Obj,r,aHandle,False);
    y=AsInteger(Obj.Row(r+1,RowTop,""));
    if y-y0>yy-h:
       h=hsub;
       y=AsInteger(Obj.Row(rШ,RowTop,""));
       r=ВставитьТутулН(Obj,rШ,yy-h-(y-y0),aHandle,False);
       r=ВставитьТутулВ(Obj,r+1);
       r=ДобавитьШапкуРаздела(Obj,r+1,aHandle,False);
    fi;
    for n=1..nn do
     rТ=r;
     r=ДобавитьСтрокуРаздела(Obj,r+1,aHandle,n);
     y=AsInteger(Obj.Row(r+1,RowTop,""));
     if y-y0>yy-h:
        h=hsub;
        if nn=1: r=rШ; else r=rТ+1; fi;
        y=AsInteger(Obj.Row(r,RowTop,""));
        r=ВставитьТутулН(Obj,r,yy-h-(y-y0),aHandle,not nn=1);
        r=ВставитьТутулВ(Obj,r+1);
        r=ДобавитьШапкуРаздела(Obj,r+1,aHandle,not nn=1);
        r=ДобавитьСтрокуРаздела(Obj,r+1,aHandle,n);
     fi;
    od;
    rТ=r;
    r=ДобавитьИтогРаздела (Obj,r+1,aHandle,nn);
    y=AsInteger(Obj.Row(r+1,RowTop,""));
    if y-y0>yy-h:
       h=hsub;
       if nn=1: r=rШ; else r=rТ; fi;
       y=AsInteger(Obj.Row(r,RowTop,""));
       r=ВставитьТутулН(Obj,r,yy-h-(y-y0),aHandle,not nn=1);
       r=ВставитьТутулВ(Obj,r+1);
       r=ДобавитьШапкуРаздела(Obj,r+1,aHandle,not nn=1);
       r=ДобавитьСтрокуРаздела(Obj,r+1,aHandle,nn);
       r=ДобавитьИтогРаздела (Obj,r+1,aHandle,nn);
    fi;
   else
    r=r-1;
 fi;
 ^r;
end;

Proc Отрисовать;
var ObjРаздел,ObjПодпись,ObjСтраниц,ObjОмега:Object;
var r0,r,rr:I;
 Раб.Настр_Печать.ReadCfg("",SelfCfg);
 Сброс;
 S0.Visible=not ТекстТитулВ="";
 Отрисовать512("S1",1,2,"1,1;3,3;4,4",FixUp(ГРБС),"");
 if not Создан=1: Отрисовать512("S2",1,2,"1,1;3,3;4,4",FixUp(РБС.ПолнИмя),FixUp(РБС.РПО_ПолнИмя2)); fi;  --Не заполняется если сформирован ГРБС
 Отрисовать512("S2a",1,2,"1,1;3,3;4,4",FixUp(РБС_Банк.РПО_НаимБюдж),"");
 Отрисовать512("S3",1,2,"1,1;3,3;4,4",FixUp(РБС_Банк.РПО_ФО_Наим1),FixUp(РБС_Банк.РПО_ФО_Наим2));
 if not Создан=3 and not ДопФин: Отрисовать512("S4",1,2,"1,1;3,3;4,4",FixUp(РБС_Банк.РПО_ОФК_Имя),FixUp(РБС_Банк.РПО_ОФК_Имя2)); fi; --Не заполняется если сформирован ПБС, а также администраторм ИФД ? или дополнительное финансирование
 Отрисовать512("S5",1,2,"1,1;3,3;4,4",FixUp(ПБС.ПолнИмя),FixUp(ПБС.РПО_ПолнИмя2));
 if Создан=3 or ДопФин or ПравилоКуда=0 or not SubStr(РБС_Банк.РПО_ОФК_Код,1,ПравилоКуда)=SubStr(ПБС_Банк.РПО_ОФК_Код,1,ПравилоКуда): Отрисовать512("S6",1,2,"1,1;3,3;4,4",FixUp(ПБС_Банк.РПО_ОФК_Имя),FixUp(ПБС_Банк.РПО_ОФК_Имя2)); fi; --заполняется если сформировал ПБС или доп.фин или ОФК Отпра<>ОФК Получ
 --Отрисовать512("S6",1,2,"1,1;3,3;4,4",FixUp(ПБС_Банк.РПО_ОФК_Имя),FixUp(ПБС_Банк.РПО_ОФК_Имя2));
 Отрисовать1024("S7",1,2,"1,1;3,3;4,4",СпецУказ,СпецУказ2,СпецУказ3,СпецУказ4);
 S9.Visible=not ТекстТитулН="";
 S13.Visible=not ТекстТитулН="";
 Pages=1;
 if not FindObject("S10",ObjРаздел):  Message("Объект 'S10' не найден",mtError); Exit; fi;
 if not FindObject("S11",ObjПодпись): Message("Объект 'S11' не найден",mtError); Exit; fi;
 if not FindObject("S12",ObjСтраниц): Message("Объект 'S12' не найден",mtError); Exit; fi;
 if not FindObject("S14",ObjОмега):   Message("Объект 'S13' не найден",mtError); Exit; fi;
 yy=Раб.Настр_Печать.Sheet(XS,YS); --размер рабочей области
 r0=1; --начальная строка откуда рисовать
 rr=r0+Ассигн+ЛБО+ПОФ+100; --делаем с запасом
 ObjРаздел.RowsCount=rr;
 hsub=ВысотаОбласти(ObjСтраниц,1,ObjОмега,1);  --высота области номер страницы+всего страниц+секрет нижний
 hlast=ВысотаОбласти(ObjПодпись,1,ObjОмега,1); --высота области исполнитель+дата подписи+номер страницы+всего страниц+секрет нижний
 --Номер страницы+Всего страниц первый лист (перемещаем вниз страницы)
 S8.Row(1,RowHeight,yy-hsub-AsInteger(S8.Row(1,RowTop,"")));
 --
 r=ВставитьТутулВ(ObjРаздел,r0);
 r=ДобавитьРаздел(ObjРаздел,r+1,"Ассигн");
 r=ДобавитьРаздел(ObjРаздел,r+1,"ЛБО");
 r=ДобавитьРаздел(ObjРаздел,r+1,"ПОФ");
 ObjРаздел.RowsCount=r;
 --Номер страницы+Всего страниц последний лист (перемещаем вниз страницы)
 S12.Row(1,RowHeight,yy-hsub-(AsInteger(S12.Row(1,RowTop,""))-y0));
 --
 Try
  Листов=Pages;
  EditorApply;
 Except
 end;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----

--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnПечать_onClick (Sender:S);
var n,k:i;
 if fDuplexPrn and not EnableDuplex: fDuplexPrn=False; fi;
 if fDuplexPrn:
    if DevS="": Message("Не задано имя устройства для одностронней печати",mtError); Настр(True); Template.Field="DevS"; Exit; fi;
    if DevD="": Message("Не задано имя устройства для двусторонней печати",mtError); Настр(True); Template.Field="DevD"; Exit; fi;
 fi;
 if КолКопий<=0: КолКопий=1; fi;
 if КолКопий>2:
    n=EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий расходного расписания ?",mtWarning);
    if n=cmCancel: Message("Отказ от печати"); Exit; fi;
 fi;
 Try
  if fDuplexPrn:
     S15.CanPrint=True;
     S15.Row(1,RowHeight,1300);
  fi;
  for k=1..КолКопий do
   Экз=k;
   if fDuplexPrn:
      if Pages=1:
         Print("",SelfCfg,DevD,False,Pages,Pages+1);
        else
         Print("",SelfCfg,DevS,False,1,Pages-1);
         Print("",SelfCfg,DevD,False,Pages,Pages+1);
      fi;
     else
      Раб.Настр_Печать.Prn("","",SelfCfg,"",1);
   fi;
  od;
 Finally
  S15.CanPrint=False;
  S15.Row(1,RowHeight,50);
  Экз=0;
 end;
end;

Proc btnОбновить_OnClick(Sender: String);
 Отрисовать;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc onOpen (Create:L);
 Д1=ToDay;
 Раб.Настр_Печать.Cfg("",SelfCfg);
 fDuplexPrn=false;
 EnableDuplex=false;
end;

Proc OnRead;
var Rec: Record;
 if not inRec=nil:
    inRec=Current(inRec);
    inRec=nil;
    КолКопий=inКолКопий;
 fi;
 ЗначНастр;
 Отрисовать;
 ВариантШтампа;
 if inПечать:
    inПечать=False;
    btnПечать_OnClick("OnRead");
    Close;
 fi;
end;
--Обработчики событий шаблона -----
--


Конец
