-- Шаблон создан мастером бланков
-- 13.09.2010 14:33:47
--
БланкСШаблоном "Суммы принудительного изъятия", Редактор РПО_СПИ;

var FlagEdit:L;

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

var fJumpOff:L;
var fJumpOff_:S=if(fJumpOff,"Да","Нет");
var extКлюч:S;

var НастрGUID:S;

var Страница;

var ИсклПризн:S="СПИ.*|К.*";

var НаимДок_Наим:S=НаимДок.Наим;
var НаимДок_Код:S=НаимДок.Код;
var СерияДок_:S=СерияДок;
var НомерДок_:S=НомерДок;
var НомерДокДоп_:S=НомерДокДоп;

var КодПричины_[]:S=КодПричины+" "+if(КодПричины="11":"ненадлежащее исполнение поставщиком (подрядчиком, исполнителем) обязательств..."
                                     |КодПричины="21":"просрочка исполнения поставщиком (подрядчиком, исполнителем) обязательств..."
                                     |true:"");

var Контр_Телефон:S=if(Контр.Телефон="",Контр.Факс,Контр.Телефон);

var КодСч_:S=if(КодСч="" and Match(КБК,"*.140") and ДатаОпер<1.1.2015:"205.41"|КодСч="" and Match(КБК,"*.180") and ДатаОпер<1.1.2015:"205.81"|True:КодСч);

var nРасшифр:I=Расшифр;

var A:S=if(Проводить,"","+");
var D:S=if(Проводить,"","-");

var Призн_[]:S=Расшифр[$].Призн;
var Призн__:S="";

var ВсегоСум:N=SumOfArray(Расшифр[].Сум,Расшифр);

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

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

var hПризн:S;

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="Отчет";

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

btnРасшифр :Object;
btnГЭК2    :Object;
btnДвиж    :Object;
btnСервис  :Object;

btnПринять :Object;
btnСписать :Object;

S1 : Section;
S2 : Section;
S3 : Section;
S4 : Section;
var nS:I=4;

S5 : Section;
S6 : Section;
S7 : Section;
S8 : Section;
S9 : Section;
S10: Section;
S11: Section;

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

var SelfBln:S="ИНФО.СПИ";
var SelfCrd:S="РПО_СПИ";

var Buf[]:S;

var hНаимДок:Record;
var hВД:S;
var hКБК:S;
var hКодСч:S;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("fJumpOff","L");
    Раб.Настр.Добавить("extКлюч","S");
    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;
 cbПроводить.Visible=not Flag and ver=0;
 btnУдалить.Visible=not Flag;
 btnРасшифр.Visible=not Flag;
 btnГЭК2.Visible=not Flag;
 btnДвиж.Visible=not Flag;
 btnСервис.Visible=not Flag;
 btnПринять.Visible=not Flag and not ver=0;
 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;
 cbПроводить.Visible=ver=0;
 btnУдалить.Enabled=not Проводить;
 btnПринять.Visible=not ver=0;
 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(Проводить,coBlack,BufColorFo[n]));
           Obj.Cell(r,c,CellBgColor,if(Проводить,coTransparent,BufColorBg[n]));
           Obj.Cell(r,c,CellReadOnly,Проводить);
        fi;
       Except
       end;
      od;
     od;
   fi;
 od;
 Y=AsInteger(S1.Row(1,RowTop,""));
 btnРасшифр.Top=Y-75;
 btnГЭК2.Top=Y-75;
 btnДвиж.Top=Y-75;
 btnСервис.Top=Y-75;
end;

