-- Шаблон создан мастером бланков
-- 28.11.2008 15:39:22
--
БланкСШаблоном "Заявка на кассовый расход (форма для печати)", Редактор РПО_ЗАЯВКА_КР;

var f15н:L=(ДатаДок>=1.7.2010 and ДатаДок<1.1.2011);
var f13н:L=(ДатаДок>=1.1.2011);

var FlagInit:L;

var fСкрытьРаздел:L=[True];
var fУтвДок:L;
var fДобГородВБанк:L=[True];
var ДесятРазд:S=["."];
var fКлиентКорИмя:L;
var fОдинЛист:L;
var РазмерШрифта:I=[8];
var fР2_Договор:L=[True];

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

var Клиент:S=if(fКлиентКорИмя,Рекв.КорИмя,Рекв.ПолнИмя+Рекв.РПО_ПолнИмя2);
var КБП:S=if(Банк.РПО_КодБюдж="1",Рекв.РПО_КБП,"");
var НаимБюдж:S=if(Банк.РПО_КодБюдж="6" and ver>=7,"",Банк.РПО_НаимБюдж+Банк.РПО_НаимБюдж2);
var ФинОрган:S=if(Банк.РПО_КодБюдж="6" and ver>=7,"",Банк.РПО_ФО_Наим1+Банк.РПО_ФО_Наим2);
var Банк_РПО_ФО_ОКПО_:S=if(ver>=12,"по ОКПО","");
var Банк_РПО_ФО_ОКПО:S=if(ver>=12,Банк.РПО_ФО_ОКПО,"");

var Загл1_3:S=if(ver<12,"Сумма","Сумма в рублевом эквиваленте");
var Гр1_6:I=if(ver<12,6,5);
var Гр1_7:I=if(ver<12,7,6);
var Гр1_8:I=if(ver<12,8,7);

var Док_ВидПл_:S=if(Док_ВидПл="0":""|Док_ВидПл="1":"почтой"|Док_ВидПл="2":"телеграфом"|Док_ВидПл="3":"электронно"|Док_ВидПл="4":"срочно"|true:"???");

var РеквП_:S=if(БанкП=nil,РеквП.КорИмя,БанкП.БанкИмя);
var БанкП_:S=БанкП.Банк+if(fДобГородВБанк," "+БанкП.Город,"");

var Р2:L; --определяем в onRead
var Р4:L=not (Нал_Статус="" and Нал_КБК="" and Нал_ОКАТО="" and Нал_ОснПл="" and Нал_Пер="" and Нал_НомДок="" and Нал_ДатДок=1.1.100 and Нал_ТипПл="");
var Загл4_3:s=if(ver>=12,"Код по ОКТМО","Код ОКАТО");

var Нал_ДатДок_:S=if(Р4 and Нал_ДатДок=1.1.100,"0",DateToString(Нал_ДатДок));

var Key[]:S;

var SelfCfg:S="ТББ.ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР.000.cfg";

btnПечать  : Object;
edКолКопий : Object;
btnClose   : Object;

sУтвДок:Section;
S1: Section;
S2: Section;
S3: Section;
--Лист 1
sР1: Section; --Раздел 1
sП1: Section; --Подписи
sН1: Section; --Колонтитул нижний
--Лист 2
sВ2: Section; --Колонтитул верхний
sР2: Section; --Раздел 2
sП2: Section; --Подписи
sН2: Section; --Колонтитул нижний
--
sВ3: Section; --Колонтитул верхний
sР3: Section; --Раздел 3
sП3: Section; --Подписи
sН3: Section; --Колонтитул нижний
--
sВ4: Section; --Колонтитул верхний
sР4: Section; --Раздел 4
sП4: Section; --Подписи
sН4: Section; --Колонтитул нижний
--Лист 3
sВ5   : Section; --Колонтитул верхний
sР5   : Section; --Раздел 5
sП5   : Section; --Подписи
sВ5_12: Section; --Колонтитул верхний для версии 12
sР5_12: Section; --Раздел 5  для версии 12
sП5_12: Section; --Подписи для версии 12
sШ1   : Section; --Штамп
sН5   : Section; --Колонтитул нижний
sН5_12: Section; --Колонтитул нижний для версии 12

var Key[]:S;
var BufИст[]:S;
var BufКБК[]:S;
var BufКБКП[]:S;
var BufДопКл[]:S;
var BufСум[]:N;
var BufСумРуб[]:N;
var BufНазнПл[]:S;
var BufПримеч[]:S;

var BufН[]:S;

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

ДолжнИспФК:S;
ФИОИспФК:S;
ТелИспФК:S;

