-- Шаблон создан мастером бланков
-- 11.05.2005 12:56:06
--
БланкСШаблоном "Распределение ассигнований и ЛБО по ПБС";

fАссигн:L;
fЛБО:L;
fПОФ:L=False;
fАвтоКонтролУник:L;

Ассигн: I;
ЛБО: I;
ПОФ: I;
Упр2:I;
Упр3:I;

hГлава:S;
hГРБС:S;
hДолжнИсп:S;
hФИОИсп:S;
hТелИсп:S;

Создан:I=[2];

ДатаДок:D;
ГРБС:S;
Глава:S;
--
РБС:Record;
РБС_ПолнИмя:S;
РБС_РПО_КБП:S;
--
РБС_Банк:Record;
РБС_Банк_РПО_ЛСчет:S;
РБС_Банк_РПО_ОФК_Имя:S;
РБС_Банк_РПО_ОФК_Код:S;
РБС_Банк_РПО_КодБюдж:S;
РБС_Банк_РПО_НаимБюдж:S;
РБС_Банк_РПО_ФО_Наим1:S;
--
РБС_ПризнЛС:S;
ДатаВД:D;
ДатаВД1:D;
ДатаВД2:D;
ДатаВД3:D;

СпецУказ:S;
СпецУказ2:S;
СпецУказ3:S;
СпецУказ4:S;
КодСпецУказ:S;

ДолжнРук:S;
ФИОРук:S;
ДолжнИсп:S;
ФиоИсп:S;
ТелИсп:S;
ДатаПодписи:D;

var ДН:D=Dat(01,01,Year(ДатаВД));
var ДК:D=ДатаВД+1;


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

var Ассигн_МаскаСправ:S;
var ЛБО_МаскаСправ:S;
var ПОФ_МаскаСправ:S;

var Ассигн_vv:i;
var ЛБО_vv:i;
var ПОФ_vv:i;

var MaxVV:I=4;

var Ассигн_Деб1:S="1.503.12";
var Ассигн_Кре1:S="1.503.14";
var Ассигн_Деб2:S="1.503.22";
var Ассигн_Кре2:S="1.503.24";
var Ассигн_Деб3:S="1.503.32";
var Ассигн_Кре3:S="1.503.34";

var ЛБО_Деб1:S="1.501.12";
var ЛБО_Кре1:S="1.501.14";
var ЛБО_Деб2:S="1.501.22";
var ЛБО_Кре2:S="1.501.24";
var ЛБО_Деб3:S="1.501.32";
var ЛБО_Кре3:S="1.501.34";

var ПОФ_Деб1:S="1.ЗАБ.90";
var ПОФ_Кре1:S="1.ЗАБ.23";

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

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

var A:S="+";
var D:S="-";

Ассигн_Справ[]:S;
var Ассигн_НаимСправ[]:S=Name_A(Ассигн_Справ[$]+".");

var пп[]:i=$;
Ассигн_БК[]:S;
Ассигн_КОСГУ[]:S;
Ассигн_Призн1[]:s;
Ассигн_Призн2[]:s;
Ассигн_Призн3[]:s;
Ассигн_Призн4[]:s;
Ассигн_ДопКл[]:s;
Ассигн_Сум1[]:N;
Ассигн_Сум2[]:N;
Ассигн_Сум3[]:N;
Ассигн_Примеч1[]:s;

ЛБО_Справ[]:S;
var ЛБО_НаимСправ[]:S=Name_A(ЛБО_Справ[$]+".");

ЛБО_БК[]:S;
ЛБО_КОСГУ[]:S;
ЛБО_Призн1[]:s;
ЛБО_Призн2[]:s;
ЛБО_Призн3[]:s;
ЛБО_Призн4[]:s;
ЛБО_ДопКл[]:s;
ЛБО_Сум1[]:N;
ЛБО_Сум2[]:N;
ЛБО_Сум3[]:N;
ЛБО_Примеч1[]:s;

ПОФ_Справ[]:S;
var ПОФ_НаимСправ[]:S=Name_A(ПОФ_Справ[$]+".");

ПОФ_БК[]:S;
ПОФ_КОСГУ[]:S;
ПОФ_Призн1[]:s;
ПОФ_Призн2[]:s;
ПОФ_Призн3[]:s;
ПОФ_Призн4[]:s;
ПОФ_ДопКл[]:s;
ПОФ_Сум1[]:N;
ПОФ_Примеч1[]:s;

var hСправ[]:S;
var hПризн[]:S;
var hБК:S;
var hКОСГУ:S;
var hПризн1:S;
var hПризн2:S;
var hПризн3:S;
var hПризн4:S;

var Ключ[]:S;

НаимСправ1_2:S;
НаимСправ2_2:S;

КБК2[]:S;
Призн1_2[]:s;
Призн2_2[]:s;
ЛБО_РБС[]:N;
ЛБО_Тек2[]:N;
ЛБО_Изм2[]:N;
var ЛБО_Год2[]:N=ЛБО_Тек2[$]+ЛБО_Изм2[$];
var ЛБО_РБС_Ост[]:N=ЛБО_РБС[$]-ЛБО_Год2[$];
Примеч1_2[]:s;
Примеч2_2[]:s;

var Всего_ЛБО_РБС:N=SumOfArray(ЛБО_РБС,Упр2);
var Всего_ЛБО_Тек2:N=SumOfArray(ЛБО_Тек2,Упр2);
var Всего_ЛБО_Изм2:N=SumOfArray(ЛБО_Изм2,Упр2);
var Всего_ЛБО_Год:N=SumOfArray(ЛБО_Год2,Упр2);
var Всего_ЛБО_РБС_Ост:N=SumOfArray(ЛБО_РБС_Ост,Упр2);

КБК3[]:S;
Призн1_3[]:s;
Призн2_3[]:s;
ОФР_РБС[]:N;
ОФР_Тек3[]:N;
ОФР_Изм3[]:N;
var ОФР_Год3[]:N=ОФР_Тек3[$]+ОФР_Изм3[$];
var ОФР_РБС_Ост[]:N=ОФР_РБС[$]-ОФР_Год3[$];
Примеч1_3[]:s;
Примеч2_3[]:s;

var Всего_ОФР_РБС:N=SumOfArray(ОФР_РБС,Упр3);
var Всего_ОФР_Тек3:N=SumOfArray(ОФР_Тек3,Упр3);
var Всего_ОФР_Изм3:N=SumOfArray(ОФР_Изм3,Упр3);
var Всего_ОФР_Год:N=SumOfArray(ОФР_Год3,Упр3);
var Всего_ОФР_РБС_Ост:N=SumOfArray(ОФР_РБС_Ост,Упр3);

