-- Шаблон создан мастером бланков
-- 07.08.2014 14:07:30
--
БланкСШаблоном "Обеспечение исполнения обязательств", Редактор РПО_ОБЕСП_ИСПОЛ_ОБЯЗ;

var FlagEdit:L;

var УпрНастр:L;
var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var extКлюч:S;
var hСчет:S;
var hБенефициар_Рекв: Record;
var hБенефициар_Банк: Record;

var НастрGUID:S;

var Страница;

--var МаскаСч:S=if(Match(Вид,"ДС!"),"*.3.304.01.*","ЗАБ.10!"); --тута падеж скота (бланк не открыт)
var МаскаСч:S;
var ИсклПризн:S="ЗАБ10.*|СВР.*|ДОГОВОР.*|К.*";

var Номер_:I=Номер;
var Вид_:S=if(Вид="ДС" or Вид="ДС.ОИО":"Денежные средства, обеспечение исполнения обязательства"|Вид="ДС.ОБЗ":"Денежные средства, обеспечение заявки"|Вид="ЗАДАТОК":"Задаток"|Вид="ЗАЛОГ":"Залог"|Вид="БГ":"Банковская гарантия"|Вид="ПОРУЧ":"Поручительство"|Вид="ИНОЕ":"Иное обеспечение"|True:"");

var Счет_:S=if(Счет="" and Match(Вид,"ДС!"):""|Счет="" and not Match(Вид,"ДС!"):"ЗАБ.10"|True:Счет);
var Призн_:S=Призн;

var txtОбяз:s=if(Вид="ДС.ОБЗ","Заявка","Обязательство");
var txtНаимОбяз:s=if(Вид="ДС.ОБЗ","Наим. заявки","Наим. обязательства");
var txtНомерОбяз:s=if(Вид="ДС.ОБЗ","Номер заявки","Номер обязательства");
var txtПринципал:S=if(Match(Вид,"ДС!"),"Поставщик/исполнитель","Принципал");

var Гарант_Контроль:S;

var hВид:S;
var hПризн:S;

var СканГЭК:S="Сканирование";
var ОбновГЭК:S="Обновить";
var ГЭКвPDF:S="Выгрузить в PDF";
ПутьPDF:S;

var УпрГЭК:I;
var пп      []:I=$;
var ГЭКДат []:D;
var ГЭКЛист[]:S;
var ГЭККмнт[]:S;
var ГЭКCU  []:S;
var ГЭКMU  []:S;
var ГЭКRec []:Record;

var ОбновДвиж:S="Обновить";

var УпрДок:I;
var ДокCU[]:S;
var ДокMU[]:S;
var ДокОпр[]:D;
var ДокНаим[]:S;
var ДокНом[]:S;
var ДокДат[]:D;
var ДокКмнт[]:S;
var ДокТекРед[]:S;
var ДокTr[]:I;
var ДокRec[]:Record;
var ДокCrd[]:S;

var ф0504054  :S="Многографная карточка";
var ф0504051  :S="Карточка учета средств и расчетов";
var ф0504054_2:S=ф0504054;
var ф0504051_2:S=ф0504051;
var ОтчПров   :S="Отчет по проводкам";
var ОтчПров_2 :S=ОтчПров;
var Отч       :S="Отчет";

var inВид            :S;
var inСум            :N;
var inОбяз_Призн     :S;
var inОбяз_Наим      :S;
var inОбяз_Ном       :S;
var inОбяз_Дат       :D;
var inНомИзв         :S;
var inСчет           :S;
var inПризн          :S;
var inСодерж         :S;
var inКмнт           :S;
var inБенефициар_Рекв:Record;
var inПринципал_Рекв :Record;
var Run              :L;
var Call             :S;
var CallParam        :S;

btnOK      :Object;
btnОтмена  :Object;
btnНастр   :Object;
btnЗакрыть :Object;
btnУдалить :Object;
btnПринять :Object;
btnСписать :Object;
btnВозврат :Object;

btnСвед  :Object;
btnГЭК   :Object;
btnДвиж  :Object;
btnСервис:Object;

S1: Section;
S2: Section;
S3: Section;
S4: Section;
S5: Section;
S6: Section;
S7: Section;
S8: Section;
var nS:I=1;

var SelfCrd:S="РПО_ОБЕСП_ИСПОЛ_ОБЯЗ";
var SelfBln:S="ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ";
var SelfRec:Record;

var Buf[]:S;

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

var ЗВЗ_ДолжнРук:S;
var ЗВЗ_ФИОРук:S;
var ЗВЗ_ДолжнБух:S;
var ЗВЗ_ФИОБух:S;

var RetRec:Record;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("extКлюч","S");
    Раб.Настр.Добавить("hСчет","S");
    Раб.Настр.Добавить("hБенефициар_Рекв","R");
    Раб.Настр.Добавить("hБенефициар_Банк","R");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
end;

Proc ОткрНастр (Flag:L);
 btnOK.Visible=not Flag;
 btnОтмена.Visible=not Flag;
 btnНастр.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 btnУдалить.Visible=not Flag;
 btnПринять.Visible=not Flag;
 btnСписать.Visible=not Flag;
 btnСвед.Visible=not Flag;
 btnГЭК.Visible=not Flag;
 btnДвиж.Visible=not Flag;
 btnСервис.Visible=not Flag;
 УпрНастр=Flag;
 if Flag=True: Template.Field="extКлюч"; Template.Frame=1; fi;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..nS 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
       Try
        BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
        if BgColor=coAqua or BgColor=coTeal or BgColor=coLime:
           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;
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
end;

Proc Оформление;
var s,c,r,cc,rr,n,y:i;
var Obj: Object;
var Field:S;
var Flag:L;
 Flag=False;
 btnУдалить.Enabled=not Flag;
 btnПринять.Visible=not Match(Вид,"ДС!");
 btnСписать.Visible=not Match(Вид,"ДС!");
 btnВозврат.Visible=Match(Вид,"ДС!");
 btnВозврат.Left=1950;
 for s=1..nS 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
       Try
        Field=asString(Obj.Cell(r,c,CellContents,""));
        n=SearchInArray(BufField,Field,True);
        if not n=-1:
           Obj.Cell(r,c,CellFontColor,if(Flag,coBlack,BufColorFo[n]));
           Obj.Cell(r,c,CellBgColor,if(Flag,coTransparent,BufColorBg[n]));
           Obj.Cell(r,c,CellReadOnly,Flag);
        fi;
       Except
       end;
      od;
      Field=asString(Obj.Cell(r,cc,CellContents,""));
      if Field="@Поруч": Obj.Row(r,RowVisible,Вид="ПОРУЧ");
        |Field="@БГ"   : Obj.Row(r,RowVisible,Вид="БГ");
        |Field="@ДС"   : Obj.Row(r,RowVisible,Match(Вид,"ДС!"));
        |Field="@неДС" : Obj.Row(r,RowVisible,not Match(Вид,"ДС!"));
      fi;
     od;
   fi;
 od;
 Y=AsInteger(S1.Row(1,RowTop,""));
 btnСвед.Top=Y-70;
 btnГЭК.Top=Y-70;
 btnДвиж.Top=Y-70;
 btnСервис.Top=Y-70;
end;

