-- Шаблон создан мастером бланков
-- 26.05.2005 11:26:39
--
БланкСШаблоном [20.04.2006] "Дата возникновения задолженности";

Упр:I;

Табл1: Section;
Табл2: Section;
Табл3: Section;
Rep: Section;

МаскаСч:S=["*.?.206.??.*|*.?.302.??.*"];

ДК:D=[ToDay+1];
var YYYY:I=Year(ДК-1);
var ДН:D=Dat(1,1,YYYY);

МаскаКБК:S;

СправТабл:S;
var СправТабл_:s=СправТабл;

СправСтр:S=["К.*"];
var СправСтр_:s=СправСтр;

Справ:S=Trim(СправТабл+" "+СправСтр);

NewPage:L;

Призн:S;

var МаскаСправ:S;
var FlagКБК:L;

var Справ1:S;
var Справ2:S;
var Справ3:S;
var Справ4:S;
var Справ5:S;
var НаимСправ1:S;
var НаимСправ2:S;
var НаимСправ3:S;
var НаимСправ4:S;
var НаимСправ5:S;

Гр2:I;
Гр3:I;
Гр4:I;
Гр5:I;
Гр6:I;

var Гр0_ :I=0;
var Гр2_ :I=2;
var Гр3_ :I=3;
var Гр4_ :I=4;
var Гр5_ :I=5;
var Гр6_ :I=6;
var Гр7_ :I;
var Гр8_ :I;
var Гр9_ :I;

var пп[]:I=$;
НаимКБК[]:S;
Призн1[]:S;
Призн2[]:S;
Призн3[]:S;
Призн4[]:S;
Призн5[]:S;
var Призн1_[]:S=if(Справ1="КБК.",НаимКБК[$],Name_A(Призн1[$]));
var Призн2_[]:S=if(Справ2="КБК.",НаимКБК[$],Name_A(Призн2[$]));
var Призн3_[]:S=if(Справ3="КБК.",НаимКБК[$],Name_A(Призн3[$]));
var Призн4_[]:S=if(Справ4="КБК.",НаимКБК[$],Name_A(Призн4[$]));
var Призн5_[]:S=if(Справ5="КБК.",НаимКБК[$],Name_A(Призн5[$]));
var НаимПризн1[]:S=if(Гр2=0 or Призн1_[$]="" or Призн1_[$]=" ",Призн1[$],if(Гр2=1,Призн1_[$],if(Гр2=2,Призн1_[$]+" ("+Призн1[$]+")",if(Гр2=3,Призн1[$]+" ("+Призн1_[$]+")"))));
var НаимПризн2[]:S=if(Гр3=0 or Призн2_[$]="" or Призн2_[$]=" ",Призн2[$],if(Гр3=1,Призн2_[$],if(Гр3=2,Призн2_[$]+" ("+Призн2[$]+")",if(Гр3=3,Призн2[$]+" ("+Призн2_[$]+")"))));
var НаимПризн3[]:S=if(Гр4=0 or Призн3_[$]="" or Призн3_[$]=" ",Призн3[$],if(Гр4=1,Призн3_[$],if(Гр4=2,Призн3_[$]+" ("+Призн3[$]+")",if(Гр4=3,Призн3[$]+" ("+Призн3_[$]+")"))));
var НаимПризн4[]:S=if(Гр5=0 or Призн4_[$]="" or Призн4_[$]=" ",Призн4[$],if(Гр5=1,Призн4_[$],if(Гр5=2,Призн4_[$]+" ("+Призн4[$]+")",if(Гр5=3,Призн4[$]+" ("+Призн4_[$]+")"))));
var НаимПризн5[]:S=if(Гр6=0 or Призн5_[$]="" or Призн5_[$]=" ",Призн5[$],if(Гр6=1,Призн5_[$],if(Гр6=2,Призн5_[$]+" ("+Призн5[$]+")",if(Гр6=3,Призн5[$]+" ("+Призн5_[$]+")"))));
ДЗ[]:N;
КЗ[]:N;
ДВЗ[]:D;
Rep_Усл[]:S;

var ВсегоДЗ:N;
var ВсегоКЗ:N;

var Buf[]:S;
var BufVoc[]:S;

var BufKey[]:S;
var BufНаимКБК[]:S;
var BufПризн1[]:S;
var BufПризн2[]:S;
var BufПризн3[]:S;
var BufПризн4[]:S;
var BufПризн5[]:S;

