-- Шаблон создан мастером бланков
-- 27.12.2006 14:46:10
--
БланкСШаблоном "Распределенные ЛБО ПБС";

var FlagEdit:L;

S1: Section;
S2: Section;
S3: Section;

HStr: Section;

fИтог:L;
fПериод:I;

var Загл:S="Распределенные ЛБО ПБС"+if(fПериод=1:" первого планового года"|fПериод=2:" второго планового года"|True:" текущего года");

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

ПризнПБС:S;
var ПризнПБС_:S=if(Name_A(ПризнПБС)="" or Name_A(ПризнПБС)=" ",ПризнПБС,Name_A(ПризнПБС));

УпрКБК:I;
МаскаКБК[]:S;

fКБК_ГЛ:L;
var КБК_ГЛ:S=if(fКБК_ГЛ,"ГЛ","X");
fКБК_РП:L;
var КБК_РП:S=if(fКБК_РП,"РП","X");
fКБК_ЦС:L;
var КБК_ЦС:S=if(fКБК_ЦС,"ЦС","X");
fКБК_ВР:L;
var КБК_ВР:S=if(fКБК_ВР,"ВР","X");
fКБК_КОСГУ:L;
var КБК_КОСГУ:S=if(fКБК_КОСГУ,"КОСГУ","X");

СправКол:S;
var СправКол_:s=СправКол;

СправСтр:S;
var СправСтр_:s=СправСтр;
var nСправСтр:I=WordsCount(СправСтр," ");

var Справ_:S=Trim(СправКол+" "+СправСтр);

var Справ[]:S;
var НаимСправ[]:S;
var МаскаСправ:S;
var MaxСправ:I=8;
var ЧислоСправ:I=nСправСтр+1;
var FlagКБК:L;

УСС[]:I;
var УСС_[]:S=if(УСС[$]=0 and not FlagEdit,"Нет",Str(УСС[$]));
hУСС[]:I;
hСправ[]:S;

ПризнДоп:S;

ЕдИзм:I=[1000];
var ЕдИзм_:S=if(ЕдИзм=1000,"Тыс. руб.","Руб.");
var Точн:i=if(ЕдИзм=1:2|ЕдИзм=1000:1|True:0);

Гр[]:I;
var nГр[]:I=if($>8,$-(7-nСправСтр),$);

var tCache[]:S;
var KeyСвертка[]:S;
var BufКБК[]: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 BufПризн6[]:S;
var BufПризн7[]:S;
var BufПризн8[]:S;

var Ключ[]:S;
var Призн1[]:S;
var Призн2[]:S;
var Призн3[]:S;
var Призн4[]:S;
var Призн5[]:S;
var Призн6[]:S;
var Призн7[]:S;
var Призн8[]:S;
var ЛБО[]:N;
var ВсегоЛБО:N;

var Кол_Ключ[]:S;
var Кол_ЛБО []:N;
var Кол_ЛБО_[]:N;

var Стр_Ключ[]:S;
var Стр_ЛБО[]:N;

var Idx[]:S;

var СчДеб_ЛБО:S=if(fПериод=1:"1.501.22"|fПериод=2:"1.501.32"|True:"1.501.12");
var СчКре_ЛБО:S=if(fПериод=1:"1.501.24"|fПериод=2:"1.501.34"|True:"1.501.14");
var Ан_ЛБО:S="";
var ИстКБК_ЛБО:I=-1;

var МаскаСч:S="(*."+if(ИстКБК_ЛБО=1:СчДеб_ЛБО|ИстКБК_ЛБО=-1:СчКре_ЛБО)+".*)";

var Buf[]:S;

var BufVoc[]:S;
--
--Процедуры и функции -------------			      
Proc Очистить;
 ClearVariable(Ключ);
 ClearVariable(Призн1);
 ClearVariable(Призн2);
 ClearVariable(Призн3);
 ClearVariable(Призн4);
 ClearVariable(Призн5);
 ClearVariable(Призн6);
 ClearVariable(Призн7);
 ClearVariable(Призн8);
 ClearVariable(ЛБО);
 ClearVariable(ВсегоЛБО);
 ClearVariable(Кол_Ключ);
 ClearVariable(Кол_ЛБО);
 ClearVariable(Кол_ЛБО_);
 ClearVariable(Стр_Ключ);
 ClearVariable(Стр_ЛБО);
 ClearVariable(Idx);
 if AsString(Template.Name)="S1" or AsString(Template.Name)="S2" or AsString(Template.Name)="S3":
    Template.Column=1;
    Template.Row=1;
 fi;
 S1.RowsCount=2;
 S1.ColsCount=9;
 S2.RowsCount=1;
 S2.ColsCount=9;
 S3.RowsCount=1;
 S3.ColsCount=9;
 S1.Cell(1,9,CellContents,"",True);
 S2.Cell(1,2,CellContents,"",True);
 S2.Cell(1,3,CellContents,"",True);
 S2.Cell(1,4,CellContents,"",True);
 S2.Cell(1,5,CellContents,"",True);
 S2.Cell(1,6,CellContents,"",True);
 S2.Cell(1,7,CellContents,"",True);
 S2.Cell(1,8,CellContents,"",True);
 S2.Cell(1,9,CellContents,"",True);
 S3.Cell(1,9,CellContents,"",True);
end;

Proc Оформление;
var s,c,ww,w,z:i;
var Obj: Object;
 ClearVariable(Справ);
 ww=WordsCount(Справ_," ");
 for w=1..ww do
  Справ[w]=ExtractWord(w,Справ_," ");
  НаимСправ[w]=Name_A(SubStr(Справ[w],1,Length(Справ[w])-1));
  if НаимСправ[w]="" or НаимСправ[w]=" ": НаимСправ[w]=Справ[w]; fi;
  УСС[w]=0;
  z=SearchInArray(hСправ,Справ[w],True);
  if not z=-1:
     УСС[w]=hУСС[z];
  fi;
 od;
 ww=WordsCount(СправСтр," ");
 for s=1..3 do
  if FindObject("S"+Str(s),Obj):
     for c=2..8 do
      Obj.Column(c,ColVisible,c<=ww+1);
     od;
  fi;
 od;
