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

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

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

fНС:L;
fПБО:L;
fЗКР:L;

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

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

var defСчДеб_ЛБО:S="1.501.15";
var defСчКре_ЛБО:S="1.501.13";
var defСчДеб_ПБО:S="1.501.13";
var defСчКре_ПБО:S="1.502.11";
var defСчДеб_ЗКР:S="1.ЗАБ.00";
var defСчКре_ЗКР:S="1.ЗАБ.КР";
var defСчДеб_КР :S="?.???.??";
var defСчКре_КР :S="1.304.05";

var defАн_ЛБО:S="";
var defАн_ПБО:S="";
var defАн_ЗКР:S="";
var defАн_КР :S="";

var defСчКБК_ЛБО:I=-1;
var defСчКБК_ПБО:I=-1;
var defСчКБК_ЗКР:I=-1;
var defСчКБК_КР :I=-1;

СчДеб_ЛБО:S=[defСчДеб_ЛБО];
СчКре_ЛБО:S=[defСчКре_ЛБО];
СчДеб_ПБО:S=[defСчДеб_ПБО];
СчКре_ПБО:S=[defСчКре_ПБО];
СчДеб_ЗКР:S=[defСчДеб_ЗКР];
СчКре_ЗКР:S=[defСчКре_ЗКР];
СчДеб_КР :S=[defСчДеб_КР];
СчКре_КР :S=[defСчКре_КР];

Ан_ЛБО:S=[defАн_ЛБО];
Ан_ПБО:S=[defАн_ПБО];
Ан_ЗКР:S=[defАн_ЗКР];
Ан_КР :S=[defАн_КР];

СчКБК_ЛБО:I=[defСчКБК_ЛБО];
СчКБК_ПБО:I=[defСчКБК_ПБО];
СчКБК_ЗКР:I=[defСчКБК_ЗКР];
СчКБК_КР :I=[defСчКБК_КР];

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

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

var Заголовок:S="Лимиты бюджетных обязательств и кассовые расходы за месяц";

ММ:I=[Mon(ToDay)];
var ММ_:S=Месяц(ММ);
ГГГГ:I=[Year(ToDay)];
var ДН:D=Dat(1,ММ,ГГГГ); -- начало периода
var ДК:D=if(ММ<12,Dat(1,ММ+1,ГГГГ),Dat(1,1,ГГГГ+1)); -- конец периода
var ДНГ:D=Dat(1,1,ГГГГ);
var Д2:D=ДН+(8-DayOfWeek(ДН));
var Д3:D=Д2+7;
var Д4:D=Д3+7;
var Д5:D=if(Д4+7>ДК-1,1.1.100,Д4+7);
var Д6:D=if(Д5+7>ДК-1 or Д5=1.1.100,1.1.100,Д5+7);

УпрКБК: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;

ПризнДоп:S;

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

var Мес_:S=SubStr(Месяц(Mon(ДН)),1,3);
var Загл1:s="Остатки на "+DateToString(ДН);
var Загл2:s="Поступило ЛБО за "+DateToString(ДН)+" - "+DateToString(ДК-1);
var Загл3:s="Принято БО за "+DateToString(ДН)+" - "+DateToString(ДК-1);
var Загл4:s="Кассовый расход за "+DateToString(ДН)+" - "+DateToString(ДК-1)+if(fЗКР," (с учетом заявок)","");
var Загл4_1:s=Str(Day(ДН))+" - "+Str(Day(Д2-1))+" "+Мес_;
var Загл4_2:s=Str(Day(Д2))+" - "+Str(Day(Д3-1))+" "+Мес_;
var Загл4_3:s=Str(Day(Д3))+" - "+Str(Day(Д4-1))+" "+Мес_;
var Загл4_4:s=Str(Day(Д4))+" - "+if(Д5=1.1.100,Str(Day(ДК-1)),Str(Day(Д5-1)))+" "+Мес_;
var Загл4_5:s=if(Д5=1.1.100,"",Str(Day(Д5))+" - "+if(Д6=1.1.100,Str(Day(ДК-1)),Str(Day(Д6-1)))+" "+Мес_);
var Загл4_6:s=if(Д6=1.1.100,"",Str(Day(Д6))+" - "+Str(Day(ДК-1))+" "+Мес_);
var Загл5:s="Остатки на "+DateToString(ДК);

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 ЛБО0[]:N;
var ПБО0[]:N;
var КР0[]:N;
var КР_ПБО0[]:N;
var ЛБО_ОстН[]:N=ЛБО0[$]-if(ПБО0[$]-КР_ПБО0[$]<0 or not fПБО,КР0[$],ПБО0[$]+(КР0[$]-КР_ПБО0[$]));
var ЛБО_ОстН_Пр[]:N=Round(ЛБО_ОстН[$]*100/ЛБО0[$],1);
var ПБО_ОстН[]:N=ПБО0[$]-КР_ПБО0[$];
var ПБО_ОстН_Пр[]:N=Round(ПБО_ОстН[$]*100/ПБО0[$],1);
var ЛБО[]:N;
var ПБО[]:N;
var КР_ПБО[]:N;
var КР1[]:N;
var КР2[]:N;
var КР3[]:N;
var КР4[]:N;
var КР5[]:N;
var КР6[]:N;
var КР[]:N=КР1[$]+КР2[$]+КР3[$]+КР4[$]+КР5[$]+КР6[$];
var КР_Пр[]:N=Round(КР[$]*100/(ЛБО0[$]+ЛБО[$]),1);
var ЛБО_ОстК[]:N=ЛБО_ОстН[$]+ЛБО[$]-if(Round(ПБО_ОстН[$]+ПБО[$]-КР_ПБО[$],2)<0 or not fПБО,КР[$],ПБО[$]+(КР[$]-КР_ПБО[$]));
var ЛБО_ОстК_Пр[]:N=Round(ЛБО_ОстК[$]*100/(ЛБО0[$]+ЛБО[$]),1);
var ПБО_ОстК[]:N=ПБО_ОстН[$]+ПБО[$]-КР_ПБО[$];
var ПБО_ОстК_Пр[]:N=Round(ПБО_ОстК[$]*100/(ПБО0[$]+ПБО[$]),1);
var Итог[]:I;

