-- Шаблон создан мастером бланков
-- 26.05.2005 11:26:39
--
БланкСШаблоном [03.04.2007] "Остатки ЛБО/ПБО";

btnРасчет : Object;
btnНастр  : Object;
btnПечать : Object;
btnЗакрыть: Object;

S1: Section;
S2: Section;
S3: Section;
S4: Section;
S5: Section;
S6: Section;

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

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

var Справ[]:S;
var НаимСправ[]:S;
var wrnПроц:I=[10];
var maxСправ:I=5;

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

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

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

var МаскаСч:S="(*.1.501.13.*|*.1.503.13.*|*.1.ЗАБ.ЗК.*|*.1.502.11.*|*.1.ЗАБ.КР.*|*.1.304.05.*)";

var Заголовок1:S="Остаток ЛБО";
var Заголовок2:S="Остаток ПБО";

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

var Упр:I;

var Key[]:S;
var пп[]:I=$;
var Призн1[]:S;
var Призн2[]:S;
var Призн3[]:S;
var Призн4[]:S;
var Призн5[]:S;
var ЛБО[]:N;
var ПО[]:N;
var ПО_Пр[]:N=Round(ПО[$]*100/ЛБО[$],1);
var ПБО[]:N;
var ПБО_Пр[]:N=Round(ПБО[$]*100/ЛБО[$],1);
var ЗКР_ПБО[]:N;
var ЗКР[]:N;
var КР_ПБО[]:N;
var КР[]:N;
var КР_Пр[]:N=Round((КР[$]+ЗКР[$])*100/ЛБО[$],1);
var ЛБО_Ост[]:N=ЛБО[$]-ПО[$]-if(ПБО[$]-ЗКР_ПБО[$]-КР_ПБО[$]<=0,ЗКР[$]+КР[$],ПБО[$]+(ЗКР[$]-ЗКР_ПБО[$])+(КР[$]-КР_ПБО[$]));
var ЛБО_Ост_Пр[]:N=Round(ЛБО_Ост[$]*100/ЛБО[$],1);
var ПБО_Ост[]:N=ПБО[$]-ЗКР_ПБО[$]-КР_ПБО[$];
var ПБО_Ост_Пр[]:N=Round(ПБО_Ост[$]*100/ПБО[$],1);
var вхЗКР_ПБО[]:N;
var вхЗКР[]:N;
var вхПО []:N;
var вхПБО[]:N;

var ВсегоЛБО:N=SumOfArray(ЛБО,Упр);
var ВсегоПО:N=SumOfArray(ПО,Упр);
var ВсегоПО_Пр:N=Round(ВсегоПО*100/ВсегоЛБО,1);
var ВсегоПБО:N=SumOfArray(ПБО,Упр);
var ВсегоПБО_Пр:N=Round(ВсегоПБО*100/ВсегоЛБО,1);
var ВсегоЗКР_ПБО:N=SumOfArray(ЗКР_ПБО,Упр);
var ВсегоЗКР:N=SumOfArray(ЗКР,Упр);
var ВсегоКР_ПБО:N=SumOfArray(КР_ПБО,Упр);
var ВсегоКР:N=SumOfArray(КР,Упр);
var ВсегоКР_Пр:N=Round((ВсегоКР+ВсегоЗКР)*100/ВсегоЛБО,1);
var ВсегоЛБО_Ост:N=ВсегоЛБО-if(ВсегоПБО-ВсегоЗКР_ПБО-ВсегоКР_ПБО<=0,ВсегоЗКР+ВсегоКР,ВсегоПБО+(ВсегоЗКР-ВсегоЗКР_ПБО)+(ВсегоКР-ВсегоКР_ПБО));
var ВсегоЛБО_Ост_Пр:N=Round(ВсегоЛБО_Ост*100/ВсегоЛБО,1);
var ВсегоПБО_Ост:N=ВсегоПБО-ВсегоЗКР_ПБО-ВсегоКР_ПБО;
var ВсегоПБО_Ост_Пр:N=Round(ВсегоПБО_Ост*100/ВсегоПБО,1);

var Упр2:I;
var УпрЗКР:L=not Упр2=0;