var Призн:S="";

var Key[]:s;
var Buf[]:s;
var N[]:I;
var UKeyРР[]:Record;

fОтзыв:L;

var знакКлюч[]:S;
var знакАссигн1[]:N;
var знакАссигн2[]:N;
var знакАссигн3[]:N;
var знакЛБО1[]:N;
var знакЛБО2[]:N;
var знакЛБО3[]:N;
var знакПОФ1[]:N;

cbАссигн: Object;
cbЛБО: Object;
cbПОФ: Object;

T1: Section;
T2: Section;
T3: Section;
T4: Section;
T5: Section;
T6: Section;
T7: Section;
T8: Section;
T9: Section;

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

var Контроль:L;

FName:S;
--
--Процедуры и функции -------------
Func Name2Handle:S;
var S:S;
 S=AsString(Template.Name);
 if s="t2": ^"Ассигн";
   |s="t5": ^"ЛБО";
   |s="t8": ^"ПОФ";
 fi;
end;

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

Proc ОчиститьИтоги;
 Контроль=False;
end;

Proc Очистить (aHandle:S);
 if aHandle="Ассигн" or aHandle="" and fАссигн:
    ClearVariable(Ассигн);
    ClearVariable(Ассигн_БК);
    ClearVariable(Ассигн_КОСГУ);
    ClearVariable(Ассигн_Призн1);
    ClearVariable(Ассигн_Призн2);
    ClearVariable(Ассигн_Призн3);
    ClearVariable(Ассигн_Призн4);
    ClearVariable(Ассигн_ДопКл);
    ClearVariable(Ассигн_Сум1);
    ClearVariable(Ассигн_Сум2);
    ClearVariable(Ассигн_Сум3);
    ClearVariable(Ассигн_Примеч1);
 fi;
 if aHandle="ЛБО" or aHandle="" and fЛБО:
    ClearVariable(ЛБО);
    ClearVariable(ЛБО_БК);
    ClearVariable(ЛБО_КОСГУ);
    ClearVariable(ЛБО_Призн1);
    ClearVariable(ЛБО_Призн2);
    ClearVariable(ЛБО_Призн3);
    ClearVariable(ЛБО_Призн4);
    ClearVariable(ЛБО_ДопКл);
    ClearVariable(ЛБО_Сум1);
    ClearVariable(ЛБО_Сум2);
    ClearVariable(ЛБО_Сум3);
    ClearVariable(ЛБО_Примеч1);
 fi;
 if aHandle="ПОФ" or aHandle="" and fПОФ:
    ClearVariable(ПОФ);
    ClearVariable(ПОФ_БК);
    ClearVariable(ПОФ_КОСГУ);
    ClearVariable(ПОФ_Призн1);
    ClearVariable(ПОФ_Призн2);
    ClearVariable(ПОФ_Призн3);
    ClearVariable(ПОФ_Призн4);
    ClearVariable(ПОФ_ДопКл);
    ClearVariable(ПОФ_Сум1);
    ClearVariable(ПОФ_Примеч1);
 fi;
 ОчиститьИтоги;
end;

Proc ОчиститьПризн(aHandle:S; i:i; aMatch:L);
var Iter,nn:i;
var Справ_,Призн_:S;
 if not aMatch:
    if aHandle="Ассигн" and i=1: ClearVariable(Ассигн_Призн1);
      |aHandle="Ассигн" and i=2: ClearVariable(Ассигн_Призн2);
      |aHandle="Ассигн" and i=3: ClearVariable(Ассигн_Призн3);
      |aHandle="Ассигн" and i=4: ClearVariable(Ассигн_Призн4);
      |aHandle="ЛБО" and i=1: ClearVariable(ЛБО_Призн1);
      |aHandle="ЛБО" and i=2: ClearVariable(ЛБО_Призн2);
      |aHandle="ЛБО" and i=3: ClearVariable(ЛБО_Призн3);
      |aHandle="ЛБО" and i=4: ClearVariable(ЛБО_Призн4);
      |aHandle="ПОФ" and i=1: ClearVariable(ПОФ_Призн1);
      |aHandle="ПОФ" and i=2: ClearVariable(ПОФ_Призн2);
      |aHandle="ПОФ" and i=3: ClearVariable(ПОФ_Призн3);
      |aHandle="ПОФ" and i=4: ClearVariable(ПОФ_Призн4);
    fi;
   else
    Справ_=GetVariableS(aHandle+"_Справ["+Str(i)+"]")+".*";
    nn=GetVariableI(aHandle);
    for Iter=1..nn do
     if not Match(GetVariableS(aHandle+"_Призн"+Str(i)+"["+Str(Iter)+"]"),Справ_): PutVariableS(aHandle+"_Призн"+Str(i)+"["+Str(Iter)+"]",""); fi;
    od;
 fi;
end;

Proc Оформление;
var t,n,nn,c:i;
var Obj: Object;
var tmp:S;
 for t=1..9 do
  if FindObject("t"+str(t),Obj):
     if t<4: nn=Ассигн_vv; tmp="Ассигн"; Obj.Visible=fАссигн;
       |t<7: nn=ЛБО_vv; tmp="ЛБО"; Obj.Visible=fЛБО;
       |t<10: nn=ПОФ_vv; tmp="ПОФ"; Obj.Visible=fПОФ;
     fi;
     for c=6..9 do
      n=c-5;
      Obj.Column(c,ColVisible,not n>nn);
      if n>nn and (t=2 or t=5 or t=8):
	 ОчиститьПризн(tmp,n,False);
	 PutVariableS(tmp+"_Справ["+Str(n)+"]","");
      fi;
     od;
     Obj.Column(10,ColVisible,Int(РБС_Банк_РПО_КодБюдж)>1);
  fi;
 od;
end;

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

