БЛАНКСШАБЛОНОМ [14.06.2006] "Платежное поручение",РЕДАКТОР Поруч;

var isChild:L=(not РПО_ЗАЯВКА_КР=nil or not РПО_ЗАЯВКА_ВОЗВРАТ=nil);

var ТекСчета:S="???.01.05.02.*.?.201.?1.61*|???.01.05.02.*.?.201.?7.61*|*.?.304.04.*|*.?.304.05.*";

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

var УпрНастр:L;
var УпрБанкСч:I;
var УпрБанкСч_:I;

var DefFlagChkTrans_Учитывать:L=False;
var DefFlagChkСтрокиБК_Учитывать:L=True;
var DefMultiStr:L=True;
var DefFlagCopyTrans:L=True;

var DefБанкСч:I=0;
var DefБанкСчет:S="*";
var DefСчДеб:S="";
var DefСчКре:S="";
var DefПризн:S="";
var DefТекстНДС18:S="в т.ч НДС 18%=";
var DefТекстНДС10:S="в т.ч НДС 10%=";
var DefТекстНДС00:S="НДС не облагается";
var DefТекстБК_Н :S="(";
var DefТекстБК_ГЛ:S=" ";
var DefТекстБК_РП:S=" ";
var DefТекстБК_ЦС:S=" ";
var DefТекстБК_ВР:S=" ";
var DefТекстБК_ЭК:S=" ";
var DefТекстБК_К :S="";
var DefТекстЛС_Н :S=" ";
var DefТекстЛС_ЛС:S="л/с ";
var DefТекстЛС_К:S=")";
var DefНазнПлатБК:I=0;
var DefFlagБКZero:L=False;

var FlagChkTrans_Учитывать:L=[DefFlagChkTrans_Учитывать];
var FlagChkTrans_Учитывать_:S=if(FlagChkTrans_Учитывать,"ДА","НЕТ");
var FlagChkСтрокиБК_Учитывать:L=[DefFlagChkСтрокиБК_Учитывать];
var FlagChkСтрокиБК_Учитывать_:S=if(FlagChkСтрокиБК_Учитывать,"ДА","НЕТ");

var UserРекв:S;
var UserБанк:S;
var UserРекв_:S;
var UserБанк_:S;
var UserMultiStr:L=[DefMultiStr];
var UserMultiStr_:S=if(UserMultiStr,"ДА","НЕТ");
var FlagCopyTrans:L=[DefFlagCopyTrans];
var FlagCopyTrans_:S=if(FlagCopyTrans,"ДА","НЕТ");

var БанкСч[]:I=[DefБанкСч];
var БанкСч_[]:S=if(БанкСч[$]=0,"Лицевой счет в ОФК","Расчетный счет в банке");
var БанкСчет__[]:S=if(БанкСч[$]=0,"Маска (значение) лицевого счета","Маска (значение) расчетного счета");
var БанкСчет[]:S=[DefБанкСчет];

var UserСчДеб[]:S=[DefСчДеб];
var UserСчКре[]:S=[DefСчКре];
var UserПризн[]:S=[DefПризн];

var UserТекстНДС18:S=[DefТекстНДС18];
var UserТекстНДС10:S=[DefТекстНДС10];
var UserТекстНДС00:S=[DefТекстНДС00];

var UserТекстБК_Н :S=[DefТекстБК_Н];
var UserТекстБК_ГЛ:S=[DefТекстБК_ГЛ];
var UserТекстБК_РП:S=[DefТекстБК_РП];
var UserТекстБК_ЦС:S=[DefТекстБК_ЦС];
var UserТекстБК_ВР:S=[DefТекстБК_ВР];
var UserТекстБК_ЭК:S=[DefТекстБК_ЭК];
var UserТекстБК_К :S=[DefТекстБК_К];
var UserТекстЛС_Н :S=[DefТекстЛС_Н];
var UserТекстЛС_ЛС:S=[DefТекстЛС_ЛС];
var UserТекстЛС_К :S=[DefТекстЛС_К];
var ТекстБК_Пример:S="Пример вывода: "+UserТекстБК_Н+UserТекстБК_ГЛ+"123"+UserТекстБК_РП+"1234"+UserТекстБК_ЦС+"1234567"+UserТекстБК_ВР+"123"+UserТекстБК_ЭК+"123"+UserТекстБК_К+UserТекстЛС_Н+UserТекстЛС_ЛС+"12345678901"+UserТекстЛС_К;

var UserНазнПлатБК:I=[DefНазнПлатБК];
var UserНазнПлатБК_:S=if(UserНазнПлатБК=0,"Добавлять новую классификацию","Заменять существующую классификацию");
var extКлюч:S;

var HandleMulti:L=if(РПО_MultiStr,True,False);
var HandleMono :L=if(РПО_MultiStr,False,True);
var FlagEdit:L=[False];
var Пропись:S=Slo(Сумма);
---Object-----
cbУчитывать  :Object;
cbВБанк      :Object;
cbПроводить  :Object;
cbБюджет     :Object;
btnНастр     :Object;
btnШаблон    :Object;
btnПечать    :Object;
edКолКопий   :Object;
btnПоискПолуч:Object;
btnФКР       :Object;
btnЛС        :Object;
btnНДС       :Object;
btnДата      :Object;
editДата     :Object;
cbMultiStr   :Object;
btnП1        :Object;
btnП4        :Object;
btnП8        :Object;
edБанк_РПО_Коммент:Object;
btnParent    :Object;
---Object-----
var A:S=if(Проводить or (РПО_Учитывать and FlagChkTrans_Учитывать) or isChild,"","+");
var D:S=if(Проводить or (РПО_Учитывать and FlagChkTrans_Учитывать) or isChild,"","-");
var A1:S=if(РПО_Учитывать or isChild,"","+");
var D1:S=if(РПО_Учитывать or isChild,"","-");
var PacketSum:N=SumOfArray(РПО_Позиции[].Сум,РПО_Позиции);
var PacketDelta:N=Round(PacketSum-Сумма,2);

var BKSum:N=SumOfArray(РПО_СТРОКИ_БК[].СУМ,РПО_СТРОКИ_БК);
var BKDelta:N=Round(BKSum-Сумма,2);

КолКопий:I=[1];
---------------
var ИНН       :S=if(Банк.РПО_ИНН_БАНКА=False,if(Рекв.ИНН="",if(Бюджет,'0',''),Рекв.ИНН),if(Банк.РПО_БАНК_ИНН="",if(Бюджет,'0',''),Банк.РПО_БАНК_ИНН));
var КПП       :S=if(Банк.РПО_ИНН_БАНКА=False,if(Рекв.КПП='',if(Бюджет,'0',''),Рекв.КПП),if(Банк.РПО_БАНК_КПП='',if(Бюджет,'0',''),Банк.РПО_БАНК_КПП));
var БанкИмя_  :S=if(Банк<>Nil,Банк.БанкИмя,Рекв.КорИмя);
var Банк_     :S=Банк.Банк+" "+Банк.Город;
var ИННП      :S=if(БанкП.РПО_ИНН_БАНКА=False,if(РеквП.ИНН="",if(Бюджет,'0',''),РеквП.ИНН),if(БанкП.РПО_БАНК_ИНН="",if(Бюджет,'0',''),БанкП.РПО_БАНК_ИНН));
var КППП      :S=if(БанкП.РПО_ИНН_БАНКА=False,if(РеквП.КПП='',if(Бюджет,'0',''),РеквП.КПП),if(БанкП.РПО_БАНК_КПП='',if(Бюджет,'0',''),БанкП.РПО_БАНК_КПП));
var БанкИмяП_ :S=if(БанкП<>Nil,БанкП.БанкИмя,РеквП.КорИмя);
var БанкП_    :S=БанкП.Банк+" "+БанкП.Город;
var nРПО_Позиции:I=РПО_Позиции;
var Признак_[]:S=РПО_Позиции[$].Признак;
---------------
var Txt0:S=if(Проводить or (РПО_Учитывать and FlagChkTrans_Учитывать) or isChild,"","Создать комментарий");
var Txt1:S=if(РПО_Учитывать or isChild,"","Импорт БК из таблицы проводок");
var Txt2:S="Значения по умолчанию";
var Txt3:S="Закрыть настройку";
var Txt4:S=if(Проводить or (РПО_Учитывать and FlagChkTrans_Учитывать) or isChild,"","БО");

var StoreКодГлавы:S;

var SelfCrd:S="Поруч";

var ТипТаблБК:I;
var ТипТаблБК_:s=if(ТипТаблБК=1:"Классификация доходов"|ТипТаблБК=2:"Классификация источников внутреннего финансирования дефицитов"|ТипТаблБК=3:"Классификация источников внешнего финансирования дефицитов"|True:"Классификация расходов");

StoreЭКР:S;
StoreЭКД:S;
StoreЭКИФД:S;
StoreПГР:S;
StoreСчДеб:S;
StoreСчКре:S;

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

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

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 prevCode:I;

var noMsg:L;

var НастрGUID:S;

var Call:S;

var SkipEvent:L;
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Iter:I;
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.БАНК.ПОРУЧ",0,0,"",НастрGUID):
    Раб.Настр.Добавить("FlagChkTrans_Учитывать","L");
    Раб.Настр.Добавить("FlagChkСтрокиБК_Учитывать","L");
    Раб.Настр.Добавить("UserРекв","S");
    Раб.Настр.Добавить("UserБанк","S");
    Раб.Настр.Добавить("UserРекв_","S");
    Раб.Настр.Добавить("UserБанк_","S");
    Раб.Настр.Добавить("UserMultiStr","L");
    Раб.Настр.Добавить("FlagCopyTrans","L");
    Раб.Настр.Добавить("УпрБанкСч_","I");
    for Iter=1..УпрБанкСч_ do
     Раб.Настр.Добавить("БанкСч["+Str(Iter)+"]","I");
     Раб.Настр.Добавить("БанкСчет["+Str(Iter)+"]","S");
     Раб.Настр.Добавить("UserСчДеб["+Str(Iter)+"]","S");
     Раб.Настр.Добавить("UserСчКре["+Str(Iter)+"]","S");
     Раб.Настр.Добавить("UserПризн["+Str(Iter)+"]","S");
    od;
    Раб.Настр.Добавить("UserТекстНДС18","S");
    Раб.Настр.Добавить("UserТекстНДС10","S");
    Раб.Настр.Добавить("UserТекстНДС00","S");
    Раб.Настр.Добавить("UserТекстБК_Н","S");
    Раб.Настр.Добавить("UserТекстБК_ГЛ","S");
    Раб.Настр.Добавить("UserТекстБК_РП","S");
    Раб.Настр.Добавить("UserТекстБК_ЦС","S");
    Раб.Настр.Добавить("UserТекстБК_ВР","S");
    Раб.Настр.Добавить("UserТекстБК_ЭК","S");
    Раб.Настр.Добавить("UserТекстБК_К","S");
    Раб.Настр.Добавить("UserТекстЛС_Н","S");
    Раб.Настр.Добавить("UserТекстЛС_ЛС","S");
    Раб.Настр.Добавить("UserТекстЛС_К","S");
    Раб.Настр.Добавить("UserНазнПлатБК","I");
    Раб.Настр.Добавить("extКлюч","S");
    if aСохр: 
       Раб.Настр.Сохранить;
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("Txt2_onEnter","",1);
       fi;
    fi;
 fi;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..11 do
  if FindObject("S"+Str(s),Obj) and not s=5 and not s=6:
     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;
 --Вручную добавляем назначение платежа (если она невидна будут проблемы в автоматичском режиме)
 n=InsertInArraySort(BufField,"Т");       InsertInArray(BufColorBg,n,coAqua);
 n=InsertInArraySort(BufField,"РПО_Т1");  InsertInArray(BufColorBg,n,coAqua);
 n=InsertInArraySort(BufField,"РПО_Т2");  InsertInArray(BufColorBg,n,coAqua);
 n=InsertInArraySort(BufField,"РПО_Т3");  InsertInArray(BufColorBg,n,coAqua);
 n=InsertInArraySort(BufField,"РПО_Т4");  InsertInArray(BufColorBg,n,coAqua);
 --
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var State:L;
 State=not (РПО_Учитывать or РПО_ВБанк or Проводить or isChild);
 cbБюджет.Enabled=State;
 btnНастр.Enabled=State;
 btnШаблон.Enabled=State;
 btnП1.Enabled=State;
 BtnПоискПолуч.Enabled=State;
 BtnФКР.Enabled=State;
 BtnЛС.Enabled=State;
 BtnНДС.Enabled=State;
 btnП4.Enabled=State;
 btnП8.Enabled=State;
 cbMultiStr.Enabled=State;
 BtnДата.Enabled=not Проводить and not isChild;
 EditДата.Enabled=not Проводить and not isChild;
 cbУчитывать.Enabled=not Проводить and not РПО_ВБанк and not isChild;
 cbВБанк.Enabled=not Проводить and not isChild;
 cbПроводить.Enabled=not isChild;
 btnParent.Visible=isChild;
 if isChild:
    btnParent.Caption="Перейти на "+if(not РПО_Заявка_КР=nil:"заявку на кассовый расход"|not РПО_Заявка_Возврат=nil:"заявку на возврат"|True:"???");
 fi;
 for s=1..11 do
  if FindObject("S"+Str(s),Obj) and ((not s=5 and not s=6) or (s=5 and HandleMono) or (s=6 and HandleMulti)):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       n=SearchInArray(BufField,asString(Obj.Cell(r,c,CellContents,"")),True);
       if not n=-1:
          if ((РПО_Учитывать and ((not s=7 and not s=8) or FlagChkTrans_Учитывать)) or Проводить) or isChild:
             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;
  fi;
 od;
 --
 for s=10..12 do
  if FindObject("S"+Str(s),Obj):
     for c=4..12 do
      Obj.Column(c,ColVisible,if(c>=4 and c<=9:ТипТаблБК=0|c=10:ТипТаблБК=1|c=11:ТипТаблБК=2|c=12:ТипТаблБК=3|True:True));
     od;
  fi;
 od;