Proc РасчетГЭК2;
var OWA,n,nn,i1,i2:I;
var isNet:L;
var Rec: Record;
 if not Страница=2: Exit; fi;
 isNet=Раб.Бюджет2005.Сетевая;
 ClearVariable(УпрГЭК2);
 ClearVariable(ГЭК2CU);
 ClearVariable(ГЭК2MU);
 ClearVariable(ГЭК2Дат);
 ClearVariable(ГЭК2Лист);
 ClearVariable(ГЭК2Кмнт);
 ClearVariable(ГЭК2Rec);
 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(УпрГЭК2,УпрГЭК2+1);
      ГЭК2Дат[УпрГЭК2]=GetFieldD(OWA,n,"Дата");
      ГЭК2Лист[УпрГЭК2]=Str(i1)+" / "+Str(i2);
      ГЭК2Кмнт[УпрГЭК2]=GetFieldS(OWA,n,"Кмнт");
      ГЭК2CU[УпрГЭК2]=DateToString(GetFieldD(OWA,n,"CreateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(OWA,n,"CreateTime"),"")+if(isNet," "+GetFieldS(OWA,n,"CreatedUser"),"");
      ГЭК2MU[УпрГЭК2]=DateToString(GetFieldD(OWA,n,"UpdateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(OWA,n,"UpdateTime"),"")+if(isNet," "+GetFieldS(OWA,n,"ModifiedUser"),"");
      ГЭК2Rec[УпрГЭК2]=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 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"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(OWA,1,"CreateTime"),"")+if(isNet," "+GetFieldS(OWA,1,"CreatedUser"),"");
          ДокMU[z]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(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"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(Раб.ИмяПолеКарт.OWA[x],n,"CreateTime"),"")+if(isNet," "+GetFieldS(Раб.ИмяПолеКарт.OWA[x],n,"CreatedUser"),"");
               ДокMU[z]=DateToString(GetFieldD(Раб.ИмяПолеКарт.OWA[x],n,"UpdateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(Раб.ИмяПолеКарт.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"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(OWA,1,"CreateTime"),"")+if(isNet," "+GetFieldS(OWA,1,"CreatedUser"),"");
             ДокMU[z]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+" "+Раб.Бюджет2005.TimeToStr(GetFieldT(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;
    S2.Visible=Страница=1;
    S3.Visible=Страница=1;
    S4.Visible=Страница=1;
 fi;
 btnРасшифр.Enabled=not Страница=1;
 --ГЭК 2
 if not AsLogical(S5.Visible)=(Страница=2):
    S5.Visible=Страница=2;
    S6.Visible=Страница=2;
    S7.Visible=Страница=2;
    РасчетГЭК2;
 fi;
 btnГЭК2.Enabled=not Страница=2;
 --Движение
 if not AsLogical(S8.Visible)=(Страница=3):
    S8.Visible =Страница=3;
    S9.Visible =Страница=3;
    S10.Visible=Страница=3;
    РасчетДвиж;
 fi;
 btnДвиж.Enabled=not Страница=3;
 --Сервис
 if not AsLogical(S11.Visible)=(Страница=4):
    S11.Visible=Страница=4;
 fi;
 btnСервис.Enabled=not Страница=4;
end;

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

Proc НеПустаяТаблица;
 if Расшифр=0: InsertFrame(Расшифр,1); fi;
end;

Proc Переход (FieldName:S; Iter:I);
 Template.Field=FieldName;
 Template.Frame=Iter;
end;

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

Proc ПолучитьДопАн(Iter:I);
var Справ,ТипБК,ПризнБК,ПризнКОСГУ,ИсклПризн_,tmp:S;
 if not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" ":
    tmp=Раб.Бюджет2005.ПризнВСправ(Расшифр[Iter].Призн," ",".*");
    tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
    ИсклПризн_=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
    Справ=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре,0,ИсклПризн_);
    ТипБК=Раб.Бюджет2005.ТипКБКСчета(КБК);
    if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|",ТипБК+".*","")="":
       ПризнБК="";
      else
       ПризнБК=ТипБК+".";
    fi;
    if not ПризнБК="":
       ПризнБК=ПризнБК+Раб.Бюджет2005.ВзятьКодКБК(КБК,ТипБК,"БК",False);
       Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",ПризнБК,"ФКР.*|КД.*|КИФД.*","|");
    fi;
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
       ПризнКОСГУ="КОСГУ."+Раб.Бюджет2005.ВзятьКодКБК(КБК,"","КОСГУ",False);
       tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн," ","КОСГУ.*","");
       if not Match(tmp,ПризнКОСГУ+"!"):
          Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",ПризнКОСГУ,"КОСГУ.*","|");
       fi;
    fi;
 fi;
end;

Proc ОбновитьПризн(Iter:I);
var Iter_,n1,n2:i;
var tmp:S;
 if Iter<1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 Iter_=Iter;
 for Iter=n1..n2 do
  if not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" ":
     tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре,0,"");
     Расшифр[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].Призн," ",tmp,"|");
     ПолучитьДопАн(Iter_);
  fi;
 od;
end;

Proc ОбновитьСч(Iter:I);
var Iter_,n1,n2:i;
var БК_,КОСГУ_:S;
 if ВД="" or КБК="": Exit; fi;
 if Iter<1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 Iter_=Iter;
 Раб.КСА.Начать;
 БК_=Раб.Бюджет2005.ВзятьКодКБК(КБК,"КД","БК",False);
 КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(КБК,"КД","КОСГУ",False);
 for Iter=n1..n2 do
  if КодСч_="":
     Расшифр[Iter].СчДеб="";
    else
     Расшифр[Iter].СчДеб=БК_+"."+ВД+"."+КодСч_+".560";
  fi;
  Расшифр[Iter].СчКре=БК_+"."+ВД+".401.10."+КОСГУ_;
  Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
  Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True):
    Message("Добавление счетов завершено");
 fi;
 ОбновитьПризн(Iter_);
end;

Func ПроверитьНаборСправ:L;
var Iter,z:I;
var Призн1_,Призн2_:S;
 ClearVariable(Buf);
 for Iter=1..Расшифр do
  Buf[Iter]=Расшифр[Iter].Призн;
 od;
 for Iter=1..Расшифр do
  z=SearchInArray(Buf,Расшифр[Iter].Призн,False);
  Призн1_=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter].Призн," ",True);
  Призн2_=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[z].Призн," ",True);
  if not z=-1 and not Раб.Бюджет2005.ПризнВСправ(Призн1_," ",".*")=Раб.Бюджет2005.ПризнВСправ(Призн2_," ",".*"):
     Message("Различный набор справочников",mtError);
     Template.Field="Призн_";
     Template.Frame=Iter;
     ^False;
  fi;
 od;
 ^True;
