-- Шаблон создан мастером бланков
-- 28.11.2008 15:39:22
--
БланкСШаблоном "Заявка на возрат", Редактор РПО_ЗАЯВКА_ВОЗВРАТ;

var AltForma:L=True;

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

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

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

var fСкрытьРаздел:L=[True];
var fСкрытьРаздел_:S=if(fСкрытьРаздел,"Да","Нет");
var fУтвДок:L=[False];
var fУтвДок_:S=if(fУтвДок,"Да","Нет");
var fДобГородВБанк:L=[True];
var fДобГородВБанк_:S=if(fДобГородВБанк,"Да","Нет");
var ДесятРазд:S=["."];
var fКлиентКорИмя:L=[False];
var fКлиентКорИмя_:S=if(fКлиентКорИмя,"Да","Нет");
var extКлюч:S;

fQCMF:L;

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

var СчКр:S="???.01.05.02.*.?.201.11.610|*.1.304.05.*|*.1.210.??.*";

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

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

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

var Р2:L=not (Осн_ДокВид="" and Осн_ДокНом="" and Осн_ДокДат=1.1.100);

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

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

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

var nПозиции:I=Позиции;

var ОчиститьПр:S=if(Учитывать,"","Очистить");

var пп[]:i=$;

var Гр7:I=7;
var Призн_[]:S=Позиции[$].Призн;

var ВсегоСум:N=SumOfArray(Позиции[].Сум,Позиции);
var ВсегоСумРуб:N=SumOfArray(Позиции[].СумРуб,Позиции);

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

var Buf[]:S;
var Buf2[]: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;
bvlДокОпер   :Object;
lbНомер      :Object;
edДокОперНом :Object;
btnДокОперДат:Object;
edДокОперДат :Object;
btnДок	     :Object;
cbАннул      :Object;
btnАннулДата :Object;
edАннулДата  :Object;
btnУдалить   :Object;
cbНеВыяснен  :Object;
btnНастр     :Object;
cbЗакрытьДок :Object;
btnПечать    :Object;
edКолКопий   :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;
S13: Section;
S14: Section;

var nS:I=14;

sУтвДок:Section;

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

--
SC1: Section;
SC2: Section;

S1a: Section;
S2a: Section;
S3a: Section;
S4a: Section;

SC1a: Section;

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

var ДопЛист:L;
var p1:i=if(AltForma,1,if(ДопЛист,2,1));
var p2:i=if(AltForma,2,if(ДопЛист,3,2));
var pp:i=if(AltForma,2,if(ДопЛист,3,2));

var ФормаС1:S="Форма 0531803, с."+Str(p1);
var ФормаС2:S="Форма 0531803, с."+Str(p2);

ДолжнИспФК: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");
    Раб.Настр.Добавить("fДобГородВБанк","L");
    Раб.Настр.Добавить("fКлиентКорИмя","L");
    Раб.Настр.Добавить("extКлюч","S");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
	  Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
       if ДесятРазд="": ДесятРазд="."; fi;
    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;
 bvlДокОпер.Visible=not Flag;
 lbНомер.Visible=not Flag;
 edДокОперНом.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;
 btnУдалить.Visible=not Flag;
 cbНеВыяснен.Visible=not Flag;
 btnНастр.Visible=not Flag;
 cbЗакрытьДок.Visible=not Flag;
 btnПечать.Visible=not Flag;
 edКолКопий.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
       Try
	BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
	if BgColor=coAqua or BgColor=coTeal:
	   Field=asString(Obj.Cell(r,c,CellContents,"",False));
	   if SearchInArray(BufField,Field,True)=-1:
	      n=InsertInArraySort(BufField,Field);
	      InsertInArray(BufColorBg,n,BgColor);
	   fi;
	fi;
       Except
       end;
      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;

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

var n1[]:S;
var n2[]:S;
Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
 cbУчитывать.Enabled=not Проводить and not Аннул;
 cbВБанк.Enabled=not Проводить and not Аннул;
 cbПроводить.Enabled=not Аннул;
 btnДатаОпер.Enabled=not Проводить and not Аннул;
 edДатаОпер.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 Аннул;
 btnУдалить.Enabled=not Учитывать and not Проводить and not Аннул;
 btnДок.Enabled=not Аннул;
 cbНеВыяснен.Enabled=not Учитывать;
 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
       Try
	Field=asString(Obj.Cell(r,c,CellContents,"",False));
       Except
       end;
       n=SearchInArray(BufField,Field,True);
       if not n=-1:
	  Try
	   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;
	  Except
	  end;
       fi;
      od;
     od;
  fi;
 od;
 S3.Row(17,RowVisible,ver>=12); --Код объекта по ФАИП
 S4.Column(2,ColPrinted,ver>=12);
 S4.Column(4,ColVisible,ver>=12);
 S4.Column(5,ColVisible,ver<12);
 S4.Column(11,ColWidth,580+if(ver>=12,0,250));
 n1[1] = '1';
 n1[2] = if(ver>=12,'2','*');
 for c=3..10 do
   n1[c] = Str(c - if(ver>=12,0,1));
 od;
 S9.Column(1,ColWidth,700-if(ver>=12,210,0));
 S9.Column(5,ColVisible,ver>=12);
 S9.Column(6,ColVisible,ver>=12);
 S9.Column(9,ColWidth,600-if(ver>=12,210,0));
 for c=1.. 2 do
   n2[c] = Str(c+1);
 od;
 for c=3.. 9 do
   n2[c] = Str(c + if(ver>=12,1,-1));
 od;
 ЗадатьДесятичныйРазделитель;
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 ВидимостьСтрок(Name:S; Visible:L; NewPage:L);
var Obj: Object;
var r,rr:i;
 if FindObject(Name,Obj):
    rr=AsInteger(Obj.RowsCount);
    Obj.Row(1,RowNewPage,NewPage);
    for r=1..rr do
     Obj.Row(r,RowVisible,Visible);
    od;
 fi;