var АнОбщ:S;
var СчОбщ:S;

var RepRow:I;

var Rep_Section[]:S;
var Rep_RowsCount[]:I;
var Rep_ColsCount[]:I;
var Rep_RowVisible[]:L;
var Rep_RowHeight[]:I;
var Rep_RowIndex[]:I;
var Rep_ColVisible[]:L;
var Rep_ColWidth[]:I;
var Rep_ColIndex[]:I;
var Rep_CellBorder[]:S;
var Rep_CellAlignment[]:I;
var Rep_CellFormat[]:S;
var Rep_CellBgColor[]:I;
var Rep_CellFieldType[]:I;
var Rep_CellContents[]:S;
var Rep_CellLookup[]:L;
var Rep_CellEventOnLookup[]:S;

var Rep_CellIndex[]:I;
--
--Процедуры и функции -------------
Func GetCellIndex (s:i; r:I; c:i):i;
var Ret,Value:I;
 Value=s+BitShl(r,8)+BitShl(c,16);
 Ret=SearchInArray(Rep_CellIndex,Value,True,1);
 if Ret=-1: Ret=InsertInArraySort(Rep_CellIndex,Value); fi;
 ^Ret;
end;

Func GetRowIndex (s:i; r:I):i;
var Ret,Value:I;
 Value=s+BitShl(r,8);
 Ret=SearchInArray(Rep_RowIndex,Value,True,1);
 if Ret=-1: Ret=InsertInArraySort(Rep_RowIndex,Value); fi;
 ^Ret;
end;

Func GetColIndex (s:i; c:I):i;
var Ret,Value:I;
 Value=s+BitShl(c,8);
 Ret=SearchInArray(Rep_ColIndex,Value,True,1);
 if Ret=-1: Ret=InsertInArraySort(Rep_ColIndex,Value); fi;
 ^Ret;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НаимКБК);
 ClearVariable(Призн1);
 ClearVariable(Призн2);
 ClearVariable(Призн3);
 ClearVariable(Призн4);
 ClearVariable(Призн5);
 ClearVariable(ДЗ);
 ClearVariable(КЗ);
 ClearVariable(ДВЗ);
 ClearVariable(ВсегоДЗ);
 ClearVariable(ВсегоКЗ);
 ClearVariable(Rep_Усл);
end;

Proc InitRep;
var s,r,c,rr,cc,ss,index:i;
var Obj: Object;
var Flag:L;
var StoreУпр:I;
 ClearVariable(Rep_Section);
 ClearVariable(Rep_RowsCount);
 ClearVariable(Rep_ColsCount);
 ClearVariable(Rep_RowVisible);
 ClearVariable(Rep_RowHeight);
 ClearVariable(Rep_RowIndex);
 ClearVariable(Rep_ColVisible);
 ClearVariable(Rep_ColWidth);
 ClearVariable(Rep_ColIndex);
 ClearVariable(Rep_CellBorder);
 ClearVariable(Rep_CellAlignment);
 ClearVariable(Rep_CellFormat);
 ClearVariable(Rep_CellBgColor);
 ClearVariable(Rep_CellFieldType);
 ClearVariable(Rep_CellContents);
 ClearVariable(Rep_CellLookup);
 ClearVariable(Rep_CellEventOnLookup);
 ClearVariable(Rep_CellIndex);
 StoreУпр=Упр;
 if Упр<1: Упр=1; fi;
 Try
  Rep_Section[1]="Табл1";
  Rep_Section[2]="Табл2";
  Rep_Section[3]="Табл3";
  ss=LengthOfArray(Rep_Section);
  if ss>255: Message("Превышено максимально число (255) секций !",mtError); Exit; fi;
  for s=1..ss do
   Flag=FindObject(Rep_Section[s],Obj);
   if Flag=False: Message("Секция "+Rep_Section[s]+" не найдена !",mtError); Exit; fi;
   rr=AsInteger(Obj.RowsCount);
   cc=AsInteger(Obj.ColsCount);
   if rr>255: Message("Превышено максимально число (255) строк в секции !",mtError); Exit; fi;
   if cc>255: Message("Превышено максимально число (255) колонок в секции !",mtError); Exit; fi;
   cc=9;
   Rep_RowsCount[s]=rr;
   Rep_ColsCount[s]=cc;
   for r=1..rr do
    Index=GetRowIndex(s,r);
    InsertInArray(Rep_RowVisible,Index,AsLogical(Obj.Row(r,RowVisible,"")));
    InsertInArray(Rep_RowHeight,Index,AsInteger(Obj.Row(r,RowHeight,"")));
    for c=1..cc do
     if r=1:
	Index=GetColIndex(s,c);
	InsertInArray(Rep_ColVisible,index,AsLogical(Obj.Column(c,ColVisible,"")));
	InsertInArray(Rep_ColWidth,index,AsInteger(Obj.Column(c,ColWidth,"")));
     fi;
     Index=GetCellIndex(s,r,c);
     InsertInArray(Rep_CellBorder,Index,AsString(Obj.Cell(r,c,CellBorder,"")));
     InsertInArray(Rep_CellAlignment,Index,AsInteger(Obj.Cell(r,c,CellAlignment,"")));
     InsertInArray(Rep_CellFormat,Index,AsString(Obj.Cell(r,c,CellFormat,"")));
     InsertInArray(Rep_CellBgColor,Index,AsInteger(Obj.Cell(r,c,CellBgColor,"")));
     InsertInArray(Rep_CellContents,Index,AsString(Obj.Cell(r,c,CellContents,"")));
     InsertInArray(Rep_CellLookup,Index,AsLogical(Obj.Cell(r,c,CellLookup,"")));
     InsertInArray(Rep_CellFieldType,Index,AsInteger(Obj.Cell(r,c,CellFieldType,"")));
     InsertInArray(Rep_CellEventOnLookup,Index,AsString(Obj.Cell(r,c,CellEventOnLookup,"")));
    od;
   od;
  od;
 Finally
  Упр=StoreУпр;
 end;
