-- Шаблон создан мастером бланков
-- 08.12.2008 16:32:07
--
БланкСШаблоном "Расходное расписание поступившее", Редактор РПО_РР_ВХ;

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

var УпрНастр:L;
var НастрЗакр:S="Закрыть настройку";

var fАссигн:L;
var fЛБО:L=[True];
var fПОФ:L;
var fПС:L=[True];
var extКлюч:S;

var inРБС_ПБС:L;
var lockРБС_ПБС:L;

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

var РБС_:S="";

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

var Ассигн_ТипКБК_:S=if(Ассигн_ТипКБК="10":"Расходы"|Ассигн_ТипКБК="31":"Источники внутреннего финансирования дефицита бюджета"|Ассигн_ТипКБК="32":"Источники внешнего финансирования дефицита бюджета"|True:"");

var nАссигн:I=Ассигн;
var nЛБО:I=ЛБО;
var nПОФ:I=ПОФ;

var ОчиститьР1:S=if(Проводить,"","Очистить");
var ОчиститьР2:S=if(Проводить,"","Очистить");
var ОчиститьР3:S=if(Проводить,"","Очистить");

Гр2:L;
Гр3:L;
Гр4:L;
var Гр2_:S=if(Проводить,"",if(Гр2,"Дублировать","Не дублировать"));
var Гр3_:S=if(Проводить,"",if(Гр3,"Дубл.","Не дуб."));
var Гр4_:S=if(Проводить,"",if(Гр4,"Дублировать","Не дублировать"));

var A:S=if(Проводить,"","+");
var D:S=if(Проводить,"","-");

var пп[]:i=$;

var Призн1[]:S=Ассигн[$].Призн;

var Итого1Сум1:N=SumOfArray(Ассигн[].Сум1,Ассигн);
var Итого1Сум2:N=SumOfArray(Ассигн[].Сум2,Ассигн);
var Итого1Сум3:N=SumOfArray(Ассигн[].Сум3,Ассигн);

var Призн2[]:S=ЛБО[$].Призн;

var Итого2Сум1:N=SumOfArray(ЛБО[].Сум1,ЛБО);
var Итого2Сум2:N=SumOfArray(ЛБО[].Сум2,ЛБО);
var Итого2Сум3:N=SumOfArray(ЛБО[].Сум3,ЛБО);

var Призн3[]:S=ПОФ[$].Призн;

var Итого3Сум1:N=SumOfArray(ПОФ[].Сум1,ПОФ);

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

hГлава:S;
hГРБС:S;
hДолжнИсп:S;
hФИОИсп:S;
hТелИсп:S;
var hБК:S;
var hКОСГУ:S;
var hПризн:S;

var Key[]:S;
var Buf[]:S;

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;


S7_1: Section;
S7_2: Section;
S9_1: Section;
S9_2: Section;
S11_1: Section;
S11_2: Section;

cbПроводить : Object;
btnДатаОпер : Object;
edДатаОпер  : Object;
rbРБС	    : Object;
rbПБС	    : Object;
cbПС	    : Object;
cbАссигн    : Object;
cbЛБО	    : Object;
cbПОФ	    : Object;
btnОбновПС  : Object;
btnНастр    : Object;
btnЗакрыть  : Object;
bvlРБС_ПБС  : Object;
bvlРаздел   : Object;


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

var SelfCrd:S="РПО_РР_ВХ";
var SelfBln:S="ДОКУМЕНТЫ.ЛБО.РР_ВХ";

var НастрGUID:S;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("fПС","L");
    Раб.Настр.Добавить("fАссигн","L");
    Раб.Настр.Добавить("fЛБО","L");
    Раб.Настр.Добавить("fПОФ","L");
    Раб.Настр.Добавить("extКлюч","S");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
    fi;
 fi;
end;

Proc ОткрНастр(Flag:L);
 cbПроводить.Visible=not Flag;
 btnДатаОпер.Visible=not Flag;
 edДатаОпер.Visible=not Flag;
 rbРБС.Visible=not Flag;
 rbПБС.Visible=not Flag;
 cbПС.Visible=not Flag;
 cbАссигн.Visible=not Flag;
 cbЛБО.Visible=not Flag;
 cbПОФ.Visible=not Flag;
 btnНастр.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 bvlРБС_ПБС.Visible=not Flag;
 bvlРаздел.Visible=not Flag;
 УпрНастр=Flag;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
var hАссигн,hЛБО,hПОФ:L;
 hАссигн=fАссигн;
 hЛБО=fЛБО;
 hПОФ=fПОФ;
 fАссигн=True;
 fЛБО=True;
 fПОФ=True;
 Try
  ClearVariable(BufField);
  ClearVariable(BufColorBg);
  ClearVariable(BufColorFo);
  for s=1..13 do
   if FindObject("S"+Str(s),Obj):
      rr=asInteger(Obj.RowsCount);
      cc=asInteger(Obj.ColsCount);
      for r=1 ..rr  do
       for c=1 ..cc  do
	BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
	if BgColor=coAqua or BgColor=coTeal:
	   Field=asString(Obj.Cell(r,c,CellContents,"",False));
	   if SearchInArray(BufField,Field,True)=-1:
	      n=InsertInArraySort(BufField,Field);
	      InsertInArray(BufColorBg,n,BgColor);
	   fi;
	fi;
       od;
      od;
   fi;
  od;
  l=LengthOfArray(BufField);
  for n=1..l do
   if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
     |True: BufColorFo[n]=coBlack;
   fi;
  od;
 Finally
  fАссигн=hАссигн;
  fЛБО=hЛБО;
  fПОФ=hПОФ;
 end;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
 btnДатаОпер.Enabled=not Проводить;
 edДатаОпер.Enabled=not Проводить;
 cbПС.Visible=not РБС_ПБС;
 rbРБС.Enabled=not Проводить and not lockРБС_ПБС;
 rbПБС.Enabled=not Проводить and not lockРБС_ПБС;
 cbАссигн.Enabled=not Проводить;
 cbЛБО.Enabled=not Проводить;
 cbПОФ.Enabled=not Проводить;
 btnОбновПС.Enabled=Проводить and fПС and not РБС_ПБС;
 btnОбновПС.Visible=not РБС_ПБС;
 for s=1..13 do
  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       Field=asString(Obj.Cell(r,c,CellContents,""));
       n=SearchInArray(BufField,Field,True);
       if not n=-1:
	  if Проводить:
	     Obj.Cell(r,c,CellFontColor,coBlack); 
	     Obj.Cell(r,c,CellBgColor,coTransparent); 
	    else
	     Obj.Cell(r,c,CellFontColor,BufColorFo[n]); 
	     Obj.Cell(r,c,CellBgColor,BufColorBg[n]); 
	  fi;
	  Obj.Cell(r,c,CellReadOnly,Проводить);
       fi;
      od;
     od;
  fi;
 od;
 S7.Visible=fАссигн;
 S7.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S7_1.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S7_2.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 --
 S9.Visible=fЛБО;
 S9.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S9_1.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S9_2.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 --
 S11.Visible=fПОФ;
 S11.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S11_1.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S11_2.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