var Key2[]:S;
var БО2:S;
var БО2_:S=БО2+" ("+Name_A(БО2)+")";
var Призн2_1[]:S;
var Призн2_2[]:S;
var Призн2_3[]:S;
var Призн2_4[]:S;
var Призн2_5[]:S;
var ПБО2[]:N;
var ЗКР2[]:N;
var КР2[]:N;
var КР_Пр2[]:N=Round((ЗКР2[$]+КР2[$])*100/ПБО2[$],1);
var ПБО_Ост2[]:N=ПБО2[$]-ЗКР2[$]-КР2[$];
var ПБО_Ост_Пр2[]:N=Round(ПБО_Ост2[$]*100/ПБО2[$],1);
var вхЗКР2[]:N;
var вхПБО2[]:N;

var ВсегоПБО2:N=SumOfArray(ПБО2,Упр2);
var ВсегоЗКР2:N=SumOfArray(ЗКР2,Упр2);
var ВсегоКР2:N=SumOfArray(КР2,Упр2);
var ВсегоКР_Пр2:N=Round((ВсегоЗКР2+ВсегоКР2)*100/ВсегоПБО2,1);
var ВсегоПБО_Ост2:N=ВсегоПБО2-ВсегоЗКР2-ВсегоКР2;
var ВсегоПБО_Ост_Пр2:N=Round(ВсегоПБО_Ост2*100/ВсегоПБО2,1);

var ЕдИзм:I=1;
var Точн:I=2;

var Режим:S;

var SelfCfg:s="ТББ.Раб.Вспом.ОстЛБО.000.cfg";
var SelfBln:s="Раб.Вспом.ОстЛБО";
var НастрGUID:S;

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

var hПризн:S;
--
--Процедуры и функции -------------
Proc Оформление;
var s,c:i;
var Obj: Object;
 for s=1..6 do
  if FindObject("S"+Str(s),Obj):
     for c=3..6 do
      Obj.Column(c,ColVisible,not Справ[c-1]="");
     od;
  fi;
 od;
end;

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

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

Proc Настр(aСохр:L);
var n:i;
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    ClearVariable(Buf);
    for n=1..maxСправ do
     Раб.Настр.Добавить("Справ["+Str(n)+"]","S");
    od;
    Раб.Настр.Добавить("wrnПроц["+Str(n)+"]","I");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
 if Справ[1]="": Справ[1]="КБК."; fi;
end;

Proc ОткрНастр (Flag:L);
var v:i;
 УпрНастр=Flag;
 btnРасчет.Visible=not Flag;
 btnНастр.Visible=not Flag;
 btnПечать.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 if Flag: СписокСправ; fi;
 Настр(not Flag);
 for v=1..maxСправ do
  НаимСправ[v]=Name_A(SubStr(Справ[v],1,Length(Справ[v])-1));
  if НаимСправ[v]=" ": НаимСправ[v]=Справ[v]; fi;
 od;
 Оформление;
end;

Proc ОчиститьВх;
 Настр(False);
 ClearVariable(Раб.Вспом.ОстЛБО.Key);
 ClearVariable(Раб.Вспом.ОстЛБО.Упр);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн1);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн2);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн3);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн4);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн5);
 ClearVariable(Раб.Вспом.ОстЛБО.ЛБО);
 ClearVariable(Раб.Вспом.ОстЛБО.ПО);
 ClearVariable(Раб.Вспом.ОстЛБО.ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.ЗКР_ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.ЗКР);
 ClearVariable(Раб.Вспом.ОстЛБО.КР_ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.КР);
 ClearVariable(Раб.Вспом.ОстЛБО.вхЗКР_ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.вхЗКР);
 ClearVariable(Раб.Вспом.ОстЛБО.вхПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.вхПО);
 ClearVariable(Раб.Вспом.ОстЛБО.Режим);
 ClearVariable(Раб.Вспом.ОстЛБО.hПризн);
end;

