-- Шаблон создан мастером бланков
-- 26.05.2005 11:26:39
--
БланкСШаблоном [03.04.2007] "Ассигнования и лимиты получателя бюджетных средств";

var FlagEdit:L;

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

btnРасчет:Object;
btnНастр :Object;
cbНС:Object;
cbЛБО:Object;
cbАсс:Object;
cbПлан:Object;
btnЗагрКБК:Object;
btnСохрКБК:Object;
btnОчистКБК:Object;

fНС:L;
fЛБО:L;
fАсс:L;
fПлан:L;

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

var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var defСчДеб_Асс_ПБС1:S="1.503.12";
var defСчКре_Асс_ПБС1:S="1.503.14";
var defСчДеб_Асс_ПБС2:S="1.503.22";
var defСчКре_Асс_ПБС2:S="1.503.24";
var defСчДеб_Асс_ПБС3:S="1.503.32";
var defСчКре_Асс_ПБС3:S="1.503.34";
var defСчДеб_ЛБО_ПБС1:S="1.501.12";
var defСчКре_ЛБО_ПБС1:S="1.501.14";
var defСчДеб_ЛБО_ПБС2:S="1.501.22";
var defСчКре_ЛБО_ПБС2:S="1.501.24";
var defСчДеб_ЛБО_ПБС3:S="1.501.32";
var defСчКре_ЛБО_ПБС3:S="1.501.34";

var defАн_Асс_ПБС1:S="";
var defАн_Асс_ПБС2:S="";
var defАн_Асс_ПБС3:S="";
var defАн_ЛБО_ПБС1:S="";
var defАн_ЛБО_ПБС2:S="";
var defАн_ЛБО_ПБС3:S="";

var defСчКБК_Асс_ПБС1:I=-1;
var defСчКБК_Асс_ПБС2:I=-1;
var defСчКБК_Асс_ПБС3:I=-1;
var defСчКБК_ЛБО_ПБС1:I=-1;
var defСчКБК_ЛБО_ПБС2:I=-1;
var defСчКБК_ЛБО_ПБС3:I=-1;

СчДеб_Асс_ПБС1:S=[defСчДеб_Асс_ПБС1];
СчКре_Асс_ПБС1:S=[defСчКре_Асс_ПБС1];
СчДеб_Асс_ПБС2:S=[defСчДеб_Асс_ПБС2];
СчКре_Асс_ПБС2:S=[defСчКре_Асс_ПБС2];
СчДеб_Асс_ПБС3:S=[defСчДеб_Асс_ПБС3];
СчКре_Асс_ПБС3:S=[defСчКре_Асс_ПБС3];
СчДеб_ЛБО_ПБС1:S=[defСчДеб_ЛБО_ПБС1];
СчКре_ЛБО_ПБС1:S=[defСчКре_ЛБО_ПБС1];
СчДеб_ЛБО_ПБС2:S=[defСчДеб_ЛБО_ПБС2];
СчКре_ЛБО_ПБС2:S=[defСчКре_ЛБО_ПБС2];
СчДеб_ЛБО_ПБС3:S=[defСчДеб_ЛБО_ПБС3];
СчКре_ЛБО_ПБС3:S=[defСчКре_ЛБО_ПБС3];

Ан_Асс_ПБС1:S=[defАн_Асс_ПБС1];
Ан_Асс_ПБС2:S=[defАн_Асс_ПБС2];
Ан_Асс_ПБС3:S=[defАн_Асс_ПБС3];
Ан_ЛБО_ПБС1:S=[defАн_ЛБО_ПБС1];
Ан_ЛБО_ПБС2:S=[defАн_ЛБО_ПБС2];
Ан_ЛБО_ПБС3:S=[defАн_ЛБО_ПБС3];

СчКБК_Асс_ПБС1:I=[defСчКБК_Асс_ПБС1];
СчКБК_Асс_ПБС2:I=[defСчКБК_Асс_ПБС2];
СчКБК_Асс_ПБС3:I=[defСчКБК_Асс_ПБС3];
СчКБК_ЛБО_ПБС1:I=[defСчКБК_ЛБО_ПБС1];
СчКБК_ЛБО_ПБС2:I=[defСчКБК_ЛБО_ПБС2];
СчКБК_ЛБО_ПБС3:I=[defСчКБК_ЛБО_ПБС3];

var СчКБК_Асс_ПБС1_:S=if(СчКБК_Асс_ПБС1=1:"По деб. счета"|СчКБК_Асс_ПБС1=-1:"По кре. счета"|True:"");
var СчКБК_Асс_ПБС2_:S=if(СчКБК_Асс_ПБС2=1:"По деб. счета"|СчКБК_Асс_ПБС2=-1:"По кре. счета"|True:"");
var СчКБК_Асс_ПБС3_:S=if(СчКБК_Асс_ПБС3=1:"По деб. счета"|СчКБК_Асс_ПБС3=-1:"По кре. счета"|True:"");
var СчКБК_ЛБО_ПБС1_:S=if(СчКБК_ЛБО_ПБС1=1:"По деб. счета"|СчКБК_ЛБО_ПБС1=-1:"По кре. счета"|True:"");
var СчКБК_ЛБО_ПБС2_:S=if(СчКБК_ЛБО_ПБС2=1:"По деб. счета"|СчКБК_ЛБО_ПБС2=-1:"По кре. счета"|True:"");
var СчКБК_ЛБО_ПБС3_:S=if(СчКБК_ЛБО_ПБС3=1:"По деб. счета"|СчКБК_ЛБО_ПБС3=-1:"По кре. счета"|True:"");

var МаскаСч:S="("+if(fАсс,"*."+if(СчКБК_Асс_ПБС1=1,СчДеб_Асс_ПБС1,СчКре_Асс_ПБС1)+".*"
                 +if(fАсс and fПлан,"|*."+if(СчКБК_Асс_ПБС2=1,СчДеб_Асс_ПБС2,СчКре_Асс_ПБС2)+".*","")
                 +if(fАсс and fПлан,"|*."+if(СчКБК_Асс_ПБС3=1,СчДеб_Асс_ПБС3,СчКре_Асс_ПБС3)+".*","")
                 +if(fЛБО,"|",""),"")
                 +if(fЛБО,"*."+if(СчКБК_ЛБО_ПБС1=1,СчДеб_ЛБО_ПБС1,СчКре_ЛБО_ПБС1)+".*","")
                 +if(fЛБО and fПлан,"|*."+if(СчКБК_ЛБО_ПБС2=1,СчДеб_ЛБО_ПБС2,СчКре_ЛБО_ПБС2)+".*","")
                 +if(fЛБО and fПлан,"|*."+if(СчКБК_ЛБО_ПБС3=1,СчДеб_ЛБО_ПБС3,СчКре_ЛБО_ПБС3)+".*","")
                 +")";

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