var Buf []:S;
var Buf2[]:S;

var fСохрBMP:L;
var fСохрBMP_File:S;
--
--Процедуры и функции -------------
Proc Настр;
var tmp:S;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР",0,0,"",""):
    tmp=Раб.Настр.ВзятьЗначение("fСкрытьРаздел");  fСкрытьРаздел=(tmp="" or tmp="true");
    tmp=Раб.Настр.ВзятьЗначение("fУтвДок");	   fУтвДок=tmp="true";
    tmp=Раб.Настр.ВзятьЗначение("fДобГородВБанк"); fДобГородВБанк=(tmp="" or tmp="true");
    tmp=Раб.Настр.ВзятьЗначение("ДесятРазд");	   ДесятРазд=if(tmp="",".",tmp);
    tmp=Раб.Настр.ВзятьЗначение("fКлиентКорИмя");  fКлиентКорИмя=tmp="true";
    tmp=Раб.Настр.ВзятьЗначение("fОдинЛист");	   fОдинЛист=tmp="true";
    tmp=Раб.Настр.ВзятьЗначение("РазмерШрифта");   РазмерШрифта=if(tmp="",8,Int(tmp));
    tmp=Раб.Настр.ВзятьЗначение("fР2_Договор");    fР2_Договор=(tmp="" or tmp="true");
 fi;
end;

Proc ЗадатьДесятичныйРазделитель;
var cf1:S;
 cf1="0.00;;0";
 if not ДесятРазд=".": cf1=cf1+"[D"+ДесятРазд+"]"; fi;
 sР1.Cell(4,1,CellFormat,cf1); --#Док_Сум
 sР1.Cell(4,3,CellFormat,cf1); --#Док_СумРуб
 sР1.Cell(4,5,CellFormat,cf1); --#Док_СумНДС
end;

Proc Оформление;
 sУтвДок.Visible=fУтвДок;
 ЗадатьДесятичныйРазделитель;
 S3.Row(15,RowVisible,ver>=12); --Код объекта по ФАИП
 SР1.Column(5,ColVisible,ver<12); --Сумма НДС в валюте заявки
 SР1.Column(8,ColWidth,1160+if(ver<12,0,260)); --Назначение платежа (примечание)
end;

Func СортРасшифр:I;
var Iter,z:I;
var Key_:S;
var crcНазнПл,crcПримеч:I;
 ClearVariable(Key);
 ClearVariable(BufИст);
 ClearVariable(BufКБК);
 ClearVariable(BufКБКП);
 ClearVariable(BufДопКл);
 ClearVariable(BufСум);
 ClearVariable(BufСумРуб);
 ClearVariable(BufНазнПл);
 ClearVariable(BufПримеч);
 for Iter=1..Расшифр do
  crcНазнПл=Раб.CRC16.CRC24_(Раб.CRC16.Init24,Расшифр[Iter].НазнПл);
  crcПримеч=Раб.CRC16.CRC24_(Раб.CRC16.Init24,Расшифр[Iter].Примеч);
  Key_=Расшифр[Iter].Ист+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].КБКП+"#"+Расшифр[Iter].ДопКл+"#"+Расшифр[Iter].ДопКлП+"#"+Str16(crcНазнПл)+"#"+Str16(crcПримеч);
  z=SearchInArray(Key,Key_,True);
  if z=-1:
     z=InsertInArraySort(Key,Key_);
     InsertInArray(BufИст,z,Расшифр[Iter].Ист);
     InsertInArray(BufКБК,z,Расшифр[Iter].КБК);
     InsertInArray(BufКБКП,z,Расшифр[Iter].КБКП);
     InsertInArray(BufДопКл,z,Расшифр[Iter].ДопКл);
     InsertInArray(BufСум,z,Расшифр[Iter].Сум);
     InsertInArray(BufСумРуб,z,Расшифр[Iter].СумРуб);
     InsertInArray(BufНазнПл,z,Расшифр[Iter].НазнПл);
     InsertInArray(BufПримеч,z,Расшифр[Iter].Примеч);
    else
     BufСум[z]=BufСум[z]+Расшифр[Iter].Сум;
     BufСумРуб[z]=BufСумРуб[z]+Расшифр[Iter].СумРуб;
  fi;
 od;
 ^LengthOfArray(Key);
end;

Func MyFormatN (Val:N):S;
var Ret:S;
 if Round(Val,2)=0:
    Ret="0";
   else
    Ret=Format("%.2F",Val);
    if not ДесятРазд=".":
       Ret=Раб.Формат.ReplaceSubStr(Ret,".",ДесятРазд);
    fi;
 fi;
 ^Ret;