Proc РасчетГЭК;
var OWA,n,nn,i1,i2:I;
var isNet:L;
var Rec: Record;
 if not Страница=2: Exit; fi;
 isNet=Раб.Бюджет2005.Сетевая;
 ClearVariable(УпрГЭК);
 ClearVariable(ГЭКCU);
 ClearVariable(ГЭКMU);
 ClearVariable(ГЭКДат);
 ClearVariable(ГЭКЛист);
 ClearVariable(ГЭККмнт);
 ClearVariable(ГЭКRec);
 OWA=OpenWorkArea("РПО_СКАН_ДОК","Дата","Док='"+SelfCrd+"' and Запись="+Str(RecordToInteger(Current)));
 Try
  nn=Records(OWA);
  ShowProgress(nn,"Расчет...");
  for n=1..nn do
   ProgressPos(n);
   Rec=GetRecordKey(OWA,n);
   i1=Раб.Вспом.Сканер.ЧитатьГЭК("РПО_СКАН_ДОК",RecordToInteger(Rec),"jpg",True);
   i2=Раб.Вспом.Файлы.ПоказСписок("РПО_СКАН_ДОК",RecordToInteger(Rec),"","","","","","",0);
   if not i1=0 or not i2=0:
      InsertFrame(УпрГЭК,УпрГЭК+1);
      ГЭКДат[УпрГЭК]=GetFieldD(OWA,n,"Дата");
      ГЭКЛист[УпрГЭК]=Str(i1)+" / "+Str(i2);
      ГЭККмнт[УпрГЭК]=GetFieldS(OWA,n,"Кмнт");
      ГЭКCU[УпрГЭК]=DateToString(GetFieldD(OWA,n,"CreateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(OWA,n,"CreateTime"),"")+if(isNet," "+GetFieldS(OWA,n,"CreatedUser"),"");
      ГЭКMU[УпрГЭК]=DateToString(GetFieldD(OWA,n,"UpdateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(OWA,n,"UpdateTime"),"")+if(isNet," "+GetFieldS(OWA,n,"ModifiedUser"),"");
      ГЭКRec[УпрГЭК]=Rec;
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

Proc РасчетДвиж;
var t,tt,z,OWA,x,n:i;
var Rec: Record;
var Crd,tmp,sss,Voc:S;
var tДат,ДК:D;
var First,isNet:L;
 if not Страница=3 or Признак="":
    Exit;
 fi;
 ClearVariable(УпрДок);
 ClearVariable(ДокCU);
 ClearVariable(ДокMU);
 ClearVariable(ДокОпр);
 ClearVariable(ДокНаим);
 ClearVariable(ДокНом);
 ClearVariable(ДокДат);
 ClearVariable(ДокКмнт);
 ClearVariable(ДокТекРед);
 ClearVariable(ДокTr);
 ClearVariable(ДокRec);
 ClearVariable(ДокCrd);
 Refresh;
 voc=if(Match(Вид,"ДС!"),"СВР.","ЗАБ10.");
 if Name_A(voc+Признак)=" ": Exit; fi;
 isNet=Раб.Бюджет2005.Сетевая;
 Раб.ИмяПолеКарт.Инициализация;
 Раб.ИмяПолеКарт.Начать;
 ShowProgress(1,"Сбор данных...");
 Try
  ClearVariable(Buf);
  First=True;
  ДК=Dat(1,1,Year(ToDay)+1);
  for Transaction t="{"+voc+Признак+"}",1.1.100,ДК do
   if First:
      tt=ДК-TransDate(t);
      ShowProgress(tt*2,"Сбор данных...");
      First=False;
   fi;
   Rec=TransRecord(t);
   Crd=TransCardFile(t);
   tДат=TransDate(t);
   ProgressPos(tt-(ДК-tДат));
   if Rec=nil or Crd="Table_OPER":
      tmp=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#Table_OPER#"+Str(t);
      z=InsertInArraySort(Buf,tmp);
      InsertFrame(УпрДок,z);
      ДокОпр[z]=tДат;
      ДокНаим[z]="Журнал операций, проводка №";
      ДокНом[z]=Str(t);
      ДокДат[z]=tДат;
      ДокКмнт[z]=TransComment(t);
      if Crd="Table_OPER":
         OWA=OpenWorkArea(Crd,"","UKey="+RecordToString(Rec));
         Try
          ДокCU[z]=DateToString(GetFieldD(OWA,1,"CreateTime"))+if(isNet," "+GetFieldS(OWA,1,"CreatedUser"),"");
          ДокMU[z]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,1,"ModifiedUser"),"");
         Finally
          CloseWorkArea(OWA);
         end;
      fi;
      ДокTr[z]=t;
      ДокТекРед[z]=sss;
     else
      tmp=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#"+Crd+"#"+RecordToString(Rec);
      z=SearchInArray(Buf,tmp,True);
      if z=-1:
         z=InsertInArraySort(Buf,tmp);
         InsertFrame(УпрДок,z);
         ДокОпр[z]=tДат;
         ДокНаим[z]=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"ДОК",Rec);
         if ДокНаим[z]="": ДокНаим[z]=Раб.ИмяПолеКарт.ИмяДокумента(Crd); fi;
         ДокНом[z]=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"НОМЕР",Rec);
         ДокДат[z]=Раб.ИмяПолеКарт.ЗначПоляД(Crd,"ДАТА",Rec);
         ДокКмнт[z]=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"КОММЕНТ",Rec);
         x=SearchInArray(Раб.ИмяПолеКарт.Crd,Crd,True);
         if not x=-1:
            n=GetRecordNumber(Раб.ИмяПолеКарт.OWA[x],Rec);
            if n=0:
               x=-1;
              else
               ДокCU[z]=DateToString(GetFieldD(Раб.ИмяПолеКарт.OWA[x],n,"CreateTime"))+if(isNet," "+GetFieldS(Раб.ИмяПолеКарт.OWA[x],n,"CreatedUser"),"");
               ДокMU[z]=DateToString(GetFieldD(Раб.ИмяПолеКарт.OWA[x],n,"UpdateTime"))+if(isNet," "+GetFieldS(Раб.ИмяПолеКарт.OWA[x],n,"ModifiedUser"),"");
            fi;
         fi;
         if x=-1:
            OWA=OpenWorkArea(Crd,"","UKey="+RecordToString(Rec));
            Try
             ДокCU[z]=DateToString(GetFieldD(OWA,1,"CreateTime"))+if(isNet," "+GetFieldS(OWA,1,"CreatedUser"),"");
             ДокMU[z]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,1,"ModifiedUser"),"");
            Finally
             CloseWorkArea(OWA);
            end;
         fi;
         ДокTr[z]=t;
         ДокТекРед[z]=sss;
         ДокRec[z]=Rec;
         ДокCrd[z]=Crd;
      fi;
   fi;
  od;
 Finally
  Раб.ИмяПолеКарт.Закончить;
  CloseProgress;
 end;
end;

Proc ВывестиСтраницу;
 if Страница=0: Страница=1; fi;
 if not AsLogical(S1.Visible)=(Страница=1):
    S1.Visible=Страница=1;
 fi;
 btnСвед.Enabled=not Страница=1;
 --ГЭК
 if not AsLogical(S2.Visible)=(Страница=2):
    S2.Visible=Страница=2;
    S3.Visible=Страница=2;
    S4.Visible=Страница=2;
    РасчетГЭК;
 fi;
 btnГЭК.Enabled=not Страница=2;
 --Движение
 if not AsLogical(S5.Visible)=(Страница=3):
    S5.Visible=Страница=3;
    S6.Visible=Страница=3;
    S7.Visible=Страница=3;
    РасчетДвиж;
 fi;
 btnДвиж.Enabled=not Страница=3;
 --Сервис
 if not AsLogical(S8.Visible)=(Страница=4):
    S8.Visible=Страница=4;
 fi;
 btnСервис.Enabled=not Страница=4;
end;

Proc Страница_onClick(Sender: String);
 if Sender="btnСвед"  : Страница=1;
   |Sender="btnГЭК"   : Страница=2;
   |Sender="btnДвиж"  : Страница=3;
   |Sender="btnСервис": Страница=4;
 fi;
 ВывестиСтраницу;
 Оформление;
end;

Func ПризнакИспользуется(Field:S):L;
var tmp:S;
 if not CurrentState=CrdusInserted and not Признак="":
    Refresh;
    tmp=Раб.Бюджет2005.КартПризнакИспользуется(SelfCrd,"ПРИЗНАК",Current,"*");
    if not tmp="": 
       if Field="Вид_": Field="вида обеспечения";
         |Field="Номер_": Field="порядкового номера";
         |True: Field="";
       fi;
       if not Field="":
          Страница=3;
          ВывестиСтраницу;
          Message("Признак документа ("+tmp+") используется в проводках"+Chr(13)+"Изменение "+Field+" не возможно",mtError);
       fi;
       ^True;
    fi;
 fi;
 ^False;
end;