end;

Proc УдалитьПустыеСтроки;
var n:i;
 n=1; 
 While n<=РПО_Позиции do
  if РПО_Позиции[n].Сум=0 and РПО_Позиции[n].СчДеб="" and РПО_Позиции[n].СчКре="" and РПО_Позиции[n].Признак="": DeleteFrame(РПО_Позиции,n);
   else 
    n=n+1; 
  fi; 
 od;
 n=1; 
 While n<=РПО_Строки_БК do
  if РПО_Строки_БК[n].КодГлавы="" and
     РПО_Строки_БК[n].КодПРД="" and
     РПО_Строки_БК[n].КодЦСТ="" and
     РПО_Строки_БК[n].КодВР="" and
     РПО_Строки_БК[n].КодЦП="" and
     РПО_Строки_БК[n].КодЭК="" and
     РПО_Строки_БК[n].НомБО="" and
     РПО_Строки_БК[n].МесФин="" and
     РПО_Строки_БК[n].Сум=0 and
     РПО_Строки_БК[n].ХФП="": DeleteFrame(РПО_Строки_БК,n);
   else 
    n=n+1; 
  fi; 
 od;
end;

Func MatchБанкСчет (ЛС:S; БС:S):I;
var n:i;
 for n=1..УпрБанкСч_ do
  if БанкСч[n]=0:
     if Match(ЛС,БанкСчет[n]): ^n; fi;
    else
     if Match(БС,БанкСчет[n]): ^n; fi;
  fi;
 od;
 ^0;
end;

Proc БухПоУмолчанию(Iter:I);
var Value:S;
var n,z,b,e,w,ww:i;
 if Банк=Nil: Exit; fi;
 z=MatchБанкСчет(Банк.РПО_ЛСчет,Банк.РСчет);
 if z=0: Exit; fi;
 if Iter=0: b=1; e=РПО_Позиции; else b=Iter; e=Iter; fi;
 for n=b..e do
  if not UserСчДеб[z]="" or not UserСчКре[z]="":
     РПО_Позиции[n].СчДеб=UserСчДеб[z];
     РПО_Позиции[n].СчКре=UserСчКре[z];
     Value=Раб.Бюджет.НаборПризнаков(РПО_Позиции[n].СчДеб,РПО_Позиции[n].СчКре,"");
     РПО_Позиции[n].Признак=Раб.Бюджет.МухиОтКотлет(РПО_Позиции[n].Признак,Value);
  fi;
  if not UserПризн[z]="":
     ww=WordsCount(UserПризн[z]," ");
     for w=1..ww do
      РПО_Позиции[n].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[n].Признак,ExtractWord(w,UserПризн[z]," "));
     od;
  fi;
 od;
end;

Proc НеПустаяТаблица;
 if isChild: Exit; fi;
 if РПО_Позиции<1: InsertFrame(РПО_Позиции,1); БухПоУмолчанию(0); fi;
 if РПО_Строки_БК<1: InsertFrame(РПО_Строки_БК,1); fi;
end;

Proc SetObjHide (State:L);
 if State=True: State=False; else State=True; fi;
 cbПроводить.Visible=State;
 cbУчитывать.Visible=State;
 cbВБанк.Visible=State;
 btnНастр.Visible=State;
 cbБюджет.Visible=State;
 btnПечать.Visible=State;
 edКолКопий.Visible=State;
 btnПоискПолуч.Visible=State;
 btnФКР.Visible=State;
 btnЛС.Visible=State;
 btnНДС.Visible=State;
 btnДата.Visible=State;
 editДата.Visible=State;
 cbMultiStr.Visible=State;
 btnШаблон.Visible=State;
 btnП1.Visible=State;
 btnП4.Visible=State;
 btnП8.Visible=State;
 edБанк_РПО_Коммент.Visible=State;
 if isChild:
    btnParent.Visible=State;
 fi;
end;

Proc ОткрытьНастр;
 SetObjHide(True);
 УпрНастр=True;
 if УпрБанкСч_<1: УпрБанкСч_=1; fi;
 УпрБанкСч=УпрБанкСч_;
end;

Proc ЗакрытьНастр;
 SetObjHide(False);
 УпрНастр=False;
 ClearVariable(УпрБанкСч);
end;

Func ПроверитьТабПров_БО(Iter:I):L;
var ПризнК_,БО_ПризнК_,ПризнБО_,КБК_,КОСГУ_,БО_КБК_,БО_КОСГУ_,ПризнДоговор_,БО_ПризнДоговор_:S;
var Rec: Record;
 ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Признак," ","К.*","");
 ПризнБО_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Признак," ","БО.*","");
 ПризнДоговор_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Признак," ","ДОГОВОР.*","");
 if ПризнБО_="": ^True; fi;
 Rec=SignToRecord(ПризнБО_,False);
 if Rec=nil: ^True; fi;
 if not SignCardFile(ПризнБО_)="РПО_БО": ^True; fi;
 if not GetCardFieldL("РПО_БО",Rec,"ПРОВОДИТЬ"): Message("Бюджетное обязательство не принято к учету",mtError); ^False; fi;
 if GetCardFieldL("РПО_БО",Rec,"АННУЛИРОВАН") and Дата>=GetCardFieldD("РПО_БО",Rec,"АННУЛДАТА"): Message("Бюджетное обязательство снято с учета",mtError); ^False; fi;
 if Match(РПО_Позиции[Iter].СчКре,"*.?.304.05.*") or Match(РПО_Позиции[Iter].СчКре,"*.?.304.04.*"):
    БО_КБК_=GetCardFieldS("РПО_БО",Rec,"КБК");
    БО_КОСГУ_=GetCardFieldS("РПО_БО",Rec,"КОСГУ");
    КБК_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчКре,"ФКР","КБК",False);
    КОСГУ_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчКре,"ФКР","КОСГУ",False);
    if not БО_КБК_=КБК_ or not БО_КОСГУ_=КОСГУ_: Message("КБК бюджетного обязательства ("+БО_КБК_+"."+БО_КОСГУ_+") отличается от КБК проводки ("+КБК_+"."+КОСГУ_+")",mtError); ^False; fi;
 fi;
 if ПризнК_="": ^True; fi;
 БО_ПризнК_=GetCardFieldS("РПО_БО",Rec,"Контр_Призн");
 if not ПризнК_=БО_ПризнК_:
    Message("Контрагент бюджетного обязательства ("+БО_ПризнК_+") отличается от контрагента проводки ("+ПризнК_+")",mtError);
    ^False;
 fi;
 БО_ПризнДоговор_=GetCardFieldS("РПО_БО",Rec,"Договор_Призн");
 if not ПризнДоговор_=БО_ПризнДоговор_:
    if ПризнДоговор_="": Message("Отсутствует признак договора. Перевыберите бюджетное обязательство",mtWarning); ^False; fi;
    Message("Договор бюджетного обязательства ("+БО_ПризнДоговор_+") отличается от договора проводки ("+ПризнДоговор_+")",mtError);
    ^False;
 fi;
 ^True;
end;

Func ПроверитьТабКБК_БО(Iter:I):L;
var КБК_,КОСГУ_,КБК_БО,КОСГУ_БО,Контр_БО_:S;
var Контр_БО,: Record;
var OWA:I;
 OWA=OpenWorkArea("РПО_БО","","НОМРЕГ='"+РПО_СТРОКИ_БК[Iter].НомБО+"'");
 Try
  if Records(OWA)=0: 
     if EnqOkCancel("Бюджетное обязательство с регистрационным номером "+РПО_СТРОКИ_БК[Iter].НомБО+" не найдено в базе данных. Игнорировать ?",mtWarning)=cmOk: ^True; else ^False; fi;
  fi;
  if not GetFieldL(OWA,1,"РегФК"): Message("Выбранное бюджетное обязательство не зарегистрировано в казначействе",mtError); ^False; fi;
  КБК_БО=GetFieldS(OWA,1,"КБК");
  КОСГУ_БО=GetFieldS(OWA,1,"КОСГУ");
  Контр_БО=GetFieldR(OWA,1,"Контр");
  Контр_БО_=GetFieldS(OWA,1,"Контр.КорИмя");
 Finally
  CloseWorkArea(OWA);
 end;
 КБК_=РПО_СТРОКИ_БК[Iter].КодГлавы+"."+РПО_СТРОКИ_БК[Iter].КодПРД+"."+РПО_СТРОКИ_БК[Iter].КодЦСТ+"."+РПО_СТРОКИ_БК[Iter].КодВР;
 КОСГУ_=РПО_СТРОКИ_БК[Iter].КодЭК;
 if not КБК_БО=КБК_ or not КОСГУ_БО=КОСГУ_: Message("КБК бюджетного обязательства ("+КБК_БО+"."+КОСГУ_БО+") отличается от КБК указанного в детализации ("+КБК_+"."+КОСГУ_+")",mtError); ^False; fi;
 if not РеквП=Контр_БО:
    Message("Контрагент бюджетного обязательства ("+Контр_БО_+") отличается от контрагента поручения ("+РеквП.КорИмя+")",mtError);
    ^False;
 fi;
 ^True;
end;

Func ПроверитьПров:L;
var n:i;
 if Проводить and ДатОпер=1.1.100: Message("Введите дату выписки",mtError); Template.Object="EditДата"; ^False; fi;
 if Сумма=0: Message("Введите сумму платежного поручения",mtError); Template.Field="Сумма"; ^False; fi;
 if Round(PacketDelta,2)<>0: Message("Сумма по проводкам не совпадает с суммой платежки",mtError); Template.Field="PacketDelta"; ^false; fi;
 УдалитьПустыеСтроки;
 if РПО_Позиции=0: Message("Заполните таблицу проводок"); НеПустаяТаблица; Template.Field="Сум"; Template.Frame=n; ^False; fi;
 Раб.КСА.Начать;
 for n=1..РПО_Позиции do
  Раб.КСА.Добавить(РПО_Позиции[n].СчДеб);
  Раб.КСА.Добавить(РПО_Позиции[n].СчКре);
  Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[n].СчДеб,"","ВД",True)+".ЗАБ.00."+Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[n].СчДеб,"","КОСГУ",False));
  Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[n].СчКре,"","ВД",True)+".ЗАБ.КР."+Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[n].СчКре,"","КОСГУ",False));
 od;
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 RefreshAna;
 for n=1..РПО_Позиции do
  if РПО_Позиции[n].Сум=0: Message("Введите сумму",mtError); Template.Field="Сум"; Template.Frame=n; ^False; fi;
  if РПО_Позиции[n].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=n; ^False; fi;
  if Name_S(РПО_Позиции[n].СчДеб)=" ": Message("Неизвестный идентификатор счета "+РПО_Позиции[n].СчДеб,mtError); Template.Field="СчДеб"; Template.Frame=n; ^False; fi;
  if РПО_Позиции[n].СчКре="": Message("Введите счет кредита",mtError);Template.Field="СчКре"; Template.Frame=n; ^False; fi;
  if Name_S(РПО_Позиции[n].СчКре)=" ": Message("Неизвестный идентификатор счета "+РПО_Позиции[n].СчКре,mtError); Template.Field="СчКре"; Template.Frame=n; ^False; fi;
  if Correspond(РПО_Позиции[n].СчДеб,РПО_Позиции[n].СчКре)=False: Message("Счета не могут корреспондировать: "+РПО_Позиции[n].СчДеб+"/"+РПО_Позиции[n].СчКре); Template.Field="СчДеб"; Template.Frame=n; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиОбязательные(РПО_Позиции[n].СчДеб,РПО_Позиции[n].СчКре,РПО_Позиции[n].Признак,"")=False: Template.Field="Признак_"; Template.Frame=n; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиСвязанные(РПО_Позиции[n].СчДеб,РПО_Позиции[n].СчКре,РПО_Позиции[n].Признак,"")=False: Template.Field="Признак_"; Template.Frame=n; ^False; fi;
  if not ПроверитьТабПров_БО(n): Template.Field="Признак_"; Template.Frame=n; ^False; fi;
 od;
 ^True;