var ВсегоЛБО0:N;
var ВсегоПБО0:N;
var ВсегоКР_ПБО0:N;
var ВсегоКР0:N;
var ВсегоЛБО_ОстН:N=ВсегоЛБО0-if(ВсегоПБО0-ВсегоКР_ПБО0<0 or not fПБО,ВсегоКР0,ВсегоПБО0+(ВсегоКР0-ВсегоКР_ПБО0));
var ВсегоЛБО_ОстН_Пр:N=Round(ВсегоЛБО_ОстН*100/ВсегоЛБО0,1);
var ВсегоПБО_ОстН:N=ВсегоПБО0-ВсегоКР_ПБО0;
var ВсегоПБО_ОстН_Пр:N=Round(ВсегоПБО_ОстН*100/ВсегоПБО0,1);
var ВсегоЛБО:N;
var ВсегоПБО:N;
var ВсегоКР_ПБО:N;
var ВсегоКР1:N;
var ВсегоКР2:N;
var ВсегоКР3:N;
var ВсегоКР4:N;
var ВсегоКР5:N;
var ВсегоКР6:N;
var ВсегоКР :N=ВсегоКР1+ВсегоКР2+ВсегоКР3+ВсегоКР4+ВсегоКР5+ВсегоКР6;
var ВсегоКР_Пр:N=Round(ВсегоКР*100/(ВсегоЛБО0+ВсегоЛБО),1);
var ВсегоЛБО_ОстК:N=ВсегоЛБО_ОстН+ВсегоЛБО-if(ВсегоПБО_ОстН+ВсегоПБО-ВсегоКР_ПБО<0 or not fПБО,ВсегоКР,ВсегоПБО+(ВсегоКР-ВсегоКР_ПБО));
var ВсегоЛБО_ОстК_Пр:N=Round(ВсегоЛБО_ОстК*100/(ВсегоЛБО0+ВсегоЛБО),1);
var ВсегоПБО_ОстК:N=ВсегоПБО_ОстН+ВсегоПБО-ВсегоКР_ПБО;
var ВсегоПБО_ОстК_Пр:N=Round(ВсегоПБО_ОстК*100/(ВсегоПБО0+ВсегоПБО),1);

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=24;
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;
 btnЗагрКБК.Visible=not Flag;
 btnСохрКБК.Visible=not Flag;
 btnОчистКБК.Visible=not Flag;
 УпрНастр=Flag;
end;