Func Проверить:L;
var Crd:S;
var i:i;
var Rec,Бенефициар_Рекв_,Принципал_Рекв_: Record;
var СчДеб,СчКре:S;
 if not Страница=1:
    Страница=1;
    ВывестиСтраницу;
 fi;
 if Вид="": Message("Выберите вид обеспечения",mtError); Template.Field="Вид_"; ^False; fi;
 if not Match(Вид,"ДС!"):
    if НомДок="": Message("Введите номер документа",mtError); Template.Field="НомДок"; ^False; fi;
    if ДатДок=1.1.100: Message("Введите дату документа",mtError); Template.Field="ДатДок"; ^False; fi;
    if ДатН=1.1.100: 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;
 fi;
 if Round(Сум,2)=0: Message("Введите сумму",mtError); Template.Field="Сум"+if(Match(Вид,"ДС!")," ",""); ^False; fi;
 if Вид="БГ" and Round(Неустойка,2)=0: Message("Введите % неустойки",mtError); Template.Field="Неустойка"; ^False; fi;
 if Match(Вид,"ДС!"):
    Раб.КСА.Начать;
    Раб.КСА.Добавить(Счет);
    if Раб.КСА.Закончить(True):
       Message("Добавление счетов завершено");
    fi;
    if Счет="": Message("Выберите счет учета",mtError); Template.Field="Счет_"; ^False; fi;
    if Name_S(Счет)=" ": Message("Неизвестный счет "+Счет,mtError); Template.Field="Счет_"; ^False; fi;
    СчДеб=Раб.Бюджет2005.Счет_ПереворотКОСГУ(Счет);
    СчКре=Счет;
   else
    if Обяз_Призн="":
       Message("Выберите обязательство",mtError); Template.Field="Обяз_Призн"; ^False;
      else
       if Name_A(Обяз_Призн)=" ": Message("Неизвестный идентификатор аналитического признака обязательства '"+Обяз_Призн+"'",mtError); Template.Field="Обяз_Призн"; ^False; fi;
    fi;
    if Name_S(Счет_)=" ": Message("Неизвестный счет "+Счет_,mtError); ^False; fi;
    if Name_S("ЗАБАЛАНС")=" ": Message("Неизвестный счет ЗАБАЛАНС",mtError); ^False; fi;
    if not Correspond(Счет_,"ЗАБАЛАНС"): Message("Счета не могут корреспондировать "+Счет+"/ЗАБАЛАНС",mtError); ^False; fi;
    if not Correspond("ЗАБАЛАНС",Счет_): Message("Счета не могут корреспондировать ЗАБАЛАНС/"+Счет_,mtError); ^False; fi;
    СчДеб=Счет_;
    СчКре="ЗАБАЛАНС";
 fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 if Раб.Бюджет.ПроверитьПризнакиОбязательные(СчДеб,СчКре,Призн,ИсклПризн)=False: Template.Field="Призн_"; ^False; fi;
 if Раб.Бюджет.ПроверитьПризнакиСвязанные(СчДеб,СчКре,Призн,ИсклПризн)=False: Template.Field="Призн_"; ^False; fi;
 if Бенефициар_Рекв=nil: Message("Выберите бенефициара",mtError); Template.Field="Бенефициар_Рекв.КорИмя"; ^False; fi;
 if Match(Вид,"ДС!"):
    if Бенефициар_Банк=nil: Message("Выберите банковские реквизиты бенефициара",mtError); Template.Field="Бенефициар_Банк.Банк"; ^False; fi;
    if not Match(Бенефициар_Банк.РПО_ЛСчет,"05*"): 
       if EnqOkCancel("Возможно лицевой счет бенефициара "+Бенефициар_Банк.РПО_ЛСчет+" должен начинаться на 05^MИгнорировать ?",mtWarning)=cmCancel: Template.Field="Бенефициар_Банк.РПО_ЛСчет"; ^False; fi;
    fi;
 fi;
 if Вид="БГ":
    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;
    i=Раб.Вспом.Справ_БИК.Контроль2(Гарант_БИК,Гарант_Наим,Гарант_НасПункт,Гарант_КСчет);
    if i<0:
       if i=-2: Template.Field="Гарант_БИК";
         |i=-3: Template.Field="Гарант_Наим";
         |i=-4: Template.Field="Гарант_Наим";
         |i=-5: Template.Field="Гарант_НасПункт";
         |i=-6: Template.Field="Гарант_КСчет";
       fi;
       ^False;
    fi;
   else
    if not Match(Вид,"ДС!") and Гарант_Рекв=nil: Message("Выберите гаранта",mtError); Template.Field="Гарант_Рекв.КорИмя"; ^False; fi;
 fi;
 if Принципал_Рекв=nil: Message("Выберите "+if(Match(Вид,"ДС!"),"поставщика/исполнителя","принципала"),mtError); Template.Field="Принципал_Рекв.КорИмя"; ^False; fi;
 if Принципал_Призн="": Message("Не указан аналитический признак "+if(Match(Вид,"ДС!"),"поставщика/исполнителя","принципала"),mtError); Template.Field="Принципал_Призн"; ^False; fi;
 if Name_A(Принципал_Призн)=" ": Message("Неизвестный идентификатор аналитического признака "+if(Match(Вид,"ДС!"),"поставщика/исполнителя","принципала")+" '"+Принципал_Призн+"'",mtError); Template.Field="Принципал_Призн"; ^False; fi;
 Rec=SignToRecord(Обяз_Призн);
 if not Rec=nil:
    Crd=SignCardFile(Обяз_Призн);
    if Crd=Раб.Договор.crdДоговор:
       Бенефициар_Рекв_=GetCardFieldR(Crd,Rec,"Учр");
       Принципал_Рекв_=GetCardFieldR(Crd,Rec,"Контр");
      |Crd=Раб.Договор.crdДоговор_Признак:
       Бенефициар_Рекв_=GetCardFieldR(Crd,Rec,"Договор.Учр");
       Принципал_Рекв_=GetCardFieldR(Crd,Rec,"Договор.Контр");
      |true: Crd="";
    fi;
    if not Crd="":
       if not Бенефициар_Рекв=Бенефициар_Рекв_:
          if EnqOkCancel("Внимание! Выбранные реквизиты бенефициара отличны от указанного в обязательстве^MИгнорировать ?",mtWarning)=cmCancel: Template.Field="Бенефициар_Рекв.КорИмя"; ^False; fi;
       fi;
       if not Принципал_Рекв=Принципал_Рекв_:
          if EnqOkCancel("Внимание! Выбранные реквизиты "+if(Match(Вид,"ДС!"),"поставщика/исполнителя","принципала")+" отличны от указанного в обязательстве^MИгнорировать ?",mtWarning)=cmCancel: Template.Field="Принципал_Рекв.КорИмя"; ^False; fi;
       fi;
    fi;
 fi;
 ^True;
end;

Func СоздатьКмнт (aВид:S; aНаимДок:S; aНомДок:S; aДатДок:D; aОбяз_Наим:S; aОбяз_Ном:S; aОбяз_Дат:D; aКорИмя:S):S;
var Ret:S;
 if aВид="ДС" or aВид="ДС.ОИО" or aВид="ДС.ОБЗ":
    if aВид="ДС.ОБЗ":
       Ret="Обеспеч. заяви";
      else
       Ret="Обеспеч. испол.";
    fi;
    if not aОбяз_Наим="" or not aОбяз_Ном="" or not aОбяз_Дат=1.1.100:
       Ret=Ret+" "+aОбяз_Наим+" №"+aОбяз_Ном+" от "+DateToString(aОбяз_Дат);
    fi;
   |True:
    Ret=aНаимДок+" №"+aНомДок+" от "+DateToString(aДатДок);
    if not aОбяз_Наим="" or not aОбяз_Ном="" or not aОбяз_Дат=1.1.100:
       Ret=Ret+" Обеспеч. испол. "+aОбяз_Наим+" №"+aОбяз_Ном+" от "+DateToString(aОбяз_Дат);
    fi;
 fi;
 Ret=Ret+" "+aКорИмя;
 ^Ret;
end;

Func КонтрольПоБИК(aБИК:S):S;
var OWAБИК:I;
var ret,tmp:S;
 if not aБИК="":
    OWAБИК=OpenWorkArea("РПО_BNKSEEK","");
    Try
     if Records(OWAБИК)=0:
        Ret="Справочник БИК РФ не загружен";
       else
        if not Гарант_БИК="":
           SetFilter(OWAБИК,"NEWNUM='"+Гарант_БИК+"'");
           if Records(OWAБИК)=0:
              Ret="БИК "+Гарант_БИК+" не найден в справочнике БИК РФ";
             else
              tmp=GetFieldS(OWAБИК,1,"REAL_");
              if not tmp="":
                 Ret=Раб.Вспом.Справ_БИК.КодВТекст("Real",tmp);
              fi;
              if not tmp="":
                 Ret=Ret+"; Дата изм.: "+DateToString(GetFieldD(OWAБИК,1,"DT_IZM"));
              fi;
           fi;
        fi;
     fi;
    Finally
     CloseWorkArea(OWAБИК);
    end;
 fi;
 ^Ret;
end;

Func Вызвать(Rec: Record):Record;
 OpenBlank(SelfBln,True,Rec);
 ^RetRec;
end;

Func ЗаполнитьКлючДок:L;
var Flag:L;
 Flag=True;
 if FuncExists(extКлюч): 
    Flag=ExecuteFuncL(extКлюч);
 fi;
 ^Flag;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 Return False;
end;

Func extFunc_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    if not FuncExists(Value): Message("Функция '"+Value+"' не найдена",mtError); ^False; fi;
 fi;
 Return True;
end;

Func Номер_OnEnter(FieldName: String; Iter: Integer): logical;
 FlagEdit=not ПризнакИспользуется(FieldName);
 Return FlagEdit;