Proc ОчиститьВых;
 ClearVariable(Раб.Вспом.ОстЛБО.ЛБО);
 ClearVariable(Раб.Вспом.ОстЛБО.ПО);
 ClearVariable(Раб.Вспом.ОстЛБО.ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.ЗКР_ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.ЗКР);
 ClearVariable(Раб.Вспом.ОстЛБО.КР_ПБО);
 ClearVariable(Раб.Вспом.ОстЛБО.КР);
end;

Proc ОчиститьВх2;
 Настр(False);
 ClearVariable(Раб.Вспом.ОстЛБО.Упр2);
 ClearVariable(Раб.Вспом.ОстЛБО.Key2);
 ClearVariable(Раб.Вспом.ОстЛБО.БО2);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн2_1);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн2_2);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн2_3);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн2_4);
 ClearVariable(Раб.Вспом.ОстЛБО.Призн2_5);
 ClearVariable(Раб.Вспом.ОстЛБО.ПБО2);
 ClearVariable(Раб.Вспом.ОстЛБО.ЗКР2);
 ClearVariable(Раб.Вспом.ОстЛБО.КР2);
 ClearVariable(Раб.Вспом.ОстЛБО.вхЗКР2);
end;

Proc ОчиститьВых2;
 ClearVariable(Раб.Вспом.ОстЛБО.ПБО2);
 ClearVariable(Раб.Вспом.ОстЛБО.ЗКР2);
 ClearVariable(Раб.Вспом.ОстЛБО.КР2);
end;

Proc ПризнВМассив(aПризн:S);
var w,ww,v:i;
 if not hПризн=aПризн:
    ClearVariable(Buf);
    ClearVariable(Buf2);
    ww=WordsCount(aПризн," ");
    for w=1..ww do
     Buf2[w]=ExtractWord(w,aПризн," ");
    od;
    for v=2..maxСправ do
     if not Справ[v]="":
        for w=1..ww do
         if Match(Buf2[w],Справ[v]): Buf[v]=Buf2[w]; Break; fi;
        od;
     fi;
    od;
    hПризн=aПризн;
 fi;
end;

Func Добавить(aДК:D; aКБК:S; aПризн:S):I;
var z:i;
var Key_:S;
 ПризнВМассив(aПризн);
 Раб.Вспом.ОстЛБО.ДК=aДК;
 Key_=aКБК;
 for z=1..maxСправ do
  Key_=Key_+"#"+Buf[z];
 od;
 z=SearchInArray(Раб.Вспом.ОстЛБО.Key,Key_,True);
 if z=-1:
    z=InsertInArraySort(Раб.Вспом.ОстЛБО.Key,Key_);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн1,z,aКБК);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн2,z,Buf[2]);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн3,z,Buf[3]);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн4,z,Buf[4]);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн5,z,Buf[5]);
    Раб.Вспом.ОстЛБО.Упр=Раб.Вспом.ОстЛБО.Упр+1;
 fi;
 ^z;
end;

Func Добавить2(aДК:D; aБО:S; aКБК:S; aПризн:S):I;
var z:i;
var Key_:S;
 ПризнВМассив(aПризн);
 Раб.Вспом.ОстЛБО.ДК=aДК;
 Раб.Вспом.ОстЛБО.БО2=aБО;
 Key_=aКБК;
 for z=1..maxСправ do
  Key_=Key_+"#"+Buf[z];
 od;
 z=SearchInArray(Раб.Вспом.ОстЛБО.Key2,Key_,True);
 if z=-1:
    z=InsertInArraySort(Раб.Вспом.ОстЛБО.Key2,Key_);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн2_1,z,aКБК);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн2_2,z,Buf[2]);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн2_3,z,Buf[3]);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн2_4,z,Buf[4]);
    InsertInArray(Раб.Вспом.ОстЛБО.Призн2_5,z,Buf[5]);
    Раб.Вспом.ОстЛБО.Упр2=Раб.Вспом.ОстЛБО.Упр2+1;
    ^-z;
 fi;
 ^z;
end;

