-- Шаблон создан мастером бланков
-- 12.02.2006 12:44:15
--
БланкСШаблоном [03.04.2007] "Свертка журналов";

ПутьВыгруз:S;

ДН:D;
ДК:D;

УслСч:S=["~(*.?.50?.??.*|*.?.ЗАБ.??.*)"];
УслАн:S;
var СписокУслАн[]:S;
fileУслАн:S;

ИсклСправ:S;
var ИсклСправ_:S=ИсклСправ;
var ИсклПризн[]:S;
fileИсклПризн:S;

НаимПериод:S=["Произвольный"];

Упр:I;

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

УслСч2[]:S;
ИсклСправ2[]:S;
var ИсклСправ2_[]:S=ИсклСправ2[$];


var Buf[]:S;

var FName:S;

var Key[]:S;
var BufДата[]:D;
var BufСум1[]:N;
var BufВал1[]:S;
var BufСум2[]:N;
var BufВал2[]:S;
var BufСч[]:S;
var BufСч00[]:S;
var BufСчКОСГУ[]:S;
var BufПризн[]:S;
var BufКол[]:N;
var BufКолПризн[]:S;

var tДата:D;
var tСум1:N;
var tВал1:S;
var tСум2:N;
var tВал2:S;
var tСчДеб:S;
var tСчКре:S;
var tСч:S;
var tСч00:S;
var tСчКОСГУ:S;
var tПризн_[]:S;
var tПризн:S;
var tКол:N;
var tКолПризн:S;

var Run:L;
--
--Процедуры и функции ------------- 
Proc НеПустаяТаблица;
 if Упр<1: InsertFrame(Упр,1); fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Упр do
  if УслСч2[Iter]="" and ИсклСправ2[Iter]="": DeleteFrame(Упр,Iter); else Iter=Iter+1; fi;
 od;
end;

Func Оператор:S;
var n:i;
 ClearVariable(Buf);
 Buf[1]="И";
 Buf[2]="ИЛИ";
 Buf[3]="И ИСКЛЮЧИТЬ";
 n=Alternate("Выбор оператора",Buf,20,1,12);
 if n=1: ^"&";
   |n=2: ^"|";
   |n=3: ^"&~";
 fi;
 ^"";
end;

Func Объединить(Value1:s; Value2:s):S;
var z:s;
 if not Value1="" and not Value2="": z=Оператор; else z=""; fi;
 ^Раб.Бюджет2005.Объединить(Value1,Value2,z);
end;

Func ВыборСправ(Iter:I):S;
var n:i;
 Раб.Бюджет2005.СписокСправ(УслСч,0,"");
 CopyArray(Раб.Бюджет2005.BufСправ,Buf);
 n=Alternate("Аналитические справочники",Buf,-1,1,12);
 if n=0: ^""; fi;
 ^SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
end;

Func DateToStr(Value:D):S;
var Y,M,D:S;
var Ret:S;
 Y=Str(Year(Value));
 M=Str(Mon(Value)); if Length(M)=1: M="0"+M; fi;
 D=Str(Day(Value)); if Length(D)=1: D="0"+D; fi;
 Ret=Y+"."+M+"."+D;
 ^Ret;
end;

Proc ПолучитьПризн;
var n,nn,p,Iter:i;
var tmp,Mask:S;
 Mask=Раб.Бюджет2005.СписокСправ(tСчДеб+"|"+tСчКре,0,"");
 tПризн="";
 tКол=0;
 tКолПризн="";
 nn=LengthOfArray(tПризн_);
 for n=1..nn do
  if not tПризн_[n]="ЗГ":
     tmp=tПризн_[n];
     if not Pos(".",tПризн_[n])=0 and not Раб.Бюджет2005.MatchMask(tПризн_[n],Mask): --Откидываем признаки, которые не соотвестуют структуре учета данного счета (кроме не групповых)
        tmp="";
     fi;
     if not tmp="":
        for Iter=1..Упр do
         if not УслСч2[Iter]="" and not ИсклСправ2[Iter]="":
            if Раб.Бюджет2005.MatchMask(tСчДеб,УслСч2[Iter]) or Раб.Бюджет2005.MatchMask(tСчКре,УслСч2[Iter]):
               if Раб.Бюджет2005.MatchMask(tПризн_[n],ИсклСправ2[Iter]): tmp=""; fi;
            fi;
         fi;
        od;
     fi;
     if not tmp="":
        p=Pos(":",tmp);
        if not p=0:
           tКолПризн=SubStr(tmp,1,p-1);
           tКол=Round(SubStr(tmp,p+1,255),Accuracy(tКолПризн));
          else
           tПризн=tПризн+" "+tmp;
        fi;
     fi;
  fi;
 od;
 tПризн=SubStr(tПризн,2,255);
