-- Шаблон создан мастером бланков
-- 28.11.2008 15:44:06
--
БланкСШаблоном "Заявка на получение наличных денег", РЕДАКТОР РПО_ЗАЯВКА_НАЛ;

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

var УпрНастр:L;

var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var fУтвДок:L;
var fУтвДок_:S=if(fУтвДок,"Да","Нет");
var fСимволРасшифр:L;
var fСимволРасшифр_:S=if(fСимволРасшифр,"Да","Нет");
var ДесятРазд:S=["."];
var ПДИ:I;
var fКакБО:L=[True];
var fКакБО_:S=if(fКакБО,"Да","Нет");
var fНПлИзРКОСГУ:L;
var fНПлИзРКОСГУ_:S=if(fНПлИзРКОСГУ,"Да","Нет");
var МаскаСчДеб:S=["*.?.210.03.560"];
var extКлюч:S;

fQCMF:L;

var НоваяЗапись:L=(CurrentState=crdusInserted);

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

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

var ФОпоОКПО:S=if(ver>=12,'по ОКПО','');
var ОКПО_ФО:S=if(ver>=12,Банк.РПО_ФО_ОКПО,'');
var txtСумм:S=if(ver>=12,'Сумма','Сумма в рублях');
var txtИст:S="Наименование вида средств" + if(ver>=12, ' для исполнения обязательств','');
var txtДопКл:S=if(ver>=12,'Код цели (аналитический код)', 'Код цели субсидии (субвенции)');

var ОчиститьР1:S=if(Учитывать,"","Очистить разд. 1");

var nГЭК:I;
var nГЭК_:S="Листы: "+Str(nГЭК);
var РедГЭК:S=if(Учитывать,"Просмотр ГЭК","Сканировать / Редактировать");
var СканГЭК:S=if(Учитывать or not nГЭК=0,"","Сканировать");

var ГЭКCrd:S;
var ГЭКRec:Record;

var A:S=if(Учитывать,"","+");
var AA:S=if(Учитывать,"","++");
var D:S=if(Учитывать,"","-");

var пп[]:i=$;
var пп1[]:i=if(Чек<=1,0,пп[$]);

var Р1_ВсегоСум:N=SumOfArray(Чек[].Сум,Чек);

var ОчиститьР2:S=if(Учитывать,"","Очистить раздел 2");

var Ист_[]:S=if(Расшифр[$].Ист="1":"средства бюджета"
               |Расшифр[$].Ист="2":"средства от приносящей доход деятельности"
               |Расшифр[$].Ист="3":"средства дополнительного бюджетного финансирования"
               |Расшифр[$].Ист="4":"средства для финансирования мероприятий по оперативно-розыскной деятельности"
               |Расшифр[$].Ист="5":"средства, поступающие во временное распоряжение "+if(f13н,"казенных учреждений","бюджетных учреждений")
               |Расшифр[$].Ист="6":"средства юридических лиц"
               |True:"");

var Призн_[]:S=Расшифр[$].Призн;
var ТипРасх_[]:S=if(not Расшифр[$].ТипКБК="10" or not Расшифр[$].Ист="1":""|Расшифр[$].ТипРасх=0:"ЛБО"|Расшифр[$].ТипРасх=1:"Ассигнования"|true:"");

var Р2_ВсегоСум:N=SumOfArray(Расшифр[].Сум,Расшифр);

var ДолжнФИОДов:S=ДолжнДов+" "+ФИОДов;

var ИсклПризн:S="БО.*|ЛС.*|СОП.*";

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

hГлава:S;
hГРБС:S;
hКБК:S;
hЭКР:S;
hЭКД:S;
hЭКИФД:S;
hКОСГУ:S;
hСчДеб:S;
hСчКре:S;
hПризн:S;

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

cbУчитывать : Object;
cbВБанк     : Object;
cbПроводить : Object;
btnДатаОпер : Object;
edДатаОпер  : Object;
btnПКО      : Object;
cbЗакрытьДок: Object;
btnПечать   : Object;
edКолКопий  : Object;
edБанк_Кмнт : Object;
btnНастр    : Object;
cbКакБО     : Object;
cbАннул     : Object;
btnАннулДата: Object;
edАннулДата : Object;


S0 : Section;
S1 : Section;
S2 : Section;
S3 : Section;
S4 : Section;
S5 : Section;
S6 : Section;
S7 : Section;
S8 : Section;
S9 : Section;
S10: Section;
S11: Section;
S12: Section;

var nS:I=12;

sУтвДок: Section;

SC1: Section;
SC2: Section;
SC3: Section;

T0: Section;
T1_: Section;
T1: Section;

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

var BufField[]:S;
var BufColorBg[]:I;
var BufColorFo[]:I;
var FlagInit:L;

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

var y0:I;
var hlast:I;
var hsub:i;
var Pages:I=[2];

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

var НастрGUID:S;

var SkipEvent:L;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_НАЛ",0,0,"",НастрGUID):
    Раб.Настр.Добавить("fУтвДок","L");
    Раб.Настр.Добавить("fСимволРасшифр","L");
    Раб.Настр.Добавить("ДесятРазд","S");
    Раб.Настр.Добавить("ПДИ","I");
    Раб.Настр.Добавить("fКакБО","L");
    Раб.Настр.Добавить("fНПлИзРКОСГУ","L");
    Раб.Настр.Добавить("МаскаСчДеб","S");
    Раб.Настр.Добавить("extКлюч","S");
    if Рекв.РПО_ТипУчр="БУ" or Рекв.РПО_ТипУчр="АУ":
       Раб.Настр.Добавить("hГРБС","S");
    fi;
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
       if ДесятРазд="": ДесятРазд="."; fi;
       if ПДИ<0: ПДИ=0; fi;
    fi;
    if not Учитывать: СимволРасшифр=fСимволРасшифр; fi;
 fi;
end;

Proc ОткрНастр (Flag:L);
 cbУчитывать.Visible=not Flag;
 cbВБанк.Visible=not Flag;
 cbПроводить.Visible=not Flag;
 btnДатаОпер.Visible=not Flag;
 edДатаОпер.Visible=not Flag;
 btnПКО.Visible=not Flag;
 cbЗакрытьДок.Visible=not Flag;
 btnПечать.Visible=not Flag;
 edКолКопий.Visible=not Flag;
 edБанк_Кмнт.Visible=not Flag;
 btnНастр.Visible=not Flag;
 cbКакБО.Visible=not Flag;
 cbАннул.Visible=not Flag;
 btnАннулДата.Visible=not Flag;
 edАннулДата.Visible=not Flag;
 S0.Visible=not Flag;
 УпрНастр=Flag;
 if Flag=True: Template.Field="НастрЗакр"; Template.Frame=1; fi;
end;


Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
 cbЗакрытьДок.Visible=Раб.Бюджет2005.Сетевая;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..nS do
  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
       BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
       if BgColor=coAqua or BgColor=coTeal:
          Field=asString(Obj.Cell(r,c,CellContents,""));
          if SearchInArray(BufField,Field,True)=-1:
             n=InsertInArraySort(BufField,Field); 
             InsertInArray(BufColorBg,n,BgColor);
          fi;
       fi;
      od;
     od;
  fi;
 od;
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
end;

var nn2[]:S;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
var Flag:L;
 cbУчитывать.Enabled=not Проводить;
 cbВБанк.Enabled=not Проводить;
 cbПроводить.Enabled=not Аннул;
 btnДатаОпер.Enabled=not Проводить and not Аннул;
 edДатаОпер.Enabled=not Проводить and not Аннул;
 btnДатаОпер.Enabled=not Проводить and not Аннул;
 edДатаОпер.Enabled=not Проводить and not Аннул;
 cbАннул.Enabled=not Проводить;
 btnАннулДата.Enabled=not Проводить and not Аннул;
 edАннулДата.Enabled=not Проводить and not Аннул;
 Flag=Int(Банк.РПО_КодБюдж)>1 or ver>=12;
 if Flag:
    nn2[4] = '4';
    n=5;
   else
    nn2[4] = '*';
    n=4;
 fi;
 for c=5..12 do
  nn2[c]=str(n);
  n=n+1;
 od;

 for s=1..nS do
  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       Field=asString(Obj.Cell(r,c,CellContents,""));
       n=SearchInArray(BufField,Field,True);
       if not n=-1:
          if Учитывать:
             Obj.Cell(r,c,CellFontColor,coBlack); 
             Obj.Cell(r,c,CellBgColor,coTransparent); 
             Obj.Cell(r,c,CellReadOnly,True);
            else
             Obj.Cell(r,c,CellFontColor,BufColorFo[n]); 
             Obj.Cell(r,c,CellBgColor,BufColorBg[n]); 
             Obj.Cell(r,c,CellReadOnly,False);
          fi;
       fi;
      od;
     od;
     if s>=7 and s<=9:
        Obj.Column(12,ColVisible,СимволРасшифр);
        Obj.Column(7,ColVisible,Flag);
     fi;
  fi;
 od;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Чек do
  if Чек[Iter].Сум=0 and
     Чек[Iter].Номер="" and
     Чек[Iter].Серия="" and
     Чек[Iter].Дата=1.1.100 and
     Чек[Iter].Срок=1.1.100 and
     Чек[Iter].Символ="": DeleteFrame(Чек,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 Iter=1;
 While Iter<=Расшифр do
  if Расшифр[Iter].Ист="" and
     Расшифр[Iter].КБК="" and
     Расшифр[Iter].Сум=0 and
     Расшифр[Iter].НазнПл="" and
     Расшифр[Iter].Примеч="": DeleteFrame(Расшифр,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Func СортРасшифр:I;
var Iter,z:I;
var Key_:S;
 ClearVariable(Key);
 ClearVariable(BufИст);
 ClearVariable(BufКБК);
 ClearVariable(BufДопК);
 ClearVariable(BufСум);
 ClearVariable(BufНазнПл);
 ClearVariable(BufПримеч);
 УдалитьПустыеСтроки;
 for Iter=1..Расшифр do
  Key_=Расшифр[Iter].Ист+Расшифр[Iter].КБК+"#"+Расшифр[Iter].ДопКл+"#"+Расшифр[Iter].НазнПл+"#"+Расшифр[Iter].Примеч+"#"+if(СимволРасшифр,Расшифр[Iter].Символ,"");
  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].Примеч);
    else
     BufСум[z]=BufСум[z]+Расшифр[Iter].Сум;
  fi;
 od;
 ^LengthOfArray(Key);
end;

Func ДобавитьТитулВ(Obj: Object; r:i):I;
var c:i;
 if r+4>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 Pages=Pages+1;
 Obj.Row(r,RowNewPage,True);
 y0=AsInteger(Obj.Row(r,RowTop,""));  --начальная координата текущего листа (задаем каждый раз когда начинаем новую страницу)
 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,"Форма 0531802, с."+Str(Pages),True);
       Obj.CellLinks(c,r,20,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(c,r,20,r);
 c=21; 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(c,r,22,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(c,r,18,r);
 c=19; 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=20; 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);
 c=21; 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(c,r,22,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.Cell(r,c,CellFontSize,1);
       Obj.CellLinks(c,r,22,r);
       Obj.Row(r,RowHeight,10);
 ^r;
end;

Func ДобавитьШапку(Obj: Object; r:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 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,"1",True);
       Obj.CellLinks(c,r,2,r);
 c=3;  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(c,r,6,r);
 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,"3",True);
 c=8;  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);
        Obj.CellLinks(c,r,10,r);
 c=11;  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,"5",True);
       Obj.CellLinks(c,r,13,r);
 c=14; 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,"6",True);
       Obj.CellLinks(c,r,17,r);
 c=18; 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,"7",True);
       Obj.CellLinks(c,r,22,r);
 ^r;