Proc УдалитьПустыеСтроки(aHandle:S);
var n:i;
 if aHandle="Ассигн" or aHandle="" and fАссигн:
    n=1;
    While n<=Ассигн do
     if Ассигн_БК[n]="" and
	Ассигн_КОСГУ[n]="" and
	Ассигн_Призн1[n]="" and
	Ассигн_Призн2[n]="" and
	Ассигн_Призн3[n]="" and
	Ассигн_Призн4[n]="" and
	Ассигн_ДопКл[n]="" and
	Ассигн_Сум1[n]=0 and
	Ассигн_Сум2[n]=0 and
	Ассигн_Сум3[n]=0 and
	Ассигн_Примеч1[n]="": DeleteFrame(Ассигн,n);
       else
	n=n+1;
      fi;
    od;
 fi;
 if aHandle="ЛБО" or aHandle="" and fЛБО:
    n=1;
    While n<=ЛБО do
     if ЛБО_БК[n]="" and
	ЛБО_КОСГУ[n]="" and
	ЛБО_Призн1[n]="" and
	ЛБО_Призн2[n]="" and
	ЛБО_Призн3[n]="" and
	ЛБО_Призн4[n]="" and
	ЛБО_ДопКл[n]="" and
	ЛБО_Сум1[n]=0 and
	ЛБО_Сум2[n]=0 and
	ЛБО_Сум3[n]=0 and
	ЛБО_Примеч1[n]="": DeleteFrame(ЛБО,n);
       else
	n=n+1;
      fi;
    od;
 fi;
 if aHandle="ПОФ" or aHandle="" and fПОФ:
    n=1;
    While n<=ПОФ do
     if ПОФ_БК[n]="" and
	ПОФ_КОСГУ[n]="" and
	ПОФ_Призн1[n]="" and
	ПОФ_Призн2[n]="" and
	ПОФ_Призн3[n]="" and
	ПОФ_Призн4[n]="" and
	ПОФ_ДопКл[n]="" and
	ПОФ_Сум1[n]=0 and
	ПОФ_Примеч1[n]="": DeleteFrame(ПОФ,n);
       else
	n=n+1;
      fi;
    od;
 fi;
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;

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=GetVariableI(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(y))=0;
	else
	 Flag=True;
      fi;
      if Flag:
	 Раб.КСА.Добавить(БК_+"."+GetVariableS(aHandle+"_Деб"+Str(y))+"."+КОСГУ_);
	 Раб.КСА.Добавить(БК_+"."+GetVariableS(aHandle+"_Кре"+Str(y))+"."+КОСГУ_);
      fi;
     od;
  fi;
 od;
 if Рекурс=0 or Рекурс=3:
    if Раб.КСА.Закончить(False): Message("Добавление счетов завершено"); fi;
   else
    ОбновитьСч(-1,Str(Рекурс));
 fi;
end;

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

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

Func MyTurn (Value:S):N;
var z:N;
 Try
  Z=Turn(Value,ДН,ДК);
 Except
  ^0;
 end;
 ^Z;
end;

Proc Расчет;
end;

Proc ЗаполнитьРБС_Банк (Rec:Record);
 if Rec=nil:
    РБС_Банк_РПО_ЛСчет="";
    РБС_Банк_РПО_ОФК_Имя="";
    РБС_Банк_РПО_ОФК_Код="";
    РБС_Банк_РПО_КодБюдж="";
    РБС_Банк_РПО_НаимБюдж="";
    РБС_Банк_РПО_ФО_Наим1="";
   else
    РБС_Банк_РПО_ЛСчет=GetCardFieldS("Банк_Счета",Rec,"РПО_ЛСчет");
    РБС_Банк_РПО_ОФК_Имя=GetCardFieldS("Банк_Счета",Rec,"РПО_ОФК_Имя");
    РБС_Банк_РПО_ОФК_Код=GetCardFieldS("Банк_Счета",Rec,"РПО_ОФК_Код");
    РБС_Банк_РПО_КодБюдж=GetCardFieldS("Банк_Счета",Rec,"РПО_КодБюдж");
    РБС_Банк_РПО_НаимБюдж=GetCardFieldS("Банк_Счета",Rec,"РПО_НаимБюдж");
    РБС_Банк_РПО_ФО_Наим1=GetCardFieldS("Банк_Счета",Rec,"РПО_ФО_Наим1");
 fi;
end;

Proc ЗаполнитьРБС (Rec: Record);
 if Rec=nil:
    РБС_ПолнИмя="";
    РБС_РПО_КБП="";
   else
    РБС_ПолнИмя=GetCardFieldS("Контрагент",Rec,"ПолнИмя");
    РБС_РПО_КБП=GetCardFieldS("Контрагент",Rec,"РПО_КБП");
    Глава=GetCardFieldS("Контрагент",Rec,"РПО_ППП");
    ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
    ДолжнРук=GetCardFieldS("Контрагент",Rec,"ДолжнРук");
    ФИОРук=GetCardFieldS("Контрагент",Rec,"ФИОРук");
    РБС_Банк=Раб.Бюджет2005.БанкСчетРР(Rec,True);
    ЗаполнитьРБС_Банк(РБС_Банк);
    РБС_ПризнЛС=Раб.Бюджет2005.БанкВПризн(РБС_Банк);
 fi;
 if Глава="":
    Глава=hГлава;
    ГРБС=hГРБС;
 fi;
end;

Func БанкСчетРБС (Rec:Record):L;
var OWA:I;
 OWA=OpenWorkArea("Банк_счета","","РПО_РБС and Контрагент="+RecordToString(Rec));
 Try
  if Records(OWA)>0: ^True; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^False;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Proc Field_onExit(FieldName: String; Iter: Integer);
 ОчиститьИтоги;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    PutVariableD(AsString(Template.Field),tmp);
    ОчиститьИтоги;
 fi;
 ^Cur;
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 Создан=0: Message("Укажите кем сформирован документ",mtError); Template.Object="rbРБС"; ^False; fi;
 Rec=OpenCardFile("Контрагент","Наше",РБС,crdRecordOnly);
 if not Rec=nil:
    РБС=Rec;
    ЗаполнитьРБС(РБС);
 fi;
 Return False;
end;

Proc РБС_OnExit(FieldName: String; Iter: Integer);
 ЗаполнитьРБС(nil);
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(РБС)+" and РПО_РБС",РБС_Банк);
 РБС_Банк=Rec;
 ЗаполнитьРБС_Банк(РБС_Банк);
 РБС_ПризнЛС=Раб.Бюджет2005.БанкВПризн(РБС_Банк);
 Оформление;
 Return False;
end;

Proc РБС_Банк_OnExit(FieldName: String; Iter: Integer);
 ЗаполнитьРБС_Банк(nil);
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=РБС_Банк;
       Field=SubStr(Field,10,255);
       ExecuteProc("ИНФО.БАНКСЧЕТА.Вызвать",Rec,Field,0);
       ЗаполнитьРБС_Банк(РБС_Банк);
    fi;
 fi;
end;

