-- Шаблон создан мастером бланков
-- 03.11.2003 12:40:28
--
БланкСШаблоном "Книга учета бланков строгой отчетности ф.0504045";

fДок:L;
fБыстрРасч:L;

var УпрНастр:L;

var Def_Справ4:S="МОЛ.*|Ф.*|К.*|ПБС.*";

Справ4:S=[Def_Справ4];

ДН:D;
ДК:D;

Учреждение:S;
ОКПО:S;

ПризнПодр:S;
var НаимПодр:S=if(Name_A(ПризнПодр)="" or Name_A(ПризнПодр)=" ",ПризнПодр,Name_A(ПризнПодр));

НомСч:S=["ЗАБ.03"];

ПризнДенДок:S;
var НаимДенДок:S=if(Name_A(ПризнДенДок)="" or Name_A(ПризнДенДок)=" ",ПризнДенДок,Name_A(ПризнДенДок));

КодФ:S;
ЕдИзм:S;
Точн:I;

УслАнДоп:S;

var Ключ[]:S;

var Упр:I;

var Тип[]:I;
var Кол[]:N;

var Дт[]:D;
var ФИО[]:S;
var Осн[]:S;
var П_Кол[]:S=if(Тип[$]= 1:Str(Кол[$],Точн)+" "+ЕдИзм|Тип[$]=-1:""|True:"х");
var П_Ном[]:S;
var Р_Кол[]:S=if(Тип[$]=-1:Str(Кол[$],Точн)+" "+ЕдИзм|Тип[$]= 1:""|True:"х");
var Р_Ном[]:S;
var О_Кол[]:S=if(Тип[$]= 0,Str(Кол[$],Точн)+" "+ЕдИзм,"х");
var О_Ном[]:S;
var ID[]:I;
var Серия[]:S;
var НомН[]:N;
var НомК[]:N;
var Разм[]:I;

var Итог_ПКол:N;
var Итог_ПКол_:S=if(Итог_ПКол=0,"",Str(Итог_ПКол,Точн)+" "+ЕдИзм);
var Итог_РКол:N;
var Итог_РКол_:S=if(Итог_РКол=0,"",Str(Итог_РКол,Точн)+" "+ЕдИзм);
var Итог_ОКол:N;
var Итог_ОКол_:S=if(Итог_ОКол=0,"",Str(Итог_ОКол,Точн)+" "+ЕдИзм);

var tДт:D;
var tСум:N;
var tКол:N;
var tСерия:S;
var tНомН:N;
var tНомК:N;
var tРазм:I;
var tФИО:S;
var tОсн:S;
var tТип:I;

var ОКлюч[]:S;
var ОСерия[]:S;
var ОРазм[]:I;
var ОНомер[]:N;
var ОКол[]:N;

var OWAПрих:I;
var OAПрих:I;

var OWAРасх:I;
var OAРасх:I;

btnРасчет   : Object;
btnНастр    : Object;
btnПечать   : Object;
btnЗакрыть  : Object;
cbДок       : Object;
cbБыстрРасч : Object;

var SelfCrd:S="РПО_ДенДок_Вид";

var BufSub[]:S;
--
--Процедуры и функции -------------                           
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Ключ);
 ClearVariable(Дт);
 ClearVariable(ФИО);
 ClearVariable(Осн);
 ClearVariable(П_Ном);
 ClearVariable(Р_Ном);
 ClearVariable(О_Ном);
 ClearVariable(ID);
 ClearVariable(Тип);
 ClearVariable(Кол);
 ClearVariable(Серия);
 ClearVariable(НомН);
 ClearVariable(НомК);
 ClearVariable(Разм);
 --
 ClearVariable(Итог_ПКол);
 ClearVariable(Итог_РКол);
 ClearVariable(Итог_ОКол);
 --
 ClearVariable(ОКлюч);
 ClearVariable(ОСерия);
 ClearVariable(ОРазм);
 ClearVariable(ОНомер);
 ClearVariable(ОКол);
end;

Proc ОбновитьСостояниеФлагов;
 if fДок and fБыстрРасч:
   fДок = false;
 fi;
 cbДок.Enabled = not fБыстрРасч;
end;