end;

Func ПроверитьУникальность:L;
var Iter1,Iter2:i;
 ClearVariable(Buf);
 for Iter1=1..Расшифр do
  Расшифр[Iter1].Призн=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter1].Призн," ",True);
  for Iter2=Iter1+1..Расшифр do
   if Расшифр[Iter1].Призн=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter2].Призн," ",True):
      Message("Повторный ввод, строка №"+Str(Iter1)+" = №"+Str(Iter2));
      Template.Field="Призн_";
      Template.Frame=Iter2;
      ^False;
   fi;
  od;
 od;
 ^True;
end;

Func Проверить:L;
var Iter:I;
 if ДатаОпер=1.1.100: Message("Введите дату принятия к учету",mtError); Template.Field="ДатаОпер"; ^False; fi;
 if НаимДок=nil:  Message("Введите наименование документа",mtError); Template.Field="НаимДок_Наим"; ^False; fi;
 if НаимДок_Код="": Message("Введите код документа",mtError); Template.Field="НаимДок_Код"; ^False; fi;
 if НомерДок="": Message("Введите номер документа",mtError); Template.Field="НомерДок_"; ^False; fi;
 if ДатаДок=1.1.100: Message("Введите дату документа",mtError); Template.Field="ДатаДок"; ^False; fi;
 if ДатаОпер<ДатаДок: Message("Дата принятия к учету не может быть ранее даты документа",mtError); Template.Field="ДатаДок"; ^False; fi;
 if СумДок=0: Message("Введите сумму документа",mtError); Template.Field="СумДок"; ^False; fi;
 if Срок=1.1.100: Message("Срок исполнения",mtError); Template.Field="Срок"; ^False; fi;
 if Контр=nil: Message("Выберите контрагента",mtError); Template.Field="Контр.КорИмя"; ^False; fi;
 if Name_A(Контр_Призн)=" ": Message("Неизвестный аналитический признак  '"+Контр_Призн+"'",mtError); ^False; fi;
 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;
 if Расшифр=0: Message("Заполните таблицу расшифровки",mtError);  Template.Field="Призн_"; Template.Frame=1; ^False; fi;
 Раб.КСА.Начать;
 for Iter=1..Расшифр do
  Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
  Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True):
    Message("Добавление счетов завершено");
 fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 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 Name_S(Расшифр[Iter].СчДеб)=" ": Message("Неизвестный счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Name_S(Расшифр[Iter].СчКре)=" ": Message("Неизвестный счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
  if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): Message("Счета "+Расшифр[Iter].СчДеб+"/"+Расшифр[Iter].СчКре+" не могут корреспондировать",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Trim(Расшифр[Iter].Призн+" "+Контр_Призн),ИсклПризн): Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Trim(Расшифр[Iter].Призн+" "+Контр_Призн),ИсклПризн): Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].Сум=0: Message("Введите сумму",mtError);  Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
 od;
 if not ПроверитьНаборСправ: ^False; fi;
 if not ПроверитьУникальность: ^False; fi;
 if not Round(СумДок,2)=Round(ВсегоСум,2): Message("Сумма расшифровки не равна сумме документа",mtError); Template.Field="ВсегоСум"; ^False; fi;
 ^True;