end;

Proc ФорматЧисел (isXLS:L);
var r,rr,c,cc:i;
var Val:S;
var Val_:N;
 rr=AsInteger(S2.RowsCount);
 cc=AsInteger(S2.ColsCount);
 for r=1..rr do
  for c=9..cc do
   if isXLS:
      Val=AsString(S2.Cell(r,c,CellContents,"",False));
      Val=Раб.Формат.ReplaceSubstr(Val,"'","");
      Val=Раб.Формат.ReplaceSubstr(Val,".",",");
      if Val="": Val="0,00"; S2.Cell(r,c,CellAlignment,1); fi;
      S2.Cell(r,c,CellContents,Val,True);
     else
      Val=AsString(S2.Cell(r,c,CellContents,"",False));
      Val=Раб.Формат.ReplaceSubstr(Val,",",".");
      Val_=Round(Val,2);
      S2.Cell(r,c,CellContents,if(Val="" or Val="0,00","",Format("%.2N",Val_)),True);
   fi;
   if r=1: 
      if isXLS:
	 Val=AsString(S3.Cell(r,c,CellContents,"",False));
	 Val=Раб.Формат.ReplaceSubstr(Val,"'","");
	 Val=Раб.Формат.ReplaceSubstr(Val,".",",");
	 if Val="": Val="0,00"; S3.Cell(r,c,CellAlignment,1); fi;
	 S3.Cell(r,c,CellContents,Val,True);
	else
	 Val=AsString(S3.Cell(r,c,CellContents,"",False));
	 Val=Раб.Формат.ReplaceSubstr(Val,",",".");
	 Val_=Round(Val,2);
	 S3.Cell(r,c,CellContents,if(Val="" or Val="0,00","",Format("%.2N",Val_)),True);
      fi;
   fi;
  od;
 od;
end;

Func ЗначЭлемента (Val:S; Режим:I):S;
var tmp:S;
 if not Режим=0:
    tmp=Name_A(Val);
    if tmp="" or tmp=" ": tmp=Val; fi;
 fi;
 if Режим=1: ^tmp;
   |Режим=2: ^tmp+" ("+val+")";
   |Режим=3: ^val+" ("+tmp+")";
   |True:    ^val;
 fi;
end;

Proc ПостроитьОтчет;
var n,nn,nCol,nRow,cc,c,r,rr,Iter,x,y,w,ww:I;
var tmp:S;
var bgc:i;
var sЛБО:N;
 nn=LengthOfArray(Ключ);
 for n=1..nn do
  if Pos("я@я",Ключ[n])=0:
     sЛБО=ЛБО[n];
    else
     sЛБО=0;
  fi;
  Iter=SearchInArray(Кол_Ключ,Призн1[n],True);
  if Iter=-1:
     Iter=InsertInArraySort(Кол_Ключ,Призн1[n]);
     InsertInArray(Кол_ЛБО ,Iter,ЛБО[n]);
     InsertInArray(Кол_ЛБО_,Iter,sЛБО);
    else
     Кол_ЛБО [Iter]=Кол_ЛБО [Iter]+ЛБО[n];
     Кол_ЛБО_[Iter]=Кол_ЛБО_[Iter]+sЛБО;
  fi;
  --
  tmp=Trim(Призн2[n]+" "+Призн3[n]+" "+Призн4[n]+" "+Призн5[n]+" "+Призн6[n]+" "+Призн7[n]+" "+Призн8[n]);
  Iter=SearchInArray(Стр_Ключ,tmp,True);
  if Iter=-1:
     Iter=InsertInArraySort(Стр_Ключ,tmp);
     InsertInArray(Стр_ЛБО,Iter,ЛБО[n]);
    else
     Стр_ЛБО[Iter]=Стр_ЛБО[Iter]+ЛБО[n];
  fi;
 od;
 nCol=LengthOfArray(Кол_Ключ);
 nRow=LengthOfArray(Стр_Ключ);
 if nCol=0 or nRow=0: Exit; fi;
 --Колонки
 cc=9+nCol;
 S1.ColsCount=cc;
 S3.ColsCount=cc;
 for n=1..nCol+1 do
  if n=1:      tmp="2,2,1,2";
    |n=nCol+1: tmp="2,2,2,2";
    |n=nCol:   tmp="1,2,2,2";
    |True:     tmp="1,2,1,2";
  fi;
  c=9+n-1;
  --
  if n=nCol+1:
     S1.Cell(1,c,CellContents,"ВСЕГО");
    else
     S1.Cell(1,c,CellContents,ЗначЭлемента(Кол_Ключ[n],Гр[1]));
  fi;
  S1.Cell(1,c,CellBorder,tmp);
  --Нумерация колонок
  S1.Cell(2,c,CellBorder,tmp);
  if n>1: S1.Cell(2,c,CellContents,Str(nГр[8+n]),True); fi;
  --
  if n=nCol+1:
     S3.Cell(1,c,CellContents,Format("%.2N",SumOfArray(Кол_ЛБО_,nCol)));
    else
     S3.Cell(1,c,CellContents,Format("%.2N",Кол_ЛБО_[n]));
  fi;
  S3.Cell(1,c,CellFontStyle,fsBold);
  S3.Cell(1,c,CellAlignment,1);
  S3.Cell(1,c,CellBorder,tmp);
 od;
 --Строки
 rr=1+nRow-1;
 S2.RowsCount=rr;
 S2.ColsCount=cc;
 for n=1..nRow do
  if Pos("я@я",Стр_Ключ[n])=0: bgc=coTransparent; else bgc=12902076; fi;
  r=1+n-1;
  S2.Cell(r,1,CellContents,Str(n));
  S2.Cell(r,1,CellBorder,"2,1,1,1");
  ww=WordsCount(Стр_Ключ[n]," ");
  for w=1..ww do
   tmp=ExtractWord(w,Стр_Ключ[n]," ");
   if not tmp="я@я":
      S2.Cell(r,w+1,CellContents,ЗначЭлемента(tmp,Гр[w+1]));
      S2.CellLinks(w+1,r,w+1,r); --вызываем обновление клетки
   fi;
  od;
  S2.Cell(r,cc,CellContents,Format("%.2N",Стр_ЛБО[n]));
  S2.Cell(r,cc,CellFontStyle,fsBold);
  S2.Cell(r,cc,CellAlignment,1);
  --
  if not bgc=coTransparent:
     for c=1..cc do
      S2.Cell(r,c,CellBgColor,bgc);
      S2.Cell(r,c,CellFontStyle,fsBold);
     od;
  fi;
 od;
 --Заполняем таблицу
 nn=LengthOfArray(Ключ);
 for Iter=1..nn do
  x=SearchInArray(Кол_Ключ,Призн1[Iter],True);
  y=SearchInArray(Стр_Ключ,Trim(Призн2[Iter]+" "+Призн3[Iter]+" "+Призн4[Iter]+" "+Призн5[Iter]+" "+Призн6[Iter]+" "+Призн7[Iter]+" "+Призн8[Iter]),True);
  r=1+y-1;
  c=9+x-1;
  S2.Cell(r,c,CellContents,Format("%.2N",ЛБО[Iter]));
  S2.Cell(r,c,CellAlignment,1);
  S2.Cell(r,c,CellEventOnClick,"Cell_OnClick");
  Idx[Iter]=Str16(r)+" "+Str16(c);
 od;
 --
 for r=1..rr do
  S2.Cell(r,9,CellBorder,"2,1,1,1");
  S2.Cell(r,cc,CellBorder,"2,1,2,1");
 od;
