-- Шаблон создан мастером бланков
-- 30.11.2002 13:24:02
--
БланкСШаблоном "Электронная (сканирование) копия документа", Редактор РПО_СКАН_ДОК;

var Start:S="";

var RO:L;

var Страница:I;

var Док_:S=if(Док="","",НаимДок+" №"+НомДок+" от "+DateToString(ДатДок));
var exДок:S="";

var nГЭК:I;

var РедГЭК:S=if(RO,"","Сканировать \ Редактировать");
var СканГЭК:S=if(RO,"","Сканировать");
var СканГЭК2:S=if(Раб.Вспом.Сканер.enableDuplex and not RO,"Скан. две стороны","");
var ОбновитьГЭК:S="Обновить";
var ПросмотрГЭК:S="Просмотр";
var ГЭКвPDF:S="Выгрузить в PDF";
ПутьPDF:S;

var MaxЛистГЭК:I=30;
var ЛистГЭК[]:S;
var ФайлГЭК[]:S;
var storeY:I;

var ОбновФайл:S="Обновить";
var КопирФайл:S="Копировать все";
var УдалФайл :S=if(RO,"","Удалить все");

var A:S=if(RO,"","+");
var D:S=if(RO,"","-");
var openФайл :S="3";
var loadФайл :S=if(RO,"","q");
var loadПапка:S=if(RO,"","1");
var delФайл  :S=if(RO,"","r");
var copyФайл :S="<";

var УпрФайл:I;
var пп[]:I=$;
var ФайлCU[]:S;
var ФайлMU[]:S;
var ФайлШтамп[]:S;
var Файл[]:S;
var ФайлКмнт[]:S;

cbЗакрДок : Object;
btnУдалить: Object;

btnГЭК	: Object;
btnФайлы: Object;

S1: Section;
S2: Section;
S3: Section;
S4: Section;
S5: Section;
S6: Section;
S7: Section;

Picture1 : Object; Label1 : Object; Bevel1 : Object;
Picture2 : Object; Label2 : Object; Bevel2 : Object;
Picture3 : Object; Label3 : Object; Bevel3 : Object;
Picture4 : Object; Label4 : Object; Bevel4 : Object;
Picture5 : Object; Label5 : Object; Bevel5 : Object;
Picture6 : Object; Label6 : Object; Bevel6 : Object;
Picture7 : Object; Label7 : Object; Bevel7 : Object;
Picture8 : Object; Label8 : Object; Bevel8 : Object;
Picture9 : Object; Label9 : Object; Bevel9 : Object;
Picture10: Object; Label10: Object; Bevel10: Object;
Picture11: Object; Label11: Object; Bevel11: Object;
Picture12: Object; Label12: Object; Bevel12: Object;
Picture13: Object; Label13: Object; Bevel13: Object;
Picture14: Object; Label14: Object; Bevel14: Object;
Picture15: Object; Label15: Object; Bevel15: Object;
Picture16: Object; Label16: Object; Bevel16: Object;
Picture17: Object; Label17: Object; Bevel17: Object;
Picture18: Object; Label18: Object; Bevel18: Object;
Picture19: Object; Label19: Object; Bevel19: Object;
Picture20: Object; Label20: Object; Bevel20: Object;
Picture21: Object; Label21: Object; Bevel21: Object;
Picture22: Object; Label22: Object; Bevel22: Object;
Picture23: Object; Label23: Object; Bevel23: Object;
Picture24: Object; Label24: Object; Bevel24: Object;
Picture25: Object; Label25: Object; Bevel25: Object;
Picture26: Object; Label26: Object; Bevel26: Object;
Picture27: Object; Label27: Object; Bevel27: Object;
Picture28: Object; Label28: Object; Bevel28: Object;
Picture29: Object; Label29: Object; Bevel29: Object;
Picture30: Object; Label30: Object; Bevel30: Object;

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

var SelfCrd:S="РПО_СКАН_ДОК";
var SelfBln:S="РАБ.ВСПОМ.СКАН_ДОК";

var Run:L;
var Auto:L;
var inRO:L;
var inДата:D; 
var inДок:S; 
var inЗапись:I;
var inНаимДок:S; 
var inНомДок:S; 
var inДатДок:D; 
var inКмнт:S;
var inФильтр:S;

hКмнт:S;
hСканГЭК:S;