end;

Proc ПолучитьСчет;
var n:i;
var Flag:L;
 if not tСчДеб="00" and not tСчДеб="00Z": tСч=tСчДеб; tСч00=tСчКре;
   |not tСчКре="00" and not tСчКре="00Z": tСч=tСчКре; tСч00=tСчДеб; tСум1=-tСум1; tСум2=-tСум2; tКол=-tКол;
 fi;
 tСчКОСГУ=Раб.Бюджет2005.ВзятьКодСчета(tСч,"","КОСГУ",False);
 if (Match(tСч,"*.?.10?.??.*") and not Match(tСч,"*.?.109.??.*") )or
    Match(tСч,"*.?.20?.??.*") or
    Match(tСч,"*.?.210.01.*") or
    Match(tСч,"*.?.210.03.*") or
    Match(tСч,"*.?.210.05.*") or
    Match(tСч,"*.?.211.??.*") or
    Match(tСч,"*.?.212.??.*") or
    Match(tСч,"*.?.301.??.*") or
    Match(tСч,"*.?.302.??.*") or
    Match(tСч,"*.?.303.??.*") or
    Match(tСч,"*.?.304.01.*") or
    Match(tСч,"*.?.304.02.*") or
    Match(tСч,"*.?.304.03.*") or
    Match(tСч,"*.?.305.??.*") or
    Match(tСч,"*.?.306.??.*") or
    Match(tСч,"*.?.308.??.*") or
    Match(tСч,"*.?.309.??.*"): tСч=Раб.Бюджет2005.ВзятьКодСчета(tСч,"","АН",True)+".000";
 fi;
 if Match(tСч,"???.????.???????.???.?.401.30.*"): tСч=SubStr(tСч,1,3)+".0000.0000000.000."+SubStr(tСч,22,1)+".401.30.00";
   |Match(tСч,"???.?.??.?????.??.????.?.401.30.*"): tСч=SubStr(tСч,1,3)+".0.00.00000.00.0000."+SubStr(tСч,24,1)+".401.30.00";
   |Match(tСч,"???.??.??.??.??.??.????.?.401.30.*"): tСч=SubStr(tСч,1,3)+".00.00.00.00.00.0000."+SubStr(tСч,25,1)+".401.30.00";
 fi;
end;

Proc ВосстановитьСчет;
var n,nn:i;
 nn=LengthOfArray(Key);
 for n=1..nn do
  if Match(BufСч[n],"*.?.???.??.*"):
     BufСч[n]=Раб.Бюджет2005.ВзятьКодСчета(BufСч[n],"","АН",True)+"."+BufСчКОСГУ[n];
  fi;
 od;
end;