end;

Func GetColWidth(Val:S; Line:I; W:I):i;
var l:i;
 l=Int(Length(Val)*10);
 HStr.Column(1,ColWidth,l);
 While not AsInteger(HStr.Cell(1,1,CellLinesCount,Val))=1 do
  l=l+10;
  HStr.Column(1,ColWidth,l);
 od;
 if Line>1 and l>w:
    While not AsInteger(HStr.Cell(1,1,CellLinesCount,Val))>Line do
     l=l-10;
     HStr.Column(1,ColWidth,l);
    od;
    l=l+10;
 fi;
 ^l;
end;

Proc ПостОбработка;
var i,ii,w,p,c,cc:i;
var tmp:S;
var Obj:Object;
 ClearVariable(Buf);
 ii=LengthOfArray(Кол_Ключ);
 if Справ[1]="КБК." and fКБК_ГЛ and fКБК_РП and fКБК_ЦС and fКБК_ВР and fКБК_КОСГУ: c=60; else c=0; fi;
 for i=1..ii do
  tmp=Format("%.2N",Кол_ЛБО_[i]);
  p=GetColWidth(tmp,1,300)+20;
  tmp=ЗначЭлемента(Кол_Ключ[i],Гр[1]);
  w=GetColWidth(tmp,if(Гр[1]=0,1,4),300)+10-c;
  Buf[8+i]=Str(Max(w,p));
 od;
 --всего
 tmp=Format("%.2N",SumOfArray(Кол_ЛБО_,ii));
 p=GetColWidth(tmp,1,300)+20;
 w=GetColWidth("ВСЕГО",1,300);
 Buf[8+ii+1]=Str(Max(w,p));
 --
 ii=LengthOfArray(Стр_Ключ);
 for c=2..8 do
  if not Справ[c]="":
     for i=1..ii do
      tmp=ExtractWord(c-1,Стр_Ключ[i]," ");
      tmp=ЗначЭлемента(tmp,Гр[c]);
      if Length(tmp)>Length(Buf[c]): Buf[c]=tmp; fi;
     od;
     Buf[c]=Str(GetColWidth(Buf[c],3,500));
  fi;
 od;
 for i=1..3 do
  if FindObject("S"+Str(i),Obj):
     cc=AsInteger(Obj.ColsCount);
     for c=2..cc do
      w=Int(Buf[c]);
      if w=0: w=300; else w=w+10; fi;
      Obj.Column(c,ColWidth,w);
     od;
  fi;
 od;
end;

Func MyTurn(vСч:S; vАн:S; ДН_:D; ДК_:D):N;
var Ret:N;
 if vСч="": ^0; fi;
 Try
  Ret=Round(Turn(vСч+"{"+vАн+"}",ДН_,ДК_)/ЕдИзм,Точн);
 Except
  Ret=0;
 end;
 ^Ret;
end;

Func ПолучитьУслСч (aБК:S; aКОСГУ:S; aИстКБК:I; aСчДеб:S; aСчКре:S):S;
var Res:S;
 if aИстКБК= 1: Res=aБК+"."+aСчДеб+"."+aКОСГУ+"/*."+aСчКре+".*";
   |aИстКБК=-1: Res="*."+aСчДеб+".*/"+aБК+"."+aСчКре+"."+aКОСГУ;
   |True:	Res=aБК+"."+aСчДеб+"."+aКОСГУ+"/"+aБК+"."+aСчКре+"."+aКОСГУ;
 fi;
 ^Res;
end;

Proc ДобЗнач(aКлюч:S; aПризн1:S; aПризн2:S; aПризн3:S; aПризн4:S; aПризн5:S; aПризн6:S; aПризн7:S; aПризн8:S; aЛБО:N);
var Iter:I;
 Iter=SearchInArray(Ключ,aКлюч,True);
 if Iter=-1:
    Iter=InsertInArraySort(Ключ,aКлюч);
    InsertInArray(Призн1,Iter,aПризн1);
    InsertInArray(Призн2,Iter,aПризн2);
    InsertInArray(Призн3,Iter,aПризн3);
    InsertInArray(Призн4,Iter,aПризн4);
    InsertInArray(Призн5,Iter,aПризн5);
    InsertInArray(Призн6,Iter,aПризн6);
    InsertInArray(Призн7,Iter,aПризн7);
    InsertInArray(Призн8,Iter,aПризн8);
    InsertInArray(ЛБО,Iter,aЛБО);
   else
    ЛБО[Iter]=ЛБО[Iter]+aЛБО;
 fi;
end;

