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

fУтвДок:L;
fАссигн:L;
fЛБО:L;
fПОФ:L;

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

var ТипНумер:I;
var ВерхРегистр:L;
var ПравилоКуда:I=[2];
var ПравилоКуда_:S=if(ПравилоКуда=2:"Откуда КОФК<>Куда КОФК (первые 2 знака кода)"|ПравилоКуда=4:"Откуда КОФК<>Куда КОФК (4 знака кода)"|True:"Заполнять всегда");

var inСоздан:I;
var inДетал:I;
var lockСоздан:L;

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

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

var ПБС_:S="";

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

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

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;
S14: Section;
S15: Section;

S9_1 :Section;
S9_2 :Section;
S11_1:Section;
S11_2:Section;
S13_1:Section;
S13_2:Section;

cbУчитывать   : Object;
cbВБанк       : Object;
cbПроводить   : Object;
btnДатаОпер   : Object;
edДатаОпер    : Object;
cbАннул       : Object;
btnДатаАннул  : Object;
edДатаАннул   : Object;
rbГРБС        : Object;
rbРБС         : Object;
rbПБС         : Object;
cbДетал       : Object;
cbДопФин      : Object;
cbРеорг       : Object;
cbИной        : Object;
btnПечать     : Object;
edКолКопий    : Object;
btnФормаПечать: Object;
btnНастр      : Object;
Bevel1        : Object;
cbУтвДок      : Object;
Bevel3        : Object;
cbАссигн      : Object;
cbЛБО         : Object;
cbПОФ         : Object;


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

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

var Run:Record;
--
--Процедуры и функции -------------
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..15 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;
 cbУчитывать.Enabled=not Проводить;
 cbВБанк.Enabled=not Проводить;
 cbПроводить.Enabled=not Аннул;
 btnДатаОпер.Enabled=not Проводить and not Аннул;
 edДатаОпер.Enabled=not Проводить and not Аннул;
 btnДатаАннул.Enabled=not Аннул;
 edДатаАннул.Enabled=not Аннул;
 rbГРБС.Enabled=not Учитывать and not lockСоздан;
 rbРБС.Enabled=not Учитывать and not lockСоздан;
 rbПБС.Enabled=not Учитывать and not lockСоздан;
 cbДетал.Enabled=not Учитывать and not Создан=3;
 cbДопФин.Enabled=not Учитывать;
 cbРеорг.Enabled=not Учитывать and not Создан=3 and not Детал;
 cbИной.Enabled=not Учитывать and not Создан=3;
 --btnНастр.Enabled=not Учитывать;
 cbАссигн.Enabled=not Учитывать;
 cbЛБО.Enabled=not Учитывать;
 cbПОФ.Enabled=not Учитывать;
 for s=1..15 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;
 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);
 --
 S13.Visible=fПОФ;
 S13.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S13_1.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
 S13_2.Column(7,ColVisible,Int(РБС_Банк.РПО_КодБюдж)>1);
end;

Proc Настр(Flag:L);
 УпрНастр=Flag;
 cbУчитывать.Visible=not Flag;
 cbВБанк.Visible=not Flag;
 cbПроводить.Visible=not Flag;
 btnДатаОпер.Visible=not Flag;
 edДатаОпер.Visible=not Flag;
 cbАннул.Visible=not Flag;
 btnДатаАннул.Visible=not Flag;
 edДатаАннул.Visible=not Flag;
 rbГРБС.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;
 edКолКопий.Visible=not Flag;
 btnФормаПечать.Visible=not Flag;
 btnНастр.Visible=not Flag;
 Bevel1.Visible=not Flag;
 cbУтвДок.Visible=not Flag;
 Bevel3.Visible=not Flag;
 cbАссигн.Visible=not Flag;
 cbЛБО.Visible=not Flag;
 cbПОФ.Visible=not Flag;
end;

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