Proc ReadJur(nn:i);
var F,n,z,ee,ss,s:i;
var tmp:S;
var Key_,tКмнт:S;
var ZPrev1,ZPrev2,ZCur1,ZCur2:I;
var tСум1_:N;
var Flag:L;
 if ExistFile(FName)=False: Exit; fi;
 ClearVariable(Key);
 ClearVariable(BufДата);
 ClearVariable(BufСум1);
 ClearVariable(BufВал1);
 ClearVariable(BufСум2);
 ClearVariable(BufВал2);
 ClearVariable(BufСч);
 ClearVariable(BufСч00);
 ClearVariable(BufСчКОСГУ);
 ClearVariable(BufПризн);
 ClearVariable(BufКол);
 ClearVariable(BufКолПризн);
 ShowProgress(nn,"Свертка проводок...");
 ee=LengthOfArray(ИсклПризн);
 OpenTextJur(FName);
 Try
  While not GetTransFromTextJur(tДата,tСум1,tВал1,tСум2,tВал2,tСчДеб,tСчКре,tПризн_,tКмнт) do
   n=n+1;
   Hint(Str(n)+" из "+Str(nn));
   ProgressPos(n);
   Flag=True;
   if not ee=0:
      ss=LengthOfArray(tПризн_);
      for s=1..ss do
       z=SearchInArray(ИсклПризн,tПризн_[s],True);
       if not z=-1: Flag=False; Break; fi;
      od;
   fi;
   if Flag:
      ПолучитьПризн;
      ПолучитьСчет; --Одновременно меняем знак суммы и количества
      Key_=DateToStr(tДата)+" "+tВал1+" "+tВал2+" "+tСч+" "+tПризн+" "+tКолПризн;
      z=SearchInArray(Key,Key_,True);
      if z=-1:
         z=InsertInArraySort(Key,Key_);
         InsertInArray(BufДата,z,tДата);
         InsertInArray(BufСум1,z,tСум1);
         InsertInArray(BufВал1,z,tВал1);
         InsertInArray(BufСум2,z,tСум2);
         InsertInArray(BufВал2,z,tВал2);
         InsertInArray(BufСч,z,tСч);
         InsertInArray(BufСч00,z,tСч00);
         InsertInArray(BufСчКОСГУ,z,tСчКОСГУ);
         InsertInArray(BufПризн,z,tПризн);
         InsertInArray(BufКол,z,tКол);
         InsertInArray(BufКолПризн,z,tКолПризн);
        else
         ZPrev1=if(BufСум1[z]>=0,1,-1);
         ZPrev2=if(BufСум2[z]>=0,1,-1);
         BufСум1[z]=BufСум1[z]+tСум1;
         BufСум2[z]=BufСум2[z]+tСум2;
         BufКол[z]=BufКол[z]+tКол;
         ZCur1=if(BufСум1[z]>=0,1,-1);
         ZCur2=if(BufСум2[z]>=0,1,-1);
         if not ZPrev1=ZCur1 or not ZPrev2=ZCur2: BufСчКОСГУ[z]=tСчКОСГУ; fi;
       fi;
   fi;
  od;
  ВосстановитьСчет;
 Finally
  CloseTextJur;
  CloseProgress;
 end;
 if ExistFile(FName): DeleteFile(FName); fi;
end;