end;

Func ДобавитьСтроку (Obj: Object; r:i; n:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 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,Str(n),True);
       Obj.CellLinks(c,r,2,r);
 c=3;  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,Ист_[n],True);
       Obj.CellLinks(c,r,6,r);
 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,BufКБК[n],True);
 c=8;  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);
        Obj.CellLinks(c,r,10,r);
 c=11;  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Сум[n],2)=0,"0",Format("%.2F",BufСум[n])),True);
       Obj.CellLinks(c,r,13,r);
 c=14; 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,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,22,r);
 ^r;
end;

Func ДобавитьТитулН (Obj: Object; r:i; h:i; Flag1:L; Flag2:L):I;
var c:i;
 Obj.RowsCount=r; --уменьшаем размерность таблицы для сброса обеъеденных клеток, иначе может быть ошибка при переобъеденеии
 Obj.RowsCount=r+30;
 if Flag1:
    c=1;  Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,2,r);
    c=3;  Obj.Cell(r,c,CellBorder,"0,2,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,17,r);
    c=20; Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,22,r);
 fi;
 if Flag2:
          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(c,r,4,r+1);
    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,ДолжнРук,True);
          Obj.CellLinks(c,r,8,r);
    c=9; 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);
    c=10; 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(c,r,11,r);
    c=12; 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);
    c=13; 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(c,r,16,r);
    c=17; 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(c,r,22,r);
          r=r+1;
    c=5;  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,7);
          Obj.CellLinks(c,r,8,r);
    c=9; 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);
    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); Obj.Cell(r,c,CellFontSize,7);
          Obj.CellLinks(c,r,11,r);
    c=12; 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);
    c=13; 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,7);
          Obj.CellLinks(c,r,16,r);
    c=17; 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(c,r,22,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(c,r,4,r+1);
    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,ДолжнБух,True);
          Obj.CellLinks(c,r,8,r);
    c=9; 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);
    c=10; 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(c,r,11,r);
    c=12; 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);
    c=13; 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(c,r,16,r);

    c=17; 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(c,r,22,r);
          r=r+1;
    c=5;  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,7);
          Obj.CellLinks(c,r,8,r);
    c=9; 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);
    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); Obj.Cell(r,c,CellFontSize,7);
          Obj.CellLinks(c,r,11,r);
    c=12; 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);
    c=13; 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,7);
          Obj.CellLinks(c,r,16,r);
    c=17; 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(c,r,22,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);
    c=2;  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=3;  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);
    c=4;  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(c,r,5,r);
    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.CellLinks(c,r,22,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(c,r,22,r);
          Obj.Row(r,RowHeight,Max(10,h));
          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(c,r,21,r);
    c=22; 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(c,r,21,r);
    c=22; 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); Obj.Cell(r,c,CellReadOnly,True);
 fi;
 ^r;
end;

Func ДобавитьТитулВ_(Obj: Object; r:i):I;
var c:i;
 if r+4>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 Pages=Pages+1;
 Obj.Row(r,RowNewPage,True);
 y0=AsInteger(Obj.Row(r,RowTop,""));  --начальная координата текущего листа (задаем каждый раз когда начинаем новую страницу)
 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,"Форма 0531802, с."+Str(Pages),True);
          Obj.CellLinks(c,r,19,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(c,r,17,r);
 c=18; 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(c,r,19,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(c,r,15,r);
 c=16; 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=17; 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);
 c=18; 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(c,r,19,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.Cell(r,c,CellFontSize,1);
       Obj.CellLinks(c,r,19,r);
       Obj.Row(r,RowHeight,10);
 ^r;
end;

Func ДобавитьШапку_(Obj: Object; r:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 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,"1",True);
       Obj.CellLinks(c,r,2,r);
 c=3;  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(c,r,6,r);
 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,"3",True);
 c=8;  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);
       Obj.CellLinks(c,r,10,r);
 c=11; 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,"5",True);
       Obj.CellLinks(c,r,14,r);
 c=15; 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,"6",True);
       Obj.CellLinks(c,r,19,r);
 ^r;
end;

Func ДобавитьСтроку_ (Obj: Object; r:i; n:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 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,Str(n),True);
       Obj.CellLinks(c,r,2,r);
 c=3;  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,Ист_[n],True);
       Obj.CellLinks(c,r,6,r);
 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,BufКБК[n],True);
 c=8;  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Сум[n],2)=0,"0",Format("%.2F",BufСум[n])),True);
       Obj.CellLinks(c,r,10,r);
 c=11; 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,14,r);
 c=15; 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,19,r);
 ^r;
end;

Func ДобавитьТитулН_ (Obj: Object; r:i; h:i; Flag1:L; Flag2:L):I;
var c:i;
 Obj.RowsCount=r; --уменьшаем размерность таблицы для сброса обеъеденных клеток, иначе может быть ошибка при переобъеденеии
 Obj.RowsCount=r+30;
 if Flag1:
    c=1;  Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,2,r);
    c=3;  Obj.Cell(r,c,CellBorder,"0,2,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,14,r);
    c=15; Obj.Cell(r,c,CellBorder,"0,1,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,19,r);
 fi;
 if Flag2:
          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(c,r,4,r+1);
    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,ДолжнРук,True);
          Obj.CellLinks(c,r,8,r);
    c=9;  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);
    c=10; 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(c,r,11,r);
    c=12; 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);
    c=13; 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);
    c=14; 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(c,r,19,r);
          r=r+1;
    c=5;  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,7);
          Obj.CellLinks(c,r,8,r);
    c=9;  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);
    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); Obj.Cell(r,c,CellFontSize,7);
          Obj.CellLinks(c,r,11,r);
    c=12; 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);
    c=13; 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,7);
    c=14; 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(c,r,19,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(c,r,4,r+1);
    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,ДолжнБух,True);
          Obj.CellLinks(c,r,8,r);
    c=9;  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);
    c=10; 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(c,r,11,r);
    c=12; 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);
    c=13; 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);
    c=14; 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(c,r,19,r);
          r=r+1;
    c=5;  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,7);
          Obj.CellLinks(c,r,8,r);
    c=9;  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);
    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); Obj.Cell(r,c,CellFontSize,7);
          Obj.CellLinks(c,r,11,r);
    c=12; 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);
    c=13; 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,7);
    c=14; 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(c,r,19,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);
    c=2;  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=3;  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);
    c=4;  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(c,r,5,r);
    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.CellLinks(c,r,19,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(c,r,19,r);
          Obj.Row(r,RowHeight,Max(10,h));
          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(c,r,18,r);
    c=19; 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(c,r,18,r);
    c=19; 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); Obj.Cell(r,c,CellReadOnly,True);
 fi;
 ^r;
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;

Proc ЗаполнитьНаимКлиента(Flag:L);
var ww,w,s:i;
var tmp:S;
var Obj:Object;
 if FindObject("S3",Obj):
    Obj.Row(1,RowVisible,not Flag);
    Obj.Row(2,RowVisible,False);
    Obj.Row(3,RowVisible,False);
    Obj.Row(4,RowVisible,False);
    if not Flag: Exit; fi;
    if Length(Рекв.ПолнИмя)+Length(Рекв.РПО_ПолнИмя2)<=255:
       Obj.Row(1,RowVisible,True);
      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(2,2,CellContents,Buf[1],True);
       Obj.Row(2,RowVisible,True);
       Obj.CellLinks(2,2,2,2);
       Obj.Cell(3,2,CellContents,Buf[2],True);
       Obj.Row(3,RowVisible,not Buf[2]="");
       Obj.CellLinks(2,3,2,3);
       Obj.Cell(4,2,CellContents,Buf[3],True);
       Obj.Row(4,RowVisible,not Buf[3]="");
       Obj.CellLinks(2,4,2,4);
    fi;
 fi;
end;

Proc РазметкаЛиста (Flag:L);
var Obj:Object;
var r,r0,y,yy,h,h0,s,hr,n,nn,hlast,hsub:i;
var v12:L;
 Pages=2;
 if Flag:
    Раб.Настр_Печать.ReadCfg("",SelfCfg);
    yy=Раб.Настр_Печать.Sheet(XS,YS); --размер рабочей области
 fi;
 --Клиент
 ЗаполнитьНаимКлиента(Flag);
 --Раздел 2 (проводки)
 S7.Visible=not Flag;
 S8.Visible=not Flag;
 S9.Visible=not Flag;
 --Раздел 2
 v12 = ver>=12;
 T1.Visible=Flag and v12;
 T1_.Visible=Flag and not v12;
 nn=СортРасшифр;
 hlast=ВысотаОбласти ("S10",1,"SC2",4);
 hsub=ВысотаОбласти ("S11",1,"S12",2)+ВысотаОбласти ("SC2",1,"SC2",4);
 if FindObject(if(v12,"T1","T1_"),Obj):
    Obj.RowsCount=3;
    if Flag:
       r=3;
       r0=0;
       y0=AsInteger(T0.Row(1,RowTop,""));  --начальная координата текущего листа
       h=hsub;
       for n=1..nn do
        hr=r+1;
        if v12:
           r=ДобавитьСтроку(Obj,r+1,n);
         else
           r=ДобавитьСтроку_(Obj,r+1,n);
        fi;
        y=AsInteger(Obj.Row(r+1,RowTop,""));
        if y-y0>yy-h:
           y=AsInteger(Obj.Row(hr,RowTop,""));
           if v12:
              r=ДобавитьТитулН(Obj,hr,yy-h-(y-y0),True,True);
              r0=r+1;
              r=ДобавитьТитулВ(Obj,r+1);
              r=ДобавитьШапку(Obj,r+1);
              r=ДобавитьСтроку(Obj,r+1,n);
             else
              r=ДобавитьТитулН_(Obj,hr,yy-h-(y-y0),True,True);
              r0=r+1;
              r=ДобавитьТитулВ_(Obj,r+1);
              r=ДобавитьШапку_(Obj,r+1);
              r=ДобавитьСтроку_(Obj,r+1,n);
          fi;
        fi;
       od;
       if v12:
          r=ДобавитьТитулН(Obj,r+1,0,True,False);
         else
          r=ДобавитьТитулН_(Obj,r+1,0,True,False);
       fi;
       h=hlast;
       y=AsInteger(Obj.Row(r+1,RowTop,""));
       if y-y0>yy-h: --проверяем влезла ли таблица и штам если нет то переносим последнию строчку
          h=hsub; --сбрасываем размер на промежуточный
          y=AsInteger(Obj.Row(hr,RowTop,""));
          if v12:
             r=ДобавитьТитулН(Obj,hr,yy-h-(y-y0),True,True);
             r0=r+1;
             r=ДобавитьТитулВ(Obj,r+1);
             r=ДобавитьШапку(Obj,r+1);
             r=ДобавитьСтроку(Obj,r+1,nn);
             r=ДобавитьТитулН(Obj,r+1,0,True,False);
            else
             r=ДобавитьТитулН_(Obj,hr,yy-h-(y-y0),True,True);
             r0=r+1;
             r=ДобавитьТитулВ_(Obj,r+1);
             r=ДобавитьШапку_(Obj,r+1);
             r=ДобавитьСтроку_(Obj,r+1,nn);
             r=ДобавитьТитулН_(Obj,r+1,0,True,False);
          fi;
       fi;
       Obj.RowsCount=r;
    fi;
 fi;
 y0=0;
 for s=1..2 do
  if FindObject("SC"+Str(s),Obj):
     if Flag:
        if s=1: h0=ВысотаОбласти("S0",1,if(fУтвДок,"sУтвДок","S1"),1)+10+47+ВысотаОбласти("S3",6,"S3",8)+ВысотаОбласти("S3",14,"S3",15); --Внимание!+ОчиститьР1+Банковский счет+Аналитический признак лицевого счета+Аналитический признак БО
          |s=2: h0=0;
        fi;
        y=AsInteger(Obj.Row(4,RowTop,""));
        h=yy-(y-y0)+h0;
        if h<10: Message("Внимание ! Страница "+Str(s)+" выходит за границы листа^MОбратитесь к разработчику или уменьшите количество строк раздела "+if(s=1,"1. Реквизиты чека","2. Расшифровка заявки на получение наличных денег"),mtWarning); fi;
       else
        h=10;
     fi;
     h=Max(h,10);
     Obj.Row(1,RowHeight,h);
     if r0=0: y0=AsInteger(T0.Row(1,RowTop,"")); 
       else 
         if v12: y0=AsInteger(T1.Row(r0,RowTop,""));
         else y0=AsInteger(T1_.Row(r0,RowTop,"")); fi;
  fi;
  fi;
 od;