Proc ЧитатьЖурнал(k:i; kk:i; FName:S; nn:i; aБК:S; aКОСГУ:S);
var F,n,z,s,ss,x:i;
var tmp,Спр1,Спр2,Спр3,Спр4,Спр5,Спр6,Спр7,Спр8:S;
var Key,tВал1,tВал2,tСчДеб,tСчКре,tКмнт,tКБК,vКБК,v1,v2,v3,v4,v5,v6,v7,v8,v1_,v2_,v3_,v4_,v5_,v6_,v7_,v8_,ГЛ,РП,ЦС,ВР,КОСГУ:S;
var tДата:D;
var tСум1,tСум2:N;
 if ExistFile(FName)=False: Exit; fi;
 ClearVariable(KeyСвертка);
 ClearVariable(BufКБК);
 ClearVariable(BufПризн1);
 ClearVariable(BufПризн2);
 ClearVariable(BufПризн3);
 ClearVariable(BufПризн4);
 ClearVariable(BufПризн5);
 ClearVariable(BufПризн6);
 ClearVariable(BufПризн7);
 ClearVariable(BufПризн8);
 ClearVariable(tCache);
 if Справ[1]="КБК.": Спр1=""; else Спр1=SubStr(Справ[1],1,Pos(".",Справ[1])); fi;
 if Справ[2]="КБК.": Спр2=""; else Спр2=SubStr(Справ[2],1,Pos(".",Справ[2])); fi;
 if Справ[3]="КБК.": Спр3=""; else Спр3=SubStr(Справ[3],1,Pos(".",Справ[3])); fi;
 if Справ[4]="КБК.": Спр4=""; else Спр4=SubStr(Справ[4],1,Pos(".",Справ[4])); fi;
 if Справ[5]="КБК.": Спр5=""; else Спр5=SubStr(Справ[5],1,Pos(".",Справ[5])); fi;
 if Справ[6]="КБК.": Спр6=""; else Спр6=SubStr(Справ[6],1,Pos(".",Справ[6])); fi;
 if Справ[7]="КБК.": Спр7=""; else Спр7=SubStr(Справ[7],1,Pos(".",Справ[7])); fi;
 if Справ[8]="КБК.": Спр8=""; else Спр8=SubStr(Справ[8],1,Pos(".",Справ[8])); fi;
 if FlagКБК:
    if not fКБК_ГЛ: ГЛ=Раб.Бюджет2005.ВзятьКодКБК(aБК,"КР","ППП",False); fi;
    if not fКБК_РП: РП=Раб.Бюджет2005.ВзятьКодКБК(aБК,"КР","РП",False);  fi;
    if not fКБК_ЦС: ЦС=Раб.Бюджет2005.ВзятьКодКБК(aБК,"КР","ЦС",False);  fi;
    if not fКБК_ВР: ВР=Раб.Бюджет2005.ВзятьКодКБК(aБК,"КР","ВР",False);  fi;
    if not fКБК_КОСГУ: КОСГУ=aКОСГУ; fi;
 fi;
 ShowProgress(nn*2,"Расчет..."+Str(k)+" из "+Str(kk));
 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);
   ss=LengthOfArray(Buf);
   Key=tСчДеб+" "+tСчКре;
   for s=1..ss do
    Key=Key+" "+Buf[s];
   od;
   if SearchInArray(tCache,Key,True)=-1:
      InsertInArraySort(tCache,Key);
      v1=""; v2=""; v3=""; v4=""; v5=""; v6=""; v7=""; v8=""; v1_=""; v2_=""; v3_=""; v4_=""; v5_=""; v6_=""; v7_=""; v8_="";
      if FlagКБК:
	 if tСчДеб="00" or tСчДеб="00Z": tmp=tСчКре; else tmp=tСчДеб; fi;
	 vКБК="";
	 if fКБК_ГЛ: ГЛ=Раб.Бюджет2005.ВзятьКодСчета(tmp,"КР","ППП",False); vКБК=vКБК+"."+ГЛ; fi;
	 if fКБК_РП: РП=Раб.Бюджет2005.ВзятьКодСчета(tmp,"КР","РП",False);  vКБК=vКБК+"."+РП; fi;
	 if fКБК_ЦС: ЦС=Раб.Бюджет2005.ВзятьКодСчета(tmp,"КР","ЦС",False);  vКБК=vКБК+"."+ЦС; fi;
	 if fКБК_ВР: ВР=Раб.Бюджет2005.ВзятьКодСчета(tmp,"КР","ВР",False);  vКБК=vКБК+"."+ВР; fi;
	 if fКБК_КОСГУ: КОСГУ=Раб.Бюджет2005.ВзятьКодСчета(tmp,"КР","КОСГУ",False);  vКБК=vКБК+"."+КОСГУ; fi;
	 vКБК=SubStr(vКБК,2,255);
	 tКБК=ГЛ+"."+РП+"."+ЦС+"."+ВР+"."+КОСГУ;
	 if Справ[1]="КБК.": v1=vКБК; v1_=tКБК;
	   |Справ[2]="КБК.": v2=vКБК; v2_=tКБК;
	   |Справ[3]="КБК.": v3=vКБК; v3_=tКБК;
	   |Справ[4]="КБК.": v4=vКБК; v4_=tКБК;
	   |Справ[5]="КБК.": v5=vКБК; v5_=tКБК;
	   |Справ[6]="КБК.": v6=vКБК; v6_=tКБК;
	   |Справ[7]="КБК.": v7=vКБК; v7_=tКБК;
	   |Справ[8]="КБК.": v8=vКБК; v8_=tКБК;
	 fi;
	else
	 tКБК="";
      fi;
      for s=1..ss do
