-- Шаблон создан мастером бланков
-- 07.04.2006 16:48:01
--
БланкСШаблоном "Пункт генерального разрешения", Редактор РПО_ПГР;
var FlagEdit:L=[False];

var ЭтоГруппа:L;
var НоваяЗапись:L=(CurrentState=crdusInserted);

var Загл:S=if(GroupDoc=nil,"Пункт генерального разрешения","Детализация пункта генерального разрешения");

var Признак_:S=Признак;

var SelfCrd:S="РПО_ПГР";

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

var Buf[]:S;
var BufКР[]:S;
var BufНаправ[]:S;

var StoreКД:S;
var StoreЭКД:S;
var StoreКР:S;
var StoreЭКР:S;


S1: Section;
--
--Процедуры и функции ------------- 
Proc Оформление;
 if not GroupDoc=nil:
    S1.Cell(1,3,CellFontColor,coBlack);    S1.Cell(1,5,CellFontColor,coBlack);
    S1.Cell(1,3,CellBgColor,coTransparent);S1.Cell(1,5,CellBgColor,coTransparent);
    S1.Cell(1,3,CellReadOnly,True);	   S1.Cell(1,5,CellReadOnly,True);
   else
    S1.Cell(1,3,CellFontColor,coWhite);    S1.Cell(1,5,CellFontColor,coWhite);
    S1.Cell(1,3,CellBgColor,coTeal);	   S1.Cell(1,5,CellBgColor,coTeal);
    S1.Cell(1,3,CellReadOnly,False);	   S1.Cell(1,5,CellReadOnly,False);
 fi;
end;

Proc НеПустаяСтрока;
 if Позиции_КР<1: InsertFrame(Позиции_КР,1); fi;
end;

Func ПризнакИспользуется(Voc:S):L;
var n,ns,z:i;
var tmp:S;
var OWA,Nr:I;
var Rec:Record;
 Refresh;
 if ЭтоГруппа:
    OWA=OpenWorkArea(SelfCrd,"","GROUPDOC="+RecordToString(Current));
    Try
     Nr=Records(OWA);
     for z=1..Nr do
      tmp=GetFieldS(OWA,z,"Признак");
      Hint("Проверка группы '"+Признак+"', "+tmp);
      Rec=GetRecordKey(OWA,z);
      ns=RecSignsCount(SelfCrd,Rec);
      for n=1..ns do
       tmp=RecSign(SelfCrd,Rec,n);
       if SignUsed(tmp): ^True; fi;
      od;
     od;
    Finally
     CloseWorkArea(OWA);
    end;
   else
    ns=RecSignsCount(SelfCrd,Current);
    for n=1..ns do
     tmp=RecSign(SelfCrd,Current,n);
     if Match(tmp,Voc):
	if SignUsed(tmp): ^True; fi;
     fi;
    od;
 fi;
 ^False;
end;

Func Проверить:L;
var Iter,Iter2:I;
 if Признак="": 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;
 Iter=1;
 While Iter<=Позиции_КР do
  if Позиции_КР[Iter].Направ="" and
     Позиции_КР[Iter].КР="" and
     Позиции_КР[Iter].ЭКР="": DeleteFrame(Позиции_КР,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 НеПустаяСтрока;
 for Iter=1..Позиции_КР do
  --if Позиции_КР[Iter].Направ="": Message("Заполните направление использования",mtError); Template.Field="Направ"; Template.Frame=Iter; ^False; fi;
  if Позиции_КР[Iter].КР="": Message("Заполните классификацию расходов",mtError); Template.Field="КР"; Template.Frame=Iter; ^False; fi;
  if Позиции_КР[Iter].ЭКР="": Message("Заполните экономическую классификацию расходов",mtError); Template.Field="ЭКР"; Template.Frame=Iter; ^False; fi;
  for Iter2=Iter+1..Позиции_КР do
   if Позиции_КР[Iter].КР=Позиции_КР[Iter2].КР and Позиции_КР[Iter].ЭКР=Позиции_КР[Iter2].ЭКР: Message("Повторный ввод классификации",mtError); Template.Field="ЭКР"; Template.Frame=Iter2; ^False; fi;
  od;
 od;
 ^True;
end;

Proc ПоУмолчанию (Next:Record; Prev:Record);
var OWA,OA,n,nr:i;
 if Next=nil: 
    ClearVariable(BufКР);
    ClearVariable(BufНаправ);
    OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Prev));
    Try
     Ист=GetFieldS(OWA,1,"Ист"); КД=GetFieldS(OWA,1,"КД"); ЭКД=GetFieldS(OWA,1,"ЭКД");
     OA=OpenArray(OWA,1,"Позиции_КР","КР;ЭКР");
     nr=Records(OA);
     for n=1..nr do
      BufНаправ[n]=GetFieldS(OA,n,"Направ");
      BufКР[n]=GetFieldS(OA,n,"КР")+"."+GetFieldS(OA,n,"ЭКР");
     od;
     CloseWorkArea(OA);
    Finally
     CloseWorkArea(OWA);
    end;
    Exit; 
 fi;
 if Prev=nil:
    Prev=Next;
   else
    Prev=Next;
    Next=GetCardFieldR(SelfCrd,Prev,"GroupDoc");
 fi;
 ПоУмолчанию(Next,Prev);