end;

Proc НеПустаяТаблица(aHandle:S);
 if aHandle="Чек":     if Чек<1: InsertFrame(Чек,1); fi;
   |aHandle="Расшифр": if Расшифр<1: InsertFrame(Расшифр,1); fi;
 fi;
end;

Proc ОбработатьНомер (aНомерДок:S);
var tmp:i;
 tmp=Int(aНомерДок);
 if tmp=0:
    if ДатаДок=1.1.100:
       tmp=РАБ.ОБЛ.СледСУчетомГодаФ(SelfCrd,"Номер","ДатаДок","not UKey="+RecordToString(Current));
      else
       tmp=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаДок",ДатаДок,"not UKey="+RecordToString(Current));
    fi;
 fi;
 if not Номер=tmp:
    Номер=tmp;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
end;

Proc ОбработатьДату (prevДата:D; newДата:D);
var prevYYYY,newYYYY:I;
 prevYYYY=Year(prevДата);
 newYYYY=Year(newДата);
 if prevYYYY=newYYYY: Exit; fi;
 if not prevYYYY=100:
    if EnqOkCancel("Изменился отчетный год ("+Str(prevYYYY)+") документа, получить номер документа соответствуещего года ("+Str(newYYYY)+") ?",mtWarning)=cmCancel: Exit; fi;
 fi;
 НомерДок=Str(Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаДок",ДатаДок,"not UKey="+RecordToString(Current)));
 ОбработатьНомер(НомерДок);
 Template.Field="НомерДок";
end;

Proc ПоУмолчанию;
 if Глава="":
    Глава=hГлава;
    ГРБС=hГРБС;
 fi;
 СимволРасшифр=fСимволРасшифр;
 КакБО=fКакБО;
end;

Proc ЗаполнитьКлиента (vRec: Record);
var new:l;
 if vRec=nil: new=true; vRec=Раб.Бюджет2005.НашРекв; fi;
 if not vRec=nil:
    Рекв=vRec;
    if Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр="":
       Глава=Рекв.РПО_ППП;
       ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
      else
       Глава="";
       ГРБС=Рекв.Учредители;
    fi;
    if not new or ФИОРук="":
       ДолжнРук=Рекв.ДолжнРук;
       ФИОРук=Рекв.ФИОРук;
    fi;
    if not new or (ДолжнБух="" or ФИОБух=""):
       ДолжнБух=Рекв.ДолжнБух;
       ФИОБух=Рекв.ФИОБух;
    fi;
    Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
    Призн_ЛС=РАБ.Бюджет2005.БанкВПризн(Банк);
 fi;
 if Глава="" and (Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр=""):
    Глава=hГлава;
    ГРБС=hГРБС;
 fi;
 if ГРБС="" and (Рекв.РПО_ТипУчр="АУ" or Рекв.РПО_ТипУчр="БУ"):
    ГРБС=hГРБС;
 fi;
end;

Proc РасчетГЭК;
var Rec: Record;
var Crd: String;
var n:i;
var Flag:L;
 nГЭК=0;
 Crd=SelfCrd;
 Rec=Current;
 if not Crd="" and not Rec=nil:
    nГЭК=Max(Раб.Вспом.Сканер.ЧитатьГЭК(Crd,RecordToInteger(Rec),"jpg",True),0);
    ГЭКCrd=Crd;
    ГЭКRec=Rec;
 fi;
end;

Func ИстВБух (aИст:S):S;
 if  aИст="3": ^"1";
    |aИст="4": ^"2";
    |aИст="5": ^"3";
    |aИст="6": ^"";
 fi;
 ^aИст;
end;

Func ВзятьКБК (aКБК:S; aТипКБК:S; aЗнач:S):S;
var tmp:S;
 if aКБК="" or aТипКБК="": ^""; fi;
 if aТипКБК="10":
    tmp=SubStr(aКБК,1,3)+"."+SubStr(aКБК,4,4)+"."+SubStr(aКБК,8,7)+"."+SubStr(aКБК,15,3)+"."+SubStr(aКБК,18,3);
    aТипКБК="КР";
   |aТипКБК="20":
    tmp=SubStr(aКБК,1,3)+"."+SubStr(aКБК,4,1)+"."+SubStr(aКБК,5,2)+"."+SubStr(aКБК,7,5)+"."+SubStr(aКБК,12,2)+"."+SubStr(aКБК,14,4)+"."+SubStr(aКБК,18,3);
    aТипКБК="КД";
   |aТипКБК="31" or aТипКБК="32":
    tmp=SubStr(aКБК,1,3)+"."+SubStr(aКБК,4,2)+"."+SubStr(aКБК,6,2)+"."+SubStr(aКБК,8,2)+"."+SubStr(aКБК,10,2)+"."+SubStr(aКБК,12,2)+"."+SubStr(aКБК,14,4)+"."+SubStr(aКБК,18,3);
    aТипКБК="КИФД";
   |True: ^"";
 fi;
 ^Раб.Бюджет2005.ВзятьКодКБК(tmp,aТипКБК,aЗнач,False);
end;

Proc ПолучитьДопАн(Iter:I);
var Справ,ПризнБК,ПризнКОСГУ,tmp,ВД_,БК_,КОСГУ_,СчД_,СчК_:S;
var Flag:L;
 tmp=""; СчД_=""; СчК_="";
 if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
    ВД_=ИстВБух(Расшифр[Iter].Ист);
    БК_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
    КОСГУ_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
    if ВД_="1": СчД_=БК_+"."+ВД_+".501.13."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_;
      |not ВД_="3": СчД_=БК_+"."+ВД_+".506.10."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_;
    fi;
    if not Name_S(СчД_)=" " and not Name_S(СчК_)=" ": tmp="|"+СчД_+"|"+СчК_; fi;
 fi;
 if not Расшифр[Iter].КБК="" and (not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" "):
    Справ=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре+tmp,0,"");
    ПризнБК="";
    if Расшифр[Iter].ТипКБК="10":
       if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","ФКР.*","")="":
          ПризнБК="ФКР.";
       fi;
      |Расшифр[Iter].ТипКБК="20":
       if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КД.*","")="":
          ПризнБК="КД.";
       fi;
      |Расшифр[Iter].ТипКБК="31" or Расшифр[Iter].ТипКБК="32":
       if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КИФД.*","")="":
          ПризнБК="КИФД.";
       fi;
    fi;
    if not ПризнБК="" and not Match(Расшифр[Iter].КБК,"00000000000000000???"):
       ПризнБК=ПризнБК+ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
       Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",ПризнБК,"ФКР.*|КД.*|КИФД.*","|");
    fi;
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
       ПризнКОСГУ="КОСГУ."+ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
       tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн," ","КОСГУ.*","");
       if not Match(tmp,ПризнКОСГУ+"!"):
          Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",ПризнКОСГУ,"КОСГУ.*","|");
       fi;
    fi;
 fi;
end;

Proc ОбновитьПризн (Iter:I);
var tmp,ВД_,БК_,КОСГУ_,СчД_,СчК_:S;
var n1,n2:i;
 if Iter=-1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 for Iter=n1..n2 do
  tmp=""; СчД_=""; СчК_="";
  if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
     ВД_=ИстВБух(Расшифр[Iter].Ист);
     БК_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
     КОСГУ_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     if ВД_="1": СчД_=БК_+"."+ВД_+".501.13."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_;
       |not ВД_="3": СчД_=БК_+"."+ВД_+".506.10."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_;
     fi;
     if not Name_S(СчД_)=" " and not Name_S(СчК_)=" ": tmp="|"+СчД_+"|"+СчК_; fi;
  fi;
  if (not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" "):
     tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре+tmp,0,"");
     Расшифр[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].Призн," ",tmp,"|");
     ПолучитьДопАн(Iter);
  fi;
 od;
end;

Proc ОбновитьСч (Iter:I);
var n1,n2,Iter_:i;
var ВД,БК,КОСГУ,Гл:S;
 if Расшифр[Iter].Ист="" or (not Расшифр[Iter].Ист="5" and Расшифр[Iter].КБК="") or Расшифр[Iter].Ист="6": Exit; fi;
 Iter_=Iter;
 if Iter=-1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 Раб.КСА.Начать;
 for Iter=n1..n2 do
  БК=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
  КОСГУ=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
  ГЛ=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"ППП");
  ВД=ИстВБух(Расшифр[Iter].Ист);
  Расшифр[Iter].СчДеб=БК+"."+ВД+".210.03.560";
  if ВД="1" and not БК="": Расшифр[Iter].СчДеб=БК+".1.210.03.560"; Расшифр[Iter].СчКре=БК+".1.304.05."+КОСГУ;
    |ВД="2" and not БК="": Расшифр[Iter].СчДеб=БК+".2.210.03.560"; Расшифр[Iter].СчКре=ГЛ+".01.05.02.01.01.0000.2.201.11.610";
    |ВД="3" and not Глава="": Расшифр[Iter].СчДеб=Глава+".0000.0000000.000.3.210.03.560"; Расшифр[Iter].СчКре=Глава+".01.05.02.01.01.0000.3.201.11.610";
  fi;
  if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
     if ВД="1": Раб.КСА.Добавить(БК+"."+ВД+".501.13."+КОСГУ); Раб.КСА.Добавить(БК+"."+ВД+".502.11."+КОСГУ);
       |not ВД="3": Раб.КСА.Добавить(БК+"."+ВД+".506.10."+КОСГУ); Раб.КСА.Добавить(БК+"."+ВД+".506.10."+КОСГУ);
     fi;
  fi;
  Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
  Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True): 
    Message("Добавление счетов завершено");
 fi;
 ОбновитьПризн(Iter_);
end;

Func ВыборЭК(aТип:S; hЭК:S):S;
var z:i;
var tmp,tmp2:s;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 if aТип="10": tmp2=Раб.Бюджет2005.МаскаРасхКОСГУ;
   |aТип="20": tmp2=Раб.Бюджет2005.МаскаДоходКОСГУ;
   |aТип="31" or aТип="32": tmp2=Раб.Бюджет2005.МаскаДефицитКОСГУ;
 fi;
 for Sign tmp=tmp2,Sort do
  tmp=SubStr(tmp,7,3);
  z=SearchInArray(Buf,tmp,True);
  if z=-1:
     z=InsertInArraySort(Buf,tmp);
     InsertInArray(Buf2,z,tmp+" --"+Name_A("КОСГУ."+tmp));
  fi;
 od;
 z=Alternate("Выбор ЭК",Buf2,-1,SearchInArray(Buf,hЭК,True),12);
 if z=0: ^""; fi;
 if aТип="10": hЭКР=Buf[z];
   |aТип="20": hЭКД=Buf[z];
   |aТип="31" or aТип="32": hЭКИФД=Buf[z];
 fi;
 ^Buf[z];