end;

Proc UpdateRep;
var s,r,c,rr,cc,ss,index:i;
var Obj: Object;
var Flag:L;
var StoreУпр:I;
 ClearVariable(Rep_RowVisible);
 ClearVariable(Rep_ColVisible);
 StoreУпр=Упр;
 if Упр<1: Упр=1; fi;
 Try
  ss=LengthOfArray(Rep_Section);
  for s=1..ss do
   Flag=FindObject(Rep_Section[s],Obj);
   if Flag=False: Message("Секция "+Rep_Section[s]+" не найдена !",mtError); Exit; fi;
   rr=AsInteger(Obj.RowsCount);
   cc=AsInteger(Obj.ColsCount);
   cc=9;
   for r=1..rr do
    Index=GetRowIndex(s,r);
    Rep_RowVisible[Index]=AsLogical(Obj.Row(r,RowVisible,""));
    for c=1..cc do
     if r=1:
	Index=GetColIndex(s,c);
	Rep_ColVisible[index]=AsLogical(Obj.Column(c,ColVisible,""));
     fi;
    od;
   od;
  od;
 Finally
  Упр=StoreУпр;
 end;
end;

Func InsRep_(Sec:S):I;
var s,r,c,rr,cc,index:i;
var Obj: Object;
var Flag:L;
 s=SearchInArray(Rep_Section,Sec);
 if s=-1: Message("Имя секции ("+Sec+") не найдено !",mtError); ^s; fi;
 Flag=FindObject(Rep_section[s],Obj);
 if Flag=False: Message("Секция "+Rep_Section[s]+" не найдена !",mtError); ^-1; fi;
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount[s];
 Rep.RowsCount=RepRow+rr;
 Rep.ColsCount=cc;
 for r=1..rr do
  Index=GetRowIndex(s,r);
  Rep.Row(RepRow+r,RowVisible,Rep_RowVisible[Index]);
  Rep.Row(RepRow+r,RowHeight,Rep_RowHeight[Index]);
  for c=1..cc do
   if r=1:
      Index=GetColIndex(s,c);
      Rep.Column(c,ColVisible,Rep_ColVisible[Index]);
      Rep.Column(c,ColWidth,Rep_ColWidth[Index]);
   fi;
   Index=GetCellIndex(s,r,c);
   Rep.Cell(RepRow+r,c,CellBorder,Rep_CellBorder[Index]);
   Rep.Cell(RepRow+r,c,CellAlignment,Rep_CellAlignment[Index]);
   Rep.Cell(RepRow+r,c,CellFormat,Rep_CellFormat[Index]);
   Rep.Cell(RepRow+r,c,CellBgColor,Rep_CellBgColor[Index]);
   Rep.Cell(RepRow+r,c,CellLookup,Rep_CellLookup[Index]);
   Rep.Cell(RepRow+r,c,CellEventOnLookup,Rep_CellEventOnLookup[Index]);
   Rep.Cell(RepRow+r,c,CellFieldType,Rep_CellFieldType[Index]);
  od;
 od;
 ^S;