end;

Proc СписокКР(Iter:I);
var n,nn:i;
 ClearVariable(Buf);
 nn=LengthOfArray(BufКР);
 if nn=0: ПоУмолчанию(GroupDoc,nil); nn=LengthOfArray(BufКР); fi;
 for n=1..nn do
  Buf[n]=BufКР[n]+" --"+BufНаправ[n];
 od;
 n=Alternate("Классификация расходов",Buf,-1,1);
 if n=0: Exit; fi;
 Позиции_КР[Iter].Направ=BufНаправ[n];
 Позиции_КР[Iter].КР=Раб.Бюджет2005.ВзятьКодКБК(BufКР[n],"ФКР","КБК",False);
 Позиции_КР[Iter].ЭКР=Раб.Бюджет2005.ВзятьКодКБК(BufКР[n],"ФКР","КОСГУ",False);
end;

Proc Наследование (GD: Record; vКД:S; vЭКД:S);
var Child,nr,n:i;
 Child=OpenWorkArea(SelfCrd,"","GroupDoc="+RecordToString(GD));
 Try
  Nr=Records(Child);
  Try
   for n=1..nr do
    BeginChanging(Child);
    n=PutFieldS(Child,n,"КД",vКД);
    n=PutFieldS(Child,n,"ЭКД",vЭКД);
    EndChanging(Child);
    if GetIsGroup(Child,n): Наследование(GetRecordKey(Child,n),GetFieldS(Child,n,"КД"),GetFieldS(Child,n,"ЭКД")); fi;
   od;
  Except
   CancelChanging(Child);
   Raise;
  end;
 Finally
  CloseWorkArea(Child);
 end;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func Признак_onEnter (Field:S; Iter:I):L;
 if Признак<>"":
    if ПризнакИспользуется("*"): Message("Код '"+Признак+"' используется в проводках."+Chr(13)+"Изменение невозможно!"); ^False; fi;
 fi;
 FlagEdit=True;
 ^True;
end;

Func Признак_onValidate (Field:S; Iter:I; Value:S):L;
var R:L;
 FlagEdit=True;
 R=ValidSign(Value);
 if R=False: Раб.Бюджет.ПроверитьПризнак(Value); 
   else
    if GroupDoc=nil and not Value="0" and Int(Value)=0: Message("Недопустимый код",mtError); ^False; fi;
    Признак=Value;
 fi;
 ^R;
end;

Proc Признак_onExit (Field:S; Iter:I);
 if FlagEdit: FlagEdit=False; Exit; fi;
 if Признак<>"":
    if ПризнакИспользуется("*"): Message("Код '"+Признак+"' используется в проводках."+Chr(13)+"Удаление невозможно!"); Exit; fi;
 fi;
 Признак="";
end;

Func КД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("КД.*",False,False,StoreКД);
 if tmp="": ^False; fi;
 StoreКД=tmp;
 КД=SubStr(tmp,4,255);
 Return False;
end;

Func ЭКД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection(Раб.Бюджет2005.МаскаДоходКОСГУ+"|КОСГУ.000",False,False,StoreЭКД);
 if tmp="": ^False; fi;
 StoreЭКД=tmp;
 ЭКД=SubStr(tmp,7,255);
 Return False;
end;

Func A_onEnter(FieldName: String; Iter: Integer): logical;
 Iter=InsertFrame(Позиции_КР,Iter+1);
 Return False;
end;

Func D_onEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Позиции_КР,Iter);
 НеПустаяСтрока;
 Return False;
end;

Func КР_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if GroupDoc=nil:
    tmp=AnaElection("ФКР.*",False,False,StoreКР);
    if tmp="": ^False; fi;
    StoreКР=tmp;
    Позиции_КР[Iter].КР=SubStr(tmp,5,255);
   else
    СписокКР(Iter);
 fi;
 Return False;
end;

Func ЭКР_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if GroupDoc=nil:
    tmp=AnaElection(Раб.Бюджет2005.МаскаРасхКОСГУ+"|КОСГУ.000",False,False,StoreЭКР);
    if tmp="": ^False; fi;
    StoreЭКР=tmp;
    Позиции_КР[Iter].ЭКР=SubStr(tmp,7,255);
   else
    СписокКР(Iter);
 fi;
 if Позиции_КР[Iter].Направ="":
    Позиции_КР[Iter].Направ=Name_A(tmp);
 fi;

 Return False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnСохранить_OnClick(Sender: String);
 EditorApply;
end;

Proc btnОтменить_OnClick(Sender: String);
 EditorCancel;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnRead;
 ЭтоГруппа=IsCardGroup(SelfCrd,Current);
 if НоваяЗапись:
    Признак="";
    if not GroupDoc=nil: ПоУмолчанию(GroupDoc,nil); fi;
 fi;
 НеПустаяСтрока;
 Оформление;
end;

Func OnVerify: Logical;
 if not Проверить: ^False; fi;
 Признак=Up(Признак);
 if ЭтоГруппа and not НоваяЗапись: Наследование(Current,КД,ЭКД); fi;
 Return True;
end;
--Обработчики событий шаблона -----
--
Конец