end;

Func ВысотаОбласти (S1: S; r1:I; S2: S; r2:i): I;
var Obj1,Obj2:Object;
var y1,y2:i;
 if not FindObject(S1,Obj1): Message("Секция '"+s1+"' не найдена",mtError); ^0; fi;
 if not FindObject(S2,Obj2): Message("Секция '"+s2+"' не найдена",mtError); ^0; fi;
 y1=AsInteger(Obj1.Row(r1,RowTop,""));
 y2=AsInteger(Obj2.Row(r2,RowTop,""));
 ^y2-y1;
end;

Func КопироватьСекцию(tName:S; tr0:i; sName:S; sr0:i; sn:i): Object;
var sObj,tObj:Object;
var r,r0,rr,tr,c,cc:i;
 if not FindObject(tName,tObj): Message("Секция '"+tName+"' не найдена",mtError); fi;
 if not FindObject(sName,sObj): Message("Секция '"+sName+"' не найдена",mtError); fi;
 cc=AsInteger(sObj.ColsCount);
 if sr0=0:
    r0=1;
    rr=AsInteger(sObj.RowsCount);
   else
    r0=sr0;
    rr=sr0+sn;
 fi;
 if tr0=0:
    tObj.RowsCount=rr;
    tObj.ColsCount=cc;
    for c=1..cc do
     tObj.Column(c,ColWidth,asInteger(sObj.Column(c,ColWidth,"")));
     tObj.Column(c,ColVisible,asLogical(sObj.Column(c,ColVisible,"")));
    od;
    tr=1;
   else
    tr=tr0;
    if AsInteger(tObj.RowsCount)<tr+sn: tObj.RowsCount=tr+sn; fi;
 fi;
 for r=r0..rr do
  tObj.Row(tr,RowVisible,asLogical(sObj.Row(r,RowVisible,"")));
  for c=1..cc do
   tObj.Cell(tr,c,CellFontSize,asInteger(sObj.Cell(r,c,CellFontSize,"")));
   tObj.Cell(tr,c,CellBorder,asString(sObj.Cell(r,c,CellBorder,"")));
   tObj.Cell(tr,c,CellAlignment,asInteger(sObj.Cell(r,c,CellAlignment,"")));
   tObj.Cell(tr,c,CellFormat,asString(sObj.Cell(r,c,CellFormat,"")));
   tObj.Cell(tr,c,CellReadOnly,asLogical(sObj.Cell(r,c,CellReadOnly,"")));
   tObj.Cell(tr,c,CellContents,asString(sObj.Cell(r,c,CellContents,"",False)),True);
   tObj.Cell(tr,c,CellFieldType,asInteger(sObj.Cell(r,c,CellFieldType,"")));
  od;
  tr=tr+1;
 od;
 ^tObj;
end;

Proc ДобавитьТитулВ(Name:S; tr0:i; vr:I);
var Obj:Object;
 Obj=КопироватьСекцию(Name,tr0,"sВ5"+if(vr<12,"","_12"),0,0);
 if not tr0=0: tr0=tr0-1; fi;
 Obj.Cell(tr0+1,1,CellContents,"Форма 0531801, с."+Str(Pages),True);
 Obj.CellLinks(1 ,tr0+1,20,tr0+1); --Форма 0531801, с.3
 Obj.CellLinks(1 ,tr0+2,18,tr0+2); --Номер Заявки на кассовый расход
 Obj.CellLinks(19,tr0+2,20,tr0+2); --#НомерДок
 Obj.CellLinks(1 ,tr0+3,16,tr0+3); --от "
 Obj.CellLinks(19,tr0+3,20,tr0+3); --#ДатаДок
 Obj.Row(tr0+1,RowNewPage,True);
 if not asLogical(Obj.Visible): Obj.Visible=True; fi;
end;