end;

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

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

Func Flags_OnEnter(FieldName: String; Iter: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 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;

Proc Field_onExit(FieldName: String; Iter: Integer);
 Переход(FieldName,Iter);
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);
    Переход(Field,1);
 fi;
 Return Cur;
end;

Func НаимДок_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if ПризнакИспользуется(FieldName): ^False; fi;
 Rec=Раб.Вспом.Договор_Наим.Выполнить(100);
 if not Rec=nil: 
    НаимДок=Rec; 
    hНаимДок=НаимДок;
    Переход(FieldName,1);
 fi;
 Return False;
end;

Func НомерДок_OnEnter(FieldName: String; Iter: Integer): logical;
 FlagEdit=not ПризнакИспользуется(FieldName);
 if FieldName="НомерДокДоп_":
    if НомерДок="": Message("Заполните номер документа",mtError); Template.Field="НомерДок_"; ^False; fi;
 fi;
 Return FlagEdit;
end;

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

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit:
    FlagEdit=False;
    Переход(FieldName,Iter);
   else
    if НомерДок_OnEnter(FieldName,Iter):
       FieldName=SubStr(FieldName,1,Length(FieldName)-1);
       PutVariableS(FieldName,"");
    fi;
 fi;
end;

Func КодПричины_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var tmp:S;
 ClearVariable(Buf);
 n=1;   Buf[n]="11 ненадлежащее исполнение поставщиком (подрядчиком, исполнителем) обязательств, предусмотренных контрактом, за исключением просрочки исполнения поставщиком (подрядчиком, исполнителем) обязательств (в том числе гарантийного обязательства), предусмотренных контрактом";
-- n=n+1; Buf[n]="12 ненадлежащее исполнение заказчиком обязательств, предусмотренных контрактом, за исключением просрочки исполнения обязательств, предусмотренных контрактом";
 n=n+1; Buf[n]="21 просрочка исполнения поставщиком (подрядчиком, исполнителем) обязательств, предусмотренных контрактом (в том числе гарантийного обязательства)";
-- n=n+1; Buf[n]="22 просрочка исполнения заказчиком обязательств, предусмотренных контрактом";
 n=Alternate("Причины начисления неустоек (штрафов, пеней)",Buf,-1,1,12);
 if not n=0:
    КодПричины=SubStr(Buf[n],1,2);
 fi;
 Return False;
end;

Func Контр_OnEnter(FieldName: String; Iter: Integer): logical;
var rec:record;
 if not Контр=nil:
    rec=OpenCardFile("Контрагент","",Контр,crdRecordOnly);
   else
    rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
 fi;
 if not Rec=nil:
    Контр=Rec;
    Контр_Призн=CardFileRecSign("Контрагент","Признак","К",Rec);
    Переход(FieldName,Iter);
 fi;
 Return  False;
end;

Proc Контр_onExit(FieldName: String; Iter: Integer);
 Контр_Призн="";
end;

Proc Контр_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Bln,msg,ff:S;
var Rec: Record;
var p:i;
 Field=AsString(Template.Field);
 if Match(Field,"Контр*"): Rec=Контр; msg="контрагента"; ff="Контр.КорИмя"; p=7; fi;
 if Rec=nil: Message("Выберите "+msg,mtError); Template.Field=ff; Exit; fi;
 if Field="Контр_Призн" :  Template.Field="Контр.КорИмя";
   |True: if Double:
             Field=SubStr(Field,p,255);
             ExecuteProc("Инфо.Контрагент.Вызвать",Rec,Bln,Field,0);
          fi;
 fi;