end;

Func РазметкаДопЛиста (yy:i; Flag:L):I;
var h0,y,h,r:i;
var Obj: Object;
 ДопЛист=Flag;
 ВидимостьСтрок("S1a",ДопЛист,False);
 ВидимостьСтрок("S3a",ДопЛист,ДопЛист);
 if AltForma:
    ВидимостьСтрок("S7" ,not ДопЛист,False);
    ВидимостьСтрок("S8" ,not ДопЛист,False);
    ВидимостьСтрок("SC1",not ДопЛист,False);
    ВидимостьСтрок("S4a",not ДопЛист,False);
 fi;
 h0=ВысотаОбласти("S0",1,if(fУтвДок,"sУтвДок","S1"),1)+ВысотаОбласти("S3",6,"S3",8);
 if FindObject("SC1a",Obj):
    for r=1..3 do
     Obj.Row(r,RowVisible,ДопЛист);
    od;
    y=AsInteger(Obj.Row(4,RowTop,""));
    if Flag:
       h=yy-(y)+h0;
      else
       h=10;
    fi;
    h=Max(h,10);
    Obj.Row(1,RowHeight,h);
 fi;
 ^AsInteger(Obj.Row(4,RowTop,""));
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 fКлиентКорИмя or (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 y0,y,yy,h,h0,s:i;
 if Flag:
    Раб.Настр_Печать.ReadCfg("",SelfCfg);
    yy=Раб.Настр_Печать.Sheet(XS,YS); --размер рабочей области
    y0=0;
 fi;
 --Клиент
 ЗаполнитьНаимКлиента(Flag);
 --
 S5.Visible=not Flag or Р2 or (not Р2 and not fСкрытьРаздел);
 for s=1..2 do
  if FindObject("SC"+Str(s),Obj):
     if Flag:
	if s=1: h0=ВысотаОбласти("S0",1,if(fУтвДок,"sУтвДок","S1"),1)+
		   ВысотаОбласти("S3",6,"S3",8)+
		   ВысотаОбласти("S3",17,"S4",1)+
		   if(НеВыяснен,ВысотаОбласти("S6",1,"S7",1),0); --Внимание!+Аналитический признак лицевого счета+Номер банковского счета+Версия*+Реквизиты возвращаемого документа
	  |s=2: h0=ВысотаОбласти("S10",1,"S13",1); --таблица проводк
	fi;
	y=AsInteger(Obj.Row(4,RowTop,""));
	h=yy-(y-y0)+h0;
	if h<10 and s=1:
	   y0=РазметкаДопЛиста(yy,Flag);
	   if AsLogical(Obj.Row(1,RowVisible,"")):
	      y=AsInteger(Obj.Row(4,RowTop,""));
	      h=yy-(y-y0);
	   fi;
	fi;
       else
	h=10;
	РазметкаДопЛиста(yy,Flag);
     fi;
     if AsLogical(Obj.Row(1,RowVisible,"")):
	h=Max(h,10);
	Obj.Row(1,RowHeight,h);
	y0=AsInteger(Obj.Row(4,RowTop,""));
     fi;
  fi;
 od;
end;

Proc НеПустаяТаблица;
 if Позиции<1:
    InsertFrame(Позиции,1);
 fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Позиции do
  if Позиции[Iter].Сум=0 and
     Позиции[Iter].СумРуб=0 and
     Позиции[Iter].СчДеб="" and
     Позиции[Iter].СчКре="" and
     Позиции[Iter].Призн="" and
     Позиции[Iter].Кмнт="": DeleteFrame(Позиции,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
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 ПоУмолчанию;
 Док_ОКВ="643";
 Док_ОчрПл="5";
 Док_ВидПл="0";
end;

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

Proc ПолучитьДопАн(СчБанк:S; СчКорр:S; Iter:I);
var Справ,ПризнКБК,ТипКБК,tmp:S;
 if not СчБанк="" and not СчКорр="":
    Справ=Раб.Бюджет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;
 fi;
end;

Proc ОбработатьПризн (Iter:I);
var tmp:S;
 if not Позиции[Iter].СчДеб="" and not Позиции[Iter].СчКре="":
    tmp=Раб.Бюджет2005.СписокСправ(Позиции[Iter].СчДеб+"|"+Позиции[Iter].СчКре,0,"");
    Позиции[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Позиции[Iter].Призн," ",tmp,"|");
    ПолучитьДопАн(Позиции[Iter].СчКре,Позиции[Iter].СчДеб,Iter);
 fi;
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 Проверить:L;
var Iter,i:I;
 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 (not Рекв.РПО_ТипУчр="БУ" or ver<7): Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 if not Глава="" and Рекв.РПО_ТипУчр="БУ" and ver>=7: Message("Глава по БК для бюджетного учреждения не заполняется",mtError); Template.Field="Глава"; ^False; fi;
 if ГРБС="": Message("Заполните наименование главного распорядителя бюджетных средств, главного администратора источников финансирования дефицита бюджета",mtError); Template.Field="ГРБС"; ^False; fi;
 if НаимБюдж="" and (not Рекв.РПО_ТипУчр="БУ" or ver<7): Message("Заполните наименование бюджета",mtError); Template.Field="НаимБюдж"; ^False; fi;
 if not НаимБюдж="" and Рекв.РПО_ТипУчр="БУ" and ver>=7: Message("Наименование бюджета для бюджетного учреждения не заполняется",mtError); Template.Field="НаимБюдж"; ^False; fi;
 if Банк.РПО_КодБюдж="": Message("Заполните код бюджета",mtError); ExecuteProc("Инфо.БанкСчета.Вызвать",Банк,"РПО_КодБюдж",0); ^False; fi;
 if ФинОрган="" and (not Рекв.РПО_ТипУчр="БУ" or ver<7): Message("Заполните поле 'Финансовый орган'",mtError); Template.Field="ФинОрган"; ^False; fi;
 if not ФинОрган="" and Рекв.РПО_ТипУчр="БУ" and ver>=7: Message("Финансовый орган для бюджетного учреждения не заполняется",mtError); Template.Field="ФинОрган"; ^False; fi;
 if Банк.РПО_ОФК_Код="": Message("Заполните код федерального казначейства, органа федерального казначейства",mtError); Template.Field="Банк.РПО_ОФК_Код"; ^False; fi;
 if Док_Ист="" and ДатаДок>=10.08.2009: Message("Заполните наименование вида средств для осуществления возрата",mtError); Template.Field="Ист_"; ^False; fi;
 if ver>=7:
    if Round(Док_Сум,2)=0: Message("Заполните сумму в валюте, в которой должен быть произведен возврат",mtError); Template.Field="Док_Сум"; ^False; fi;
    if Док_ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
    if not Док_ОКВ="643":
       if Round(Док_СумРуб,2)=0: Message("Заполните сумму в рублях",mtError); Template.Field="Док_СумРуб"; ^False; fi;
    fi;
   else
    if not Round(Док_Сум,2)=0:
       if Док_ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
    fi;
    if not Док_ОКВ="" and not Док_ОКВ="643":
       if not Round(Док_Сум,2)=0: Message("Заполните сумму в валюте выплаты",mtError); Template.Field="Док_Сум"; ^False; fi;
    fi;
    if Round(Док_СумРуб,2)=0: Message("Заполните сумму в рублях",mtError); Template.Field="Док_СумРуб"; ^False; fi;
 fi;
 if Док_ОчрПл="": Message("Заполните очередность платежа",mtError); Template.Field="Док_ОчрПл"; ^False; fi;
 if Док_ВидПл="": Message("Заполните вид платежа",mtError); Template.Field="Док_ВидПл_"; ^False; fi;
 if Док_НазнПл="": Message("Заполните назначение платежа (примечание)",mtError); Template.Field="Док_НазнПл"; ^False; fi;
 if Length(Док_НазнПл)>210: 
    if EnqOkCancel("Длина назначения платежа ("+Str(Length(Док_НазнПл))+") превысило разрешенную длину (210) символов. Игнорировать ?",mtWarning)=cmCancel: Template.Field="Док_НазнПл"; ^False; fi;
 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.Name="S8"; Template.Field="ДатаПодписи"; ^False; fi;
 if ДатаПодписи<ДатаДок: Message("Дата подписи не может быть ранее даты документа",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 if not Осн_ДокВид="" and not Осн_ДокНом="" and not Осн_ДокДат=1.1.100:
    if Осн_ДокВид="": Message("Заполните вид документа - основания",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
    if Осн_ДокНом="": Message("Заполните номер документа - основания",mtError); Template.Field="Осн_ДокНом"; ^False; fi;
    if Осн_ДокДат=1.1.100: Message("Заполните дату документа - основания",mtError); Template.Field="Осн_ДокДат"; ^False; fi;
 fi;
 if РеквП=nil or РеквП_="": Message("Заполните наименование получателя",mtError); Template.Field="РеквП_"; ^False; fi;
 if Призн_К="": Message("Заполните аналитический признак контрагента",mtError); Template.Field="Призн_К"; ^False; fi;
 if Name_A(Призн_К)=" ": Message("Неизвестный идентификатор аналитического признака контрагента '"+Призн_К+"'",mtError); Template.Field="Призн_К"; ^False; fi;
 if not CardFileRecSign("Контрагент","Признак","К",РеквП,"")=Призн_К:
    if EnqOkCancel("Аналитический признак контрагента по реквизитам ("+CardFileRecSign("Контрагент","Признак","К",РеквП,"")+") отличен от выбранного признака ("+Призн_К+")^MИгнорировать ?",mtWarning)=cmCancel: Template.Field="Призн_К"; ^False; fi;
 fi;
 if РеквП.ИНН="" and РеквП.Тип=0: Message("Заполните ИНН получателя",mtError); Template.Field="РеквП.ИНН"; ^False; fi;
 if РеквП.КПП="" and РеквП.Тип=0: Message("Заполните КПП получателя",mtError); Template.Field="РеквП.КПП"; ^False; fi;
 if БанкП=nil: Message("Заполните банковские реквизиты получателя",mtError); Template.Field="БанкП.РСчет"; ^False; fi;
 if БанкП_="": Message("Заполните наименование банка получателя",mtError); Template.Field="БанкП_"; ^False; fi;
 if БанкП.БИК="": Message("Заполните БИК банка получателя",mtError); Template.Field="БанкП.БИК"; ^False; fi;
 i=Раб.Вспом.Справ_БИК.Контроль(БанкП,"банковских реквизитов получателя");
 if i=-2: Template.Field="БанкП.БИК"; ^False;
   |i=-6: Template.Field="БанкП.КСчет"; ^False;
   |i< 0: Template.Field="БанкП_"; ^False;
 fi;
 if not БанкП.РПО_ЛСчет="" and КБК_П="": Message("Заполните код по БК получателя",mtError); Template.Field="КБК_П"; ^False; fi;
 УдалитьПустыеСтроки;
 Раб.КСА.Начать;
 for Iter=1..Позиции do
  Раб.КСА.Добавить(Позиции[Iter].СчДеб);
  Раб.КСА.Добавить(Позиции[Iter].СчКре);
  Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].СчДеб,"","ВД",True)+".ЗАБ.00."+Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].СчДеб,"","КОСГУ",False));
  Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].СчКре,"","ВД",True)+".ЗАБ.КР."+Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].СчКре,"","КОСГУ",False));
 od;
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
 if Позиции=0: Message("Заполните таблицу проводок",mtError); Template.Name="S13"; Template.Field="Сум"; Template.Frame=1; ^False; fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Позиции do
  if Round(Позиции[Iter].Сум,2)=0 and Round(Позиции[Iter].СумРуб,2)=0: Message("Заполните сумму",mtError); Template.Name="S13"; Template.Field="Сум"; Template.Frame=1; ^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 Позиции[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;
 od;
 if Док_ОКВ="643" or Док_ОКВ="": Вал=""; fi;
 if not Док_ОКВ="643" and not Док_ОКВ="" and Вал="": Message("Введите идентификатор валюты",mtError); Template.Field="Вал"; ^False; fi;
 if not Round(Док_Сум,2)=Round(ВсегоСум,2): Message("Сумма формируемых проводок "+Str(ВсегоСум,2)+" отличается от суммы документа "+Str(Док_Сум,2),mtError); Template.Field="ВсегоСум"; ^False; fi;
 if not Round(Док_СумРуб,2)=Round(ВсегоСумРуб,2): Message("Сумма в рублях формируемых проводок "+Str(ВсегоСумРуб,2)+" отличается от суммы документа в рублях "+Str(Док_СумРуб,2),mtError); Template.Field="ВсегоСумРуб"; ^False; fi;
 ^True;
end;

Func ПолучитьНомерПП(Val:s):I;
var n:i;
 Try
  n=Int(Val);
 Except
  n=0;
 end;
 if n=0 and not ДокОперДат=1.1.100: n=-1*Раб.Обл.СледСУчетомДатыФ("Поруч","Номер","Дата",ДокОперДат,"not UKey="+RecordToString(Current)); fi;
 ^n;
end;

Func СоздатьПП(enMsg:L):L;
var OWA,OA:I;
var n,nr,n2,Iter,nn:i;
var Призн:S;
var Rec: Record;
var Проводить_:L;
 Проводить_=not ДокОперНом="" and Проводить;
 if not (Проводить_ or not ДокОпер1=nil): ^True; fi;
 OWA=OpenWorkArea("ПОРУЧ","","РПО_ЗАЯВКА_ВОЗВРАТ="+RecordToString(Current));
 Try
  BeginChanging(OWA,True);
  Try
   nr=Records(OWA);
   if nr=0:
      n=InsertRecord(OWA);
   fi;
   nn=ПолучитьНомерПП(ДокОперНом);
   if nn>0 or ДокОпер1.Номер=0:
      n=PutFieldI(OWA,1,"НОМЕР",Abs(nn));
   fi;
   n=PutFieldS(OWA,1,"НОМЕРБУМ",ДокОперНом);
   n=PutFieldR(OWA,1,"РЕКВ",Рекв);
   n=PutFieldR(OWA,1,"РЕКВП",РеквП);
   n=PutFieldR(OWA,1,"БАНК",Банк);
   n=PutFieldR(OWA,1,"БАНКП",БанкП);
   n=PutFieldL(OWA,1,"БЮДЖЕТ",False);
   n=PutFieldD(OWA,1,"ДАТОПЕР",ДатаОпер);
   n=PutFieldD(OWA,1,"ДАТА",ДокОперДат);
   n=PutFieldN(OWA,1,"СУММА",Док_СумРуб);
   n=PutFieldN(OWA,1,"НДС",0);
   n=PutFieldS(OWA,1,"Т",Док_НазнПл);
   n=PutFieldS(OWA,1,"ДАТАО",Док_ОчрПл);
   n=PutFieldS(OWA,1,"ВИДПЛ",Док_ВидПл_);
   n=PutFieldS(OWA,1,"ВИДОП","01");
   n=PutFieldS(OWA,1,"П1",if(Док_ОКАТО="","","00"));
   n=PutFieldS(OWA,1,"П2",if(Док_ОКАТО="","",Док_КБК));
   n=PutFieldS(OWA,1,"П3",Док_ОКАТО);
   n=PutFieldS(OWA,1,"П4",if(Док_ОКАТО="","","0"));
   n=PutFieldS(OWA,1,"П5",if(Док_ОКАТО="","","0"));
   n=PutFieldS(OWA,1,"П6",if(Док_ОКАТО="","",if(Осн_ДокНом="","0",Осн_ДокНом)));
   n=PutFieldS(OWA,1,"П7",if(Док_ОКАТО="","",if(Осн_ДокДат=1.1.100,"0",DateToString(Осн_ДокДат))));
   n=PutFieldS(OWA,1,"П8",if(Док_ОКАТО="","","0"));
   n=PutFieldL(OWA,1,"БЮДЖЕТ",not Док_ОКАТО="");
   n=PutFieldL(OWA,1,"ПРОВОДИТЬ",if(Аннул,False,Проводить_));
   n=PutFieldS(OWA,1,"РПО_НАЗНПЛАТ",Док_НазнПл);
   n=PutFieldL(OWA,1,"РПО_MULTISTR",False);
   n=PutFieldL(OWA,1,"РПО_УЧИТЫВАТЬ",if(Аннул or ДокОперНом="",False,Учитывать));
   n=PutFieldL(OWA,1,"РПО_ВБАНК",if(Аннул or ДокОперНом="",False,ВБанк));
   OA=OpenArray(OWA,1,"РПО_ПОЗИЦИИ","");
   if not Records(OA)=0: DeleteAllRecords(OA); fi;
   Призн=Раб.Бюджет2005.Объединить(Призн_ЛС,Призн_К," ");
   for Iter=1..Позиции do
    n2=InsertRecord(OA);
    n2=PutFieldN(OA,n2,"СУМ",Позиции[Iter].СумРуб);
    n2=PutFieldS(OA,n2,"СЧДЕБ",Позиции[Iter].СчДеб);
    n2=PutFieldS(OA,n2,"СЧКРЕ",Позиции[Iter].СчКре);
    n2=PutFieldS(OA,n2,"ПРИЗНАК",Раб.Бюджет2005.Объединить(Призн,Позиции[Iter].Призн," "));
    n2=PutFieldS(OA,n2,"КМНТ","ПП №"+ДокОперНом+" от "+DateToString(ДокОперДат)+" (Заявка на возврат №"+НомерДок+" от "+DateToString(ДатаДок)+") "+Док_НазнПл);
   od;
   n=PutFieldR(OWA,1,"РПО_ЗАЯВКА_ВОЗВРАТ",Current);
   n=PutFieldL(OWA,1,"CLOSEDMODFOB",ClosedModFob);
   Rec=GetRecordKey(OWA,1);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 ДокОпер1=Rec;
 ДокОперКарт1="ПОРУЧ";
 EditorApply;
 if nr=0 and enMsg: Message("Платежное поручение №"+ДокОперНом+" от "+DateToString(ДокОперДат)+" успешно создано"); fi;
 ^True;
end;

Proc УдалитьЗаписи(vCrd:String);
var F :String;
var OWA:Integer;
 F=if(vCrd=SelfCrd,"UKey",SelfCrd)+"="+RecordToString(Current);
 OWA=OpenWorkArea(vCrd,"",F);
 try
  if not Records(OWA)=0:
     BeginChanging(OWA);
     try
      DeleteAllRecords(OWA);
      EndChanging(OWA);
     except
      CancelChanging(OWA);
      Raise;
     end;
  fi;
 finally
  CloseWorkArea(OWA);
 end;
end;

Proc ДобНДСНазнПл(Force:L);
var p,l:i;
var текстНДС,текстНДС18,текстНДС10,текстНДС00:s;
var Док_СтавкаНДС:S;
var Док_СумНДС:N;
 текстНДС18="в т.ч. НДС 18%=";
 текстНДС10="в т.ч. НДС 10%=";
 текстНДС00="НДС не облагается";
 if Док_СтавкаНДС="0" or Док_СтавкаНДС="": ТекстНДС="НДС не облагается"; else ТекстНДС="в т.ч. НДС "+Док_СтавкаНДС+"%="+Раб.Формат.ReplaceSubStr(Str(Док_СумНДС,2),".","-"); fi;
 if Pos(текстНДС18,Док_НазнПл)>0: p=Pos(текстНДС18,Док_НазнПл); l=Length(текстНДС18);
   |Pos(текстНДС10,Док_НазнПл)>0: p=Pos(текстНДС10,Док_НазнПл); l=Length(текстНДС10);
   |Pos(текстНДС00,Док_НазнПл)>0: p=Pos(текстНДС00,Док_НазнПл)*(-1);
   |True: p=0;
 fi;
 if p>0:
    ТекстНДС=SubStr(Док_НазнПл,1,p-1)+ТекстНДС;
    Док_НазнПл=SubStr(Док_НазнПл,p+l,255);
    p=Pos("-",Док_НазнПл)+3;
    Док_НазнПл=ТекстНДС+SubStr(Док_НазнПл,p,255);
   |p<0:
    Док_НазнПл=Раб.Формат.ReplaceSubStr(Док_НазнПл,текстНДС00,ТекстНДС);
   |True:
    if Force:
       Док_НазнПл=Док_НазнПл+if(SubStr(Док_НазнПл,Length(Док_НазнПл),1)=" ",""," ")+ТекстНДС;
    fi;
 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 ТекЗапись:Record;
 ^Current;
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;
       Оформление;
       СоздатьПП(False);
    fi;
 fi;
 ^Flag;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 fСкрытьРаздел=True;
 fУтвДок=False;
 fДобГородВБанк=True;
 ДесятРазд=".";
 fКлиентКорИмя=False;
 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 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;
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);
 tmp=Calendar;
 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;

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

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Prefix:S;
 if Double:
    Field=AsString(Template.Field);
    if (Match(Field,"Банк*") or Field="НаимБюдж" or Field="ФинОрган") and Банк=nil: Message("Выберите банковские реквизиты",mtError); Template.Field="Банк.РПО_ОФК_Имя"; Exit;
      |(Match(Field,"БанкП*") or Field="БанкП_") and БанкП=nil: Message("Выберите банковские реквизиты контрагента",mtError); Template.Field="БанкП.РСчет"; Exit;
    fi;
    if Field="НаимБюдж": Prefix="Банк"; Field="РПО_НаимБюдж";
      |Field="ФинОрган": Prefix="Банк"; Field="РПО_ФО_Наим1";
      |Field="ОКПО_ФО": Prefix="Банк"; Field="РПО_ФО_ОКПО";
      |Field="БанкП_": Prefix="БанкП"; Field="Банк";
      |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;
 if Рекв.РПО_ТипУчр="БУ" and ver>=7: Message("Для бюджетного учреждения данное поле не заполняется",mtError); fi;
 Return 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 Рекв.РПО_ТипУчр="БУ": Настр(True); fi;
 fi;