var Заголовок:S=if(fАсс and fЛБО:"Ассигнования и лимиты"|fАсс:"Ассигнования"|fЛБО:"Лимиты бюджетных обязательств")+" получателя бюджетных средств на "+Str(YYYY)+" год";

ПризнПБС: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 Справ[]:S;
var НаимСправ[]:S;
var МаскаСправ:S;
var MaxСправ:I=4;
var ЧислоСправ:I;
var FlagКБК:L;

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

ПризнДоп:S;

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

var Упр:I;

Гр[]:I;

var nГр[]:I;

var KeyОтчет[]:S;
var пп[]:I=$;
var НаимКБК[]:S;
var Призн1[]:S;
var Призн2[]:S;
var Призн3[]:S;
var Призн4[]: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 НаимПризн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 Асс_ПБС1[]:N;
var Асс_ПБС2[]:N;
var Асс_ПБС3[]:N;
var ЛБО_ПБС1[]:N;
var ЛБО_ПБС2[]:N;
var ЛБО_ПБС3[]:N;
var Итог[]:I;

var ВсегоАсс_ПБС1:N;
var ВсегоАсс_ПБС2:N;
var ВсегоАсс_ПБС3:N;
var ВсегоЛБО_ПБС1:N;
var ВсегоЛБО_ПБС2:N;
var ВсегоЛБО_ПБС3:N;

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

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 RepRow:I;

var Rep_Section[]:S;
var Rep_RowsCount[]:I;
var Rep_ColsCount:I=12;
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_CellReadOnly[]:L;
var Rep_CellBgColor[]:I;
var Rep_CellFieldType[]:I;
var Rep_CellContents[]:S;
var Rep_CellHint[]:S;
var Rep_CellLookup[]:L;
var Rep_CellEventOnLookup[]:S;
var Rep_CellIndex[]:I;
--
--Процедуры и функции -------------
Proc Настр(Flag:L);
 btnРасчет.Visible=not Flag;
 btnНастр.Visible=not Flag;
 cbАсс.Visible=not Flag;
 cbЛБО.Visible=not Flag;
 cbНС.Visible=not Flag;
 cbПлан.Visible=not Flag;
 btnЗагрКБК.Visible=not Flag;
 btnСохрКБК.Visible=not Flag;
 btnОчистКБК.Visible=not Flag;
 УпрНастр=Flag;
end;

Func ПроверитьНастр:L;
 if СчДеб_Асс_ПБС1="" or СчКре_Асс_ПБС1="" or СчКБК_Асс_ПБС1=0: Message("Заполните условие отбора ассигнований ПБС",mtError); Template.Field=if(СчДеб_Асс_ПБС1="":"СчДеб_Асс_ПБС1"|СчКре_Асс_ПБС1="":"СчКре_Асс_ПБС1"|СчКБК_Асс_ПБС1=0:"СчКБК_Асс_ПБС1_"); ^False; fi;
 if СчДеб_Асс_ПБС2="" or СчКре_Асс_ПБС2="" or СчКБК_Асс_ПБС2=0: Message("Заполните условие отбора ассигнований ПБС",mtError); Template.Field=if(СчДеб_Асс_ПБС2="":"СчДеб_Асс_ПБС2"|СчКре_Асс_ПБС2="":"СчКре_Асс_ПБС2"|СчКБК_Асс_ПБС2=0:"СчКБК_Асс_ПБС2_"); ^False; fi;
 if СчДеб_Асс_ПБС3="" or СчКре_Асс_ПБС3="" or СчКБК_Асс_ПБС3=0: Message("Заполните условие отбора ассигнований ПБС",mtError); Template.Field=if(СчДеб_Асс_ПБС3="":"СчДеб_Асс_ПБС3"|СчКре_Асс_ПБС3="":"СчКре_Асс_ПБС3"|СчКБК_Асс_ПБС3=0:"СчКБК_Асс_ПБС3_"); ^False; fi;
 if СчДеб_ЛБО_ПБС1="" or СчКре_ЛБО_ПБС1="" or СчКБК_ЛБО_ПБС1=0: Message("Заполните условие отбора ЛБО ПБС",mtError);          Template.Field=if(СчДеб_ЛБО_ПБС1="":"СчДеб_ЛБО_ПБС1"|СчКре_ЛБО_ПБС1="":"СчКре_ЛБО_ПБС1"|СчКБК_ЛБО_ПБС1=0:"СчКБК_ЛБО_ПБС1_"); ^False; fi;
 if СчДеб_ЛБО_ПБС2="" or СчКре_ЛБО_ПБС2="" or СчКБК_ЛБО_ПБС2=0: Message("Заполните условие отбора ЛБО ПБС",mtError);          Template.Field=if(СчДеб_ЛБО_ПБС2="":"СчДеб_ЛБО_ПБС2"|СчКре_ЛБО_ПБС2="":"СчКре_ЛБО_ПБС2"|СчКБК_ЛБО_ПБС2=0:"СчКБК_ЛБО_ПБС2_"); ^False; fi;
 if СчДеб_ЛБО_ПБС3="" or СчКре_ЛБО_ПБС3="" or СчКБК_ЛБО_ПБС3=0: Message("Заполните условие отбора ЛБО ПБС",mtError);          Template.Field=if(СчДеб_ЛБО_ПБС3="":"СчДеб_ЛБО_ПБС3"|СчКре_ЛБО_ПБС3="":"СчКре_ЛБО_ПБС3"|СчКБК_ЛБО_ПБС3=0:"СчКБК_ЛБО_ПБС3_"); ^False; fi;
 ^True;