--	 if Pos(Спр1,Buf[s])=1: v1=Buf[s]; v1_=v1;
--	   |Pos(Спр2,Buf[s])=1: v2=Buf[s]; v2_=v2;
--	   |Pos(Спр3,Buf[s])=1: v3=Buf[s]; v3_=v3;
--	   |Pos(Спр4,Buf[s])=1: v4=Buf[s]; v4_=v4;
--	   |Pos(Спр5,Buf[s])=1: v5=Buf[s]; v5_=v5;
--	   |Pos(Спр6,Buf[s])=1: v6=Buf[s]; v6_=v6;
--	   |Pos(Спр7,Buf[s])=1: v7=Buf[s]; v7_=v7;
--	 fi;
       if Pos(Спр1,Buf[s])=1: v1=if(УСС[1]=0:Buf[s]|УСС[1]>0:ExtractWords(1,УСС[1]+1,Buf[s],".")|true:Спр1+"*."+ExtractWords(Abs(УСС[1])+2,127,Buf[s],".")); v1_=v1; fi;
       if Pos(Спр2,Buf[s])=1: v2=if(УСС[2]=0:Buf[s]|УСС[2]>0:ExtractWords(1,УСС[2]+1,Buf[s],".")|true:Спр2+"*."+ExtractWords(Abs(УСС[2])+2,127,Buf[s],".")); v2_=v2; fi;
       if Pos(Спр3,Buf[s])=1: v3=if(УСС[3]=0:Buf[s]|УСС[3]>0:ExtractWords(1,УСС[3]+1,Buf[s],".")|true:Спр3+"*."+ExtractWords(Abs(УСС[3])+2,127,Buf[s],".")); v3_=v3; fi;
       if Pos(Спр4,Buf[s])=1: v4=if(УСС[4]=0:Buf[s]|УСС[4]>0:ExtractWords(1,УСС[4]+1,Buf[s],".")|true:Спр4+"*."+ExtractWords(Abs(УСС[4])+2,127,Buf[s],".")); v4_=v4; fi;
       if Pos(Спр5,Buf[s])=1: v5=if(УСС[5]=0:Buf[s]|УСС[5]>0:ExtractWords(1,УСС[5]+1,Buf[s],".")|true:Спр5+"*."+ExtractWords(Abs(УСС[5])+2,127,Buf[s],".")); v5_=v5; fi;
       if Pos(Спр6,Buf[s])=1: v6=if(УСС[6]=0:Buf[s]|УСС[6]>0:ExtractWords(1,УСС[6]+1,Buf[s],".")|true:Спр6+"*."+ExtractWords(Abs(УСС[6])+2,127,Buf[s],".")); v6_=v6; fi;
       if Pos(Спр7,Buf[s])=1: v7=if(УСС[7]=0:Buf[s]|УСС[7]>0:ExtractWords(1,УСС[7]+1,Buf[s],".")|true:Спр7+"*."+ExtractWords(Abs(УСС[7])+2,127,Buf[s],".")); v7_=v7; fi;
       if Pos(Спр8,Buf[s])=1: v8=if(УСС[8]=0:Buf[s]|УСС[8]>0:ExtractWords(1,УСС[8]+1,Buf[s],".")|true:Спр8+"*."+ExtractWords(Abs(УСС[8])+2,127,Buf[s],".")); v8_=v8; 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="") or (not Справ[6]="" and v6="") or (not Справ[7]="" and v7="") or (not Справ[8]="" and v8="")):
	 Key=Trim(v1_+" "+v2_+" "+v3_+" "+v4_+" "+v5_+" "+v6_+" "+v7_+" "+v8_);
	 z=SearchInArray(KeyСвертка,Key,True);
	 if z=-1:
	    z=InsertInArraySort(KeyСвертка,Key);
	    InsertInArray(BufКБК,z,tКБК);
	    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);
	    InsertInArray(BufПризн6,z,v6);
	    InsertInArray(BufПризн7,z,v7);
	    InsertInArray(BufПризн8,z,v8);
	 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=""):
   fi; --if SearchInArray(tCache,Key,True)=-1:
  od; --While not GetTransFromTextJur(tДата,tСум1,tВал1,tСум2,tВал2,tСчДеб,tСчКре,Buf,tКмнт) do
 Finally
  CloseTextJur;
 end;
 if ExistFile(FName): DeleteFile(FName); fi;
end;

Proc Расчет (k:i; kk:i; vБК:S; vКОСГУ:S);
var n,nn,v,Iter:i;
var FName,УслСчОбщ,УслАнОбщ,УслСжатияАн,ПризнДоп_,tmp:S;
var УслСч_ЛБО:S;
var УслАн_ЛБО:S;
var ЛБО_:N;
var БК,КОСГУ:S;
 УслСчОбщ=МаскаСч+"&("+vБК+"."+Раб.Бюджет2005.МаскаСч6+"."+vКОСГУ+")";
 ПризнДоп_=Раб.Бюджет2005.Объединить(ПризнПБС,if(ПризнДоп="","","("+ПризнДоп+")"),"&");
 УслАнОбщ=ПризнДоп_;
 УслСжатияАн=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 if not МаскаСправ="": 
    УслАнОбщ=Раб.Бюджет2005.Объединить(УслАнОбщ,"("+МаскаСправ+")","&"); 
    УслСжатияАн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(УслСжатияАн,"|",МаскаСправ,"&");
 fi;
 FName=PlanVar("CACHE")+"\"+GetGUID;
 nn=TujReport(FName,1.1.100,ДК,УслСчОбщ,УслАнОбщ,УслСжатияАн,"","",TujRepTurnDebCre+TujRepNoNullBal+TujRepZabalance+TujRepCombinedAna,False);
 Try
  ЧитатьЖурнал(k,kk,FName,nn,vБК,vКОСГУ);
  nn=LengthOfArray(KeyСвертка);
  ShowProgress(nn*2,"Расчет..."+Str(k)+" из "+Str(kk));
  УслСч_ЛБО=ПолучитьУслСч(vБК,vКОСГУ,ИстКБК_ЛБО,СчДеб_ЛБО,СчКре_ЛБО);
  for n=1..nn do
   ProgressPos(nn+n);
   УслАн_ЛБО=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ЛБО,"&");
   for v=1..ЧислоСправ do
    tmp=GetVariableS("BufПризн"+Str(v)+"["+Str(n)+"]");
    if Справ[v]="КБК.":
       БК=SubStr(BufКБК[n],1,20);
       КОСГУ=SubStr(BufКБК[n],22,3);
       УслСч_ЛБО=ПолучитьУслСч(БК,КОСГУ,ИстКБК_ЛБО,СчДеб_ЛБО,СчКре_ЛБО);
      else
       if УСС[v]>0:
	  if WordsCount(tmp,".")>УСС[v]:
	     tmp=tmp+"!";
	  fi;
       fi;
       УслАн_ЛБО=Раб.Бюджет2005.Объединить(УслАн_ЛБО,tmp,"&");
    fi;
   od;
   ЛБО_=MyTurn(УслСч_ЛБО,УслАн_ЛБО,ДН,ДК);
   if not ЛБО_=0:
      ДобЗнач(KeyСвертка[n],BufПризн1[n],BufПризн2[n],BufПризн3[n],BufПризн4[n],BufПризн5[n],BufПризн6[n],BufПризн7[n],BufПризн8[n],ЛБО_);
      if fИтог and ЧислоСправ>2:
	 for v=1..ЧислоСправ-2 do
	  tmp=ExtractWords(1,ЧислоСправ-v,KeyСвертка[n]," ")+" я@я";
	  ДобЗнач(tmp,BufПризн1[n],if(ЧислоСправ-v>1,BufПризн2[n],"я@я"),if(ЧислоСправ-v>2,BufПризн3[n],"я@я"),if(ЧислоСправ-v>3,BufПризн4[n],"я@я"),if(ЧислоСправ-v>4,BufПризн5[n],"я@я"),if(ЧислоСправ-v>5,BufПризн6[n],"я@я"),if(ЧислоСправ-v>6,BufПризн7[n],"я@я"),"я@я",ЛБО_);
	 od;
      fi;
   fi;
  od;
 Finally
  CloseProgress;
 end;