end;

Proc Номер_OnExit(FieldName: String; Iter: Integer);
-- EditorApply;
end;

Func Номер_OnVerify(FieldName: String; Iter: Integer; Value: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableI(FieldName,Value);
 Return True;
end;


Func Номер_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 Номер=Раб.Обл.СледФ(SelfCrd,"Номер","not UKey="+RecordToString(Current));
-- EditorApply;
 Return Cur;
end;

Func Вид_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var tmp,prevВид:S;
 if ПризнакИспользуется(FieldName): ^False; fi;
 ClearVariable(Buf);
 Buf[1]="ДС.ОИО --Денежные средства, обеспечение исполнение обязательства";
 Buf[2]="ДС.ОБЗ --Денежные средства, обеспечение заявки";
 Buf[3]="БГ --Банковская гарантия";
 Buf[4]="ЗАДАТОК --Задаток";
 Buf[5]="ЗАЛОГ --Залог";
 Buf[6]="ПОРУЧ --Поручительство";
 Buf[7]="ИНОЕ --Иное обеспечение";
 n=Alternate("Выберите обеспечения",Buf,-1,SearchInArray(Buf,Вид),12);
 if not n=0:
    tmp=ExtractWord(1,Buf[n]," ");
    if not Вид=tmp:
       prevВид=Вид;
       Вид=ExtractWord(1,Buf[n]," ");
       hВид=Вид;
       МаскаСч=if(Match(Вид,"ДС!"),"*.3.304.01.*","ЗАБ.10!");
       Оформление;
       if Match(Вид,"ДС!"):
          ClearVariable(НомДок);
          ClearVariable(ДатДок);
          ClearVariable(ДатН);
          ClearVariable(ДатК);
          ClearVariable(Неустойка);
       fi;
       if not Match(Счет,МаскаСч):
          ClearVariable(Счет);
       fi;
       if prevВид="ДС.ОБЗ" or Вид="ДС.ОБЗ":
          Обяз_Призн="";
          Обяз_Наим="";
          Обяз_Ном="";
          Обяз_Дат=1.1.100;
       fi;
    fi;
 fi;
 Return False;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var Field:S;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    Field=AsString(Template.Field);
    PutVariableD(Field,tmp);
 fi;
 Return Cur;
end;

Func Неустойка_OnVerify(FieldName: String; Iter: Integer; Value: Numeric): logical;
 if Round(Value,2)<0 or Round(Value,2)>100: Message("Допустимое значение 0..100",mtError); ^False; fi;
 Return True;
end;

Func Обяз_Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var tmp,Общ_Призн_:S;
var Rec,Rec2: Record;
 if Вид="ДС.ОБЗ":
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор заявки...","РПО_ЗАЯВКА_ЗАКУП","НомерДок","Номер документа","Рег and not НеДейств and Справ='ЗК'");
    if not Rec=nil:
       Обяз_Призн=CardFileRecSign("РПО_ДОК_ПРИЗНАК","Признак","ЗК",GetCardFieldR("РПО_ЗАЯВКА_ЗАКУП",Rec,"Признак_Ref"));
       if Обяз_Призн="ЗК.":
          Обяз_Призн=CardFileRecSign("РПО_ЗАЯВКА_ЗАКУП","Признак","ЗК",Rec);
          if Обяз_Призн="ЗК.":
             Message("Ошибка выбора заявки "+RecordToString(Rec),mtError);
          fi;
       fi;
       Обяз_Наим=GetCardFieldS("РПО_ДОК_ПРИЗНАК",Rec,"НаимДок.Наим");
       Обяз_Ном=GetCardFieldS("РПО_ДОК_ПРИЗНАК",Rec,"НомерДок");
       Обяз_Дат=GetCardFieldD("РПО_ДОК_ПРИЗНАК",Rec,"ДатаДок");
       НомИзв=GetCardFieldS("РПО_ДОК_ПРИЗНАК",Rec,"НомИзв");
       tmp=Раб.Бюджет2005.СписокСправ(МаскаСч,0,ИсклПризн);
       if not tmp="":
          for i=1..2 do
           Общ_Призн_=GetCardFieldS("РПО_ДОК_ПРИЗНАК",Rec,"Общ_Призн"+Str(i));
           if not Общ_Призн_="":
              if Раб.Бюджет2005.MatchMask(Общ_Призн_,tmp):
                 Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Призн," ",Общ_Призн_,SubStr(Общ_Призн_,1,Pos(".",Общ_Призн_))+"*","");
              fi;
           fi;
          od;
       fi;
       Rec2=GetCardFieldR("РПО_ДОК_ПРИЗНАК",Rec,"Учр");
       if Бенефициар_Рекв=nil:
          Бенефициар_Рекв=Rec2;
         else
          if not Бенефициар_Рекв=Rec2:
             if EnqOkCancel("Внимание! Выбранные реквизиты бенефициара отличны от указанного в обязательстве^MЗаменить реквизиты бенефициара на реквизиты уканные в обязательстве ?",mtWarning)=cmOk:
                Бенефициар_Рекв=Rec2;
             fi;
          fi;
       fi;
    fi;
   else
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...",Раб.Договор.crdДоговор,"НомерДок","Номер документа","Рег and not НеДейств");
    if not Rec=nil:
       Обяз_Призн=CardFileRecSign(Раб.Договор.crdДоговор_Признак,"Признак","ДОГОВОР",GetCardFieldR(Раб.Договор.crdДоговор,Rec,"Признак_Ref"));
       if Обяз_Призн="ДОГОВОР.":
          Обяз_Призн=CardFileRecSign(Раб.Договор.crdДоговор,"Признак","ДОГОВОР",Rec);
          if Обяз_Призн="ДОГОВОР.":
             Message("Ошибка выбора обязательства "+RecordToString(Rec),mtError);
          fi;
       fi;
       Обяз_Наим=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"НаимДок.Наим");
       Обяз_Ном=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"НомерДок");
       Обяз_Дат=GetCardFieldD(Раб.Договор.crdДоговор,Rec,"ДатаДок");
       НомИзв=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"НомИзв");
       tmp=Раб.Бюджет2005.СписокСправ(МаскаСч,0,ИсклПризн);
       if not tmp="":
          for i=1..2 do
           Общ_Призн_=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"Общ_Призн"+Str(i));
           if not Общ_Призн_="":
              if Раб.Бюджет2005.MatchMask(Общ_Призн_,tmp):
                 Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Призн," ",Общ_Призн_,SubStr(Общ_Призн_,1,Pos(".",Общ_Призн_))+"*","");
              fi;
           fi;
          od;
       fi;
       Rec2=GetCardFieldR(Раб.Договор.crdДоговор,Rec,"Учр");
       if Бенефициар_Рекв=nil:
          Бенефициар_Рекв=Rec2;
         else
          if not Бенефициар_Рекв=Rec2:
             if EnqOkCancel("Внимание! Выбранные реквизиты бенефициара отличны от указанного в обязательстве^MЗаменить реквизиты бенефициара на реквизиты уканные в обязательстве ?",mtWarning)=cmOk:
                Бенефициар_Рекв=Rec2;
             fi;
          fi;
       fi;
       Rec2=GetCardFieldR(Раб.Договор.crdДоговор,Rec,"Контр");
       if Принципал_Рекв=nil:
          Принципал_Рекв=Rec2;
          Принципал_Призн=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"Контр_Призн");
         else
          if not Принципал_Рекв=Rec2:
             if EnqOkCancel("Внимание! Выбранные реквизиты принципала отличны от указанных в обязательстве^MЗаменить реквизиты принципала на реквизиты уканные в обязательстве ?",mtWarning)=cmOk:
                Принципал_Рекв=Rec2;
                Принципал_Призн=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"Контр_Призн");
             fi;
          fi;
       fi;
    fi;
 fi;
 Return False;
end;

Proc Обяз_Призн_OnExit(FieldName: String; Iter: Integer);
 Обяз_Наим="";
 Обяз_Ном="";
 Обяз_Дат=1.1.100;
end;

Proc Обяз_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Crd: S;
var Rec: Record;
 if Обяз_Призн="": Message("Выберите обязательство",mtError); Template.Field="Обяз_Призн"; Exit; fi;
 Rec=SignToRecord(Обяз_Призн);
 Crd=SignCardFile(Обяз_Призн);
 if Crd="РПО_ДОГОВОР_ПРИЗНАК":
    Rec=GetCardFieldR(Crd,Rec,"Договор");
   |not Crd="РПО_ДОГОВОР":  
    Exit;
 fi;
 if IsBlankOpen("Инфо.Договор"):
    Message("Карточка обязательства уже открыта, закройте текущий бланк");
   else
    OpenBlank("Инфо.Договор",True,Rec);
 fi;