end;

Func Проверить:L;
var Iter:I;
 if Дата<=1.1.100: Message("Введите дату платежного поручения",mtError); Template.Object="Дата"; ^False; fi;
 if Сумма=0: Message("Введите сумму платежного поручения",mtError); Template.Field="Сумма"; ^False; fi;
 if Рекв=Nil: Message("Введите плательщика",mtError); Template.Field="БанкИмя_";  ^False; fi;
 if Банк=Nil: Message("Введите расчетный счет плательщика",mtError); Template.Field="Банк.РСчет";  ^False; fi;
 if РеквП=Nil: Message("Введите получателя",mtError); Template.Field="БанкИмяП_";  ^False; fi;
 if БанкП=Nil: Message("Введите расчетный счет получателя",mtError); Template.Field="БанкП.РСчет";  ^False; fi;
 if FlagChkTrans_Учитывать=True:
    if ПроверитьПров=False: ^False; fi;
 fi;
 УдалитьПустыеСтроки;
 if FlagChkСтрокиБК_Учитывать=True:
    if not Round(BKDelta,2)=0: Message("Сумма по строкам бюджетной классификации не совпадает с суммой платежного поручения",mtError); НеПустаяТаблица; Template.Field="BKDelta"; ^false; fi;
    for Iter=1..РПО_СТРОКИ_БК do
     if not РПО_СТРОКИ_БК[Iter].НомБО="":
        if РПО_СТРОКИ_БК[Iter].КодГлавы="": Message("Укажите код главы",mtError); Template.Field="КодГлавы"; Template.Frame=Iter; ^False; fi;
        if РПО_СТРОКИ_БК[Iter].КодПРД="": Message("Укажите код подраздела",mtError); Template.Field="КодПРД"; Template.Frame=Iter; ^False; fi;
        if РПО_СТРОКИ_БК[Iter].КодЦСТ="": Message("Укажите код целевой статьи",mtError); Template.Field="КодЦСТ"; Template.Frame=Iter; ^False; fi;
        if РПО_СТРОКИ_БК[Iter].КодВР="": Message("Укажите код вида расходов",mtError); Template.Field="КодВР"; Template.Frame=Iter; ^False; fi;
        if РПО_СТРОКИ_БК[Iter].КодЭК="": Message("Укажите код вида ЭКР",mtError); Template.Field="КодЭК"; Template.Frame=Iter; ^False; fi;
        if РПО_СТРОКИ_БК[Iter].МесФин="": Message("Укажите месяц финансирования",mtError); Template.Field="МесФин"; Template.Frame=Iter; ^False; fi;
        if not ПроверитьТабКБК_БО(Iter): Template.Field="НомБО"; Template.Frame=Iter; ^False; fi;
     fi;
     if РПО_СТРОКИ_БК[Iter].НомБО="" and not РПО_СТРОКИ_БК[Iter].МесФин="": Message("Выберите бюджетное обязательство",mtError); Template.Field="НомБО"; Template.Frame=Iter; ^False; fi;
    od;
 fi;
 НеПустаяТаблица;
 ^True;
end;

Proc РеквПToПризн (Iter:I);
var tmp,Mask:S;
var n,nn:i;
 if РПО_Позиции[iter].СчДеб="" or РПО_Позиции[iter].СчКре="": Exit; fi;
 Mask=Раб.Бюджет2005.СписокСправ(РПО_Позиции[iter].СчДеб+"|"+РПО_Позиции[iter].СчКре,0,"");
 RefreshAna;
 nn=RecSignsCount("Контрагент",РеквП);
 for n=1..nn do
  tmp=RecSign("Контрагент",РеквП,n);  --нам интересн только справочник (функция работает криво (или ее не умею готовить) + без учете иерархии)
  tmp=SubStr(tmp,1,Pos(".",tmp)-1); --берем только справочник
  if Раб.Бюджет2005.MatchMask(tmp+".",Mask):
     tmp=CardFileRecSign("Контрагент","Признак",tmp,РеквП);
     if SignCardFile(tmp,False)="Контрагент": РПО_Позиции[iter].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Признак,tmp); fi;
  fi;
 od;
end;

Proc РеквПToПризнPacket;
var iter:i;
 for iter=1..РПО_Позиции do
  if not РПО_Позиции[iter].СчДеб="" and not РПО_Позиции[iter].СчКре="": РеквПToПризн(Iter); fi;
 od;
end;

Proc БанкToПризн (Iter:I);
var tmp,Mask:S;
var n,nn:i;
 if РПО_Позиции[iter].СчДеб="" or РПО_Позиции[iter].СчКре="": Exit; fi;
 Mask=Раб.Бюджет2005.СписокСправ(РПО_Позиции[iter].СчДеб+"|"+РПО_Позиции[iter].СчКре,0,"");
 RefreshAna;
 nn=RecSignsCount("БАНК_СЧЕТА",Банк);
 for n=1..nn do
  tmp=RecSign("БАНК_СЧЕТА",Банк,n);
  if Раб.Бюджет2005.MatchMask(tmp,Mask):
     if SignCardFile(tmp,False)="БАНК_СЧЕТА": РПО_Позиции[iter].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Признак,tmp); fi;
  fi;
 od;
end;

Proc БанкToПризнPacket;
var iter:i;
 for iter=1..РПО_Позиции do
  if not РПО_Позиции[iter].СчДеб="" and not РПО_Позиции[iter].СчКре="": БанкToПризн(Iter); fi;
 od;
end;

Func PosТекст (St:S; Mode:S):I;
var lt,ls,nt,ns,p:i;
var ct,cs,target:S;
 if Mode="БК": Target=UserТекстБК_ГЛ+"???"+UserТекстБК_РП+"????"+UserТекстБК_ЦС+"???????"+UserТекстБК_ВР+"???"+UserТекстБК_ЭК+"???"+UserТекстБК_К;
   |Mode="ЛС" : Target=UserТекстЛС_ЛС+"???????????"+UserТекстЛС_К;
   |True: ^0;
 fi;
 if Match(St,"*"+Target+"*")=False: ^0; fi;
 lt=Length(Target);
 ls=Length(St);
 for p=1..ls do
  nt=1;
  for ns=p..ls do
   cs=SubStr(st,ns,1);
   ct=SubStr(Target,nt,1);
   if (ct="?" and cs=" ") or (ct<>"?" and cs<>ct): Break; else nt=nt+1; fi;
   if nt>lt: ^p; fi;
  od;
 od;
 ^0;
end;

Proc ДобавитьТекстНазнПлат (Mode:S; Value:S);
var n,p,l:i;
var Field,tmp:S;
 for n=1..5 do
  if n=1:Field=Т;|n=2:Field=РПО_Т1;|n=3:Field=РПО_Т2;|n=4:Field=РПО_Т3;|n=5:Field=РПО_Т4; fi;
  if Mode="БК":
     p=PosТекст(Field,Mode);
     if p>0 and UserНазнПлатБК=1:
        l=Length(Value);
        tmp=SubStr(Field,p,l);
        Field=Раб.Формат.ReplaceSubStr(Field,tmp,Value);
        if n=1:Т=Field;|n=2:РПО_Т1=Field;|n=3:РПО_Т2=Field;|n=4:РПО_Т3=Field;|n=5:РПО_Т4=Field; fi;
        Exit;
     fi;
     if p>0 and UserНазнПлатБК=0: Break; fi;
  fi;
  if РПО_MultiStr=False: n=6; Break; fi;
 od;
 if p=0 and Mode="БК": Value=UserТекстБК_Н+Value; fi;
 Field=AsString(Template.Field);--определяем в какую строчку назначения вставить СТ
 if Field="РПО_Т1": РПО_Т1=Раб.Бюджет2005.Объединить(РПО_Т1,Value," ");
   |Field="РПО_Т2": РПО_Т2=Раб.Бюджет2005.Объединить(РПО_Т2,Value," ");
   |Field="РПО_Т3": РПО_Т3=Раб.Бюджет2005.Объединить(РПО_Т3,Value," ");
   |Field="РПО_Т4": РПО_Т4=Раб.Бюджет2005.Объединить(РПО_Т4,Value," ");
   |True          : Т=Раб.Бюджет2005.Объединить(Т,Value," ");
 fi;
end;

Proc ПолучитьНазнПлат;
 if РПО_MultiStr=False:
    РПО_НазнПлат=Т;
   else
    РПО_НазнПлат=Т;
    РПО_НазнПлат=Раб.Бюджет2005.Объединить(РПО_НазнПлат,РПО_Т1," ");
    РПО_НазнПлат=Раб.Бюджет2005.Объединить(РПО_НазнПлат,РПО_Т2," ");
    РПО_НазнПлат=Раб.Бюджет2005.Объединить(РПО_НазнПлат,РПО_Т3," ");
    РПО_НазнПлат=Раб.Бюджет2005.Объединить(РПО_НазнПлат,РПО_Т4," ");
 fi;
end;

Func ВыборЭКР:S;
var n,p:i;
var tmp:s;
 ClearVariable(Buf);
 n=0; p=0;
 for Sign tmp=Раб.Бюджет2005.МаскаРасхКОСГУ+"|"+"КОСГУ.000",Sort do
  n=n+1;
  Buf[n]=SubStr(tmp,7,3)+" --"+Name_A(tmp);
  if StoreЭКР=SubStr(tmp,7,3): p=n; fi;
 od;
 n=Alternate("ЭКР",Buf,-1,p,12);
 if n=0: ^""; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 StoreЭКР=tmp;
 ^tmp;
end;

Func ВыборЭКД:S;
var n,p:i;
var tmp:s;
 ClearVariable(Buf);
 n=0; p=0;
 for Sign tmp=Раб.Бюджет2005.МаскаДоходКОСГУ+"|"+"КОСГУ.000",Sort do
  n=n+1;
  Buf[n]=SubStr(tmp,7,255)+" --"+Name_A(tmp);
  if StoreЭКД=SubStr(tmp,7,255): p=n; fi;
 od;
 n=Alternate("ЭКД",Buf,-1,p);
 if n=0: ^""; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 StoreЭКД=tmp;
 ^tmp;
end; 

Func ВыборЭКИФД:S;
var n,p:i;
var tmp:s;
 ClearVariable(Buf);
 n=0; p=0;
 for Sign tmp=Раб.Бюджет2005.МаскаДефицитКОСГУ+"|"+"КОСГУ.000",Sort do
  n=n+1;
  Buf[n]=SubStr(tmp,7,255)+" --"+Name_A(tmp);
  if StoreЭКИФД=SubStr(tmp,7,255): p=n; fi;
 od;
 n=Alternate("ЭКИФД",Buf,-1,p);
 if n=0: ^""; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 StoreЭКИФД=tmp;
 ^tmp;
end; 