end;

Proc InsRepHead (Iter:I);
var s,r,c,rr,cc,index:i;
 if Iter>1:
    RepRow=RepRow+1; 
    Rep.RowsCount=RepRow;  
    Rep.Row(RepRow,RowNewPage,NewPage);
 fi;
 s=InsRep_("Табл1");
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount[s];
 for r=1..rr do
  for c=1..cc do
   Index=GetCellIndex(s,r,c);
   if Rep_CellContents[Index]="НаимПризн1":
      Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]+"["+Str(Iter)+"]");
     else
      Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]);
   fi;
  od;
 od;
 Rep.CellLinks(2, RepRow+1,9,RepRow+1);
 RepRow=RepRow+rr;
end;

Proc InsRepStr (Iter:I; пп_:I);
var s,r,c,rr,cc,index:i;
 s=InsRep_("Табл2");
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount[s];
 Rep.RowsCount=RepRow+rr;
 Rep.ColsCount=cc;
 for r=1..rr do
  for c=1..cc do
   Index=GetCellIndex(s,r,c);
   if Rep_CellFieldType[Index]=1:
      Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]);
     else
      if Rep_CellContents[Index]="пп":
	 Rep.Cell(RepRow+r,c,CellContents,Str(пп_));
	 Rep.Cell(RepRow+r,c,CellFieldType,1);
	else
	 Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[index]+"["+Str(Iter)+"]");
      fi;
   fi;
  od;
 od;
 RepRow=RepRow+rr;
end;

Proc InsRepTail;
var s,r,c,rr,cc,index:i;
var Value:s;
 s=InsRep_("Табл3");
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount[s];
 for r=1..rr do
  for c=1..cc do
   Index=GetCellIndex(s,r,c);
   Value="";
   if Rep_CellContents[Index]="ВсегоДЗ": Value=Format("%.2N",ВсегоДЗ);
     |Rep_CellContents[Index]="ВсегоКЗ": Value=Format("%.2N",ВсегоКЗ);
     |True: Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]);
   fi;
   if Value<>"": Rep.Cell(RepRow+r,c,CellFieldType,1); Rep.Cell(RepRow+r,c,CellContents,Value); fi;
  od;
 od;
 RepRow=RepRow+rr;
end;

Proc InsRepHead2;
 Rep.Cell(RepRow-5,2,CellContents,"Итого по отчету");
 Rep.Cell(RepRow-5,2,CellFieldType,1);
end;

Proc РазбитьТаблицы;
var Iter,z:i;
var StoreПризн1:S;
 Табл1.Visible=False; Табл2.Visible=False; Табл3.Visible=False; Rep.Visible=False;
 StoreПризн1="";
 ShowProgress(Упр,"Построение отчета....");
 Try
  z=0;
  ВсегоДЗ=0; ВсегоКЗ=0;
  for Iter=1..Упр do
   ProgressPos(Iter);
   z=z+1;
   if StoreПризн1<>Призн1[Iter]:
      if Iter>1: 
	 InsRepTail;
	 InsRepHead(Iter); 
	 ВсегоДЗ=0; ВсегоКЗ=0;
      fi;
      StoreПризн1=Призн1[Iter]; 
      z=1;
   fi;
   ВсегоДЗ=ВсегоДЗ+ДЗ[Iter];
   ВсегоКЗ=ВсегоКЗ+КЗ[Iter];
   InsRepStr(Iter,z);
  od;
 Finally
  CloseProgress;
 end;
 InsRepTail;
 --Итого по отчету
 ВсегоДЗ=SumOfArray(ДЗ,Упр); ВсегоКЗ=SumOfArray(КЗ,Упр);
 InsRepHead(Iter);
 InsRepTail;
 InsRepHead2;
 Табл1.Visible=True; Rep.Visible=True;
end;