end;

Func Счет_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Вид="": Message("Выберите вид обеспечения",mtError); Template.Field="Вид_"; ^False; fi;
 tmp=МаскаСч;
 if Match(Вид,"ДС!"):
    tmp=tmp+"&*.730";
 fi;
 tmp=AccountElection(tmp,False,hСчет);
 if not tmp="":
    Счет=tmp;
    hСчет=tmp;
    tmp=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
    Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Призн," ",tmp,"|");
    Настр(True);
 fi;
 Return False;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.Бюджет2005.СписокСправ(МаскаСч,0,ИсклПризн);
 tmp=AnaElection(Раб.Бюджет2005.Объединить(tmp,"*&~*.*","|"),False,False,hПризн);
 if not tmp="":
    hПризн=tmp;
    Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
 fi;
 Return False;
end;

Proc Призн_OnExit(FieldName: String; Iter: Integer);
 Призн=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(Призн," ","Name_A");
end;

Func Содерж_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Раб.Вспом.Основание.Выполнить(SelfCrd+"."+Field);
 PutVariableS(Field,tmp);
 if ProcExists(Field+"_OnExit"):
    ExecuteProc(Field+"_OnExit",Field,AsInteger(Template.Frame));
 fi;
 Return Cur;
end;

Func Рекв_onEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if FieldName="Бенефициар_Рекв.КорИмя":
    Rec=OpenCardFile("Контрагент","--Наше",Бенефициар_Рекв,crdRecordOnly);
   else
    Rec=Раб.Документы.ВыборСФильтром("Контрагент","ПолнИмя","");
 fi;
 if not Rec=nil:
    if FieldName="Бенефициар_Рекв.КорИмя":
       if not Бенефициар_Рекв=Rec:
          Бенефициар_Рекв=Rec;
          if hБенефициар_Рекв=Бенефициар_Рекв:
             Бенефициар_Банк=hБенефициар_Банк;
            else
             Бенефициар_Банк=nil;
          fi;
       fi;
      |FieldName="Гарант_Рекв.КорИмя":
       Гарант_Рекв=Rec;
       Гарант_Банк=nil;
       Гарант_Наим=Гарант_Рекв.КорИмя;
       Гарант_Призн="";
      |FieldName="Принципал_Рекв.КорИмя":
       Принципал_Рекв=Rec;
       Принципал_Банк=nil;
       Принципал_Призн=CardFileRecSign("Контрагент","Признак","К",Rec);
    fi;
 fi;
 Return False;
end;

Proc Рекв_onExit(FieldName: String; Iter: Integer);
 if FieldName="Бенефициар_Рекв.КорИмя":
    Бенефициар_Рекв=nil;
    Бенефициар_Банк=nil;
   |FieldName="Гарант_Рекв.КорИмя":
    Гарант_Рекв=nil;
    Гарант_Банк=nil;
    Гарант_Наим="";
    Гарант_Призн="";
   |FieldName="Принципал_Рекв.КорИмя":
    Принципал_Рекв=nil;
    Принципал_Банк=nil;
    Принципал_Призн="";
 fi;
end;

Proc Рекв_OnClick(Row: Integer; Col: Integer; Double: Logical);

end;

Func Бенефициар_Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Бенефициар_Рекв=nil: Message("Выберите поставщика исполнителя",mtError); Template.Field="Бенефициар_Рекв.КорИмя"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Бенефициар_Рекв),Бенефициар_Банк,crdRecordOnly);
 if not Rec=nil:
    Бенефициар_Банк=Rec;
    hБенефициар_Рекв=Бенефициар_Рекв;
    hБенефициар_Банк=Бенефициар_Банк;
    Настр(True);
 fi;
 Return False;
end;

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);

end;

Func Банк_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var v1,v2:S;
 Template.HideEditor(False);
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор из справочника БИК РФ","РПО_BNKSEEK","NEWNUM|NAMEP|NNP|KSNP","БИК|Платежное наименование участника расчетов|Наименование населенного пункта|Корреспондентский счет","");
 if not Rec=nil:
    Гарант_Наим=GetCardFieldS("РПО_BNKSEEK",Rec,"NAMEP");
    v1=Раб.Вспом.Справ_БИК.КодВТекст("TNP",GetCardFieldS("РПО_BNKSEEK",Rec,"TNP"));
    v2=GetCardFieldS("РПО_BNKSEEK",Rec,"NNP");
    Гарант_НасПункт=Раб.Бюджет2005.Объединить(v1,v2,".");
    Гарант_КСчет=GetCardFieldS("РПО_BNKSEEK",Rec,"KSNP");
    Гарант_БИК=GetCardFieldS("РПО_BNKSEEK",Rec,"NEWNUM");
 fi;
 Return Cur;
end;

Proc Гарант_БИК_OnExit(FieldName: String; Iter: Integer);
 Гарант_Контроль=КонтрольПоБИК(Гарант_БИК);
end;


Func СканГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var bln,Field:S;
var Flag:L;
 Flag=True;
 if Вид="": Message("Выберите вид обеспечения",mtError); Field="Вид_"; Flag=False; fi;
 if НомДок="" and Flag: Message("Введите номер документа",mtError); Field="НомДок"; Flag=False; fi;
 if ДатДок=1.1.100 and Flag: Message("Введите дату документа",mtError); Field="ДатДок"; Flag=False; fi;
 if not Flag:
    Страница=1;
    ВывестиСтраницу;
    Template.Field=Field;
    ^False;
 fi;
 if FieldName="СканГЭК": EditorApply; fi;
 bln="Раб.Вспом.Скан_Док";
 if ModalMode and isBlankOpen(bln): Message("Бланк электронной копии уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
 if isBlankOpen(bln): Close(bln); fi;
 ExecuteProc(bln+".Вызвать",False,ToDay,SelfCrd,Current,Вид_,НомДок,ДатДок,Вид_+" №"+НомДок+" от "+DateToString(ДатДок),True,if(FieldName="СканГЭК",nil,ГЭКRec[Iter]));
 РасчетГЭК;
 Return False;
end;

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

Func ГЭКвPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var File,Field:S;
var Flag:L;
 Flag=True;
 if Вид="": Message("Выберите вид обеспечения",mtError); Field="Вид_"; Flag=False; fi;
 if НомДок="" and Flag: Message("Введите номер документа",mtError); Field="НомДок"; Flag=False; fi;
 if ДатДок=1.1.100 and Flag: Message("Введите дату документа",mtError); Field="ДатДок"; Flag=False; fi;
 if not Flag:
    Страница=1;
    ВывестиСтраницу;
    Template.Field=Field;
    ^False;
 fi;
 РасчетГЭК;
 if УпрГЭК=0: Message("Нет данных для формирования PDF"); ^False; fi;
 for Iter=1..УпрГЭК do
  i=Раб.Вспом.Сканер.ЧитатьГЭК("РПО_СКАН_ДОК",RecordToInteger(ГЭКRec[Iter]),"jpg",Iter=1);
 od;
 if i=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(Вид_+" №"+НомДок+" "+DateToString(ДатДок))+".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);
var Field:S;
var Iter:I;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if Double:
    СканГЭК_OnEnter(Field,Iter);
 fi;
end;

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

Func Движ_onEnter(FieldName: String; Iter: Integer): logical;
 if ДокTr[Iter]=-1:
    OpenCardFile(ДокCrd[Iter],"",ДокRec[Iter]);
   else
    TransOpenJur(ДокTr[Iter]);
 fi;
 Return False;
end;

Proc Движ_onClick(Row: Integer; Col: Integer; Double: Logical);
 Движ_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
end;

Proc ф0504054_OnClick(Row: Integer; Col: Integer; Double: Logical);
var n:i;
var bln,Field,voc:s;
 ClearVariable(Buf);
 Buf[1]="По дебету счета";
 Buf[2]="По кредиту счета";
 n=Alternate("Выберите вариант расчета карточки",Buf,-1,1,12);
 if n=0: Exit; fi;
 Field=AsString(Template.Field);
 voc=if(Match(Вид,"ДС!"),"СВР.","ЗАБ10.");
 bln="ОТЧЕТЫ.РЕГИСТРЫ.КАРТОЧКА_0504054";
 PutVariableI(bln+".MM",Mon(ToDay+1));
 PutVariableI(bln+".YYYY",Year(ToDay+1));
 PutVariableL(bln+".НИ",True);
 PutVariableL(bln+".РежимСч",not Match(Вид,"ДС!"));
 PutVariableS(bln+".Учреждение",Бенефициар_Рекв.КорИмя);
 PutVariableS(bln+".ОКПО",Бенефициар_Рекв.ОКПО);
 PutVariableS(bln+".ФИОБух",Бенефициар_Рекв.ФИОБух);
 PutVariableS(bln+".ПризнПодр","");
 PutVariableS(bln+".КБК","");
 PutVariableS(bln+".КОСГУ","");
 PutVariableL(bln+".ДебКре",n=2);
 PutVariableS(bln+".Сч",if(Match(Вид,"ДС!"),Раб.Бюджет2005.ВзятьКодСчета(Счет_,"","СЧ6",False),Счет_));
 PutVariableS(bln+".Призн","");
 PutVariableS(bln+".УслАнДоп",if(Field="ф0504054_2",voc+Признак,""));
 PutVariableI(bln+".Упр",0);
 OpenBlank(bln,ModalMode);
end;

Proc ф0504051_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln,Field,voc:s;
 bln="ОТЧЕТЫ.РЕГИСТРЫ.КАРТОЧКА_0504051";
 Field=AsString(Template.Field);
 voc=if(Match(Вид,"ДС!"),"СВР.","ЗАБ10.");
 PutVariableI(bln+".MM",Mon(ToDay+1));
 PutVariableI(bln+".YYYY",Year(ToDay+1));
 PutVariableL(bln+".НИ",True);
 PutVariableL(bln+".РежимСч",not Match(Вид,"ДС!"));
 PutVariableS(bln+".Учреждение",Бенефициар_Рекв.КорИмя);
 PutVariableS(bln+".ОКПО",Бенефициар_Рекв.ОКПО);
 PutVariableS(bln+".ПризнПодр","");
 PutVariableS(bln+".КБК","");
 PutVariableS(bln+".КОСГУ","");
 PutVariableS(bln+".Сч",if(Match(Вид,"ДС!"),Раб.Бюджет2005.ВзятьКодСчета(Счет_,"","СЧ6",False),Счет_));
 PutVariableS(bln+".Призн","");
 PutVariableS(bln+".УслАнДоп",if(Field="ф0504051_2",voc+Признак,""));
 PutVariableI(bln+".Упр",0);
 OpenBlank(bln,ModalMode);
end;

Proc ОтчПров_OnClick(Row: Integer; Col: Integer; Double: Logical);
var voc:S;
 if Признак="":
    Message("Выполните сохранение карточки",mtWarning);
   else
    Refresh;
    voc=if(Match(Вид,"ДС!"),"СВР.","ЗАБ10.");
    if AsString(Template.Field)="ОтчПров":
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,МаскаСч+if(Match(Вид,"ДС!"),"|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*)",""),voc+Признак+"!");
      else
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."010_К"',1.1.100,ToDay+1,МаскаСч+if(Match(Вид,"ДС!"),"|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*)",""),voc+Признак+"!");
    fi;
 fi;