end;

Func Name2Handle:S;
var S:S;
 S=AsString(Template.Name);
 if s="s7":  ^"Ассигн";
   |s="s9":  ^"ЛБО";
   |s="s11": ^"ПОФ";
 fi;
end;

Func Handle2Name(aHandle:S):S;
 if aHandle="Ассигн": ^"S7";
   |aHandle="ЛБО":    ^"S9";
   |aHandle="ПОФ":    ^"S11";
 fi;
end;

Func GetCount(aHandle:S):I;
 if aHandle="Ассигн": ^Ассигн;
   |aHandle="ЛБО": ^ЛБО;
   |aHandle="ПОФ": ^ПОФ;
 fi;
 ^0;
end;

Proc НеПустаяТаблица(aHandle:S);
 if aHandle="Ассигн": if Ассигн<1: InsertFrame(Ассигн,1); fi;
   |aHandle="ЛБО":    if ЛБО<1: InsertFrame(ЛБО,1); fi;
   |aHandle="ПОФ":    if ПОФ<1: InsertFrame(ПОФ,1); fi;
 fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Ассигн do
  if Ассигн[Iter].БК="" and
     Ассигн[Iter].КОСГУ="" and
     Ассигн[Iter].Призн="" and
     Round(Ассигн[Iter].Сум1,2)=0 and
     Round(Ассигн[Iter].Сум2,2)=0 and
     Round(Ассигн[Iter].Сум3,2)=0 and	
     Ассигн[Iter].Примеч="": DeleteFrame(Ассигн,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 --
 Iter=1;
 While Iter<=ЛБО do
  if ЛБО[Iter].БК="" and
     ЛБО[Iter].КОСГУ="" and
     ЛБО[Iter].Призн="" and
     Round(ЛБО[Iter].Сум1,2)=0 and
     Round(ЛБО[Iter].Сум2,2)=0 and
     Round(ЛБО[Iter].Сум3,2)=0 and   
     ЛБО[Iter].Примеч="": DeleteFrame(ЛБО,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 --
 Iter=1;
 While Iter<=ПОФ do
  if ПОФ[Iter].БК="" and
     ПОФ[Iter].КОСГУ="" and
     ПОФ[Iter].Призн="" and
     Round(ПОФ[Iter].Сум1,2)=0 and
     ПОФ[Iter].Примеч="": DeleteFrame(ПОФ,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Func МаскаСчета(Iter:I; Mode:S; aHandle:S):S;
var Ret,БК_,КОСГУ_:s;
 if Mode="БК": КОСГУ_=GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ");
   |Mode="КОСГУ": БК_=GetVariableS(aHandle+"["+Str(Iter)+"].БК");
 fi;
 if not БК_="": БК_=БК_+".*&"; fi;
 if not КОСГУ_="": КОСГУ_="&*."+КОСГУ_; fi;
 if aHandle="Ассигн": Ret=БК_+"(*."+Ассигн_Деб1+".*|*."+Ассигн_Деб2+".*|*."+Ассигн_Деб3+".*|*."+Ассигн_Кре1+".*|*."+Ассигн_Кре2+".*|*."+Ассигн_Кре3+".*)"+КОСГУ_+if(Ассигн_ТипКБК="31":"&???.01.??.??.??.??.????.*"|Ассигн_ТипКБК="32":"&???.02.??.??.??.??.????.*"|true:"");
   |aHandle="ЛБО": Ret=БК_+"(*."+ЛБО_Деб1+".*|*."+ЛБО_Деб2+".*|*."+ЛБО_Деб3+".*|*."+ЛБО_Кре1+".*|*."+ЛБО_Кре2+".*|*."+ЛБО_Кре3+".*|*.1.501.05.*)"+КОСГУ_;
   |aHandle="ПОФ": Ret=БК_+"(*."+ПОФ_Деб1+".*|*."+ПОФ_Кре1+".*)"+КОСГУ_;
 fi;
 ^Ret;
end;

Func МаскаПризн (Iter:I; aHandle:S):S;
var y,yy:i;
var Сч,Mask:S;
 Mask="";
 if aHandle="ПОФ": yy=1; else yy=3; fi;
 for y=1..yy do
  Сч=GetVariableS(aHandle+"["+Str(Iter)+"].СчДеб"+Str(y));
  if not Name_S(Сч)=" ": Mask=Mask+"|"+Сч; fi;
  Сч=GetVariableS(aHandle+"["+Str(Iter)+"].СчКре"+Str(y));
  if not Name_S(Сч)=" ": Mask=Mask+"|"+Сч; fi;
 od;
 Mask=SubStr(Mask,2,255);
 if Mask="": ^""; fi;
 Mask=Раб.Бюджет2005.СписокСправ(Mask,0,ИсклПризн);
 ^Mask;
end;

Proc ОбновитьСч (Iter:I; aHandle:S);
var n1,n2,y,yy:i;
var БК_,КОСГУ_,Сч_:S;
var Рекурс:I;
var Flag:L;
 Рекурс=0;
 if aHandle="":  aHandle="Ассигн"; Рекурс=1;
   |aHandle="1": aHandle="ЛБО";    Рекурс=2;
   |aHandle="2": aHandle="ПОФ";    Рекурс=3;
 fi;
 if Iter=-1: n1=1; n2=GetCount(aHandle); else n1=Iter; n2=Iter; fi;
 yy=if(aHandle="ПОФ",1,3);
 if Рекурс<=1: Раб.КСА.Начать; fi;
 for Iter=n1..n2 do
  БК_=GetVariableS(aHandle+"["+Str(Iter)+"].БК");
  КОСГУ_=GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ");
  if not БК_="" and not КОСГУ_="":
     for y=1..yy do
      if y>1:
	 Flag=not GetVariableN(aHandle+"["+Str(Iter)+"].Сум"+Str(y))=0;
	else
	 Flag=True;
      fi;
      if Flag:
	 Сч_=БК_+"."+GetVariableS(aHandle+"_Деб"+Str(y))+"."+КОСГУ_;
	 Раб.КСА.Добавить(Сч_);
	else
	 Сч_="";
      fi;
      PutVariableS(aHandle+"["+Str(Iter)+"].СчДеб"+Str(y),Сч_);
      if Flag:
	 Сч_=БК_+"."+GetVariableS(aHandle+"_Кре"+Str(y))+"."+КОСГУ_;
	 Раб.КСА.Добавить(Сч_);
	else
	 Сч_="";
      fi;
      PutVariableS(aHandle+"["+Str(Iter)+"].СчКре"+Str(y),Сч_);
      if РБС_ПБС and aHandle="ЛБО":
	 Сч_=БК_+".1.501."+Str(y)+"4."+КОСГУ_;
	 if Flag: Раб.КСА.Добавить(Сч_); fi;
      fi;
     od;
  fi;
 od;
 if Рекурс=0 or Рекурс=3:
    if Раб.КСА.Закончить(False): Message("Добавление счетов завершено"); fi;
   else
    ОбновитьСч(-1,Str(Рекурс));
 fi;
end;

Proc ОбновитьПризн(Iter:I; aHandle:S);
var tmp,Mask:S;
var n1,n2:i;
 if Iter=-1:  n1=1; n2=GetCount(aHandle); else n1=Iter; n2=Iter; fi;
 for Iter=n1..n2 do
  if not GetVariableS(aHandle+"["+Str(Iter)+"].БК")="" and not GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ")="":
     Mask=МаскаПризн(Iter,aHandle);
     tmp=GetVariableS(aHandle+"["+Str(Iter)+"].Призн");
     PutVariableS(aHandle+"["+Str(Iter)+"].Призн",Раб.Бюджет2005.ПривестиВСоотвНаборСлов(tmp," ",Mask,"|"));
  fi;
 od;
end;

Proc ОбновитьКодСчета;
var Ассигн_Деб1_,Ассигн_Деб2_,Ассигн_Деб3_,Ассигн_Кре1_,Ассигн_Кре2_,Ассигн_Кре3_:S;
var ЛБО_Деб1_,ЛБО_Деб2_,ЛБО_Деб3_,ЛБО_Кре1_,ЛБО_Кре2_,ЛБО_Кре3_:S;
var ПОФ_Деб1_,ПОФ_Деб2_,ПОФ_Деб3_,ПОФ_Кре1_,ПОФ_Кре2_,ПОФ_Кре3_:S;
var Flag:L;
 Flag=False;
 if РБС_ПБС: --рбс
    Ассигн_Деб1_="1.503.15";
    Ассигн_Кре1_="1.503.12";
    Ассигн_Деб2_="1.503.25";
    Ассигн_Кре2_="1.503.22";
    Ассигн_Деб3_="1.503.35";
    Ассигн_Кре3_="1.503.32";
    ЛБО_Деб1_="1.501.15";
    ЛБО_Кре1_="1.501.12";
    ЛБО_Деб2_="1.501.25";
    ЛБО_Кре2_="1.501.22";
    ЛБО_Деб3_="1.501.35";
    ЛБО_Кре3_="1.501.32";
    ПОФ_Деб1_="1.ЗАБ.90";
    ПОФ_Кре1_="1.ЗАБ.23";
   else
    Ассигн_Деб1_="1.503.15";
    Ассигн_Кре1_="1.503.13";
    Ассигн_Деб2_="1.503.25";
    Ассигн_Кре2_="1.503.23";
    Ассигн_Деб3_="1.503.35";
    Ассигн_Кре3_="1.503.33";
    ЛБО_Деб1_="1.501.15";
    ЛБО_Кре1_="1.501.13";
    ЛБО_Деб2_="1.501.25";
    ЛБО_Кре2_="1.501.23";
    ЛБО_Деб3_="1.501.35";
    ЛБО_Кре3_="1.501.33";
    ПОФ_Деб1_="1.ЗАБ.91";
    ПОФ_Кре1_="1.ЗАБ.14";
 fi;
 if not Ассигн_Деб1=Ассигн_Деб1_: Ассигн_Деб1=Ассигн_Деб1_; Flag=True; fi;
 if not Ассигн_Деб2=Ассигн_Деб2_: Ассигн_Деб2=Ассигн_Деб2_; Flag=True; fi;
 if not Ассигн_Деб3=Ассигн_Деб3_: Ассигн_Деб3=Ассигн_Деб3_; Flag=True; fi;
 if not Ассигн_Кре1=Ассигн_Кре1_: Ассигн_Кре1=Ассигн_Кре1_; Flag=True; fi;
 if not Ассигн_Кре2=Ассигн_Кре2_: Ассигн_Кре2=Ассигн_Кре2_; Flag=True; fi;
 if not Ассигн_Кре3=Ассигн_Кре3_: Ассигн_Кре3=Ассигн_Кре3_; Flag=True; fi;
 if not ЛБО_Деб1=ЛБО_Деб1_: ЛБО_Деб1=ЛБО_Деб1_; Flag=True; fi;
 if not ЛБО_Деб2=ЛБО_Деб2_: ЛБО_Деб2=ЛБО_Деб2_; Flag=True; fi;
 if not ЛБО_Деб3=ЛБО_Деб3_: ЛБО_Деб3=ЛБО_Деб3_; Flag=True; fi;
 if not ЛБО_Кре1=ЛБО_Кре1_: ЛБО_Кре1=ЛБО_Кре1_; Flag=True; fi;
 if not ЛБО_Кре2=ЛБО_Кре2_: ЛБО_Кре2=ЛБО_Кре2_; Flag=True; fi;
 if not ЛБО_Кре3=ЛБО_Кре3_: ЛБО_Кре3=ЛБО_Кре3_; Flag=True; fi;
 if not ПОФ_Деб1=ПОФ_Деб1_: ПОФ_Деб1=ПОФ_Деб1_; Flag=True; fi;
 if not ПОФ_Кре1=ПОФ_Кре1_: ПОФ_Кре1=ПОФ_Кре1_; Flag=True; fi;
 if Flag:
    ОбновитьСч(-1,"");
    ОбновитьПризн(-1,"Ассигн");
    ОбновитьПризн(-1,"ЛБО");
    ОбновитьПризн(-1,"ПОФ");
 fi;
end;

Proc ПоУмолчанию;
 РБС_ПБС=inРБС_ПБС;
 Ассигн_ТипКБК="10";
 ОбновитьКодСчета;
 ДолжнИсп=hДолжнИсп;
 ФИОИсп=hФИОИсп;
 ТелИсп=hТелИсп;
end;

Proc ПоискВШаблоне (Mask:S; Iter0:I; aHandle:S);
var Iter,nn:I;
 nn=GetCount(aHandle);
 for Iter=Iter0+1..nn do
  if Match(GetVariableS(aHandle+"["+Str(Iter)+"].БК")+"."+GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ")+"."+GetVariableS(aHandle+"["+Str(Iter)+"].ДопКл")+" "+GetVariableS(aHandle+"["+Str(Iter)+"].Призн"),"*"+Mask+"*"): Template.Field="КБК"; Template.Frame=Iter; Exit; fi;
 od;
 if not Iter0=1:
    if EnqOkCancel("Ничего не найдено по заданому шаблону *"+Mask+"*^MПовторить поиск с начала таблицы ?")=cmOk: ПоискВШаблоне(Mask,1,aHandle); fi;
   else
    Message("Ничего не найдено по заданому шаблону *"+Mask+"*");
 fi;
end;

Func ПроверитьРаздел(aHandle:S; p:i):L;
var Iter,nn,y,yy:I;
var БК_,КОСГУ_,СчДеб_,СчКре_,Призн_:S;
var Flag:L;
 ProgressPos(p);
 nn=GetCount(aHandle);
 yy=if(aHandle="ПОФ",1,3);
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..nn do
  БК_=GetVariableS(aHandle+"["+Str(Iter)+"].БК");
  КОСГУ_=GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ");
  if БК_="": Message("Введите КБК",mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
  if КОСГУ_="": Message("Введите КБК",mtError); Template.Name=Handle2Name(aHandle); Template.Field="КОСГУ"; Template.Frame=Iter; ^False; fi;
  Призн_=GetVariableS(aHandle+"["+Str(Iter)+"].Призн");
  for y=1..yy do
   if y>1:
      Flag=not GetVariableN(aHandle+"["+Str(Iter)+"].Сум"+Str(y))=0;
     else
      Flag=True;
   fi;
   if Flag:
      СчДеб_=GetVariableS(aHandle+"["+Str(Iter)+"].СчДеб"+Str(y));
      СчКре_=GetVariableS(aHandle+"["+Str(Iter)+"].СчКре"+Str(y));
      if Name_S(СчДеб_)=" ": Message("Неизвестный идентификатор счета "+СчДеб_,mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
      if Name_S(СчКре_)=" ": Message("Неизвестный идентификатор счета "+СчКре_,mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
      if not Correspond(СчДеб_,СчКре_): Message("Счета не могут корреспондировать "+СчДеб_+"/"+СчКре_,mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
      if not Раб.Бюджет.ПроверитьПризнакиОбязательные(СчДеб_,СчКре_,Призн_,ИсклПризн): Template.Name=Handle2Name(aHandle); Template.Field=if(aHandle="Ассигн":"Призн1"|aHandle="ЛБО":"Призн2"|aHandle="ПОФ":"Призн3"|true:""); Template.Frame=Iter; ^False; fi;
      if not Раб.Бюджет.ПроверитьПризнакиСвязанные(СчДеб_,СчКре_,Призн_,ИсклПризн): Template.Name=Handle2Name(aHandle); Template.Field=if(aHandle="Ассигн":"Призн1"|aHandle="ЛБО":"Призн2"|aHandle="ПОФ":"Призн3"|true:""); Template.Frame=Iter; ^False; fi;
   fi;
  od;
  if aHandle="ПОФ":
     if Round(GetVariableN(aHandle+"["+Str(Iter)+"].Сум1"),2)=0: Message("Заполните сумму",mtError); Template.Name=Handle2Name(aHandle); Template.Field="Сум1"; Template.Frame=Iter; ^False; fi;
    else
     if Round(GetVariableN(aHandle+"["+Str(Iter)+"].Сум1"),2)=0 and Round(GetVariableN(aHandle+"["+Str(Iter)+"].Сум2"),2)=0 and Round(GetVariableN(aHandle+"["+Str(Iter)+"].Сум3"),2)=0: Message("Заполните одну из сумм",mtError); Template.Name=Handle2Name(aHandle); Template.Field="Сум1"; Template.Frame=Iter; ^False; fi;
  fi;
 od;
 ^True;
end;

Func ПроверитьНаборСправ(aHandle:S; p:i):L;
var Iter,z,nn:I;
var tmp,БК_,КОСГУ_:S;
 ProgressPos(p);
 ClearVariable(Key);
 ClearVariable(Buf);
 nn=GetCount(aHandle);
 for Iter=1..nn do
  tmp=Раб.Бюджет2005.СортироватьНаборСлов(GetVariableS(aHandle+"["+Str(Iter)+"].Призн")," ",True);
  PutVariableS(aHandle+"["+Str(Iter)+"].Призн",tmp);
  tmp=Раб.Бюджет2005.ПризнВСправ(tmp," ","");
  БК_=GetVariableS(aHandle+"["+Str(Iter)+"].БК");
  КОСГУ_=GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ");
  z=SearchInArray(Key,БК_+"."+КОСГУ_,True);
  if z=-1:
     z=InsertInArraySort(Key,БК_+"."+КОСГУ_);
     InsertInArray(Buf,z,tmp);
    else
     if not Buf[z]=tmp:
	Message("Различный набор аналитических справочников для КБК="+ExtractWord(1,Key[z]," "),mtError);
	Template.Name=Handle2Name(aHandle);
	Template.Field=if(aHandle="Ассигн":"Призн1"|aHandle="ЛБО":"Призн2"|aHandle="ПОФ":"Призн3"|true:"");
	Template.Frame=Iter;
	^False;
     fi;
  fi;
 od;
 ^True;
end;

Func ПроверитьУникальность(aHandle:S; p:i):L;
var Iter,z,nn:I;
var БК_,ДопКл_,КОСГУ_,Призн_:S;
 ProgressPos(p);
 ClearVariable(Key);
 ClearVariable(Buf);
 nn=GetCount(aHandle);
 for Iter=1..nn do
  БК_=GetVariableS(aHandle+"["+Str(Iter)+"].БК");
  ДопКл_=GetVariableS(aHandle+"["+Str(Iter)+"].ДопКл");
  КОСГУ_=GetVariableS(aHandle+"["+Str(Iter)+"].КОСГУ");
  Призн_=GetVariableS(aHandle+"["+Str(Iter)+"].Призн");
  z=SearchInArray(Key,БК_+"."+КОСГУ_+"#"+ДопКл_+"#"+Призн_,True);
  if z=-1:
     z=InsertInArraySort(Key,БК_+"."+КОСГУ_+"#"+ДопКл_+"#"+Призн_);
     InsertInArray(Buf,z,Str(Iter));
    else
     Message("Повторный ввод данных. ^M Строка N"+Str(Iter)+"=Строке N"+Buf[z],mtError);
     Template.Name=Handle2Name(aHandle);
     Template.Field="пп";
     Template.Frame=Iter;
     ^False;
  fi;
 od;
 ^True;
end;

Func Проверить:L;
 ShowProgress(11,"Проверка...");
 Try
  ProgressPos(1);
  if ДатаОпер=1.1.100: Message("Введите дату выписки",mtError); Template.Object="edДатаОпер"; ^False; fi;
  if НомерДок="": Message("Введите номер расходного расписания",mtError); Template.Field="НомерДок"; ^False; fi;
  if ДатаДок=1.1.100: Message("Введите дату расходного расписания",mtError); Template.Field="ДатаДок"; ^False; fi;
  if Глава="": Message("Введите главу по БК",mtError); Template.Field="Глава"; ^False; fi;
  if ГРБС="": Message("Введите главного распорядителя бюджетных средств, главного администратора источников финансирования дефицита бюджета",mtError); Template.Field="ГРБС"; ^False; fi;
  --if РБС=nil or РБС.ПолнИмя+РБС.РПО_ПолнИмя2="": Message("Введите распорядителя (получателя) бюджетных средств, администратора источников финансирования дефицита бюджета с полномочиями главного администратора",mtError); Template.Field="РБС.ПолнИмя"; ^False; fi;
  --if РБС.РПО_КБП="": Message("Введите код по сводному реестру",mtError); Template.Field="РБС.РПО_КБП"; ^False; fi;
  --if РБС_Банк=nil or РБС_Банк.РПО_ОФК_Имя+РБС_Банк.РПО_ОФК_Имя2="": Message("Введите федеральное казначейство, орган Федерального казначейства",mtError); Template.Field="РБС_Банк.РПО_ОФК_Имя"; ^False; fi;
  --if РБС_Банк.РПО_ЛСчет="": Message("Введите номер лицевого счета",mtError); Template.Field="РБС_Банк.РПО_ЛСчет"; ^False; fi;
  --if РБС_Банк.РПО_НаимБюдж="": Message("Введите наименование бюджета",mtError); Template.Field="РБС_Банк.РПО_НаимБюдж"; ^False; fi;
  --if РБС_Банк.РПО_ФО_Наим1+РБС_Банк.РПО_ФО_Наим2="": Message("Введите финансовый орган",mtError); Template.Field="РБС_Банк.РПО_ФО_Наим1"; ^False; fi;
  --if РБС_Банк.РПО_ОФК_Код="": Message("Введите код по КОФК",mtError); Template.Field="РБС_Банк.РПО_ОФК_Код"; ^False; fi;
  if ПБС=nil or (ПБС.ПолнИмя="" and ПБС.РПО_ПолнИмя2=""): Message("Введите распорядителя (получателя) бюджетных средств, администратора источников финансирования дефицита бюджета с полномочиями главного администратора, администратора источников финансирования дефицита бюджета, иного получателя бюджетных средств",mtError); Template.Field="ПБС.ПолнИмя"; ^False; fi;
  if ПБС.РПО_КБП="": Message("Введите код по сводному реестру",mtError); Template.Field="ПБС.РПО_КБП"; ^False; fi;
  if ПБС_Банк=nil or (ПБС_Банк.РПО_ОФК_Имя="" and ПБС_Банк.РПО_ОФК_Имя2=""): 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 ДолжнРук="": Message("Введите должность руководителя",mtError); Template.Field="ДолжнРук"; ^False; fi;
--  if ФИОРук="": Message("Введите ФИО руководителя",mtError); Template.Field="ФИОРук"; ^False; fi;
--  if ДатаПодписи=1.1.100: Message("Введите дату подписи",mtError); Template.Field="ДатаПодписи"; ^False; fi;
--  if ДолжнИсп="": Message("Введите должность исполнителя",mtError); Template.Field="ДолжнИсп"; ^False; fi;
--  if ФИОИсп="": Message("Введите ФИО исполнителя",mtError); Template.Field="ФИОИсп"; ^False; fi;
--  if ТелИсп="": Message("Введите телефон исполнителя",mtError); Template.Field="ТелИсп"; ^False; fi;
  ProgressPos(2);
  --
  УдалитьПустыеСтроки;
  --
  ОбновитьКодСчета;
  --
  if Ассигн=0 and ЛБО=0 and ПОФ=0: Message("Заполните хотя бы один из разделов",mtError); Template.Name=Handle2Name("ЛБО"); Template.Field="БК"; Template.Frame=1; ^False; fi;
  if not Ассигн=0 and Ассигн_ТипКБК="": Message("Выберите тип КБК",mtError); Template.Field="Ассигн_ТипКБК_"; ^False; fi;
  --
  ОбновитьСч(-1,"");
  --
  ОбновитьПризн(-1,"Ассигн");
  ОбновитьПризн(-1,"ЛБО");
  ОбновитьПризн(-1,"ПОФ");
  --
  if not ПроверитьРаздел("Ассигн",3): ^False; fi;
  if not ПроверитьРаздел("ЛБО",4): ^False; fi;
  if not ПроверитьРаздел("ПОФ",5): ^False; fi;
  --
  if not ПроверитьНаборСправ("Ассигн",6): ^False; fi;
  if not ПроверитьНаборСправ("ЛБО",7): ^False; fi;
  if not ПроверитьНаборСправ("ПОФ",8): ^False; fi;
  --
  if not ПроверитьУникальность("Ассигн",9): ^False; fi;
  if not ПроверитьУникальность("ЛБО",10): ^False; fi;
  if not ПроверитьУникальность("ПОФ",11): ^False; fi;
  --
  if ДатаВД1=1.1.100 and ДатаВД2=1.1.100 and ДатаВД3=1.1.100 and ДатаВД=1.1.100: Message("Заполните дату введения в действие",mtError); Template.Field="ДатаВД"; ^False; fi;
  if (not ДатаВД1=1.1.100 or not ДатаВД2=1.1.100 or not ДатаВД3=1.1.100) and not ДатаВД=1.1.100: Message("Указана одновременно общая дата введение в действие и по разделам",mtError); Template.Field="ДатаВД"; ^False; fi;
  if ДатаВД=1.1.100:
     if not Ассигн=0 and ДатаВД1=1.1.100: Message("Заполните дату введения в действие раздела 1",mtError); Template.Field="ДатаВД1"; ^False; fi;
     if not ЛБО=0 and ДатаВД2=1.1.100: Message("Заполните дату введения в действие раздела 2",mtError); Template.Field="ДатаВД2"; ^False; fi;
     if not ПОФ=0 and ДатаВД3=1.1.100: Message("Заполните дату введения в действие раздела 3",mtError); Template.Field="ДатаВД3"; ^False; fi;
  fi;
 Finally
  CloseProgress;
 end;
 ^True;
end;

Proc КонтрольПС;
var Iter,n:I;
 Раб.Обмен.Очистить;
 Раб.Обмен.Sender="ДОКУМЕНТЫ.ЛБО.РР_ВХ";
 Раб.Обмен.Recipient="КОНСТРУКТОР_СЧЕТОВ";
 Раб.Обмен.BufI1[1]=0; --Тип плана счетов
 Раб.Обмен.BufI1[2]=1; --Вид деятельности
 Раб.Обмен.BufI1[3]=0; --Показывать существующие счета
 Раб.Обмен.BufI1[4]=0; --Отключить контроль вида деятельности
 n=0;
 for Iter=1..Ассигн do
  if not Ассигн[Iter].БК="" and not Ассигн[Iter].КОСГУ="":
     n=n+1;
     Раб.Обмен.BufS1[n]=if(Ассигн_ТипКБК="10","ФКР","КИФД")+" "+Ассигн[Iter].БК+" "+Ассигн[Iter].КОСГУ;
  fi;
 od;
 for Iter=1..ЛБО do
  if not ЛБО[Iter].БК="" and not ЛБО[Iter].КОСГУ="":
     n=n+1;
     Раб.Обмен.BufS1[n]="ФКР"+" "+ЛБО[Iter].БК+" "+ЛБО[Iter].КОСГУ;
  fi;
 od;
 for Iter=1..ПОФ do
  if not ПОФ[Iter].БК="" and not ПОФ[Iter].КОСГУ="":
     n=n+1;
     Раб.Обмен.BufS1[n]="ФКР"+" "+ПОФ[Iter].БК+" "+ПОФ[Iter].КОСГУ;
  fi;
 od;
 if IsBlankOpen("КОНСТРУКТОР_СЧЕТОВ"): Close("КОНСТРУКТОР_СЧЕТОВ"); fi;
 if not IsBlankOpen("КОНСТРУКТОР_СЧЕТОВ"): OpenBlank("КОНСТРУКТОР_СЧЕТОВ",True); fi;
 Раб.Обмен.Очистить;
end;

Proc ВызватьКарт (aRec:Record; aF:S; aРБС_ПБС:L);
var Crd:S;
var Bln:S;
 Bln="ДОКУМЕНТЫ.ЛБО.РР_ВХ";
 Crd=GetVariableS(Bln+".SelfCrd");
 PutVariableL(Bln+".inРБС_ПБС",aРБС_ПБС);
 PutVariableL(Bln+".lockРБС_ПБС",True);
 OpenCardFile(Crd,aF,aRec);
end;

Func ТекЗапись:Record;
 ^Current;
end;

Func ЗаполнитьКлючДок:L;
var Flag:L;
 Flag=True;
 if FuncExists(extКлюч): 
    Flag=ExecuteFuncL(extКлюч);
    if not Flag and (Проводить):
       Проводить=Flag;
       cbПроводить.State=Проводить;
       Оформление;
    fi;
 fi;
 ^Flag;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 Return 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;

Func Дата_OnLookup(Sect:S; Row:I; Col:I; Cur:S) :S;
var tmp:d;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
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;
 fi;
end;

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

Func РБС_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 РБС_OnEnter("РБС_",1);
 Return Cur;
end;

Proc Контр_onClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
var Rec:record;
 if Double:
    Field=AsString(Template.Field);
    Rec=GetVariableR(SubStr(Field,1,3));
    if Rec=nil: Message("Заполните контрагента",mtError); Template.Field=SubStr(Field,1,3)+".ПолнИмя";	Exit; fi;
    ExecuteProc("Инфо.Контрагент.Вызвать",Rec,"",SubStr(Field,5,255),1);
 fi;
end;

Func РБС_Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 if РБС=nil: Message("Выберите распорядителя (получателя) бюджетных средств...",mtError); Template.Field="РБС.ПолнИмя"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","КОНТРАГЕНТ="+RecordToString(РБС)+if(РБС_ПБС," and РПО_РБС"," and not РПО_РБС"),РБС_Банк);
 if Rec=nil: ^False; fi;
 РБС_Банк=Rec;
 Return False;
end;

Func ПБС_ПризнЛС_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("ЛС.*");
 if not tmp="":
    ПБС_ПризнЛС=tmp;
 fi;
 Return False;
end;

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
var Rec: Record;
 if Double:
    Field=AsString(Template.Field);
    if Match(Field,"РБС_Банк.*"):
       if РБС_Банк=nil: Message("Выберите Федеральное казначейство, орган Федерального казначейства",mtError); Template.Field="РБС_Банк.РПО_ОФК_Имя"; Exit; fi;
       Rec=РБС_Банк;
    fi;
    if Match(Field,"ПБС_Банк.*"):
       if ПБС_Банк=nil: Message("Наименование органа Федерального казначейства",mtError); Template.Field="ПБС_Банк.РПО_ОФК_Имя"; Exit; fi;
       Rec=ПБС_Банк;
    fi;
    Field=SubStr(Field,10,255);
    ExecuteProc("ИНФО.БАНКСЧЕТА.Вызвать",Rec,Field,0);
 fi;
end;

Func ПБС_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент","Наше",РБС,crdRecordOnly);
 if not Rec=nil:
    ПБС=Rec;
    ПБС_Банк=Раб.Бюджет2005.БанкСчет(ПБС,РБС_ПБС);
    ПБС_ПризнЛС=Раб.Бюджет2005.БанкВПризн(ПБС_Банк);
 fi;
 Return False;
end;

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

Func ДатаВД_OnEnter(FieldName: String; Iter: Integer): logical;
var Msg:S;
var i:i;
 if FieldName="ДатаВД":
    if not (ДатаВД1=1.1.100 and ДатаВД2=1.1.100 and ДатаВД3=1.1.100):
       Msg="Заданы даты введения в действие по разделам, вы хотите задать общую дату введения в действие ?"+Chr(13)+"(даты введения в действие по разделам будут обнулены)";
       i=1;
    fi;
   else
    if not ДатаВД=1.1.100:
       Msg="Задана общая дата введения в действие, вы хотите задать даты введения в действие по разделам ?"+Chr(13)+"(общая дата введения в действие будет обнулена)";
       i=2;
    fi;
 fi;
 if not Msg="":
    if EnqOkCancel(Msg,mtWarning)=cmOk:
       if i=1:
	  ДатаВД1=1.1.100;
	  ДатаВД2=1.1.100;
	  ДатаВД3=1.1.100;
	 else
	  ДатаВД=1.1.100;
       fi;
    fi;
 fi;
 Return True;
end;

Func СпецУказ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
var tmp:S;
 Template.HideEditor(False);
 ClearVariable(Buf);
 n=1;	Buf[n]="01 --Финансирование в иностранной валюте";
 n=n+1; Buf[n]="02 --Внутриведомственная реорганизация";
 n=n+1; Buf[n]="03 --(В ред. приказа МФ РФ 107н 30.08.2009) Бюджетные ассигнования (лимиты бюджетных обязательств) за счет целевых иностранных кредитов (заимствований)";
 n=n+1; Buf[n]="03 --(В ред. ТФФ версии 4 от 22.09.2009)    Бюджетные данные на выплаты за счет целевых иностранных кредитов";
 n=n+1; Buf[n]="04 --";
 n=n+1; Buf[n]="05 --Дополнительное бюджетное финансирование";
 n=n+1; Buf[n]="06 --Замена временных бюджетных данных на утвержденные";
 n=n+1; Buf[n]="07 --Специальные расходы";
 n=n+1; Buf[n]="08 --Межведомственная реорганизация";
 n=Alternate("Специальные указания",Buf,-1,Int(КодСпецУказ),12);
 if not n=0:
    tmp=SubStr(Buf[n],1,2);
    КодСпецУказ=Раб.Бюджет2005.Объединить(КодСпецУказ,tmp,",");
    if tmp="03":
       tmp=SubStr(Buf[n],45,255);
      else
       tmp=SubStr(Buf[n],6,255);
    fi;
    СпецУказ=Раб.Бюджет2005.Объединить(СпецУказ,tmp,", ");
 fi;
 Return Cur;
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,Секрет+1,12);
 if n=0: ^False; fi;
 n=n-1;
 Секрет=n;
 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="ФИОИсп" or Field="ТелИсп": ДолжнИсп=v1; ФИОИсп=v2; ТелИсп=GetCardFieldS("Сотрудники",rec,"ТелефонРабочий"); ExecuteProc("Исп_OnExit",AsString(Template.Field),1);
    fi;
 fi;
 Return Cur;
end;

Func Очистить_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Проводить:
    if EnqOkCancel("Очистить раздел "+SubStr(FieldName,10,1)+" ?",mtWarning)=cmOk:
       if FieldName="ОчиститьР1": ClearVariable(Ассигн);
	 |FieldName="ОчиститьР2": ClearVariable(ЛБО);
	 |FieldName="ОчиститьР3": ClearVariable(ПОФ);
       fi;
    fi;
 fi;
 Return False;
end;

Func Ассигн_ТипКБК_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var prevАссигн_ТипКБК,tmp:S;
 ClearVariable(Buf);
 Buf[1]="Расходы";
 Buf[2]="Источники внутреннего финансирования дефицита бюджета";
 Buf[3]="Источники внешнего финансирования дефицита бюджета";
 prevАссигн_ТипКБК=Ассигн_ТипКБК;
 n=Alternate("Тип КБК",Buf,-1,1,12);
 if n=1: tmp="10";
   |n=2: tmp="31";
   |n=3: tmp="32";
   |True: ^False;
 fi;
 if not prevАссигн_ТипКБК="" and not prevАссигн_ТипКБК=tmp:
    if EnqOkCancel("Изменился тип КБК, всего введеные КБК (ассигнования) будут очищены. Продолжить ?",mtWarning)=cmCancel: ^False; fi;
    for Iter=1..Ассигн do
     Ассигн[Iter].БК="";
     Ассигн[Iter].КОСГУ="";
    od;
 fi;
 Ассигн_ТипКБК=tmp;
 Return False;
end;

Func Гр_onEnter(FieldName: String; Iter: Integer): logical;
var Value:L;
 if not Проводить:
    FieldName=SubStr(FieldName,1,3);
    PutVariableL(FieldName,not GetVariableL(FieldName));
 fi;
 ^False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
var Iter_:I;
 if not Проводить:
    tmp=Name2Handle;
    if tmp="Ассигн": Iter_=InsertFrame(Ассигн,Iter+1);
      |tmp="ЛБО":    Iter_=InsertFrame(ЛБО,Iter+1);
      |tmp="ПОФ":    Iter_=InsertFrame(ПОФ,Iter+1);
    fi;
    if Гр2: PutVariableS(tmp+"["+Str(Iter_)+"].БК",GetVariableS(tmp+"["+Str(Iter)+"].БК")); fi;
    if Гр3: PutVariableS(tmp+"["+Str(Iter_)+"].КОСГУ",GetVariableS(tmp+"["+Str(Iter)+"].КОСГУ")); fi;
    if Гр4: PutVariableS(tmp+"["+Str(Iter_)+"].Призн",GetVariableS(tmp+"["+Str(Iter)+"].Призн")); fi;
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if not Проводить:
    tmp=Name2Handle;
    if tmp="Ассигн": DeleteFrame(Ассигн,Iter);
      |tmp="ЛБО": DeleteFrame(ЛБО,Iter);
      |tmp="ПОФ": DeleteFrame(ПОФ,Iter);
    fi;
 fi;
 Return False;
end;

Func пп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Mask:S;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if Input(Mask,"Введите шаблон поиска")=cmCancel: ^Cur; fi;
 ПоискВШаблоне(Mask,Iter,Name2Handle);
 Return Cur;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Mask,vHandle,БК_,КОСГУ_,КодСч_:S;
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 if vHandle="Ассигн" and Ассигн_ТипКБК="": Message("Выберите тип КБК",mtError); Template.Field="Ассигн_ТипКБК_"; ^False; fi;
 Mask=МаскаСчета(Iter,FieldName,vHandle);
 if vHandle="Ассигн": КодСч_=Ассигн_Деб1+"|"+Ассигн_Деб2+"|"+Ассигн_Деб3+"|"+Ассигн_Кре1+"|"+Ассигн_Кре2+"|"+Ассигн_Кре3;
   |vHandle="ЛБО": КодСч_=ЛБО_Деб1+"|"+ЛБО_Деб2+"|"+ЛБО_Деб3+"|"+ЛБО_Кре1+"|"+ЛБО_Кре2+"|"+ЛБО_Кре3;
   |vHandle="ПОФ": КодСч_=ПОФ_Деб1+"|"+ПОФ_Кре1;
 fi;
 БК_=GetVariableS(vHandle+"["+Str(Iter)+"].БК");
 КОСГУ_=GetVariableS(vHandle+"["+Str(Iter)+"].КОСГУ");
 tmp=if(vHandle="Ассигн" and (Ассигн_ТипКБК="31" or Ассигн_ТипКБК="32"),"КИФД","ФКР");
 if FieldName="БК":
    Раб.КБК.Список_КБК_РазрДобав=True;
    Раб.КБК.Список_КБК_КОСГУ=КОСГУ_;
    Раб.КБК.Список_КБК_РазрКОСГУ=КОСГУ_="";
    Раб.КБК.Список_КБК_КодСч=КодСч_;
    tmp=Раб.КБК.Список(Mask,tmp,"КБК");
   |FieldName="КОСГУ":
    Раб.КБК.Список_КОСГУ_РазрДобав=True;
    Раб.КБК.Список_КОСГУ_БК=БК_;
    Раб.КБК.Список_КОСГУ_РазрБК=БК_="";
    Раб.КБК.Список_КОСГУ_КодСч=КодСч_;
    tmp=Раб.КБК.Список(Mask,tmp,"КОСГУ");
 fi;
 if not tmp="":
    PutVariableS(vHandle+"["+Str(Iter)+"]."+FieldName,tmp);
    ОбновитьСч(Iter,vHandle);
    ОбновитьПризн(Iter,vHandle);
 fi;
 ^False;
end;

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

Proc Призн_OnExit(FieldName: String; Iter: Integer);
var vHandle:S;
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 PutVariableS(vHandle+"["+Str(Iter)+"].Призн",Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(GetVariableS(vHandle+"["+Str(Iter)+"].Призн")," ","Name_A"));
end;

Proc Исп_OnExit(FieldName: String; Iter: Integer);
 if not ДолжнИсп="": hДолжнИсп=ДолжнИсп; fi;
 if not ФИОИсп="": hФИОИсп=ФИОИсп; fi;
 if not ТелИсп="": hТелИсп=ТелИсп; fi;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbПроводить_OnChange(Sender: String);
 Try
  if Проводить:
     Проводить=Проверить;
    else
     if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
	Проводить=True;
     fi;
  fi;
 Finally
  cbПроводить.State=Проводить;
  Оформление;
 end;
 EditorApply;
end;

Proc btnДата_OnClick(Sender: String);
var tmp:D;
 tmp=Calendar;
 if tmp=1.1.100: Exit; fi;
 if Sender="btnДатаОпер": ДатаОпер=tmp; 
 fi;
end;

Proc cbПС_OnChange(Sender: String);
 Настр(True);
 if Проводить and fПС and not РБС_ПБС: КонтрольПС; fi;
end;

Proc rbРБС_ПБС_OnChange(Sender: String);
 if EnqOkCancel("Внимание !^MБудет изменен тип поступившего расходного расписания с "+if(not РБС_ПБС,"РБС","ПБС")+" на "+if(РБС_ПБС,"РБС","ПБС")+", продолжить ?",mtWarning)=cmCancel:
    РБС_ПБС=not РБС_ПБС; 
 fi;
 Оформление;
 ОбновитьКодСчета;
 ПБС_Банк=Раб.Бюджет2005.БанкСчетРР(ПБС,РБС_ПБС);
 ПБС_ПризнЛС=Раб.Бюджет2005.БанкВПризн(ПБС_Банк);
end;

Proc cbРаздел_OnChange(Sender: String);
 Настр(False);
 if Sender="cbАссигн": 
    if not fАссигн:
       if EnqOkCancel("Внимание !"+Chr(13)+"Раздел 1. Бюджетные ассигнования будет очищен"+Chr(13)+"Вы уверены, что хотите исключить раздел ?",mtWarning)=cmCancel:
	  fАссигн=True;
	  cbАссигн.State=fАссигн;
       fi;
    fi;
   |Sender="cbЛБО":
    if not fЛБО:
       if EnqOkCancel("Внимание !"+Chr(13)+"Раздел 2. Лимиты бюджетных обязательств очищен"+Chr(13)+"Вы уверены, что хотите исключить раздел ?",mtWarning)=cmCancel:
	  fЛБО=True;
	  cbЛБО.State=fЛБО;
       fi;
    fi;
   |Sender="cbПОФ":
    if not fПОФ:
       if EnqOkCancel("Внимание !"+Chr(13)+"Раздел 3. Предельные объемы финансирования очищен"+Chr(13)+"Вы уверены, что хотите исключить раздел ?",mtWarning)=cmCancel:
	  fПОФ=True;
	  cbПОФ.State=fПОФ;
       fi;
    fi;
 fi;
 Настр(True);
 Оформление;
end;

Func OnInsert(SectName: String): Logical;
var tmp:S;
var Iter:I;
 if not Проводить:
    tmp=Name2Handle;
    Iter=AsInteger(Template.Frame);
    hБК=GetVariableS(tmp+"["+Str(Iter)+"].БК");
    hКОСГУ=GetVariableS(tmp+"["+Str(Iter)+"].КОСГУ");
    hПризн=GetVariableS(tmp+"["+Str(Iter)+"].Призн");
 fi;
 Return not Проводить;
end;

Proc AfterInsert(SectName: String; Iter: Integer);
var tmp:S;
 tmp=Name2Handle;
 if Гр2: PutVariableS(tmp+"["+Str(Iter)+"].БК",hБК); fi;
 if Гр3: PutVariableS(tmp+"["+Str(Iter)+"].КОСГУ",hКОСГУ); fi;
 if Гр4: PutVariableS(tmp+"["+Str(Iter)+"].Призн",hПризн); fi;
end;

Func OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Проводить;
end;

Proc btnОбновПС_OnClick(Sender: String);
 if Проводить and fПС and not РБС_ПБС: КонтрольПС; fi;
end;

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

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

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

Proc OnRead;
 Настр(False);
 ОткрНастр(False);
 if НоваяЗапись:
    if Номер=0:
       ПоУмолчанию;
       ДатаДок=ToDay;
       ПБС=Раб.Бюджет2005.НашРекв;
       ПБС_Банк=Раб.Бюджет2005.БанкСчетРР(ПБС,РБС_ПБС);
       ПБС_ПризнЛС=Раб.Бюджет2005.БанкВПризн(ПБС_Банк);
    fi;
    Проводить=False;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
 if not Ассигн=0: fАссигн=True; fi;
 if not ЛБО=0: fЛБО=True; fi;
 if not ПОФ=0: fПОФ=True; fi;
 if not fАссигн  and not fЛБО and not fПОФ: fЛБО=True; fi;
 if not FlagInit: Оформление; fi;
end;

Func OnVerify: Logical;
var dd:d;
var prevГод:I;
var ff:S;
 if not ДатаОпер=1.1.100:
    if ДатаОпер>ДатаВД1 and not ДатаВД1=1.1.100: ДатаОпер1=ДатаОпер; else ДатаОпер1=ДатаВД1; fi;
    if ДатаОпер>ДатаВД2 and not ДатаВД2=1.1.100: ДатаОпер2=ДатаОпер; else ДатаОпер2=ДатаВД2; fi;
    if ДатаОпер>ДатаВД3 and not ДатаВД3=1.1.100: ДатаОпер3=ДатаОпер; else ДатаОпер3=ДатаВД3; fi;
 fi;
 prevГод=ГодДок;
 if not ДатаВД=1.1.100:
    ГодДок=Year(ДатаВД);
   else
    if not Ассигн=0: ГодДок=Year(ДатаВД1); fi;
    if not ЛБО=0 and ГодДок=0: ГодДок=Year(ДатаВД2); fi;
    if not ПОФ=0 and ГодДок=0: ГодДок=Year(ДатаВД3); fi;
 fi;
 if Номер=0 or not prevГод=ГодДок:
    Try Номер=Int(НомерДок); Except Номер=0; end;
    if not ДатаВД=1.1.100: dd=ДатаВД; ff="ДатаВД";
      |not Ассигн=0 and ДатаВД1=1.1.100: dd=ДатаВД1; ff="ДатаВД1";
      |not ЛБО=0 and ДатаВД2=1.1.100: dd=ДатаВД2; ff="ДатаВД2";
      |not ПОФ=0 and ДатаВД3=1.1.100: dd=ДатаВД3; ff="ДатаВД3";
    fi;
    if not dd=1.1.100 and Номер=0:
       Номер=РАБ.ОБЛ.СледСУчетомДаты(SelfCrd,"Номер",ff,dd);
    fi;
 fi;
 if Проводить and fПС and not РБС_ПБС: КонтрольПС; fi;
 inРБС_ПБС=РБС_ПБС;
 Return ЗаполнитьКлючДок;
end;

Proc OnClose(Destroy: Logical);
 lockРБС_ПБС=False;
end;
--Обработчики событий шаблона -----
--


Конец