end;

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(KeyОтчет);
 ClearVariable(НаимКБК);
 ClearVariable(Призн1);
 ClearVariable(Призн2);
 ClearVariable(Призн3);
 ClearVariable(Призн4);
 ClearVariable(Асс_ПБС1);
 ClearVariable(Асс_ПБС2);
 ClearVariable(Асс_ПБС3);
 ClearVariable(ЛБО_ПБС1);
 ClearVariable(ЛБО_ПБС2);
 ClearVariable(ЛБО_ПБС3);
 ClearVariable(ВсегоАсс_ПБС1);
 ClearVariable(ВсегоАсс_ПБС2);
 ClearVariable(ВсегоАсс_ПБС3);
 ClearVariable(ВсегоЛБО_ПБС1);
 ClearVariable(ВсегоЛБО_ПБС2);
 ClearVariable(ВсегоЛБО_ПБС3);
 ClearVariable(Итог);
end;

Proc ИнициализироватьОтчет;
var s,r,c,rr,cc,ss,index:i;
var Obj: Object;
var Flag:L;
var StoreУпр:I;
 for s=1..3 do
  if FindObject("Табл"+Str(s),Obj):
     Obj.Visible=True;
     for c=2..5 do
      Obj.Column(c,ColVisible,True);
     od;
  fi;
 od;
 Табл1.Row(1,RowVisible,True);
 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_CellReadOnly);
 ClearVariable(Rep_CellBgColor);
 ClearVariable(Rep_CellFieldType);
 ClearVariable(Rep_CellContents);
 ClearVariable(Rep_CellHint);
 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=Rep_ColsCount;
   if rr>255: Message("Превышено максимально число (255) строк в секции",mtError); Exit; fi;
   if cc>255: Message("Превышено максимально число (255) колонок в секции",mtError); Exit; fi;
   Rep_RowsCount[s]=rr;
   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_CellReadOnly,Index,AsLogical(Obj.Cell(r,c,CellReadOnly,"")));
     InsertInArray(Rep_CellBgColor,Index,AsInteger(Obj.Cell(r,c,CellBgColor,"")));
     InsertInArray(Rep_CellContents,Index,AsString(Obj.Cell(r,c,CellContents,"")));
     InsertInArray(Rep_CellHint,Index,AsString(Obj.Cell(r,c,CellHint,"")));
     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 ОбновитьОтчет;
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=Rep_ColsCount;
   for r=1..rr do
    Index=GetRowIndex(s,r);
    Rep_RowVisible[Index]=AsLogical(Obj.Row(r,RowVisible,""));
    if r=1:
       for c=1..cc do
        Index=GetColIndex(s,c);
        Rep_ColVisible[index]=AsLogical(Obj.Column(c,ColVisible,""));
       od;
    fi;
   od;
  od;
 Finally
  Упр=StoreУпр;
 end;
end;

Proc ПодготовитьОтчет;
var Obj: Object;
var nТабл,nn,n,rr:I;
 ClearVariable(Buf);
 if FindObject("Rep",Obj):
    Rep.ColsCount=Rep_ColsCount;
    for n=1..Упр do
     AddInArray(Buf,True,False,Призн1[n]);
    od;
    nТабл=LengthOfArray(Buf)+1; -- +1 это итоговая таблица
    rr=(nТабл*(Rep_RowsCount[1]+Rep_RowsCount[3]+1)-Rep_RowsCount[1]-Rep_RowsCount[3])+(Упр*Rep_RowsCount[2])-nТабл; -- +1 это строка между таблицами -Rep_RowsCount[1],Rep_RowsCount[3] это первая и последняя шапка, уже есть, -nТабл минус итоговые строки (у которых итог не 0)
    Rep.RowsCount=rr;
 fi;
end;

Func ВставитьСтроку (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;
 for r=1..rr do
  Index=GetRowIndex(s,r);
  Rep.Row(RepRow+r,RowVisible,Rep_RowVisible[Index]);
  if Sec="Табл1": Rep.Row(RepRow+r,RowHeight,Rep_RowHeight[Index]); fi;
  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,CellReadOnly,Rep_CellReadOnly[Index]);
   Rep.Cell(RepRow+r,c,CellBgColor,Rep_CellBgColor[Index]);
   Rep.Cell(RepRow+r,c,CellHint,Rep_CellHint[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 ВставитьШапку (Iter:I);
var s,r,c,rr,cc,index:i;
 if not Iter=1:
    RepRow=RepRow+1; 
    Rep.Row(RepRow,RowNewPage,fНС);
 fi;
 s=ВставитьСтроку("Табл1");
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount;
 for r=1..rr do
  for c=1..cc do
   Index=GetCellIndex(s,r,c);
   if Rep_CellContents[Index]="НаимПризн1":
      if Iter=0:
         Rep.Cell(RepRow+r,c,CellContents,"ИТОГО ПО ОТЧЕТУ");
         Rep.Cell(RepRow+r,c,CellFieldType,1);
        else
         Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]+"["+Str(Iter)+"]");
      fi;
     else
      Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]);
   fi;
  od;
 od;
 Rep.CellLinks(2 , RepRow+1,11,RepRow+1); --#НаимПризн1
 Rep.CellLinks(1 , RepRow+2, 1,RepRow+3); --#№ п.п.
 Rep.CellLinks(2 , RepRow+2, 2,RepRow+3); --#НаимСправ1
 Rep.CellLinks(3 , RepRow+2, 3,RepRow+3); --#НаимСправ2
 Rep.CellLinks(4 , RepRow+2, 4,RepRow+3); --#НаимСправ3
 Rep.CellLinks(5 , RepRow+2, 5,RepRow+3); --#НаимСправ4
 Rep.CellLinks(6 , RepRow+2, 8,RepRow+2); --Ассигнования
 Rep.CellLinks(9 , RepRow+2,11,RepRow+2); --Лимиты бюджетных обязательств (ЛБО)
 RepRow=RepRow+rr;
end;

Proc ВставитьСтрокуОтчета (Iter:I; пп_:I);
var s,r,c,rr,cc,index:i;
 s=ВставитьСтроку("Табл2");
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount;
 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 ВставитьИтог(Iter:I);