Func Handle2Name(aHandle:S):S;
 if aHandle="Ассигн": ^"S9";
   |aHandle="ЛБО":    ^"S11";
   |aHandle="ПОФ":    ^"S13";
 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;

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

Proc ПолучитьНомер;
 if not ДатаВД=1.1.100:
    if ТипНумер=0:
       if not Глава="" and not ПБС.РПО_КБП="":
          Номер=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаВД",ДатаВД,"not UKey="+RecordToString(Current)+" and Глава='"+Глава+"' and ПБС="+RecordToString(ПБС));
          НомерДок=Глава+"/"+ПБС.РПО_КБП+"/"+Format("%.3D",Номер);
       fi;
      else
       Номер=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаВД",ДатаВД,"not UKey="+RecordToString(Current));
       НомерДок=Str(Номер);
    fi;
 fi;
end;

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

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

Func БанкСчетРБС (Rec:Record):L;
var OWA:I;
 OWA=OpenWorkArea("Банк_счета","","РПО_РБС and Контрагент="+RecordToString(Rec));
 Try
  if not Records(OWA)=0: ^True; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^False;
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:
         if Детал: КОСГУ_=SubStr(КОСГУ_,1,2)+"0"; fi;
         Сч_=БК_+"."+GetVariableS(aHandle+"_Кре"+Str(y))+"."+КОСГУ_;
         Раб.КСА.Добавить(Сч_);
        else
         Сч_="";
      fi;
      PutVariableS(aHandle+"["+Str(Iter)+"].СчКре"+Str(y),Сч_);
     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 or Создан=2: --Грбс
    Ассигн_Деб1_=if(Детал,"1.503.12","1.503.12");
    Ассигн_Кре1_=if(Детал,"1.503.12","1.503.14");
    Ассигн_Деб2_=if(Детал,"1.503.22","1.503.22");
    Ассигн_Кре2_=if(Детал,"1.503.22","1.503.24");
    Ассигн_Деб3_=if(Детал,"1.503.32","1.503.32");
    Ассигн_Кре3_=if(Детал,"1.503.32","1.503.34");
    ЛБО_Деб1_=if(Детал,"1.501.12","1.501.12");
    ЛБО_Кре1_=if(Детал,"1.501.12","1.501.14");
    ЛБО_Деб2_=if(Детал,"1.501.22","1.501.22");
    ЛБО_Кре2_=if(Детал,"1.501.22","1.501.24");
    ЛБО_Деб3_=if(Детал,"1.501.32","1.501.32");
    ЛБО_Кре3_=if(Детал,"1.501.32","1.501.34");
    ПОФ_Деб1_=if(Детал,"1.ЗАБ.90","1.ЗАБ.14");
    ПОФ_Кре1_=if(Детал,"1.ЗАБ.90","1.ЗАБ.90");
   |Создан=3:
    Ассигн_Деб1_="1.503.13";
    Ассигн_Кре1_="1.503.13";
    Ассигн_Деб2_="1.503.23";
    Ассигн_Кре2_="1.503.23";
    Ассигн_Деб3_="1.503.33";
    Ассигн_Кре3_="1.503.33";
    ЛБО_Деб1_="1.501.13";
    ЛБО_Кре1_="1.501.13";
    ЛБО_Деб2_="1.501.23";
    ЛБО_Кре2_="1.501.23";
    ЛБО_Деб3_="1.501.33";
    ЛБО_Кре3_="1.501.33";
    ПОФ_Деб1_=if(Детал,"1.ЗАБ.91","1.ЗАБ.14");
    ПОФ_Кре1_=if(Детал,"1.ЗАБ.91","1.ЗАБ.91");
   |True: Message("Неизвестный тип документа",mtError); Exit;
 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Создан;
 if not inДетал=0:
    Детал=inДетал=1;
 fi;
 if Создан=0: Создан=2; fi;
 Ассигн_ТипКБК="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;