Proc ДобавитьКБК (КБК:S; ЭКР:S);
var Iter,z:I;
var КБК_,ЭКР_:S;
 if UserНазнПлатБК=0:
    z=0;
    for Iter=1..РПО_СТРОКИ_БК do
     КБК_=РПО_СТРОКИ_БК[Iter].КодГлавы+"."+РПО_СТРОКИ_БК[Iter].КодПРД+"."+РПО_СТРОКИ_БК[Iter].КодЦСТ+"."+РПО_СТРОКИ_БК[Iter].КодВР;
     ЭКР_=РПО_СТРОКИ_БК[Iter].КодЭК;
     if КБК_=КБК and ЭКР_=ЭКР: Break; fi;
     if КБК_="..." and ЭКР_="": z=Iter; fi; --Запоминаем позиции с пустыми данными
    od;
    if not z=0: 
       Iter=z;
      else
       if Iter<=РПО_СТРОКИ_БК: Exit; fi;
       InsertFrame(РПО_СТРОКИ_БК,РПО_СТРОКИ_БК+1);
       Iter=РПО_СТРОКИ_БК;
    fi;
   else
    if РПО_СТРОКИ_БК<1: InsertFrame(РПО_СТРОКИ_БК,РПО_СТРОКИ_БК+1); fi;
    Iter=1;
 fi;
 РПО_СТРОКИ_БК[Iter].КодГлавы=Раб.Бюджет2005.ВзятьКодКБК(КБК,"ФКР","ППП",False);
 РПО_СТРОКИ_БК[Iter].КодПРД=Раб.Бюджет2005.ВзятьКодКБК(КБК,"ФКР","РП",False);
 РПО_СТРОКИ_БК[Iter].КодЦСТ=Раб.Бюджет2005.ВзятьКодКБК(КБК,"ФКР","ЦС",False);
 РПО_СТРОКИ_БК[Iter].КодВР=Раб.Бюджет2005.ВзятьКодКБК(КБК,"ФКР","ВР",False);
 РПО_СТРОКИ_БК[Iter].КодЭК=ЭКР;
end;

Proc ПолучитьДопАн(СчБанк:S; СчКорр:S; Iter:I);
var tmp,Справ,ПризнКБК,ТипКБК:S;
 Справ=Раб.Бюджет2005.СписокСправ(СчБанк+"|"+СчКорр,0,"");
 if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","ФКР.*|КД.*","|")="":
    ТипКБК=Раб.Бюджет2005.ТипКБКСчета(СчБанк);
    if ТипКБК="КИФД":
       ТипКБК=Раб.Бюджет2005.ТипКБКСчета(СчКорр);
       ПризнКБК=Раб.Бюджет2005.ВзятьКодСчета(СчКорр,ТипКБК,"КБК",False);
      else
       ПризнКБК=Раб.Бюджет2005.ВзятьКодСчета(СчБанк,ТипКБК,"КБК",False);
    fi;
    if not ПризнКБК="" and (ТипКБК="ФКР" or ТипКБК="КД"):
       ПризнКБК=ТипКБК+"."+ПризнКБК;
       РПО_Позиции[Iter].Признак=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(РПО_Позиции[Iter].Признак," ",ПризнКБК,"ФКР.*|КД.*|КИФД.*","|");
    fi;
 fi;
 if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
    ПризнКБК=Раб.КБК.ВзятьЭКСчета(СчБанк,"КР");
    if ПризнКБК="": ПризнКБК=Раб.КБК.ВзятьЭКСчета(СчКорр,"КР"); fi;
    if not ПризнКБК="":
       ПризнКБК="КОСГУ."+ПризнКБК;
       tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Признак," ","КОСГУ.*","");
       if not Match(tmp,ПризнКБК+"!"):
          РПО_Позиции[Iter].Признак=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(РПО_Позиции[Iter].Признак," ",ПризнКБК,"КОСГУ.*","|");
       fi;
    fi;
 fi;
end;

Proc УстановТипТаблБК;
var Iter:I;
 for Iter=1..РПО_СТРОКИ_БК do
  if ТипТаблБК=1 or ТипТаблБК=2 or ТипТаблБК=3:
     if not РПО_СТРОКИ_БК[Iter].КодГлавы="": РПО_СТРОКИ_БК[Iter].КодГлавы=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодПРД="":   РПО_СТРОКИ_БК[Iter].КодПРД=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодЦСТ="":   РПО_СТРОКИ_БК[Iter].КодЦСТ=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодВР="":    РПО_СТРОКИ_БК[Iter].КодВР=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодЦП="":    РПО_СТРОКИ_БК[Iter].КодЦП=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодЭК="":    РПО_СТРОКИ_БК[Iter].КодЭК=""; fi;
  fi;
  if ТипТаблБК=1:
     if not РПО_СТРОКИ_БК[Iter].КодКИВФ="":  РПО_СТРОКИ_БК[Iter].КодКИВФ=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодКИВнФ="": РПО_СТРОКИ_БК[Iter].КодКИВнФ=""; fi;
    |ТипТаблБК=2:
     if not РПО_СТРОКИ_БК[Iter].КодКД="":    РПО_СТРОКИ_БК[Iter].КодКД=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодКИВнФ="": РПО_СТРОКИ_БК[Iter].КодКИВнФ=""; fi;
    |ТипТаблБК=3:
     if not РПО_СТРОКИ_БК[Iter].КодКД="":    РПО_СТРОКИ_БК[Iter].КодКД=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодКИВФ="":  РПО_СТРОКИ_БК[Iter].КодКИВФ=""; fi;
    |True:
     if not РПО_СТРОКИ_БК[Iter].КодКД="":    РПО_СТРОКИ_БК[Iter].КодКД=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодКИВФ="":  РПО_СТРОКИ_БК[Iter].КодКИВФ=""; fi;
     if not РПО_СТРОКИ_БК[Iter].КодКИВнФ="": РПО_СТРОКИ_БК[Iter].КодКИВнФ=""; fi;
  fi;
 od;
 Оформление;
end;

Proc ПолучитьТипТаблБК;
var Iter:I;
 ТипТаблБК=0;
 for Iter=1..РПО_СТРОКИ_БК do
  if not РПО_СТРОКИ_БК[Iter].КодГлавы+РПО_СТРОКИ_БК[Iter].КодПРД+РПО_СТРОКИ_БК[Iter].КодЦСТ+РПО_СТРОКИ_БК[Iter].КодВР+РПО_СТРОКИ_БК[Iter].КодЦП+РПО_СТРОКИ_БК[Iter].КодЭК="": ТипТаблБК=0; Exit;
    |not РПО_СТРОКИ_БК[Iter].КодКД="": ТипТаблБК=1; Exit;
    |not РПО_СТРОКИ_БК[Iter].КодКИВФ="": ТипТаблБК=2; Exit;
    |not РПО_СТРОКИ_БК[Iter].КодКИВнФ="": ТипТаблБК=3; Exit;
  fi;
 od;
end;

Proc ОбработатьНомер (vНомерБум:S);
var tmp:i;
 tmp=Int(vНомерБум);
 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;

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;

Proc Вызов_Из_ДО;
var Iter:I;
var Flag:L;
 Call="";
 for Iter=1..РПО_Позиции do
  ПолучитьДопАн(РПО_Позиции[Iter].СчКре,РПО_Позиции[Iter].СчДеб,Iter);
 od;
 Flag=ExecuteFuncL("Txt1_onEnter","",1);
 ExecuteProc("btnНДС_onClick","");
 EditorApply;
end;
--Процедуры и функции -------------
--
--Обработчики событий полей шаблона-----
Func Txt2_onEnter (Field:S; Iter:I):L;
var n:i;
 if Field="Txt2":
    if EnqOkCancel("Будут восстановлены значения по умолчанию. Вы уверены?")=cmCancel: ^False; fi;
 fi;
 FlagChkTrans_Учитывать=DefFlagChkTrans_Учитывать;
 FlagChkСтрокиБК_Учитывать=DefFlagChkСтрокиБК_Учитывать;
 UserРекв="";
 UserБанк="";
 UserРекв_="";
 UserБанк_="";
 UserMultiStr=DefMultiStr;
 ClearVariable(УпрБанкСч);
 ClearVariable(БанкСч);
 ClearVariable(БанкСчет);
 ClearVariable(UserСчДеб);
 ClearVariable(UserСчКре);
 ClearVariable(UserПризн);
 InsertFrame(УпрБанкСч,1);
 УпрБанкСч_=УпрБанкСч;
 БанкСч[1]=DefБанкСч;
 БанкСчет[1]=DefБанкСчет;
 UserСчДеб[1]=DefСчДеб;
 UserСчКре[1]=DefСчКре;
 UserПризн[1]=DefПризн;
 UserТекстНДС18=DefТекстНДС18;
 UserТекстНДС10=DefТекстНДС10;
 UserТекстНДС00=DefТекстНДС00;
 UserТекстБК_Н=DefТекстБК_Н;
 UserТекстБК_ГЛ=DefТекстБК_ГЛ;
 UserТекстБК_РП=DefТекстБК_РП;
 UserТекстБК_ЦС=DefТекстБК_ЦС;
 UserТекстБК_ВР=DefТекстБК_ВР;
 UserТекстБК_ЭК=DefТекстБК_ЭК;
 UserТекстБК_К=DefТекстБК_К;
 UserТекстЛС_Н=DefТекстЛС_Н;
 UserТекстЛС_ЛС=DefТекстЛС_ЛС;
 UserТекстЛС_К=DefТекстЛС_К;
 UserНазнПлатБК=DefНазнПлатБК;
 FlagCopyTrans=DefFlagCopyTrans;
 if Field="Txt2":
   Message("Значения по умолчанию восстановлены");
 fi;
 ^False;
end;

Func Txt3_onEnter (Field:S; Iter:I):L;
 ЗакрытьНастр;
 Настр(True);
 ^False;
end;

Func FlagChk_onEnter (Field:S; Iter:I):L;
var Value:L;
 if Field="FlagChkTrans_Учитывать_": Value=FlagChkTrans_Учитывать;
   |Field="FlagChkСтрокиБК_Учитывать_": Value=FlagChkСтрокиБК_Учитывать;
 fi;
 if Value: Value=False; else Value=True; fi;
 if Field="FlagChkTrans_Учитывать_": FlagChkTrans_Учитывать=Value;
   |Field="FlagChkСтрокиБК_Учитывать_": FlagChkСтрокиБК_Учитывать=Value;
 fi;
 ^False;
end;

Func UserРекв_onEnter (Field:S; Iter:I):L;
var rec:record;
 Rec=ОткрытьКартотеку("Контрагент","Наше");
 if Rec=nil: ^False; fi;
 UserРекв=RecordToString(Rec);
 UserРекв_=GetCardFieldS("Контрагент",Rec,"КорИмя");
 Rec=Раб.Бюджет2005.БанкСчет(Rec,False);
 if Rec=Nil: 
    UserБанк=""; 
    UserБанк_=""; 
    if Length(UserРекв_)>160: Message("Внимание! Превышено максимально возможное количество знаков (160) в поле 'Плательщик'",mtWarning); fi;
    ^False;
 fi;
 UserБанк=RecordToString(Rec);
 UserБанк_=GetCardFieldS("БАНК_СЧЕТА",Rec,"РСчет");
 UserРекв_=GetCardFieldS("БАНК_СЧЕТА",Rec,"БанкИмя");
 if Length(UserРекв_)>160: Message("Внимание! Превышено максимально возможное количество знаков (160) в поле 'Плательщик'",mtWarning); fi;
 ^False;
end;

Proc UserРекв_onExit (Field:S; Iter:I);
 UserРекв="";
 UserБанк="";
 UserБанк_="";
end;

Func UserБанк_onEnter (Field:S; Iter:I):L;
var Rec: Record;
 if UserРекв="": Message("Выберите плательщика !"); Template.Field="UserРекв_"; ^False; fi;
 Rec=OpenCardFile("БАНК_СЧЕТА","Контрагент="+UserРекв);
 if Rec=nil: ^False; fi;
 UserБанк=RecordToString(Rec);
 UserБанк_=GetCardFieldS("БАНК_СЧЕТА",Rec,"РСчет");
 UserРекв_=GetCardFieldS("БАНК_СЧЕТА",Rec,"БанкИмя");
 if Length(UserРекв_)>160: Message("Внимание! Превышено максимально возможное количество знаков (160) в поле 'Плательщик'",mtWarning); fi;
end;

Proc UserБанк_onExit (Field:S; Iter:I);
 UserРекв="";
 UserРекв_="";
 UserБанк_="";
end;

Func UserMultiStr_onEnter (Field:S; Iter:I):L;
 if UserMultiStr=True: UserMultiStr=False; else UserMultiStr=True; fi;
 ^False;
end;

Func FlagCopyTrans_onEnter  (Field:S; Iter:I):L;
 if FlagCopyTrans=True: FlagCopyTrans=False; else FlagCopyTrans=True; fi;
 ^False;
end;

Func Add3_Iter (Field:S; Iter:I):L;
 InsertFrame(УпрБанкСч,Iter+1);
 УпрБанкСч_=УпрБанкСч;
 БанкСч[Iter+1]=БанкСч[Iter];
 ^false;