Proc ДобавитьЗКР(aДК:D; aКБК:S; aПризн:S; aЗКР_ПБО:N; aЗКР:N);
var z:i;
 Раб.Вспом.ОстЛБО.Режим="ЗКР";
 z=Добавить(aДК,aКБК,aПризн);
 if z<0:
    z=Abs(z);
    InsertInArray(Раб.Вспом.ОстЛБО.вхЗКР_ПБО,z,aЗКР_ПБО);
    InsertInArray(Раб.Вспом.ОстЛБО.вхЗКР,z,aЗКР);
   else
    Раб.Вспом.ОстЛБО.вхЗКР_ПБО[z]=Раб.Вспом.ОстЛБО.вхЗКР_ПБО[z]+aЗКР_ПБО;
    Раб.Вспом.ОстЛБО.вхЗКР[z]=Раб.Вспом.ОстЛБО.вхЗКР[z]+aЗКР;
 fi;
end;

Proc ДобавитьЗКР2(aДК:D; aБО:S; aКБК:S; aПризн:S; aЗКР_ПБО:N);
var z:i;
 Раб.Вспом.ОстЛБО.Режим="ЗКР";
 z=Добавить2(aДК,aБО,aКБК,aПризн);
 if z<0:
    z=Abs(z);
    InsertInArray(Раб.Вспом.ОстЛБО.вхЗКР2,z,aЗКР_ПБО);
   else
    Раб.Вспом.ОстЛБО.вхЗКР2[z]=Раб.Вспом.ОстЛБО.вхЗКР2[z]+aЗКР_ПБО;
 fi;
end;

Proc ДобавитьПБО(aДК:D; aКБК:S; aПризн:S; aПБО:N);
var z:i;
 Раб.Вспом.ОстЛБО.Режим="ПБО";
 z=Добавить(aДК,aКБК,aПризн);
 if z<0:
    z=Abs(z);
    InsertInArray(Раб.Вспом.ОстЛБО.вхПБО,z,aПБО);
   else
    Раб.Вспом.ОстЛБО.вхПБО[z]=Раб.Вспом.ОстЛБО.вхПБО[z]+aПБО;
 fi;
end;

Proc ДобавитьПБО2(aДК:D; aБО:S; aКБК:S; aПризн:S; aПБО:N);
var z:i;
 Раб.Вспом.ОстЛБО.Режим="ПБО";
 z=Добавить2(aДК,aБО,aКБК,aПризн);
 if z<0:
    z=Abs(z);
    InsertInArray(Раб.Вспом.ОстЛБО.вхПБО2,z,aПБО);
   else
    Раб.Вспом.ОстЛБО.вхПБО2[z]=Раб.Вспом.ОстЛБО.вхПБО2[z]+aПБО;
 fi;
end;

Proc ДобавитьПО(aДК:D; aКБК:S; aПризн:S; aПО:N);
var z:i;
 Раб.Вспом.ОстЛБО.Режим="ПО";
 z=Добавить(aДК,aКБК,aПризн);
 if z<0:
    z=Abs(z);
    InsertInArray(Раб.Вспом.ОстЛБО.вхПО,z,aПО);
   else
    Раб.Вспом.ОстЛБО.вхПО[z]=Раб.Вспом.ОстЛБО.вхПО[z]+aПО;
 fi;
end;

Func МаскаСчета(aКодСч:S):S;
 if Match(aКодСч,"?.???.??"): ^"*."+aКодСч+".*"; else ^"*"; 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;

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;