Proc ДобавитьПодписи(Name:S; tr0:i; vr:I);
var Obj:Object;
var n:i;
 Obj=КопироватьСекцию(Name,tr0,"sП5"+if(vr<12,"","_12"),0,0);
 if not tr0=0: tr0=tr0-1; fi;
 Obj.CellLinks(1 ,tr0+3,20,tr0+3); --
 --
 Obj.CellLinks(2 ,tr0+6,3 ,tr0+6); --#ДатаПодписи
 Obj.CellLinks(5 ,tr0+6,6 ,tr0+6); --#ДатаПодписи
 Obj.CellLinks(7 ,tr0+6,20,tr0+6); --
 --
 for n=1..2 do
  Obj.CellLinks(1 ,tr0+1,5 ,tr0+2); --Руководитель (уполномоченное лицо)
  Obj.CellLinks(6 ,tr0+1,8 ,tr0+1); --#ДолжнРук
  Obj.CellLinks(6 ,tr0+2,8 ,tr0+2); --(должность)
  Obj.CellLinks(10,tr0+1,11,tr0+1); --
  Obj.CellLinks(10,tr0+2,11,tr0+2); --(подпись)
  Obj.CellLinks(13,tr0+1,15,tr0+1); --#ФИОРук
  Obj.CellLinks(13,tr0+2,15,tr0+2); --(расшифровка подписи)
  Obj.CellLinks(16,tr0+1,20,tr0+1); --
  Obj.CellLinks(16,tr0+2,20,tr0+2); --
  tr0=tr0+3;
 od;
 if not asLogical(Obj.Visible): Obj.Visible=True; fi;
end;

Proc ДобавитьТитулН(Name:S; tr0:i; vr:I);
var Obj:Object;
 Obj=КопироватьСекцию(Name,tr0,"sН5"+if(vr<12,"","_12"),0,0);
 if not tr0=0: tr0=tr0-1; fi;
 Obj.Cell(tr0+2,20,CellContents,Str(Pages));
 Obj.Cell(tr0+2,20,CellFieldType,cftStaticText);
 Obj.CellLinks(1,tr0+1,20,tr0+1); --
 Obj.CellLinks(1,tr0+2,19,tr0+2); --Номер страницы
 Obj.CellLinks(1,tr0+3,19,tr0+3); --Всего страниц
 if not asLogical(Obj.Visible): Obj.Visible=True; fi;
 if not Name="sР5"+if(vr<12,"","_12"):
    BufН[LengthOfArray(BufН)+1]=Name;
 fi;
end;

Func ОтрисоватьТитулВ(Obj: Object; r:i; vr:I):I;
 Pages=Pages+1;
 y0=AsInteger(Obj.Row(r,RowTop,""));  --начальная координата текущего листа (задаем каждый раз когда начинаем новую страницу)
 ДобавитьТитулВ("sР5"+if(vr<12,"","_12"),r,vr);
 ^r+3;
end;

Func ОтрисоватьШапку(Obj:Object; r:i; vr:I):I;
var c:i;
 КопироватьСекцию("sР5"+if(vr<12,"","_12"),r,"sР5"+if(vr<12,"","_12"),3,1);
 c=1;  Obj.CellLinks(c,r,c+1,r); --1
 c=3;  Obj.CellLinks(c,r,c+3,r); --2
 c=8;  Obj.CellLinks(c,r,c+2,r); --4
 c=11; Obj.CellLinks(c,r,c+2,r); --5
 if ver<12:
    c=15; Obj.CellLinks(c,r,c+2,r); --7
    c=18; Obj.CellLinks(c,r,c+2,r); --8
   else
    c=16; Obj.CellLinks(c,r,c+2,r); --8
    c=19; Obj.CellLinks(c,r,c+1,r); --9
 fi;
 ^r;
end;

Func ОтрисоватьСтроку (Obj: Object; r:i; n:i; vr:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+20; fi;
 c=1;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,Str(n),True);
       Obj.CellLinks(c,r,2,r);
 c=3;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,if(Расшифр[n].Ист="1":"средства бюджета"|Расшифр[n].Ист="2":"средства от приносящей доход деятельности"|Расшифр[n].Ист="3":"средства дополнительного бюджетного финансирования"|Расшифр[n].Ист="4":"средства для финансирования мероприятий по оперативно-розыскной деятельности"|Расшифр[n].Ист="5":"средства, поступающие во временное распоряжение "+if(f13н:"казенных учреждений"|f15н:"бюджетных учреждений"|true:"получателя средств федерального бюджета")|Расшифр[n].Ист="6":"средства юридических лиц"|True:""),True);
       Obj.CellLinks(c,r,6,r);
 c=7;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,BufКБК[n],True);
 c=8;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,BufКБКП[n],True);
       Obj.CellLinks(c,r,10,r);
 if vr<12:
    c=11; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,MyFormatN(BufСум[n]),True);
	  Obj.CellLinks(c,r,13,r);
    c=14; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,MyFormatN(BufСумРуб[n]),True);
    c=15; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,BufНазнПл[n],True);
	  Obj.CellLinks(c,r,17,r);
    c=18; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,BufПримеч[n],True);
	  Obj.CellLinks(c,r,20,r);
   else
    c=11; Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,BufДопКл[n],True);
	  Obj.CellLinks(c,r,13,r);
    c=14; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,MyFormatN(BufСум[n]),True);
    c=15; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,MyFormatN(BufСумРуб[n]),True);
    c=16; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,BufНазнПл[n],True);
	  Obj.CellLinks(c,r,18,r);
    c=19; Obj.Cell(r,c,CellFontSize,РазмерШрифта); 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,BufПримеч[n],True);
	  Obj.CellLinks(c,r,20,r);
 fi;
 c=21; Obj.Cell(r,c,CellFontSize,РазмерШрифта);
       Obj.CellLinks(c,r,c,r);
 ^r;