end;

Func Глава_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 if Рекв.РПО_ТипУчр="БУ" and ver>=7: ^Cur; fi;
 Rec=OpenCardFile("РПО_БЮДЖ_КЛАСС_000","NAME_VOC='ППП2006'",nil,crdRecordOnly);
 if not Rec=nil:
    Глава=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"CODE");
    ГРБС=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"TXT");
    hГлава=Глава;
    hГРБС=ГРБС;
 fi;
 Return Cur;
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 ver_OnExit(FieldName: String; Iter: Integer);
 Оформление;
end;

Func Док_ОКВ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if fОКВ=0: fОКВ=Раб.Договор.ЗагрузСправ("РПО_ОКВ",PlanVar("Std_Rpo")+"\DBF\РПО_ОКВ",ieCRD,"Загрузить справочник видов валют ОКВ ?"); fi;
 if fОКВ=1:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор валюты","РПО_ОКВ","КОД|ИМЯ|НАИМЕНОВАНИЕ","Цифровой код|Буквенный код|Наименование","");
    if not Rec=nil:
       Док_ОКВ=GetCardFieldS("РПО_ОКВ",Rec,"КОД");
    fi;
 fi;
 Return Cur;
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;

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

Func Док_НазнПл_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var Flag:L;
 Flag=True;
 if Length(Value)>210:
    Flag=EnqOkCancel("Длина назначения платежа превышает разрешенную длину 210 символов"+Chr(13)+"Игнорировать данное предупреждение ?",mtWarning)=cmOk;
 fi;
 Return Flag;