end;

Proc СписокСправ;
 Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 CopyArray(Раб.Бюджет2005.BufСправ,BufVoc);
 InsertInArray(BufVoc,1,"Обновить список справочников");
 InsertInArray(BufVoc,2,"КБК. --Бюджетная классификация");
end;

Func ВыборСправ:S;
var n:i;
 n=1;
 While n=1 do
  n=Alternate("Аналитические справочники",BufVoc,-1,1,12);
  if n=0: ^""; fi;
  if n=1: СписокСправ; fi;
 od;
 ^SubStr(BufVoc[n],1,Pos(" --",BufVoc[n])-1);
end;

Proc УдалитьПустыеМаскиКБК;
var n:i;
 n=1;
 While n<=УпрКБК do
  if МаскаКБК[n]="": DeleteFrame(УпрКБК,n); else n=n+1; fi;
 od;
end;

Func ПроверитьМаскиКБК:L;
var n1,n2:i;
var acc,КБК1_,КОСГУ1_,КБК2_,КОСГУ2_:s;
 for n1=1..УпрКБК do
  КБК1_=Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК[n1],"КР","КБК",False);
  КОСГУ1_=Раб.бюджет2005.ВзятьКодКБК(МаскаКБК[n1],"КР","КОСГУ",False);
  for n2=n1+1..УпрКБК do
   КБК2_=Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК[n2],"КР","КБК",False);
   КОСГУ2_=Раб.бюджет2005.ВзятьКодКБК(МаскаКБК[n2],"КР","КОСГУ",False);
   for Account acc=Раб.Бюджет2005.Объединить(КБК1_+".?.???.??."+КОСГУ1_,КБК2_+".?.???.??."+КОСГУ2_,"&") do
    Message("Повторный ввод классификации "+МаскаКБК[n1],mtError);
    Template.Field="МаскаКБК_";
    Template.Frame=n2;
    ^False;
   od;
  od;
 od;
 ^True;
end;

Func СжатиеУслБК(vБК:S):S;
var ППП,РП,СТ,ВР:S;
 ППП=SubStr(vБК,1,3); if ППП="???": ППП="*"; fi;
 РП=SubStr(vБК,5,4); if РП="????": РП="*"; fi;
 СТ=SubStr(vБК,10,7); if СТ="???????": СТ="*"; fi;
 ВР=SubStr(vБК,18,3); if ВР="???": ВР="*"; fi;
 if ППП="*" and РП="*" and СТ="*" and ВР="*":
    ^"*";
   else
    ^ППП+"."+РП+"."+СТ+"."+ВР;
 fi;
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(GetVariableD(Field));
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
 Очистить;
 Return Cur;
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;
 МаскаКБК[Iter]=Раб.КБК.ВыбратьМаскуКБК("ФКР",МаскаСч,МаскаКБК[Iter],True);
 Очистить;
 ^False;
end;

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

Func Гр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:I;
var Field:S;
 Template.HideEditor(False);
 Field=SubStr(AsString(Template.Field),2,255);
 ClearVariable(Buf);
 Buf[1]="Аналитический признак";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Аналитический признак)";
 Buf[4]="Аналитический признак (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf,-1,GetVariableI(Field)+1,12);
 if not n=0:
    PutVariableI(Field,n-1);
    if not LengthOfArray(Ключ)=0:
       if EnqOkCancel("Для вступления изменеий в силу необходимо выполнить расчет")=cmOk:
	  ExecuteProc("btnРасчет_OnClick","");
       fi;
    fi;
 fi;
 Return Cur;
end;