end;

Func Del3_Iter (Field:S; Iter:I):L;
 if УпрБанкСч>1: 
    DeleteFrame(УпрБанкСч,Iter);
   else 
    DeleteFrame(УпрБанкСч,Iter);
    InsertFrame(УпрБанкСч,Iter);
 fi;
 УпрБанкСч_=УпрБанкСч;
 ^false;
end;

Func БанкСч_onEnter (Field:S; Iter:I):L;
 if БанкСч[Iter]=0: БанкСч[Iter]=БанкСч[Iter]+1;
   |True: БанкСч[Iter]=0;
 fi;
 ^False;
end;

Func UserСчДеб_onEnter (Field:S; Iter:I):L;
var tmp:s;
 tmp=ВыборКоррСчета(UserСчКре[Iter],True);
 if tmp="": ^False; fi;
 UserСчДеб[Iter]=tmp;
 tmp=Раб.Бюджет.НаборПризнаков(UserСчДеб[Iter],UserСчКре[Iter],"");
 UserПризн[Iter]=Раб.Бюджет.МухиОтКотлет(UserПризн[Iter],tmp);
 ^False;
end;

Func UserСчКре_onEnter (Field:S; Iter:I):L;
var tmp:s;
 tmp=ВыборСчета(ТекСчета);
 if tmp="": ^False; fi;
 UserСчКре[Iter]=tmp;
 if Correspond(tmp,UserСчДеб[Iter])=False: UserСчДеб[Iter]=""; fi;
 tmp=Раб.Бюджет.НаборПризнаков(UserСчДеб[Iter],UserСчКре[Iter],"");
 UserПризн[Iter]=Раб.Бюджет.МухиОтКотлет(UserПризн[Iter],tmp);
 ^False;
end;

Func UserПризн_onEnter (Field:S; Iter:I):L;
var Mask:S;
var tmp:s;
 tmp=Раб.Бюджет2005.Объединить(UserСчДеб[Iter],UserСчКре[Iter],"|");
 Mask=Раб.Бюджет2005.СписокСправ(tmp,0,"");
 tmp=ВыборПризнака(Mask);
 if tmp="": ^False; fi;
 UserПризн[Iter]=Раб.Бюджет.ДобавитьПризнак(UserПризн[Iter],tmp);
 ^False;
end;

Func UserТекстБК_OnType(Sect: String; Row: Integer; Col: Integer; Code: Integer; Cur: String): String;
var Field:S;
 Field=AsString(Template.Field);
 if Code=13: 
    Template.HideEditor(False);
    if Cur="" and prevCode=32: Cur=GetVariableS(Field); fi;
    PutVariableS(Field,Cur);
   |Code=32:
    if Cur="": PutVariableS(Field,GetVariableS(Field)+" "); fi;
 fi;
 prevCode=Code;
 Return Cur;
end;

Func UserНазнПлатБК_onEnter (Field:S; Iter:I):L;
 if UserНазнПлатБК<1: UserНазнПлатБК=UserНазнПлатБК+1;
   |True: UserНазнПлатБК=0;
 fi;
 ^False;
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;
var tmp:S;
 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;

func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var dtmp :Date;
var FieldSender:S;
var prevДата:D;
 Template.HideEditor(False);
 FieldSender=AsString(Template.Field);
 dtmp=Calendar(ToDay);
 if dtmp<=1.1.100: ^Cur; fi;
 prevДата=GetVariableD(FieldSender);
 PutVariableD(FieldSender,dtmp);
 if FieldSender="Дата": ОбработатьДату(prevДата,Дата); fi;
 ^Cur;
end;

Func ВидПл_onEnter (Field:s;Iter:i):L;
var n:i;
 ClearVariable(Buf);
 Buf[1]="<пусто>";
 Buf[2]="срочно";
 n=Alternate("Вид платежа",Buf,-1,SearchInArray(Buf,ВидПл),12);
 if n=1: ВидПл="";
   |not n=0: ВидПл=buf[n];
 fi;
 ^False;
end;

Func БанкИмя_onEnter (Field:S; Iter:I):L;
var rec:record;
 Rec=ОткрытьКартотеку("Контрагент","Наше",Рекв,crdRecordOnly);
 if Rec=nil: ^False; fi;
 Рекв=Rec;
 Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
 БухПоУмолчанию(0);
 БанкToПризнPacket;
 if Length(БанкИмя_)>160: Message("Внимание! Превышено максимально возможное количество знаков (160) в поле 'Плательщик'",mtWarning); fi;
 ^False;
End;

Proc Сумма_OnExit(FieldName: String; Iter: Integer);
 if РПО_Позиции=1: РПО_Позиции[1].Сум=Сумма; fi;
 if РПО_СТРОКИ_БК=1: РПО_СТРОКИ_БК[1].Сум=Сумма; fi;
end;

Func РСчет_onEnter(Field:S; Iter:I):L;
var Rec:Record;
 if Рекв=nil: Message("Выберите плательщика",mtError); Template.Field="БанкИмя_"; ^False; fi;
 Rec=ОткрытьКартотеку("Банк_Счета","Контрагент="+RecordToString(Рекв),Банк);
 if Rec=Nil: ^False; fi;
 Банк=Rec;
 БухПоУмолчанию(0);
 БанкToПризнPacket;
end;

Func БанкИмяП_onEnter (Field:S; Iter:I):L;
var rec:record;
 rec=ОткрытьКартотеку("Контрагент","",РеквП);
 if rec=nil: ^False; fi;
 РеквП=rec;
 БанкП=Раб.Бюджет2005.БанкСчет(РеквП,False);
 РеквПToПризнPacket;
 if Length(БанкИмяП_)>160: Message("Внимание! Превышено максимально возможное количество знаков (160) в поле 'Получатель'",mtWarning); fi;
 ^False;
End;

Func РСчетП_onEnter(Field:S; Iter:I):L;
var Rec:Record;
 if РеквП=nil: Message("Выберите получателя",mtError); Template.Field="БанкИмяП_"; ^False; fi;
 Rec=ОткрытьКартотеку("Банк_Счета","Контрагент="+RecordToString(РеквП),БанкП);
 if Rec=Nil: ^False; fi;
 БанкП=Rec;
end;

Func ДатаО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="1 -- исполнительные документы по причинению вреда здоровью, жизни; алименты";
 Buf[2]="2 -- исполнительные документы по выходным пособиям, оплате труда с работающими и бывшими работниками; выплата вознаграждений авторам за результаты интеллектуальной деятельности";
 Buf[3]="3 -- платежные документы по оплате труда; поручения налоговых органов по налогам, сборам; поручения органов контроля по страховым взносам в гос. внебюджетные фонды (в предыдущей редакции указаны ПФР, ФСС, ФОМС)";
 Buf[4]="4 -- другие исполнительные документы";
 Buf[5]="5 -- остальные платежные документы в порядке календарной очереди";
 n=Alternate("Очередность платежа",Buf,-1,Int(ДатаО),12);
 if not n=0: 
    ДатаО=SubStr(Buf[n],1,2);
 fi;
 Return Cur;
end;

Proc Т_OnExit(FieldName: String; Iter: Integer);
 ПолучитьНазнПлат;
 if Length(РПО_НазнПлат)>210: Message("Внимание! Превышено максимально возможное количество знаков (210) в поле 'Назначение платежа'",mtWarning); fi;
end;

Func П_OnVerify(FieldName: String; Iter: Integer; Value: String):Logical;
 if FieldName="П2" or FieldName="П3" or FieldName="П6" or FieldName="П7": ^True; fi;
 if not Бюджет: 
    if EnqOkCancel("Установить флаг платеж в бюджет ?",mtWarning)=cmCancel: ^True; fi;
    Бюджет=true;
    cbБюджет.State=Бюджет;
 fi;
 Return True ;
end;

Proc btnП1_OnClick(Sender: String);
var n:i;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 Buf2[01]="01"; Buf[01]="01 -- налогоплательщик (плательщик сборов) - юридическое лицо";
 Buf2[02]="02"; Buf[02]="02 -- налоговый агент";
 Buf2[03]="06"; Buf[03]="06 -- участник внешнеэкономической деятельности - юридическое лицо";
 Buf2[04]="08"; Buf[04]="08 -- плательщик - юридическое лицо (индивидуальный предприниматель), осуществляющее перевод денежных средств в уплату страховых взносов и иных платежей в бюджетную систему Российской Федерации";
 Buf2[05]="09"; Buf[05]="09 -- налогоплательщик (плательщик сборов) - индивидуальный предприниматель";
 Buf2[06]="10"; Buf[06]="10 -- налогоплательщик (плательщик сборов) - нотариус, занимающийся частной практикой";
 Buf2[07]="11"; Buf[07]="11 -- налогоплательщик (плательщик сборов) - адвокат, учредивший адвокатский кабинет";
 Buf2[08]="12"; Buf[08]="12 -- налогоплательщик (плательщик сборов) - глава крестьянского (фермерского) хозяйства";
 Buf2[09]="13"; Buf[09]="13 -- налогоплательщик (плательщик сборов) - иное физическое лицо - клиент банка (владелец счета)";
 Buf2[10]="14"; Buf[10]="14 -- налогоплательщик, производящий выплаты физическим лицам";
 Buf2[11]="16"; Buf[11]="16 -- участник внешнеэкономической деятельности - физическое лицо";
 Buf2[12]="17"; Buf[12]="17 -- участник внешнеэкономической деятельности - индивидуальный предприниматель";
 Buf2[13]="19"; Buf[13]="19 -- организации и их филиалы, составившие распоряжение о переводе денежных средств, удержанных из заработной платы (дохода) должника - физического лица в счет погашения задолженности по платежам в бюджетную систему РФ на основании исполнительного документа";
 Buf2[14]="21"; Buf[14]="21 -- ответственный участник консолидированной группы налогоплательщиков";
 Buf2[15]="22"; Buf[15]="22 -- участник консолидированной группы налогоплательщиков";
 Buf2[16]="24"; Buf[16]="24 -- плательщик - физическое лицо, осуществляющее перевод денежных средств в уплату страховых взносов и иных платежей в бюджетную систему Российской Федерации";
 n=Alternate('Статус',Buf,-1,SearchInArray(Buf2,П1,False),12);
 if n=0: Exit; fi;
 П1=SubStr(Buf[n],1,2);
 Бюджет=True;
 cbБюджет.State=Бюджет;
end;

Func П2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 Template.HideEditor(False);
 tmp=Раб.КБК.ВыбратьКД;
 if tmp="": ^Cur; fi;
 П2=tmp;
-- Бюджет=True;
-- cbБюджет.State=Бюджет;
^Cur;
end;

Func П3_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 if РеквП=Nil: Message("Введите получателя",mtError); Template.Field="БанкИмяП_";  ^Cur; fi;
 if Дата>=1.1.2014:
    П3=РеквП.ОКТМО;
   else
    П3=РеквП.ОКАТО;
 fi;
 if П3="": П3="0"; fi;
 --Бюджет=True;
 --cbБюджет.State=Бюджет;
 ^Cur;
end;

Proc btnП4_OnClick(Sender: String);
var n:i;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 Buf2[01]="ТП"; Buf[01]="ТП -- платежи текущего года";
 Buf2[02]="ЗД"; Buf[02]="ЗД -- добровольное погашение задолженности но истекшим налоговым, расчетным (отчетным) периодам при отсутствии требования налогового органа об уплате налогов (сборов)";
 Buf2[03]="БФ"; Buf[03]="БФ -- текущий платеж физлица - клиента банка (владельца счета), уплачиваемый со своего банковского счета";
 Buf2[04]="ТР"; Buf[04]="ТР -- погашение задолженности по требованию налогового органа об уплате налогов (сборов)";
 Buf2[05]="РС"; Buf[05]="РС -- погашение рассроченной задолженности";
 Buf2[06]="ОТ"; Buf[06]="ОТ -- погашение отсроченной задолженности";
 Buf2[07]="РТ"; Buf[07]="РТ -- погашение реструктурируемой задолженности";
 Buf2[08]="ПБ"; Buf[08]="ПБ -- погашение должником задолженности в ходе процедур, применяемых в деле о банкротстве";
 Buf2[09]="ПР"; Buf[09]="ПР -- погашение задолженности, приостановленной к взысканию";
 Buf2[10]="АП"; Buf[10]="АП -- погашение задолженности по акту проверки";
 Buf2[11]="АР"; Buf[11]="АР -- погашение задолженности но исполнительному документу";
 Buf2[12]="ИН"; Buf[12]="ИН -- погашение инвестиционного налогового кредита";
 Buf2[13]="ТЛ"; Buf[13]="ТЛ -- погашение учредителем (участником) должника, собственником имущества должника - унитарного предприятия или третьим лицом задолженности в ходе процедур, применяемых в деле о банкротстве";
 Buf2[14]="ЗТ"; Buf[14]="ЗТ -- погашение текущей задолженности в ходе процедур, применяемых в деле о банкротстве";
 Buf2[15]="0";  Buf[15]="0  -- при невозможности однозначно идентифицировать платеж";
 n=Alternate('Основание платежа',Buf,-1,SearchInArray(Buf2,П4,False),12);
 if n=0: Exit; fi;
 П4=Trim(SubStr(Buf[n],1,2));
 Бюджет=True;
 cbБюджет.State=Бюджет;