var s,r,c,rr,cc,index:i;
var Val:s;
 s=ВставитьСтроку("Табл3");
 rr=Rep_RowsCount[s];
 cc=Rep_ColsCount;
 for r=1..rr do
  for c=1..cc do
   Index=GetCellIndex(s,r,c);
   Val=Str(Iter);
   if Rep_CellContents[Index]="ВсегоАсс_ПБС1": Val="Асс_ПБС1["+Val+"]";
     |Rep_CellContents[Index]="ВсегоАсс_ПБС2": Val="Асс_ПБС2["+Val+"]";
     |Rep_CellContents[Index]="ВсегоАсс_ПБС3": Val="Асс_ПБС3["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО_ПБС1": Val="ЛБО_ПБС1["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО_ПБС2": Val="ЛБО_ПБС2["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО_ПБС3": Val="ЛБО_ПБС3["+Val+"]";
     |True: Rep.Cell(RepRow+r,c,CellContents,Rep_CellContents[Index]); Val="";
   fi;
   if not Val="": Rep.Cell(RepRow+r,c,CellContents,Val); fi;
  od;
 od;
 --Rep.CellLinks(2,RepRow+rr,5,RepRow+rr); --всего
 RepRow=RepRow+rr;
end;

Proc Оформление(Full:L);
var v,n,c,w,z:i;
var Справ_:S;
var Flag:L;
 if AsString(Template.Name)="Rep":
    Template.Name="Табл1";
    Template.Frame=1;
    Template.Field="1";
 fi;
 Rep.Visible=False;
 Rep.RowsCount=1;
 Rep.ColsCount=1;
 Табл1.Visible=True;
 Табл2.Visible=True; 
 Табл3.Visible=True;
 if not Full: Exit; fi;
 ClearVariable(Справ);
 ClearVariable(НаимСправ);
 Справ_=Trim(СправТабл+" "+СправСтр);
 ЧислоСправ=WordsCount(Справ_," ");
 if fКБК_ГЛ and fКБК_РП and fКБК_ЦС and fКБК_ВР and fКБК_КОСГУ: w=370; else w=320; fi;
 for v=1..MaxСправ do
  Справ[v]=ExtractWord(v,Справ_," ");
  НаимСправ[v]=Name_A(SubStr(Справ[v],1,Length(Справ[v])-1));
  if НаимСправ[v]="" or НаимСправ[v]=" ": НаимСправ[v]=Справ[v]; fi;
  УСС[v]=0;
  z=SearchInArray(hСправ,Справ[v],True);
  if not z=-1:
     УСС[v]=hУСС[z];
  fi;
  Табл1.Row(1,RowVisible,not СправТабл="");
  Табл1.Column(1+v,ColVisible,not Справ[v]="" and (not v=1 or v=1 and СправТабл=""));
  Табл2.Column(1+v,ColVisible,not Справ[v]="" and (not v=1 or v=1 and СправТабл=""));
  Табл3.Column(1+v,ColVisible,not Справ[v]="" and (not v=1 or v=1 and СправТабл=""));

  Табл1.Column(1+v,ColWidth,if(Справ[v]="КБК.",w,300));
  Табл2.Column(1+v,ColWidth,if(Справ[v]="КБК.",w,300));
  Табл3.Column(1+v,ColWidth,if(Справ[v]="КБК.",w,300));
 od;
 --
 Табл1.Column(6,ColVisible,fАсс); Табл1.Column(7,ColVisible,fАсс and fПлан);  Табл1.Column(8,ColVisible,fАсс and fПлан);
 Табл2.Column(6,ColVisible,fАсс); Табл2.Column(7,ColVisible,fАсс and fПлан);  Табл2.Column(8,ColVisible,fАсс and fПлан);
 Табл3.Column(6,ColVisible,fАсс); Табл3.Column(7,ColVisible,fАсс and fПлан);  Табл3.Column(8,ColVisible,fАсс and fПлан);

 Табл1.Column(9,ColVisible,fЛБО); Табл1.Column(10,ColVisible,fЛБО and fПлан); Табл1.Column(11,ColVisible,fЛБО and fПлан);
 Табл2.Column(9,ColVisible,fЛБО); Табл2.Column(10,ColVisible,fЛБО and fПлан); Табл2.Column(11,ColVisible,fЛБО and fПлан);
 Табл3.Column(9,ColVisible,fЛБО); Табл3.Column(10,ColVisible,fЛБО and fПлан); Табл3.Column(11,ColVisible,fЛБО and fПлан);
 --
 n=1;
 for c=2..Rep_ColsCount do
  if AsLogical(Табл1.Column(c,ColVisible,"")):
     n=n+1;
     nГр[c]=n;
  fi;
 od;
 ОбновитьОтчет;
end;

Proc РазбитьТаблицы;
var Iter,p,v,w:i;
var hПризн1:S;
 Табл1.Visible=False; Табл2.Visible=False; Табл3.Visible=False; Rep.Visible=False;
 ShowProgress(Упр,"Построение отчета....");
 Try
  ПодготовитьОтчет;
  hПризн1=Призн1[1];
  p=0;
  for Iter=1..Упр do
   ProgressPos(Iter);
   p=p+1;
   if not hПризн1=Призн1[Iter]:
      if not Iter=1: ВставитьШапку(Iter); fi;
      p=1;
      hПризн1=Призн1[Iter];
   fi;
   if Итог[Iter]=1: ВставитьИтог(Iter); else ВставитьСтрокуОтчета(Iter,p); fi;
  od;
 Finally
  CloseProgress;
 end;
 --Итого по отчету
 ВставитьШапку(0);
 if fКБК_ГЛ and fКБК_РП and fКБК_ЦС and fКБК_ВР and fКБК_КОСГУ: w=370; else w=320; fi;
 Табл1.Visible=True; Табл3.Visible=True; Rep.Visible=True;
 for v=1..MaxСправ do
  Табл1.Column(1+v,ColWidth,if(Справ[v]="КБК.",w,300));
  Табл2.Column(1+v,ColWidth,if(Справ[v]="КБК.",w,300));
  Табл3.Column(1+v,ColWidth,if(Справ[v]="КБК.",w,300));
  if Справ[v]="КБК.":
     Rep.Column(1+v,ColWidth,w);
  fi;
 od;
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 ЧитатьЖурнал(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:S;
var Key,tВал1,tВал2,tСчДеб,tСчКре,tКмнт,tКБК,vКБК,v1,v2,v3,v4,v1_,v2_,v3_,v4_,БК,ГЛ,РП,ЦС,ВР,КОСГУ:S;
var tДата:D;
var tСум1,tСум2:N;
 if ExistFile(FName)=False: Exit; fi;
 ClearVariable(KeyСвертка);
 ClearVariable(BufКБК);
 ClearVariable(BufНаимКБК);
 ClearVariable(BufПризн1);
 ClearVariable(BufПризн2);
 ClearVariable(BufПризн3);
 ClearVariable(BufПризн4);
 ClearVariable(tCache);
 Спр1=SubStr(Справ[1],1,Pos(".",Справ[1]));
 Спр2=SubStr(Справ[2],1,Pos(".",Справ[2]));
 Спр3=SubStr(Справ[3],1,Pos(".",Справ[3]));
 Спр4=SubStr(Справ[4],1,Pos(".",Справ[4]));
 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;
 ShowProgress(nn*2,"Расчет..."+Str(k)+" из "+Str(kk));
 if FlagКБК: 
    if fКБК_КОСГУ: Раб.КБК.CrdToCache("КОСГУ2006",False);
      |fКБК_ВР: Раб.КБК.CrdToCache("КВР2006",False);
      |fКБК_ЦС: Раб.КБК.CrdToCache("КЦСР2006",False);
      |fКБК_РП: Раб.КБК.CrdToCache("ФКР2006",False);
      |fКБК_ГЛ: Раб.КБК.CrdToCache("ППП2006",False);
    fi;
 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);
   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);
      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КБК=ГЛ+"."+РП+"."+ЦС+"."+ВР+"."+КОСГУ;
      fi;
      v1=""; v2=""; v3=""; v4=""; v1_=""; v2_=""; v3_=""; v4_="";
      if Справ[1]="КБК.": v1=vКБК; v1_=tКБК; fi;
      if Справ[2]="КБК.": v2=vКБК; v2_=tКБК; fi;
      if Справ[3]="КБК.": v3=vКБК; v3_=tКБК; fi;
      if Справ[4]="КБК.": v4=vКБК; v4_=tКБК; fi;
      for s=1..ss do