end;

Func ОтрисоватьТитулН (Obj: Object; r:i; hКомпесатор:i; isКонецТабл:L; isКонецЛиста:L; vr:I):I;
var c:i;
 Obj.RowsCount=r; --уменьшаем размерность таблицы для сброса обеъеденных клеток, иначе может быть ошибка при переобъеденеии
 Obj.RowsCount=r+20;
 if isКонецТабл:
    c=1;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
	  Obj.CellLinks(c,r,2,r);
    if vr<12:
       c=3;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"0,2,0,0"); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
	     Obj.CellLinks(c,r,17,r);
       c=18; Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
	     Obj.CellLinks(c,r,20,r);
      else
       c=3;  Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"0,2,0,0"); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
	     Obj.CellLinks(c,r,18,r);
       c=19; Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
	     Obj.CellLinks(c,r,20,r);
    fi;
    c=21; Obj.Cell(r,c,CellFontSize,РазмерШрифта);
	  Obj.CellLinks(c,r,c,r);
 fi;
 if isКонецЛиста:
    r=r+1;
    ДобавитьПодписи("sР5"+if(vr<12,"","_12"),r,vr);
    r=r+6;
    ДобавитьТитулН("sР5"+if(vr<12,"","_12"),r,vr);
    Obj.Row(r,RowHeight,Max(15,hКомпесатор));
    r=r+3;
 fi;
 ^r;
end;

Proc ЗаполнитьР2;
var Obj: Object;
var Iter,r,c,i:i;
 if FindObject("sР2",Obj):
    Obj.RowsCount=4;
    Obj.Row(4,RowVisible,(not Осн_ДокВид="" and fР2_Договор and not Осн_ДокСкрывать) or ver<6);
    if ver<6:
       Obj.RowsCount=5;
       r=5;
      else
       Obj.RowsCount=4+Осн_Док+1;
       r=5; i=0;
       for Iter=1..Осн_Док do
	if not (Осн_Док[Iter].Вид="" and Осн_Док[Iter].Ном="" and Осн_Док[Iter].Дат=1.1.100 and Осн_Док[Iter].Предм="") and not Осн_Док[Iter].Скрывать:
	   Obj.Cell(r,5,CellFontSize,РазмерШрифта);
	   c=1; Obj.Cell(r,c,CellBorder,"2,1,1,1"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellContents,Осн_Док[Iter].Вид,True);
	   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,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellContents,Осн_Док[Iter].Ном,True);
	   c=3; 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,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellContents,DateToString(Осн_Док[Iter].Дат),True);
	   c=4; 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,CellFontSize,РазмерШрифта); Obj.Cell(r,c,CellContents,Осн_Док[Iter].Предм,True);
	   r=r+1;
	   i=i+1;
	   Obj.CellLinks(5,r,5,r); --вызываем перересовку после смены размера шрифта
	fi;
       od;
       if not Осн_Док=i: Obj.RowsCount=4+i+1; fi;
    fi;
    Obj.Cell(r,1,CellBorder,"0,2,0,0"); Obj.CellLinks(1,r,4,r);
 fi;
end;

Proc СбросЛиста;
var tmp,Name:S;
var w,ww:i;
var Obj: Object;
 tmp="sП1;sН1;sВ2;sП2;sН2;sВ3;sП3;sН3;sВ4;sП4;sН4";
 ww=WordsCount(tmp,";");
 for w=1..ww do
  Name=ExtractWord(w,tmp,";");
  if FindObject(Name,Obj):
     Obj.Visible=False;
     Obj.RowsCount=1;
     Obj.ColsCount=1;
     if Pos("sН",Name)=1:
	Obj.Row(1,RowHeight,15);
     fi;
  fi;
 od;
 sР2.Visible=True;
 sР4.Visible=True;
 if ver<12:
    sВ5.Visible=True;
    sР5.RowsCount=3;
    sН5.Row(1,RowHeight,15);
    sВ5_12.Visible=False;
    sР5_12.Visible=False;
    sР5_12.RowsCount=3;
    sН5_12.Visible=False;
    sН5_12.Row(1,RowHeight,15);
   else
    sВ5.Visible=False;
    sР5.Visible=False;
    sР5.RowsCount=3;
    sН5.Visible=False;
    sН5.Row(1,RowHeight,15);
    sВ5_12.Visible=True;
    sР5_12.Visible=True;
    sР5_12.RowsCount=3;
    sН5_12.Visible=True;
    sН5_12.Row(1,RowHeight,15);
 fi;