Proc WriteJur(i:i; cmnt:s);
var n,nn,k:i;
var F,Точн1,Точн2,ТочнКол:I;
var FlagSum1,FlagSum2:L;
var StoreДата:D;
var tmp:S;
var Flag:L;
var Jur:S;
 Jur=if(ПутьВыгруз="","",ПутьВыгруз+"\")+"$new.jur";
 Flag=CloseEditor(Jur,False);
 StoreДата=1.1.100;
 nn=LengthOfArray(Key);
 ShowProgress(nn,"Сохранение результатов...");
 if i=1:
    F=TextFileCreate(Jur);
   else
    F=TextFileOpenWrite(Jur);
 fi;
 Try
  TextFileGotoEnd(F);
  if not cmnt="":
     TextFileWriteLn(F,"-- "+cmnt,True);
  fi;
  for n=1..nn do
   ProgressPos(n);
   Точн1=Accuracy(BufВал1[n]);
   Точн2=Accuracy(BufВал2[n]);
   ТочнКол=Accuracy(BufКолПризн[n]);
   if not Round(BufСум1[n],Точн1)=0 or not Round(BufСум2[n],Точн2)=0 or not Round(BufКол[n],ТочнКол)=0:
      if Round(BufСум1[n],Точн1)=0 and Round(BufСум2[n],Точн2)=0 and Round(BufКол[n],ТочнКол)<0: k=-1;
        |Round(BufСум1[n],Точн1)<0: k=-1;
        |Round(BufСум2[n],Точн2)<0: k=-1;
        |True: k=1;
      fi;
      if not StoreДата=BufДата[n]:
         TextFileWriteLn(F,DateToString(BufДата[n]),True);
         StoreДата=BufДата[n];
      fi;
      TextFileAppendLn(F,": ");
      FlagSum1=False;
      if not Round(BufСум1[n],Точн1)=0 or not BufВал1[n]="":
         tmp=Format("%17."+Str(Точн1)+"N",BufСум1[n]*k);
         TextFileAppendLn(F,tmp);
         if not BufВал1[n]="":
            TextFileAppendLn(F,"^"+BufВал1[n]);
         fi;
         FlagSum1=True;
      fi;
      FlagSum2=False;
      if not Round(BufСум2[n],Точн2)=0 or not BufВал2[n]="":
         if FlagSum1: TextFileAppendLn(F," : "); fi;
         tmp=Format("%17."+Str(Точн2)+"N",BufСум2[n]*k);
         TextFileAppendLn(F,tmp);
         if not BufВал2[n]="":
            TextFileAppendLn(F,"^"+BufВал2[n]);
         fi;
         FlagSum2=True;
      fi;
      if not FlagSum1 and not FlagSum2: 
         tmp=Format("%17."+Str(Точн2)+"N",0.00);
         TextFileAppendLn(F,tmp);
      fi;
      if k=1:
         TextFileAppendLn(F,"   "+BufСч[n]+"   "+BufСч00[n]+RepStr(" ",38-(Length(BufСч[n])+Length(BufСч00[n]))));
        else
         TextFileAppendLn(F,"   "+BufСч00[n]+"   "+BufСч[n]+RepStr(" ",38-(Length(BufСч[n])+Length(BufСч00[n]))));
      fi;
      TextFileAppendLn(F," {");
      TextFileAppendLn(F,BufПризн[n]);
      if not BufКолПризн[n]="":
         ТочнКол=Accuracy(BufКолПризн[n]);
         TextFileAppendLn(F,if(BufПризн[n]="",""," ")+BufКолПризн[n]);
         TextFileAppendLn(F,":");
         TextFileAppendLn(F,Str(BufКол[n]*k,ТочнКол));
      fi;
      TextFileWriteLn(F,"}");
   fi;
  od;
 Finally
  TextFileClose(F);
  CloseProgress;
 end;
 ClearVariable(Key);
 ClearVariable(BufДата);
 ClearVariable(BufСум1);
 ClearVariable(BufВал1);
 ClearVariable(BufСум2);
 ClearVariable(BufВал2);
 ClearVariable(BufСч);
 ClearVariable(BufСч00);
 ClearVariable(BufСчКОСГУ);
 ClearVariable(BufПризн);
 ClearVariable(BufКол);
 ClearVariable(BufКолПризн);
end;

Func ЗагрузитьУслАн:L;
var F,st,err:I;
var z:n;
var Buf:S;
 err=0;
 ClearVariable(СписокУслАн);
 if not fileУслАн="":
    st=0;
    F=TextFileOpenRead(fileУслАн);
    Try
     While not TextFileEndOfFile(F) do
      st=st+1;
      buf=Trim(TextFileReadLn(F));
      if not Pos("--",buf)=1 and not buf="":
         if not УслАн="": buf="("+buf+")"; fi;
         Try
          z=Saldo("{"+buf+"}",1.1.100);
         Except
          Trace("Строка №"+Str(st)+" "+ErrorMessage);
          err=err+1;
         end;
         AddInArray(СписокУслАн,True,False,Buf);
      fi;
     od;
    Finally
     TextFileClose(F);
    end;
 fi;
 ^err=0;
end;

Func ЗагрузитьИсклПризн:L;
var F:I;
var Buf:S;
 ClearVariable(ИсклПризн);
 if not fileИсклПризн="":
    F=TextFileOpenRead(fileИсклПризн);
    Try
     While not TextFileEndOfFile(F) do
      buf=Trim(TextFileReadLn(F));
      if not Pos("--",buf)=1:
         AddInArray(ИсклПризн,True,False,Buf);
      fi;
     od;
    Finally
     TextFileClose(F);
    end;
 fi;
 ^True;
end;

Proc Расчет;
var nn,z,zz:i;
var УслАн0,УслАн_:S;
var Flag:L;
 УдалитьПустыеСтроки;
 if not ЗагрузитьУслАн:  Message("Ошибка загрузки списка признаков",mtError); Exit; fi;
 if not ЗагрузитьИсклПризн: Message("Ошибка загрузки списка исключаемых признаков",mtError); Exit; fi;
 zz=LengthOfArray(СписокУслАн);
 zz=Max(1,zz);
 nn=0;
 if not УслАн="" and not СписокУслАн[1]="":  УслАн0="("+УслАн+")&"; else УслАн0=УслАн; fi;
 FName=PlanVar("CACHE")+"\"+GetGUID;
 for z=1..zz do
  УслАн_=УслАн0+СписокУслАн[z];
  TujReportBegin(FName,1.1.100,УслСч,УслАн_,ИсклСправ,"","",TujRepBalAccount+TujRepNoNullBal+TujRepZabalance+TujRepCombinedAna);
  Try
   WriteLn(FName,DateToString(ДН-1));
   nn=nn+TujReportNext(ДН);
   WriteLn(FName,DateToString(ДК-1));
   nn=nn+TujReportNext(ДК);
  Finally
   TujReportEnd(False);
  end;
  ReadJur(nn);
  WriteJur(z,СписокУслАн[z]);
 od;
 НеПустаяТаблица;
 Message("Операция свертки завершена");
end;

Proc Выполнить (vДН:D; vДК:D; vНаимПериод:S; vПутьВыгруз:S; vУслСч:S; vУслАн:S; vИсклСправ:S);
 Run=True;
 ДН=vДН;
 ДК=vДК;
 НаимПериод=vНаимПериод;
 ПутьВыгруз=vПутьВыгруз;
 УслСч=vУслСч;
 УслАн=vУслАн;
 ИсклСправ=vИсклСправ;
 OpenBlank("СЛУЖЕБНЫЕ.СВЕРТКА_ЖУР");
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Д_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(AsString(Template.Field),tmp);
 НаимПериод="Произвольный";
 Return Cur;
end;

Proc Д_OnExit(FieldName: String; Iter: Integer);
 НаимПериод="Произвольный";
end;

Func НаимПериод_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
 ClearVariable(Buf);
 Buf[1]="Вчера";
 Buf[2]="Текущая неделя";
 Buf[3]="Текущий месяц";
 Buf[4]="Прошлый месяц";
 Buf[5]="Текущий квартал";
 Buf[6]="Текущий год";
 Buf[7]="Прошлый год";
 Buf[8]="Произвольный";
 n=Alternate("Период",Buf,-1,1,12);
 if n=0: ^False; fi;
 if n=1: ДН=ToDay-1; 
         ДК=ToDay;
   |n=2: ДН=ToDay-(DayOfWeek(ToDay)-1);
         ДК=ToDay+(8-DayOfWeek(ToDay));
   |n=3: ДН=Dat(1,Mon(ToDay),Year(ToDay)); 
         ДК=if(Mon(ToDay)=12,Dat(1,1,Year(ToDay)+1),Dat(1,Mon(ToDay)+1,Year(ToDay)));
   |n=4: ДН=if(Mon(ToDay)=1,Dat(1,12,Year(ToDay)-1),Dat(1,Mon(ToDay)-1,Year(ToDay))); 
         ДК=Dat(1,Mon(ToDay),Year(ToDay));
   |n=5: if Mon(ToDay)>=1  and Mon(ToDay)<=3 : ДН=Dat(1,1, Year(ToDay)); ДК=Dat(1,4, Year(ToDay));
           |Mon(ToDay)>=4  and Mon(ToDay)<=6 : ДН=Dat(1,4, Year(ToDay)); ДК=Dat(1,7, Year(ToDay));
           |Mon(ToDay)>=7  and Mon(ToDay)<=9 : ДН=Dat(1,7, Year(ToDay)); ДК=Dat(1,10,Year(ToDay));
           |Mon(ToDay)>=10 and Mon(ToDay)<=12: ДН=Dat(1,10,Year(ToDay)); ДК=Dat(1,1, Year(ToDay)+1);
         fi;
   |n=6: ДН=Dat(1,1,Year(ToDay));
         ДК=Dat(1,1,Year(ToDay)+1);
   |n=7: ДН=Dat(1,1,Year(ToDay)-1);
         ДК=Dat(1,1,Year(ToDay));
 fi;
 НаимПериод=Buf[n];
 Return False;
end;

Func ПутьВыгруз_OnEnter(FieldName: String; Iter: Integer): logical;
 Iter=ChooseFolder(ПутьВыгруз,"Папка выгрузки...");
 Return False;
end;

Func УслСч_OnVerify(FieldName: String; Iter: Integer; Value: String): logical;
var Ret:N;
 Try
  Ret=Saldo(Value,1.1.100);
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Func УслСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:S;
var Iter:I;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 tmp=Раб.КБК.Список("","","СЧ9 ВД+? КОСГУ+? ИГ");
 if tmp="": ^Cur; fi;
 if Match(tmp,"?."): tmp="*."+tmp+"???.??.*";
   |Match(tmp,"?.???."): tmp="*."+tmp+"??.*";
   |Match(tmp,"?.???.??."): tmp="*."+tmp+"*";
   |Match(tmp,"?.???.??.?00"): tmp=SubStr(tmp,1,10)+"*";
   |Match(tmp,"?.???.??.??0"): tmp=SubStr(tmp,1,11)+"*";
   |True: tmp="*."+tmp+"*";
 fi;
 if Field="УслСч" : УслСч=Объединить(УслСч,tmp);
   |Field="УслСч2": УслСч2[Iter]=Раб.Бюджет2005.Объединить(УслСч2[Iter],tmp,"|");
 fi;
 Return Cur;
end;

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

Func УслАн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 tmp=AnaElection("");
 if tmp="": ^Cur; fi;
 УслАн=Объединить(УслАн,tmp);
 Return Cur;
end;

Func fileУслАн_OnEnter(FieldName: String; Iter: Integer): logical;
 if ChooseFile(fileУслАн,"Загрузить список признаков...","Признаки (*.sig)|*.sig")=cmCancel: ^False; fi;
 Return False;
end;

Func ИсклСправ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,tmp2:S;
var n:i;
 ClearVariable(Buf);
 if FieldName="ИсклСправ_":  
    if УслСч="": УслСч="*"; fi;
    tmp=УслСч;
   else 
    if УслСч2[Iter]="": УслСч2[Iter]="*"; fi;
    tmp=УслСч2[Iter];
 fi;
 Раб.Бюджет2005.СписокСправ(tmp,0,"");
 CopyArray(Раб.Бюджет2005.BufСправ,Buf);
 if not FieldName="ИсклСправ_":
    n=LengthOfArray(Buf)+1;
    for Sign tmp="~(*.*|ЗГ)",Sort do
     n=n+1;
     InsertInArray(Buf,n,tmp+" --"+Name_A(tmp));
    od;
 fi;
 n=Alternate("Список справочников",Buf,-1,1,12);
 if n=0 or Buf[n]="": ^False; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 if FieldName="ИсклСправ_":
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(ИсклСправ,"|",tmp,"")="": Message("Повторный ввод справочника "+tmp,mtError); ^False; fi;
    ИсклСправ=Раб.Бюджет2005.Объединить(ИсклСправ,tmp,"|");
   else
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(ИсклСправ2[Iter],"|",tmp,"")="": Message("Повторный ввод справочника "+tmp,mtError); ^False; fi;
    ИсклСправ2[Iter]=Раб.Бюджет2005.Объединить(ИсклСправ2[Iter],tmp,"|");
 fi;
 Return False;
end;

Proc ИсклСправ_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ИсклСправ_":
    ИсклСправ=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог(ИсклСправ,"|");
   else
    ИсклСправ2[Iter]=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог(ИсклСправ2[Iter],"|");
 fi;
end;

Func fileИсклПризн_OnEnter(FieldName: String; Iter: Integer): logical;
 if ChooseFile(fileИсклПризн,"Загрузить список признаков...","Признаки (*.sig)|*.sig")=cmCancel: ^False; fi;
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр,Iter+1);
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр,Iter);
 НеПустаяТаблица;
 Return False;