Proc Оформление;
var nv:i;
 Rep.RowsCount=1;
 Rep.ColsCount=1;
 Rep.Visible=False;
 Табл2.Visible=True; Табл3.Visible=True;
 nv=WordsCount(Справ," ");
 if nv>=1: 
    if СправТабл="":
       Табл1.Column(2,ColVisible,True); Табл2.Column(2,ColVisible,True); Табл3.Column(2,ColVisible,True);
       Табл1.Row(1,RowVisible,False);
      else
       Табл1.Column(2,ColVisible,False); Табл2.Column(2,ColVisible,False); Табл3.Column(2,ColVisible,False);
       Табл1.Row(1,RowVisible,True);
    fi;
    Справ1=ExtractWord(1,Справ," ");
    НаимСправ1=Name_A(SubStr(Справ1,1,Length(Справ1)-1));
    if НаимСправ1="" or НаимСправ1=" ": НаимСправ1=Справ1; fi;
   else 
    Табл1.Column(2,ColVisible,False); Табл2.Column(2,ColVisible,False); Табл3.Column(2,ColVisible,False);
    Справ1="";
    НаимСправ1="";
 fi;
 if nv>=2: 
    Табл1.Column(3,ColVisible,True); Табл2.Column(3,ColVisible,True); Табл3.Column(3,ColVisible,True);
    Справ2=ExtractWord(2,Справ," ");
    НаимСправ2=Name_A(SubStr(Справ2,1,Length(Справ2)-1));
    if НаимСправ2="" or НаимСправ2=" ": НаимСправ2=Справ2; fi;
   else 
    Табл1.Column(3,ColVisible,False); Табл2.Column(3,ColVisible,False); Табл3.Column(3,ColVisible,False);
    Справ2="";
    НаимСправ2="";
 fi;
 if nv>=3: 
    Табл1.Column(4,ColVisible,True); Табл2.Column(4,ColVisible,True); Табл3.Column(4,ColVisible,True);
    Справ3=ExtractWord(3,Справ," ");
    НаимСправ3=Name_A(SubStr(Справ3,1,Length(Справ3)-1));
    if НаимСправ3="" or НаимСправ3=" ": НаимСправ3=Справ3; fi;
   else 
    Табл1.Column(4,ColVisible,False); Табл2.Column(4,ColVisible,False); Табл3.Column(4,ColVisible,False);
    Справ3="";
    НаимСправ3="";
 fi;
 if nv>=4:
    Табл1.Column(5,ColVisible,True); Табл2.Column(5,ColVisible,True); Табл3.Column(5,ColVisible,True);
    Справ4=ExtractWord(4,Справ," ");
    НаимСправ4=Name_A(SubStr(Справ4,1,Length(Справ4)-1));
    if НаимСправ4="" or НаимСправ4=" ": НаимСправ4=Справ4; fi;
   else 
    Табл1.Column(5,ColVisible,False); Табл2.Column(5,ColVisible,False); Табл3.Column(5,ColVisible,False);
    Справ4="";
    НаимСправ4="";
 fi;
 if nv>=5:
    Табл1.Column(6,ColVisible,True); Табл2.Column(6,ColVisible,True); Табл3.Column(6,ColVisible,True);
    Справ5=ExtractWord(5,Справ," ");
    НаимСправ5=Name_A(SubStr(Справ5,1,Length(Справ5)-1));
    if НаимСправ5="" or НаимСправ5=" ": НаимСправ5=Справ5; fi;
   else 
    Табл1.Column(6,ColVisible,False); Табл2.Column(6,ColVisible,False); Табл3.Column(6,ColVisible,False);
    Справ5="";
    НаимСправ5="";
 fi;
 Гр7_=1+nv+1; Гр8_=1+nv+2; Гр9_=1+nv+3;
 UpdateRep;
end;