end;

Proc ЗадатьРазмерШрифта;
var bsf,w,ww,r,rr,c,cc,d:I;
var List,name:S;
var Obj: Object;
 bsf=AsInteger(S3.Cell(1,1,CellFontSize,""));
 if bsf=РазмерШрифта: Exit; fi;
 List="S1;S2;S3;sР1;sР2;sР3;sР4;sВ5;sР5;sП5;sШ1;sН5;sВ5_12;sР5_12;sП5_12;sН5_12";
 ww=WordsCount(list,";");
 for w=1..ww do
  Name=ExtractWord(w,list,";");
  if FindObject(Name,Obj):
     rr=AsInteger(Obj.RowsCount);
     cc=AsInteger(Obj.ColsCount);
     for r=1..rr do
      for c=1..cc do
       d=Int(AsString(Obj.Cell(r,cc,CellContents,"",False)));
       if Name="S1"  and r=1 and (c=1 or c=2): d=2; --Заявка на кассовый расход №
	 |Name="sП5" and (r=1 or r=2 or r=4 or r=5) and c<6: d=0; --xxxx (уполномоченное лицо)
	 |Name="sП5_12" and (r=1 or r=2 or r=4 or r=5) and c<6: d=0; --xxxx (уполномоченное лицо)
       fi;
       if not d=999: --исключая компенсатор
	  Obj.Cell(r,c,CellFontSize,Max(РазмерШрифта+d,2));
       fi;
      od;
      Obj.CellLinks(cc,r,cc,r); --вызываем перересовку после смены размера шрифта
     od;
  fi;
 od;
end;

Proc ЗаполнитьКлиента;
var ww,w,s:i;
var tmp:S;
var Obj: Object;
 if FindObject("S3",Obj):
    Obj.Cell(1,2,CellContents,"",True);
    Obj.Row(2,RowVisible,False);
    Obj.Row(3,RowVisible,False);
    if fКлиентКорИмя or Length(Рекв.ПолнИмя)+Length(Рекв.РПО_ПолнИмя2)<=255:
       Obj.Cell(1,2,CellContents,Клиент);
       Obj.CellLinks(2,1,2,1);
      else
       Раб.Бюджет2005.BufS[1]=Рекв.ПолнИмя;
       Раб.Бюджет2005.BufS[2]=Рекв.РПО_ПолнИмя2;
       ww=Раб.Бюджет2005.Str2Word(2," ");
       ww=Раб.Бюджет2005.Word2SingleStr(1,2,Obj,ww," ");
       s=0;
       ClearVariable(Buf);
       tmp=Раб.Бюджет2005.BufS[1];
       for w=2..ww do
	if Length(tmp)+1+Length(Раб.Бюджет2005.BufS[w])>255:
	   s=s+1;
	   Buf[s]=tmp;
	   tmp=Раб.Бюджет2005.BufS[w];
	  else
	   tmp=tmp+" "+Раб.Бюджет2005.BufS[w];
	fi;
       od;
       s=s+1;
       Buf[s]=tmp;
       Obj.Cell(1,2,CellContents,Buf[1],True);
       Obj.CellLinks(2,1,2,1);
       Obj.Cell(2,2,CellContents,Buf[2],True);
       Obj.Row(2,RowVisible,not Buf[2]="");
       Obj.CellLinks(2,2,2,2);
       Obj.Cell(3,2,CellContents,Buf[3],True);
       Obj.Row(3,RowVisible,not Buf[3]="");
       Obj.CellLinks(2,3,2,3);
    fi;
 fi;
end;