Func РБС_ПризнЛС_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("ЛС.*");
 if not tmp="":
    РБС_ПризнЛС=tmp;
 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 --(В ред. ТФФ2009 версии 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 ФИО_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;

Proc Исп_OnExit(FieldName: String; Iter: Integer);
 if not ДолжнИсп="": hДолжнИсп=ДолжнИсп; fi;
 if not ФИОИсп="": hФИОИсп=ФИОИсп; fi;
 if not ТелИсп="": hТелИсп=ТелИсп; fi;
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;
    ClearVariable(Ассигн_БК);
    ClearVariable(Ассигн_КОСГУ);
 fi;
 Ассигн_ТипКБК=tmp;
 Return False;
end;

Func Справ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,vHandle:s;
var z,n:i;
 vHandle=ExtractWord(1,FieldName,"_");
 tmp=GetVariableS(vHandle+"_МаскаСправ");
 tmp=AnaElection(tmp,true);
 if not tmp="":
    if vHandle="Ассигн":  z=SearchInArray(Ассигн_Справ,tmp,False,1);
      |vHandle="ЛБО":  z=SearchInArray(ЛБО_Справ,tmp,False,1);
      |vHandle="ПОФ":  z=SearchInArray(ПОФ_Справ,tmp,False,1);
    fi;
    n=Int(SubStr(FieldName,Pos("[",FieldName)+1,Pos("]",FieldName)-Pos("[",FieldName)-1));
    if not z=-1:
       if z=n:
	  if vHandle="Ассигн":	z=SearchInArray(Ассигн_Справ,tmp,False,z+1);
	    |vHandle="ЛБО":  z=SearchInArray(ЛБО_Справ,tmp,False,z+1);
	    |vHandle="ПОФ":  z=SearchInArray(ПОФ_Справ,tmp,False,z+1);
	  fi;
       fi;
    fi;
    if not z=-1: Message("Повторный ввод справочника '"+tmp+"'",mtError); ^False; fi;
    if not GetVariables(FieldName)=tmp:
       PutVariableS(FieldName,tmp);
       ОчиститьПризн(vHandle,n,True);
       ОчиститьИтоги;
    fi;
 fi;
 ^False;
end;

Func Гр_onEnter(FieldName: String; Iter: Integer): logical;
var Value:L;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 ^False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var vHandle:S;
 vHandle=Name2Handle;
 if vHandle="Ассигн": InsertFrame(Ассигн,Iter+1);
   |vHandle="ЛБО":    InsertFrame(ЛБО,Iter+1);
   |vHandle="ПОФ":    InsertFrame(ПОФ,Iter+1);
 fi;
 if Гр2: PutVariableS(vHandle+"_БК["+Str(Iter+1)+"]",	 GetVariableS(vHandle+"_БК["+Str(Iter)+"]")); fi;
 if Гр3: PutVariableS(vHandle+"_КОСГУ["+Str(Iter+1)+"]", GetVariableS(vHandle+"_КОСГУ["+Str(Iter)+"]")); fi;
 if Гр4: PutVariableS(vHandle+"_Призн1["+Str(Iter+1)+"]",GetVariableS(vHandle+"_Призн1["+Str(Iter)+"]")); fi;
 if Гр5: PutVariableS(vHandle+"_Призн2["+Str(Iter+1)+"]",GetVariableS(vHandle+"_Призн2["+Str(Iter)+"]")); fi;
 if Гр6: PutVariableS(vHandle+"_Призн3["+Str(Iter+1)+"]",GetVariableS(vHandle+"_Призн3["+Str(Iter)+"]")); fi;
 if Гр7: PutVariableS(vHandle+"_Призн4["+Str(Iter+1)+"]",GetVariableS(vHandle+"_Призн4["+Str(Iter)+"]")); fi;
 ОчиститьИтоги;
 if fАвтоКонтролУник:
    if not GetVariableS(vHandle+"_БК["+Str(Iter)+"]")="" and 
       not GetVariableS(vHandle+"_КОСГУ["+Str(Iter)+"]")="" and 
       (GetVariableS(vHandle+"_Справ[1]")="" or not GetVariableS(vHandle+"_Призн1["+Str(Iter)+"]")="") and 
       (GetVariableS(vHandle+"_Справ[2]")="" or not GetVariableS(vHandle+"_Призн2["+Str(Iter)+"]")="") and 
       (GetVariableS(vHandle+"_Справ[3]")="" or not GetVariableS(vHandle+"_Призн3["+Str(Iter)+"]")="") and
       (GetVariableS(vHandle+"_Справ[4]")="" or not GetVariableS(vHandle+"_Призн4["+Str(Iter)+"]")=""):
       if Гр7: PutVariableS(vHandle+"_Призн4["+Str(Iter+1)+"]","");
	 |Гр6: PutVariableS(vHandle+"_Призн3["+Str(Iter+1)+"]","");
	 |Гр5: PutVariableS(vHandle+"_Призн2["+Str(Iter+1)+"]","");
	 |Гр4: PutVariableS(vHandle+"_Призн1["+Str(Iter+1)+"]","");
	 |Гр3: PutVariableS(vHandle+"_КОСГУ["+Str(Iter+1)+"]","");
	 |Гр2: PutVariableS(vHandle+"_БК["+Str(Iter+1)+"]","");
       fi;
    fi;
 fi;
 Return False;
end;

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

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

Func Призн_onEnter(FieldName: String; Iter: Integer): logical;
var i,z:i;
var vHandle,vСправ,tmp:S;
 vHandle=ExtractWord(1,FieldName,"_");
 i=Int(SubStr(FieldName,Length(FieldName),1));
 vСправ=GetVariableS(vHandle+"_Справ["+Str(i)+"]");
 if vСправ="": Message("Выберите справочник",mtError); Template.Field=vHandle+"_Справ["+Str(i)+"]"; ^False; fi;
 z=SearchInArray(hСправ,vСправ,true);
 if not z=-1: tmp=hПризн[z]; fi;
 tmp=AnaElection(vСправ,False,False,tmp);
 if not tmp="":
    if Match(tmp,"ПБС.*") and SignToRecord(tmp)=nil: Message("Допустимо вводить только картотечный признак",mtError); ^False; fi;
    PutVariableS(FieldName+"["+Str(Iter)+"]",tmp);
    z=SearchInArray(hСправ,vСправ,true);
    if z=-1:
       z=InsertInArraySort(hСправ,vСправ);
       InsertInArray(hПризн,z,tmp);
      else
       hПризн[z]=tmp;
    fi;
    if fАвтоКонтролУник:
       if not GetVariableS(vHandle+"_БК["+Str(Iter)+"]")="" and 
	  not GetVariableS(vHandle+"_КОСГУ["+Str(Iter)+"]")="" and 
	  (GetVariableS(vHandle+"_Справ[1]")="" or not GetVariableS(vHandle+"_Призн1["+Str(Iter)+"]")="") and 
	  (GetVariableS(vHandle+"_Справ[2]")="" or not GetVariableS(vHandle+"_Призн2["+Str(Iter)+"]")="") and 
	  (GetVariableS(vHandle+"_Справ[3]")="" or not GetVariableS(vHandle+"_Призн3["+Str(Iter)+"]")="") and
	  (GetVariableS(vHandle+"_Справ[4]")="" or not GetVariableS(vHandle+"_Призн4["+Str(Iter)+"]")=""):
	  if not ПроверитьУникальность(vHandle,-Iter):
	     PutVariableS(FieldName+"["+Str(Iter)+"]","");
	  fi;
       fi;
    fi;
    ОчиститьИтоги;
 fi;
 ^False;
end;

Proc СписокПБС(aHandle:S);
var Iter,v,vv,nn:I;
var tmp:S;
 if aHandle="Ассигн" and not fАссигн: Exit;
   |aHandle="ЛБО" and not fЛБО: Exit;
   |aHandle="ПОФ" and not fПОФ: Exit;
 fi;
 vv=GetVariableI(aHandle+"_vv");
 for v=1..vv do
  if GetVariableS(aHandle+"_Справ["+Str(v)+"]")="ПБС": Break; fi;
 od;
 nn=GetVariableI(aHandle);
 for Iter=1..nn do
  tmp=GetVariableS(aHandle+"_Призн"+Str(v)+"["+Str(Iter)+"]");
  AddInArray(Buf,True,False,tmp+"    --"+Name_A(tmp));
 od;
end;

Proc ОпределитьЗнак(aHandle:S);
var Iter,nn,v,vv,z:I;
var tmp:S;
 if aHandle="Ассигн" and not fАссигн: Exit;
   |aHandle="ЛБО" and not fЛБО: Exit;
   |aHandle="ПОФ" and not fПОФ: Exit;
 fi;
 vv=GetVariableI(aHandle+"_vv");
 for v=1..vv do
  if GetVariableS(aHandle+"_Справ["+Str(v)+"]")="ПБС": Break; fi;
 od;
 nn=GetVariableI(aHandle);
 for Iter=1..nn do
  Hint("Определение знака "+aHandle+" "+Str(Iter)+" из "+Str(nn));
  --tmp=GetVariableS(aHandle+"_БК["+Str(Iter)+"]")+"."+GetVariableS(aHandle+"_КОСГУ["+Str(Iter)+"]")+"#"+GetVariableS(aHandle+"_Призн"+Str(v)+"["+Str(Iter)+"]");
  tmp=GetVariableS(aHandle+"_БК["+Str(Iter)+"]")+"."+GetVariableS(aHandle+"_КОСГУ["+Str(Iter)+"]")+"#"+GetVariableS(aHandle+"_ДопКл["+Str(Iter)+"]")+"#"+GetVariableS(aHandle+"_Призн"+Str(v)+"["+Str(Iter)+"]");
  z=SearchInArray(знакКлюч,tmp,True);
  if z=-1:
     z=InsertInArraySort(знакКлюч,tmp);
     InsertInArray(знакАссигн1,z,0);
     InsertInArray(знакАссигн2,z,0);
     InsertInArray(знакАссигн3,z,0);
     InsertInArray(знакЛБО1,z,0);
     InsertInArray(знакЛБО2,z,0);
     InsertInArray(знакЛБО3,z,0);
     InsertInArray(знакПОФ1,z,0);
  fi;
  if aHandle="Ассигн":
     знакАссигн1[z]=знакАссигн1[z]+Ассигн_Сум1[Iter];
     знакАссигн2[z]=знакАссигн2[z]+Ассигн_Сум2[Iter];
     знакАссигн3[z]=знакАссигн3[z]+Ассигн_Сум3[Iter];
  fi;
  if aHandle="ЛБО":
     знакЛБО1[z]=знакЛБО1[z]+ЛБО_Сум1[Iter];
     знакЛБО2[z]=знакЛБО2[z]+ЛБО_Сум2[Iter];
     знакЛБО3[z]=знакЛБО3[z]+ЛБО_Сум3[Iter];
  fi;
  if aHandle="ПОФ":
     знакПОФ1[z]=знакПОФ1[z]+ПОФ_Сум1[Iter];
  fi;
 od;
end;

Func СоздатьРазделРР(aHandle:S; OWA:I; aПризнПБС:S): L;
var Iter,nn,v,vv,z,i,OA,pp,Номер:I;
var БК,КОСГУ,Призн,ДопКл,ПризнПБС,Примеч,tmp:s;
var Сум1,Сум2,Сум3:N;
var знакСум1,знакСум2,знакСум3:N;
var ПБС,ПБС_Банк,Rec:Record;
 if aHandle="Ассигн": 
    if not fАссигн: ^True; fi;
    pp=0;
   |aHandle="ЛБО": 
    if not fЛБО: ^True; fi;
    pp=Ассигн;
   |aHandle="ПОФ": 
    if not fПОФ: ^True; fi;
    pp=Ассигн+ЛБО;
 fi;
 vv=GetVariableI(aHandle+"_vv");
 nn=GetVariableI(aHandle);
 for Iter=1..nn do
  ProgressPos(pp+Iter);
  БК=GetVariableS(aHandle+"_БК["+Str(Iter)+"]");
  КОСГУ=GetVariableS(aHandle+"_КОСГУ["+Str(Iter)+"]");
  Призн="";
  for v=1..vv do
   tmp=GetVariableS(aHandle+"_Призн"+Str(v)+"["+Str(Iter)+"]");
   if GetVariableS(aHandle+"_Справ["+Str(v)+"]")="ПБС":
      ПризнПБС=tmp;
     else
      Призн=Призн+" "+tmp;
   fi;
  od;
  Призн=Trim(Призн);
  Призн=Раб.Бюджет2005.СортироватьНаборСлов(Призн," ",True);
  ДопКл=GetVariableS(aHandle+"_ДопКл["+Str(Iter)+"]");
  Сум1=GetVariableN(aHandle+"_Сум1["+Str(Iter)+"]");
  if not aHandle="ПОФ":
     Сум2=GetVariableN(aHandle+"_Сум2["+Str(Iter)+"]");
     Сум3=GetVariableN(aHandle+"_Сум3["+Str(Iter)+"]");
    else
     Сум2=0;
     Сум3=0;
  fi;
  Примеч=GetVariableS(aHandle+"_Примеч1["+Str(Iter)+"]");
  tmp=БК+"."+КОСГУ+"#"+ДопКл+"#"+ПризнПБС;
  z=SearchInArray(знакКлюч,tmp,True);
  знакСум1=GetVariableN("знак"+aHandle+"1["+Str(z)+"]");
  if not aHandle="ПОФ":
     знакСум2=GetVariableN("знак"+aHandle+"2["+Str(z)+"]");
     знакСум3=GetVariableN("знак"+aHandle+"3["+Str(z)+"]");
    else
     знакСум2=0;
     знакСум3=0;
  fi;
  if (not fОтзыв and (Round(знакСум1,2)>0 or Round(знакСум2,2)>0 or Round(знакСум3,2)>0)) or (fОтзыв and (Round(знакСум1,2)<0 or Round(знакСум2,2)<0 or Round(знакСум3,2)<0)):
     if aПризнПБС="" or aПризнПБС=ПризнПБС:
	z=SearchInArray(Buf,ПризнПБС,True);
	if z=-1:
	   ПБС=SignToRecord(ПризнПБС,False);
	   if ПБС=nil: Message("Невозможно преобразовать признак '"+ПризнПБС+"' в запись",mtError); ^False; fi;
	   if not ПБС=РБС:
	      ПБС_Банк=Раб.Бюджет2005.БанкСчетРР(ПБС,БанкСчетРБС(ПБС));
	     else
	      ПБС_Банк=Раб.Бюджет2005.БанкСчетРР(ПБС,False);
	   fi;
	   Номер=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаВД",ДатаВД,"Глава='"+Глава+"' and ПБС="+RecordToString(ПБС));
	   z=InsertInArraySort(Buf,ПризнПБС);
	   InsertInArray(n,z,InsertRecord(OWA));
	   InsertInArray(UKeyРР,z,GetRecordKey(OWA,n[z]));
	   OA=OpenArray(OWA,n[z],aHandle,"","");
	   n[z]=PutFieldI(OWA,n[z],"ГодДок",Year(ДатаВД));
	   n[z]=PutFieldI(OWA,n[z],"Номер",Номер);
	   n[z]=PutFieldS(OWA,n[z],"НомерДок",Глава+"/"+GetCardFieldS("Контрагент",ПБС,"РПО_КБП")+"/"+Format("%.3D",Номер));
	   n[z]=PutFieldD(OWA,n[z],"ДатаДок",ДатаДок);
	   n[z]=PutFieldS(OWA,n[z],"ГРБС",ГРБС);
	   n[z]=PutFieldS(OWA,n[z],"Глава",Глава);
	   n[z]=PutFieldR(OWA,n[z],"РБС",РБС);
	   n[z]=PutFieldR(OWA,n[z],"РБС_Банк",РБС_Банк);
	   n[z]=PutFieldS(OWA,n[z],"РБС_ПризнЛС",РБС_ПризнЛС);
	   n[z]=PutFieldR(OWA,n[z],"ПБС",ПБС);
	   n[z]=PutFieldR(OWA,n[z],"ПБС_Банк",ПБС_Банк);
	   n[z]=PutFieldS(OWA,n[z],"ПБС_Призн",ПризнПБС);
	   n[z]=PutFieldD(OWA,n[z],"ДатаВД",ДатаВД);
	   n[z]=PutFieldS(OWA,n[z],"СпецУказ",СпецУказ);
	   n[z]=PutFieldS(OWA,n[z],"СпецУказ2",СпецУказ2);
	   n[z]=PutFieldS(OWA,n[z],"КодСпецУказ",КодСпецУказ);
	   n[z]=PutFieldS(OWA,n[z],"ДолжнРук",ДолжнРук);
	   n[z]=PutFieldS(OWA,n[z],"ФИОРук",ФИОРук);
	   n[z]=PutFieldS(OWA,n[z],"ДолжнИсп",ДолжнИсп);
	   n[z]=PutFieldS(OWA,n[z],"ФИОИсп",ФИОИсп);
	   n[z]=PutFieldS(OWA,n[z],"ТелИсп",ТелИсп);
	   n[z]=PutFieldD(OWA,n[z],"ДатаПодписи",ДатаПодписи);
	   n[z]=PutFieldD(OWA,n[z],"ДатаПодписиИсп",ДатаПодписи);
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_ТипКБК",if(Ассигн_ТипКБК="","10",Ассигн_ТипКБК));
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_Деб1",Ассигн_Деб1);
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_Кре1",Ассигн_Кре1);
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_Деб2",Ассигн_Деб2);
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_Кре2",Ассигн_Кре2);
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_Деб3",Ассигн_Деб3);
	   n[z]=PutFieldS(OWA,n[z],"Ассигн_Кре3",Ассигн_Кре3);
	   n[z]=PutFieldD(OWA,n[z],"ДатаВД1",ДатаВД1);
	   n[z]=PutFieldS(OWA,n[z],"ЛБО_Деб1",ЛБО_Деб1);
	   n[z]=PutFieldS(OWA,n[z],"ЛБО_Кре1",ЛБО_Кре1);
	   n[z]=PutFieldS(OWA,n[z],"ЛБО_Деб2",ЛБО_Деб2);
	   n[z]=PutFieldS(OWA,n[z],"ЛБО_Кре2",ЛБО_Кре2);
	   n[z]=PutFieldS(OWA,n[z],"ЛБО_Деб3",ЛБО_Деб3);
	   n[z]=PutFieldS(OWA,n[z],"ЛБО_Кре3",ЛБО_Кре3);
	   n[z]=PutFieldD(OWA,n[z],"ДатаВД2",ДатаВД2);
	   n[z]=PutFieldS(OWA,n[z],"ПОФ_Деб1",ПОФ_Деб1);
	   n[z]=PutFieldS(OWA,n[z],"ПОФ_Кре1",ПОФ_Кре1);
	   n[z]=PutFieldD(OWA,n[z],"ДатаВД3",ДатаВД3);
	   n[z]=PutFieldL(OWA,n[z],"ДопФин",False);
	   n[z]=PutFieldI(OWA,n[z],"Создан",Создан);
	   n[z]=PutFieldL(OWA,n[z],"Детал",False);
	   n[z]=PutFieldL(OWA,n[z],"Иной",False);
	   n[z]=PutFieldL(OWA,n[z],"Реорг",False);
	   n[z]=PutFieldI(OWA,n[z],"Секрет",GetCardFieldI("Банк_Счета",ПБС_Банк,"РПО_Секрет"));
	  else
	   if OA=0: OA=OpenArray(OWA,n[z],aHandle,"",""); fi;
	   Rec=GetRecordKey(OWA,n[z]);
	 fi; --if z=-1:
	 i=InsertRecord(OA);
	 i=PutFieldS(OA,i,"БК",БК);
	 i=PutFieldS(OA,i,"КОСГУ",КОСГУ);
	 i=PutFieldS(OA,i,"Призн",Призн);
	 i=PutFieldS(OA,i,"ДопКл",ДопКл);
	 i=PutFieldN(OA,i,"Сум1",Сум1);
	 i=PutFieldS(OA,i,"СчДеб1",if(Сум1=0,"",БК+"."+ЛБО_Деб1+"."+КОСГУ));
	 i=PutFieldS(OA,i,"СчКре1",if(Сум1=0,"",БК+"."+ЛБО_Кре1+"."+КОСГУ));
	 if not aHandle="ПОФ":
	    i=PutFieldN(OA,i,"Сум2",Сум2);
	    i=PutFieldN(OA,i,"Сум3",Сум3);
	    i=PutFieldS(OA,i,"СчДеб2",if(Сум2=0,"",БК+"."+ЛБО_Деб2+"."+КОСГУ));
	    i=PutFieldS(OA,i,"СчКре2",if(Сум2=0,"",БК+"."+ЛБО_Кре2+"."+КОСГУ));
	    i=PutFieldS(OA,i,"СчДеб3",if(Сум3=0,"",БК+"."+ЛБО_Деб3+"."+КОСГУ));
	    i=PutFieldS(OA,i,"СчКре3",if(Сум3=0,"",БК+"."+ЛБО_Кре3+"."+КОСГУ));
	 fi;
	 i=PutFieldS(OA,i,"Примеч",Примеч);
     fi; --if aПризнПБС="" or aПризнПБС=ПризнПБС:
  fi; --if (not fОтзыв and (Round(знакСум1,2)>0 or Round(знакСум2,2)>0 or Round(знакСум3,2)>0)) or (fОтзыв and (Round(знакСум1,2)<0 or Round(знакСум2,2)<0 or Round(знакСум3,2)<0)):
 od;
 ^True;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc Создан_OnChange(Sender: String);
 Оформление;
end;

Proc btnСохранить_OnClick(Sender: String);
 if FName="": 
    FName=Раб.Бюджет2005.Контроль2Слэш(PlanVar("Бух")+"\"+"Распределение ассигнований и ЛБО.dbt");
 fi;
 if ChooseSaveFile(FName,"Сохранить файл","Файлы DBT (*.dbt)|*.dbt")=cmCancel: Message("Отказ от сохранения");	Exit; fi;
 if not SubStr(FName,Length(FName)-3,4)=".dbt": FName=FName+".dbt"; fi;
 if ExistFile(FName):
    if EnqOkCancel("Файл "+FName+" уже сущесвует. Перезаписать ?",mtWarning)=cmCancel: Message("Отказ от сохранения"); Exit; fi;
 fi;
 if WriteVarInDBT(FName,True): Message("Данные успешно сохранены"); fi;
end;

Proc btnЗагрузить_OnClick(Sender: String);
 if FName="": 
    FName=Раб.Бюджет2005.Контроль2Слэш(PlanVar("Бух"));
 fi;
 if ChooseFile(FName,"Открыть файл","Файлы DBT (*.dbt)|*.dbt")=cmCancel: Message("Отказ от загрузки");	Exit; fi;
 if ReadVarFromDBT(FName):
    Message("Данные успешно прочитаны");
    Оформление;
 fi;
end;

Proc btnРасчет_onClick(Sender: String);
 Контроль=Проверить;
 if not Контроль: Exit; fi;
 Расчет;
 Message("Расчет завершен");
end;

Proc btnЭкспорт_OnClick(Sender: String);
var OWA,z,zz,Номер,e:I;
var ПризнПБС_,tmp:S;
 RefreshAna;
 Контроль=Проверить;
 if not Контроль: Exit; fi;
 if Sender="btnЭкспорт":
    ПризнПБС_="";
   else
    ClearVariable(Buf);
    СписокПБС("Ассигн");
    СписокПБС("ЛБО");
    СписокПБС("ПОФ");
    z=Alternate("Выберите ПБС",Buf,-1,1,12);
    if z=0: Exit; fi;
    ПризнПБС_=ExtractWord(1,Buf[z],"	--");
 fi;
 ClearVariable(знакКлюч);
 ClearVariable(знакАссигн1);
 ClearVariable(знакАссигн2);
 ClearVariable(знакАссигн3);
 ClearVariable(знакЛБО1);
 ClearVariable(знакЛБО2);
 ClearVariable(знакЛБО3);
 ClearVariable(знакПОФ1);
 ОпределитьЗнак("Ассигн");
 ОпределитьЗнак("ЛБО");
 ОпределитьЗнак("ПОФ");
 OWA=OpenWorkArea(SelfCrd,"","1=0");
 Try
  ShowProgress(Ассигн+ЛБО+ПОФ,"Создание расходных расписаний....");
  BeginChanging(OWA);
  Try
   ClearVariable(Buf);
   ClearVariable(n);
   ClearVariable(UKeyРР);
   if not СоздатьРазделРР("Ассигн",OWA,ПризнПБС_): CancelChanging(OWA); ClearVariable(UKeyРР); Exit; fi;
   if not СоздатьРазделРР("ЛБО",OWA,ПризнПБС_): CancelChanging(OWA); ClearVariable(UKeyРР); Exit; fi;
   if not СоздатьРазделРР("ПОФ",OWA,ПризнПБС_): CancelChanging(OWA); ClearVariable(UKeyРР); Exit; fi;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   ClearVariable(UKeyРР);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ExecuteProc("РБС.Распред_Список_РР.Очистить");
 zz=LengthOfArray(UKeyРР);
 e=0;
 --ClearTrace(True);
 for z=1..zz do
  Hint(Str(z)+" из "+Str(zz));
  if isBlankOpen(SelfBln): Close(SelfBln); fi;
  PutVariableR(SelfBln+".Run",UKeyРР[z]);
  OpenBlank(SelfBln,True,UKeyРР[z]);
  PutVariableR("РБС.Распред_Список_РР.Ukey["+Str(z)+"]",UKeyРР[z]);
  if not GetCardFieldL(SelfCrd,UKeyРР[z],"Учитывать"): e=e+1; fi;
 od;
 PutVariableI("РБС.Распред_Список_РР.Упр",zz);
 Message("Данные успешно перенесены в расходные расписания."+Chr(13)+"Сформировано расходных расписаний: "+Str(zz)+Chr(13)+"Контроль пройден: "+Str(zz-e)+Chr(13)+"Контроль не пройден: "+Str(e));
 OpenBlank("РБС.Распред_Список_РР",True);
end;

Proc btnСписокРР_OnClick(Sender: String);
 OpenBlank("РБС.Распред_Список_РР",True);
end;

Proc btnОчистить_onClick (Obj:S);
 if EnqOkCancel("Вы уверены, что хотите очистить таблицы распределения ?",mtWarning)=cmCancel: Exit; fi;
 Очистить("");
 ExecuteProc("РБС.Распред_Список_РР.Очистить");
end;

Proc cbРаздел_OnChange(Sender: String);
 if Sender="cbАссигн": 
    if fАссигн: 
       Ассигн_МаскаСправ=Раб.Бюджет2005.СписокСправ("(*."+Ассигн_Деб1+".*|*."+Ассигн_Деб2+".*|*."+Ассигн_Деб3+".*|*."+Ассигн_Кре1+".*|*."+Ассигн_Кре2+".*|*."+Ассигн_Кре3+".*)",0,Ассигн_ИсклПризн);
      else 
       if EnqOkCancel("Внимание !"+Chr(13)+"Раздел I. Бюджетные ассигнования будет очищен"+Chr(13)+"Вы уверены, что хотите исключить раздел ?",mtWarning)=cmOk:
	  Ассигн_МаскаСправ="";
	 else
	  fАссигн=True;
	  cbАссигн.State=fАссигн;
       fi;
    fi;
   |Sender="cbЛБО":
    if fЛБО: 
       ЛБО_МаскаСправ=Раб.Бюджет2005.СписокСправ("(*."+ЛБО_Деб1+".*|*."+ЛБО_Деб2+".*|*."+ЛБО_Деб3+".*|*."+ЛБО_Кре1+".*|*."+ЛБО_Кре2+".*|*."+ЛБО_Кре3+".*)",0,ЛБО_ИсклПризн);
      else 
       if EnqOkCancel("Внимание !"+Chr(13)+"Раздел II. Лимиты бюджетных обязательств"+Chr(13)+"Вы уверены, что хотите исключить раздел ?",mtWarning)=cmOk:
	  ЛБО_МаскаСправ="";
	 else
	  fЛБО=True;
	  cbЛБО.State=fЛБО;
       fi;
    fi;
   |Sender="cbПОФ":
    if fПОФ: 
       ПОФ_МаскаСправ=Раб.Бюджет2005.СписокСправ("(*."+ПОФ_Деб1+".*|*."+ПОФ_Кре1+".*)",0,ПОФ_ИсклПризн);
      else 
       if EnqOkCancel("Внимание !"+Chr(13)+"Раздел III. Предельные объемы финансирования"+Chr(13)+"Вы уверены, что хотите исключить раздел ?",mtWarning)=cmOk:
	  ПОФ_МаскаСправ="";
	 else
--	    fПОФ=True;
--	    cbПОФ.State=fПОФ;
       fi;
    fi;
 fi;
 Ассигн_vv=Min(WordsCount(Ассигн_МаскаСправ,"|"),MaxVV);
 ЛБО_vv=Min(WordsCount(ЛБО_МаскаСправ,"|"),MaxVV);
 ПОФ_vv=Min(WordsCount(ПОФ_МаскаСправ,"|"),MaxVV);
 Оформление;
end;

Func OnInsert(SectName: String): Logical;
var tmp:S;
var Iter:I;
 tmp=Name2Handle;
 Iter=AsInteger(Template.Frame);
 hБК=GetVariableS(tmp+"_БК["+Str(Iter)+"]");
 hКОСГУ=GetVariableS(tmp+"_КОСГУ["+Str(Iter)+"]");
 hПризн1=GetVariableS(tmp+"_Призн1["+Str(Iter)+"]");
 hПризн2=GetVariableS(tmp+"_Призн2["+Str(Iter)+"]");
 hПризн3=GetVariableS(tmp+"_Призн3["+Str(Iter)+"]");
 hПризн4=GetVariableS(tmp+"_Призн4["+Str(Iter)+"]");
 ОчиститьИтоги;
 Return True;
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+"_Призн1["+Str(Iter)+"]",hПризн1); fi;
 if Гр5: PutVariableS(tmp+"_Призн2["+Str(Iter)+"]",hПризн2); fi;
 if Гр6: PutVariableS(tmp+"_Призн3["+Str(Iter)+"]",hПризн3); fi;
 if Гр7: PutVariableS(tmp+"_Призн4["+Str(Iter)+"]",hПризн3); fi;
 ОчиститьИтоги;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 Оформление;
end;

Proc OnOpen(Create: Logical);
 if not fАссигн and not fЛБО and not fПОФ: fЛБО=True; fi;
 if fАссигн: Ассигн_МаскаСправ=Раб.Бюджет2005.СписокСправ("(*."+Ассигн_Деб1+".*|*."+Ассигн_Деб2+".*|*."+Ассигн_Деб3+".*|*."+Ассигн_Кре1+".*|*."+Ассигн_Кре2+".*|*."+Ассигн_Кре3+".*)",0,Ассигн_ИсклПризн); else Ассигн_МаскаСправ=""; fi;
 if fЛБО: ЛБО_МаскаСправ=Раб.Бюджет2005.СписокСправ("(*."+ЛБО_Деб1+".*|*."+ЛБО_Деб2+".*|*."+ЛБО_Деб3+".*|*."+ЛБО_Кре1+".*|*."+ЛБО_Кре2+".*|*."+ЛБО_Кре3+".*|*.1.501.04.*)",0,ЛБО_ИсклПризн); else ЛБО_МаскаСправ=""; fi;
 if fПОФ: ПОФ_МаскаСправ=Раб.Бюджет2005.СписокСправ("(*."+ПОФ_Деб1+".*|*."+ПОФ_Кре1+".*)",0,ПОФ_ИсклПризн); else ПОФ_МаскаСправ=""; fi;
 Ассигн_vv=Min(WordsCount(Ассигн_МаскаСправ,"|"),MaxVV);
 ЛБО_vv=Min(WordsCount(ЛБО_МаскаСправ,"|"),MaxVV);
 ПОФ_vv=Min(WordsCount(ПОФ_МаскаСправ,"|"),MaxVV);
 if РБС=nil: 
    РБС=Раб.Бюджет2005.НашРекв;
    ЗаполнитьРБС(РБС);
 fi;
end;
--Обработчики событий шаблона -----
--

Конец