Proc ЗакрытьНастр;
 УпрНастр=False;
 btnРасчет.Visible=True;
 btnНастр.Visible=True;
 btnПечать.Visible=True;
 btnЗакрыть.Visible=True;
 cbДок.Visible=True;
end;

Proc ОткрытьНастр;
 УпрНастр=True;
 Template.Field="Справ";
 Template.Field="УслСч";
 btnРасчет.Visible=False;
 btnНастр.Visible=False;
 btnПечать.Visible=False;
 btnЗакрыть.Visible=False;
 cbДок.Visible=False;
end;

Proc НастрУмолч;
 Справ4=Def_Справ4;
end;

Proc ЗаполнитьРекв(Rec: Record);
 if Rec=nil: Rec=Раб.Бюджет2005.НашРекв; fi;
 if Rec=nil: Exit; fi;
 Учреждение=GetCardFieldS('Контрагент',Rec,"КорИмя");
 ОКПО=GetCardFieldS('Контрагент',Rec,"ОКПО");
end;

Func ПолучитьФИО (t:i):S;
var n:i;
var tmp,R:S;
 R="";
 for n=1..TransSignCount(t) do
  tmp=TransSignName(t,n);
  if Match(tmp,"К.*") or Match(tmp,"МОЛ.*") or Match(tmp,"Ф.*") or Match(tmp,"ПБС.*"):
     R=Name_A(tmp);
     if R="" or R=" ": R=tmp; Break; fi;
  fi;
 od;
 ^R;
end;

Func NumToStr(Value:N; Len:I):S;
var Ret:S;
 if Len=0: ^""; fi;
 Ret=Str(Value);
 Ret=RepStr("0",Len-Length(Ret))+Ret;
 ^Ret;
end;

Proc ВзятьИзКарт(OWA:I; UKey:S; OA:I; t:i);
var z,n,nn:I;
var FF,НомН_,НомК_,Призн_,ПризнДеб_,ПризнКре_,tmp:S;
var Rec: Record;
 tСерия="";
 tНомН=0;
 tНомК=0;
 tРазм=0;
 z=GetRecordNumber(OWA,StringToRecord(UKey));
 if not z=0:
     tФИО=GetFieldS(OWA,z,"ФИО");
     tОсн=GetFieldS(OWA,z,"Осн");
     FF="ДЕНДОКВИД_ПРИЗН='"+ПризнДенДок+"'";
     FF=FF+" and КОЛ="+Str(tКол,TransAccuracy(t));
     FF=FF+" and СУММА="+Str(tСум,Accuracy);
     SetFilter(OA,FF);
     nn=Records(OA);
     if not nn=0:
        tmp=TransSigns(t);
        if not Pos("+",tmp)=0:
           ПризнДеб_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tmp," ","+*","");
           ПризнДеб_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(SubStr(ПризнДеб_,2,255),"+"," ");
          else
           ПризнДеб_="";
        fi;
        if not Pos("-",tmp)=0:
           ПризнКре_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tmp," ","-*","");
           ПризнКре_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(SubStr(ПризнКре_,2,255),"-"," ");
          else
           ПризнКре_="";
        fi;
        Призн_=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(tmp," ",Trim(GetFieldS(OWA,z,"ОбщПризн")+" "+ПризнДенДок+" "+GetFieldS(OWA,z,"ПризнПодр")+" +* -*")," ");
        for n=1..nn do
         Rec=GetRecordKey(OA,n);
         if SearchInArray(BufSub,Str(OWA)+" "+UKey+" "+RecordToString(Rec),True)=-1: --проверяем былали обработана запись подтаблицы ранее при совпадении критерия поиска
            if Раб.Бюджет2005.ПроверитьНаборСлов(GetFieldS(OA,n,"ПРИЗН")," ",Призн_," ","") and
               Раб.Бюджет2005.ПроверитьНаборСлов(GetFieldS(OA,n,"ПРИЗНДЕБ")," ",ПризнДеб_," ","") and
               Раб.Бюджет2005.ПроверитьНаборСлов(GetFieldS(OA,n,"ПРИЗНКРЕ")," ",ПризнКре_," ",""):
               InsertInArraySort(BufSub,Str(OWA)+" "+UKey+" "+RecordToString(Rec));
               tСерия=GetFieldS(OA,n,"СерияБум");
               if tОсн="": tОсн=GetFieldS(OA,n,"Коммент"); fi;
               НомН_=GetFieldS(OA,n,"НомерБум_Н");
               НомК_=GetFieldS(OA,n,"НомерБум_К");
               tРазм=Max(Length(НомН_),Length(НомК_));
               tНомН=Round(НомН_);
               tНомК=Round(НомК_);
               Break;
            fi;
         fi;
        od;
     fi; --if Records(OA)>0:
    else
     tФИО=ПолучитьФИО(t);
     tОсн=TransComment(t);
 fi; --not z=0:
end;

Proc РасчетОст(Key:S; k:I);
var n,nn,p1,z:I;
var Кол_:N;
var tmp:S;
var ДТ_:D;
 if Key="Н": Key="A"; Дт_=ДН-1; tmp="Остаток на начало периода";
   |Key="К": Key="C"; Дт_=if(ДК=1.1.100,ToDay,ДК)+1; tmp="Остаток на конец периода";
   |True: tmp="                            х";
 fi;
 nn=LengthOfArray(ОКлюч);
 ShowProgress(nn*6,"Расчет...");
 Кол_=ОКол[1];
 p1=1;
 z=-1;
 for n=1..nn do
  ProgressPos(nn*k+n);
  if fДок:
     if not ОКол[n]=0:
        if z=-1: z=InsertInArraySort(Ключ,Key); else z=z+1; fi;
        InsertFrame(Упр,z);
        Дт[z]=Дт_;
        ФИО[z]=tmp;
        Осн[z]="                           х";
        П_Ном[z]="х";
        Р_Ном[z]="х";
        ID[z]=-1;
        Тип[z]=0;
        Кол[z]=ОКол[n];
        Серия[z]=ОСерия[n];
        НомН[z]=ОНомер[n];
        НомК[z]=ОНомер[n];
        Разм[z]=ОРазм[n];
        О_Ном[z]=Серия[z]+" № "+NumToStr(НомН[z],Разм[z]);
        if Key="C": Итог_ОКол=Итог_ОКол+Кол[z]; fi;
        Ключ[z]=Key;
     fi;
    else
     if (ОСерия[n]=ОСерия[n+1] and ОРазм[n]=ОРазм[n+1] and ОКол[n]=ОКол[n+1] and ОНомер[n]+1=ОНомер[n+1]) or 
        (ОСерия[n]="" and ОСерия[n]=ОСерия[n+1] and ОРазм[n]=0 and ОРазм[n]=ОРазм[n+1]):
        Кол_=Кол_+ОКол[n+1];
       else
        if not Кол_=0:
           if z=-1: z=InsertInArraySort(Ключ,Key); else z=z+1; fi;
           InsertFrame(Упр,z);
           Дт[z]=Дт_;
           ФИО[z]=tmp;
           Осн[z]="                           х";
           П_Ном[z]="х";
           Р_Ном[z]="х";
           ID[z]=-1;
           Тип[z]=0;
           Кол[z]=Кол_;
           Серия[z]=ОСерия[p1];
           НомН[z]=ОНомер[p1];
           НомК[z]=ОНомер[n];
           Разм[z]=ОРазм[p1];
           О_Ном[z]=Серия[z]+" № "+if(НомН[z]=НомК[z],NumToStr(НомН[z],Разм[z]),NumToStr(НомН[z],Разм[z])+"-"+NumToStr(НомК[z],Разм[z]));
           if Key="C": Итог_ОКол=Итог_ОКол+Кол[z]; fi;
           Ключ[z]=Key;
        fi; --if not Кол_=0:
        p1=n+1;
        Кол_=ОКол[p1];
     fi;
  fi; --if fДок:
 od;
end;