end;

Func ПроверитьКакБО(Full:L; Msg:L):L;
var Iter:I;
var ВД_,БК_,КОСГУ_,СчД_,СчК_:S;
var Flag:L;
 RefreshAna;
 if Расшифр[1].Ист="5": if Msg: Message("Для вида средств ("+Ист_[1]+") принятое (бюджетное) обязательство не предусмотрено",mtError); Template.Field="Ист_"; fi; ^False; fi;
 if not БО=nil or (not Призн_БО="БО.000" and not Призн_БО=""): if Msg: Message("Заявка уже содержит информацию об исполнении принятого (бюджетного) обязательства "+Призн_БО,mtError); Template.Field="Призн_БО"; fi; ^False; fi;
 if Name_A("БО.000")=" ": if Msg: Message("Неизвестный идентификатор аналитического признака (бюджетного) обязательства БО.000",mtError); fi; ^False; fi;
 if Призн_БО="": Призн_БО="БО.000"; fi;
 if Full:
    Flag=False;
    Раб.КСА.Начать;
    for Iter=1..Расшифр do
     if Расшифр[Iter].ТипКБК="10":
        Flag=True;
        ВД_=ИстВБух(Расшифр[Iter].Ист);
        БК_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
        КОСГУ_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     fi;
     if Flag:
        if ВД_="1":
           Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
           if Расшифр[Iter].ТипРасх=0: Раб.КСА.Добавить(БК_+"."+ВД_+".501.13."+КОСГУ_);
             |Расшифр[Iter].ТипРасх=1: Раб.КСА.Добавить(БК_+"."+ВД_+".503.13."+КОСГУ_);
           fi;
          |not ВД_="3":
           Раб.КСА.Добавить(БК_+"."+ВД_+".506.10."+КОСГУ_);
           Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
        fi;
     fi;
    od;
    if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
    if not Flag: 
       if Msg: Message("Принятое (бюджетное) обязательство предусмотрено только для расходов",mtError); Template.Field="КБК"; Template.Frame=1; fi;
       ^False; 
    fi;
    for Iter=1..Расшифр do
     ВД_=ИстВБух(Расшифр[Iter].Ист);
     БК_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
     КОСГУ_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     if ВД_="1":
        if Расшифр[Iter].ТипРасх=0: СчД_=БК_+"."+ВД_+".501.13."+КОСГУ_;
          |Расшифр[Iter].ТипРасх=1: СчД_=БК_+"."+ВД_+".503.13."+КОСГУ_;
          |True: СчД_="";
        fi;
        СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_;
       |not ВД_="3":
        СчД_=БК_+"."+ВД_+".506.10."+КОСГУ_;
        СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_;
     fi;
     if Name_S(СчД_)=" ": if Msg: Message("Неизвестный идентификатор счета "+СчД_,mtError); Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if Name_S(СчК_)=" ": if Msg: Message("Неизвестный идентификатор счета "+СчК_,mtError); Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if not Correspond(СчД_,СчК_): if Msg: Message("Счета не могут корреспондировать "+СчД_+"/"+СчК_,mtError);  Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if Msg:
        if Раб.Бюджет.ПроверитьПризнакиОбязательные(СчД_,СчК_,Расшифр[Iter].Призн,ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
        if Раб.Бюджет.ПроверитьПризнакиСвязанные(СчД_,СчК_,Расшифр[Iter].Призн,ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter;  ^False; fi;
       else
        if not Раб.Бюджет.ПроверитьПризнаки(СчД_,СчК_,Расшифр[Iter].Призн,ИсклПризн): ^False; fi;
     fi;
    od;
 fi;
 ^True;
end;

Func Проверить:L;
var Iter,z:I;
var ВД_,БК_,КОСГУ_:S;
var Flag:L;
 RefreshAna;
 Flag=Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр="";
 if НомерДок="": Message("Заполните номер заявки",mtError); Template.Field="НомерДок"; ^False; fi;
 if ДатаДок=1.1.100: Message("Заполните дату заявки",mtError); Template.Field="ДатаДок"; ^False; fi;
 if Рекв=nil or Клиент="": Message("Заполните наименование клиента",mtError); Template.Field="Клиент"; ^False; fi;
 if Банк=nil: Message("Заполните поле 'Федеральное казначейство, орган Федерального казначейства'",mtError); Template.Field="Банк.РПО_ОФК_Имя"; ^False; fi;
 if Банк.РПО_КодБюдж="1" and Рекв.РПО_КБП="": Message("Заполните код клиента по сводному реестру",mtError); Template.Field="Рекв.РПО_КБП"; ^False; fi;
 if Банк.РПО_ЛСчет="": Message("Заполните номер лицевого счета",mtError); Template.Field="Банк.РПО_ЛСчет"; ^False; fi;
 if Призн_ЛС="": Message("Введите аналитический признак лицевого счета",mtError); Template.Field="Призн_ЛС"; ^False; fi;
 if Name_A(Призн_ЛС)=" ": Message("Неизвестный идентификатор аналитического признака лицевого счета '"+Призн_ЛС+"'",mtError); Template.Field="Призн_ЛС"; ^False; fi;
 if Глава="" and Flag: Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 if not Глава="" and not Flag: Message("Глава по БК для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="Глава"; ^False; fi;
 if ГРБС="": 
    if Flag:
       Message("Заполните наименование главного распорядителя бюджетных средств, главного администратора источников финансирования дефицита бюджета",mtError);
      else
       Message("Заполните наименование органа, осуществляющего функции и полномочия учредителя",mtError);
    fi;
    Template.Field="ГРБС"; 
    ^False;
 fi;
 if Банк.РПО_НаимБюдж="" and Flag: Message("Заполните наименование бюджета",mtError); Template.Field="Банк_РПО_НаимБюдж"; ^False; fi;
 if Банк.РПО_КодБюдж="": Message("Заполните код бюджета",mtError); Template.Field="Банк_РПО_НаимБюдж"; ^False; fi;
 if ФинОрган="" and Flag: Message("Заполните поле 'Финансовый орган'",mtError); Template.Field="ФинОрган"; ^False; fi;
 if Банк.РПО_ОФК_Код="": Message("Заполните код федерального казначейства, органа федерального казначейства",mtError); Template.Field="Банк.РПО_ОФК_Код"; ^False; fi;
 if ДатаИспол=1.1.100 and ДатаДок<10.08.2009: Message("Заполните предельную дату исполнения",mtError); Template.Field="ДатаИспол"; ^False; fi;
 if ДатаИспол<ДатаДок and not ДатаИспол=1.1.100: Message("Предельная дата исполнения не может быть ранее даты документа",mtError); Template.Field="ДатаИспол"; ^False; fi;
 if not Flag:
    if not Банк_РПО_НаимБюдж="": Message("Наименование бюджета для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="Банк_РПО_НаимБюдж"; ^False; fi;
    if not ФинОрган="": Message("Финансовый орган для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="ФинОрган"; ^False; fi;
    if not ДатаИспол=1.1.100: Message("Предельная дата исполнения не заполняется для бюджетного (автономного) учреждения",mtError); Template.Field="ДатаИспол"; ^False; fi;
    if not НомерБО="": Message("Учетный номер обязательства для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="НомерБО"; ^False; fi;
 fi;
 if not Призн_БО="" and Name_A(Призн_БО)=" ": Message("Неизвестный идентификатор аналитического признака бюджетного обязательства '"+Призн_БО+"'",mtError); Template.Field="Призн_БО"; ^False; fi;
 if ДолжнРук="" and ДатаДок<10.08.2009: Message("Заполните должность руководителя",mtError); Template.Field="ДолжнРук"; ^False; fi;
 if ФИОРук="": Message("Заполните ФИО руководителя",mtError); Template.Field="ФИОРук"; ^False; fi;
 if ДолжнБух="": Message("Заполните должность бухгалтера",mtError); Template.Field="ДолжнБух"; ^False; fi;
 if ФИОБух="": Message("Заполните ФИО бухгалтера",mtError); Template.Field="ФИОБух"; ^False; fi;
 if ДатаПодписи=1.1.100: Message("Заполните дату подписи",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 if ДатаПодписи<ДатаДок: Message("Дата подписи не может быть ранее даты документа",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 УдалитьПустыеСтроки;
 --
 if Чек=0: Message("Заполните реквизиты чека",mtError); Template.Name="S4"; Template.Field="Сум"; Template.Frame=1; ^False; fi;
 for Iter=1..Чек do
  if Чек[Iter].Сум=0: Message("Введите сумму чека",mtError); Template.Name="S4"; Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
  if Чек[Iter].Номер="": Message("Введите номер чека",mtError); Template.Name="S4"; Template.Field="Номер"; Template.Frame=Iter; ^False; fi;
  if Чек[Iter].Серия="": Message("Введите серию чека",mtError); Template.Name="S4"; Template.Field="Серия"; Template.Frame=Iter; ^False; fi;
  if Чек[Iter].Дата=1.1.100: Message("Введите дату чека",mtError); Template.Name="S4"; Template.Field="Дата"; Template.Frame=Iter; ^False; fi;
  if Чек[Iter].Срок=1.1.100: Message("Введите срок действия чека",mtError); Template.Name="S4"; Template.Field="Срок"; Template.Frame=Iter; ^False; fi;
  if Чек[Iter].Символ="": Message("Введите символ кассового плана",mtError); Template.Name="S4"; Template.Field="Символ"; Template.Frame=Iter; ^False; fi;
 od;
 if Расшифр=0: Message("Заполните расшифровку заявки на получение наличных денег",mtError); Template.Field="Ист_"; Template.Frame=1; ^False; fi;
 ClearVariable(Buf);
 ClearVariable(BufN);
 for Iter=1..Расшифр do
  if Расшифр[Iter].Ист="": Message("Заполните наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; Template.Frame=Iter; ^False; fi;
  if Банк.РПО_КодБюдж="6" and not Расшифр[Iter].Ист="6": Message("Для НУБП наименование вида средств должно иметь значение 'средства юридических лиц'",mtError); Template.Field="Ист_"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].Ист="5" and not Расшифр[Iter].КБК="":   Message("Для данного наименования вида средств заполнение кода по БК не требуется",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
  if Round(Расшифр[Iter].Сум,2)=0: Message("Заполните сумму",mtError); Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
  if СимволРасшифр:
     if Расшифр[Iter].Символ="":   Message("Выберите символ кассового плана",mtError); Template.Field="Символ "; Template.Frame=Iter; ^False; fi;
     if SearchInArray(Чек[].Символ,Расшифр[Iter].Символ)=-1: Message("Символ кассового плана ("+Расшифр[Iter].Символ+") не найден в реквизитах чека",mtError); Template.Field="Символ "; Template.Frame=Iter; ^False; fi;
     z=SearchInArray(Buf,Расшифр[Iter].Символ,True);
     if z=-1:
        z=InsertInArraySort(Buf,Расшифр[Iter].Символ);
        InsertInArray(BufN,z,Расшифр[Iter].Сум);
       else
        BufN[z]=BufN[z]+Расшифр[Iter].Сум;
     fi;
  fi;
  if Match(Банк.РПО_ЛСчет,"41*") and Расшифр[Iter].ДопКл="": Message("Заполните код цели субсидии (субвенции)",mtError); Template.Field="ДопКл"; Template.Frame=Iter; ^False; fi;
 od;
 --
 if СимволРасшифр:
    for Iter=1..Чек do
     z=SearchInArray(Buf,Чек[Iter].Символ,True);
     if not z=-1:
        if not Round(BufN[z],2)=Round(Чек[Iter].Сум,2): Message("Сумма чека ("+Format("%.2N",Чек[Iter].Сум)+") по символу кассового плана ("+Buf[z]+") не равна сумме расшифровки ("+Format("%.2N",BufN[z])+")",mtError); Template.Field="Символ"; Template.Frame=Iter; ^False; fi;
     fi;
    od;
 fi;
 --
 Раб.КСА.Начать;
 for Iter=1..Расшифр do
  Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
  Раб.КСА.Добавить(Расшифр[Iter].СчКре);
  Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","ВД",True)+".ЗАБ.00."+Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","КОСГУ",False));
  Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","ВД",True)+".ЗАБ.КР."+Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","КОСГУ",False));
  if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].Ист="6" and not Расшифр[Iter].ТипКБК="20":
     ВД_=ИстВБух(Расшифр[Iter].Ист);
     БК_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
     КОСГУ_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     if ВД_="1":
        Раб.КСА.Добавить(БК_+"."+ВД_+".501.13."+КОСГУ_);
        Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
       |not ВД_="3":
        Раб.КСА.Добавить(БК_+"."+ВД_+".506.10."+КОСГУ_);
        Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
     fi;
  fi;
 od;
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
 --
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Расшифр do
  if Расшифр[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Name_S(Расшифр[Iter].СчДеб)=" ": Message("Неизвестный идентификатор счета "+Расшифр[Iter].СчДеб,mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
  if Name_S(Расшифр[Iter].СчКре)=" ": Message("Неизвестный идентификатор счета "+Расшифр[Iter].СчКре,mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
  if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): Message("Счета не могут корреспондировать "+Расшифр[Iter].СчДеб+"/"+Расшифр[Iter].СчКре,mtError);  Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиОбязательные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Расшифр[Iter].Призн,ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиСвязанные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Расшифр[Iter].Призн,ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Int(Банк.РПО_КодБюдж)<2: Расшифр[Iter].ДопКл=""; fi;
 od;
 --
 if not Round(Р1_ВсегоСум,2)=Round(Р2_ВсегоСум,2): Message("Сумма расшифровки заявки на получение наличных денег "+Str(Р2_ВсегоСум,2)+" отличается от суммы чека(ов) "+Str(Р1_ВсегоСум,2),mtError); Template.Field="Р2_ВсегоСум"; ^False; fi;
 --
 if ФИОДов="": Message("Заполните ФИО доверенного лица",mtError); Template.Field="ДолжнФИОДов"; ^False; fi;
 if ДолжнДов="": Message("Заполните должность доверенного лица",mtError); Template.Field="ДолжнФИОДов"; ^False; fi;
 if НаимДокДов="": Message("Заполните наименование документа удостоверяющего личность доверенного лица",mtError); Template.Field="НаимДокДов"; ^False; fi;
 if НомДокДов="": Message("Заполните номер документа удостоверяющего личность доверенного лица",mtError); Template.Field="НомДокДов"; ^False; fi;
 if ВыданДокДов="": Message("Заполните кем выдан документ удостоверяющий личность доверенного лица",mtError); Template.Field="ВыданДокДов"; ^False; fi;
 if ДатДокДов=1.1.100: Message("Заполните дату выдачи документа удостоверяющего личность доверенного лица",mtError); Template.Field="ДатДокДов"; ^False; fi;
 --
 if КакБО:
    if not ПроверитьКакБО(True,True): ^False; fi;
 fi;
 ^True;
end;

Func ЗаполнитьКлючДок:L;
var Flag:L;
 Flag=True;
 if FuncExists(extКлюч): 
    Flag=ExecuteFuncL(extКлюч);
    if not Flag and (Учитывать or ВБанк or Проводить):
       SkipEvent=true;
       Try
        Проводить=Flag; cbПроводить.State=Проводить;
        ВБанк=Flag;     cbВБанк.State=ВБанк;
        Учитывать=Flag; cbУчитывать.State=Учитывать;
       Finally
        SkipEvent=False;
       end;
       Оформление;
    fi;
 fi;
 ^Flag;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 fУтвДок=False;
 fСимволРасшифр=False;
 ДесятРазд=".";
 ПДИ=0;
 МаскаСчДеб="*.?.210.03.560";
 extКлюч="";
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 Оформление;
 Return False;
end;

Func Flags_OnEnter(FieldName: String; Iter: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Return False;
end;

Proc ДесятРазд_OnExit(FieldName: String; Iter: Integer);
 if ДесятРазд="": ДесятРазд="."; fi;
end;

Func РазмерШрифта_OnVerify(FieldName: String; Iter: Integer; Value: Integer): Logical;
 if Value<=2: Message("Значение не может меньше 3",mtError); ^False; fi;
 Return True;
end;

Func ПДИ_OnVerify(FieldName: String; Iter: Integer; Value: Integer): Logical;
 if Value<0: Message("Значение должно быть больше 0",mtError); ^False; fi;
 Return True;
end;

Func МаскаСчДеб_OnVerify(FieldName: String; Iter: Integer; Value: S): Logical;
var z:n;
 z=Saldo(Value,1.1.100);
 ^True;
end;

Func МаскаСчДеб_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Cur=Раб.КБК.Список("*.?.???.??.*","","СЧ9 ИГ");
 if Match(Cur,"?."): Cur=Cur+"???.??.*";
   |Match(Cur,"?.???."): Cur=Cur+"??.*";
   |Match(Cur,"?.???.??."): Cur=Cur+"*";
 fi;
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(AsString(Template.Field)),Cur,"|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: 
    Template.HideEditor(False);
    PutVariableS(AsString(Template.Field),Cur);
 fi;
 Return Cur;
end;

Func extFunc_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    if not FuncExists(Value): Message("Функция '"+Value+"' не найдена",mtError); ^False; fi;
 fi;
 Return True;
end;

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
 ОбработатьНомер(НомерДок);
end;

func НомерДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 if ДатаДок=1.1.100:
    НомерДок=Str(РАБ.ОБЛ.СледСУчетомГодаФ(SelfCrd,"Номер","ДатаДок","not UKey="+RecordToString(Current)));
   else
    НомерДок=Str(РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаДок",ДатаДок,"not UKey="+RecordToString(Current)));
 fi;
 ОбработатьНомер(НомерДок);
 ^Cur;
end;

Func ДатаДок_OnVerify(FieldName: String; Iter: Integer; Value: Date):Logical;
var prevД:D;
 prevД=ДатаДок;
 ДатаДок=Value;
 ОбработатьДату(prevД,ДатаДок);
 Return True;
end;

Proc ДатаДок_OnExit(FieldName: String; Iter: Integer);
 if not ДатаДок=1.1.100 and not ДатаПодписи=ДатаДок:
    if ДатаПодписи=1.1.100:
       ДатаПодписи=ДатаДок;
      else
       if EnqOkCancel("Изменить дату подписи с "+DateToString(ДатаПодписи)+" на "+DateToString(ДатаДок)+" ?",mtWarning)=cmOk:
          ДатаПодписи=ДатаДок;
       fi;
    fi;
 fi;
 if ПДИ>0: 
    ДатаИспол=ДатаДок+ПДИ;
    if ДатаИспол>Dat(31,12,Year(ДатаДок)): ДатаИспол=Dat(31,12,Year(ДатаДок)); fi;
 fi;
end;

Func Дата_OnLookup(Sect:S; Row:I; Col:I; Cur:S) :S;
var tmp,prevД:d;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 if Field="ДатаИспол" and not ДатаДок=1.1.100:
    tmp=Calendar(if(ДатаДок+ПДИ>Dat(31,12,Year(ДатаДок)),Dat(31,12,Year(ДатаДок)),ДатаДок+ПДИ));
   else
    tmp=Calendar;
 fi;
 if tmp=1.1.100: ^Cur; fi;
 prevД=GetVariableD(Field);
 PutVariableD(Field,tmp);
 if Field="ДатаДок":
    ОбработатьДату(prevД,tmp);
    ДатаДок_OnExit(Field,1);
 fi;
end;

Func Клиент_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент","Наше",Рекв,crdRecordOnly);
 if not Rec=nil:
    Рекв=Rec;
    ЗаполнитьКлиента(Рекв);
 fi;
 Return False;
end;

Func Призн_ЛС_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Банк=nil: Message("Заполните поле 'Федеральное казначейство, орган Федерального казначейства'",mtError); Template.Field="Банк.РПО_ОФК_Имя"; ^False; fi;
 tmp=AnaElection("ЛС.*",False,False,Призн_ЛС);
 if not tmp="":
    Призн_ЛС=tmp;
 fi;
 Return False;
end;

Func Глава_OnEnter(FieldName: String; Iter: Integer): logical;
 if Рекв.РПО_ТипУчр="БУ" or Рекв.РПО_ТипУчр="АУ": Message("Для бюджетного (автономного) учреждения данное поле не заполняется",mtError); fi;
 Return not Рекв.РПО_ТипУчр="БУ" and not Рекв.РПО_ТипУчр="АУ";
end;

Proc Глава_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
 tmp=GetVariableS(FieldName);
 if not tmp="":
    PutVariableS("h"+FieldName,tmp);
    if FieldName="Глава": 
       ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
       hГРБС=ГРБС;
    fi;
    if Рекв.РПО_ТипУчр="АУ" or Рекв.РПО_ТипУчр="БУ": Настр(True); fi;
 fi;
end;

Func Глава_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 if Рекв.РПО_ТипУчр="АУ" or Рекв.РПО_ТипУчр="БУ":
    if Рекв=nil: Message("Выберите клиента",mtError); Template.Field="Клиент"; ^Cur; fi;
    ExecuteProc("Инфо.Контрагент.Вызвать",Рекв,"РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП","Учредители",0);
    ГРБС=Рекв.Учредители;
   else
    Rec=OpenCardFile("РПО_БЮДЖ_КЛАСС_000","NAME_VOC='ППП2006'",nil,crdRecordOnly);
    if not Rec=nil:
       Глава=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"CODE");
       ГРБС=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"TXT");
       hГлава=Глава;
       hГРБС=ГРБС;
    fi;
 fi;
 Return Cur;
end;

Proc Рекв_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Bln,Prefix:S;
var Rec: Record;
 if Double:
    Field=AsString(Template.Field);
    if Match(Field,"Рекв.*") and Рекв=nil: Message("Выберите клиента",mtError); Template.Field="Клиент"; Exit;
    fi;
    Prefix=SubStr(Field,1,Pos(".",Field)-1); Field=SubStr(Field,Pos(".",Field)+1,255);
    ExecuteProc("Инфо.Контрагент.Вызвать",GetVariableR(Prefix),Bln,Field,0);
 fi;
end;

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Prefix:S;
var Rec: Record;
 if Double:
    Field=AsString(Template.Field);
    if (Match(Field,"Банк.*") or Field="ФинОрган") and Банк=nil: Message("Выберите банковские реквизиты",mtError); Template.Field="Банк.РПО_ОФК_Имя"; Exit;
    fi;
    if Field="ФинОрган": Prefix="Банк"; Field="РПО_ФО_Наим1";
      |True: Prefix=SubStr(Field,1,Pos(".",Field)-1); Field=SubStr(Field,Pos(".",Field)+1,255);
    fi;
    ExecuteProc("Инфо.БанкСчета.Вызвать",GetVariableR(Prefix),Field,0);
 fi;
end;

Func Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Рекв=nil: Message("Выберите клиента",mtError); Template.Field="Клиент"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Рекв),Банк,crdRecordOnly);
 if not Rec=nil:
    Банк=Rec;
    Призн_ЛС=Раб.Бюджет2005.БанкВПризн(Банк);
 fi;
 Оформление;
 Return False;
end;

Proc НомерБО_OnExit(FieldName: String; Iter: Integer);
 БО=nil;
 Призн_БО="";
end;

Func НомерБО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Crd,F:S;
 Template.HideEditor(False);
 if Рекв=nil: Message("Введите наименование клиента",mtError);  Template.Field="Клиент"; ^Cur; fi;
 Crd="РПО_СВЕД_БО";
 F="Учитывать and Рекв="+RecordToString(Рекв);
 if БО=nil:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор обязательства",Crd,"НомерДок|ДатаДок:D|РегНомер","Номер документа|Дата документа|Регистрационный номер",F);
   else
    Rec=OpenCardFile(Crd,F,БО);
 fi;
 if not Rec=nil:
    БО=Rec;
    НомерБО=if(БО.Рег,БО.РегНомер,"");
    Призн_БО=CardFileRecSign(Crd,"Признак","БО",БО,"");
 fi;
 Return Cur;
end;

Func ПризнБО_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var tmp,БО_:S;
var Rec: Record;
 tmp=Призн_БО;
 if tmp="":
    tmp=CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",БО,"");
 fi;
 RefreshAna;
 tmp=AnaElection("БО.*",False,False,tmp);
 if not tmp="":
    Призн_БО=tmp;
    if SignCardFile(Призн_БО,True)=Раб.Договор.crdБО:
       БО=SignToRecord(Призн_БО,False);
       НомерБО=if(БО.Рег,БО.РегНомер,"");
      else
       БО=nil;
       НомерБО="";
    fi;
 fi;
 Return False;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Rec:Record;
var v1,v2:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    if Field="ДолжнРук" or Field="ФИОРук": ДолжнРук=v1; ФИОРук=v2;
      |Field="ДолжнБух" or Field="ФИОБух": ДолжнБух=v1; ФИОБух=v2;
    fi;
 fi;
 Return Cur;
end;

Func ОчиститьР1_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if EnqOkCancel("Очистить раздел 1 ?",mtWarning)=cmOk:
       ClearVariable(Чек);
    fi;
 fi;
 Return False;
end;

Func ГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var Name:S;
 РасчетГЭК;
 if nГЭК=0:
    Message("Документ не был отсканирован"); 
   else
    Раб.Вспом.Сканер.Вызвать("Сканирование документа - основания",ГЭКCrd,RecordToInteger(ГЭКRec),"jpg",if(FieldName="nГЭК_",Учитывать,True),True);
 fi;
 Return False;
end;

Func РедГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="СканГЭК" and СканГЭК="":
    Template.Field="РедГЭК";
   else
    РасчетГЭК;
    if Учитывать and nГЭК=0:
       Message("Документ не был отсканирован");
      else
       if not CurrentState=crdusUnmodified:
          EditorApply;
       fi;
       Раб.Вспом.Сканер.Вызвать("Сканирование документа - основания",SelfCrd,RecordToInteger(Current),"",Учитывать,FieldName="РедГЭК");
    fi;
    РасчетГЭК;
 fi;
 Return False;
end;

Func ЧекДата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Iter:I;
var tmp:D;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 tmp=Calendar;
 if not tmp=1.1.100:
    PutVariableD("Чек["+Str(Iter)+"]."+Field,tmp);
 fi;
 Return Cur;
end;

Func Символ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,Iter:i;
 НеПустаяТаблица("Чек");
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 ClearVariable(Buf);
 Buf[1] ="40 --Выдачи на заработную плату и выплаты социального характера";
 Buf[2] ="41 --Выдачи на стипендии";
 Buf[3] ="42 --Выдачи на расходы, не относящиеся к фонду заработной платы и выплатам социального характера";
 Buf[4] ="46 --Выдачи на закупку сельскохозяйственных продуктов";
 Buf[5] ="47 --Выдачи на операции игорного бизнеса";
 Buf[6] ="50 --Выдачи на выплату пенсий, пособий и страховых возмещений";
 Buf[7] ="51 --Выдачи со счетов физических лиц";
 Buf[8] ="53 --Прочие выдачи";
 Buf[9] ="54 --Выдачи займов и кредитов";
 Buf[10]="55 --Выдачи со счетов по вкладам (депозитам) физических лиц";
 Buf[11]="56 --Выдачи по переводам (без открытия счета переводополучателям)";
 Buf[12]="57 --Выдачи при покупке у физических лиц наличной иностранной валюты";
 Buf[13]="58 --Выдачи со счетов индивидуальных предпринимателей";
 Buf[14]="59 --Выдачи организациям Федерального агентства связи";
 Buf[15]="60 --Выдачи на операции с государственными и другими ценными бумагами (за исключением векселей)";
 Buf[16]="61 --Выдачи на операции с векселями";
 Buf[17]="62 --Выдачи по операциям с использованием платежных карт";
 n=Alternate("Символ кассового плана",Buf,-1,1,12);
 if not n=0:
    Чек[Iter].Символ=SubStr(Buf[n],1,2);
 fi;
 Return Cur;
end;

Func ОчиститьР2_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if EnqOkCancel("Очистить раздел 2 ?",mtWarning)=cmOk:
       ClearVariable(Расшифр);
    fi;
 fi;
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var S:S;
var Iter_:I;
 if not Учитывать:
    s=AsString(Template.Name);
    if s="S4": Iter_=InsertFrame(Чек,Iter+1);
               if Iter>0:
                  Чек[Iter_].Номер=Чек[Iter].Номер;
                  Чек[Iter_].Серия=Чек[Iter].Серия;
                  Чек[Iter_].Дата=Чек[Iter].Дата;
                  Чек[Iter_].Срок=Чек[Iter].Срок;
               fi;
      |s="S8": Iter_=InsertFrame(Расшифр,Iter+1);
    fi;
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
var S:S;
 if not Учитывать:
    s=AsString(Template.Name);
    if s="S4": DeleteFrame(Чек,Iter);
      |s="S8": DeleteFrame(Расшифр,Iter);
    fi;
 fi;
 Return False;
end;

Func AA_OnEnter(FieldName: String; Iter: Integer): logical;
var Iter_:I;
 if not Учитывать:
    Iter_=Iter;
    Iter=InsertFrame(Расшифр,Iter+1);
    Расшифр[Iter].Ист=Расшифр[Iter_].Ист;
    Расшифр[Iter].ТипКБК=Расшифр[Iter_].ТипКБК;
    Расшифр[Iter].КБК=Расшифр[Iter_].КБК;
    Расшифр[Iter].ДопКл=Расшифр[Iter_].ДопКл;
    Расшифр[Iter].Сум=Расшифр[Iter_].Сум;
    Расшифр[Iter].НазнПл=Расшифр[Iter_].НазнПл;
    Расшифр[Iter].Примеч=Расшифр[Iter_].Примеч;
    Расшифр[Iter].СчДеб=Расшифр[Iter_].СчДеб;
    Расшифр[Iter].СчКре=Расшифр[Iter_].СчКре;
    Расшифр[Iter].Призн=Расшифр[Iter_].Призн;
    Расшифр[Iter].Символ=Расшифр[Iter_].Символ;
 fi;
 Return False;
end;

Func Ист_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 НеПустаяТаблица("Расшифр");
 ClearVariable(Buf);
 Buf[1]="1 -- средства бюджета";
 Buf[2]="2 -- средства от приносящей доход деятельности";
 Buf[3]="3 -- средства дополнительного бюджетного финансирования";
 Buf[4]="4 -- средства для финансирования мероприятий по оперативно-розыскной деятельности";
 Buf[5]="5 -- средства, поступающие во временное распоряжение "+if(f13н,"казенных учреждений","бюджетных учреждений");
 Buf[6]="6 -- средства юридических лиц";
 n=Alternate("Вид средств",Buf,-1,Int(Расшифр[Iter].Ист),12);
 if not n=0:
    if not Расшифр[Iter].Ист=Str(n) or n=5: Расшифр[Iter].ТипКБК=""; Расшифр[Iter].КБК=""; fi;
    Расшифр[Iter].Ист=Str(n);
    ОбновитьСч(Iter);
 fi;
 Return False;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var КОСГУ_,КБК_,ТипКБК_,tmp:S;
var Flag:L;
 НеПустаяТаблица("Расшифр");
 if Глава="" and (Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр=""): Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 if Расшифр[Iter].Ист="": Message("Выберите наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].Ист="5": Message("Для средств поступающих во временное распоряжение, указывать КБК не требуется");^False; fi;
 if Расшифр[Iter].Ист="6":
    КОСГУ_=AnaElection("КОСГУ.???!&~КОСГУ.000!",False,False,hКОСГУ);
    if not КОСГУ_="":
       hКОСГУ=КОСГУ_;
       КОСГУ_=SubStr(КОСГУ_,7,3);
       if Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаРасхСч): ТипКБК_="10";
         |Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаДоходСч): ТипКБК_="20";
         |Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаДефицитСч): ТипКБК_="31";
         |True: ТипКБК_="10";
       fi;
       Flag=not SubStr(Расшифр[Iter].КБК,17,3)=КОСГУ_;
       Расшифр[Iter].КБК="00000000000000000"+КОСГУ_;
       Расшифр[Iter].ТипКБК=ТипКБК_;
    fi;
   else
    if Расшифр[Iter].КБК="":
       КБК_=hКБК;
      else
       if Расшифр[Iter].ТипКБК="10": КБК_="ФКР."+SubStr(Расшифр[Iter].КБК,1,3)+"."+SubStr(Расшифр[Iter].КБК,4,4)+"."+SubStr(Расшифр[Iter].КБК,8,7)+"."+SubStr(Расшифр[Iter].КБК,15,3);
         |Расшифр[Iter].ТипКБК="20": КБК_="КД."+SubStr(Расшифр[Iter].КБК,1,3)+"."+SubStr(Расшифр[Iter].КБК,4,1)+"."+SubStr(Расшифр[Iter].КБК,5,2)+"."+SubStr(Расшифр[Iter].КБК,7,5)+"."+SubStr(Расшифр[Iter].КБК,12,2)+"."+SubStr(Расшифр[Iter].КБК,14,4);
         |Расшифр[Iter].ТипКБК="31" or Расшифр[Iter].ТипКБК="32": КБК_="КИФД."+SubStr(Расшифр[Iter].КБК,1,3)+"."+SubStr(Расшифр[Iter].КБК,4,2)+"."+SubStr(Расшифр[Iter].КБК,6,2)+"."+SubStr(Расшифр[Iter].КБК,8,2)+"."+SubStr(Расшифр[Iter].КБК,10,2)+"."+SubStr(Расшифр[Iter].КБК,12,2)+"."+SubStr(Расшифр[Iter].КБК,14,4);
       fi;
       КОСГУ_=SubStr(Расшифр[Iter].КБК,18,3);
    fi;
    if Расшифр[Iter].Ист="1": tmp="(ФКР."+Глава+".????.???????.???|КД."+Глава+".?.??.?????.??.????|КИФД."+Глава+".??.??.??.??.??.????)&~ФКР.???.0000.0000000.000";
      |Расшифр[Iter].Ист="2": tmp="ФКР."+Глава+".0000.0000000.000|КД."+Глава+".?.??.?????.??.????|КИФД."+Глава+".??.??.??.??.??.????"+if(Int(Банк.РПО_КодБюдж)>1,"|ФКР."+Глава+".????.???????.???","");
      |Расшифр[Iter].Ист="6": tmp="ФКР.000.0000.0000000.000";
      |True: tmp="ФКР."+Глава+".????.???????.???|КД."+Глава+".?.??.?????.??.????|КИФД."+Глава+".??.??.??.??.??.????";
    fi;
    КБК_=AnaElection(tmp,False,False,КБК_);
    if not КБК_="":
       hКБК=КБК_;
       if Match(КБК_,"ФКР.*"): ТипКБК_="10"; if КОСГУ_="": КОСГУ_=hЭКР; fi;
         |Match(КБК_,"КД.*"): ТипКБК_="20"; if КОСГУ_="": КОСГУ_=hЭКД; fi;
         |Match(КБК_,"КИФД.???.01.*"): ТипКБК_="31"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
         |Match(КБК_,"КИФД.???.02.*"): ТипКБК_="32"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
       fi;
       КОСГУ_=ВыборЭК(ТипКБК_,КОСГУ_);
       if КОСГУ_="": ^False; fi;
       КБК_=SubStr(КБК_,Pos(".",КБК_)+1,255);
       КБК_=Раб.Формат.ReplaceSubstr(КБК_,".","");
       Flag=not SubStr(Расшифр[Iter].КБК,17,3)=КОСГУ_;
       Расшифр[Iter].КБК=КБК_+КОСГУ_;
       Расшифр[Iter].ТипКБК=ТипКБК_;
    fi;
 fi;
 if Flag:
    if Раб.Вспом.Основание.ЕстьЗаписи("Документы.Банк.Заявка_Нал.НазнПл",SubStr(Расшифр[Iter].КБК,15,3)+"."+SubStr(Расшифр[Iter].КБК,18,3))=0:
       Расшифр[Iter].НазнПл=Раб.Бюджет.НаимКБК("КОСГУ2006",КОСГУ_);
      else
       tmp=Раб.Вспом.Основание.Выполнить2("Документы.Банк.Заявка_Нал.НазнПл",SubStr(Расшифр[Iter].КБК,15,3)+"."+SubStr(Расшифр[Iter].КБК,18,3));
       if not tmp="":
          Расшифр[Iter].НазнПл=tmp;
       fi;
    fi;
 fi;
 ОбновитьСч(Iter);
 Return False;
end;

Proc КБК_OnExit(FieldName: String; Iter: Integer);
 Расшифр[Iter].ТипКБК="";
end;

Func СчДеб_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица("Расшифр");
 if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 Раб.КСА.Начать;
 Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
 Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов завершено"); fi;
 if Расшифр[Iter].СчДеб="": tmp=hСчДеб; else tmp=Расшифр[Iter].СчДеб; fi;
 tmp=AccountElection(МаскаСчДеб,False,tmp);
 if not tmp="":
    Расшифр[Iter].СчДеб=tmp;
    if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): Расшифр[Iter].СчКре=""; fi;
    hСчДеб=tmp;
    ОбновитьПризн(Iter);
 fi;
 Return False;
end;

Func СчКре_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица("Расшифр");
 if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 Раб.КСА.Начать;
 Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
 Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов завершено"); fi;
 if Расшифр[Iter].СчКре="": tmp=hСчКре; else tmp=Расшифр[Iter].СчКре; fi;
 tmp=PickCorrAccount(Расшифр[Iter].СчДеб,False,tmp);
 if not tmp="":
    Расшифр[Iter].СчКре=tmp;
    hСчКре=tmp;
    ОбновитьПризн(Iter);
 fi;
 Return False;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
var ВД_,БК_,КОСГУ_:S;
 НеПустаяТаблица("Расшифр");
 if Name_S(Расшифр[Iter].СчКре)=" ": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 if Name_S(Расшифр[Iter].СчДеб)=" ": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 tmp="";
 if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
    ВД_=ИстВБух(Расшифр[Iter].Ист);
    БК_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
    КОСГУ_=ВзятьКБК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
    if ВД_="1": tmp="|"+БК_+"."+ВД_+".501.13."+КОСГУ_+"|"+БК_+"."+ВД_+".502.11."+КОСГУ_;
      |not ВД_="3": tmp="|"+БК_+"."+ВД_+".506.10."+КОСГУ_+"|"+БК_+"."+ВД_+".502.11."+КОСГУ_;
      |true   : tmp="";
    fi;
 fi;
 tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре+tmp,0,ИсклПризн);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 КОСГУ_="КОСГУ."+SubStr(Расшифр[Iter].КБК,18,3)+"!";
 tmp=Раб.Формат.ReplaceSubStr(tmp,"КОСГУ.*",КОСГУ_);
 tmp=AnaElection(tmp,False,False,hПризн);
 if not tmp="":
    Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    if Match(tmp,"КОСГУ!") and not Name_A(tmp)="" and fНПлИзРКОСГУ:
       Расшифр[Iter].НазнПл=Name_A(tmp);
    fi;
 fi;
 Return False;