--       if Pos(Спр1,Buf[s])=1: v1=Buf[s]; v1_=v1; fi;
--       if Pos(Спр2,Buf[s])=1: v2=Buf[s]; v2_=v2; fi;
--       if Pos(Спр3,Buf[s])=1: v3=Buf[s]; v3_=v3; fi;
--       if Pos(Спр4,Buf[s])=1: v4=Buf[s]; v4_=v4; 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;
      od;
      --почемуто в свертку попадают проводки, по аналитике которых быть не должно
      if not ((not Справ[1]="" and v1="") or (not Справ[2]="" and v2="") or (not Справ[3]="" and v3="") or (not Справ[4]="" and v4="")):
         Key=v1_+" "+v2_+" "+v3_+" "+v4_;
         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);
            if FlagКБК:
               if fКБК_КОСГУ: x=SearchInArray(Раб.КБК.cacheКОСГУ_Код,КОСГУ,True);
                              if x=-1: x=0; fi;
                              InsertInArray(BufНаимКБК,z,Раб.КБК.cacheКОСГУ_Наим[x]);
                 |fКБК_ВР:    x=SearchInArray(Раб.КБК.cacheКВР_Код,ВР,True);
                              if x=-1: x=0; fi;
                              InsertInArray(BufНаимКБК,z,Раб.КБК.cacheКВР_Наим[x]);
                 |fКБК_ЦС:    x=SearchInArray(Раб.КБК.cacheКЦСР_Код,ЦС,True);
                              if x=-1:
                                 x=SearchInArray(Раб.КБК.cacheКЦСР_Код,"000"+SubStr(ЦС,4,4),True);
                              fi;
                              if x=-1: x=0; fi;
                              InsertInArray(BufНаимКБК,z,Раб.КБК.cacheКЦСР_Наим[x]);
                 |fКБК_РП:    x=SearchInArray(Раб.КБК.cacheФКР_Код,РП,True);
                              if x=-1: x=0; fi;
                              InsertInArray(BufНаимКБК,z,Раб.КБК.cacheФКР_Наим[x]);
                 |fКБК_ГЛ:    x=SearchInArray(Раб.КБК.cacheППП_Код,ГЛ,True);
                              if x=-1: x=0; fi;
                              InsertInArray(BufНаимКБК,z,Раб.КБК.cacheППП_Наим[x]);
               fi;
            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=""):
   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 СписокСправ;
 Раб.Бюджет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;

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 РасчетСтроки (vKey:S; vПризн1:S; vПризн2:S; vПризн3:S; vПризн4:S; vНаимКБК:S; vАсс_ПБС1:N; vАсс_ПБС2:N; vАсс_ПБС3:N; vЛБО_ПБС1:N; vЛБО_ПБС2:N; vЛБО_ПБС3:N; vИтог:I);
var Iter:I;
 Iter=SearchInArray(KeyОтчет,vKey,True);
 if Iter=-1:
    Iter=InsertInArraySort(KeyОтчет,vKey);
    InsertFrame(Упр,Iter);
    Призн1[Iter]=vПризн1;
    Призн2[Iter]=vПризн2;
    Призн3[Iter]=vПризн3;
    Призн4[Iter]=vПризн4;
    НаимКБК[Iter]=vНаимКБК;
    Асс_ПБС1[Iter]=vАсс_ПБС1;
    Асс_ПБС2[Iter]=vАсс_ПБС2;
    Асс_ПБС3[Iter]=vАсс_ПБС3;
    ЛБО_ПБС1[Iter]=vЛБО_ПБС1;
    ЛБО_ПБС2[Iter]=vЛБО_ПБС2;
    ЛБО_ПБС3[Iter]=vЛБО_ПБС3;
    Итог[Iter]=vИтог;
   else
    Асс_ПБС1[Iter]=Асс_ПБС1[Iter]+vАсс_ПБС1;
    Асс_ПБС2[Iter]=Асс_ПБС2[Iter]+vАсс_ПБС2;
    Асс_ПБС3[Iter]=Асс_ПБС3[Iter]+vАсс_ПБС3;
    ЛБО_ПБС1[Iter]=ЛБО_ПБС1[Iter]+vЛБО_ПБС1;
    ЛБО_ПБС2[Iter]=ЛБО_ПБС2[Iter]+vЛБО_ПБС2;
    ЛБО_ПБС3[Iter]=ЛБО_ПБС3[Iter]+vЛБО_ПБС3;
 fi;
 if vИтог=0:
    ВсегоАсс_ПБС1=ВсегоАсс_ПБС1+vАсс_ПБС1;
    ВсегоАсс_ПБС2=ВсегоАсс_ПБС2+vАсс_ПБС2;
    ВсегоАсс_ПБС3=ВсегоАсс_ПБС3+vАсс_ПБС3;
    ВсегоЛБО_ПБС1=ВсегоЛБО_ПБС1+vЛБО_ПБС1;
    ВсегоЛБО_ПБС2=ВсегоЛБО_ПБС2+vЛБО_ПБС2;
    ВсегоЛБО_ПБС3=ВсегоЛБО_ПБС3+vЛБО_ПБС3;
 fi;