Func ПроверитьНастр:L;
 if СчДеб_ЛБО="" or СчКре_ЛБО="" or СчКБК_ЛБО=0: Message("Заполните условие отбора поступивших ЛБО",mtError); Template.Field=if(СчДеб_ЛБО="":"СчДеб_ЛБО"|СчКре_ЛБО="":"СчКре_ЛБО"|СчКБК_ЛБО=0:"СчКБК_ЛБО_"); ^False; fi;
 if СчДеб_ПБО="" or СчКре_ПБО="" or СчКБК_ПБО=0: Message("Заполните условие отбора ПБО",mtError); Template.Field=if(СчДеб_ПБО="":"СчДеб_ПБО"|СчКре_ПБО="":"СчКре_ПБО"|СчКБК_ПБО=0:"СчКБК_ПБО_"); ^False; fi;
 if СчДеб_ЗКР="" or СчКре_ЗКР="" or СчКБК_ЗКР=0: Message("Заполните условие отбора заявок на кассовый расход",mtError); Template.Field=if(СчДеб_ЗКР="":"СчДеб_ЗКР"|СчКре_ЗКР="":"СчКре_ЗКР"|СчКБК_ЗКР=0:"СчКБК_ЗКР_"); ^False; fi;
 if СчДеб_КР=""  or СчКре_КР=""  or СчКБК_КР=0 : Message("Заполните условие отбора кассовых расходов",mtError); Template.Field=if(СчДеб_КР="":"СчДеб_КР"|СчКре_КР="":"СчКре_КР"|СчКБК_КР=0:"СчКБК_КР_"); ^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(ЛБО0);
 ClearVariable(ПБО0);
 ClearVariable(КР0);
 ClearVariable(КР_ПБО0);
 ClearVariable(ЛБО);
 ClearVariable(ПБО);
 ClearVariable(КР_ПБО);
 ClearVariable(КР1);
 ClearVariable(КР2);
 ClearVariable(КР3);
 ClearVariable(КР4);
 ClearVariable(КР5);
 ClearVariable(КР6);
 ClearVariable(ВсегоЛБО0);
 ClearVariable(ВсегоПБО0);
 ClearVariable(ВсегоКР0);
 ClearVariable(ВсегоКР_ПБО0);
 ClearVariable(ВсегоЛБО);
 ClearVariable(ВсегоПБО);
 ClearVariable(ВсегоКР);
 ClearVariable(ВсегоКР_ПБО);
 ClearVariable(ВсегоКР1);
 ClearVariable(ВсегоКР2);
 ClearVariable(ВсегоКР3);
 ClearVariable(ВсегоКР4);
 ClearVariable(ВсегоКР5);
 ClearVariable(ВсегоКР6);
 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,24,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,9 ,RepRow+2); --#Загл1
 Rep.CellLinks(10, RepRow+2,10,RepRow+3); --#Загл2
 Rep.CellLinks(11, RepRow+2,11,RepRow+3); --#Загл3
 Rep.CellLinks(12, RepRow+2,20,RepRow+2); --#Загл4
 Rep.CellLinks(21, RepRow+2,24,RepRow+2); --#Загл5
 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]="ВсегоЛБО_ОстН"	: Val="ЛБО_ОстН["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО_ОстН_Пр": Val="ЛБО_ОстН_Пр["+Val+"]";
     |Rep_CellContents[Index]="ВсегоПБО_ОстН"	: Val="ПБО_ОстН["+Val+"]";
     |Rep_CellContents[Index]="ВсегоПБО_ОстН_Пр": Val="ПБО_ОстН_Пр["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО"	: Val="ЛБО["+Val+"]";
     |Rep_CellContents[Index]="ВсегоПБО"	: Val="ПБО["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР_ПБО"	: Val="КР_ПБО["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР" 	: Val="КР["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР_Пр"	: Val="КР_Пр["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР1"	: Val="КР1["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР2"	: Val="КР2["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР3"	: Val="КР3["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР4"	: Val="КР4["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР5"	: Val="КР5["+Val+"]";
     |Rep_CellContents[Index]="ВсегоКР6"	: Val="КР6["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО_ОстК"	: Val="ЛБО_ОстК["+Val+"]";
     |Rep_CellContents[Index]="ВсегоЛБО_ОстК_Пр": Val="ЛБО_ОстК_Пр["+Val+"]";
     |Rep_CellContents[Index]="ВсегоПБО_ОстК"	: Val="ПБО_ОстК["+Val+"]";
     |Rep_CellContents[Index]="ВсегоПБО_ОстК_Пр": Val="ПБО_ОстК_Пр["+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:i;
var Справ_:S;
 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;
  Табл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(8,ColVisible,fПБО); Табл1.Column(9,ColVisible,fПБО); Табл1.Column(11,ColVisible,fПБО); Табл1.Column(12,ColVisible,fПБО); Табл1.Column(23,ColVisible,fПБО); Табл1.Column(24,ColVisible,fПБО);
 Табл2.Column(8,ColVisible,fПБО); Табл2.Column(9,ColVisible,fПБО); Табл2.Column(11,ColVisible,fПБО); Табл2.Column(12,ColVisible,fПБО); Табл2.Column(23,ColVisible,fПБО); Табл2.Column(24,ColVisible,fПБО);
 Табл3.Column(8,ColVisible,fПБО); Табл3.Column(9,ColVisible,fПБО); Табл3.Column(11,ColVisible,fПБО); Табл3.Column(12,ColVisible,fПБО); Табл3.Column(23,ColVisible,fПБО); Табл3.Column(24,ColVisible,fПБО);
 if fПБО:
    Табл1.Cell(3,22,CellBorder,"1,1,1,1"); Rep_CellBorder[GetCellIndex(1,3,22)]="1,1,1,1";
    Табл1.Cell(4,22,CellBorder,"1,2,1,2"); Rep_CellBorder[GetCellIndex(1,4,22)]="1,2,1,2";
    Табл2.Cell(1,22,CellBorder,"1,1,1,1"); Rep_CellBorder[GetCellIndex(2,1,22)]="1,1,1,1";
    Табл3.Cell(1,22,CellBorder,"1,2,1,2"); Rep_CellBorder[GetCellIndex(3,1,22)]="1,2,1,2";
   else
    Табл1.Cell(3,22,CellBorder,"1,1,2,1"); Rep_CellBorder[GetCellIndex(1,3,22)]="1,1,2,1";
    Табл1.Cell(4,22,CellBorder,"1,2,2,2"); Rep_CellBorder[GetCellIndex(1,4,22)]="1,2,2,2";
    Табл2.Cell(1,22,CellBorder,"1,1,2,1"); Rep_CellBorder[GetCellIndex(2,1,22)]="1,1,2,1";
    Табл3.Cell(1,22,CellBorder,"1,2,2,2"); Rep_CellBorder[GetCellIndex(3,1,22)]="1,2,2,2";
 fi;
 --
 for n=1..6 do
  Табл1.Column(14+n,ColVisible,True);
  Табл2.Column(14+n,ColVisible,True);
  Табл3.Column(14+n,ColVisible,True);
 od;
 --
 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 i,z1,z2:i;
var Flag:l;
  if Упр>0:
     z1=MaxInArray(КР1); z2=MinInArray(КР1);  Buf[1]=if(z1=z2 and Round(КР1[z1],2)=0,"F","T");
     z1=MaxInArray(КР2); z2=MinInArray(КР2);  Buf[2]=if(z1=z2 and Round(КР2[z1],2)=0,"F","T");
     z1=MaxInArray(КР3); z2=MinInArray(КР3);  Buf[3]=if(z1=z2 and Round(КР3[z1],2)=0,"F","T");
     z1=MaxInArray(КР4); z2=MinInArray(КР4);  Buf[4]=if(z1=z2 and Round(КР4[z1],2)=0,"F","T");
     z1=MaxInArray(КР5); z2=MinInArray(КР5);  Buf[5]=if(z1=z2 and Round(КР5[z1],2)=0,"F","T");
     z1=MaxInArray(КР6); z2=MinInArray(КР6);  Buf[6]=if(z1=z2 and Round(КР6[z1],2)=0,"F","T");
    else
     ClearVariable(Buf);
  fi;
  Flag=AsLogical(Rep.Visible);
  for i=1..6 do
   Табл1.Column(14+i,ColVisible,Buf[i]="T");
   Табл2.Column(14+i,ColVisible,Buf[i]="T");
   Табл3.Column(14+i,ColVisible,Buf[i]="T");
   if Flag: Rep.Column(14+i,ColVisible,Buf[i]="T"); 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;
      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):S;
 if aКодСч="?.???.??": ^"*"; else  ^"*."+aКодСч+".*"; fi;
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ЛБО0:N; vПБО0:N; vКР0:N; vКР_ПБО0:N; vЛБО:N; vПБО:N; vКР_ПБО:N; vКР1:N; vКР2:N; vКР3:N; vКР4:N; vКР5:N; vКР6: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НаимКБК;
    ЛБО0[Iter]=vЛБО0;
    ПБО0[Iter]=vПБО0;
    КР0[Iter]=vКР0;
    КР_ПБО0[Iter]=vКР_ПБО0;
    ЛБО[Iter]=vЛБО;
    ПБО[Iter]=vПБО;
    КР_ПБО[Iter]=vКР_ПБО;
    КР1[Iter]=vКР1;
    КР2[Iter]=vКР2;
    КР3[Iter]=vКР3;
    КР4[Iter]=vКР4;
    КР5[Iter]=vКР5;
    КР6[Iter]=vКР6;
    Итог[Iter]=vИтог;
   else
    ЛБО0[Iter]=ЛБО0[Iter]+vЛБО0;
    ПБО0[Iter]=ПБО0[Iter]+vПБО0;
    КР0[Iter]=КР0[Iter]+vКР0;
    КР_ПБО0[Iter]=КР_ПБО0[Iter]+vКР_ПБО0;
    ЛБО[Iter]=ЛБО[Iter]+vЛБО;
    ПБО[Iter]=ПБО[Iter]+vПБО;
    КР_ПБО[Iter]=КР_ПБО[Iter]+vКР_ПБО;
    КР1[Iter]=КР1[Iter]+vКР1;
    КР2[Iter]=КР2[Iter]+vКР2;
    КР3[Iter]=КР3[Iter]+vКР3;
    КР4[Iter]=КР4[Iter]+vКР4;
    КР5[Iter]=КР5[Iter]+vКР5;
    КР6[Iter]=КР6[Iter]+vКР6;
 fi;
 if vИтог=0:
    ВсегоЛБО0=ВсегоЛБО0+vЛБО0;
    ВсегоПБО0=ВсегоПБО0+vПБО0;
    ВсегоКР0=ВсегоКР0+vКР0;
    ВсегоКР_ПБО0=ВсегоКР_ПБО0+vКР_ПБО0;
    ВсегоЛБО=ВсегоЛБО+vЛБО;
    ВсегоПБО=ВсегоПБО+vПБО;
    ВсегоКР_ПБО=ВсегоКР_ПБО+vКР_ПБО;
    ВсегоКР1=ВсегоКР1+vКР1;
    ВсегоКР2=ВсегоКР2+vКР2;
    ВсегоКР3=ВсегоКР3+vКР3;
    ВсегоКР4=ВсегоКР4+vКР4;
    ВсегоКР5=ВсегоКР5+vКР5;
    ВсегоКР6=ВсегоКР6+vКР6;
 fi;
end;

Proc Расчет (k:i; kk:i; vБК:S; vКОСГУ:S);
var n,nn,v,Iter:i;
var FName,УслСчОбщ,УслАнОбщ,УслСжатияАн,ПризнДоп_,Key_,tmp:S;
var УслСчЛБО,УслСчПБО,УслСчЗКР,УслСчЗКР_ПБО,УслСчКР,УслСчКР_ПБО:S;
var УслАнЛБО,УслАнПБО,УслАнЗКР,УслАнЗКР_ПБО,УслАнКР,УслАнКР_ПБО:S;
var ЛБО0_,ПБО0_,КР0_,КР_ПБО0_,ЛБО_,ПБО_,КР_ПБО_,КР1_,КР2_,КР3_,КР4_,КР5_,КР6_:N;
var БК,КОСГУ:S;
var ЛБО_ОстН_,ПБО_ОстН_:N;
 ПБО0_=0; КР_ПБО0_=0; ПБО_=0; КР_ПБО_=0; КР5_=0; КР6_=0;
 УслСчОбщ=МаскаСч+"&("+vБК+"."+Раб.Бюджет2005.МаскаСч6+"."+vКОСГУ+")";
 ПризнДоп_=if(ПризнДоп="","","("+ПризнДоп+")");
 УслАнОбщ=ПризнДоп_;
 УслСжатияАн=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 if not МаскаСправ="": 
    УслАнОбщ=Раб.Бюджет2005.Объединить(УслАнОбщ,"("+МаскаСправ+")","&"); 
    УслСжатияАн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(УслСжатияАн,"|",МаскаСправ,"&");
 fi;
 FName=PlanVar("CACHE")+"\"+GetGUID;
 nn=TujReport(FName,ДНГ,ДК,УслСчОбщ,УслАнОбщ,УслСжатияАн,"","",TujRepTurnDebCre+TujRepNoNullBal+TujRepZabalance+TujRepCombinedAna,False);
 Try
  ЧитатьЖурнал(k,kk,FName,nn,vБК,vКОСГУ);
  nn=LengthOfArray(KeyСвертка);
  ShowProgress(nn*2,"Расчет..."+Str(k)+" из "+Str(kk));
  УслСчЛБО=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_ЛБО,СчДеб_ЛБО,СчКре_ЛБО);
  if fЗКР:
     УслСчЗКР=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_ЗКР,СчДеб_ЗКР,СчКре_ЗКР);
     if fПБО: УслСчЗКР_ПБО=УслСчЗКР; fi;
  fi;
  УслСчКР=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_КР,СчДеб_КР,СчКре_КР);
  if fПБО:
     УслСчПБО=ПолучитьУслСч(vБК,vКОСГУ,СчКБК_ПБО,СчДеб_ПБО,СчКре_ПБО);
     УслСчКР_ПБО=УслСчКР;
  fi;
  for n=1..nn do
   ProgressPos(nn+n);
   УслАнЛБО=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ЛБО,"&");
   if fЗКР:
      УслАнЗКР=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ЗКР,"&");
      if fПБО: УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР,"БО.*","&"); fi;
   fi;
   УслАнКР =Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_КР,"&");
   if fПБО:
      УслАнПБО=Раб.Бюджет2005.Объединить(ПризнДоп_,Ан_ПБО,"&");
      УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР,"БО.*","&");
   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ЗКР:
	  УслСчЗКР=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЗКР,СчДеб_ЗКР,СчКре_ЗКР);
	  if fПБО: УслСчЗКР_ПБО=УслСчЗКР; fi;
       fi;
       УслСчКР =ПолучитьУслСч(БК,КОСГУ,СчКБК_КР,СчДеб_КР,СчКре_КР);
       if fПБО:
	  УслСчПБО=ПолучитьУслСч(БК,КОСГУ,СчКБК_ПБО,СчДеб_ПБО,СчКре_ПБО);
	  УслСчКР_ПБО=УслСчКР;
       fi;
       Key_=Key_+" "+tmp;
      else
       Key_=Key_+" "+tmp;
       УслАнЛБО=Раб.Бюджет2005.Объединить(УслАнЛБО,tmp,"&");
       if fЗКР:
	  УслАнЗКР=Раб.Бюджет2005.Объединить(УслАнЗКР,tmp,"&");
	  if fПБО: УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР_ПБО,tmp,"&"); fi;
       fi;
       УслАнКР =Раб.Бюджет2005.Объединить(УслАнКР,tmp,"&");
       if fПБО:
	  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,tmp,"&");
	  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР_ПБО,tmp,"&");
       fi;
    fi;
   od;
   Key_=SubStr(Key_,2,255);
   ЛБО0_=MyTurn(УслСчЛБО,УслАнЛБО,ДНГ,ДН);
   ЛБО_=MyTurn(УслСчЛБО,УслАнЛБО,ДН,ДК);
   if fПБО:
      ПБО0_=MyTurn(УслСчПБО,УслАнПБО,ДНГ,ДН);
      ПБО_=MyTurn(УслСчПБО,УслАнПБО,ДН,ДК);
      КР_ПБО0_=MyTurn(УслСчКР_ПБО,УслАнКР_ПБО,ДНГ,ДН);
      КР_ПБО_=MyTurn(УслСчКР_ПБО,УслАнКР_ПБО,ДН,ДК);
      if fЗКР:
	 КР_ПБО0_=КР_ПБО0_+MyTurn(УслСчЗКР_ПБО,УслАнЗКР_ПБО,ДНГ,ДН);
      fi;
   fi;
   КР0_=MyTurn(УслСчКР,УслАнКР,ДНГ,ДН);
   КР1_=MyTurn(УслСчКР,УслАнКР,ДН,Д2);
   КР2_=MyTurn(УслСчКР,УслАнКР,Д2,Д3);
   КР3_=MyTurn(УслСчКР,УслАнКР,Д3,Д4);
   КР4_=MyTurn(УслСчКР,УслАнКР,Д4,if(Д5=1.1.100,ДК,Д5));
   if not Д5=1.1.100: КР5_=MyTurn(УслСчКР,УслАнКР,Д5,if(Д6=1.1.100,ДК,Д6)); fi;
   if not Д6=1.1.100: КР6_=MyTurn(УслСчКР,УслАнКР,Д6,ДК); fi;
   if fЗКР:
      КР0_=КР0_+MyTurn(УслСчЗКР,УслАнЗКР,ДНГ,ДН);
      КР_ПБО_=КР_ПБО_+MyTurn(УслСчЗКР,УслАнЗКР,ДН,ДК);
      КР1_=КР1_+MyTurn(УслСчЗКР,УслАнЗКР,ДН,Д2);
      КР2_=КР2_+MyTurn(УслСчЗКР,УслАнЗКР,Д2,Д3);
      КР3_=КР3_+MyTurn(УслСчЗКР,УслАнЗКР,Д3,Д4);
      КР4_=КР4_+MyTurn(УслСчЗКР,УслАнЗКР,Д4,if(Д5=1.1.100,ДК,Д5));
      if not Д5=1.1.100: КР5_=КР5_+MyTurn(УслСчЗКР,УслАнЗКР,Д5,if(Д6=1.1.100,ДК,Д6)); fi;
      if not Д6=1.1.100: КР6_=КР6_+MyTurn(УслСчЗКР,УслАнЗКР,Д6,ДК); fi;
   fi;
   ЛБО_ОстН_=Round(ЛБО0_-(ПБО0_+(КР0_-КР_ПБО0_)),2);
   ПБО_ОстН_=Round(ПБО0_-КР_ПБО0_,2);
   if not ЛБО_ОстН_=0 or not ПБО_ОстН_=0 or not ЛБО_=0 or not ПБО_=0 or not КР1_=0 or not КР2_=0 or not КР3_=0 or not КР4_=0 or not КР5_=0 or not КР6_=0:
      РасчетСтроки(Key_,BufПризн1[n],BufПризн2[n],BufПризн3[n],BufПризн4[n],BufНаимКБК[n],ЛБО0_,ПБО0_,КР0_,КР_ПБО0_,ЛБО_,ПБО_,КР_ПБО_,КР1_,КР2_,КР3_,КР4_,КР5_,КР6_,0);
      if not СправТабл="":
	tmp=BufПризн1[n]+" я";
	РасчетСтроки(tmp,BufПризн1[n],"","","",BufНаимКБК[n],ЛБО0_,ПБО0_,КР0_,КР_ПБО0_,ЛБО_,ПБО_,КР_ПБО_,КР1_,КР2_,КР3_,КР4_,КР5_,КР6_,1);
      fi;
   fi;
  od;
 Finally
  CloseProgress;
 end;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if EnqOkCancel("Восстановить настройку по умолчанию ?",mtWarning)=cmOk:
    СчДеб_ЛБО=defСчДеб_ЛБО;
    СчКре_ЛБО=defСчКре_ЛБО;
    СчДеб_ПБО=defСчДеб_ПБО;
    СчКре_ПБО=defСчКре_ПБО;
    СчДеб_ЗКР=defСчДеб_ЗКР;
    СчКре_ЗКР=defСчКре_ЗКР;
    СчДеб_КР =defСчДеб_КР;
    СчКре_КР =defСчКре_КР;
    --
    Ан_ЛБО=defАн_ЛБО;
    Ан_ПБО=defАн_ПБО;
    Ан_ЗКР=defАн_ЗКР;
    Ан_КР =defАн_КР;
    --
    СчКБК_ЛБО=defСчКБК_ЛБО;
    СчКБК_ПБО=defСчКБК_ПБО;
    СчКБК_ЗКР=defСчКБК_ЗКР;
    СчКБК_КР =defСчКБК_КР;
    --
    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;