end;

Proc Отч_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln,voc:s;
 if Признак="":
    Message("Выполните сохранение карточки",mtWarning);
   else
    voc=if(Match(Вид,"ДС!"),"СВР.","ЗАБ10.");
    bln="ОТЧЕТЫ.СПРАВКИ.ОБЕСП_ИСПОЛ_ОБЯЗ";
    PutVariableD(bln+".ДК",ToDay+1);
    PutVariableS(bln+".ПризнДоп",voc+Признак);
    PutVariableL(bln+".Run",True);
    OpenBlank(bln,True);
 fi;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnOK_onEnter (Obj:S);
 EditorApply;
end;

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

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

Proc btnУдалить_OnClick(Sender: String);
var OWA,Iter:I;
var tmp:S;
var Flag:L;
 if CurrentState=CrdusInserted:
    EditorCancel;
    Close;
 fi;
 if not CurrentState=CrdusInserted and not Признак="":
    Refresh;
    tmp=Раб.Бюджет2005.КартПризнакИспользуется(SelfCrd,"ПРИЗНАК",Current,"*");
    if not tmp="":
       Страница=3;
       ВывестиСтраницу;
       Message("Признак документа ("+tmp+") используется в проводках"+Chr(13)+"Удаление не возможно",mtError);
       Exit;
    fi;
 fi;
 if EnqOkCancel("Обеспечение и электронная копия первичных документов будет удалены, вы уверены ?",mtWarning)=cmCancel: Exit; fi;
 РасчетГЭК;
 EditorCancel;
 for Iter=1..УпрГЭК do
  Flag=ExecuteFuncL("Раб.Вспом.Скан_Док.Стереть",ГЭКRec[Iter]);
 od;
 OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Current));
 Try
  if not Records(OWA)=0:
     BeginChanging(OWA);
     Try
      DeleteRecord(OWA,1);
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 Close;
 Message("Обеспечение успешно удалено");
end;

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