end;

Proc Расчет (k:i; kk:i; vБК:S; vКОСГУ:S);
var n,nn,v,Iter:i;
var FName,УслСчОбщ,УслАнОбщ,УслСжатияАн,ПризнДоп_,Key_,tmp:S;
var УслСчАсс_ПБС1,УслСчАсс_ПБС2,УслСчАсс_ПБС3,УслСчЛБО_ПБС1,УслСчЛБО_ПБС2,УслСчЛБО_ПБС3:S;
var УслАнАсс_ПБС1,УслАнАсс_ПБС2,УслАнАсс_ПБС3,УслАнЛБО_ПБС1,УслАнЛБО_ПБС2,УслАнЛБО_ПБС3:S;
var Асс_ПБС1_,Асс_ПБС2_,Асс_ПБС3_,ЛБО_ПБС1_,ЛБО_ПБС2_,ЛБО_ПБС3_: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));
  if fАсс:
     УслСчАсс_ПБС1=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_Асс_ПБС1,СчДеб_Асс_ПБС1,СчКре_Асс_ПБС1);
     if fПлан:
        УслСчАсс_ПБС2=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_Асс_ПБС2,СчДеб_Асс_ПБС2,СчКре_Асс_ПБС2);
        УслСчАсс_ПБС3=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_Асс_ПБС3,СчДеб_Асс_ПБС3,СчКре_Асс_ПБС3);
     fi;
  fi;
  if fЛБО:
     УслСчЛБО_ПБС1=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_ЛБО_ПБС1,СчДеб_ЛБО_ПБС1,СчКре_ЛБО_ПБС1);
     if fПлан:
        УслСчЛБО_ПБС2=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_ЛБО_ПБС2,СчДеб_ЛБО_ПБС2,СчКре_ЛБО_ПБС2);
        УслСчЛБО_ПБС3=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_ЛБО_ПБС3,СчДеб_ЛБО_ПБС3,СчКре_ЛБО_ПБС3);
     fi;
  fi;
  for n=1..nn do
   ProgressPos(nn+n);
   if fАсс:
      УслАнАсс_ПБС1=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_Асс_ПБС1,"&");
      if fПлан:
         УслАнАсс_ПБС2=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_Асс_ПБС2,"&");
         УслАнАсс_ПБС3=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_Асс_ПБС3,"&");
      fi;
   fi;
   if fЛБО:
      УслАнЛБО_ПБС1=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ЛБО_ПБС1,"&");
      if fПлан:
         УслАнЛБО_ПБС2=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ЛБО_ПБС2,"&");
         УслАнЛБО_ПБС3=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ЛБО_ПБС3,"&");
      fi;
   fi;
   Key_="";
   for v=1..ЧислоСправ do
    tmp=GetVariableS("BufПризн"+Str(v)+"["+Str(n)+"]");
    if Справ[v]="КБК.":
       БК=SubStr(BufКБК[n],1,20);
       КОСГУ=SubStr(BufКБК[n],22,3);
       if fАсс:
          УслСчАсс_ПБС1=ПолучитьУслСч(БК,КОСГУ,СчКБК_Асс_ПБС1,СчДеб_Асс_ПБС1,СчКре_Асс_ПБС1);
          if fПлан:
             УслСчАсс_ПБС2=ПолучитьУслСч(БК,КОСГУ,СчКБК_Асс_ПБС2,СчДеб_Асс_ПБС2,СчКре_Асс_ПБС2);
             УслСчАсс_ПБС3=ПолучитьУслСч(БК,КОСГУ,СчКБК_Асс_ПБС3,СчДеб_Асс_ПБС3,СчКре_Асс_ПБС3);
          fi;
       fi;
       if fЛБО:
          УслСчЛБО_ПБС1=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЛБО_ПБС1,СчДеб_ЛБО_ПБС1,СчКре_ЛБО_ПБС1);
          if fПлан:
             УслСчЛБО_ПБС2=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЛБО_ПБС2,СчДеб_ЛБО_ПБС2,СчКре_ЛБО_ПБС2);
             УслСчЛБО_ПБС3=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЛБО_ПБС3,СчДеб_ЛБО_ПБС3,СчКре_ЛБО_ПБС3);
          fi;
       fi;
       Key_=Key_+" "+tmp;
      else
       Key_=Key_+" "+tmp;
       if УСС[v]>0:
          if WordsCount(tmp,".")>УСС[v]:
             tmp=tmp+"!";
          fi;
       fi;
       if fАсс:
          УслАнАсс_ПБС1=Раб.Бюджет2005.Объединить(УслАнАсс_ПБС1,tmp,"&");
          if fПлан:
             УслАнАсс_ПБС2=Раб.Бюджет2005.Объединить(УслАнАсс_ПБС2,tmp,"&");
             УслАнАсс_ПБС3=Раб.Бюджет2005.Объединить(УслАнАсс_ПБС3,tmp,"&");
          fi;
       fi;
       if fЛБО:
          УслАнЛБО_ПБС1=Раб.Бюджет2005.Объединить(УслАнЛБО_ПБС1,tmp,"&");
          if fПлан:
             УслАнЛБО_ПБС2=Раб.Бюджет2005.Объединить(УслАнЛБО_ПБС2,tmp,"&");
             УслАнЛБО_ПБС3=Раб.Бюджет2005.Объединить(УслАнЛБО_ПБС3,tmp,"&");
          fi;
       fi;
    fi;
   od;
   Key_=SubStr(Key_,2,255);
   if fАсс:
      Асс_ПБС1_=MyTurn(УслСчАсс_ПБС1,УслАнАсс_ПБС1,ДН,ДК);
      if fПлан:
         Асс_ПБС2_=MyTurn(УслСчАсс_ПБС2,УслАнАсс_ПБС2,ДН,ДК);
         Асс_ПБС3_=MyTurn(УслСчАсс_ПБС3,УслАнАсс_ПБС3,ДН,ДК);
      fi;
   fi;
   if fЛБО:
      ЛБО_ПБС1_=MyTurn(УслСчЛБО_ПБС1,УслАнЛБО_ПБС1,ДН,ДК);
      if fПлан:
         ЛБО_ПБС2_=MyTurn(УслСчЛБО_ПБС2,УслАнЛБО_ПБС2,ДН,ДК);
         ЛБО_ПБС3_=MyTurn(УслСчЛБО_ПБС3,УслАнЛБО_ПБС3,ДН,ДК);
      fi;
   fi;
   if not Асс_ПБС1_=0 or not Асс_ПБС2_=0 or not Асс_ПБС3_=0 or not ЛБО_ПБС1_=0 or not ЛБО_ПБС2_=0 or not ЛБО_ПБС3_=0:
      РасчетСтроки(Key_,BufПризн1[n],BufПризн2[n],BufПризн3[n],BufПризн4[n],BufНаимКБК[n],Асс_ПБС1_,Асс_ПБС2_,Асс_ПБС3_,ЛБО_ПБС1_,ЛБО_ПБС2_,ЛБО_ПБС3_,0);
      if not СправТабл="":
        tmp=BufПризн1[n]+" я";
        РасчетСтроки(tmp,BufПризн1[n],"","","",BufНаимКБК[n],Асс_ПБС1_,Асс_ПБС2_,Асс_ПБС3_,ЛБО_ПБС1_,ЛБО_ПБС2_,ЛБО_ПБС3_,1);
      fi;
   fi;
  od;
 Finally
  CloseProgress;
 end;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if EnqOkCancel("Восстановить настройку по умолчанию ?",mtWarning)=cmOk:
    СчДеб_Асс_ПБС1=defСчДеб_Асс_ПБС1;
    СчКре_Асс_ПБС1=defСчКре_Асс_ПБС1;
    СчДеб_Асс_ПБС2=defСчДеб_Асс_ПБС2;
    СчКре_Асс_ПБС2=defСчКре_Асс_ПБС2;
    СчДеб_Асс_ПБС3=defСчДеб_Асс_ПБС3;
    СчКре_Асс_ПБС3=defСчКре_Асс_ПБС3;
    СчДеб_ЛБО_ПБС1=defСчДеб_ЛБО_ПБС1;
    СчКре_ЛБО_ПБС1=defСчКре_ЛБО_ПБС1;
    СчДеб_ЛБО_ПБС2=defСчДеб_ЛБО_ПБС2;
    СчКре_ЛБО_ПБС2=defСчКре_ЛБО_ПБС2;
    СчДеб_ЛБО_ПБС3=defСчДеб_ЛБО_ПБС3;
    СчКре_ЛБО_ПБС3=defСчКре_ЛБО_ПБС3;
    Ан_Асс_ПБС1=defАн_Асс_ПБС1;
    Ан_Асс_ПБС2=defАн_Асс_ПБС2;
    Ан_Асс_ПБС3=defАн_Асс_ПБС3;
    Ан_ЛБО_ПБС1=defАн_ЛБО_ПБС1;
    Ан_ЛБО_ПБС2=defАн_ЛБО_ПБС2;
    Ан_ЛБО_ПБС3=defАн_ЛБО_ПБС3;
    СчКБК_Асс_ПБС1=defСчКБК_Асс_ПБС1;
    СчКБК_Асс_ПБС2=defСчКБК_Асс_ПБС2;
    СчКБК_Асс_ПБС3=defСчКБК_Асс_ПБС3;
    СчКБК_ЛБО_ПБС1=defСчКБК_ЛБО_ПБС1;
    СчКБК_ЛБО_ПБС2=defСчКБК_ЛБО_ПБС2;
    СчКБК_ЛБО_ПБС3=defСчКБК_ЛБО_ПБС3;
    Message("Настройка по умолчанию восстановлены");
 fi;
 Return False;