end;

Func Док_НазнПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 if Банк.РПО_ЛСчет="": Message("Укажите номер лицевого счета",mtError); Template.Field="Банк.РПО_ЛСчет"; ^Cur; fi;
 --if Round(Док_Сум,2)=0: Message("Укажите сумму в рублях",mtError); Template.Field="Док_СумРуб"; ^Cur; fi;
 ClearVariable(Buf);
 Buf[1]="Проставить в назначение платежа лицевой счет";
 Buf[2]="Проставить в назначение платежа НДС";
 Buf[3]="Проставить в назначение платежа лицевой счет+НДС";
 n=Alternate("Вариант заполнения назначения платежа",Buf,-1,1,12);
 if not n=0:
    if n=1 or n=3: Док_НазнПл=Док_НазнПл+"(л/с "+Банк.РПО_ЛСчет+")"; fi;
    if n=2 or n=3: ДобНДСНазнПл(True); fi;
 fi;
 Return Cur;
end;

Func Осн_Док_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор документа основания","ПРИХПЛПОРУЧЕНИЯ","НОМЕРБУМ|ДАТАДОК","Номер документа|Дата документа",if(РеквП=nil,"","РЕКВКОНТР="+RecordToString(РеквП)));
 if not Rec=nil:
    Осн_ДокВид="Платежное поручение";
    Осн_ДокНом=GetCardFieldS("ПРИХПЛПОРУЧЕНИЯ",Rec,"НомерБум");
    Осн_ДокДат=GetCardFieldD("ПРИХПЛПОРУЧЕНИЯ",Rec,"ДатаДок");
    РеквП=GetCardFieldR("ПРИХПЛПОРУЧЕНИЯ",Rec,"РеквКонтр");
    Призн_К=GetCardFieldS("ПРИХПЛПОРУЧЕНИЯ",Rec,"РПО_Призн_К");
    БанкП=GetCardFieldR("ПРИХПЛПОРУЧЕНИЯ",Rec,"КонтрБанк");
 fi;
 Return Cur;
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 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 РеквП_OnEnter(FieldName: String; Iter: Integer): logical;
var rec:record;
 if not РеквП=nil:
    rec=OpenCardFile("Контрагент","",РеквП,crdRecordOnly);
   else
    rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
 fi;
 if Rec=nil: ^False; fi;
 РеквП=Rec;
 БанкП=Раб.Бюджет2005.БанкСчет(РеквП,False);
 Призн_К=CardFileRecSign("Контрагент","Признак","К",РеквП,"");
 Return  False;