end;

Proc Призн_OnExit(Field:S; Iter:I);
 НеПустаяТаблица("Расшифр");
 Расшифр[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(Расшифр[Iter].Призн," ","Name_A");
end;

Func НазнПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
var Iter:I;
 Template.HideEditor(False);
 НеПустаяТаблица("Расшифр");
 Iter=AsInteger(Template.Frame);
 if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^Cur; fi;
 tmp=Раб.Вспом.Основание.Выполнить2("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_НАЛ.НазнПл",SubStr(Расшифр[Iter].КБК,15,3)+"."+SubStr(Расшифр[Iter].КБК,18,3));
 if not tmp="":
    Расшифр[Iter].НазнПл=tmp;
 fi;
 Return Cur;
end;

Func Символ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 НеПустаяТаблица("Расшифр");
 ClearVariable(Buf);
 for n=1..Чек do
  if not Чек[n].Символ="": AddInArray(Buf,True,False,Чек[n].Символ); fi;
 od;
 n=Alternate("Символ кассового плана",Buf,-1,1,12);
 if not n=0:
    Расшифр[Iter].Символ=Buf[n];
 fi;
 Return False;
end;

Func ТипРасх_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 НеПустаяТаблица("Расшифр");
 if Расшифр[Iter].Ист="": Message("Выберите наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; Template.Frame=Iter; ^False; fi;
 if not Расшифр[Iter].Ист="1": Message("Указывать значение допустимо только средств бюджета",mtWarning); Template.Field="Ист_"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].КБК="" or Расшифр[Iter].ТипКБК="": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 if not Расшифр[Iter].ТипКБК="10": Message("Указывать значение допустимо только классификации расходов",mtWarning); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 ClearVariable(Buf);
 Buf[1]="ЛБО";
 Buf[2]="Ассигнования";
 n=Alternate("Выберите санкционирование расходов",Buf,-1,Расшифр[Iter].ТипРасх+1,12);
 if not n=0:
    Расшифр[Iter].ТипРасх=n-1;
 fi;
 Return False;
end;


Func ДолжнФИОДов_OnEnter(FieldName: String; Iter: Integer): logical;
var ww:i;
 Раб.Вспом.ФизЛицо.Фамилия=ExtractWord(1,ФИОДов," ");
 Раб.Вспом.ФизЛицо.Имя=ExtractWord(2,ФИОДов," ");
 Раб.Вспом.ФизЛицо.Отчество=ExtractWord(3,ФИОДов," ");
 Раб.Вспом.ФизЛицо.Должность=ДолжнДов;
 Раб.Вспом.ФизЛицо.ДокНаим=НаимДокДов;
 ww=WordsCount(НомДокДов," ");
 Раб.Вспом.ФизЛицо.ДокСерия=ExtractWords(1,ww-1,НомДокДов," ");
 Раб.Вспом.ФизЛицо.ДокНом=ExtractWord(ww,НомДокДов," ");
 Раб.Вспом.ФизЛицо.ДокКемВыдан=ВыданДокДов;
 Раб.Вспом.ФизЛицо.ДокДат=ДатДокДов;
 Раб.Вспом.ФизЛицо.Вызвать("Доверяем получить работнику","ФИОД","ИСНВД",True,"КОМУ");
 ФИОДов=Trim(Trim(Раб.Вспом.ФизЛицо.Фамилия)+" "+Trim(Раб.Вспом.ФизЛицо.Имя)+" "+Trim(Раб.Вспом.ФизЛицо.Отчество));
 ДолжнДов=Раб.Вспом.ФизЛицо.Должность;
 НаимДокДов=Раб.Вспом.ФизЛицо.ДокНаим;
 НомДокДов=Раб.Вспом.ФизЛицо.ДокСерия+" "+Раб.Вспом.ФизЛицо.ДокНом;
 ВыданДокДов=Раб.Вспом.ФизЛицо.ДокКемВыдан;
 ДатДокДов=Раб.Вспом.ФизЛицо.ДокДат;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbУчитывать_OnChange(Sender: String);
var Flag:L;
var Rec: Record;
var Focus:S;
 if SkipEvent: Exit; fi;
 Focus=AsString(Template.Object);
 if Учитывать:
    Flag=True;
    Учитывать=Проверить;
   else
    if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
       EditorCancel;
       cbУчитывать.State=Учитывать;
       Exit;
      else
       Flag=False;
       if ВБанк:
          ВБанк=False;
          cbВБанк.State=ВБанк;
       fi;
    fi;
 fi;
 cbУчитывать.State=Учитывать;
 Оформление;
 if Flag=Учитывать and Focus=Sender:
    EditorApply;
 fi;
end;

Proc cbВБанк_OnChange(Sender: String);
var Flag:L;
var Focus:S;
 if SkipEvent: Exit; fi;
 Focus=AsString(Template.Object);
 if not Focus=Sender: Exit; fi;
 --ClearVariable(ДатаРейс);
 --ClearVariable(НомРейс);
 --ClearVariable(ВЛВС);
 if НомРейс>0: НомРейс=-НомРейс; fi;
 Flag=False;
 if not Учитывать and ВБанк:
    Flag=True;
    Учитывать=True;
    cbУчитывать.State=Учитывать;
    ВБанк=Учитывать;
    cbВБанк.State=ВБанк;
 fi;
 if Flag=ВБанк and Focus=Sender:
    EditorApply;
 fi;
end;

Proc cbПроводить_OnChange(Sender: String);
var Flag:L;
 if SkipEvent: Exit; fi;
 if Проводить:
    Flag=True;
    if ДатаОпер=1.1.100: Message("Введите дату выписки",mtError); Template.Object="btnДатаОпер"; Проводить=False; Exit; fi;
    if not ВБанк:
       ВБанк=True;
       cbВБанк.State=ВБанк;
       Проводить=ВБанк;
    fi;
   else
    if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
       EditorCancel;
    fi;
 fi;
 cbПроводить.State=Проводить;
 Оформление;
 if Flag=Проводить: EditorApply; fi;
end;

Proc btnДата_OnClick(Sender: String);
var tmp:D;
 tmp=Calendar;
 if not tmp=1.1.100:
    if Sender="btnДатаОпер" : ДатаОпер=tmp;
      |Sender="btnАннулДата": АннулДата=tmp;
    fi;
 fi;
end;

Proc cbКакБО_OnChange(Sender: String);
var Flag:L;
 if not AsString(Template.Object)=Sender: Exit; fi;
 if КакБО:
    Flag=КакБО;
    КакБО=ПроверитьКакБО(True,True);
    if not КакБО=Flag and Учитывать: EditorCancel; fi;
   else
    if EnqOkCancel("Вы уверены, что хотите снять флаг ?",mtWarning)=cmCancel:
       EditorCancel;
      else
       if Призн_БО="БО.000": Призн_БО=""; fi;
    fi;
 fi;
 cbКакБО.State=КакБО;
 if (Flag and КакБО and Учитывать) or (not Flag and not КакБО): EditorApply; fi;
end;

Proc cbАннул_OnChange(Sender: String);
var Flag:L;
 Try
  if Аннул:
     if АннулДата=1.1.100: Message("Введите дату аннулирования",mtError); Template.Object="btnАннулДата"; Аннул=False; Exit; fi;
     Flag=Аннул;
     if not ВБанк:
        ВБанк=True;
        cbВБанк.State=ВБанк;
        Аннул=ВБанк;
     fi;
    else
     if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
        EditorCancel;
     fi;
  fi;
 Finally
  cbАннул.State=Аннул;
  Оформление;
 end;
 if (Flag and Аннул) or (not Flag and not Аннул): EditorApply; fi;
end;

Proc cbЗакрытьДок_OnChange(Sender: String);
var State:I;
 if ClosedModFob and not fQCMF:
    State=Enquiry("","Документ будет закрыт от изменений^MВнимание!^MПосле установки данного флага, если вы необладаете достаточными правами, вы не сможете снять данный флаг^MПродолжить ?","Отмена;Да;Больше не спрашивать",mtWarning);
    if State=1: ClosedModFob=False; cbЗакрытьДок.State=ClosedModFob; Exit;
      |State=3: fQCMF=True;
    fi;
 fi;
 EditorApply;
end;

Proc btnПечать_onClick (Obj:S);
 if КолКопий<=0: КолКопий=1; fi;
 if КолКопий>2:
    if EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий документа ?")=cmCancel:
       Message("Отказ от печати"); 
       Exit;
    fi;
 fi;
 РазметкаЛиста(True);
 Try
  Раб.Настр_Печать.Prn("","",SelfCfg,"",КолКопий);
 Finally
  РазметкаЛиста(False);
 end;
end;

Proc btnПКО_OnClick(Sender: String);
var OWA,OA,n1,n2,Iter,Номер:I;
var Ист,Тип,tmp,Подр,Призн_,Гл,Бюдж:S;
var Rec:Record;
 if not Проверить: Exit; fi;
 ClearVariable(Buf);
 Номер=РАБ.ОБЛ.СледСУчетомГода("ПРИХОРД","Номер","Д");
 OWA=OpenWorkArea("ПРИХОРД","","1=0");
 Try
  BeginChanging(OWA);
  Try
   n1=InsertRecord(OWA);
   Rec=GetRecordKey(OWA,n1);
   n1=PutFieldI(OWA,n1,"Номер",Номер);
   n1=PutFieldS(OWA,n1,"НомерБум",Str(Номер));
   n1=PutFieldN(OWA,n1,"Сумма",Р1_ВсегоСум);
   n1=PutFieldS(OWA,n1,"ВАЛЮТА",BaseCurrency);
   Тип=Раб.Бюджет2005.ТипКБКСчета(Расшифр[1].СчДеб);
   Ист=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчДеб,Тип,"Ист",False);
   Гл=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчДеб,Тип,"ППП",False);
   if Раб.Бюджет2005.ТипКБКСчета(Расшифр[1].СчКре)="КИФД":
      Бюдж=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчКре,"КИФД","ЭЛ",False);
     else
      Бюдж="01";
   fi;
   n1=PutFieldS(OWA,n1,"ДЕ",Гл+".01.05.02.01."+Бюдж+".0000."+Ист+".201.34.510");
   n1=PutFieldS(OWA,n1,"СЧЕТ","");
   n1=PutFieldS(OWA,n1,"ФИО",Банк.РПО_ОФК_Имя);
   for Iter=1..Чек do
    AddInArray(Buf,False,False,Чек[Iter].Серия+" № "+Чек[Iter].Номер);
   od;
   tmp="";
   for Iter=1..LengthOfArray(Buf) do
    tmp=Раб.Бюджет2005.Объединить(tmp,Buf[Iter],", ");
   od;
   n1=PutFieldS(OWA,n1,"ОСН","по чеку "+tmp);
   n1=PutFieldR(OWA,n1,"РЕКВ",Рекв);
   n1=PutFieldS(OWA,n1,"РПО_ФИОБУХ",ФИОБух);
   if Расшифр>1:
      n1=PutFieldL(OWA,n1,"РПО_PACKETMODE",True);
      OA=OpenArray(OWA,n1,"РПО_ПОЗИЦИИ","");
      for Iter=1..Расшифр do
       n2=InsertRecord(OA);
       Тип=Раб.Бюджет2005.ТипКБКСчета(Расшифр[Iter].СчДеб);
       Ист=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,Тип,"Ист",False);
       Гл=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,Тип,"ППП",False);
       if Раб.Бюджет2005.ТипКБКСчета(Расшифр[1].СчКре)="КИФД":
          Бюдж=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчКре,"КИФД","ЭЛ",False);
         else
          Бюдж="01";
       fi;
       n2=PutFieldS(OA,n2,"ТДСЧЕТ",Гл+".01.05.02.01."+Бюдж+".0000."+Ист+".201.34.510");
       if Match(Расшифр[Iter].СчДеб,"*.?.???.??.56*"):
          tmp=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,Тип,"АН",True)+".660";
          n2=PutFieldS(OA,n2,"ТСЧЕТ",tmp);
         else
          n2=PutFieldS(OA,n2,"ТСЧЕТ",Расшифр[Iter].СчДеб);
       fi;
       --Меняем ЖО
       Призн_=Раб.Бюджет.УдалитьПризнак(Расшифр[Iter].Призн,"ЖО.*");
       if Ист="1" and Match(Призн_,"*ФКР.*")=False: Призн_=Раб.Бюджет.ДобавитьПризнак(Призн_,"ФКР."+Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,Тип,"КБК",False)); fi;
       Призн_=Раб.Бюджет.МухиОтКотлет(Призн_,Раб.Бюджет.НаборПризнаков(GetFieldS(OA,n2,"ТДСЧЕТ"),GetFieldS(OA,n2,"ТСЧЕТ"),""));
       n2=PutFieldS(OA,n2,"ТПРИЗН",Призн_);
       n2=PutFieldN(OA,n2,"ТСУММА",Расшифр[Iter].Сум);
      od;
      CloseWorkArea(OA);
     else
      n1=PutFieldL(OWA,n1,"РПО_PACKETMODE",False);
      if Match(Расшифр[1].СчДеб,"*.?.???.??.56*"):
         tmp=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчДеб,Тип,"АН",True)+".660";
         n1=PutFieldS(OWA,n1,"СЧЕТ",tmp);
        else
         n1=PutFieldS(OWA,n1,"СЧЕТ",Расшифр[1].СчДеб);

      fi;
      --берем подразделение
      Подр=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(Расшифр[1].Призн,"П.*"," ");
      if Подр<>"":
         Призн_=Раб.Бюджет.УдалитьПризнак(Расшифр[1].Призн,"П.*");
         n1=PutFieldS(OWA,n1,"ПО",Подр);
        else
         Призн_=Расшифр[1].Призн;
      fi;
      --Меняем ЖО
      Призн_=Раб.Бюджет.УдалитьПризнак(Призн_,"ЖО.*");
      --Добавляем ФКР
      if Ист="1" and Match(Призн_,"*ФКР.*")=False: Призн_=Раб.Бюджет.ДобавитьПризнак(Призн_,"ФКР."+Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчДеб,Тип,"КБК",False)); fi;
      Призн_=Раб.Бюджет.МухиОтКотлет(Призн_,Раб.Бюджет.НаборПризнаков(GetFieldS(OWA,n1,"ДЕ"),GetFieldS(OWA,n1,"СЧЕТ"),""));
      n1=PutFieldS(OWA,n1,"Призн",Призн_);
   fi;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 Message("Приходный ордер успешно сформирован");
 OpenBlank("ДОКУМЕНТЫ.КАССА.ПРИХОРД",True,Rec);