Proc OnClick1(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 InsertFrame(УпрКБК,Iter+1);
 Очистить;
end;

Proc OnClick2(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 DeleteFrame(УпрКБК,Iter);
 Очистить;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
 FieldName="f"+FieldName;
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Очистить;
 Return False;
end;

Func СправКол_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if ЧислоСправ>=MaxСправ: Message("Число справочников не может быть больше "+Str(MaxСправ)+"",mtError); ^False; fi;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 СправСтр=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(СправСтр," ",tmp,"");
 СправКол=tmp;
 Очистить;
 Оформление;
 ^False;
end;

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

Func СправСтр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if ЧислоСправ>=MaxСправ: Message("Число справочников не может быть больше "+Str(MaxСправ)+"",mtError); ^False; fi;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 СправКол=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(СправКол," ",tmp,"");
 СправСтр=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(СправСтр," ",tmp,"");
 if СправСтр="": СправСтр=tmp; else СправСтр=СправСтр+" "+tmp; fi;
 Очистить;
 Оформление;
 ^False;
end;

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

Func УСС_OnEnter(FieldName: String; Iter: Integer): logical;
 if Справ[Iter]="КБК.": Message("Для данного справочника свертка не предусмотрена",mtWarning); УСС[Iter]=0; ^False; fi;
 FlagEdit=True;
 Return True;
end;

Func УСС_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 УСС[Iter]=Int(Value);
 Return True;
end;

Proc УСС_OnExit(FieldName: String; Iter: Integer);
var z:i;
 if FlagEdit: 
    FlagEdit=False;
   else
    УСС[Iter]=0;
 fi;
 z=SearchInArray(hСправ,Справ[Iter],True);
 if z=-1:
    z=InsertInArraySort(hСправ,Справ[Iter]);
    InsertInArray(hУСС,z,УСС[Iter]);
   else
    hУСС[z]=УСС[Iter];
 fi;
 Очистить; 
 Оформление;
end;

Func ПризнДоп_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var ret:n;
 ret=Saldo("{"+value+"}",1.1.100);
 Return True;
end;

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

Func ПризнДоп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 tmp=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 if not tmp="": tmp="("+tmp+")|~*.*"; fi;
 Cur=AnaElection(tmp,false,true);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 if SubStr(cur,length(cur),1)=".": cur=SubStr(cur,1,length(cur)-1)+"!"; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(ПризнДоп,Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: 
    Template.HideEditor(False);
    ПризнДоп=Cur;
 fi;
 Очистить;
 Return Cur;
end;

Func ЕдИзм_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Руб.";
 Buf[2]="Тыс. руб.";
 n=Alternate("Выбор единицы измерения",Buf,-1,if(ЕдИзм=1000,2,1),12);
 if n=1: ЕдИзм=1;
   |n=2: ЕдИзм=1000;
   |True: ^False;
 fi;
 Очистить;
 Return False;
end;

Proc Cell_OnClick(Row: Integer; Col: Integer; Double: Logical);
var v,Iter,ИстКБК:I;
var БК,КОСГУ,УслСч,УслАн,УслКБК,СчДеб,СчКре,tmp:S;
 if not Double: Exit; fi;
 Iter=SearchInArray(Idx,Str16(Row)+" "+Str16(Col),False);
 if Iter=-1: Exit; fi;
 if not Pos("я@я",Ключ[Iter])=0: Message("Итоги не расшифровываются"); Exit; fi;
 СчДеб=СчДеб_ЛБО; СчКре=СчКре_ЛБО; ИстКБК=ИстКБК_ЛБО;
 УслАн=Раб.Бюджет2005.Объединить(ПризнПБС,if(ПризнДоп="","","("+ПризнДоп+")"),"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,Ан_ЛБО,"&");
 if not МаскаКБК[1]="" and not flagКБК:
    УслКБК="";
    for v=1..УпрКБК do
     tmp=СжатиеУслБК(Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК[v],"КР","КБК",False));
     УслКБК=Раб.Бюджет2005.Объединить(УслКБК,tmp+".*."+Раб.бюджет2005.ВзятьКодКБК(МаскаКБК[v],"КР","КОСГУ",False),"|");
    od;
    for v=1..ЧислоСправ do
     tmp=GetVariableS("Призн"+Str(v)+"["+Str(Iter)+"]");
     УслАн=Раб.Бюджет2005.Объединить(УслАн,tmp,"&");
    od;
    if ИстКБК= 1: УслСч="*."+СчДеб+".*"+"&("+УслКБК+")/*."+СчКре+".*";
      |ИстКБК=-1: УслСч="*."+СчДеб+".*/*."+СчКре+".*&("+УслКБК+")";
    fi;
   else
    УслСч=ПолучитьУслСч("*","*",ИстКБК,СчДеб,СчКре);
    for v=1..ЧислоСправ do
     if Справ[v]="КБК.":
	tmp=GetVariableS("Призн"+Str(v)+"["+Str(Iter)+"]");
	if not fКБК_ГЛ: tmp=Insert("???.",tmp,1); fi;
	if not fКБК_РП: tmp=Insert(if(SubStr(tmp,4,1)=".","",".")+"????.",tmp,5); fi;
	if not fКБК_ЦС: tmp=Insert(if(SubStr(tmp,9,1)=".","",".")+"???????.",tmp,10); fi;
	if not fКБК_ВР: tmp=Insert(if(SubStr(tmp,17,1)=".","",".")+"???.",tmp,18); fi;
	if not fКБК_КОСГУ: tmp=Insert(if(SubStr(tmp,21,1)=".","",".")+"???",tmp,22); fi;
	БК=Раб.Бюджет2005.ВзятьКодКБК(tmp,"КР","КБК",False);
	КОСГУ=Раб.бюджет2005.ВзятьКодКБК(tmp,"КР","КОСГУ",False);
	if Pos("?",tmp)=0 or МаскаКБК[1]="":
	   УслСч=ПолучитьУслСч(БК,КОСГУ,ИстКБК,СчДеб,СчКре);
	  else
	   УслКБК="";
	   for v=1..УпрКБК do
	    tmp=СжатиеУслБК(Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК[v],"КР","КБК",False));
	    УслКБК=Раб.Бюджет2005.Объединить(УслКБК,tmp+".*."+Раб.бюджет2005.ВзятьКодКБК(МаскаКБК[v],"КР","КОСГУ",False),"|");
	   od;
	   if ИстКБК= 1: УслСч=БК+"."+СчДеб+"."+КОСГУ+"&("+УслКБК+")/*."+СчКре+".*";
	     |ИстКБК=-1: УслСч=БК+"."+СчДеб+".*/"+БК+"."+СчКре+"."+КОСГУ+"&("+УслКБК+")";
	   fi;
	fi; --if Pos("?",tmp)=0 or МаскаКБК[1]="":
       else
	tmp=GetVariableS("Призн"+Str(v)+"["+Str(Iter)+"]");
	if УСС[v]>0:
	  if WordsCount(tmp,".")>УСС[v]:
	     tmp=tmp+"!";
	  fi;
	fi;
	УслАн=Раб.Бюджет2005.Объединить(УслАн,tmp,"&");
     fi;
    od;
 fi;
 if 253-Length(УслАн)<Length(УслСч): Message("Расшифровка невозможна. Слишком сложное условие отбора проводок^MВыполните расчет в разрезе КБК",mtError); Exit; fi;
 Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,УслСч,УслАн);
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
var n:i;
var БК_,КОСГУ_: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;
 if Trim(СправКол)="": Message("Задайте разрез аналитических справочников на колонки",mtError); Template.Field="СправКол_"; Exit; fi;
 if Trim(СправСтр)="": Message("Задайте разрез аналитических справочников на строки",mtError); Template.Field="СправСтр_"; Exit; fi;
 Очистить; 
 Оформление;
 if ЕдИзм=0: ЕдИзм=1; fi;
 Refresh;
 УдалитьПустыеМаскиКБК;
 if not ПроверитьМаскиКБК: Exit; fi;
 МаскаСправ=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Справ_," ","КБК.","");
 FlagКБК=not WordsCount(МаскаСправ," ")=ЧислоСправ;
 if FlagКБК and not fКБК_ГЛ and not fКБК_РП  and not fКБК_ЦС and not fКБК_ВР and not fКБК_КОСГУ: Message("В группировке КБК должен указан хотябы один из элементов",mtError); Template.Field="КБК_ГЛ"; Exit; fi;
 МаскаСправ=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(МаскаСправ," ","&");
 if УпрКБК=0: УпрКБК=1; fi;
 for n=1..УпрКБК do
  if МаскаКБК[n]="":
     БК_="???.????.???????.???";
     КОСГУ_="???";
    else
     БК_=Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК[n],"КР","КБК",False);
     КОСГУ_=Раб.бюджет2005.ВзятьКодКБК(МаскаКБК[n],"КР","КОСГУ",False);
  fi;
  Расчет(n,УпрКБК,БК_,КОСГУ_);
 od;
 ПостроитьОтчет;
 ПостОбработка;
 Message("Расчет завершен");