Proc РазметкаЛиста;
var Obj:Object;
var r,rNewPage,y,yy,hБаласт,hКомпенсатор,s,ss,rFix,n,nn,hПШС,hПС:i;
 ClearVariable(BufН);
 Pages=3;
 sВ5.Visible=ver<12;
 sР5.Visible=ver<12;
 sП5.Visible=ver<12;
 sН5.Visible=ver<12;
 sВ5_12.Visible=ver>=12;
 sР5_12.Visible=ver>=12;
 sП5_12.Visible=ver>=12;
 sН5_12.Visible=ver>=12;
 sР2.Visible=Р2 or (not Р2 and not fСкрытьРаздел);
 sР4.Visible=Р4 or (not Р4 and not fСкрытьРаздел);
 ЗаполнитьР2;
 ЗадатьРазмерШрифта;
 ЗаполнитьКлиента;
 Раб.Настр_Печать.ReadCfg("",SelfCfg);
 yy=Раб.Настр_Печать.Sheet(XS,YS); --размер рабочей области
 if ver<12:
    hПС=ВысотаОбласти("sП5",1,"sШ1",1)+ВысотаОбласти("sН5",1,"sН5",4); --Подписи+Номера страниц
   else
    hПС=ВысотаОбласти("sП5_12",1,"sШ1",1)+ВысотаОбласти("sН5_12",1,"sН5_12",4); --Подписи+Номера страниц
 fi;
 if fОдинЛист:
    Pages=1;
    y0=0;
    for s=1..3 do
     if FindObject("sП"+Str(s+1),Obj):
	y=AsInteger(Obj.Row(1,RowTop,""));
	if y-y0>yy-hПС:
	   ДобавитьПодписи("sП"+Str(s),0,ver);
	   ДобавитьТитулН("sН"+Str(s),0,ver);
	   Pages=Pages+1;
	   ДобавитьТитулВ("sВ"+Str(s+1),0,ver);
	   if FindObject("sВ"+Str(s+1),Obj):
	      y0=AsInteger(Obj.Row(1,RowTop,""));
	   fi;
	fi;
     fi;
    od;
    if ver<12:
       sВ5.Visible=False;
      else
       sВ5_12.Visible=False;
    fi;
   else
    Pages=1;
    ДобавитьПодписи("sП1",0,ver);
    ДобавитьТитулН("sН1",0,ver);
    Pages=Pages+1;
    ДобавитьТитулВ("sВ2",0,ver);
    ДобавитьПодписи("sП4",0,ver);
    ДобавитьТитулН("sН4",0,ver);
    if ver<12:
       sВ5.Visible=True;
       y0=AsInteger(sВ5.Row(1,RowTop,""));  --начальная координата текущего листа
       hПШС=ВысотаОбласти("sР5",3,"sН5",4); --c учетом строки между таблицей и подписью
       hПС=ВысотаОбласти("sР5",3,"sШ1",1)+ВысотаОбласти("sН5",1,"sН5",4); --c учетом строки между таблицей и подписью
      else
       sВ5_12.Visible=True;
       y0=AsInteger(sВ5_12.Row(1,RowTop,""));  --начальная координата текущего листа
       hПШС=ВысотаОбласти("sР5_12",3,"sН5_12",4); --c учетом строки между таблицей и подписью
       hПС=ВысотаОбласти("sР5_12",3,"sШ1",1)+ВысотаОбласти("sН5_12",1,"sН5_12",4); --c учетом строки между таблицей и подписью
    fi;
    Pages=Pages+1;
 fi;
 r=3;
 rNewPage=0;
 hБаласт=hПШС;
 nn=СортРасшифр;
 if FindObject("sР5"+if(ver<12,"","_12"),Obj):
    Obj.RowsCount=3;
    for n=1..nn do
     rFix=r+1;
     r=ОтрисоватьСтроку(Obj,r+1,n,ver);
     y=AsInteger(Obj.Row(r+1,RowTop,""));
     if y-y0>yy-hБаласт and n=1 and fОдинЛист: --проверка на пустую таблицу на предудщем листе
	ДобавитьПодписи("sП4",0,ver);
	ДобавитьТитулН("sН4",0,ver);
	Pages=Pages+1;
	if ver<12:
	   sВ5.Visible=True;
	   sВ5.Cell(1,1,CellContents,"Форма 0531801, с."+Str(Pages),True);
	   y0=AsInteger(sВ5.Row(1,RowTop,""));	--начальная координата текущего листа
	  else
	   sВ5_12.Visible=True;
	   sВ5_12.Cell(1,1,CellContents,"Форма 0531801, с."+Str(Pages),True);
	   y0=AsInteger(sВ5_12.Row(1,RowTop,""));  --начальная координата текущего листа
	fi;
     fi;
     if y-y0>yy-hБаласт and hБаласт=hПШС: --проверка вначале со штампом
	hБаласт=hПС;  --сброс штампа
     fi;
     if y-y0>yy-hБаласт:  --проверка без штампа
	y=AsInteger(Obj.Row(rFix,RowTop,""));
	hКомпенсатор=yy-hБаласт-(y-y0);
	r=ОтрисоватьТитулН(Obj,rFix,hКомпенсатор,True,True,ver);
	rNewPage=r+1;
	r=ОтрисоватьТитулВ(Obj,r+1,ver);
	r=ОтрисоватьШапку(Obj,r+1,ver);
	r=ОтрисоватьСтроку(Obj,r+1,n,ver);
	hБаласт=hПШС;
     fi;
    od;
    r=ОтрисоватьТитулН(Obj,r+1,0,True,False,ver); --вставляем конец таблцы
    hБаласт=hПШС;
    y=AsInteger(Obj.Row(r+1,RowTop,""));
    if y-y0>yy-hБаласт: --проверяем влезла ли таблица и штамп если нет то переносим последнию строчку
       hБаласт=hПС; --сбрасываем размер на промежуточный
       y=AsInteger(Obj.Row(rFix,RowTop,""));
       hКомпенсатор=yy-hБаласт-(y-y0);
       r=ОтрисоватьТитулН(Obj,rFix,hКомпенсатор,True,True,ver);
       rNewPage=r+1;
       r=ОтрисоватьТитулВ(Obj,r+1,ver);
       r=ОтрисоватьШапку(Obj,r+1,ver);
       r=ОтрисоватьСтроку(Obj,r+1,nn,ver);
       r=ОтрисоватьТитулН(Obj,r+1,0,True,False,ver);
    fi;
    Obj.RowsCount=r;
 fi;
 y0=0; --раставляем компенсаторы на листах (кроме компенсатора в sР5)
 ss=LengthOfArray(BufН)+1;
 BufН[ss]="sН5"+if(ver<12,"","_12");
 for s=1..ss do
  if FindObject(BufН[s],Obj):
     y=AsInteger(Obj.Row(4,RowTop,""));
     hКомпенсатор=yy-(y-y0);
     Obj.Row(1,RowHeight,Max(hКомпенсатор,15));
     if BufН[s+1]="sН5"+if(ver<12,"","_12") and not rNewPage=0:
	if ver<12:
	   y0=AsInteger(sР5.Row(rNewPage,RowTop,""));
	  else
	   y0=AsInteger(sР5_12.Row(rNewPage,RowTop,""));
	fi;
       else
	y0=AsInteger(Obj.Row(4,RowTop,""));
     fi;
  fi;
 od;