end;

Proc РеквП_OnExit(FieldName: String; Iter: Integer);
 РеквП=nil;
 БанкП=nil;
 Призн_К="";
end;

Func Призн_К_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if РеквП=nil: Message("Выберите контрагента",mtError); Template.Field="РеквП_"; ^False; fi;
 if EnqOkCancel("Изменение аналитического признака контрагента может привести к ошибке^MВы уверены, что хотите изменить признак ?",mtWarning)=cmOk:
    tmp=AnaElection("К.*",False,False,Призн_К);
    if not tmp="":
       Призн_К=tmp;
    fi;
 fi;
 Return False;
end;

Proc Призн_К_OnExit(FieldName: String; Iter: Integer);
 if not РеквП=nil:
    Призн_К=CardFileRecSign("Контрагент","Признак","К",РеквП,"");
 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;
 fi;
 Return False;
end;

Func ОчиститьПр_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if EnqOkCancel("Очистить таблицу формируемых проводок ?",mtWarning)=cmOk:
       ClearVariable(Позиции);
    fi;
 fi;
 Return False;
end;

Func Вал_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var Cur:S;
 if Док_ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
 if Док_ОКВ="643": Message("Заполнение данного поля для кода валюты 643 (Российский рубль) не требуется"); ^False; fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 n=0;
 for Currencies Cur="*&~"+BaseCurrency do
  n=n+1;
  Buf[n]=Up(Cur);
  Buf2[n]=Buf[n]+" --"+Name_C(Cur);
 od;
 if n=0: Message("Список валют пуст",mtWarning); ^False; fi;
 n=Alternate("Валюта",Buf2,-1,SearchInArray(Buf,Вал),12);
 if n=0: ^False; fi;
 Вал=Buf[n];
 Return False;