Proc btnУчет_OnClick(Sender: String);
var Crd,Призн_,Кмнт_:S;
var Сум_:N;
var OWA,n,OA,i:I;
var Дата_:D;
var Rec: Record;
 if not Проверить: Exit; fi;
 Message("Выберите дату операции");
 Дата_=Calendar;
 if Дата_=1.1.100: Exit; fi;
 if not CurrentState=CrdusUnmodified:
    EditorApply;
 fi;
 Страница=3;
 ВывестиСтраницу;
 Refresh;
 Призн_="("+Раб.Бюджет2005.Объединить("ЗАБ10."+Признак,Обяз_Призн,"|")+")";
 Призн_=Раб.Бюджет2005.Объединить(Призн_,Принципал_Призн,"&");
 Призн_=Раб.Бюджет2005.Объединить(Призн_,Призн,"&");
 Призн_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн_," ","&");
 Сум_=Saldo(МаскаСч+"{"+Призн_+"}",Dat(1,1,Year(Дата_)+1));
 if Sender="btnПринять":
    if not Round(Сум_,2)=0:
       if EnqOkCancel("По учету числится сумма "+Format("%.2N",Сум_)+"^MВы уверены, что хотите, повторно принять к учету сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel: Exit; fi;
    fi;
   |Sender="btnСписать":
    if Round(Сум_,2)=0:
       if EnqOkCancel("По учету сумма "+Format("%.2N",Сум)+" не числится"+"^MВы уверены, что хотите, снять с учета сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel: Exit; fi;
      |not Round(Сум_,2)=Round(Сум,2):
      if EnqOkCancel("По учету числится сумма "+Format("%.2N",Сум_)+"^MВы уверены, что хотите, снять с учета сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel: Exit; fi;
    fi;
 fi;
 Призн_=Раб.Бюджет2005.Объединить("ЗАБ10."+Признак,Обяз_Призн," ");
 Призн_=Раб.Бюджет2005.Объединить(Призн_,Принципал_Призн," ");
 Призн_=Раб.Бюджет2005.Объединить(Призн_,Призн," ");
 Crd="РПО_БУХСПРАВКА";
 if not ExistsCardFile(Crd):
    Message("Картотека '"+Crd+"' не найдена",mtError);
    Exit;
 fi;
 OWA=OpenWorkArea(Crd,"ДатаСпр","");
 Try
  BeginChanging(OWA,False);
  Try
   n=InsertRecord(OWA);
   Rec=GetRecordKey(OWA,n);
   n=PutFieldI(OWA,n,"НОМЕР",Раб.Обл.СледСУчетомДаты(Crd,"Номер","ДатаСпр",ToDay));
   n=PutFieldD(OWA,n,"ДАТАСПР",Дата_);
   n=PutFieldR(OWA,n,"РЕКВ",Бенефициар_Рекв);
   Кмнт_=if(Sender="btnПринять","Принято к учету "+Lo(Вид_),"Списано с учета "+Lo(Вид_))+" №"+НомДок+" от "+DateToString(ДатДок);
   Кмнт_=Кмнт_+" срок действия с "+DateToString(ДатН)+" по "+DateToString(ДатК);
   if not Обяз_Ном="":
      Кмнт_=Кмнт_+" ("+Обяз_Наим+" №"+Обяз_Ном+" от "+DateToString(Обяз_Дат)+")";
   fi;
   Кмнт_=Кмнт_+" ";
   OA=OpenArray(OWA,n,"ПОЗИЦИИ","");
   i=InsertRecord(OA);
   i=PutFieldS(OA,i,"СОДЕРЖ",Кмнт_);
   i=PutFieldS(OA,i,"НОМДОК",НомДок);
   i=PutFieldD(OA,i,"ДАТАДОК",ДатДок);
   i=PutFieldS(OA,i,"СЧДЕБ",if(Sender="btnПринять",Счет_,"ЗАБАЛАНС"));
   i=PutFieldS(OA,i,"СЧКРЕ",if(Sender="btnПринять","ЗАБАЛАНС",Счет_));
   i=PutFieldN(OA,i,"СУММА",Сум);
   i=PutFieldS(OA,i,"ПРИЗН",Призн_);
   i=PutFieldS(OA,i,"ПРИЗНДЕБ","");
   i=PutFieldS(OA,i,"ПРИЗНКРЕ","");
   i=PutFieldS(OA,i,"ПРИЗНКОЛ","");
   i=PutFieldN(OA,i,"КОЛ",0);
   i=PutFieldS(OA,i,"Key",SelfCrd+"="+Str(RecordToInteger(Current)));
   CloseWorkArea(OA);
   n=PutFieldS(OWA,n,"КМНТ",Кмнт_);
   n=PutFieldS(OWA,n,"РЕЖИМ","");
   n=PutFieldS(OWA,n,"ФИОРУК",Бенефициар_Рекв.ФИОРук);
   n=PutFieldS(OWA,n,"ФИОБУХ",Бенефициар_Рекв.ФИОБух);
--   n=PutFieldS(OWA,n,"ДОЛЖНИСП",ДолжнИсп);
--   n=PutFieldS(OWA,n,"ФИОИСП",ФИОИсп);
   n=PutFieldD(OWA,n,"ДАТАИСП",Дата_);
   n=PutFieldL(OWA,n,"ПРОВОДИТЬ",False);
   n=PutFieldS(OWA,n,"РПО_КЛЮЧ",РПО_Ключ);
   n=PutFieldL(OWA,n,"CLOSEDMODFOB",ClosedModFob);
   n=PutFieldN(OWA,n,"ИТОГСУММА",Сум);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 OpenBlank("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА",True,Rec);
 РасчетДвиж;
end;

var ЗВЗ_ДолжнРук:S;
var ЗВЗ_ФИОРук:S;
var ЗВЗ_ДолжнБух:S;
var ЗВЗ_ФИОБух:S;

Proc btnВозврат_OnClick(Sender: String);
var Crd,Призн_,Глава_,НазнПл_:S;
var Сум_:N;
var OWAs,OWAt,s,t,OAs,s2,ss2,OAt,t2,Iter,pp,p,Номер_:I;
var Дата_:D;
var Rec: Record;
 if not Проверить: Exit; fi;
 Message("Выберите дату операции");
 Дата_=Calendar;
 if Дата_=1.1.100: Exit; fi;
 if not CurrentState=CrdusUnmodified:
    EditorApply;
 fi;
 Страница=3;
 ВывестиСтраницу;
 Refresh;
 Призн_="("+Раб.Бюджет2005.Объединить("СВР."+Признак,Обяз_Призн,"|")+")";
 Призн_=Раб.Бюджет2005.Объединить(Призн_,Принципал_Призн,"&");
 Призн_=Раб.Бюджет2005.Объединить(Призн_,Призн,"&");
 Призн_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн_," ","&");
 Сум_=-Turn(МаскаСч+"|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Призн_+"}",1.1.100,Dat(1,1,Year(Дата_)+1));
 if Round(Сум_,2)=0:
    if EnqOkCancel("Остаток денежных средств по обеспечению равен 0"+"^MВы уверены, что хотите, возвратить сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel:
       ОтчПров_OnClick(1,1,True);
       Exit;
    fi;
   |not Round(Сум_,2)=Round(Сум,2):
    if EnqOkCancel("Остаток денежных средств по обеспечению равен "+Format("%.2N",Сум_)+"^MВы уверены, что хотите, возвратить сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel:
       ОтчПров_OnClick(1,1,True);
       Exit;
    fi;
 fi;
 Сум_=-Turn(МаскаСч+"|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Принципал_Призн+"}",1.1.100,Dat(1,1,Year(Дата_)+1));
 if Round(Сум_,2)=0:
    if EnqOkCancel("Остаток денежных средств по обеспечению в целом по '"+Name_A(Принципал_Призн)+"' равен 0"+"^MВы уверены, что хотите, возвратить сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel:
       ОтчПров_OnClick(1,1,True);
       Exit;
    fi;
   |Round(Сум_,2)-Round(Сум,2)<0:
    if EnqOkCancel("Остаток денежных средств по обеспечению в целом по '"+Name_A(Принципал_Призн)+"' равен "+Format("%.2N",Сум_)+"^MВы уверены, что хотите, возвратить сумму "+Format("%.2N",Сум)+" ?" ,mtWarning)=cmCancel:
       ОтчПров_OnClick(1,1,True);
       Exit;
    fi;
 fi;
 Глава_=SubStr(Счет,1,3);
 Crd="РПО_ЗАЯВКА_ВОЗВРАТ";
 if not ExistsCardFile(Crd):
    Message("Картотека '"+Crd+"' не найдена",mtError);
    Exit;
 fi;
 ЗВЗ_ДолжнРук="";
 ЗВЗ_ФИОРук="";
 ЗВЗ_ДолжнБух="";
 ЗВЗ_ФИОБух="";
 Раб.Вспом.Подписи_Сегодня.Взять(Дата_,SelfBln,"ЗВЗ_ДолжнРук:ДолжнРук:S|ЗВЗ_ФИОРук:ФИОРук:S|ЗВЗ_ДолжнБух:ДолжнБух:S|ЗВЗ_ФИОБух:ФИОБух:S");
 OWAs=OpenWorkArea("ПрихПлПоручения","");
 Try
  if not Records(OWAs)=0:
     OAs=OpenArray(OWAs,1,"РПО_Расшифр","");
  fi;
  OWAt=OpenWorkArea(Crd,"","1=0");
  Try
   for Iter=1..УпрДок do
    if ДокCrd[Iter]="ПрихПлПоручения":
       pp=pp+1;
       s=GetRecordNumber(OWAs,ДокRec[Iter]);
       if s=0:
          Trace("Документ "+ДокНаим[Iter]+" №"+ДокНом[Iter]+" от "+DateToString(ДокДат[Iter])+" не найден в базе данных");
          Message("Документ "+ДокНаим[Iter]+" №"+ДокНом[Iter]+" от "+DateToString(ДокДат[Iter])+" не найден в базе данных",mtError);
         else
          BeginChanging(OWAt,False);
          Try
           p=p+1;
           Номер_=Раб.Обл.СледСУчетомГода("РПО_ЗАЯВКА_Возврат","Номер","ДатаДок");
           НазнПл_="(л/с "+GetFieldS(OWAs,s,"РеквБанк.РПО_ЛСчет")+")";
           НазнПл_=НазнПл_+" Возврат денежных средств поступивших для обеспечения исполнения контракта. НДС не облагается";
           t=InsertRecord(OWAt);
           Rec=GetRecordKey(OWAt,t);
           OAt=OpenArray(OWAt,t,"Позиции","");
           t=PutFieldI(OWAt,t,"Номер",Номер_);
           t=PutFieldS(OWAt,t,"НомерДок",Str(Номер_));
           t=PutFieldD(OWAt,t,"ДатаДок",Дата_);
           t=PutFieldR(OWAt,t,"Рекв",GetFieldR(OWAs,s,"Рекв"));
           t=PutFieldR(OWAt,t,"Банк",GetFieldR(OWAs,s,"РеквБанк"));
           t=PutFieldS(OWAt,t,"ГРБС",Раб.Бюджет.НаимКБК("ППП2006",Глава_));
           t=PutFieldS(OWAt,t,"Глава",Глава_);
           t=PutFieldS(OWAt,t,"ДолжнРук",if(ЗВЗ_ДолжнРук="",GetFieldS(OWAs,s,"Рекв.ДолжнРук"),ЗВЗ_ДолжнРук));
           t=PutFieldS(OWAt,t,"ДолжнБух",if(ЗВЗ_ДолжнБух="",GetFieldS(OWAs,s,"Рекв.ДолжнБух"),ЗВЗ_ДолжнБух));
           t=PutFieldS(OWAt,t,"ФИОРук",if(ЗВЗ_ФИОРук="",GetFieldS(OWAs,s,"Рекв.ФИОРук"),ЗВЗ_ФИОРук));
           t=PutFieldS(OWAt,t,"ФИОБух",if(ЗВЗ_ФИОБух="",GetFieldS(OWAs,s,"Рекв.ФИОБух"),ЗВЗ_ФИОБух));
           t=PutFieldD(OWAt,t,"ДатаПодписи",Дата_);
           t=PutFieldS(OWAt,t,"Док_КБК","");
           t=PutFieldS(OWAt,t,"Док_ТипКБК","");
           t=PutFieldS(OWAt,t,"Док_Ист","5");
           t=PutFieldN(OWAt,t,"Док_Сум",GetFieldN(OWAs,s,"Сумма"));
           t=PutFieldS(OWAt,t,"Док_ОКВ","643");
           t=PutFieldN(OWAt,t,"Док_СумРуб",GetFieldN(OWAs,s,"Сумма"));
           t=PutFieldS(OWAt,t,"Док_ОчрПл","5");
           t=PutFieldS(OWAt,t,"Док_ВидПл","0");
           t=PutFieldS(OWAt,t,"Док_НазнПл",НазнПл_);
           t=PutFieldS(OWAt,t,"Осн_ДокВид","Платежное поручение");
           t=PutFieldS(OWAt,t,"Осн_ДокНом",GetFieldS(OWAs,s,"НомерБум"));
           t=PutFieldD(OWAt,t,"Осн_ДокДат",GetFieldD(OWAs,s,"ДатаДок"));
           t=PutFieldR(OWAt,t,"РеквП",GetFieldR(OWAs,s,"РеквКонтр"));
           t=PutFieldR(OWAt,t,"БанкП",GetFieldR(OWAs,s,"КонтрБанк"));
           ss2=Records(OAs);
           for s2=1..ss2 do
            t2=InsertRecord(OAt);
            t2=PutFieldN(OAt,t2,"Сум",GetFieldN(OAs,s2,"Сум"));
            t2=PutFieldN(OAt,t2,"СумРуб",GetFieldN(OAs,s2,"Сум"));
            t2=PutFieldS(OAt,t2,"СчДеб",Раб.Бюджет2005.Счет_ПереворотКосгу(GetFieldS(OAs,s2,"СчКре")));
            t2=PutFieldS(OAt,t2,"СчКре",Раб.Бюджет2005.Счет_ПереворотКосгу(GetFieldS(OAs,s2,"СчДеб")));
            t2=PutFieldS(OAt,t2,"Призн",GetFieldS(OAs,s2,"Призн"));
           od;
           t=PutFieldS(OWAt,t,"Призн_ЛС",GetFieldS(OWAs,s,"РПО_Призн_ЛС"));
           t=PutFieldS(OWAt,t,"Призн_К",GetFieldS(OWAs,s,"РПО_Призн_К"));
           t=PutFieldI(OWAt,t,"ver",12);
           EndChanging(OWAt);
         Except
          CancelChanging(OWAt);
          Raise;
         end;
         OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_ВОЗВРАТ",True,Rec);
       fi;
    fi; --if ДокCrd[Iter]="ПрихПлПоручения":
   od;  --for Iter=1..УпрДок do
  Finally
   CloseWorkArea(OWAt);
  end;
 Finally
  CloseWorkArea(OWAs);
 end;
 if pp=0:
    Message("В движение по документу не найдено, ни одно, поступившее платежное поручение",mtError);
 fi;
 РасчетДвиж;
 Сум_=-Turn(МаскаСч+"|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн_," ","&")+"}",1.1.100,Dat(1,1,Year(Дата_)+1));
 if Сум_<0:
    Trace("Внимание! Обнаружена переплата сумм подлежащих возврату по документу "+Format("%.2N",-Сум_));
    Message("Внимание! Обнаружена переплата сумм подлежащих возврату по документу",mtError);
 fi;
 Сум_=-Turn(МаскаСч+"|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Принципал_Призн+"}",1.1.100,Dat(1,1,Year(Дата_)+1));
 if Сум_<0:
    Trace("Внимание! Обнаружена переплата сумм подлежащих возврату в целом по контрагенту "+Format("%.2N",-Сум_));
    Message("Внимание! Обнаружена переплата сумм подлежащих возврату в целом по контрагенту",mtError);
 fi;
 Template.Field="ОтчПров_2";
 ОтчПров_OnClick(1,1,True);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen (Create:L);
 FlagInit=True;
end;

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

Proc OnRead;
 SelfRec=Current;
 RetRec=nil;
 ОткрНастр(False);
 Настр(False);
 if CurrentState=CrdusInserted:
    if Вид="": 
       Вид=hВид;
       МаскаСч=if(Match(Вид,"ДС!"),"*.3.304.01.*","ЗАБ.10!");
       Счет=hСчет;
       if not Match(Счет,МаскаСч):
          ClearVariable(Счет);
       fi;
       if Бенефициар_Рекв=nil:
          Бенефициар_Рекв=Раб.Бюджет2005.НашРекв;
          if hБенефициар_Рекв=Бенефициар_Рекв:
             Бенефициар_Банк=hБенефициар_Банк;
            else
             Бенефициар_Банк=nil;
          fi;
       fi;
    fi;
    Номер=Раб.Обл.СледФ(SelfCrd,"Номер","");
    if not inВид="": 
       Вид=inВид;
       if Вид=hВид:
          Счет=hСчет;
       fi;
    fi;
    if not Round(inСум,2)=0: Сум=Round(inСум,2); fi;
    if not inОбяз_Призн="": Обяз_Призн=inОбяз_Призн; fi;
    if not inОбяз_Наим="": Обяз_Наим=inОбяз_Наим; fi;
    if not inОбяз_Ном="": Обяз_Ном=inОбяз_Ном; fi;
    if not inОбяз_Дат=1.1.100: Обяз_Дат=inОбяз_Дат; fi;
    if not inНомИзв="": НомИзв=inНомИзв; fi;
    if not inСчет="": Счет=inСчет; fi;
    if not inПризн="": Призн=inПризн; fi;
    if not inСодерж="": Содерж=inСодерж; fi;
    if not inКмнт="": Кмнт=inКмнт; fi;
    if not inБенефициар_Рекв=nil: 
       Бенефициар_Рекв=inБенефициар_Рекв;
       if hБенефициар_Рекв=Бенефициар_Рекв:
          Бенефициар_Банк=hБенефициар_Банк;
         else
          Бенефициар_Банк=nil;
       fi;
    fi;
    if not inПринципал_Рекв=nil: 
       Принципал_Рекв=inПринципал_Рекв; 
       Принципал_Банк=nil;
       Принципал_Призн="";
       if not Принципал_Рекв=nil:
          Принципал_Призн=CardFileRecSign("Контрагент","Признак","К",Принципал_Рекв);
       fi;
    fi;
    inВид="";
    inСум=0;
    inОбяз_Призн="";
    inОбяз_Наим="";
    inОбяз_Ном="";
    inОбяз_Дат=1.1.100;
    inНомИзв="";
    inСчет="";
    inПризн="";
    inСодерж="";
    inКмнт="";
    inБенефициар_Рекв=nil;
    inПринципал_Рекв=nil;
    Run=False;
    Call="";
    CallParam="";
    ClosedModFob=False;
    Страница=1;
 fi;
 МаскаСч=if(Match(Вид,"ДС!"),"*.3.304.01.*","ЗАБ.10!");
 if not FlagInit: ВывестиСтраницу; Оформление; fi;
 if Страница=2: РасчетГЭК; 
   |Страница=3: РасчетДвиж;
 fi;
 if Run=True and not Call="":
    Run=False;
    ExecuteProc(Call,CallParam);
    Call="";
    CallParam="";
 fi;
 Гарант_Контроль=КонтрольПоБИК(Гарант_БИК);
end;

Func OnVerify: Logical;
 if Номер<0: Message("Порядковый номер не может быть отрицательным числом",mtError); Страница=1; ВывестиСтраницу; Template.Field="Номер_"; ^False; fi;
 if Вид="": Message("Выберите вид обеспечения",mtError); Страница=1; ВывестиСтраницу; Template.Field="Вид_"; ^False; fi;
 if Match(Вид,"ДС!"):
    if not Проверить: ^False; fi;
   else
    if НомДок="": Message("Введите номер документа",mtError); Страница=1; ВывестиСтраницу; Template.Field="НомДок"; ^False; fi;
    if ДатДок=1.1.100: Message("Введите дату документа",mtError); Страница=1; ВывестиСтраницу; Template.Field="ДатДок"; ^False; fi;
 fi;
 if not Счет=Счет_:
    Счет=Счет_;
 fi;
 if Вид="ДС" or Вид="ДС.ОИО": Признак="ОИО"+"."+Format("%.6D",Номер);
   |Вид="ДС.ОБЗ": Признак="ОБЗ"+"."+Format("%.6D",Номер);
   |True: Признак=Вид+"."+Format("%.6D",Номер);
 fi;
 СоздатьКмнт(Вид,Вид_,НомДок,ДатДок,Обяз_Наим,Обяз_Ном,Обяз_Дат,Принципал_Рекв.КорИмя);
 SelfRec=Current;
 RetRec=SelfRec;
 Return ЗаполнитьКлючДок;
end;
--Обработчики событий шаблона -----
--


Конец