Proc Расчет;
var Iter:i;
var УслСчЛБО,УслСчАсс,УслСчЗК,УслСчПБО,УслСчПБА,УслСчЗКР,УслСчЗКР_ПБО,УслСчКР,УслСчКР_ПБО:S;
var УслАнЛБО,УслАнАсс,УслАнЗК,УслАнПБО,УслАнПБА,УслАнЗКР,УслАнЗКР_ПБО,УслАнКР,УслАнКР_ПБО:S;
var БК,КОСГУ:S;
 Refresh;
 ОчиститьВых;
 ОчиститьВых2;
 for Iter=1..Упр do
  БК=SubStr(Призн1[Iter],1,20);
  КОСГУ=SubStr(Призн1[Iter],22,3);
  УслСчЛБО=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЛБО,СчДеб_ЛБО,СчКре_ЛБО);
  УслСчАсс=ПолучитьУслСч(БК,КОСГУ,СчКБК_Асс,СчДеб_Асс,СчКре_Асс);
  УслСчЗК =ПолучитьУслСч(БК,КОСГУ,СчКБК_ЗК ,СчДеб_ЗК ,СчКре_ЗК);
  УслСчПБО=ПолучитьУслСч(БК,КОСГУ,СчКБК_ПБО,СчДеб_ПБО,СчКре_ПБО);
  УслСчПБА=ПолучитьУслСч(БК,КОСГУ,СчКБК_ПБА,СчДеб_ПБА,СчКре_ПБА);
  УслСчЗКР=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЗКР,СчДеб_ЗКР,СчКре_ЗКР);
  УслСчЗКР_ПБО=УслСчЗКР;
  УслСчКР=ПолучитьУслСч(БК,КОСГУ,СчКБК_КР,СчДеб_КР,СчКре_КР);
  УслСчКР_ПБО=УслСчКР;
  --
  УслАнЛБО=Раб.Бюджет2005.Объединить(Ан_ЛБО  ,Призн2[Iter],"&");
  УслАнАсс=Раб.Бюджет2005.Объединить(Ан_Асс  ,Призн2[Iter],"&");
  УслАнЛБО=Раб.Бюджет2005.Объединить(УслАнЛБО,Призн3[Iter],"&");
  УслАнЛБО=Раб.Бюджет2005.Объединить(УслАнЛБО,Призн4[Iter],"&");
  УслАнЛБО=Раб.Бюджет2005.Объединить(УслАнЛБО,Призн5[Iter],"&");
  --
  УслАнЗК=Раб.Бюджет2005.Объединить(Ан_ЗК  ,"ПЕРИОД."+Str(YYYY)+"!","&");
  УслАнЗК=Раб.Бюджет2005.Объединить(УслАнЗК,Призн2[Iter],"&");
  УслАнЗК=Раб.Бюджет2005.Объединить(УслАнЗК,Призн3[Iter],"&");
  УслАнЗК=Раб.Бюджет2005.Объединить(УслАнЗК,Призн4[Iter],"&");
  УслАнЗК=Раб.Бюджет2005.Объединить(УслАнЗК,Призн5[Iter],"&");
  --
  УслАнПБО=Раб.Бюджет2005.Объединить(Ан_ПБО  ,Призн2[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,Призн3[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,Призн4[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,Призн5[Iter],"&");
  --
  УслАнПБА=Раб.Бюджет2005.Объединить(Ан_ПБА  ,Призн2[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,Призн3[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,Призн4[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,Призн5[Iter],"&");
  --
  УслАнЗКР=Раб.Бюджет2005.Объединить(Ан_ЗКР  ,Призн2[Iter],"&");
  УслАнЗКР=Раб.Бюджет2005.Объединить(УслАнЗКР,Призн3[Iter],"&");
  УслАнЗКР=Раб.Бюджет2005.Объединить(УслАнЗКР,Призн4[Iter],"&");
  УслАнЗКР=Раб.Бюджет2005.Объединить(УслАнЗКР,Призн5[Iter],"&");
  --
  УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР,"БО.*","&");
  --
  УслАнКР=Раб.Бюджет2005.Объединить(Ан_КР  ,Призн2[Iter],"&");
  УслАнКР=Раб.Бюджет2005.Объединить(УслАнКР,Призн3[Iter],"&");
  УслАнКР=Раб.Бюджет2005.Объединить(УслАнКР,Призн4[Iter],"&");
  УслАнКР=Раб.Бюджет2005.Объединить(УслАнКР,Призн5[Iter],"&");
  --
  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР,"БО.*","&");
  --
  ЛБО[Iter]=MyTurn(УслСчЛБО,УслАнЛБО,ДН,ДК)+MyTurn(УслСчАсс,УслАнАсс,ДН,ДК);
  ПО [Iter]=MyTurn(УслСчЗК ,УслАнЗК ,ДН,ДК);
  ПБО[Iter]=MyTurn(УслСчПБО,УслАнПБО,ДН,ДК)+MyTurn(УслСчПБА,УслАнПБА,ДН,ДК);
  ЗКР_ПБО[Iter]=MyTurn(УслСчЗКР_ПБО,УслАнЗКР_ПБО,ДН,ДК);
  ЗКР[Iter]=MyTurn(УслСчЗКР,УслАнЗКР,ДН,ДК);
  КР_ПБО[Iter]=MyTurn(УслСчКР_ПБО,УслАнКР_ПБО,ДН,ДК);
  КР[Iter]=MyTurn(УслСчКР,УслАнКР,ДН,ДК);
  if Режим="ЗКР":
     ЗКР_ПБО[Iter]=ЗКР_ПБО[Iter]+вхЗКР_ПБО[Iter];
     ЗКР[Iter]=ЗКР[Iter]+вхЗКР[Iter];
    |Режим="ПБО":
     ПБО[Iter]=ПБО[Iter]+вхПБО[Iter];
    |Режим="БО":
     ПО[Iter]=ПО[Iter]+вхПО[Iter];
  fi;
 od;
 --
 for Iter=1..Упр2 do
  БК=SubStr(Призн2_1[Iter],1,20);
  КОСГУ=SubStr(Призн2_1[Iter],22,3);
  УслСчПБО=ПолучитьУслСч(БК,КОСГУ,СчКБК_ПБО,СчДеб_ПБО,СчКре_ПБО);
  УслСчПБА=ПолучитьУслСч(БК,КОСГУ,СчКБК_ПБА,СчДеб_ПБА,СчКре_ПБА);
  УслСчЗКР_ПБО=ПолучитьУслСч(БК,КОСГУ,СчКБК_ЗКР,СчДеб_ЗКР,СчКре_ЗКР);
  УслСчКР_ПБО=ПолучитьУслСч(БК,КОСГУ,СчКБК_КР,СчДеб_КР,СчКре_КР);
  --
  УслАнПБО=Раб.Бюджет2005.Объединить(Ан_ПБО  ,Призн2_2[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,Призн2_3[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,Призн2_4[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,Призн2_5[Iter],"&");
  УслАнПБО=Раб.Бюджет2005.Объединить(УслАнПБО,БО2,"&");
  --
  УслАнПБА=Раб.Бюджет2005.Объединить(Ан_ПБА  ,Призн2_2[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,Призн2_3[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,Призн2_4[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,Призн2_5[Iter],"&");
  УслАнПБА=Раб.Бюджет2005.Объединить(УслАнПБА,БО2,"&");
  --
  УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(Ан_ЗКР      ,Призн2_2[Iter],"&");
  УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР_ПБО,Призн2_3[Iter],"&");
  УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР_ПБО,Призн2_4[Iter],"&");
  УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР_ПБО,Призн2_5[Iter],"&");
  УслАнЗКР_ПБО=Раб.Бюджет2005.Объединить(УслАнЗКР_ПБО,БО2,"&");
  --
  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(Ан_КР      ,Призн2_2[Iter],"&");
  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР_ПБО,Призн2_3[Iter],"&");
  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР_ПБО,Призн2_4[Iter],"&");
  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР_ПБО,Призн2_5[Iter],"&");
  УслАнКР_ПБО=Раб.Бюджет2005.Объединить(УслАнКР_ПБО,БО2,"&");
  --
  ПБО2[Iter]=MyTurn(УслСчПБО,УслАнПБО,ДН,ДК)+MyTurn(УслСчПБА,УслАнПБА,ДН,ДК);
  ЗКР2[Iter]=MyTurn(УслСчЗКР_ПБО,УслАнЗКР_ПБО,ДН,ДК);
  КР2[Iter]=MyTurn(УслСчКР_ПБО,УслАнКР_ПБО,ДН,ДК);
  if Режим="ЗКР":
     ЗКР2[Iter]=ЗКР2[Iter]+вхЗКР2[Iter];
    |Режим="ПБО":
     ПБО2[Iter]=ПБО2[Iter]+вхПБО2[Iter];
  fi;
 od;
end;

Func Проверить:I;
var Iter:i;
 if isBlankOpen("Раб.Вспом.ОстЛБО"): Close("Раб.Вспом.ОстЛБО"); fi;
 Расчет;
 for Iter=1..Упр do
  if (not Режим="ЗКР" and ЛБО_Ост_Пр[Iter]<WrnПроц and not Round(ЛБО[Iter],2)=0) or Round(ЛБО_Ост[Iter],2)<0:
     OpenBlank("Раб.Вспом.ОстЛБО",True);
     if Round(ЛБО[Iter]-ЗКР[Iter]-КР[Iter],2)<0:
        ^-1;
       else
        ^0;
     fi;
  fi;
  if Round(ПБО_Ост[Iter],2)<0:
     OpenBlank("Раб.Вспом.ОстЛБО",True);
     ^-1;
  fi;
 od;
 for Iter=1..Упр2 do
  if Round(ПБО_Ост2[Iter],2)<0:
     OpenBlank("Раб.Вспом.ОстЛБО",True);
     ^-1;
  fi;
 od;
 ^1;
end;

Proc Вызвать;
 if isBlankOpen("Раб.Вспом.ОстЛБО"): Close("Раб.Вспом.ОстЛБО"); fi;
 Расчет;
 OpenBlank("Раб.Вспом.ОстЛБО",True);
end;

Proc ПроверитьПроценты;
var Iter:i;
 for Iter=1..Упр do
  if Round(ЛБО_Ост[Iter],2)<0:
     Message("Внимание! Остаток ЛБО по "+Trim(Призн1[Iter]+" "+Призн2[Iter]+" "+Призн3[Iter]+" "+Призн4[Iter]+" "+Призн5[Iter])+" меньше нуля",mtError);
     Template.Field="ЛБО_Ост";
     Template.Frame=Iter;
     Exit;
  fi;
  if Round(ПБО_Ост[Iter],2)<0:
     Message("Внимание! Остаток ПБО по "+Trim(Призн1[Iter]+" "+Призн2[Iter]+" "+Призн3[Iter]+" "+Призн4[Iter]+" "+Призн5[Iter])+" меньше нуля",mtError);
     Template.Field="ПБО_Ост";
     Template.Frame=Iter;
     Exit;
  fi;
  if not Режим="ЗКР" and ЛБО_Ост_Пр[Iter]<wrnПроц and not Round(ЛБО[Iter],2)=0:
     Message("Внимание! Остаток ЛБО по "+Trim(Призн1[Iter]+" "+Призн2[Iter]+" "+Призн3[Iter]+" "+Призн4[Iter]+" "+Призн5[Iter])+" менее "+Str(wrnПроц)+"%",mtError);
     Template.Field="ЛБО_Ост_Пр";
     Template.Frame=Iter;
     Exit;
  fi;
 od;
 for Iter=1..Упр2 do
  if Round(ПБО_Ост2[Iter],2)<0:
     Message("Внимание! Остаток ПБО ("+БО2+") по "+Trim(Призн2_1[Iter]+" "+Призн2_2[Iter]+" "+Призн2_3[Iter]+" "+Призн2_4[Iter]+" "+Призн2_5[Iter])+" меньше нуля",mtError);
     Template.Field="ПБО_Ост2";
     Template.Frame=Iter;
     Exit;
  fi;
 od;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить настройку по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 ClearVariable(Справ);
 ClearVariable(НаимСправ);
 Справ[1]="КБК.";
 НаимСправ[1]="КБК.";
 wrnПроц=10;
 if FieldName="НастрПоУмолч":
    Message("Настройка по умолчанию восстановлены");
 fi;
 Return False;
end;

Func Справ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=ВыборСправ;
 if tmp="": ^False; fi;
 if WordInString(tmp,Trim(Справ[1]+" "+Справ[2]+" "+Справ[3]+" "+Справ[4]+" "+Справ[5])," "): Message("Повторный ввод сравочника '"+tmp+"'",mtError); ^False; fi;
 PutVariableS(FieldName,tmp);
 Return False;
end;

Func wrnПроц_OnVerify(FieldName: String; Iter: Integer; Value: Integer):Logical;
 if Value<0 or Value>99: Message("Значение должно лежать в диапазоне 0..99",mtError); ^False; fi;
 Return True ;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Return False;
end;

Func onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var СчУсл,АнУсл,СчДеб,СчКре,Ан,СчДеб2,СчКре2,Ан2:S;
var Iter,СчКБК,СчКБК2:i;
var FieldName,tmp:S;
var Res:N;
var Flag:L;
 Template.HideEditor(False);
 FieldName=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 СчДеб2="";
 if Match(FieldName,"ЛБО*"):     СчДеб=СчДеб_ЛБО; СчКре=СчКре_ЛБО; СчКБК=СчКБК_ЛБО; Ан=Ан_ЛБО; СчДеб2=СчДеб_Асс; СчКре2=СчКре_Асс; СчКБК2=СчКБК_Асс; Ан2=Ан_Асс;
   |Match(FieldName,"ПО*"):      СчДеб=СчДеб_ЗК;  СчКре=СчКре_ЗК ; СчКБК=СчКБК_ЗК;  Ан=Раб.Бюджет2005.Объединить(Ан_ЗК,"ПЕРИОД."+Str(YYYY)+"!","&");
   |Match(FieldName,"ПБО*"):     СчДеб=СчДеб_ПБО; СчКре=СчКре_ПБО; СчКБК=СчКБК_ПБО; Ан=Ан_ПБО; СчДеб2=СчДеб_ПБА; СчКре2=СчКре_ПБА; СчКБК2=СчКБК_ПБА; Ан2=Ан_ПБА;
   |Match(FieldName,"ЗКР_ПБО*"): СчДеб=СчДеб_ЗКР; СчКре=СчКре_ЗКР; СчКБК=СчКБК_ЗКР; Ан=Раб.Бюджет2005.Объединить(Ан_ЗКР,"БО.*","&");
   |Match(FieldName,"ЗКР*") :    СчДеб=СчДеб_ЗКР; СчКре=СчКре_ЗКР; СчКБК=СчКБК_ЗКР; Ан=Ан_ЗКР;
   |Match(FieldName,"КР_ПБО*"):  СчДеб=СчДеб_КР;  СчКре=СчКре_КР;  СчКБК=СчКБК_КР;  Ан=Раб.Бюджет2005.Объединить(Ан_КР,"БО.*","&");
   |Match(FieldName,"КР*") :     СчДеб=СчДеб_КР;  СчКре=СчКре_КР ; СчКБК=СчКБК_КР ; Ан=Ан_КР;
   |True: Message("Нет данных для расшифроки",mtError); ^Cur;
 fi;
 if Match(FieldName,"*2"): Ан=Раб.Бюджет2005.Объединить(Ан,БО2,"&"); fi;
 АнУсл=Раб.Бюджет2005.Объединить(Ан,Призн2[Iter],"&");
 АнУсл=Раб.Бюджет2005.Объединить(АнУсл,Призн3[Iter],"&");
 АнУсл=Раб.Бюджет2005.Объединить(АнУсл,Призн4[Iter],"&");
 АнУсл=Раб.Бюджет2005.Объединить(АнУсл,Призн5[Iter],"&");
 СчУсл=ПолучитьУслСч(SubStr(Призн1[Iter],1,20),SubStr(Призн1[Iter],22,3),СчКБК,СчДеб,СчКре);
 if not СчДеб2="":
    Flag=True;
    tmp=ПолучитьУслСч(SubStr(Призн1[Iter],1,20),SubStr(Призн1[Iter],22,3),СчКБК2,СчДеб2,СчКре2);
    Try
     Res=Saldo(tmp,1.1.100);
    Except
     Flag=False;
    end;
    if Flag:
       СчУсл="("+СчУсл+")|("+tmp+")";
    fi;
 fi;
 if 253-Length(АнУсл)<Length(СчУсл): Message("Расшифровка невозможна. Слишком сложное условие отбора проводок",mtError); ^Cur; fi;
 Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,СчУсл,АнУсл);
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 Расчет;
 Message("Расчет завершен");
end;

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

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn("","",SelfCfg,"",1);
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 ОткрНастр(False);
 Раб.Настр_Печать.Cfg("",SelfCfg);
 Расчет;
end;

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


Конец