end;

Func ВД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Store,БК_:S;
 НеПустаяТаблица;
 Store=ВД;
 tmp=Раб.КБК.Список("*.?.205.41.*|*.?.205.81.*|*.?.209.*|*.?.401.10.140|*.?.401.10.180","","ВД");
 if tmp="": ^False; fi;
 ВД=tmp;
 hВД=ВД;
 if not Store=tmp and not КБК="":
    БК_=Раб.Бюджет2005.ВзятьКодКБК(КБК,"","КБК",False);
    if КодСч_="":
       if not Раб.Бюджет2005.ЕстьСчетПоМаске(БК_+"."+ВД+".205.41.*|"+БК_+"."+ВД+".205.81.*|"+БК_+"."+ВД+".209.??.*"): КБК=""; fi;
      else
       if not Раб.Бюджет2005.ЕстьСчетПоМаске(БК_+"."+ВД+"."+КодСч+".*"): КБК=""; fi;
    fi;
 fi;
 ОбновитьСч(0);
 Переход(FieldName,Iter);
 Return False;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица;
 if ВД="": Message("Выберите вид деятельности",mtError); Template.Field="ВД"; ^False; fi;
 tmp="(*.?.401.10.140|*.?.401.10.180)&*."+ВД+"."+Раб.Бюджет2005.МаскаСч8;
 Раб.КБК.Список_КБК_РазрДобав=True;
 Раб.КБК.Список_КБК_КОСГУ="140";
 Раб.КБК.Список_КБК_КодСч=ВД+".???.??";
 Раб.КБК.Список_КБК_РазрКОСГУ=True;
 tmp=Раб.КБК.Список(tmp,"КД","КБК+КОСГУ");
 if not tmp="":
    КБК=tmp;
    hКБК=КБК;
    ОбновитьСч(0);
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Func КодСч_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; ^False; fi;
 tmp=Раб.КБК.Список("*.?.205.41.*|*.?.205.81.*|*.?.209.40.*|*.?.209.71.*|*.?.209.83.*","","СЧ5");
 if not tmp="":
    КодСч=tmp;
    hКодСч=КодСч;
    ОбновитьСч(0);
 fi;
 Return False;
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);
 Return Cur;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if Проводить: ^False; fi;
 Iter=InsertFrame(Расшифр,Iter+1);
 ОбновитьСч(Iter);
 Return False;
end;

Func D_onEnter (Field:S; Iter:I):L;
 if Проводить: ^False; fi;
 DeleteFrame(Расшифр,Iter);
 ^False;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица;
 if ВД="": Message("Выберите вид деятельности",mtError); Template.Field="ВД"; ^False; fi;
 if КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; ^False; fi;
 ОбновитьСч(Iter);
 if Расшифр[Iter].СчДеб="": Message("Выберите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].СчКре="": Message("Выберите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре,0,ИсклПризн);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp+"|*&~*.*",False,False,hПризн);
 if not tmp="":
    hПризн=tmp;
    tmp=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    Расшифр[Iter].Призн=tmp;
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

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

Func Призн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var Rec: Record;
var tmp:S;
 Template.HideEditor(False);
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...",Раб.Договор.crdДоговор,"НомерДок","Номер документа","Рег and not НеДейств");
 if not Rec=nil:
    Iter=AsInteger(Template.Frame);
    tmp=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"Общ_Призн1");
    if not tmp="":
       Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    fi;
    tmp=GetCardFieldS(Раб.Договор.crdДоговор,Rec,"Общ_Призн2");
    if not tmp="":
       Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    fi;
    tmp="ДОГОВОР."+GetCardFieldS(Раб.Договор.crdДоговор,Rec,"Признак");
    Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    if not Расшифр[Iter].СчДеб="" and not Расшифр[Iter].СчКре="":
       tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре,0,"");
       Расшифр[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].Призн," ",tmp,"|");
    fi;
    if Контр=nil:
       Контр=GetCardFieldR(Раб.Договор.crdДоговор,Rec,"Контр");
       Контр_Призн=CardFileRecSign("Контрагент","Признак","К",Контр);
    fi;
 fi;
 Return Cur;
end;