end;

Proc btnИмпорт_OnClick(Sender: String);
var FName:S;
 FName="Распределение расходов (3).xls";
 if ChooseSaveFile(FName,"Сохранить бланк в формате MS Excel....","Файлы MS Excel (*.xls)|*.xls")=cmCancel: Exit; fi;
 if ExistFile(FName):
    if EnqOkCancel("Файл "+FName+" уже существует, перезаписать ?",mtWarning)=cmCancel: Exit; fi;
 fi;
 Try
  ФорматЧисел(True);
  ExportBlank(ieExcel,GetActiveBlankName,FName,False);
 Finally
  ФорматЧисел(False);
 end;
 if ExistFile(FName):
    if EnqOkCancel("Бланк успешно сохранен в формат MS Excel. Открыть его ?")=cmOk: ExecuteProgram('"'+FName+'"'); fi;
 fi;
end;

Proc cb_OnChange(Sender: String);
 Очистить;
 if not LengthOfArray(Ключ)=0:
    if EnqOkCancel("Для вступления изменений в силу, необходимо выполнить расчет")=cmOk: btnРасчет_OnClick(Sender); fi;
 fi;
end;

Proc btnЗагрКБК_OnClick(Sender: String);
var FName,tmp:S;
var F,n:I;
 if ChooseFile(FName,"Открыть файл...", "Текстовые файлы(*.txt)|*.txt")=cmCancel: Exit; fi;
 F=TextFileOpenRead(FName);
 Try
  Раб.Бюджет2005.РежимМаски="?";
  ClearVariable(УпрКБК);
  ClearVariable(МаскаКБК);
  n=0;
  While not TextFileEndOfFile(F) do
   n=n+1;
   Hint("Чтение списка КБК..."+Str(n));
   tmp=TextFileReadLn(F);
   if Match(tmp,Раб.Бюджет2005.МаскаФКР+".???"):
      InsertFrame(УпрКБК,УпрКБК+1);
      МаскаКБК[УпрКБК]=tmp;
   fi;
  od;
 Finally
  TextFileClose(F);
 end;
 УдалитьПустыеМаскиКБК;
 if not МаскаКБК[1]="": Message("Список КБК успешно загружен"); else Message("Выбранный файл не являеться списком КБК",mtError); fi;
end;

Proc btnСохрКБК_OnClick(Sender: String);
var FName:S;
var F,n:I;
 УдалитьПустыеМаскиКБК;
 if МаскаКБК[1]="": Message("Список КБК пуст",mtError); Exit; fi;
 FName="Список КБК.txt";
 if ChooseFile(FName,"Сохранить файл...", "Текстовые файлы(*.txt)|*.txt")=cmCancel: Exit; fi;
 if ExistFile(FName): if EnqOkCancel("Файл "+FName+" существует, переписать ?")=cmCancel: Message("Отказ от сохранения данных"); Exit; fi; fi;
 F=TextFileCreate(FName);
 Try
  for n=1..УпрКБК do
   TextFileWriteLn(F,МаскаКБК[n]);
  od;
 Finally
  TextFileClose(F);
 end;
 Message("Список КБК успешно сохранен");
end;

Proc btnОчистКБК_OnClick(Sender: String);
 ClearVariable(УпрКБК);
 ClearVariable(МаскаКБК);
 Очистить;
 Оформление;
end;

Proc cbПериод_OnChange(Sender: String);
 Очистить;
end;
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 СписокСправ;
 if СправКол="" and СправСтр="": СправКол="ПБС.*"; СправСтр="КБК."; fi;
 if not fКБК_ГЛ and not fКБК_РП  and not fКБК_ЦС and not fКБК_ВР and not fКБК_КОСГУ:
    fКБК_ГЛ=True;
    fКБК_РП=True;
    fКБК_ЦС=True;
    fКБК_ВР=True;
    fКБК_КОСГУ=True;
 fi;
end;

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



Конец