Proc ReadJur(FName:S; nn:i);
var F,n,z,s,ss,x:i;
var tmp:S;
var Key,tВал1,tВал2,tСчДеб,tСчКре,tКмнт,tКБК,v1,v2,v3,v4,v5:S;
var tДата:D;
var tСум1,tСум2:N;
var Flag:L;
 if ExistFile(FName)=False: Exit; fi;
 ClearVariable(BufKey);
 ClearVariable(BufНаимКБК);
 ClearVariable(BufПризн1);
 ClearVariable(BufПризн2);
 ClearVariable(BufПризн3);
 ClearVariable(BufПризн4);
 ClearVariable(BufПризн5);
 ShowProgress(nn*2,"Расчет...");
 if FlagКБК: Раб.КБК.CrdToCache("КВР2006",False); fi;
 OpenTextJur(FName);
 Try
  While not GetTransFromTextJur(tДата,tСум1,tВал1,tСум2,tВал2,tСчДеб,tСчКре,Buf,tКмнт) do
   n=n+1;
   ProgressPos(n);
   if FlagКБК:
      if tСчДеб="00" or tСчДеб="00Z": 
	 tКБК=Раб.Бюджет2005.ВзятьКодСчета(tСчКре,"","КБК",False);
	else
	 tКБК=Раб.Бюджет2005.ВзятьКодСчета(tСчДеб,"","КБК",False);
      fi;
   fi;
   ss=LengthOfArray(Buf);
   for s=1..ss do
    if Справ1="КБК.": v1=tКБК; else if Match(Buf[s],Справ1): v1=Buf[s]; fi; fi;
    if Справ2="КБК.": v2=tКБК; else if Match(Buf[s],Справ2): v2=Buf[s]; fi; fi;
    if Справ3="КБК.": v3=tКБК; else if Match(Buf[s],Справ3): v3=Buf[s]; fi; fi;
    if Справ4="КБК.": v4=tКБК; else if Match(Buf[s],Справ4): v4=Buf[s]; fi; fi;
    if Справ5="КБК.": v5=tКБК; else if Match(Buf[s],Справ5): v5=Buf[s]; fi; fi;
   od;
   --почемуто в свертку попадают проводки, по аналитике которых быть не должно
   if not ((not Справ1="" and v1="") or (not Справ2="" and v2="") or (not Справ3="" and v3="") or (not Справ4="" and v4="") or (not Справ5="" and v5="")):
      Key=v1+" "+v2+" "+v3+" "+v4+" "+v5;
      z=SearchInArray(BufKey,Key,True);
      if z=-1:
	 z=InsertInArraySort(BufKey,Key);
	 InsertInArray(BufПризн1,z,v1);
	 InsertInArray(BufПризн2,z,v2);
	 InsertInArray(BufПризн3,z,v3);
	 InsertInArray(BufПризн4,z,v4);
	 InsertInArray(BufПризн5,z,v5);
	 if FlagКБК:
	    x=SearchInArray(Раб.КБК.cacheКВР_Код,SubStr(tКБК,18,3),True);
	    if x=-1: x=0; fi;
	    InsertInArray(BufНаимКБК,z,Раб.КБК.cacheКВР_Наим[x]);
	 fi;
       fi;
   fi; --if (not Справ1="" and v1="") or (not Справ2="" and v2="") or (not Справ3="" and v3="") or (not Справ4="" and v4="") or (not Справ5="" and v5=""):
  od;
 Finally
  CloseTextJur;
 end;
 if ExistFile(FName): DeleteFile(FName); fi;
end;

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

Func ДВЗ_(Mask:S):Date;
var n,t: i;
var ДТ_,ДТ:D;
 ДТ_=1.1.100;
 for Transaction t=Mask,1.1.100,ДК,Reverse do
  ДТ=TransDate(t);
  if not ДТ_=ДТ:
     if Saldo(Mask,ДТ)=0: Break; fi;
     ДТ_=ДТ;
  fi;
 od;
 ^ДТ;
end;