Func Сум_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 if Расшифр=1:
    Template.HideEditor(False);
    Расшифр[1].Сум=СумДок;
 fi;
 Return Cur;
end;

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

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

Func ГЭК2вPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var File:S;
 РасчетГЭК2;
 if УпрГЭК2=0: Message("Нет данных для формирования PDF"); ^False; fi;
 for Iter=1..УпрГЭК2 do
  i=Раб.Вспом.Сканер.ЧитатьГЭК("РПО_СКАН_ДОК",RecordToInteger(ГЭК2Rec[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 ГЭК2_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
var Iter:I;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if Double:
    СканГЭК2_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="СПИ.";
 bln="ОТЧЕТЫ.РЕГИСТРЫ.КАРТОЧКА_0504054";
 PutVariableI(bln+".MM",Mon(ToDay+1));
 PutVariableI(bln+".YYYY",Year(ToDay+1));
 PutVariableL(bln+".НИ",True);
 PutVariableL(bln+".РежимСч",False);
 PutVariableS(bln+".Учреждение","");
 PutVariableS(bln+".ОКПО","");
 PutVariableS(bln+".ФИОБух","");
 PutVariableS(bln+".ПризнПодр","");
 PutVariableS(bln+".КБК","");
 PutVariableS(bln+".КОСГУ","");
 PutVariableL(bln+".ДебКре",n=2);
 PutVariableS(bln+".Сч",ВД+"."+КодСч_);
 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="СПИ.";
 PutVariableI(bln+".MM",Mon(ToDay+1));
 PutVariableI(bln+".YYYY",Year(ToDay+1));
 PutVariableL(bln+".НИ",True);
 PutVariableL(bln+".РежимСч",False);
 PutVariableS(bln+".Учреждение","");
 PutVariableS(bln+".ОКПО","");
 PutVariableS(bln+".ПризнПодр","");
 PutVariableS(bln+".КБК","");
 PutVariableS(bln+".КОСГУ","");
 PutVariableS(bln+".Сч",ВД+"."+КодСч_);
 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;
var Field:S;
 if Признак="":
    Message("Выполните сохранение карточки",mtWarning);
   else
    Refresh;
    voc="СПИ.";
    if AsString(Template.Field)="ОтчПров":
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"*."+ВД+"."+КодСч_+".*",voc+Признак+"!");
      else
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."010_К"',1.1.100,ToDay+1,"*."+ВД+"."+КодСч_+".*",voc+Признак+"!");
    fi;
 fi;
end;

Proc Отч_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln,voc:s;
 if Признак="":
    Message("Выполните сохранение карточки",mtWarning);
   else
    bln="ДТ.ОТЧЕТ_СПИ";
    voc="СПИ.";
    PutVariableL(bln+".fСрок",False);
    PutVariableL(bln+".fСнято",False);
    PutVariableD(bln+".ДН",Dat(1,1,Year(ToDay)));
    PutVariableD(bln+".ДК",ToDay+1);
    PutVariableS(bln+".МаскаКБК","");
    PutVariableR(bln+".МаскаКБК",nil);
    PutVariableS(bln+".ПризнДоп",voc+Признак);
    PutVariableL(bln+".Run",True);
    OpenBlank(bln,True);
 fi;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbПроводить_onChange(Sender: String);
var Flag:L;
 Flag=Проводить;
 if Проводить:
    Проводить=Проверить;
   else
    if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
       EditorCancel;
    fi;
 fi;
 cbПроводить.State=Проводить;
 Оформление;
 if Flag=Проводить: EditorApply; 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;
 РасчетГЭК2;
 EditorCancel;
 for Iter=1..УпрГЭК2 do
  Flag=ExecuteFuncL("Раб.Вспом.Скан_Док.Стереть",ГЭК2Rec[Iter]);
 od;
 OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Current));
 Try
  BeginChanging(OWA);
  Try
   DeleteRecord(OWA,1);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 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,Iter:I;