Timer1: Object;
--
--Процедуры и функции -------------			      
Proc Инициализация;
var Obj:Object;
var s,i,ii,n,r,rr,c,cc,x,BgColor:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..2 do
  if FindObject("S"+Str(if(s=2,6,s)),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
       Try
	BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
	if BgColor=coAqua or BgColor=coTeal:
	   Field=asString(Obj.Cell(r,c,CellContents,""));
	   if SearchInArray(BufField,Field,True)=-1:
	      n=InsertInArraySort(BufField,Field);
	      InsertInArray(BufColorBg,n,BgColor);
	   fi;
	fi;
       Except
       end;
      od;
     od;
  fi;
 od;
 ii=LengthOfArray(BufField);
 for i=1..ii do
  if BufColorBg[i]=coTeal: BufColorFo[i]=coWhite;
    |True: BufColorFo[i]=coBlack;
  fi;
 od;
 --
 x=60;
 for i=1..MaxЛистГЭК do
  if i=1 or i=7 or i=13 or i=19 or i=25: x=60; fi;
  if FindObject("Picture"+Str(i),Obj): Obj.Left=X; fi;
  if FindObject("Bevel"+Str(i),Obj): Obj.Left=X; fi;
  if FindObject("Label"+Str(i),Obj): Obj.Left=X;fi;
  x=x+310;
 od;
end;

Func РасчетГЭК:L;
var Y,i:I;
var Txt:S;
var Obj:Object;
var Flag,Vs:L;
 ClearVariable(ЛистГЭК);
 ClearVariable(ФайлГЭК);
 nГЭК=0;
 if Страница=1:
    if not Current=nil:
       nГЭК=Max(Раб.Вспом.Сканер.ЧитатьГЭК(SelfCrd,RecordToInteger(Current),"jpg",true),0);
    fi;
    Template.Field="Start";
    Y=AsInteger(S3.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    if AsLogical(btnГЭК.Enabled): ^False; fi;
 fi;
 CopyArray(Раб.Вспом.Сканер.ФайлГЭК,ФайлГЭК);
 y=AsInteger(S3.Row(1,RowTop,""));
 y=y+10;
 storeY=y;
 for i=1..MaxЛистГЭК do
  Txt="<нет изображения>";
  Flag=(Страница=1 and (nГЭК>=i or i=1));
  ЛистГЭК[i]=if(Flag,"Лист №"+Str(i),"");
  if FindObject("Picture"+Str(i),Obj):
     Vs=(Flag and not ФайлГЭК[i]="");
     if not AsLogical(Obj.Visible)=Vs: Obj.Visible=Vs; fi;
     if Vs:
	if not AsInteger(Obj.Top)=Y: Obj.Top=Y; fi;
	Try
	 Obj.LoadPicture(ФайлГЭК[i]);
	 Txt=" ";
	Except
	 Trace("Не удалось загрузить изображение листа №"+Str(i)+". ("+ФайлГЭК[i]+")");
	 Obj.Visible=False;
	 Txt="<файл не найден>";
	end;
     fi;
  fi;
  if FindObject("Bevel"+Str(i),Obj):
     if not AsLogical(Obj.Visible)=Flag: Obj.Visible=Flag; fi;
     if Flag:
	if not AsInteger(Obj.Top)=Y: Obj.Top=Y; fi;
     fi;
  fi;
  if FindObject("Label"+Str(i),Obj):
     if not AsLogical(Obj.Visible)=Flag: Obj.Visible=Flag; fi;
     if Flag:
	if not AsInteger(Obj.Top)=Y: Obj.Top=Y; fi;
	if not AsString(Obj.Caption)=Txt: Obj.Caption=Txt; fi;
     fi;
  fi;
  if i=6 : Y=Y+480;
    |i=12: Y=Y+480;
    |i=18: Y=Y+480;
    |i=24: Y=Y+480;
  fi;
 od;
 if not AsLogical(S3.Row(4 ,RowVisible,""))=(nГЭК>6):  S3.Row(4 ,RowVisible,nГЭК>6);  fi; --2 линия
 if not AsLogical(S3.Row(5 ,RowVisible,""))=(nГЭК>6):  S3.Row(5 ,RowVisible,nГЭК>6);  fi;
 if not AsLogical(S3.Row(6 ,RowVisible,""))=(nГЭК>6):  S3.Row(6 ,RowVisible,nГЭК>6);  fi;
 if not AsLogical(S3.Row(7 ,RowVisible,""))=(nГЭК>12): S3.Row(7 ,RowVisible,nГЭК>12); fi; --3 линия
 if not AsLogical(S3.Row(8 ,RowVisible,""))=(nГЭК>12): S3.Row(8 ,RowVisible,nГЭК>12); fi;
 if not AsLogical(S3.Row(9 ,RowVisible,""))=(nГЭК>12): S3.Row(9 ,RowVisible,nГЭК>12); fi;
 if not AsLogical(S3.Row(10,RowVisible,""))=(nГЭК>18): S3.Row(10,RowVisible,nГЭК>18); fi; --4 линия
 if not AsLogical(S3.Row(11,RowVisible,""))=(nГЭК>18): S3.Row(11,RowVisible,nГЭК>18); fi;
 if not AsLogical(S3.Row(12,RowVisible,""))=(nГЭК>18): S3.Row(12,RowVisible,nГЭК>18); fi;
 if not AsLogical(S3.Row(13,RowVisible,""))=(nГЭК>24): S3.Row(13,RowVisible,nГЭК>24); fi; --5 линия
 if not AsLogical(S3.Row(14,RowVisible,""))=(nГЭК>24): S3.Row(14,RowVisible,nГЭК>24); fi;
 if not AsLogical(S3.Row(15,RowVisible,""))=(nГЭК>24): S3.Row(15,RowVisible,nГЭК>24); fi;
 ^True;
end;

Proc РасчетФайл;
var Y:I;
 if Страница=2:
    Template.Field="Start";
    Y=AsInteger(S6.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    Exit;
 fi;
 ClearVariable(УпрФайл);
 ClearVariable(ФайлШтамп);
 ClearVariable(Файл);
 ClearVariable(ФайлКмнт);
 ClearVariable(ФайлCU);
 ClearVariable(ФайлMU);
 УпрФайл=Раб.Вспом.Файлы.ПоказСписок(SelfCrd,RecordToInteger(Current),SelfBln+".Файл",SelfBln+".ФайлКмнт",SelfBln+".ФайлШтамп","",SelfBln+".ФайлCU",SelfBln+".ФайлMU",0);
end;

Proc Оформление;
var s,y,r,rr,c,cc,n:i;
var Field,start_:S;
var RO_:L;
var Obj: Object;
 Template.Freeze(0,0);
 cbЗакрДок.Visible=Раб.Бюджет2005.Сетевая;
 btnУдалить.Enabled=not RO;
 for s=1..2 do
  if FindObject("S"+Str(if(s=2,6,s)),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       Try
	Field=asString(Obj.Cell(r,c,CellContents,""));
	n=SearchInArray(BufField,Field,True);
	if not n=-1:
	   RO_=((Field="НаимДок" or Field="НомДок" or Field="ДатДок") and not Док="") or ((Field="НаимДок" or Field="НомДок" or Field="ДатДок" or Field="Док_") and Run) or RO;
	   if RO_:
	      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,RO_);
	fi;
       Except
       end;
      od;
      if s=1 and Field="@Док": Obj.Row(r,RowVisible,Док=""); fi;
    od;
  fi;
 od;
 --
 RO_=IsReadOnly(SelfCrd) or ClosedModFob;
 S2.Cell(3,3,CellReadOnly,RO_); --РедГЭК
 S2.Cell(3,9,CellReadOnly,RO_); --ОбновитьГЭК
 S2.Cell(5,3,CellReadOnly,RO_); --ГЭКвPDF
 S2.Cell(5,5,CellReadOnly,RO_); --ПутьPDF
 S4.Cell(2,3,CellReadOnly,RO_); --ОбновФайл
 S4.Cell(2,5,CellReadOnly,RO_); --КопирФайл
 for c=6..14 do
  if not (c=8 or c=9 or c=11 or c=12 or c=13):
     S6.Cell(1,c,CellReadOnly,RO_);
  fi;
 od;
 --
 РасчетГЭК;
 --
 if FindObject("S3",Obj):
    start_=AsString(Template.Field);
    Template.Field="start";
    y=AsInteger(Obj.Row(1,RowTop,""));
    Template.Freeze(1,y);
    Template.Field=start_;
 fi;
end;

Proc ВывестиСтраницу;
 Template.Freeze(0,0);
 Template.Field="start";
 --ГЭК
 if not AsLogical(S2.Visible)=(Страница=1):
    S2.Visible=Страница=1;
    S3.Visible=Страница=1;
 fi;
 РасчетГЭК;
 btnГЭК.Enabled=not Страница=1;
 --Прикрепленные файлы
 if not AsLogical(S4.Visible)=(Страница=2):
    S4.Visible=Страница=2;
    S5.Visible=Страница=2;
    S6.Visible=Страница=2;
    S7.Visible=Страница=2;
 fi;
 btnФайлы.Enabled=not Страница=2;
 РасчетФайл;
end;

Func ПолучПапкуКлючГЭК(sp:s):S;
var OWA:I;
var prefix,Папка_,Ключ_:S;
 if Док="РПО_Договор_Признак":
    OWA=OpenWorkArea(Док,"","UKey={"+Str(Запись)+"}");
    Try
     Try
      Папка_=if(not GetFieldS(OWA,1,"Договор.Настр.Общ_Справ1")="" and GetFieldL(OWA,1,"Договор.Настр.Общ_Справ_ГЭК1"),Up(GetFieldS(OWA,1,"Договор.Общ_Призн1"))+"\","");
      Ключ_=if(not GetFieldS(OWA,1,"Договор.Настр.Общ_Справ1")="" and GetFieldL(OWA,1,"Договор.Настр.Общ_Справ_ГЭК1"),Up(GetFieldS(OWA,1,"Договор.Общ_Призн1")),"");
      Папка_=Раб.Бюджет2005.Объединить(Папка_,if(not GetFieldS(OWA,1,"Договор.Настр.Общ_Справ2")="" and GetFieldL(OWA,1,"Договор.Настр.Общ_Справ_ГЭК2"),Up(GetFieldS(OWA,1,"Договор.Общ_Призн2"))+"\",""),"\");
      Ключ_=Раб.Бюджет2005.Объединить(Ключ_,if(not GetFieldS(OWA,1,"Договор.Настр.Общ_Справ2")="" and GetFieldL(OWA,1,"Договор.Настр.Общ_Справ_ГЭК2"),Up(GetFieldS(OWA,1,"Договор.Общ_Призн2")),""),"#");
     Except
     end;
    Finally
     CloseWorkArea(OWA);
    end;
   |Док="РПО_ДО" or Док="РПО_ДО_ЗАЧЕТ_АВАНСА":
    OWA=OpenWorkArea(Док,"","UKey={"+Str(Запись)+"}");
    Try
     Try
      if Док="РПО_ДО":
	 if GetFieldL(OWA,1,"УчетБО"): prefix=""; else prefix="Договор."; fi;
	else
	 if GetFieldL(OWA,1,"Аванс.УчетБО"): prefix="Аванс."; else prefix="Аванс.Договор."; fi;
      fi;
      Папка_=if(not GetFieldS(OWA,1,prefix+"Настр.Общ_Справ1")="" and GetFieldL(OWA,1,prefix+"Настр.Общ_Справ_ГЭК1"),Up(GetFieldS(OWA,1,prefix+"Общ_Призн1"))+"\","");
      Ключ_=if(not GetFieldS(OWA,1,prefix+"Настр.Общ_Справ1")="" and GetFieldL(OWA,1,prefix+"Настр.Общ_Справ_ГЭК1"),Up(GetFieldS(OWA,1,prefix+"Общ_Призн1")),"");
      Папка_=Раб.Бюджет2005.Объединить(Папка_,if(not GetFieldS(OWA,1,prefix+"Настр.Общ_Справ2")="" and GetFieldL(OWA,1,prefix+"Настр.Общ_Справ_ГЭК2"),Up(GetFieldS(OWA,1,prefix+"Общ_Призн2"))+"\",""),"\");
      Ключ_=Раб.Бюджет2005.Объединить(Ключ_,if(not GetFieldS(OWA,1,prefix+"Настр.Общ_Справ2")="" and GetFieldL(OWA,1,prefix+"Настр.Общ_Справ_ГЭК2"),Up(GetFieldS(OWA,1,prefix+"Общ_Призн2")),""),"#");
     Except
     end;
    Finally
     CloseWorkArea(OWA);
    end;
   |True:
    OWA=OpenWorkArea(Док,"","UKey={"+Str(Запись)+"}");
    Try
     Try
      Ключ_=GetFieldS(OWA,1,"РПО_Ключ");
     Except
     end;
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 if Папка_="": Папка_=" "; fi;
 ^Папка_+sp+Ключ_;
end;

Proc Вызвать(aRO:L; aДата:D; aДок:S; aЗапись:Record; aНаимДок:S; aНомДок:S; aДатДок:D; aКмнт:S; aModal:L; aUKey:Record);
 inRO=aRO;
 inДата=aДата;
 inДок=aДок;
 inЗапись=RecordToInteger(aЗапись);
 inНаимДок=aНаимДок;
 inНомДок=aНомДок;
 inДатДок=aДатДок;
 inКмнт=aКмнт;
 Run=True;
 OpenBlank(SelfBln,aModal,aUKey);
end;

Proc Вызвать2(aRO:L; aДата:D; aДок:S; aЗапись:Record; aНаимДок:S; aНомДок:S; aДатДок:D; aКмнт:S; aModal:L; aUKey:Record; aФильтр:S);
 inRO=aRO;
 inДата=aДата;
 inДок=aДок;
 inЗапись=RecordToInteger(aЗапись);
 inНаимДок=aНаимДок;
 inНомДок=aНомДок;
 inДатДок=aДатДок;
 inКмнт=aКмнт;
 inФильтр=aФильтр;
 Run=True;
 OpenBlank(SelfBln,aModal,aUKey);
end;

Func Стереть(UKey: Record):L;
var OWA:I;
 if Раб.Вспом.Сканер.УдалитьГЭК(SelfCrd,RecordToInteger(UKey),"") and Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(UKey),"*"):
    OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(UKey));
    Try
     BeginChanging(OWA);
     Try
      DeleteRecord(OWA,1);
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 ^True;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func Док_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...","РПО_Договор","НомерДок","Номер документа","Рег and not НеДейств");
 if not Rec=nil:
    Rec=GetCardFieldR("РПО_Договор",Rec,"Признак_Ref");
    if not RecordExists("РПО_Договор_Признак",Rec): Message("Запись признака (Договор."+RecordToString(Rec)+") не найдена",mtError); ^False; fi;
    Док="РПО_Договор_Признак";
    Запись=RecordToInteger(Rec);
    НаимДок=GetCardFieldS(Док,Rec,"Договор.НаимДок.Наим");
    НомДок=GetCardFieldS(Док,Rec,"Договор.НомерДок");
    ДатДок=GetCardFieldD(Док,Rec,"Договор.ДатаДок");
    Оформление;
 fi;
 Return False;
end;

Func exДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Bln:S;
var Rec: Record;
 Template.HideEditor(False);
 if Док="": Док_OnEnter(AsString(Template.Field),AsInteger(Template.Frame)); fi;
 if Док="РПО_ДОГОВОР":
    Rec=GetCardFieldR("РПО_Договор_Признак",IntegerToRecord(Запись),"Договор");
    Bln="ИНФО.ДОГОВОР";
   |Док="РПО_ДО":
    Rec=IntegerToRecord(Запись);
    Bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО";
   |Док="РПО_ДО_ЗАЧЕТ_АВАНСА":
    Rec=IntegerToRecord(Запись);
    Bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО_ЗАЧЕТ_АВАНСА";
   |Док="РПО_БУХСПРАВКА":
    Rec=IntegerToRecord(Запись);
    Bln="ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА";
   |True:
    Message("Все так сложно все так запутано, но разбираться некогда брат ...",mtError);
    ^Cur;
 fi;
 if not Rec=nil:
    if not RecordExists(Док,Rec): Message("Запись ("+Док+"."+RecordToString(Rec)+") не найдена",mtError); ^Cur; fi;
    if ModalMode and isBlankOpen(Bln): Message("Бланк "+bln+" уже открыт. Для возврата закройте текущий бланк",mtWarning); ^Cur; fi;
    if isBlankOpen(Bln): Close(bln); fi;
    OpenBlank(Bln,True,Rec);
 fi;
 Return Cur;
end;

Proc Док_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(Док);
 ClearVariable(Запись);
 Оформление;
end;

Proc Кмнт_OnExit(FieldName: String; Iter: Integer);
 hКмнт=Кмнт;
end;

Func Кмнт_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Раб.Вспом.Основание.Выполнить("РПО_Скан_Док."+Field);
 if not tmp="" then 
    PutVariableS(Field,tmp);
    if Field="Кмнт":
       hКмнт=tmp;
    fi;
 fi;
 Return Cur;
end;

Func РедГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 hСканГЭК=FieldName;
 tmp=ПолучПапкуКлючГЭК("|");
 if not РПО_Ключ=Trim(ExtractWord(2,tmp,"|")):
    РПО_Ключ=Trim(ExtractWord(2,tmp,"|"));
 fi;
 if not RO:
    if not CurrentState=CrdusUnmodified:
       EditorApply;
    fi;
 fi;
 tmp=Trim(ExtractWord(1,tmp,"|"));
 if not tmp="" and not SubStr(tmp,Length(tmp),1)="\": tmp=tmp+"\"; fi;
 Раб.Вспом.Сканер.extПапка=tmp;
 Раб.Вспом.Сканер.vКлюч=РПО_Ключ;
 Раб.Вспом.Сканер.Exec=if(FieldName="СканГЭК" or FieldName="СканГЭК2","btnСканСлед_onClick","");
 Раб.Вспом.Сканер.ExecSender=if(FieldName="СканГЭК":"btnСканСлед"|FieldName="СканГЭК2":"btnСканСлед2"|True:"");
-- Раб.Вспом.Сканер.OverrideIntent=Раб.Вспом.Сканер.ColorIntent;
 Раб.Вспом.Сканер.Вызвать("Сканирование документа",SelfCrd,RecordToInteger(Current),"",not FieldName="РедГЭК",FieldName="РедГЭК");
 РасчетГЭК;
 Return False;
end;

Func ОбновГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетГЭК;
 Return False;
end;

Func ГЭКвPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var nn,i:i;
var File:S;
 nn=Раб.Вспом.Сканер.ЧитатьГЭК(SelfCrd,RecordToInteger(Current),"jpg",True);
 if nn=0: Message("Нет данных для формирования PDF"); ^False; fi;
 if ПутьPDF="":
    if ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF")=cmCancel: ^False; fi;
    File=ПутьPDF;
    ПутьPDF="";
   else
    File=ПутьPDF;
 fi;
 File=Раб.Бюджет2005.Контроль2Слэш(File+"\"+НаимДок+" №"+Раб.Договор.ConvertStr(НомДок)+" от "+Раб.Договор.ConvertStr(DateToString(ДатДок))+"."+Str(RecordToInteger(Current))+".pdf");
 if ExistFile(File):
    if EnqOkCancel("Файл "+File+" уже существет. Перезаписать ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 i=Раб.Вспом.Сканер.JpegToPdf(File,False);
 if i=1: 
    ExecuteProgram('"'+File+'"'); 
   else
    Message("Ошибка создания PDF файла ("+Str(i)+")");
 fi;
 Return False;
end;

Func ПутьPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var i:I;
 if AsLogical(S1.Cell(5,3,CellReadOnly,"")):
    i=ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF");
    ^False;
 fi;
 Return True;
end;

Func ПутьPDF_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var i:i;
 Template.HideEditor(False);
 i=ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF");
 Return Cur;
end;

Proc ПросмотрГЭК_OnClick(Row: Integer; Col: Integer; Double: Logical);
 РедГЭК_OnEnter(AsString(Template.Field),AsInteger(Template.Frame));
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if RO: ^False; fi;
 Iter=InsertFrame(УпрФайл,УпрФайл+1);
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 if RO: ^False; fi;
 if not Файл[Iter]="":
    if EnqOkCancel("Файл '"+Файл[Iter]+"' будет удален, вы уверены ?",mtWarning)=cmCancel: ^False; fi;
    Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(Current),Файл[Iter]);
 fi;
 DeleteFrame(УпрФайл,Iter);
 Return False;
end;

Func ОбновФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетФайл;
 Return False;
end;

Func КопирФайл_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
 РасчетФайл;
 if УпрФайл=0: Message("Нет данных для копирования",mtError); ^False; fi;
 i=Раб.Вспом.Файлы.Копировать(SelfCrd,RecordToInteger(Current),"",0,"","*","");
 if i>=0:
    Message("Скопировано файлов "+Str(i)+" из "+Str(УпрФайл));
 fi;
 Return False;
end;

Func УдалФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 if RO: ^False; fi;
 РасчетФайл;
 if EnqOkCancel("Все файлы будет удалены, Вы уверены ?",mtWarning)=cmCancel: ^False; fi;
 Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(Current),"*");
 РасчетФайл;
 Return False;
end;

Func Файл_OnEnter(FieldName: String; Iter: Integer): logical;
var ret:i;
var vПапка,vКлюч,tmp:S;
 if Файл[Iter]="":
    if RO: ^False; fi;
    tmp=ПолучПапкуКлючГЭК("|");
    РПО_Ключ=Trim(ExtractWord(2,tmp,"|"));
    vПапка=Trim(ExtractWord(1,tmp,"|"));
    vКлюч=РПО_Ключ;
    EditorApply;
    ret=Раб.Вспом.Файлы.Добавить(SelfCrd,RecordToInteger(Current),vПапка,"",ФайлКмнт[Iter],vКлюч);
    if ret>0:
       Раб.Вспом.Файлы.Показ(IntegerToRecord(ret),SelfBln+".Файл["+str(Iter)+"]",SelfBln+".ФайлКмнт["+str(Iter)+"]",SelfBln+".ФайлШтамп["+str(Iter)+"]","",SelfBln+".ФайлCU["+str(Iter)+"]",SelfBln+".ФайлMU["+str(Iter)+"]");
    fi;
   else
    Раб.Вспом.Файлы.Вызвать(SelfCrd,RecordToInteger(Current),Файл[Iter],"");
 fi;
 Return False;
end;

Proc Файл_OnExit(FieldName: String; Iter: Integer);
 ОбновФайл_OnEnter(FieldName,Iter);
end;

Proc Файл_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 if not Файл[Iter]="":
    Раб.Вспом.Файлы.Вызвать(SelfCrd,RecordToInteger(Current),Файл[Iter],"");
 fi;
end;

Proc ФайлКмнт_OnExit(FieldName: String; Iter: Integer);
var ret:i;
var vПапка,vКлюч,tmp:S;
 if not Файл[Iter]="":
    tmp=ПолучПапкуКлючГЭК("|");
    РПО_Ключ=Trim(ExtractWord(2,tmp,"|"));
    vПапка=Trim(ExtractWord(1,tmp,"|"));
    vКлюч=РПО_Ключ;
    EditorApply;
    ret=Раб.Вспом.Файлы.Обновить(SelfBln,RecordToInteger(Current),vПапка,Файл[Iter],ФайлКмнт[Iter],vКлюч,if(FieldName="loadФайл","","-1"));
    if ret>0:
       Раб.Вспом.Файлы.Показ(IntegerToRecord(ret),SelfBln+".Файл["+str(Iter)+"]",SelfBln+".ФайлКмнт["+str(Iter)+"]",SelfBln+".ФайлШтамп["+str(Iter)+"]","",SelfBln+".ФайлCU["+str(Iter)+"]",SelfBln+".ФайлMU["+str(Iter)+"]");
    fi;
 fi;
end;

Func openФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 Файл_OnEnter(FieldName,Iter);
 Return False;
end;

Func loadФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 if RO: ^False; fi;
 if Файл[Iter]="":
    Файл_OnEnter(FieldName,Iter);
   else
    ФайлКмнт_OnExit(FieldName,Iter);
 fi;
 Return False;
end;

Func loadПапка_OnEnter(FieldName: String; Iter: Integer): logical;
var ret:i;
var vПапка,vКлюч,tmp:S;
 if RO: ^False; fi;
 tmp=ПолучПапкуКлючГЭК("|");
 РПО_Ключ=Trim(ExtractWord(2,tmp,"|"));
 vПапка=Trim(ExtractWord(1,tmp,"|"));
 vКлюч=РПО_Ключ;
 EditorApply;
 ret=Раб.Вспом.Файлы.ЗагрузПапку(SelfCrd,RecordToInteger(Current),vПапка,if(Файл[Iter]="",ФайлКмнт[Iter],""),vКлюч,50);
 РасчетФайл;
 Message("Успешно загружено файлов "+Str(ret)+" из "+Str(LengthOfArray(Раб.Бюджет2005.Dir)));
 Return False;
end;

Func delФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 if RO: ^False; fi;
 if not Файл[Iter]="":
    if EnqOkCancel("Файл '"+Файл[Iter]+"' будет удален, вы уверены ?",mtWarning)=cmCancel: ^False; fi;
    Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(Current),Файл[Iter]);
    РасчетФайл;
 fi;
 Return False;
end;

Func copyФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 Раб.Вспом.Файлы.Копировать(SelfCrd,RecordToInteger(Current),"",0,"",Файл[Iter],"");
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnOK_onEnter (Obj:S);
 EditorApply;
end;

Proc btnОтмена_onEnter (Obj:S);
 if EnqOkCancel("Отменить внесенные изменения ?",mtWarning)=cmOk:
    РПО_Ключ=РПО_Ключ;
    EditorCancel;
 fi;
end;

Proc cbЗакрДок_OnChange(Sender: String);
var OWA,n,nn:I;
 OWA=OpenWorkArea("","","ДОК='"+SelfCrd+"' and ЗАПИСЬ="+Str(RecordToInteger(Current))+" and not ClosedModFob="+if(ClosedModFob,"True","False"));
 Try
   nn=Records(OWA);
   if not nn=0:
      BeginChanging(OWA,True);
      Try
       for n=1..nn do
	n=PutFieldL(OWA,n,"ClosedModFob",ClosedModFob);
       od;
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
   fi;
 Finally
  CloseWorkArea(OWA);
 end;
 EditorApply;
 Оформление;
end;

Proc Label_OnClick(Sender: String);
var ТекЛист:I;
 ТекЛист=Int(SubStr(Sender,6,2));
 if ExistFile(ФайлГЭК[ТекЛист]):
    ExecuteProgram('"'+ФайлГЭК[ТекЛист]+'"');
   else
    if ФайлГЭК[ТекЛист]="":
       Message("Документ не был отсканирован",mtWarning);
      else
       Message("Файл "+ФайлГЭК[ТекЛист]+" не найден",mtError);
    fi;
 fi;
end;

Proc btnУдалить_OnClick(Sender: String);
 if EnqOkCancel("Данные будут удалены, вы уверены ?",mtWarning)=cmCancel: Exit; fi;
 EditorCancel;
 if Стереть(Current):
    Message("Документ успешно удален");
    Close;
 fi;
end;

Proc btnЗакрыть_onEnter(Sender: String);
 Close;
end;

Proc Страница_onClick(Sender: String);
 if Sender="btnГЭК"  : Страница=1;
   |Sender="btnФайлы": Страница=2;
 fi;
 ВывестиСтраницу;
end;

Proc OnTimer(Sender: String);
 Timer1.Active=False;
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen (Create:L);
 FlagInit=True;
end;

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

Proc onRead;
 Страница=Max(1,Страница);
 if CurrentState=CrdusInserted:
    Страница=1;
    ClosedModFob=False;
    if Run:
       RO=inRO;
       Дата=inДата;
       Док=inДок;
       Запись=inЗапись;
       НаимДок=inНаимДок;
       НомДок=inНомДок;
       ДатДок=inДатДок;
       Кмнт=inКмнт;
       Фильтр=inФильтр;
       if Auto:
	  Auto=False;
	  if hСканГЭК="": hСканГЭК="СканГЭК"; fi;
	  РедГЭК_OnEnter(hСканГЭК,1);
	  EditorApply;
	  Timer1.Active=True;
       fi;
    fi;
   else
    if Run:
       RO=inRO;
      else
       RO=ClosedModFob;
    fi;
--    if not УпрФайл=0 or not nГЭК=0:
--	 if Страница=1 and nГЭК=0: Страница=2;
--	   |Страница=2 and УпрФайл=0: Страница=1;
--	 fi;
--    fi;
 fi;
 if not FlagInit: Оформление; ВывестиСтраницу; fi;
end;

Func OnVerify: Logical;
 if Дата=1.1.100: Message("Заполните дату",mtError); Template.Field="Дата"; ^False; fi;
 if Кмнт="": Message("Заполните комментарий",mtError); Template.Field="Кмнт"; ^False; fi;
 Return True;
end;

Proc OnCancel;
 Оформление;
end;

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





Конец