Func ММ_OnEnter(FieldName: String; Iter: Integer): logical;
var i:I;
 ClearVariable(Buf);
 for i=1..12 do Buf[i]=Месяц(i); od;
 I=Alternate("Выбор месяца расчета",Buf,30,Mon(ToDay),12);
 if I<>0: ММ=I; fi;
 Очистить;
 Оформление(False);
 ^False;
end;

Func ГГГГ_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
 ClearVariable(Buf);
 for i=1..5 do	Buf[i]=Str(Year(ToDay)+I-4); od;
 i=Alternate("Выбор года расчета",Buf,30,4,12);
 if I<>0: ГГГГ=Int(Buf[i]); fi;
 Очистить;
 Оформление(False);
 ^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;

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 i,iter,p1,p2:i;
var bln,tmp,ПризнДоп_,FieldName:S;
var ДК_:D;
 Template.HideEditor(False);
 bln="ОТЧЕТЫ.СПРАВКИ.ОСТАТКИ_ЛБО2009";
 if not BlankExist(bln): Message("Бланк '"+bln+"' не найден",mtError); ^Cur; fi;
 if isBlankOpen(Bln): Close(Bln); fi;
 if isBlankOpen(Bln): Message("Закройте бланк '"+bln,mtError); ^Cur; fi;
 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)); 
    ДК_=if(Match(FieldName,"*Н[*"),ДН,ДК);
   else
    ДК_=if(Match(FieldName,"*Н"),ДН,ДК);
 fi;
 PutVariableL(bln+".fНС",fНС);
 PutVariableL(bln+".fПБО",fПБО);
 PutVariableL(bln+".fЗКР",fЗКР);
 PutVariableD(bln+".ДК",ДК);
 PutVariableI(bln+".УпрКБК",УпрКБК);
 for i=1..УпрКБК do
  PutVariableS(bln+".МаскаКБК["+Str(i)+"]",МаскаКБК[i]);
 od;
 PutVariableL(bln+".fКБК_ГЛ",fКБК_ГЛ);
 PutVariableL(bln+".fКБК_РП",fКБК_РП);
 PutVariableL(bln+".fКБК_ЦС",fКБК_ЦС);
 PutVariableL(bln+".fКБК_ВР",fКБК_ВР);
 PutVariableL(bln+".fКБК_КОСГУ",fКБК_КОСГУ);
 PutVariableS(bln+".СправТабл","");
 PutVariableS(bln+".СправСтр",Trim(СправТабл+" "+СправСтр));
 tmp="";
 for i=1..ЧислоСправ do
  if Справ[i]="КБК.":
     PutVariableI(bln+".УпрКБК",1);
     PutVariableS(bln+".МаскаКБК[1]",GetVariableS("Призн"+Str(i)+"["+Str(Iter)+"]"));
    else
     tmp=Раб.Бюджет2005.Объединить(tmp,GetVariableS("Призн"+Str(i)+"["+Str(Iter)+"]"),"&");
  fi;
 od;
 if not tmp="":
    if ПризнДоп="": ПризнДоп_=tmp; else ПризнДоп_="("+ПризнДоп+")&"+tmp; fi;
   else
    ПризнДоп_=ПризнДоп;
 fi;
 PutVariableS(bln+".ПризнДоп",ПризнДоп_);
 PutVariableI(bln+".ЕдИзм",ЕдИзм);
 PutVariableL(bln+".notRecoveryRep",True);
 OpenBlank(Bln,False);
 ExecuteProc(bln+".btnРасчет_OnClick","ОТЧЕТЫ.СПРАВКИ.ОСТАТКИ_ЛБО_НЕДЕЛЯ");
 Return  Cur;