var Rec: Record;
 if not Проверить: Exit; fi;
 if not CurrentState=CrdusUnmodified:
    EditorApply;
 fi;
 Страница=3;
 ВывестиСтраницу;
 Refresh;
 Призн_="СПИ."+Признак;
 Сум_=Saldo("*."+ВД+"."+КодСч_+".*{"+Призн_+"}",Dat(1,1,Year(ToDay)+1));
 if not Round(Сум_,2)=0:
    if EnqOkCancel("По учету числится сумма "+Format("%.2N",Сум_)+"^MВы уверены, что хотите, повторно принять к учету сумму "+Format("%.2N",СумДок)+" ?" ,mtWarning)=cmCancel: Exit; fi;
 fi;
 Crd="РПО_БУХСПРАВКА";
 if not ExistsCardFile(Crd):
    Message("Картотека '"+Crd+"' не найдена",mtError);
    Exit;
 fi;
 Призн_=Раб.Бюджет2005.Объединить("СПИ."+Признак,Контр_Призн," ");
 Кмнт_="Принято к учету "+Lo(НаимДок_Наим)+if(СерияДок="",""," "+СерияДок)+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Содерж;
 OWA=OpenWorkArea(Crd,"ДатаСпр","1=0");
 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,"РЕКВ",Раб.Бюджет2005.НашРекв);
   OA=OpenArray(OWA,n,"ПОЗИЦИИ","");
   for Iter=1..Расшифр do
    i=InsertRecord(OA,Iter);
    i=PutFieldS(OA,i,"СОДЕРЖ",Кмнт_);
    i=PutFieldS(OA,i,"НОМДОК",Раб.Бюджет2005.Объединить(СерияДок,НомерДок," №"));
    i=PutFieldD(OA,i,"ДАТАДОК",ДатаДок);
    i=PutFieldS(OA,i,"СЧДЕБ",Расшифр[Iter].СчДеб);
    i=PutFieldS(OA,i,"СЧКРЕ",Расшифр[Iter].СчКре);
    i=PutFieldN(OA,i,"СУММА",Расшифр[Iter].Сум);
    i=PutFieldS(OA,i,"ПРИЗН",Trim(Призн_+" "+Расшифр[Iter].Призн));
    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)));
   od;
   n=PutFieldS(OWA,n,"КМНТ",Кмнт_);
   n=PutFieldS(OWA,n,"РЕЖИМ","");
   n=PutFieldS(OWA,n,"ФИОРУК",GetFieldS(OWA,n,"РЕКВ.ФИОРук"));
   n=PutFieldS(OWA,n,"ФИОБУХ",GetFieldS(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",False);
   n=PutFieldN(OWA,n,"ИТОГСУММА",СумДок);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 OpenBlank("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА",True,Rec);
 РасчетДвиж;
end;

Proc btnСписать_OnClick(Sender: String);
var OWA,OA,n,i,ii,Iter:i;
var ff,Призн_,Кмнт_:S;
var Сум_:N;
var Rec: Record;
 if ver=0:
    if not Проводить: Message("Карточка должна быть принята к учету",mtError); Template.Object="cbПроводить"; Exit; fi;
   else
    if not Проверить: Exit; fi;
 fi;
 if not CurrentState=CrdusUnmodified:
    EditorApply;
 fi;
 Страница=3;
 ВывестиСтраницу;
 Refresh;
 Призн_="СПИ."+Признак;
 Сум_=Saldo("*."+ВД+"."+КодСч_+".*{"+Призн_+"}",Dat(1,1,Year(ToDay)+1));
 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;
 ClearVariable(Buf);
 Buf[1]="Добавить запись в бухсправку";
 Buf[2]="Добавить запись в НОВУЮ бухсправку";
 i=Alternate("Выберите режим",Buf,-1,1,12);
 if i=0: Exit; fi;
 if i=1:
    ff="not Проводить";
    Rec=OpenCardFile("РПО_БУХСПРАВКА",ff);
    if Rec=nil: Exit; fi;
    ff="UKey="+RecordToString(Rec);
 fi;
 Призн_=Раб.Бюджет2005.Объединить("СПИ."+Признак,Контр_Призн," ");
 Кмнт_="Снято с учета "+Lo(НаимДок_Наим)+if(СерияДок="",""," "+СерияДок)+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Содерж;
 OWA=OpenWorkArea("РПО_БУХСПРАВКА","ДатаСпр",ff);
 Try
  BeginChanging(OWA,False);
  Try
   if i=2:
      n=InsertRecord(OWA);
      n=PutFieldI(OWA,n,"НОМЕР",Раб.Обл.СледСУчетомДаты("РПО_БУХСПРАВКА","Номер","ДатаСпр",ToDay));
      n=PutFieldD(OWA,n,"ДАТАСПР",ToDay);
      n=PutFieldR(OWA,n,"РЕКВ",Раб.Бюджет2005.НашРекв);
      n=PutFieldS(OWA,n,"КМНТ",Кмнт_);
      n=PutFieldS(OWA,n,"РЕЖИМ","");
      n=PutFieldS(OWA,n,"ФИОРУК",GetFieldS(OWA,n,"РЕКВ.ФИОРук"));
      n=PutFieldS(OWA,n,"ФИОБУХ",GetFieldS(OWA,n,"РЕКВ.ФИОБух"));
      n=PutFieldD(OWA,n,"ДАТАИСП",ToDay);
      n=PutFieldL(OWA,n,"ПРОВОДИТЬ",False);
      n=PutFieldS(OWA,n,"РПО_КЛЮЧ","");
      n=PutFieldL(OWA,n,"CLOSEDMODFOB",False);
     else
      n=1;
    fi;
    Rec=GetRecordKey(OWA,n);
    OA=OpenArray(OWA,n,"ПОЗИЦИИ","");
    ii=Records(OA);
    for Iter=1..Расшифр do
     i=InsertRecord(OA,ii+Iter);
     i=PutFieldS(OA,i,"СОДЕРЖ",НаимДок_Наим+" "+Раб.Бюджет2005.Объединить(СерияДок,НомерДок," №")+" от "+DateToString(ДатаДок));
--     i=PutFieldS(OA,i,"НОМДОК",Раб.Бюджет2005.Объединить(СерияДок,НомерДок," №"));
--     i=PutFieldD(OA,i,"ДАТАДОК",ДатаДок);
     i=PutFieldS(OA,i,"СЧДЕБ",Расшифр[Iter].СчКре);
     i=PutFieldS(OA,i,"СЧКРЕ",Расшифр[Iter].СчДеб);
     i=PutFieldN(OA,i,"СУММА",Расшифр[Iter].Сум);
     i=PutFieldS(OA,i,"ПРИЗН",Trim(Призн_+" "+Расшифр[Iter].Призн));
     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)));
    od;
    CloseWorkArea(OA);
    EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 OpenBlank("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА",True,Rec);
 РасчетДвиж;