end;

Func УслСч2_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var Ret:N;
 Try
  Ret=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
 if not Pos("&",Value)=0 or not Pos("~",Value)=0 or not Pos("(",Value)=0 or not Pos(")",Value)=0 or not Pos("'",Value)=0:
    Message("Недопустимо использовать символы & ~ ( ) ' в условие отбора счетов",mtError);
    ^False;
 fi;
 Return True;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnВыполнить_OnClick(Sender: String);
var Jur:S;
 if ДН=1.1.100: Message("Задайте начальнаю дату старого периода",mtError); Template.Field="ДН"; Exit; fi;
 if ДК=1.1.100: Message("Задайте начальнаю дату нового периода",mtError); Template.Field="ДК"; Exit; fi;
 if ДН>ДК: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 Refresh;
 Расчет;
 Jur=if(ПутьВыгруз="","",ПутьВыгруз+"\")+"$new.jur";
 OpenEditor(jur);
end;

Proc btnНастр_OnClick(Sender: String);
var OK :Logical;
var num :Integer;
 if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmOk:
    ClearVariable(Упр);
    ClearVariable(УслСч2);
    ClearVariable(ИсклСправ2);
    ClearVariable(Buf);
    OK=True;
    while OK do
      Buf[1]="Настройка по умолчанию без проводок НФА";
      Buf[2]="Настройка по умолчанию для всех проводок";
      num=Alternate("Выберите настройку...", Buf, -1, 1, 12);
      if num=1: УслСч="~(*.?.50?.??.???|*.?.ЗАБ.??.???|*.?.101.??.???|*.?.102.??.???|*.?.103.??.???|*.?.104.??.???|*.?.105.??.???|ЗАБ.??.???.??)"; OK=False;
      |  num=2: УслСч="~(*.?.50?.??.???|*.?.ЗАБ.??.???)"; OK=False;
      fi;
    od;
    УслАн="";
    ИсклСправ="";
    fileИсклПризн="";
 fi;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 НеПустаяТаблица;
 if Run: Run=False; fi;
end;
--Обработчики событий шаблона -----
--

Конец