end;


Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 if not ПроверитьНастр: ^False; fi;
 Настр(False);
 Очистить;
 СправТабл="";
 СправСтр="";
 Оформление(True);
 Return False;
end;

Func Сч_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.КБК.Список("","ФКР","СЧ6 ВД+? ИГ");
 if Match(tmp,"?."): tmp=tmp+"???.??";
   |Match(tmp,"?.???."): tmp=tmp+"??";
 fi;
 if tmp="": ^False; fi;
 PutVariableS(FieldName,tmp);
end;

Proc Сч_OnExit(FieldName: String; Iter: Integer);
var Val:s;
 Val=GetVariableS(FieldName);
 if Val="": PutVariableS(FieldName,"?.???.??"); fi;
end;


Func СчКБК_onEnter(FieldName: String; Iter: Integer): logical;
var n:I;
 ClearVariable(Buf);
 Buf[1]="По дебету счета";
 Buf[2]="По кредиту счета";
 n=Alternate("Условие отбора КБК счетов",Buf,-1,1,12);
 if n=1: n=1;
   |n=2: n=-1;
   |True: ^False;
 fi;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableI(FieldName,n);
 Return False;
end;

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

Func Ан_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var FieldName:S;
 FieldName=AsString(Template.Field);
 Cur=AnaElection("*");
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(FieldName),Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: 
    Template.HideEditor(False);
    PutVariableS(FieldName,Cur);
 fi;
 Очистить;
 Оформление(False);
 ^Cur;
end;

Proc ДК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
 Оформление(False);
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;
 Очистить;
 Оформление(False);
 ^Cur;
end;

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

Proc ПризнПБС_OnExit(FieldName: String; Iter: Integer);
 ПризнПБС="";
 Очистить;
 Оформление(False);
end;

Func МаскаКБК_OnEnter(FieldName: String; Iter: Integer): logical;
 МаскаКБК[Iter]=Раб.КБК.ВыбратьМаскуКБК("ФКР",МаскаСч,МаскаКБК[Iter],True);
 Очистить;
 Оформление(False);
 ^False;
end;

Proc МаскаКБК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
 Оформление(False);
end;

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

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

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

Func СправСтр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Справ_:S;
 Справ_=Trim(СправТабл+" "+СправСтр);
 if WordsCount(Справ_," ")>=MaxСправ: Message("Число справочников не может больше "+Str(MaxСправ)+"",mtError); ^False; fi;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 if WordInString(tmp,Справ_," "): Message("Повторный ввод сравочника",mtError); ^False; fi;
 if СправСтр="": СправСтр=tmp; else СправСтр=СправСтр+" "+tmp; fi;
 Очистить;
 Оформление(True);
 ^False;
end;

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