Proc Расчет;
var n,nn:i;
var FName,УслСч,УслАн:S;
var Res:N;
 Очистить;
 FName=PlanVar("CACHE")+"\"+GetGUID;
 УслСч=СчОбщ;
 if not МаскаСправ="":	
    УслАн="("+МаскаСправ+")";
    УслАн=Раб.Бюджет2005.Объединить(УслАн,АнОбщ,"&");
   else  
    УслАн=АнОбщ;
 fi;
 Refresh;
 nn=TujReport(FName,1.1.100,ДК,УслСч,УслАн,"","","",TujRepBalAccount+TujRepNoNullBal+TujRepZabalance+TujRepCombinedAna,False);
 Try
  ReadJur(FName,nn);
  nn=LengthOfArray(BufKey);
  ShowProgress(nn*2,"Расчет...");
  for n=1..nn do
   ProgressPos(nn+n);
   УслСч=СчОбщ;
   УслАн=АнОбщ;
   if Справ1="КБК.": УслСч=Раб.Бюджет2005.Объединить(УслСч,BufПризн1[n]+".*","&"); else УслАн=Раб.Бюджет2005.Объединить(УслАн,BufПризн1[n],"&"); fi;
   if Справ2="КБК.": УслСч=Раб.Бюджет2005.Объединить(УслСч,BufПризн2[n]+".*","&"); else УслАн=Раб.Бюджет2005.Объединить(УслАн,BufПризн2[n],"&"); fi;
   if Справ3="КБК.": УслСч=Раб.Бюджет2005.Объединить(УслСч,BufПризн3[n]+".*","&"); else УслАн=Раб.Бюджет2005.Объединить(УслАн,BufПризн3[n],"&"); fi;
   if Справ4="КБК.": УслСч=Раб.Бюджет2005.Объединить(УслСч,BufПризн4[n]+".*","&"); else УслАн=Раб.Бюджет2005.Объединить(УслАн,BufПризн4[n],"&"); fi;
   if Справ5="КБК.": УслСч=Раб.Бюджет2005.Объединить(УслСч,BufПризн5[n]+".*","&"); else УслАн=Раб.Бюджет2005.Объединить(УслАн,BufПризн5[n],"&"); fi;
   Res=Saldo(УслСч+"{"+УслАн+"}",ДК);
   if not Round(Res,2)=0:
      InsertFrame(Упр,Упр+1);
      if Справ1="КБК.": Призн1[Упр]=BufПризн1[n]; else Призн1[Упр]=BufПризн1[n]; fi;
      if Справ2="КБК.": Призн2[Упр]=BufПризн2[n]; else Призн2[Упр]=BufПризн2[n]; fi;
      if Справ3="КБК.": Призн3[Упр]=BufПризн3[n]; else Призн3[Упр]=BufПризн3[n]; fi;
      if Справ4="КБК.": Призн4[Упр]=BufПризн4[n]; else Призн4[Упр]=BufПризн4[n]; fi;
      if Справ5="КБК.": Призн5[Упр]=BufПризн5[n]; else Призн5[Упр]=BufПризн5[n]; fi;
      ДЗ[Упр]=Deb(Res);
      КЗ[Упр]=Cre(Res);
      ДВЗ[Упр]=ДВЗ_(УслСч+"{"+УслАн+"}");
      НаимКБК[Упр]=BufНаимКБК[n];
      Rep_Усл[Упр]=УслСч+"{"+УслАн+"}";
   fi;
  od;
  ВсегоДЗ=SumOfArray(ДЗ,Упр); 
  ВсегоКЗ=SumOfArray(КЗ,Упр);
 Finally
  CloseProgress;
 end;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Proc ДК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
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;
 ДК=tmp;
 Очистить;
 ^Cur;
end;

Func МаскаСч_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:n;
 Try
  z=Saldo(Value,1.1.100);
 Except
  Raise;
  ^False;
 end;
 ^True;
end;

Proc МаскаСч_OnExit(FieldName: String; Iter: Integer);
 Очистить;
 СправТабл="";
 СправСтр="";
end;

Func МаскаСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
var n:i;
 Template.HideEditor(False);
 tmp=Раб.КБК.Список(tmp,"","СЧ6 ВД+? ИГ");
 if tmp="": ^Cur; fi;
 if Match(tmp,"?."): tmp="*."+tmp+"???.??.*";
   |Match(tmp,"?.???."): tmp="*."+tmp+"??.*";
   |Match(tmp,"?.???.??"): tmp="*."+tmp+".*";
 fi;
 МаскаСч=Раб.Бюджет2005.Объединить(МаскаСч,tmp,"|");
 Очистить;
 СправТабл="";
 СправСтр="";
 ^Cur;
end;

Func МаскаКБК_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var tmp:S;
 ClearVariable(Buf);
 Buf[1]="ФКР --Классификация расходов";
 Buf[2]="КД --Классификация доходов";
 Buf[3]="КИФД --Классификация источников финансирования дефицитов";
 n=Alternate("Тип классификации",Buf,-1,1,12);
 if n=0: ^False; fi;
 МаскаКБК=Раб.КБК.ВыбратьМаскуКБК(SubStr(Buf[n],1,Pos(" --",Buf[n])-1),МаскаСч,МаскаКБК,False);
 Очистить;
 ^False;
end;

Proc МаскаКБК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func СправТабл_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if WordsCount(Справ," ")>=4: Message("Ошибка! Число справочников не может больше 5 !",mtError); ^False; fi;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 if WordInString(tmp,Справ," "): Message("Ошибка! Повторный ввод сравочника",mtError); ^False; fi;
-- СправТабл=Раб.Бюджет2005.Объединить(СправТабл,tmp," ");
 СправТабл=tmp;
 Очистить;
 Оформление;
 ^False;
end;

Proc СправТабл_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
 tmp=СправТабл;
 СправТабл=Раб.Бюджет.УдалитьПризнакИзНабора_Диалог(СправТабл," ");
 if not tmp=СправТабл: Очистить; Оформление; fi;