end;

Func onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var СчУсл,АнУсл,УслКБК,СчДеб,СчКре,СчДеб2,СчКре2,Ан,Ан2,tmp,БК,КОСГУ:S;
var p1,p2,v,Iter,СчКБК,СчКБК2:i;
var FieldName:S;
var ДН_,ДК_:D;
var isЗКР:L;
 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;
 isЗКР=False;
 if Match(FieldName,"ЛБО*"):   СчДеб=СчДеб_ЛБО;  СчКре=СчКре_ЛБО; СчКБК=СчКБК_ЛБО; Ан=Ан_ЛБО; ДН_=ДН; ДК_=ДК;
   |Match(FieldName,"ПБО*"):   СчДеб=СчДеб_ПБО;  СчКре=СчКре_ПБО; СчКБК=СчКБК_ПБО; Ан=Ан_ПБО; ДН_=ДН; ДК_=ДК;
   |Match(FieldName,"КР_ПБО*"):СчДеб=СчДеб_КР;	 СчКре=СчКре_КР;  СчКБК=СчКБК_КР;  Ан=Раб.Бюджет2005.Объединить(Ан_КР,"БО.*","&"); ДН_=ДН; ДК_=ДК; isЗКР=fЗКР;
   |Match(FieldName,"КР*") :   СчДеб=СчДеб_КР;	 СчКре=СчКре_КР ; СчКБК=СчКБК_КР ; Ан=Ан_КР; ДН_=ДН; ДК_=ДК; isЗКР=fЗКР;
   |True: Message("Нет данных для расшифроки",mtError); ^Cur;
 fi;
 if Match(FieldName,"КР1*"): ДН_=ДН; ДК_=Д2;
   |Match(FieldName,"КР2*"): ДН_=Д2; ДК_=Д3;
   |Match(FieldName,"КР3*"): ДН_=Д3; ДК_=Д4;
   |Match(FieldName,"КР4*"): ДН_=Д4; ДК_=if(Д5=1.1.100,ДК,Д5);
   |Match(FieldName,"КР5*"): ДН_=Д5; ДК_=if(Д6=1.1.100,ДК,Д6);
   |Match(FieldName,"КР6*"): ДН_=Д6; ДК_=ДК;
 fi;
 АнУсл=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;
    if isЗКР:
       if СчКБК_ЗКР= 1: СчУсл="("+СчУсл+")|(*."+СчДеб_ЗКР+".*"+"&("+УслКБК+")/"+МаскаСчета(СчКре_ЗКР)+")";
	 |СчКБК_ЗКР=-1: СчУсл="("+СчУсл+")|("+МаскаСчета(СчДеб_ЗКР)+"/*."+СчКре_ЗКР+".*&("+УслКБК+"))";
       fi;
    fi;
   else
    СчУсл=ПолучитьУслСч("*","*",СчКБК,СчДеб,СчКре);
    if isЗКР:
       СчУсл="("+СчУсл+")|("+ПолучитьУслСч("*","*",СчКБК_ЗКР,СчДеб_ЗКР,СчКре_ЗКР)+")";
    fi;
    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]="":
	   СчУсл=ПолучитьУслСч(БК,КОСГУ,СчКБК,СчДеб,СчКре);
	   if isЗКР:
	      СчУсл="("+СчУсл+")|("+ПолучитьУслСч(БК,КОСГУ,СчКБК_ЗКР,СчДеб_ЗКР,СчКре_ЗКР)+")";
	   fi;
	  else
	   УслКБК="";
	   for v=1..УпрКБК do
	    tmp=СжатиеУслБК(Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК[v],"КР","КБК",False));
	    УслКБК=Раб.Бюджет2005.Объединить(УслКБК,tmp+".*."+Раб.бюджет2005.ВзятьКодКБК(МаскаКБК[v],"КР","КОСГУ",False),"|");
	   od;
	   if СчКБК= 1: СчУсл=БК+"."+СчДеб+"."+КОСГУ+"&("+УслКБК+")/"+МаскаСчета(СчКре);
	     |СчКБК=-1: СчУсл=МаскаСчета(СчДеб)+"/"+БК+"."+СчКре+"."+КОСГУ+"&("+УслКБК+")";
	   fi;
	   if isЗКР:
	      if СчКБК_ЗКР= 1: СчУсл="("+СчУсл+")|("+БК+"."+СчДеб_ЗКР+"."+КОСГУ+"&("+УслКБК+")/"+МаскаСчета(СчКре_ЗКР)+")";
		|СчКБК_ЗКР=-1: СчУсл="("+СчУсл+")|("+МаскаСчета(СчДеб_ЗКР)+"/"+БК+"."+СчКре_ЗКР+"."+КОСГУ+"&("+УслКБК+"))";
	      fi;
	   fi;
	fi; --if Pos("?",tmp)=0 or МаскаКБК[1]="":
       else
	tmp=GetVariableS("Призн"+Str(v)+"["+Str(Iter)+"]");
	АнУсл=Раб.Бюджет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 БК_,КОСГУ_,Справ_:S;
 if not ПроверитьНастр: Exit; fi;
 Очистить; 
 Оформление(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;
 ВидимостьСтолбцов;
 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 СправТабл="" 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: 
    if EnqOkCancel("Восстановить содержимое отчета ?",mtWarning)=cmCancel: Очистить; Оформление(False); Exit; fi;
    RepRow=0; 
    РазбитьТаблицы;
 fi;
 if not Упр=0:
    ВидимостьСтолбцов;
 fi;
end;
--Обработчики событий шаблона -----
--

Конец