Func СправТабл_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Справ_:S;
 Справ_=Trim(СправТабл+" "+СправСтр);
 if WordsCount(Справ_," ")>=MaxСправ: Message("Число справочников не может быть больше "+Str(MaxСправ)+"",mtError); ^False; fi;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 if WordInString(tmp,Справ_," "): Message("Повторный ввод сравочника",mtError); ^False; fi;
 СправТабл=tmp;
 Очистить;
 Оформление(True);
 ^False;
end;

Proc СправТабл_OnExit(FieldName: String; Iter: Integer);
 СправТабл="";
 Очистить; 
 Оформление(True);
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;
 Очистить; 
 Оформление(False);
end;

Proc ПризнДоп_OnExit(FieldName: String; Iter: Integer);
 Очистить;
 Оформление(False);
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;
 Очистить;
 Оформление(False);
 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;
 Очистить;
 Оформление(False);
 Return False;
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="nГр[2]" or Field="nГр[1]": Гр[2]=n-1;
   |Field="nГр[3]": Гр[3]=n-1;
   |Field="nГр[4]": Гр[4]=n-1;
   |Field="nГр[5]": Гр[5]=n-1;
 fi;
 ^Cur;
end;

Func onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var СчУсл,АнУсл,УслКБК,СчДеб,СчКре,Ан,tmp,БК,КОСГУ,ПризнДоп_:S;
var p1,p2,v,Iter,СчКБК:i;
var FieldName:S;
 Template.HideEditor(False);
 FieldName=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 p1=Pos("[",FieldName);
 p2=Pos("]",FieldName);
 if not p1=0 and not p2=0: Iter=Int(SubStr(FieldName,p1+1,p2-p1-1)); fi;
 if Match(FieldName,"Асс_ПБС1*"): СчДеб=СчДеб_Асс_ПБС1; СчКре=СчКре_Асс_ПБС1; СчКБК=СчКБК_Асс_ПБС1; Ан=Ан_Асс_ПБС1;
   |Match(FieldName,"Асс_ПБС2*"): СчДеб=СчДеб_Асс_ПБС2; СчКре=СчКре_Асс_ПБС2; СчКБК=СчКБК_Асс_ПБС2; Ан=Ан_Асс_ПБС2;
   |Match(FieldName,"Асс_ПБС3*"): СчДеб=СчДеб_Асс_ПБС3; СчКре=СчКре_Асс_ПБС3; СчКБК=СчКБК_Асс_ПБС3; Ан=Ан_Асс_ПБС3;
   |Match(FieldName,"ЛБО_ПБС1*"): СчДеб=СчДеб_ЛБО_ПБС1; СчКре=СчКре_ЛБО_ПБС1; СчКБК=СчКБК_ЛБО_ПБС1; Ан=Ан_ЛБО_ПБС1;
   |Match(FieldName,"ЛБО_ПБС2*"): СчДеб=СчДеб_ЛБО_ПБС2; СчКре=СчКре_ЛБО_ПБС2; СчКБК=СчКБК_ЛБО_ПБС2; Ан=Ан_ЛБО_ПБС2;
   |Match(FieldName,"ЛБО_ПБС3*"): СчДеб=СчДеб_ЛБО_ПБС3; СчКре=СчКре_ЛБО_ПБС3; СчКБК=СчКБК_ЛБО_ПБС3; Ан=Ан_ЛБО_ПБС3;
   |True: Message("Нет данных для расшифроки",mtError); ^Cur;
 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); ^Cur; fi;
 Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,СчУсл,АнУсл);
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
var n:i;
var БК_,КОСГУ_,Справ_,Ан_ЛБО1_,Ан_ЛБО2_,Ан_ЛБО3_,Ан_Асс1_,Ан_Асс2_,Ан_Асс3_,ПризнДоп_:S;
 if not ПроверитьНастр: Exit; fi;
 if not fАсс and not fЛБО: fЛБО=True; fi;
 Ан_ЛБО1_=Ан_ЛБО_ПБС1;
 Ан_ЛБО2_=Ан_ЛБО_ПБС2;
 Ан_ЛБО3_=Ан_ЛБО_ПБС3;
 Ан_Асс1_=Ан_Асс_ПБС1;
 Ан_Асс2_=Ан_Асс_ПБС2;
 Ан_Асс3_=Ан_Асс_ПБС3;
 ПризнДоп_=ПризнДоп;
 Try
  Очистить;
  Оформление(True);
  if ДК=1.1.100: Message("Введите дату расчета",mtError); Template.Field="ДК"; Exit; fi;
  Справ_=Trim(СправТабл+" "+СправСтр);
  ЧислоСправ=WordsCount(Справ_," ");
  if ЧислоСправ=0: 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;
  if not СправТабл="" and Упр>0: RepRow=0; РазбитьТаблицы; fi;
 Finally
  Ан_ЛБО_ПБС1=Ан_ЛБО1_;
  Ан_ЛБО_ПБС2=Ан_ЛБО2_;
  Ан_ЛБО_ПБС3=Ан_ЛБО3_;
  Ан_Асс_ПБС1=Ан_Асс1_;
  Ан_Асс_ПБС2=Ан_Асс2_;
  Ан_Асс_ПБС3=Ан_Асс3_;
  ПризнДоп=ПризнДоп_;
 end;
 Message("Расчет завершен",mtInformation);
end;

Proc btnНастр_OnClick(Sender: String);
 Настр(True);
end;

Proc cb_OnChange(Sender: String);
 Message("Необходимо выполнить расчет",mtWarning);
 Очистить;
 Оформление(True);
end;

Proc cbНС_OnChange(Sender: String);
var r,rr:I;
var Obj: Object;
 if FindObject("Rep",Obj):
    rr=AsInteger(Obj.RowsCount);
    for r=1..rr do
     if Pos("nГр",AsString(Obj.Cell(r,1,CellContents,"")))=1:
        Obj.Row(r-1,RowNewPage,fНС);
     fi;
    od;
 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(МаскаКБК);
 Очистить;
 Оформление(False);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Настр(not ПроверитьНастр);
 if not fАсс and not fЛБО: fЛБО=True; fi;
 СписокСправ;
 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);
 ИнициализироватьОтчет;
 Оформление(True);
 if not СправТабл="" and Упр>0: RepRow=0; РазбитьТаблицы; fi;
end;
--Обработчики событий шаблона -----
--

Proc cbРезерв_OnChange(Sender: String);
 Message("Для вступления изменений в силу, необходимо выполнить расчет");
 Очистить;
 Оформление(False);
end;

Конец