end;

Proc ПечатьРеестраОснДок(PreView:L);
 ExecuteProc("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР.ПечатьРеестраОснДок",PreView);
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnПечать_onClick (Obj:S);
 if КолКопий<=0: КолКопий=1; fi;
 if КолКопий>2:
    if EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий документа ?")=cmCancel:
       Message("Отказ от печати"); 
       Exit;
    fi;
 fi;
 Раб.Настр_Печать.Prn("","",SelfCfg,"",КолКопий);
 if ver<6: ПечатьРеестраОснДок(False); fi;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Timer1: Object;

Proc СохрBMP (aRec:Record;aFile:S);
 ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР_ПЕЧАТЬ.fСохрBMP=True;
 ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР_ПЕЧАТЬ.fСохрBMP_File=aFile;
 OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР_ПЕЧАТЬ",True,aRec);
end;

Proc OnOpen(Create: Logical);
 if ф0531851:
    OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР_ПЕЧАТЬ0531851");
    Close;
 fi;
 FlagInit=True;
 Раб.Настр_Печать.Cfg("",SelfCfg);
end;

Proc AfterOpen(Destroy: Logical);
 Оформление;
 РазметкаЛиста;
 FlagInit=False;
 if fСохрBMP:
    fСохрBMP=False;
    Раб.WSH.SendKeys("%+{F2}");
    Timer1.Active=True;
 fi;
end;

Proc OnTimer(Sender: String);
 Timer1.Active=False;
 Раб.WSH.SendKeys(fСохрBMP_File+"~");
 Раб.WSH.SendKeys("~");
 Close;
end;


Proc OnRead;
var Iter:I;
 Настр;
 Р2=not ((Осн_ДокВид="" and Осн_ДокНом="" and Осн_ДокДат=1.1.100 and Осн_ДокПредм="") or Осн_ДокСкрывать);
 for Iter=1..Осн_Док do
  if not (Осн_Док[Iter].Вид="" and Осн_Док[Iter].Ном="" and Осн_Док[Iter].Дат=1.1.100 and Осн_Док[Iter].Предм="") and not Осн_Док[Iter].Скрывать:
     Р2=True;
     Break;
  fi;
 od;
 if not FlagInit: 
    Оформление; 
    СбросЛиста;
    РазметкаЛиста;
 fi;
end;
--Обработчики событий шаблона -----
--






Конец