end;

Proc btnНастр_OnClick(Sender: String);
 ОткрНастр(True);
end;

Func OnInsert(SectName: String): Logical;
 Return not Учитывать;
end;

Func OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Учитывать;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 FlagInit=True;
 Раб.Настр_Печать.Cfg("",SelfCfg);
end;

Proc AfterOpen(Destroy: Logical);
 Инициализация;
 Оформление;
 FlagInit=False;
end;

var ДатаДок_:D;
var ДатаПодписи_:D;
var ДолжнРук_:S;
var ФИОРук_:S;
var ДолжнБух_:S;
var ФИОБух_:S;

Proc OnRead;
 ОткрНастр(False);
 Настр(False);
 if НоваяЗапись:
    if Раб.Настр.Начать("УПРАВЛЕНИЕ.БАНК",0,0,"",GetGUID):
       if Int(Раб.Настр.ВзятьЗначение("Ver"))>=12 and ver<12: ver=12; fi;
    fi;
    if Номер=0:
       Раб.Вспом.Подписи_Сегодня.Взять(ToDay,"ДОКУМЕНТЫ.БАНК.ЗАЯВКА_НАЛ","ДатаДок_:Дата_Док:D|ДатаПодписи_:Дата_Подписи:D|ДолжнРук_:ДолжнРук:S|ФИОРук_:ФИОРук:S|ДолжнБух_:ДолжнБух:S|ФИОБух_:ФИОБух:S");
       ДатаДок=ДатаДок_; ДатаПодписи=ДатаПодписи_; ДолжнРук=ДолжнРук_; ФИОРук=ФИОРук_; ДолжнБух=ДолжнБух_; ФИОБух=ФИОБух_;
       if ДатаДок=1.1.100: ДатаДок=ToDay; fi;
       if ДатаПодписи=1.1.100: ДатаПодписи=ДатаДок; fi;
       ЗаполнитьКлиента(Рекв);
       ПоУмолчанию;
    fi;
    if ПДИ>0:
       ДатаИспол=ДатаДок+ПДИ;
       if ДатаИспол>Dat(31,12,Year(ДатаДок)): ДатаИспол=Dat(31,12,Year(ДатаДок)); fi;
    fi;
    Номер=РАБ.ОБЛ.СледСУчетомДаты(SelfCrd,"Номер","ДатаДок",ДатаДок);
    НомерДок=Str(Номер);
    Проводить=False;
    ВБанк=False;
    Учитывать=False;
    НомРейс=0;
    ДатаРейс=1.1.100;
    ClosedModFob=False;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
 if not FlagInit: Оформление; fi;
end;

Func OnVerify: Logical;
var state:L;
 if (not Учитывать or НоваяЗапись):
    if fКакБО and КакБО:
       state=КакБО;
       КакБО=ПроверитьКакБО(False,False);
       if not state=КакБО:
          cbКакБО.state=КакБО;
       fi;
    fi;
 fi;
 СумДок=Р2_ВсегоСум;
 Return ЗаполнитьКлючДок;
end;
--Обработчики событий шаблона -----
--

Конец