end;

Func Расшифр_OnInsert(SectName: String): Logical;
 Return not Проводить;
end;

Func Расшифр_OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Проводить;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen (Create:L);
 FlagInit=True;
end;

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

Proc OnRead;
var t:i;
 ОткрНастр(False);
 Настр(False);
 if CurrentState=CrdusInserted:
    if ver=0: ver=1; fi;
    ДатаОпер=ToDay;
    Проводить=False;
    ClosedModFob=False;
    НеПустаяТаблица;
    if НаимДок=nil: НаимДок=hНаимДок; fi;
    if ВД="": ВД=hВД; fi;
    if КБК="": КБК=hКБК; fi;
    if КодСч="": КодСч=hКодСч; fi;
 fi;
 if not FlagInit: ВывестиСтраницу; Оформление; fi;
 if Страница=2: РасчетГЭК2; 
   |Страница=3: РасчетДвиж;
 fi;
end;

Func OnVerify: Logical;
 if НаимДок=nil:  Message("Введите наименование документа",mtError); Template.Field="НаимДок_Наим"; ^False; fi;
 if НаимДок_Код="": Message("Введите код документа",mtError); Template.Field="НаимДок_Код"; ^False; fi;
 if НомерДок="": Message("Введите номер документа",mtError); Template.Field="НомерДок_"; ^False; fi;
 if ДатаДок=1.1.100: Message("Введите дату документа",mtError); Template.Field="ДатаДок"; ^False; fi;
 Признак=Раб.Договор.ConvertStr(Str(Year(ДатаДок)))+"."
        +Раб.Договор.ConvertStr(НаимДок_Код)+"."
        +Раб.Договор.ConvertStr(Trim(СерияДок+" "+НомерДок+" "+НомерДокДоп));
 Признак_Кмнт=НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Содерж;
 Return ЗаполнитьКлючДок;
end;

--Обработчики событий шаблона -----
--

Конец