end;

Func СправСтр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if WordsCount(Справ," ")>=5: Message("Ошибка !Число справочников не может больше 5 !",mtError); ^False; fi;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 if WordInString(tmp,Справ," "): Message("Ошибка! Повторный ввод сравочника",mtError); ^False; fi;
 СправСтр=Раб.Бюджет2005.Объединить(СправСтр,tmp," ");
 Очистить;
 Оформление;
 ^False;
end;

Proc СправСтр_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
 tmp=СправСтр;
 СправСтр=Раб.Бюджет.УдалитьПризнакИзНабора_Диалог(СправСтр," ");
 if not tmp=СправСтр: Очистить; Оформление; fi;
end;

Func Призн_OnVerify(FieldName: String; Iter: Integer; Value: S): Logical;
var z:n;
 Try
  z=Saldo("{"+Value+"}",1.1.100);
 Except
  if ErrorCode<>23759:
     Raise;
    else
     Message("Недопустимо использовать '+' или '-' в данном условие отбора счетов !",mtError);
  fi;
  ^False;
 end;
 ^True;
end;

Proc Призн_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func Призн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 Template.HideEditor(False);
 tmp=AnaElection("*");
 if tmp="": ^Cur; fi;
 if Призн="": Призн=tmp; else Призн=Призн+"&"+tmp; fi;
 Очистить;
 ^Cur;
end;

Func Гр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
var Field:S;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Аналитический признак";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Аналитический признак)";
 Buf[4]="Аналитический признак (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf);
 if n=0: ^Cur; fi;
 Field=AsString(Template.Field);
 if Field="Гр2_" or Field="Гр0_": Гр2=n-1;
   |Field="Гр3_": Гр3=n-1;
   |Field="Гр4_": Гр4=n-1;
   |Field="Гр5_": Гр5=n-1;
 fi;
 ^Cur;
end;

Func onLookup (Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var СчУсл,АнУсл,FieldName:S;
var p1,p2,n,iter:i;
 Template.HideEditor(False);
 FieldName=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 p1=Pos("[",FieldName);
 p2=Pos("]",FieldName);
 if p1<>0 and p2<>0: Iter=Int(SubStr(FieldName,p1+1,p2-p1-1)); fi;
 p1=Pos("{",Rep_Усл[Iter]);
 p2=Pos("}",Rep_Усл[Iter]);
 СчУсл=SubStr(Rep_Усл[Iter],1,p1-1);
 АнУсл=SubStr(Rep_Усл[Iter],p1+1,p2-p1-1);
 ClearVariable(Buf);
 Buf[1]="Расшифровка по дням";
 Buf[2]="Расшифровка по проводкам";
 n=Alternate("Уточняющий отчет",Buf,25);
 if n=0: ^Cur; fi;
 if n=1: Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."000"',1.1.100+1,ДК,СчУсл,АнУсл);
   |n=2: Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',1.1.100+1,ДК,СчУсл,АнУсл);
 fi;
 ^Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
var nv:i;
 if ДК=1.1.100: Message("Введите дату расчета",mtError); Template.Field="ДК"; Exit; fi;
 if МаскаСч="": Message("Введите условие отбора счетов",mtError); Template.Field="МаскаСч"; Exit; fi;
 nv=WordsCount(Справ," ");
 if nv=0: Message("Задайте разрез аналитических справочников",mtError); Template.Field="СправСтр_"; Exit; fi;
 Refresh;
 АнОбщ=if(Призн="","","("+Призн+")");
 СчОбщ=if(МаскаКБК="","","("+МаскаКБК+"."+Раб.Бюджет2005.МаскаСч6+".*)");
 СчОбщ=Раб.Бюджет2005.Объединить(СчОбщ,"("+МаскаСч+")","&");
 МаскаСправ=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Справ," ","КБК.","");
 FlagКБК=not МаскаСправ=Справ;
 МаскаСправ=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(МаскаСправ," ","&");
 Расчет;
 if not СправТабл="": RepRow=0; РазбитьТаблицы; fi;
 Message("Расчет завершен",mtInformation);
end;

Proc cbNewPage_OnChange(Sender: String);
 Message("Для вступления изменений в силу, необходимо выполнить расчет");
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
end;

Proc AfterOpen(Destroy: Logical);
 InitRep;
 Оформление;
end;
--Обработчики событий шаблона -----
--

Конец