Proc РасчетОст2(Key:S; k:I);
var n,nn,p1,z:I;
var Кол_:N;
var tmp:S;
var ДТ_:D;
 if Key="Н": Key="A"; Дт_=ДН-1; tmp="Остаток на начало периода";
   |Key="К": Key="C"; Дт_=if(ДК=1.1.100,ToDay,ДК)+1; tmp="Остаток на конец периода";
   |True: tmp="                            х";
 fi;
 РАБ.ДИАПАЗОНЫ.Обработка;
 nn=РАБ.ДИАПАЗОНЫ.КолД;
 ShowProgress(nn,"Расчет...");
 for n=1..nn do
  ProgressPos(nn);
  if fДок:
    else
      InsertFrame(Упр,Упр+1);
      РАБ.ДИАПАЗОНЫ.Извлечь(n, 1);
      Дт[Упр]=Дт_;
      ФИО[Упр]=tmp;
      Осн[Упр]="                           х";
      П_Ном[Упр]="х";
      Р_Ном[Упр]="х";
      ID[Упр]=-1;
      Тип[Упр]=0;
      Серия[Упр]=РАБ.ДИАПАЗОНЫ.буфСер1;
      НомН[Упр]=РАБ.ДИАПАЗОНЫ.буфНач1;
      НомК[Упр]=РАБ.ДИАПАЗОНЫ.буфКон1;
      Кол[Упр]=(НомК[Упр]-НомН[Упр]+1)*РАБ.ДИАПАЗОНЫ.буфКол1;
      Разм[Упр]=РАБ.ДИАПАЗОНЫ.буфРазм1;
      О_Ном[Упр]=Серия[Упр]+" № "+NumToStr(НомН[Упр],Разм[Упр])+"-"+NumToStr(НомК[Упр],Разм[Упр]);
      if Key="C": Итог_ОКол=Итог_ОКол+Кол[Упр]; fi;
  fi;
 od;
end;

Proc РасчетПров(vУслСч:S; vУслАн:S; vТип:S; k:I);
var t,z,p,l:i;
var UKey,Crd,YMD,Key,Разм_:S;
var ДН_,ДК_:D;
var Номинал,n,n1,n2:N;
 ClearVariable(BufSub);
 if vТип="Ост+" or vТип="Ост-":
    ДН_=1.1.100;
    ДК_=ДН;
   else
    ДН_=ДН;
    ДК_=if(ДК=1.1.100,ToDay,ДК)+1;
 fi;
 ShowProgress((ДК_-ДН_)*6,"Расчет...");
 if Match(vТип,"*+"): tТип=1; else tТип=-1; fi;
 for Transaction t=vУслСч+"{"+vУслАн+"}",ДН_,ДК_ do
  Crd=TransCardFile(t);
  UKey=RecordToString(TransRecord(t));
  tДт=TransDate(t);
  tСум=TransSum(t);
  tКол=TransSum(t,"Кол");
  p=(ДК_-ДН_)*k+(tДт-ДН_);
  ProgressPos(p);
  if Crd="РПО_ДенДок_Приход" and not OAПрих=-1: ВзятьИзКарт(OWAПрих,UKey,OAПрих,t);
    |Crd="РПО_ДенДок_Расход" and not OAРасх=-1: ВзятьИзКарт(OWAРасх,UKey,OAРасх,t);
    |True: tФИО=ПолучитьФИО(t); tОсн=TransComment(t); tСерия=""; tНомН=0; tНомК=0; tРазм=0;
  fi;

  --Остатки
  if fБыстрРасч:
    z = РАБ.ДИАПАЗОНЫ.КолД;
    РАБ.ДИАПАЗОНЫ.буфСер1 = tСерия;
    РАБ.ДИАПАЗОНЫ.буфНач1 = tНомН;
    РАБ.ДИАПАЗОНЫ.буфКон1 = tНомК;
    РАБ.ДИАПАЗОНЫ.буфКол1 = int(tКол/(tНомК-tНомН+1)*tТип);
    РАБ.ДИАПАЗОНЫ.буфРазм1 = int(tРазм);
    РАБ.ДИАПАЗОНЫ.Сохранить(z + 1, 1);
  else
    Разм_=Str16(tРазм);
    Номинал=Round(tКол/(tНомК-tНомН+1),Точн);
    n=tНомН;
    While Round(n)<=Round(tНомК) do
     Key=tСерия+" "+Разм_+" "+NumToStr(n,tРазм);
     z=SearchInArray(ОКлюч,Key,True);
     if z=-1:
        z=InsertInArraySort(ОКлюч,Key);
        InsertInArray(ОСерия,z,tСерия);
        InsertInArray(ОРазм,z,tРазм);
        InsertInArray(ОНомер,z,n);
        InsertInArray(ОКол,z,Номинал*tТип);
       else
        ОКол[z]=ОКол[z]+(Номинал*tТип);
     fi;
     n=n+1;
    od;
  fi;

  --
  if vТип="Движ+" or vТип="Движ-":
     YMD=DateToString(tДт);
     YMD=ExtractWord(3,YMD,".")+ExtractWord(2,YMD,".")+ExtractWord(1,YMD,".")+if(vТип="Движ+","+","-");
     if fДок:
        Key="B"+" "+YMD+" "+tСерия+" "+Str16(tРазм)+" "+NumToStr(tНомН,tРазм);
        n1=tНомН; n2=tНомК;
       else
        Key="B"+" "+YMD+" "+tСерия+" "+Str16(tРазм)+" "+NumToStr(tНомН,tРазм)+" "+NumToStr(tНомК,tРазм);
        n1=1; n2=1;
     fi;
     z=-1;
     n=n1;
     While Round(n)<=Round(n2) do
      if z=-1:
         z=InsertInArraySort(Ключ,Key); 
        else 
         z=z+1; 
         InsertInArray(Ключ,z,Key); 
      fi;
      InsertFrame(Упр,z);
      Дт[z]=tДт;
      ФИО[z]=tФИО;
      Осн[z]=tОсн;
      Тип[z]=tТип;
      Кол[z]=if(fДок,Номинал,tКол);
      ID[z]=t;
      Серия[z]=tСерия;
      НомН[z]=if(fДок,n,tНомН);
      НомК[z]=if(fДок,n,tНомК);
      Разм[z]=tРазм;
      if vТип="Движ+": 
         П_Ном[z]=Серия[z]+" № "+if(НомН[z]=НомК[z],NumToStr(НомН[z],Разм[z]),NumToStr(НомН[z],Разм[z])+"-"+NumToStr(НомК[z],Разм[z]));
         Итог_ПКол=Итог_ПКол+Кол[z];
      fi; --Приход
      if vТип="Движ-": 
         Р_Ном[z]=Серия[z]+" № "+if(НомН[z]=НомК[z],NumToStr(НомН[z],Разм[z]),NumToStr(НомН[z],Разм[z])+"-"+NumToStr(НомК[z],Разм[z]));
         Итог_РКол=Итог_РКол+Кол[z];
      fi; --Расход
      О_Ном[z]="х";
      n=n+1;
    od;  --While Round(n)<=Round(n2) do
  fi; --if vТип="Движ+" or vТип="Движ-":
 od; --for Transaction t=vУслСч+"{"+vУслАн+"}",ДН_,ДК_ do