end;

Func Сум_OnEnter(FieldName: String; Iter: Integer): logical;
 if Док_ОКВ="": Message("Укажите код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
 --if Док_ОКВ="643": Message("Заполнение данного поля для кода валюты 643 (Российский рубль) не требуется"); fi;
 Return True;
end;

Func СумРуб_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 НеПустаяТаблица;
 if Док_СумРуб=0: Message("Заполните сумму в рублях",mtError); Template.Field="Док_СумРуб"; ^Cur; fi;
 Iter=AsInteger(Template.Frame);
 Позиции[Iter].Сум=Док_Сум;
 Позиции[Iter].СумРуб=Док_СумРуб;
 Return Cur;
end;

Func Гр7_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 if EnqOkCancel("Заполнить комментарий назначением платежа ?",mtWarning)=cmOk:
    for Iter=1..Позиции do
     Позиции[Iter].Кмнт=Док_НазнПл;
    od;
 fi;
 Return Cur;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    InsertFrame(Позиции,Iter+1);
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    DeleteFrame(Позиции,Iter);
 fi;
 Return False;
end;


Func СчДеб_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица;
 if Позиции[Iter].СчДеб="": tmp=hСчДеб; else tmp=Позиции[Iter].СчДеб; fi;
 tmp=PickCorrAccount(Позиции[Iter].СчКре,True,tmp);
 if not tmp="":
    Позиции[Iter].СчДеб=tmp;
    hСчДеб=tmp;
    ОбработатьПризн(Iter);
 fi;
 Return False;
end;

Func СчКре_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица;
 if Позиции[Iter].СчКре="": tmp=hСчКре; else tmp=Позиции[Iter].СчКре; fi;
 tmp=AccountElection(СчКр,False,tmp);
 if not tmp="":
    Позиции[Iter].СчКре=tmp;
    hСчКре=tmp;
    if not Correspond(Позиции[Iter].СчДеб,Позиции[Iter].СчКре): Позиции[Iter].СчДеб=""; fi;
    ОбработатьПризн(Iter);
 fi;
 Return False;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Позиции[Iter].СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 if Позиции[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 tmp=Раб.Бюджет2005.СписокСправ(Позиции[Iter].СчДеб+"|"+Позиции[Iter].СчКре,0,ИсклПризн);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp,False,False,hПризн);
 if not tmp="":
    Позиции[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    hПризн=tmp;
 fi;
 Return False;
end;

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

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

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var КОСГУ_,КБК_,ТипКБК_:S;
 НеПустаяТаблица;
 if Док_Ист="": Message("Выберите наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; Template.Frame=Iter; ^False; fi;
 if Док_Ист="5": Message("Для средств во временном распоряжении, указывать КБК не требуется");^False; fi;
 if Док_КБК="":
    КБК_=hКБК;
   else
    if Док_ТипКБК="10": КБК_="ФКР."+SubStr(Док_КБК,1,3)+"."+SubStr(Док_КБК,4,4)+"."+SubStr(Док_КБК,8,7)+"."+SubStr(Док_КБК,15,3);
      |Док_ТипКБК="20": КБК_="КД."+SubStr(Док_КБК,1,3)+"."+SubStr(Док_КБК,4,1)+"."+SubStr(Док_КБК,5,2)+"."+SubStr(Док_КБК,7,5)+"."+SubStr(Док_КБК,12,2)+"."+SubStr(Док_КБК,14,4);
      |Док_ТипКБК="31" or Док_ТипКБК="32": КБК_="КИФД."+SubStr(Док_КБК,1,3)+"."+SubStr(Док_КБК,4,2)+"."+SubStr(Док_КБК,6,2)+"."+SubStr(Док_КБК,8,2)+"."+SubStr(Док_КБК,10,2)+"."+SubStr(Док_КБК,12,2)+"."+SubStr(Док_КБК,14,4);
    fi;
    КОСГУ_=SubStr(Док_КБК,18,3);
 fi;
 КБК_=AnaElection("КД.*|КИФД.*",False,False,КБК_);
 if not КБК_="":
    hКБК=КБК_;
    if Match(КБК_,"ФКР.*"): ТипКБК_="10"; if КОСГУ_="": КОСГУ_=hЭКР; fi;
      |Match(КБК_,"КД.*"): ТипКБК_="20"; if КОСГУ_="": КОСГУ_=hЭКД; fi;
      |Match(КБК_,"КИФД.???.00.*"): ТипКБК_="31"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
      |Match(КБК_,"КИФД.???.01.*"): ТипКБК_="31"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
      |Match(КБК_,"КИФД.???.02.*"): ТипКБК_="32"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
    fi;
    КОСГУ_=ВыборЭК(ТипКБК_,КОСГУ_);
    if КОСГУ_="": ^False; fi;
    КБК_=SubStr(КБК_,Pos(".",КБК_)+1,255);
    КБК_=Раб.Формат.ReplaceSubstr(КБК_,".","");
    Док_КБК=КБК_+КОСГУ_;
    Док_ТипКБК=ТипКБК_;
 fi;
 Return False;
end;

Proc КБК_OnExit(FieldName: String; Iter: Integer);
 Док_ТипКБК="";
end;

Func Док_ОКАТО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 if Рекв=nil: Message("Выберите получателя бюджетных средств...",mtError); Template.Field="Клиент"; ^Cur; fi;
 Док_ОКАТО=Рекв.ОКАТО;
 Return Cur;
end;

Func Док_Сум_OnEnter(FieldName: String; Iter: Integer): logical;
 if Док_ОКВ="": Message("Укажите код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
 --if Док_ОКВ="643": Message("Заполнение данного поля для кода валюты 643 (Российский рубль) не требуется"); fi;
 Return True;
end;

Func ОКТМО_П_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  Template.HideEditor(False);
  ОКТМО_П = РеквП.ОКТМО;
  Return РеквП.ОКТМО;
end;

--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbУчитывать_OnChange(Sender: String);
 if SkipEvent: Exit; fi;
 if Учитывать:
    Учитывать=Проверить;
   else
    if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
       Учитывать=True;
      else
       if ВБанк:
	  ВБанк=False;
	  cbВБанк.State=ВБанк;
       fi;
    fi;
 fi;
 cbУчитывать.State=Учитывать;
 Оформление;
 EditorApply;
 СоздатьПП(True);
end;

Proc cbВБанк_OnChange(Sender: String);
 if SkipEvent: Exit; fi;
 --ClearVariable(ДатаРейс);
 --ClearVariable(НомРейс);
 --ClearVariable(ВЛВС);
 if НомРейс>0: НомРейс=-НомРейс; fi;
 if not Учитывать and ВБанк:
    Учитывать=True;
    cbУчитывать.State=Учитывать;
    ВБанк=Учитывать;
    cbВБанк.State=ВБанк;
 fi;
 EditorApply;
 СоздатьПП(True);
end;

Proc cbПроводить_OnChange(Sender: String);
 if SkipEvent: Exit; fi;
 Try
  if Проводить:
     if ДатаОпер=1.1.100: Message("Введите дату выписки",mtError); Template.Object="btnДатаОпер"; Проводить=False; Exit; fi;
     if ДокОперНом="" and not ДокОперДат=1.1.100: Message("Введите номер платежного поручения (документа, подтверждающий проведение операции)",mtError); Template.Object="edДокОперНом"; Проводить=False; Exit; fi;
     if ДокОперДат=1.1.100 and not ДокОперНом="": Message("Введите дату платежного поручения (документа, подтверждающий проведение операции)",mtError); Template.Object="edДокОперДат"; Проводить=False; Exit; fi;
     if not ВБанк:
	ВБанк=True;
	cbВБанк.State=ВБанк;
	Проводить=ВБанк;
     fi;
    else
     if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
	Проводить=True;
     fi;
  fi;
 Finally
  if not СоздатьПП(Sender="cbПроводить"):
     if Проводить: Проводить=False; fi;
    else
     if Проводить and not ДокОперНом="": Template.Object="btnДок"; fi;
  fi;
  cbПроводить.State=Проводить;
  Оформление;
 end;
 EditorApply;
end;

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

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

Proc btnУдалить_OnClick(Sender: String);
 if EnqOkCancel("Вы действительно хотите удалить заявку и связанные с ней документы ?",mtWarning)=cmCancel: Exit; fi;
 if not canUpdate("Поруч") or not canDelete("Поруч") or not canUpdate(SelfCrd) or not canDelete(SelfCrd): Message("У вас недостаточно прав на выполнение данной операции",mtError); Exit; fi;
 ДокОпер1=nil;
 EditorApply;
 УдалитьЗаписи("Поруч");
 УдалитьЗаписи(SelfCrd);
 Message("Документ успешно удален");
 Close;
end;

Proc btnДок_OnClick(Sender: String);
var Bln:S;
 if ДокОпер1=nil: Message("Документ еще не создан^MДля создания документа, установите флаг 'Проведено'",mtWarning); Template.Object="cbПроводить";
   |not RecordExists("Поруч",ДокОпер1): Message("Утеряна ссылка на документ^MДля пересоздания документа, переустановите флаг 'Проведено'",mtWarning); Template.Object="cbПроводить";
   |True:
    Bln="ДОКУМЕНТЫ.БАНК.ПОРУЧ";
    if isBlankOpen(Bln): Close(Bln); fi;
    if isBlankOpen(Bln): Message("Закройте бланк платежного поручения и повторите попытку",mtError); Exit; fi;
    PutVariableL("ДОКУМЕНТЫ.БАНК.ПОРУЧ.noMsg",True);
    OpenBlank(Bln,True,ДокОпер1);
 fi;
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 cbНеВыяснен_OnChange(Sender: String);
 if НеВыяснен:
    Template.Field="Возврат_ДокНом";
 fi;
end;

Proc btnНастр_OnClick(Sender: String);
 ОткрНастр(True);
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;
 СоздатьПП(True);
 EditorApply;
end;

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

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

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

Proc OnClose(Destroy: Logical);
 Настр(True);
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"))>=7 and ver<7: ver=7; fi;
       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;
       ЗаполнитьКлиента(nil);
       ПоУмолчанию;
    fi;
    Номер=РАБ.ОБЛ.СледСУчетомДаты(SelfCrd,"Номер","ДатаДок",ДатаДок);
    НомерДок=Str(Номер);
    Проводить=False;
    ВБанк=False;
    Учитывать=False;
    ДатаОпер=1.1.100;
    НомРейс=0;
    ДатаРейс=1.1.100;
    Аннул=False;
    АннулДата=1.1.100;
    АннулПримеч="";
    ДокОпер1=nil;
    ДокОперНом="";
    ДокОперДат=1.1.100;
    ClosedModFob=False;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
 РасчетГЭК;
 if not FlagInit: Оформление; fi;
 if Проводить and ДокОпер1=nil:
    Message("Документ, подтверждающий проведение операции не найден^MДля создания документа, переустановите флаг 'Проведено'",mtError);
    Template.Object="cbПроводить";
 fi;
 if not ДокОпер1=nil and not Проводить=ДокОпер1.Проводить:
    Message("Статус документа, подтверждающий проведение операции отличен от статуса заявки^MДля исправления, переустановите флаг 'Проведено'",mtError);
    Template.Object="cbПроводить";
 fi;
end;

Func OnVerify: Logical;
 Return ЗаполнитьКлючДок;
end;
--Обработчики событий шаблона -----
--



Конец


