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

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

ДН:D=[Dat(1,1,Year(Today))];
ДК:D=[ДН];

УслСч:S=["~(*.?.50?.??.*|*.?.ЗАБ.??.*)"];
УслАн:S;
ИсклСправ:S;
var ИсклСправ_: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?.??.*") 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;
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:i;
var tmp:S;
var Key_,tКмнт:S;
var ZPrev1,ZPrev2,ZCur1,ZCur2:I;
var tСум1_:N;
 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,"Свертка проводок...");
 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);
   ПолучитьПризн;
   ПолучитьСчет; --Одновременно меняем знак суммы и количества
   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;
  od;
  ВосстановитьСчет;
 Finally
  CloseTextJur;
  CloseProgress;
 end;
 if ExistFile(FName): DeleteFile(FName); fi;
end;

Proc WriteJur;
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,"Сохранение результатов...");
 F=TextFileCreate(Jur);
 Try
  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;

Proc Расчет;
var nn:i;
var Flag:L;
 УдалитьПустыеСтроки;
 nn=0;
 FName=PlanVar("CACHE")+"\"+GetGUID;
 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;
 НеПустаяТаблица;
 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 УслСч_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 ИсклСправ_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 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);
 if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmOk:
    ClearVariable(Упр);
    ClearVariable(УслСч2);
    ClearVariable(ИсклСправ2);
    УслСч="~(*.?.50?.??.*|*.?.ЗАБ.??.*)";
    УслАн="";
    ИсклСправ="";
 fi;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 НеПустаяТаблица;
 if Run: Run=False; fi;
end;
--Обработчики событий шаблона -----
--


cВидБюдж :Logical=[true];
cВидБюджЭкран :String=if(cВидБюдж:'Бюджет','Внебюджет');

сСинСч :String=['1??'];
сАнСч :String=['??'];

var цОстТабл :Integer;
var сМаскаСчета[] :String;
var чОстаток[] :Numeric;
var лИсп[] :Logical;
var лИспЭкран[] :String=if(лИсп[$]=true:'Да','Нет');
var сИтогМаска :String;

Proc ПостроитьСписок;
  var цРО,цКолЗап,i :Integer;
  var сСчет,сСчетБюдж,сСчетВнеБюдж :String;

  ClearVariable(сМаскаСчета);
  ClearVariable(чОстаток);
  ClearVariable(лИсп);
  цОстТабл=0;

  цРО=OpenWorkArea('РПО_БЮДЖ_КЛАСС','NAME_VOC','NAME_VOC="СЧ" AND MATCH(CODE,"???.??")');
  try
    цКолЗап=Records(цРО);
    for i=1..цКолЗап do
      сСчет=GetFieldS(цРО,i,'CODE');
      сСчет=if(cВидБюдж:'*.1.'+сСчет+'.*','*.2.'+сСчет+'.*');
      if Match(Substr(сСчет,5,3),сСинСч) and Match(Substr(сСчет,9,2),сАнСч):
	InsertFrame(цОстТабл,цОстТабл+1);
	сМаскаСчета[цОстТабл]=сСчет;
	чОстаток[цОстТабл]=Saldo(сСчет,ДК);
	лИсп[цОстТабл]=if(Окр(чОстаток[цОстТабл],2)<>Окр(0,2):true,false);
      fi;
      --InsertFrame(цОстТабл,цОстТабл+1);
      --сМаскаСчета[цОстТабл]=сСчетБюдж;
      --чОстаток[цОстТабл]=Saldo(сСчетБюдж,ДК);
      --лИсп[цОстТабл]=if(чОстаток[цОстТабл]<>0:true,false);
      --InsertFrame(цОстТабл,цОстТабл+1);
      --сМаскаСчета[цОстТабл]=сСчетВнеБюдж;
      --чОстаток[цОстТабл]=Saldo(сСчетВнеБюдж,ДК);
      --лИсп[цОстТабл]=if(чОстаток[цОстТабл]<>0:true,false);
    od;
  finally
    CloseWorkArea(цРО);
  end;
end;

Proc СоставитьМаску;
  var i :Integer;
  var bFirst :logical;

  сИтогМаска='';
  for i=1..цОстТабл do

    if лИсп[i]:
      if not bFirst:
	сИтогМаска=сМаскаСчета[i];
	bFirst=true;
      else
	сИтогМаска=сИтогМаска+'|'+сМаскаСчета[i];
      fi;
      if Length(сИтогМаска)>240 and i<>цОстТабл:
	Message('Результат превышает максимальную длинну для условия отбора!');
	break;
      fi;
    fi;
  od;
end;

Proc ОбновитьИспользование;
  var i :Integer;

  for i=1..цОстТабл do
    лИсп[i]=if(чОстаток[i]<>0:true,false);
  od;
end;

Proc УдалитьНулевые;
  var i,curpos :Integer;
  curpos=1;
  while curpos<=цОстТабл  do
    if not чОстаток[curpos]<>0:
      DeleteFrame(цОстТабл,curpos);
    else
      curpos=curpos+1;
    fi;
  od;
  ОбновитьИспользование;
end;


Func лИспЭкран_OnEnter(FieldName: String; Iter: Integer): logical;
  лИсп[Iter] = Not лИсп[Iter];
  return false;
end;

Func cВидБюджЭкран_OnEnter(FieldName: String; Iter: Integer): logical;
  cВидБюдж = not cВидБюдж;
  return false;
end;

Proc Button1_OnClick(Sender: String);
  ПостроитьСписок;
end;

Proc Button2_OnClick(Sender: String);
  СоставитьМаску;
end;

Proc Button3_OnClick(Sender: String);
  УдалитьНулевые;
end;


Конец