end;

Func П5_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,yyyy:I;
var tmp:D;
var П5_:s;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[01]="Выбрать дату";
 Buf[02]="МС.01 - Месячный платеж за январь";
 Buf[03]="МС.02 - Месячный платеж за февраль";
 Buf[04]="МС.03 - Месячный платеж за март";
 Buf[05]="МС.04 - Месячный платеж за апрель";
 Buf[06]="МС.05 - Месячный платеж за май";
 Buf[07]="МС.06 - Месячный платеж за июнь";
 Buf[08]="МС.07 - Месячный платеж за июль";
 Buf[09]="МС.08 - Месячный платеж за август";
 Buf[10]="МС.09 - Месячный платеж за сентябрь";
 Buf[11]="МС.10 - Месячный платеж за октярь";
 Buf[12]="МС.11 - Месячный платеж за ноябрь";
 Buf[13]="МС.12 - Месячный платеж за декабрь";
 Buf[14]="КВ.01 - Квартальный платеж за I квартал";
 Buf[15]="КВ.02 - Квартальный платеж за II квартал";
 Buf[16]="КВ.03 - Квартальный платеж за III квартал";
 Buf[17]="КВ.04 - Квартальный платеж за IV квартал";
 Buf[18]="ПЛ.01 - Полугодовой платеж за I полугодие";
 Buf[19]="ПЛ.02 - Полугодовой платеж за II полугодие";
 Buf[20]="ГД.00 - Годовой платеж";
 n=Alternate('Основание платежа',Buf,-1,1,12);
 if n=0: ^Cur; fi;
 Бюджет=True;
 cbБюджет.State=Бюджет;
 if n=1: tmp=Calendar; if tmp<>1.1.100: П5=DateToString(tmp); fi; ^Cur; fi;
 П5_=SubStr(Buf[n],1,5);
 ClearVariable(Buf);
 for n=1..5 do Buf[n]=Str(Year(ToDay)+n-4); od;
 InsertInArray(Buf,1,"Ввести год в ручную");
 n=Alternate("Год налогового периода",Buf,30,5);
 if n=0: ^Cur;
   |n=1: if Input(YYYY,"Введите год налогового периода")=cmCancel: ^Cur; fi;
   |True: YYYY=Int(Buf[n]);
 fi;
 П5=П5_+"."+Str(yyyy);
 ^Cur;
end;

Func П7_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    П7=DateToString(tmp);
-- Бюджет=True;
-- cbБюджет.State=Бюджет;
 fi;
 ^Cur;
end;

Proc btnП8_OnClick(Sender: String);
var n:I;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 Buf2[1]="0";  Buf[1]="0  -- уплата налогов, сборов, авансовых платежей, взносов, налоговых санкций, административных и иных штрафов, прочих платежей в налоговые органы, кроме пени и процентов (в налоговые органы); в остальных случаях (в таможенные органы)";
 Buf2[2]="ПЕ"; Buf[2]="ПЕ -- уплата пени (в налоговые и таможенные органы)";
 Buf2[3]="ПЦ"; Buf[3]="ПЦ -- уплата процентов (в налоговые органы)";
 Buf2[4]="ШТ"; Buf[4]="ШТ -- уплата штрафа (в таможенные органы)";
 Buf2[5]="ЗД"; Buf[5]="ЗД -- уплата в счет погашения задолженности (в таможенные органы)";
 n=Alternate('Тип платежа',Buf,-1,SearchInArray(Buf2,П8,False),12);
 if n=0: Exit; fi;
 П8=Trim(SubStr(Buf[n],1,2));
 Бюджет=True;
 cbБюджет.State=Бюджет;
end;

Func Add_Iter (Field:S; Iter:I):L;
 if (РПО_Учитывать and FlagChkTrans_Учитывать) or Проводить or isChild: ^False; fi;
 InsertFrame(РПО_Позиции,Iter+1);
 if FlagCopyTrans:
    РПО_Позиции[Iter+1].СчДеб=РПО_Позиции[Iter].СчДеб;
    РПО_Позиции[Iter+1].СчКре=РПО_Позиции[Iter].СчКре;
    РПО_Позиции[Iter+1].Признак=РПО_Позиции[Iter].Признак;
    РПО_Позиции[Iter+1].Кмнт=РПО_Позиции[Iter].Кмнт;
   else
    БухПоУмолчанию(Iter+1);
 fi;
 ^false;
end;

Func Del_Iter (Field:S; Iter:I):L;
 if (РПО_Учитывать and FlagChkTrans_Учитывать) or Проводить or isChild: ^False; fi;
 if РПО_Позиции>1: DeleteFrame(РПО_Позиции,Iter); else DeleteFrame(РПО_Позиции,Iter); InsertFrame(РПО_Позиции,Iter); fi;
 ^false;
end;

Func Txt0_onEnter (Field:S; Iter:I):L;
var tmp:s;
var n:i;
 if (РПО_Учитывать and FlagChkTrans_Учитывать) or Проводить or isChild: ^False; fi;
 tmp="п/п "+НомерБум+" от "+DateToString(Дата)+" ";
 tmp=tmp+Т+" "+РПО_Т1+" "+РПО_Т2+" "+РПО_Т3+" "+РПО_Т4;
 tmp=Раб.Бюджет.CheckSet(tmp," ");
 for n=1..РПО_Позиции do
  РПО_Позиции[n].Кмнт=tmp;
 od;
 ^False;
end;

Func СчДеб_onEnter (Field:S; Iter:I):L;
var tmp:S;
 if РПО_Позиции[iter].СчКре="": Message("Введите субсчет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^false; fi;
 tmp=ВыборКоррСчета(РПО_Позиции[Iter].СчКре,True,StoreСчДеб);
 if tmp="": ^False; fi;
 РПО_Позиции[Iter].СчДеб=tmp;
 StoreСчДеб=tmp;
 if РПО_Позиции[Iter].СчДеб<>"" and РПО_Позиции[Iter].СчКре<>"":
    tmp=Раб.Бюджет.НаборПризнаков(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,"");
    РПО_Позиции[iter].Признак=Раб.Бюджет.МухиОтКотлет(РПО_Позиции[iter].Признак,tmp);
    РеквПToПризн(Iter);
    БанкToПризн(Iter);
 fi;
 ПолучитьДопАн(РПО_Позиции[Iter].СчКре,РПО_Позиции[Iter].СчДеб,Iter);
^False;
end;

Func СчКре_onEnter (Field:S; Iter:I):L;
var tmp:S;
 tmp=ВыборСчета(ТекСчета,False,StoreСчКре);
 if tmp="": ^False; fi;
 StoreСчКре=tmp;
 РПО_Позиции[Iter].СчКре=tmp;
 if Correspond(РПО_Позиции[Iter].СчДеб,tmp)=False: РПО_Позиции[Iter].СчДеб=""; fi;
 if not РПО_Позиции[Iter].СчДеб="" and not РПО_Позиции[Iter].СчКре="":
    tmp=Раб.Бюджет.НаборПризнаков(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,"");
    РПО_Позиции[iter].Признак=Раб.Бюджет.МухиОтКотлет(РПО_Позиции[iter].Признак,tmp);
    РеквПToПризн(Iter);
    БанкToПризн(Iter);
    ПолучитьДопАн(РПО_Позиции[Iter].СчКре,РПО_Позиции[Iter].СчДеб,Iter);
 fi;
^False;
end;

Func Призн_onEnter (Field:S; Iter:I):L;
var Mask,tmp:S;
var Rec: Record;
 if РПО_Позиции[iter].СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^false; fi;
 if РПО_Позиции[iter].СчДеб="": Message("Введите счет дебета",mtError);  Template.Field="СчДеб"; Template.Frame=Iter; ^false; fi;
 Mask=Раб.Бюджет.НаборПризнаков(РПО_Позиции[iter].СчДеб,РПО_Позиции[iter].СчКре,"");
 tmp=ВыборПризнака(Mask);
 if tmp="": ^False; fi;
 РПО_Позиции[iter].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Признак,tmp);
 if Match(tmp,"БО.*"):
    Rec=SignToRecord(tmp);
    if not Rec=nil and SignCardFile(tmp)="РПО_БО":
       tmp=GetCardFieldS("РПО_БО",Rec,"ДОГОВОР_ПРИЗН");
       if tmp="": РПО_Позиции[iter].Признак=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(РПО_Позиции[iter].Признак," ","ДОГОВОР.*",""); else РПО_Позиции[iter].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Признак,tmp); fi;    
    fi;
 fi;
 ^False;
end;

Func Txt4_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var tmp,F,КБК_,КОСГУ_:s;
 if Проводить or (РПО_Учитывать and FlagChkTrans_Учитывать) or isChild: ^False; fi;
 if РЕКВ=nil: Message("Введите получателя",mtError); Template.Field="БанкИмяП_"; ^False; fi;
 if РПО_Позиции[iter].СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^false; fi;
 if РПО_Позиции[iter].СчДеб="": Message("Введите счет дебета",mtError);  Template.Field="СчДеб"; Template.Frame=Iter; ^false; fi;
 if Match(РПО_Позиции[iter].СчКре,"*.?.304.05.*") or Match(РПО_Позиции[iter].СчКре,"*.?.304.04.*"):
    КБК_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[iter].СчКре,"ФКР","КБК",False);
    КОСГУ_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[iter].СчКре,"ФКР","КОСГУ",False);
    F=" and КБК='"+КБК_+"' and КОСГУ='"+КОСГУ_+"'";
   else
    F="";
 fi;
 tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Признак," ","БО.*","");
 if tmp="": Rec=nil; else Rec=SignToRecord(tmp); fi;
 Rec=OpenCardFile("РПО_БО","Проводить and Контр="+RecordToString(РеквП)+F,Rec,crdRecordOnly);
 if Rec=nil: ^False; fi;
 tmp=CardFileRecSign("РПО_БО","Признак","БО",Rec);
 РПО_Позиции[iter].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Признак,tmp);
 tmp=GetCardFieldS("РПО_БО",Rec,"ДОГОВОР_ПРИЗН");
 if tmp="": РПО_Позиции[iter].Признак=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(РПО_Позиции[iter].Признак," ","ДОГОВОР.*",""); else РПО_Позиции[iter].Признак=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Признак,tmp); fi;
 Return False;
end;

Proc Призн_onExit(FieldName: String; Iter: Integer);
 РПО_Позиции[iter].Признак=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(РПО_Позиции[iter].Признак," ","Name_A");
end;

Func ТипТаблБК_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Классификация расходов";
 Buf[2]="Классификация доходов";
 Buf[3]="Классификация источников внутреннего финансирования дефицитов";
 Buf[4]="Классификация источников внешнего финансирования дефицитов";
 n=Alternate("Тип классификации",Buf,-1,ТипТаблБК);
 if n=0: ^False; fi;
 ТипТаблБК=n-1;
 УстановТипТаблБК;
 Return  False;
end;

Func Add2_Iter (Field:S; Iter:I):L;
 if РПО_Учитывать or isChild: ^False; fi;
 InsertFrame(РПО_Строки_БК,Iter+1);
 ^false;
end;

Func Del2_Iter (Field:S; Iter:I):L;
 if РПО_Учитывать or isChild: ^False; fi;
 if РПО_Строки_БК>1: DeleteFrame(РПО_Строки_БК,Iter);
   else 
    DeleteFrame(РПО_Строки_БК,Iter);
    InsertFrame(РПО_Строки_БК,Iter);
 fi;
 ^false;
end;