Proc MsgError(Val:S; mt:I);
 if Run=nil:
    Message(Val,mt);
   else
    Trace("№ "+НомерДок+" Ошибка !  "+Val);
 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 БК_="": MsgError("Введите КБК",mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
  if КОСГУ_="": MsgError("Введите КБК",mtError); Template.Name=Handle2Name(aHandle); Template.Field="КОСГУ"; Template.Frame=Iter; ^False; fi;
  Призн_=GetVariableS(aHandle+"["+Str(Iter)+"].Призн");
  if Int(РБС_Банк.РПО_КодБюдж)=1: PutVariableS(aHandle+"["+Str(Iter)+"].ДопКл",""); fi;
  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(СчДеб_)=" ": MsgError("Неизвестный идентификатор счета "+СчДеб_,mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
      if Name_S(СчКре_)=" ": MsgError("Неизвестный идентификатор счета "+СчКре_,mtError); Template.Name=Handle2Name(aHandle); Template.Field="БК"; Template.Frame=Iter; ^False; fi;
      if not Correspond(СчДеб_,СчКре_): MsgError("Счета не могут корреспондировать "+СчДеб_+"/"+СчКре_,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: MsgError("Заполните сумму",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: MsgError("Заполните одну из сумм",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:
        MsgError("Различный набор аналитических справочников для КБК="+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
     MsgError("Повторный ввод данных. ^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 not Глава="" and not ПБС.РПО_КБП="" and not ДатаВД=1.1.100 and НомерДок="": ПолучитьНомер; fi;
  if Создан=0: MsgError("Укажите кем сформирован документ",mtError); Template.Object="rbРБС"; ^False; fi;
  if НомерДок="": MsgError("Введите номер расходного расписания",mtError); Template.Field="НомерДок"; ^False; fi;
  if not Match(НомерДок,"???/?????/???") and ТипНумер=0: MsgError("Номер расходного расписания должен соответствовать формату XXX/YYYYY/ZZZ",mtError); Template.Field="НомерДок"; ^False; fi;
  if ДатаДок=1.1.100: MsgError("Введите дату расходного расписания",mtError); Template.Field="ДатаДок"; ^False; fi;
  if Глава="": MsgError("Введите главу по БК",mtError); Template.Field="Глава"; ^False; fi;
  if ГРБС="": MsgError("Введите главного распорядителя бюджетных средств, главного администратора источников финансирования дефицита бюджета",mtError); Template.Field="ГРБС"; ^False; fi;
  if not Глава=ExtractWord(1,НомерДок,"/"): MsgError("Номер расходного расписания не соответствует главе по БК",mtError); Template.Field="НомерДок"; ^False; fi;
  if РБС=nil or (РБС.ПолнИмя="" and РБС.РПО_ПолнИмя2=""): MsgError("Введите распорядителя (получателя) бюджетных средств, администратора источников финансирования дефицита бюджета с полномочиями главного администратора",mtError); Template.Field="РБС.ПолнИмя"; ^False; fi;
  if РБС.РПО_КБП="": MsgError("Введите код по сводному реестру",mtError); Template.Field="РБС.РПО_КБП"; ^False; fi;
  if РБС_Банк=nil or (РБС_Банк.РПО_ОФК_Имя="" and РБС_Банк.РПО_ОФК_Имя2=""): MsgError("Введите федеральное казначейство, орган Федерального казначейства",mtError); Template.Field="РБС_Банк.РПО_ОФК_Имя"; ^False; fi;
  if РБС_Банк.РПО_ЛСчет="": MsgError("Введите номер лицевого счета",mtError); Template.Field="РБС_Банк.РПО_ЛСчет"; ^False; fi;
  if РБС_Банк.РПО_НаимБюдж="": MsgError("Введите наименование бюджета",mtError); Template.Field="РБС_Банк.РПО_НаимБюдж"; ^False; fi;
  if РБС_Банк.РПО_ФО_Наим1+РБС_Банк.РПО_ФО_Наим2="": MsgError("Введите финансовый орган",mtError); Template.Field="РБС_Банк.РПО_ФО_Наим1"; ^False; fi;
  if РБС_Банк.РПО_ОФК_Код="": MsgError("Введите код по КОФК",mtError); Template.Field="РБС_Банк.РПО_ОФК_Код"; ^False; fi;
  if РБС_ПризнЛС="": MsgError("Введите аналитический признак лицевого счета",mtError); Template.Field="РБС_ПризнЛС"; ^False; fi;
  if Name_A(РБС_ПризнЛС)=" ": MsgError("Неизвестный идентификатор аналитического признака лицевого счета '"+РБС_ПризнЛС+"'",mtError); Template.Field="РБС_ПризнЛС"; ^False; fi;
  if ПБС=nil or (ПБС.ПолнИмя="" and ПБС.РПО_ПолнИмя2=""): MsgError("Введите распорядителя (получателя) бюджетных средств, администратора источников финансирования дефицита бюджета с полномочиями главного администратора, администратора источников финансирования дефицита бюджета, иного получателя бюджетных средств",mtError); Template.Field="ПБС.ПолнИмя"; ^False; fi;
  if ПБС.РПО_КБП="": MsgError("Введите код по сводному реестру",mtError); Template.Field="ПБС.РПО_КБП"; ^False; fi;
  if not ПБС.РПО_КБП=ExtractWord(2,НомерДок,"/"): MsgError("Номер расходного расписания не соответствует коду по сводному реестру (Распорядитель (получатель) бюджетных средств...)",mtError); Template.Field="НомерДок"; ^False; fi;
  if Name_A(ПБС_Призн)=" ": MsgError("Неизвестный идентификатор аналитического признака распорядителя (получателя) '"+ПБС_Призн+"'",mtError); Template.Field="ПБС.ПолнИмя"; ^False; fi;
  if ПБС_Банк=nil or (ПБС_Банк.РПО_ОФК_Имя="" and ПБС_Банк.РПО_ОФК_Имя2=""): MsgError("Введите наименование органа Федерального казначейства",mtError); Template.Field="ПБС_Банк.РПО_ОФК_Имя"; ^False; fi;
  if ПБС_Банк.РПО_ЛСчет="": MsgError("Введите номер лицевого счета",mtError); Template.Field="ПБС_Банк.РПО_ЛСчет"; ^False; fi;
  if ПБС_Банк.РПО_ОФК_Код="": MsgError("Введите код по КОФК",mtError); Template.Field="ПБС_Банк.РПО_ОФК_Код"; ^False; fi;
  if Детал and not РБС=ПБС: MsgError("В случае детализации показателей реквизиты отправителя и получателя должны совпадать",mtError); Template.Field="ПБС.ПолнИмя"; ^False; fi;
  if Детал and not РБС_Банк=ПБС_Банк: MsgError("В случае детализации показателей реквизиты казначейства отправителя и получателя должны совпадать",mtError); Template.Field="ПБС_Банк.РПО_ОФК_Имя"; ^False; fi;
  if ДолжнРук="": MsgError("Введите должность руководителя",mtError); Template.Field="ДолжнРук"; ^False; fi;
  if ФИОРук="": MsgError("Введите ФИО руководителя",mtError); Template.Field="ФИОРук"; ^False; fi;
  if ДатаПодписи=1.1.100: MsgError("Введите дату подписи",mtError); Template.Field="ДатаПодписи"; ^False; fi;
  if ДатаПодписи<ДатаДок: Message("Дата подписи не может быть ранее даты документа",mtError); Template.Field="ДатаПодписи"; ^False; fi;
  if ДолжнИсп="": MsgError("Введите должность исполнителя",mtError); Template.Field="ДолжнИсп"; ^False; fi;
  if ФИОИсп="": MsgError("Введите ФИО исполнителя",mtError); Template.Field="ФИОИсп"; ^False; fi;
  if ТелИсп="": MsgError("Введите телефон исполнителя",mtError); Template.Field="ТелИсп"; ^False; fi;
  if ДатаПодписиИсп=1.1.100: MsgError("Введите дату подписи исполнителя",mtError); Template.Field="ДатаПодписиИсп"; ^False; fi;
  if ДатаПодписиИсп<ДатаДок: Message("Дата подписи исполнителя не может быть ранее даты документа",mtError); Template.Field="ДатаПодписиИсп"; ^False; fi;
  if ДопФин:
     if Pos("05",КодСпецУказ)=0: MsgError("Дополнительное бюджетное финансирование:^MВ кодовой зоне специальных указаний должно быть установлено значение '05'",mtError); Template.Field="КодСпецУказ"; ^False; fi;
  fi;
  if not Pos("05",КодСпецУказ)=0 and not ДопФин: MsgError("В случае указания в кодовой зоне специальных указаний значения '05', должен быть установлен флаг 'Дополнительное бюджетное финансирование'",mtError); Template.Object="cbДопФин"; ^False; fi;
  if Реорг:
     if Pos("02",КодСпецУказ)=0: MsgError("При реорганизации в кодовой зоне специальных указаний должно быть установлено значение '02'",mtError); Template.Field="КодСпецУказ"; ^False; fi;
     if ПБС.РПО_ПБС_Имя_Реорг1+ПБС.РПО_ПБС_Имя_Реорг2="": MsgError("Реорганизация:^MЗаполните полное наименование реорганизуемого участника бюджетного процесса",mtError); Template.Field="ПБС.РПО_ПБС_Имя_Реорг1"; ^False; fi;
     if ПБС.РПО_ПБС_Код_Реорг="": MsgError("Реорганизация:^MЗаполните код по сводному реестру",mtError); Template.Field="ПБС.РПО_ПБС_Код_Реорг"; ^False; fi;
  fi;
  if not Pos("02",КодСпецУказ)=0 and not Реорг: MsgError("В случае указания в кодовой зоне специальных указаний значения '02', должен быть установлен флаг 'Реорганизация'",mtError); Template.Object="cbРеорг"; ^False; fi;
  ProgressPos(2);
  УдалитьПустыеСтроки;
  --
  ОбновитьКодСчета;
  --
  if Ассигн=0 and ЛБО=0 and ПОФ=0: MsgError("Заполните хотя бы один из разделов",mtError); Template.Name=Handle2Name("ЛБО"); Template.Field="БК"; Template.Frame=1; ^False; fi;
  if Ассигн=0 and Ассигн_ТипКБК="": Ассигн_ТипКБК="10"; fi;
  if Ассигн_ТипКБК="": MsgError("Выберите тип КБК",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: MsgError("Заполните дату введения в действие",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: MsgError("Указана одновременно общая дата введение в действие и по разделам",mtError); Template.Field="ДатаВД"; ^False; fi;
  if ДатаВД=1.1.100:
     if not Ассигн=0 and ДатаВД1=1.1.100: MsgError("Заполните дату введения в действие раздела 1",mtError); Template.Field="ДатаВД1"; ^False; fi;
     if not ЛБО=0 and ДатаВД2=1.1.100: MsgError("Заполните дату введения в действие раздела 2",mtError); Template.Field="ДатаВД2"; ^False; fi;
     if not ПОФ=0 and ДатаВД3=1.1.100: MsgError("Заполните дату введения в действие раздела 3",mtError); Template.Field="ДатаВД3"; ^False; fi;
  fi;
  if not ДатаВД=1.1.100 and ДатаВД<ДатаДок: MsgError("Дата введения в действие не может быть ранее чем дата документа",mtError); Template.Field="ДатаВД"; ^False; fi;
  if not ДатаВД1=1.1.100 and ДатаВД1<ДатаДок: MsgError("Дата введения в действие раздела 1 не может быть ранее чем дата документа",mtError); Template.Field="ДатаВД1"; ^False; fi;
  if not ДатаВД2=1.1.100 and ДатаВД2<ДатаДок: MsgError("Дата введения в действие раздела 2 не может быть ранее чем дата документа",mtError); Template.Field="ДатаВД2"; ^False; fi;
  if not ДатаВД3=1.1.100 and ДатаВД3<ДатаДок: MsgError("Дата введения в действие раздела 3 не может быть ранее чем дата документа",mtError); Template.Field="ДатаВД3"; ^False; fi;
 Finally
  CloseProgress;
 end;
 ^True;
end;

Proc ВызватьКарт (aRec:Record; aF:S; aСоздан:I; aДетал:I);
var Crd:S;
var Bln:S;
var i:i;
 Bln="ДОКУМЕНТЫ.ЛБО.РР_Исх";
 Crd=GetVariableS(Bln+".SelfCrd");
 i=GetVariableI(bln+".inСоздан");
 PutVariableI(Bln+".inСоздан",aСоздан);
 PutVariableL(Bln+".lockСоздан",True);
 if aСоздан=3: 
    PutVariableI("ДОКУМЕНТЫ.ЛБО.РР_ИСХ.inДетал",1);
   else
    if aДетал=0:
       if i=aСоздан: i=0; else i=-1; fi;
      else
       i=aДетал;
    fi;
    PutVariableI("ДОКУМЕНТЫ.ЛБО.РР_ИСХ.inДетал",i);
 fi;
 OpenCardFile(Crd,aF,aRec);
end;

Proc ЗначНастр (Flag:L);
var OWA,OA,nr,n,n2,nr2:I;
var ID:S;
 OWA=OpenWorkArea("РПО_СТАТУС","","ID='"+SelfCrd+"'");
 Try
  nr=Records(OWA);
  if Flag:
     BeginChanging(OWA,True);
     Try
      if nr=0: 
         n=InsertRecord(OWA);
         n=PutFieldS(OWA,n,"ID",SelfCrd);
        else
         n=1;
      fi;
      OA=OpenArray(OWA,n,"Позиции","");
      DeleteAllRecords(OA);
      n2=InsertRecord(OA);
      n2=PutFieldS(OA,n2,"ID","ТипНумер");
      n2=PutFieldI(OA,n2,"VAL_I",ТипНумер);
      n2=InsertRecord(OA);
      n2=PutFieldS(OA,n2,"ID","ВерхРегистр");
      n2=PutFieldL(OA,n2,"VAL_L",ВерхРегистр);
      n2=InsertRecord(OA);
      n2=PutFieldS(OA,n2,"ID","ПравилоКуда");
      n2=PutFieldI(OA,n2,"VAL_I",ПравилоКуда);
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
    else
     if not nr=0:
        OA=OpenArray(OWA,1,"Позиции","");
        nr2=Records(OA);
        for n2=1..nr2 do
         ID=GetFieldS(OA,n2,"ID");
         if ID="ТипНумер": ТипНумер=GetFieldI(OA,n2,"VAL_I");
           |ID="ВерхРегистр": ВерхРегистр=GetFieldL(OA,n2,"VAL_L");
           |ID="ПравилоКуда": ПравилоКуда=GetFieldI(OA,n2,"VAL_I");
         fi;
        od;
     fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func ЗакрНастр_OnEnter(FieldName: String; Iter: Integer): logical;
 Настр(False);
 ЗначНастр(True);
 Return False;
end;

Func ТипНумер_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Старая нумерация (XXX/YYYYY/ZZZ)";
 Buf[2]="Новая нумерация";
 n=Alternate("Тип нумерации",Buf,-1,ТипНумер-1,12);
 if not n=0:
    if not ТипНумер=n-1:
       ТипНумер=n-1;
       НомерДок="";
       ПолучитьНомер;
    fi;
    ТипНумер=n-1;
 fi;
 Return False;
end;

Func ВерхРегистр_OnEnter(FieldName: String; Iter: Integer): logical;
 ВерхРегистр=not ВерхРегистр;
 Return False;
end;

Func ПравилоКуда_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Заполнять всегда";
 Buf[2]="Не заполнять если Откуда КОФК=Куда КОФК (первые 2 знака кода)";
 Buf[3]="Не заполнять если Откуда КОФК=Куда КОФК (4 знака кода)";
 n=Alternate("Правило заполнения куда",Buf,-1,if(ПравилоКуда=2:2|ПравилоКуда=4:3|True:1),12);
 if not n=0:
    ПравилоКуда=if(n=2:2|n=3:4|True:0);
 fi;
 Return False;
end;

Func НомерДок_OnEnter(FieldName: String; Iter: Integer): logical;
 if ТипНумер=0:
    if Глава="": Message("Введите главу по БК",mtError); Template.Field="Глава"; ^False; fi;
    if ПБС.РПО_КБП="": Message("Введите код по сводному реестру",mtError); Template.Field="ПБС.РПО_КБП"; ^False; fi;
    if ДатаВД=1.1.100: Message("Заполните дату введения в действие",mtError); Template.Field="ДатаВД"; ^False; fi;
 fi;
 Return True;
end;

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
var l:i;
 ОбработатьНомер(НомерДок);
 l=Length(НомерДок);
 if l>0 and l<=3:
    НомерДок=Глава+"/"+ПБС.РПО_КБП+"/"+RepStr("0",3-l)+НомерДок;
 fi;
end;

func НомерДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 ПолучитьНомер;
 ОбработатьНомер(НомерДок);
 ^Cur;
end;

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

Func Дата_OnLookup(Sect:S; Row:I; Col:I; Cur:S) :S;
var tmp,prevД:d;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 prevД=GetVariableD(Field);
 PutVariableD(Field,tmp);
 if Field="ДатаВД":
    ОбработатьДату(prevД,tmp);
    ДатаДок_OnExit(Field,1);
 fi;
end;

Proc Глава_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
var hГл:S;
 tmp=GetVariableS(FieldName);
 if not tmp="":
    hГл=Глава;
    PutVariableS("h"+FieldName,tmp);
    if FieldName="Глава": 
       ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
       hГРБС=ГРБС;
       if not hГл=Глава and not Глава="":
          ПолучитьНомер;
       fi;
    fi;
 fi;
end;

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

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

Func ПБС_Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 if ПБС=nil: Message("Выберите распорядителя (получателя) бюджетных средств...",mtError); Template.Field="ПБС.ПолнИмя"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","КОНТРАГЕНТ="+RecordToString(ПБС),ПБС_Банк);
 if Rec=nil: ^False; fi;
 ПБС_Банк=Rec;
 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 ДатаВД_OnVerify(FieldName: String; Iter: Integer; Value: Date):Logical;
var prevД:D;
 prevД=ДатаВД;
 ДатаВД=Value;
 ОбработатьДату(prevД,ДатаВД);
 Return True;
end;

Func СпецУказ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var 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 Секрет_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;

Proc Реорг_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
 if Реорг and Double:
    if ПБС=nil: Message("Выберите распорядителя (получателя) бюджетных средств...",mtError); Template.Field="ПБС.ПолнИмя"; Exit; fi;
    if ПБС.РПО_ПризнРеорг=0: Message("Выберите режим реорганизации у распорядителя (получателя) бюджетных средств...",mtError); ExecuteProc("Инфо.Контрагент.Вызвать",ПБС,"РПО_ПризнРеорг_",Field,1); Exit; fi;
    Field=AsString(Template.Field);
    Field=SubStr(Field,5,255);
    ExecuteProc("Инфо.Контрагент.Вызвать",ПБС,"РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОРЕОРГ",Field,1);
 fi;
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;
 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;
 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;
    Раб.КБК.Список_КОСГУ_БК=БК_;
    Раб.КБК.Список_КОСГУ_РазрБК=БК_="";
    Раб.КБК.Список_КОСГУ_КодСч=КодСч_;
    if Детал: Mask=Mask+"&~(*.210|*.220)"; fi;
    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;
       else
        if ВБанк:
           ВБанк=False;
           cbВБанк.State=ВБанк;
        fi;
     fi;
  fi;
 Finally
  cbУчитывать.State=Учитывать;
  Оформление;
 end;
 EditorApply;
end;

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

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

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

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

Proc btnПечать_OnClick(Sender: String);
var n:i;
 if not BlankExist(SelfPrn): Message("Форма для печати не найдена",mtError); Exit; fi;
 EditorApply;
 if isBlankOpen(SelfPrn): Close(SelfPrn); fi;
 if Sender="btnПечать":
    if КолКопий<1: КолКопий=1; fi;
    for n=1..КолКопий do
     PrintCardBlank(SelfPrn,Current);
    od;
   else
    PutVariableR(SelfPrn+".inRec",Current);
    PutVariableI(SelfPrn+".inКолКопий",КолКопий);
    PutVariableL(SelfPrn+".inПечать",Sender="btnПечать");
    PutVariableL(SelfPrn+".inУтвДок",fУтвДок);
    OpenBlank(SelfPrn,True,Current);
 fi;
end;

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

Proc Создан_OnChange(Sender: String);
 if Sender="rbПБС":
    Детал=True;
    cbДетал.State=Детал;
    Иной=False;
    cbИной.State=Иной;
    Реорг=False;
    cbРеорг.State=Реорг;
 fi;
 ОбновитьКодСчета;
 Оформление;
end;

Proc cbДетал_OnChange(Sender: String);
 if Детал:
    Реорг=False;
    cbРеорг.State=Реорг;
 fi;
 Оформление;
end;

Proc cbРеорг_OnChange(Sender: String);
 if Реорг:
    Инициализация;
    Template.Field="Реорг_Ном_РР_Отриц";
 fi;
 Оформление;
end;

Proc cbИной_OnChange(Sender: String);
 if Иной:
    Инициализация;
    Template.Field="Иной_Ном_ЗаявКР";
 fi;
 Оформление;
end;

Proc cbРаздел_OnChange(Sender: String);
 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;
 Оформление;
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 OnOpen(Create: Logical);
 FlagInit=True;
end;

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

Proc OnRead;
var Flag:L;
 ЗначНастр(False);
 if Run=nil:
    if НоваяЗапись:
       if Номер=0:
          ПоУмолчанию;
          ДатаДок=ToDay;
          ДатаПодписи=ДатаДок;
          ДатаПодписиИсп=ДатаДок;
          РБС=Раб.Бюджет2005.НашРекв;
          ЗаполнитьРБС(РБС);
          if Детал:
             ПБС=РБС;
             ПБС_Банк=РБС_Банк;
          fi;
          ДатаВД=ToDay;
       fi;
       ПолучитьНомер;
       Проводить=False;
       ВБанк=False;
       Учитывать=False;
       Аннул=False;
       НомРейс=0;
       ДатаРейс=1.1.100;
       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;
   else
    Try
     Run=Current(Run);
     Учитывать=Проверить;
    Finally
     Run=nil;
     Flag=ExecuteFuncL("OnVerify");
     EditorApply;
     Close;
    end;
 fi;
end;

Func OnVerify: Logical;
 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;
 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;
 Ассигн_Итог_Сум1=Итого1Сум1;
 Ассигн_Итог_Сум2=Итого1Сум2;
 Ассигн_Итог_Сум3=Итого1Сум3;
 ЛБО_Итог_Сум1=Итого2Сум1;
 ЛБО_Итог_Сум2=Итого2Сум2;
 ЛБО_Итог_Сум3=Итого2Сум3;
 ПОФ_Итог_Сум1=Итого3Сум1;
 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 НомерДок="":
    ПолучитьНомер;
 fi;
 inСоздан=Создан;
 inДетал=if(Детал=True,1,-1);
 Return True;
end;

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


Конец