end;

Proc Расчет;
var УслСч,УслАн:S;
 Очистить;
 УслСч=НомСч;
 УслАн=Раб.Бюджет2005.Объединить(ПризнДенДок,ПризнПодр,"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,if(УслАнДоп="","","("+УслАнДоп+")"),"&");
 Refresh;
 ShowProgress(0,"Расчет...");
 OWAПрих=OpenWorkArea("РПО_ДенДок_Приход","");
 Try
  if not Records(OWAПрих)=0: OAПрих=OpenArray(OWAПрих,1,"Приход","","1=0"); else OAПрих=-1; fi;
  OWAРасх=OpenWorkArea("РПО_ДенДок_Расход","");
  Try
   if not Records(OWAРасх)=0: OAРасх=OpenArray(OWAРасх,1,"Расход","","1=0"); else OAРасх=-1; fi;

   РАБ.ДИАПАЗОНЫ.Очистка;

   --Считаем остатки на начало
   РасчетПров("+"+УслСч,УслАн,"Ост+",0);
   РасчетПров("-"+УслСч,УслАн,"Ост-",1);
   if fБыстрРасч: РасчетОст2("Н",2); else РасчетОст("Н",2); fi;
   --Движение
   РасчетПров("+"+УслСч,УслАн,"Движ+",3);
   РасчетПров("-"+УслСч,УслАн,"Движ-",4);
   --Считаем остатки на конец
   if fБыстрРасч: РасчетОст2("К",5); else РасчетОст("К",5); fi;
  Finally
   CloseWorkArea(OWAРасх);
  end;
 Finally
  CloseWorkArea(OWAПрих);
  CloseProgress;
 end;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Proc ВосстанНастр_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if EnqOkCancel("Восстановить значения по умолчанию?")=cmCancel: Exit; fi;
 НастрУмолч;
 Очистить;
 Message("Значение по умолчанию восстановлены");
end;

Proc ЗакрытьНастр_OnClick(Row: Integer; Col: Integer; Double: Logical);
 ЗакрытьНастр;
end;

Func Справ4_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("*",True);
 if tmp="": ^False; fi;
 if Раб.Бюджет2005.MatchMask(tmp+".",Справ4): Message("Повторный ввод справочника "+tmp,mtError); ^False; fi;
 Справ4=Раб.Бюджет2005.Объединить(Справ4,tmp+".*","|");
 Return False;
end;

Proc Дата_onExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func Дата_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
 Очистить;
 Return Cur;
end;

Func Учреждение_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","НАШЕ",nil,crdRecordOnly);
 if Rec=nil: ^False; fi;
 ЗаполнитьРекв(Rec);
 Return False;
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П.*");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 Очистить;
 ^False;
end;

Proc НаимПодр_OnExit(FieldName: String; Iter: Integer);
 ПризнПодр="";
 Очистить;
end;

Func НомСч_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AccountElection("ЗАБ.03!|ЗАБ.08!",False,НомСч);
 if tmp="": ^False; fi;
 НомСч=tmp;
 УслАнДоп="";
 Очистить;
 Return False;
end;

Func НаимДенДок_onEnter (Field:S; Iter:I):L;
var tmp:S;
var Rec:Record;
 tmp=AnaElection("ДенДок.*");
 if tmp="": ^False; fi;
 ПризнДенДок=tmp;
 Rec=SignToRecord(tmp);
 if Rec=Nil: ^False; fi;
 ЕдИзм=GetCardFieldS(SelfCrd,Rec,"ЕдИзм");
 Точн=GetCardFieldI(SelfCrd,Rec,"Точ");
 КодФ=GetCardFieldS(SelfCrd,Rec,"КОД");
 if КодФ="": КодФ=SubStr(ПризнДенДок,Pos(".",ПризнДенДок)+1,255); fi;
 Очистить;
 ^False;
end;

Func УслАнДоп_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:N;
 Try
  z=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Proc УслАнДоп_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func УслАнДоп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 if НомСч="": Message("Введите номер счета",mtError); Template.Field="НомСч"; ^Cur; fi;
 tmp=Раб.Бюджет2005.СписокСправ(НомСч,0,"");
 if not tmp="": tmp="("+tmp+")|~*.*"; else tmp="*"; fi;
 tmp=AnaElection(tmp);
 if tmp="": ^Cur; fi;
 УслАнДоп=Раб.Парам_Отч.Объединить(УслАнДоп,tmp);
 Очистить;
 Return  Cur;
end;

Func Проводка (Field:S; Iter:I):L;
 if ID[Iter]=-1:
   else
    TransOpenJur(ID[Iter]);
 fi;
 ^False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_onClick (Obj:S);
 if ДН=1.1.100: Message("Введите дату открытия книги",mtError); Template.Field="ДН"; Exit; fi;
 if ДН>ДК and not ДК=1.1.100: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 if НомСч="": Message("Введите номер счета",mtError); Template.Field="НомСч"; Exit; fi;
 if ПризнДенДок="": Message("Введите наименование формы строгой отчетности",mtError); Template.Field="НаимДенДок"; Exit; fi;
 Расчет;
 Message("Расчет завершен");
end;

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

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn('','','РПО.ОТЧЕТЫ.РЕГИСТРЫ.КНИГА_УЧЕТА_БСО.000.cfg','',1);
end;

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

Proc cbДок_OnChange(Sender: String);
 Очистить;
end;

Proc cbБыстрРасч_OnChange(Sender: String);
 ОбновитьСостояниеФлагов;
end;

--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 ОбновитьСостояниеФлагов;
 if Учреждение="": ЗаполнитьРекв(nil); fi;
 Раб.Настр_Печать.Cfg("","РПО.ОТЧЕТЫ.РЕГИСТРЫ.КНИГА_УЧЕТА_БСО.000.cfg");
end;
--Обработчики событий шаблона -----
--



Конец