Func СтрокиКИВФ_onEnter (Field:S; Iter:I):L;
var tmp, КБК :S;
 tmp=AnaElection("КИФД.*");
 if tmp="": ^False; fi;
 tmp=SubStr(tmp,6,255);
 КБК=Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","ППП",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","ГР",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","ПГР",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","СТ",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","ПСТ",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","ЭЛ",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КИФД","ПРГ",False);
 tmp=ВыборЭКИФД;
 if tmp="": ^False; fi;
 if Field="КодКИВнФ": РПО_Строки_БК[Iter].КодКИВнФ=КБК+tmp;
 |  Field="КодКИВФ" : РПО_Строки_БК[Iter].КодКИВФ =КБК+tmp;
 fi;
 ^False;
end;

Func СтрокиКД_onEnter (Field:S; Iter:I):L;
var tmp, КБК :S;
 tmp=AnaElection("КД.*");
 if tmp="": ^False; fi;
 tmp=SubStr(tmp,4,255);
 КБК=Раб.Бюджет2005.ВзятьКодКБК(tmp, "КД","ППП",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КД","ГР",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КД","ПГР",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КД","СТ",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КД","ЭЛ",False)
    +Раб.Бюджет2005.ВзятьКодКБК(tmp, "КД","ПРГ",False);
 tmp=ВыборЭКД;
 if tmp="": ^False; fi;
 РПО_Строки_БК[Iter].КодКД=КБК+tmp;
 ^False;
end;

Func СтрокиБК_onEnter (Field:S; Iter:I):L;
var tmp:S;
var n,p:i;
 tmp=AnaElection("ФКР.*|СТ.*");
 if tmp="": ^True; fi;
 if Match(tmp,"СТ.*"):
    tmp=SubStr(tmp,4,255);
    РПО_Строки_БК[Iter].КОДГЛАВЫ=Рекв.РПО_ППП;
    РПО_Строки_БК[Iter].КОДПРД=SubStr(tmp,1,4);
    РПО_Строки_БК[Iter].КОДЦСТ=SubStr(tmp,6,3);
    РПО_Строки_БК[Iter].КОДВР=SubStr(tmp,10,3);
    РПО_Строки_БК[Iter].КОДЭК=SubStr(tmp,14,6);
   else
    tmp=SubStr(tmp,5,255);
    РПО_Строки_БК[Iter].КОДГЛАВЫ=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","ППП",False);
    РПО_Строки_БК[Iter].КОДПРД=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","РП",False);
    РПО_Строки_БК[Iter].КОДЦСТ=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","ЦС",False);
    РПО_Строки_БК[Iter].КОДВР=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","ВР",False);
    tmp=ВыборЭКР;
    if tmp<>"": РПО_Строки_БК[Iter].КОДЭК=tmp; else РПО_Строки_БК[Iter].КОДЭК=""; fi;
 fi;
 ^False;
end;

Func КИФ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="0 -- не определен";
 Buf[2]="1 -- бюджетные средства";
 Buf[3]="2 -- внебюджетные средства";
 Buf[4]="3 -- средства, находящиеся во временном распоряжении";
 n=Alternate("Код источника финансирования",Buf,-1,Int(РПО_СТРОКИ_БК[Iter].КИФ),12);
 if n=0: ^False; fi;
 РПО_СТРОКИ_БК[Iter].КИФ=Str(n-1);
 Return False;
end;

Func Txt1_onEnter (Field:S; Iter:I):L;
var БК:s;
var n,z:i;
var ТипБК,ГЛ,ПРД,ЦСТ,ЦП,ВР,ЭК,КД,КИФД,КИВФ,КИВнФ,ВД:S;
var Rec: Record;
 if РПО_Учитывать or isChild: ^False; fi;
 ClearVariable(РПО_Строки_БК);
 ClearVariable(Buf);
 УдалитьПустыеСтроки;
 for n=1..РПО_Позиции do
  ГЛ=""; ПРД=""; ЦСТ=""; ВР=""; ЭК=""; КД=""; КИВФ=""; КИВнФ="";
  ВД=Раб.Бюджет2005.ВзятьКодСчета (РПО_Позиции[n].СчКре,"","ВД",False);
  if Match(РПО_Позиции[n].СчКре,"*.?.304.05.*") or Match(РПО_Позиции[n].СчКре,"*.?.304.04.*"):
     ТипБК=Раб.Бюджет2005.ТипКБКСчета(РПО_Позиции[n].СчКре);
     ЭК=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[n].СчКре,ТипБК,"КОСГУ",False);
     БК=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[n].СчКре,ТипБК,"КБК",False);
    |Match(РПО_Позиции[n].СчКре,"*.?.201.??.*"):
     ЭК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[n].Признак,"КОСГУ.*"," "); 
     ЭК=SubStr(ЭК,7,255);
     БК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[n].Признак,"ФКР.*"," "); БК=SubStr(БК,5,255);
     if БК="": БК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[n].Признак,"КД.*"," "); БК=SubStr(БК,4,255); fi;
     if БК="": БК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[n].Признак,"КИФД.*"," "); БК=SubStr(БК,6,255); fi;
     ТипБК=Раб.Бюджет2005.ТипКБКСчета(БК);
  fi; --if Match(РПО_Позиции[n].СчКре,"*.?.304.05.*"):
  if ТипБК="ФКР":
     ГЛ=Раб.Бюджет2005.ВзятьКодСчета(БК,ТипБК,"ППП",False);
     ПРД=Раб.Бюджет2005.ВзятьКодСчета(БК,ТипБК,"РП",False);
     ЦСТ=Раб.Бюджет2005.ВзятьКодСчета(БК,ТипБК,"ЦС",False);
     ВР=Раб.Бюджет2005.ВзятьКодСчета(БК,ТипБК,"ВР",False);
     ТипТаблБК=0;
    |ТипБК="КД":
     КД=Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ППП",False)
       +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ГР",False)
       +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ПГР",False)
       +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"СТ",False)
       +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ЭЛ",False)
       +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ПРГ",False)
       +ЭК;
     ТипТаблБК=1;
    |ТипБК="КИФД":
     КИФД=Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ППП",False)
         +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ГР",False)
         +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ПГР",False)
         +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"СТ",False)
         +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ПСТ",False)
         +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ЭЛ",False)
         +Раб.Бюджет2005.ВзятьКодКБК(БК,ТипБК,"ПРГ",False)
         +ЭК;
     if Раб.Бюджет2005.ВзятьТипКИФД(БК)="КИВнФ":
        КИВнФ=КИФД;
        ТипТаблБК=3;
       else
        КИВФ=КИФД;
        ТипТаблБК=2;
     fi; --if Раб.Бюджет2005.ВзятьТипКИФД(КИФД)="КИВнФ":
  fi; --if ТипБК="ФКР":
  --
  z=SearchInArray(Buf,Str(ТипТаблБК)+" "+БК+"."+ЭК+" "+ВД,True);
  if z=-1:
     z=InsertInArraySort(Buf,Str(ТипТаблБК)+" "+БК+"."+ЭК+" "+ВД);
     InsertFrame(РПО_Строки_БК,z);
     РПО_Строки_БК[z].КодГлавы=Гл;
     РПО_Строки_БК[z].КодПРД=ПРД;
     РПО_Строки_БК[z].КодЦСТ=ЦСТ;
     РПО_Строки_БК[z].КодЦП=ЦП;
     РПО_Строки_БК[z].КодВР=ВР;
     РПО_Строки_БК[z].КодЭК=if(ТипБК="ФКР",ЭК,"");
     РПО_Строки_БК[z].КодКД=КД;
     РПО_Строки_БК[z].КодКИВФ=КИВФ;
     РПО_Строки_БК[z].КодКИВнФ=КИВнФ;
     РПО_Строки_БК[z].КИФ=ВД;
     РПО_Строки_БК[z].НомБО="";
     РПО_Строки_БК[z].МесФин="";
     РПО_Строки_БК[z].ХФП="";
     РПО_Строки_БК[z].Сум=0;
  fi;
  РПО_Строки_БК[z].Сум=РПО_Строки_БК[z].Сум+РПО_Позиции[n].Сум;
 od;
 Оформление;
 НеПустаяТаблица;
 ^False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbУчитывать_onChange (Obj:S);
var n:I;
 if РПО_Учитывать:
    РПО_Учитывать=Проверить;
   else
    n=EnqOkCancel("Вы уверены что хотите исключить документ из обработки ?");
    if n=cmCancel: РПО_Учитывать=True; fi;
 fi;
 cbУчитывать.State=РПО_Учитывать;
 Оформление;
 EditorApply;
end;

Proc cbВБанк_onChange (Obj:S);
var n:i;
 if РПО_ВБанк:
    if РПО_Учитывать=False: РПО_Учитывать=Проверить;   fi;
    РПО_ВБанк=РПО_Учитывать;
   else
    n=EnqOkCancel("Вы уверены что хотите снять флаг 'Отправлено в банк' ?");
    if n=cmCancel: РПО_ВБанк=True; fi;
 fi;
 cbУчитывать.State=РПО_Учитывать;
 cbВБанк.State=РПО_ВБанк;
 Оформление;
 EditorApply;
end;

Proc cbПроводить_onChange (Obj:S);
var n:i;
 if Проводить:
    if РПО_Учитывать=False: РПО_Учитывать=Проверить; fi;
    РПО_ВБанк=РПО_Учитывать;
    Проводить=РПО_Учитывать;
    if Проводить=True: Проводить=ПроверитьПров; fi;
   else
    n=EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?");
    if n=cmCancel: Проводить=True; fi;
 fi;
 cbУчитывать.State=РПО_Учитывать;
 cbВБанк.State=РПО_ВБанк;
 cbПроводить.State=Проводить;
 Оформление;
 EditorApply;
end;

Proc cbБюджет_onChange (Obj:S);
 if Бюджет:
    if П2="":П2="0";fi;
    if П3="":П3="0";fi;
    if П4="":П4="0";fi;
    if П5="":П5="0";fi;
    if П6="":П6="0";fi;
    if П7="":П7="0";fi;
    if П8="":П8="0";fi;
  else
    П1="";
    П2="";
    П3="";
    П4="";
    П5="";
    П6="";
    П7="";
    П8="";
  fi;
end;

Proc btnНастр_onClick (Obj:S);
 ОткрытьНастр;
end;

Proc btnПечать_onClick (Obj:S);
var n:i;
 if КолКопий<=0: КолКопий=1; fi;
 if КолКопий>8: 
    n=EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий платежного поручения ?",mtWarning);
    if n=cmCancel: Message("Отказ от печати"); Exit; fi;
 fi;
 Раб.Настр_Печать.Prn("","","RPO_0401060_000.cfg","",КолКопий);
end;

Proc btnПоискПолуч_onClick (Obj:S);
var rec:record;
 rec=Раб.Документы.ВыборСФильтром("Контрагент","КорИмя","");
 if rec=nil: Exit; fi;
 РеквП=rec;
 БанкП=Раб.Бюджет2005.БанкСчет(РеквП,False);
 РеквПToПризнPacket;
 if Length(БанкИмя_)>160: Message("Внимание! Превышено максимально возможное количество знаков (160) в поле 'Получатель'",mtWarning); fi;
end;

Proc btnФКР_OnClick(Sender: String);
var Tmp,СтрБК,КБК,ЭКР:S;
 tmp=AnaElection("ФКР.*");
 if not tmp="":
    tmp=SubStr(tmp,5,255);
    КБК=tmp;
    СтрБК=UserТекстБК_ГЛ+Раб.Бюджет2005.ВзятьКодКБК(tmp,"ФКР","ППП",False)
         +UserТекстБК_РП+Раб.Бюджет2005.ВзятьКодКБК(tmp,"ФКР","РП",False)
         +UserТекстБК_ЦС+Раб.Бюджет2005.ВзятьКодКБК(tmp,"ФКР","ЦС",False)
         +UserТекстБК_ВР+Раб.Бюджет2005.ВзятьКодКБК(tmp,"ФКР","ВР",False);
   else
    for Account tmp=Раб.Бюджет2005.МаскаСчетаФКР,Sort do
     КБК=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","ППП",False)+".0000.0000000.000";
     Break;
    od;
 fi;
 tmp=ВыборЭКР;
 if tmp="": ДобавитьТекстНазнПлат("БК",СтрБК);  Exit; fi;
 ЭКР=tmp;
 СтрБК=СтрБК+UserТекстБК_ЭК+ЭКР+UserТекстБК_К;
 ДобавитьТекстНазнПлат("БК",СтрБК);
 ПолучитьНазнПлат;
 ТипТаблБК=0;
 УстановТипТаблБК;
 ДобавитьКБК(КБК,ЭКР);
 if Length(РПО_НазнПлат)>210: Message("Внимание! Превышено максимально возможное количество знаков (210) в поле 'Назначение платежа'",mtWarning); fi;
end;

Proc btnЛС_onClick(Sender: String);
var СтрЛС:S;
 if БАНК.РПО_ЛСЧЕТ="": Exit; fi;
 СтрЛС=UserТекстЛС_Н+UserТекстЛС_ЛС+БАНК.РПО_ЛСЧЕТ+UserТекстЛС_К;
 ДобавитьТекстНазнПлат("ЛС",СтрЛС);
 ПолучитьНазнПлат;
 if Length(РПО_НазнПлат)>210: Message("Внимание! Превышено максимально возможное количество знаков (210) в поле 'Назначение платежа'",mtWarning); fi;
end;

Proc btnНДС_onClick(Obj:S);
var Ставка:N;
var n,p,l:I;
var ТекстНДС,tmp,field:S;
 if Obj="btnНДС":
    ClearVariable(Buf);
    Buf[1]="      НДС= 18*Сумма/118";
    Buf[2]="      НДС= 10*Сумма/110";
    Buf[3]="              Без НДС";
    Buf[4]="Настройка отображения НДС";
    n=Альтернатива("НДС платежа",Buf,20);
   else
    if НДС=18: n=1;
      |НДС=10: n=2;
      |НДС=0 : n=3;
      |True:   n=0;
    fi;
 fi;
 if n=1: Ставка=18;    ТекстНДС=UserТекстНДС18;
   |n=2: Ставка=10;    ТекстНДС=UserТекстНДС10;
   |n=3: Ставка=0;     ТекстНДС=UserТекстНДС00;
   |n=4: ОткрытьНастр; Exit;
   |True  : Exit;
 fi;
 НДС=Round(Ставка*Сумма/(100+Ставка),2);
 if Ставка<>0:
    tmp=Str(НДС,2);
    tmp=Substr(tmp,1,Pos(".",tmp)-1)+"-"+Substr(tmp,Pos(".",tmp)+1,2);
    ТекстНДС=ТекстНДС+tmp;
   else
    ТекстНДС=UserТекстНДС00;
 fi;
 for n=1..5 do --ищем ндс по всем строкам и заменяем его
  if n=1:tmp=Т;|n=2:tmp=РПО_Т1;|n=3:tmp=РПО_Т2;|n=4:tmp=РПО_Т3;|n=5:tmp=РПО_Т4; fi;
  if Pos(UserТекстНДС18,tmp)>0: p=Pos(UserТекстНДС18,tmp); l=Length(UserТекстНДС18);
    |Pos(UserТекстНДС10,tmp)>0: p=Pos(UserТекстНДС10,tmp); l=Length(UserТекстНДС10);
    |Pos(UserТекстНДС00,tmp)>0: p=Pos(UserТекстНДС00,tmp)*(-1);
    |True: p=0;
  fi;
  if p>0:
     ТекстНДС=SubStr(tmp,1,p-1)+ТекстНДС;
     tmp=SubStr(tmp,p+l,255);
     p=Pos("-",tmp)+3;
     tmp=ТекстНДС+SubStr(tmp,p,255);
     if n=1:Т=tmp;|n=2:РПО_Т1=tmp;|n=3:РПО_Т2=tmp;|n=4:РПО_Т3=tmp;|n=5:РПО_Т4=tmp; fi;
     Exit;
    |p<0:
     tmp=Раб.Формат.ReplaceSubStr(tmp,UserТекстНДС00,ТекстНДС);
     if n=1:Т=tmp;|n=2:РПО_Т1=tmp;|n=3:РПО_Т2=tmp;|n=4:РПО_Т3=tmp;|n=5:РПО_Т4=tmp; fi;
     Exit;
  fi;
  if РПО_MultiStr=False: Break; fi;
 od;
 field=AsString(Template.Field);
 if field="РПО_Т1": if РПО_Т1<>"": РПО_Т1=РПО_Т1+" "+ТекстНДС; else РПО_Т1=ТекстНДС; fi;
   |field="РПО_Т2": if РПО_Т2<>"": РПО_Т2=РПО_Т2+" "+ТекстНДС; else РПО_Т2=ТекстНДС; fi;
   |field="РПО_Т3": if РПО_Т3<>"": РПО_Т3=РПО_Т3+" "+ТекстНДС; else РПО_Т3=ТекстНДС; fi;
   |field="РПО_Т4": if РПО_Т4<>"": РПО_Т4=РПО_Т4+" "+ТекстНДС; else РПО_Т4=ТекстНДС; fi;
   |True          : if Т<>""     : Т     =Т     +" "+ТекстНДС; else Т     =ТекстНДС; fi;
 fi;
 ПолучитьНазнПлат;
 if Length(РПО_НазнПлат)>210: Message("Внимание! Превышено максимально возможное количество знаков (210) в поле 'Назначение платежа'",mtWarning); fi;
End;

Proc BtnДата_onClick (Obj:S);
var DTMP :Date;
 DTMP=Calendar(ДатОпер);
 if DTMP<=1.1.100: Exit; fi;
 ДатОпер=DTMP;
End;

Proc cbMultiStr_onChange (Obj:S);
 if РПО_MultiStr=False:
    Т=Т+" "+РПО_Т1+" "+РПО_Т2+" "+РПО_Т3+" "+РПО_Т4;
    Т=Раб.Бюджет.CheckSet(Т," ");
    РПО_Т1=""; РПО_Т2=""; РПО_Т3=""; РПО_Т4="";
   else
    РПО_Т1=""; РПО_Т2=""; РПО_Т3=""; РПО_Т4="";
 fi;
end;

Proc btnШаблон_onClick(Obj:S);
var rec:Record;
 rec=OpenCardFile('ШАБЛОНЫ');
 if rec=nil: Exit; fi;
 РПО_MultiStr=GetCardFieldL('ШАБЛОНЫ',rec,'РПО_MultiStr');
 cbMultiStr.State=РПО_MultiStr;
 Т=GetCardFieldS('ШАБЛОНЫ',rec,'ШАБЛОН');
 if РПО_MultiStr:
    РПО_Т1=GetCardFieldS('ШАБЛОНЫ',rec,'РПО_ШАБЛОН1');
    РПО_Т2=GetCardFieldS('ШАБЛОНЫ',rec,'РПО_ШАБЛОН2');
    РПО_Т3=GetCardFieldS('ШАБЛОНЫ',rec,'РПО_ШАБЛОН3');
    РПО_Т4=GetCardFieldS('ШАБЛОНЫ',rec,'РПО_ШАБЛОН4');
 fi;
 Бюджет=GetCardFieldL('ШАБЛОНЫ',rec,'РПО_Бюджет');
 П1=GetCardFieldS('ШАБЛОНЫ',rec,'П1');
 П2=GetCardFieldS('ШАБЛОНЫ',rec,'П2'); if П2="" and Бюджет: П2="0"; fi;
 П3=GetCardFieldS('ШАБЛОНЫ',rec,'П3'); if П3="" and Бюджет: П3="0"; fi;
 П4=GetCardFieldS('ШАБЛОНЫ',rec,'П4'); if П4="" and Бюджет: П4="0"; fi;
 П5=GetCardFieldS('ШАБЛОНЫ',rec,'П5'); if П5="" and Бюджет: П5="0"; fi;
 П6=GetCardFieldS('ШАБЛОНЫ',rec,'П6'); if П6="" and Бюджет: П6=НомерБум; fi;
 П7=GetCardFieldS('ШАБЛОНЫ',rec,'П7'); if П7="" and Бюджет: П7=DateToString(Дата); fi;
 П8=GetCardFieldS('ШАБЛОНЫ',rec,'П8'); if П8="" and Бюджет: П8="0"; fi;
 if GetCardFieldR('ШАБЛОНЫ',rec,'РПО_Рекв')<>Nil:
    Рекв=GetCardFieldR('ШАБЛОНЫ',rec,'РПО_Рекв');
    Банк=GetCardFieldR('ШАБЛОНЫ',rec,'РПО_Банк');
 fi;
 if GetCardFieldR('ШАБЛОНЫ',rec,'РПО_РеквП')<>Nil:
    РеквП=GetCardFieldR('ШАБЛОНЫ',rec,'РПО_РеквП');
    БанкП=GetCardFieldR('ШАБЛОНЫ',rec,'РПО_БанкП');
 fi;
end;

Proc btnParent_OnClick(Sender: String);
var Crd,Bln,Txt:S;
var Rec: Record;
 if not РПО_Заявка_КР=nil: Crd="РПО_ЗАЯВКА_КР"; Bln="ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР"; Rec=РПО_Заявка_КР; Txt="Заявка на кассовый расход";
   |not РПО_Заявка_Возврат=nil: Crd="РПО_ЗАЯВКА_ВОЗВРАТ"; Bln="ДОКУМЕНТЫ.БАНК.ЗАЯВКА_ВОЗВРАТ"; Rec=РПО_Заявка_Возврат; Txt="Заявка на возврат";
   |True: Message("Документ не найден",mtWarning);
 fi;
 if not RecordExists(Crd,Rec): Message(Txt+" не найдена",mtError); Exit; fi;
 if isBlankOpen(Bln): Close(Bln); fi;
 OpenBlank(Bln,True,Rec);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc Template_onOpen (Create:L);
 Раб.Настр_Печать.Cfg("","RPO_0401060_000.cfg");
 FlagInit=True;
end;

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

Proc Template_onRead;
 Try
  if not Call="": ExecuteProc(Call); fi;
  Настр(False);
  if НоваяЗапись:
     if Рекв=Nil:
        ВидПл="";
        ВидОп="01";
        ДатаО="5";
        if UserРекв="":
           РЕКВ=Раб.Бюджет2005.НашРекв;
           БАНК=Раб.Бюджет2005.БанкСчет(РЕКВ,False);
          else
           Рекв=StringToRecord(UserРекв);
           if UserБанк="":
              Банк=Раб.Бюджет2005.БанкСчет(РЕКВ,False);
             else
              Банк=StringToRecord(UserБанк);
           fi;
        fi;
        РПО_MultiStr=UserMultiStr;
     fi;
     Дата=ToDay;
     Номер=Раб.Обл.СледСУчетомДаты(SelfCrd,"Номер","Дата",Дата);
     НомерБум=Str(Номер);
     Проводить=False;
     РПО_ВБанк=False;
     РПО_Учитывать=False;
     РПО_НомРейс=0;
     РПО_ДатаРейс=1.1.100;
     ClosedModFob=False;
     РПО_ЗАЯВКА_КР=nil;
     РПО_ЗАЯВКА_ВОЗВРАТ=nil;
     if Раб.Бюджет2005.Сетевая: EditorApply; fi;
     НеПустаяТаблица;
  fi;
  ЗакрытьНастр;
  ПолучитьТипТаблБК;
  if not FlagInit: Оформление; fi;
  if isChild and not noMsg:
     if not РПО_Заявка_КР=nil: Message("Внимание ! Платежное поручение сформировано из заявки на кассовый расход №"+РПО_Заявка_КР.НомерДок+" от "+DateToString(РПО_Заявка_КР.ДатаДок),mtWarning);
       |not РПО_Заявка_Возврат=nil: Message("Внимание ! Платежное поручение сформировано из заявки на возврат №"+РПО_Заявка_Возврат.НомерДок+" от "+DateToString(РПО_Заявка_Возврат.ДатаДок),mtWarning);
     fi;
  fi;
  noMsg=False;
 Finally
  Call="";
 end;
end;

Func Template_onValidate:L;
 ЗакрытьНастр;
 if РПО_MultiStr=False:
    РПО_НАЗНПЛАТ=Т;
   else
    РПО_НАЗНПЛАТ=Т;
    if РПО_НАЗНПЛАТ<>"" and РПО_Т1<>"": РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+" "; fi;
    РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+РПО_Т1;
    if РПО_НАЗНПЛАТ<>"" and РПО_Т2<>"": РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+" "; fi;
    РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+РПО_Т2;
    if РПО_НАЗНПЛАТ<>"" and РПО_Т3<>"": РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+" "; fi;
    РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+РПО_Т3;
    if РПО_НАЗНПЛАТ<>"" and РПО_Т4<>"": РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+" "; fi;
    РПО_НАЗНПЛАТ=РПО_НАЗНПЛАТ+РПО_Т4;
 fi;
^ЗаполнитьКлючДок;
end;
--Обработчики событий шаблона -----
--



КОНЕЦ