-- Шаблон создан мастером бланков
-- 05.03.2007 13:41:24
--
БланкСШаблоном "Книга учета договоров постащиков";

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

cbКБК      :Object;
cbАналит1  :Object;
edАналит1  :Object;
btnАналит1 :Object;
cbАналит2  :Object;
edАналит2  :Object;
btnАналит2 :Object;
cbТек      :Object;
cbИспол    :Object;
cbАннул    :Object;
cbСрок     :Object;
cbСодерж   :Object;
btnУслИспол:Object;
btnУслОпл  :Object;


fКБК:L;
fАналит1:L;
fАналит2:L;
fТек:L;
fИспол:L;
fАннул:L;
fСрок :L;
fУслИспол:L;
fУслОпл:L;
fСодерж:L;
fЗКР:L;
fМес[]:L;
fГрАналит1:L;
fГрАналит2:L;

recТипДок: Record;
ТипДок:S;
var ТипДок_:S=if(recТипДок=nil,"Договоров, контрактов, ...",ТипДок);

ДН:D=[Dat(1,1,Year(ToDay))];
ДК:D=[ToDay+1];
ДЗН:D;
ДЗК:D;
СДН:D;
СДК:D;
СПН:D;
СПК:D;
Контр: Record;
Контр_:S;
РазмещЗаказ:S;
var РазмещЗаказ_:S=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,False,"44ФЗ");
ФЗ:S;
var ФЗ_:S=if(ФЗ="0":"94-ФЗ"|ФЗ="1":"44-ФЗ"|ФЗ="2":"223-ФЗ"|True:"");
услРЗ:S;
МаскаВД:S;
МаскаКБК:S;
Аналит1:S;
Аналит2:S;

Справ1:S;
НаимСправ1:s;
Справ2:S;
НаимСправ2:s;

УслИспол:S=[">="];
УслОпл:S=[">="];
ЗначИспол:N;
ЗначОпл:N;

var Гр[]:I=if($=8:$-if(fСодерж,0,1)|$=9:$-if(fСодерж,0,1)-if(fКБК,0,1)|$=10:$-if(fСодерж,0,1)-if(fКБК,0,1)-if(fАналит1,0,1)|True:$-if(fСодерж,0,1)-if(fКБК,0,1)-if(fАналит1,0,1)-if(fАналит2,0,1));
var Гр12а:S=Str(Гр[12])+"а";
var НаимГр12:S="Сумма на "+Str(Year(ДН))+" год";
var НаимГр12а:S="Принято БО на "+Str(Year(ДН))+" год";
var НаимГр12а_:S="Отклонение от суммы документа Гр."+Гр12а+" - Гр."+Str(Гр[12]);
var НаимГр18:S="подлежит исполнению в "+Str(Year(ДН))+" г. (гр."+Str(Гр[12])+" - гр."+Str(Гр[18])+")";
var НаимГр19:S="подлежит оплате в "+Str(Year(ДН))+" г. (гр."+Str(Гр[12])+" -гр."+Str(Гр[14])+" -гр."+Str(Гр[19])+")";

var Упр:I;

var пп[]:i=$;
var ДатРег[]:D;
var НаимКонтр[]:S;
var НаимДок[]:S;
var НомДок[]:S;
var ДатДок[]:D;
var НомРеестр[]:S;
var ДатРеестр[]:D;
var СРЗ[]:S;
var ДатДокН[]:D;
var ДатДокК[]:D;
var Срок[]:D;
var Содерж[]:S;
var КБК[]:S;
var Призн1[]:S;
var Призн2[]:S;
var СумДок[]:N;
var СумТек[]:N;
var dСумДок[]:N;
var dСумДокПр[]:N=Abs(dСумДок[$])*100/СумДок[$];
var dСумДокПр_[]:S=if(Round(dСумДок[$],2)=0,"",Format("%.1N",dСумДокПр[$])+"%");
var dСумТек[]:N;
var dСумТекПр[]:N=Abs(dСумТек[$])*100/СумТек[$];
var dСумТекПр_[]:S=if(Round(dСумТек[$],2)=0,"",Format("%.1N",dСумТекПр[$])+"%");
var СумБО[]:N;
var dСумБО[]:N=СумБО[$]-(СумТек[$]+dСумТек[$]);
var ОстДебН[]:N;
var СумДеб[]:N;
var ОстКреН[]:N;
var СумКреН[]:N;
var СумКре[]:N;
var СумКреПр[]:N=СумКре[$]*100/СумТек[$];
var СумОпл[]:N;
var СумОплПр[]:N=СумОпл[$]*100/СумТек[$];
var СумЗакрАв[]:N;
var ОстДебК[]:N=ОстДебН[$]+СумДеб[$]-СумЗакрАв[$];
var ОстКреК[]:N=ОстКреН[$]+СумКреН[$]+СумКре[$]-СумОпл[$]-СумЗакрАв[$];
var Статус[]:S;
var ОстИспол[]:N=if(Статус[$]="Текущий",СумТек[$]-СумКре[$],0);
var ОстОпл[]:N=if(Статус[$]="Текущий" and not СумТек[$]=0,СумТек[$]-СумОпл[$]-СумДеб[$],0);
var ОстИсполПр[]:N=Round(ОстИспол[$]*100/СумТек[$],1);
var ОстОплПр[]:N=Round(ОстОпл[$]*100/СумТек[$],1);
var ОстИсполПр_[]:S=if(Round(ОстИспол[$],2)=0,"",Format("%.1N",ОстИсполПр[$])+"%");
var ОстОплПр_[]:S=if(Round(ОстОпл[$],2)=0,"",Format("%.1N",ОстОплПр[$])+"%");
var СумПрет[]:N;
var СумСнято[]:N;
var СумПрет_[]:S=if(Round(СумПрет[$],2)=0 and Round(СумСнято[$],2)=0,"-",Format("%.2N",СумПрет[$]))+if(Round(СумСнято[$],2)=0,""," ("+Format("%.2N",СумСнято[$])+")");
var СумУдов[]:N;
var UKey[]:Record;
var ПризнКонтр[]:S;
var ПризнДоговор[]:S;

var TxtИтого1[]:S=if($=1,"Итого:","");
var TxtИтого2[]:S=if($=1,"в том числе:","");

var УпрКБК:I;
var ИтогКБК[]:S;
var ИтогПризн1[]:S;
var ИтогПризн2[]:S;
var ИтогСумДок[]:N;
var ИтогdСумДок[]:N;
var ИтогdСумДокПр[]:N=Abs(ИтогdСумДок[$])*100/ИтогСумДок[$];
var ИтогdСумДок_[]:S=if(Round(ИтогdСумДок[$],2)=0,"",Format("%.2N",ИтогdСумДок[$])+" "+Format("%.1N",ИтогdСумДокПр[$])+"%");
var ИтогСумТек[]:N;
var ИтогdСумТек[]:N;
var ИтогdСумТекПр[]:N=Abs(ИтогdСумТек[$])*100/ИтогСумТек[$];
var ИтогdСумТек_[]:S=if(Round(ИтогdСумТек[$],2)=0,"",Format("%.2N",ИтогdСумТек[$])+" "+Format("%.1N",ИтогdСумТекПр[$])+"%");
var ИтогСумБО[]:N;
var ИтогdСумБО[]:N=ИтогСумБО[$]-ИтогСумТек[$];
var ИтогОстДебН[]:N;
var ИтогСумДеб[]:N;
var ИтогОстДебК[]:N;
var ИтогОстКреН[]:N;
var ИтогСумКреН[]:N;
var ИтогСумКре[]:N;
var ИтогСумКреПр[]:N=ИтогСумКре[$]*100/ИтогСумТек[$];
var ИтогСумОпл[]:N;
var ИтогСумОплПр[]:N=ИтогСумОпл[$]*100/ИтогСумТек[$];
var ИтогСумЗакрАв[]:N;
var ИтогОстКреК[]:N;
var ИтогОстИспол[]:N;
var ИтогОстИсполПр[]:N=Round(ИтогОстИспол[$]*100/ИтогСумТек[$],1);
var ИтогОстИсполПр_[]:S=if(Round(ИтогОстИспол[$],2)=0,"",Format("%.1N",ИтогОстИсполПр[$])+"%");
var ИтогОстОпл[]:N;
var ИтогОстОплПр[]:N=Round(ИтогОстОпл[$]*100/ИтогСумТек[$],1);
var ИтогОстОплПр_[]:S=if(Round(ИтогОстОпл[$],2)=0,"",Format("%.1N",ИтогОстОплПр[$])+"%");

var ВсегоСумДок:N;
var ВсегоdСумДок:N;
var ВсегоdСумДокПр:N=Abs(ВсегоdСумДок)*100/ВсегоСумДок;
var ВсегоdСумДок_:S=if(Round(ВсегоdСумДок,2)=0,"",Format("%.2N",ВсегоdСумДок)+" "+Format("%.1N",ВсегоdСумДокПр)+"%");
var ВсегоСумТек:N;
var ВсегоdСумТек:N;
var ВсегоdСумТекПр:N=Abs(ВсегоdСумТек)*100/ВсегоСумТек;
var ВсегоdСумТек_:S=if(Round(ВсегоdСумТек,2)=0,"",Format("%.2N",ВсегоdСумТек)+" "+Format("%.1N",ВсегоdСумТекПр)+"%");
var ВсегоСумБО:N;
var ВсегоdСумБО:N=ВсегоСумБО-ВсегоСумТек;
var ВсегоОстДебН:N;
var ВсегоСумДеб:N;
var ВсегоОстДебК:N;
var ВсегоОстКреН:N;
var ВсегоСумКреН:N;
var ВсегоСумКре:N;
var ВсегоСумКреПр:N=ВсегоСумКре*100/ВсегоСумТек;
var ВсегоСумОпл:N;
var ВсегоСумОплПр:N=ВсегоСумОпл*100/ВсегоСумТек;
var ВсегоСумЗакрАв:N;
var ВсегоОстКреК:N;
var ВсегоОстИспол:N;
var ВсегоОстИсполПр:N=Round(ВсегоОстИспол*100/ВсегоСумТек,1);
var ВсегоОстИсполПр_:S=if(Round(ВсегоОстИспол,2)=0,"",Format("%.1N",ВсегоОстИсполПр)+"%");
var ВсегоОстОпл:N;
var ВсегоОстОплПр:N=Round(ВсегоОстОпл*100/ВсегоСумТек,1);
var ВсегоОстОплПр_:S=if(Round(ВсегоОстОпл,2)=0,"",Format("%.1N",ВсегоОстОплПр)+"%");
var ВсегоСумПрет:N;
var ВсегоСумСнято:N;
var ВсегоСумПрет_:S=if(Round(ВсегоСумПрет,2)=0 and Round(ВсегоСумСнято,2)=0,"-",Format("%.2N",ВсегоСумПрет))+if(Round(ВсегоСумСнято,2)=0,""," ("+Format("%.2N",ВсегоСумСнято)+")");
var ВсегоСумУдов:N;


var Key[]:S;
var Idx[]:I;
var Buf[]:S;
var KeyD[]:D;
var BufR[]:Record;
var BufI[]:I;
var BufДейств[]:S;

var СправДоговор:S="ДОГОВОР";


var Отч:S;
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(ДатРег);
 ClearVariable(ПризнКонтр);
 ClearVariable(НаимКонтр);
 ClearVariable(НаимДок);
 ClearVariable(НомДок);
 ClearVariable(ДатДок);
 ClearVariable(НомРеестр);
 ClearVariable(ДатРеестр);
 ClearVariable(СРЗ);
 ClearVariable(ДатДокН);
 ClearVariable(ДатДокК);
 ClearVariable(Срок);
 ClearVariable(Содерж);
 ClearVariable(КБК);
 ClearVariable(Призн1);
 ClearVariable(Призн2);
 ClearVariable(СумДок);
 ClearVariable(СумТек);
 ClearVariable(dСумДок);
 ClearVariable(dСумТек);
 ClearVariable(СумБО);
 ClearVariable(ОстДебН);
 ClearVariable(СумДеб);
 ClearVariable(ОстКреН);
 ClearVariable(СумКреН);
 ClearVariable(СумКре);
 ClearVariable(СумЗакрАв);
 ClearVariable(СумОпл);
 ClearVariable(Статус);
 ClearVariable(СумПрет);
 ClearVariable(СумСнято);
 ClearVariable(СумУдов);
 ClearVariable(UKey);
 ClearVariable(УпрКБК);
 ClearVariable(ИтогКБК);
 ClearVariable(ИтогПризн1);
 ClearVariable(ИтогПризн2);
 ClearVariable(ИтогСумДок);
 ClearVariable(ИтогdСумДок);
 ClearVariable(ИтогСумТек);
 ClearVariable(ИтогdСумТек);
 ClearVariable(ИтогСумБО);
 ClearVariable(ИтогОстДебН);
 ClearVariable(ИтогСумДеб);
 ClearVariable(ИтогОстДебК);
 ClearVariable(ИтогОстКреН);
 ClearVariable(ИтогСумКреН);
 ClearVariable(ИтогСумКре);
 ClearVariable(ИтогСумОпл);
 ClearVariable(ИтогСумЗакрАв);
 ClearVariable(ИтогОстКреК);
 ClearVariable(ИтогОстИспол);
 ClearVariable(ИтогОстОпл);
 ClearVariable(ВсегоСумДок);
 ClearVariable(ВсегоdСумДок);
 ClearVariable(ВсегоСумТек);
 ClearVariable(ВсегоdСумТек);
 ClearVariable(ВсегоСумБО);
 ClearVariable(ВсегоОстДебН);
 ClearVariable(ВсегоСумДеб);
 ClearVariable(ВсегоОстДебК);
 ClearVariable(ВсегоОстКреН);
 ClearVariable(ВсегоСумКреН);
 ClearVariable(ВсегоСумКре);
 ClearVariable(ВсегоСумОпл);
 ClearVariable(ВсегоСумЗакрАв);
 ClearVariable(ВсегоОстКреК);
 ClearVariable(ВсегоОстИспол);
 ClearVariable(ВсегоОстОпл);
 ClearVariable(ВсегоСумПрет);
 ClearVariable(ВсегоСумСнято);
 ClearVariable(ВсегоСумУдов);
 ClearVariable(Key);
 ClearVariable(BufДейств);
 ClearVariable(BufR);
 S3.Visible=False;
end;

Proc Оформление;
 edАналит1.Enabled=fАналит1;
 btnАналит1.Enabled=fАналит1;
 edАналит2.Enabled=fАналит2;
 btnАналит2.Enabled=fАналит2;
 S1.Column(7,ColVisible,fСодерж);
 S2.Column(7,ColVisible,fСодерж);
 S3.Column(7,ColVisible,fСодерж);
 S4.Column(7,ColVisible,fСодерж);
 S5.Column(7,ColVisible,fСодерж);
 S6.Column(7,ColVisible,fСодерж);
 S1.Column(8,ColVisible,fКБК);
 S2.Column(8,ColVisible,fКБК);
 S3.Column(8,ColVisible,fКБК);
 S4.Column(8,ColVisible,fКБК);
 S5.Column(8,ColVisible,fКБК);
 S6.Column(8,ColVisible,fКБК);
 S1.Column(9,ColVisible,fАналит1);
 S2.Column(9,ColVisible,fАналит1);
 S3.Column(9,ColVisible,fАналит1);
 S4.Column(9,ColVisible,fАналит1);
 S5.Column(9,ColVisible,fАналит1);
 S6.Column(9,ColVisible,fАналит1);
 S1.Column(10,ColVisible,fАналит2);
 S2.Column(10,ColVisible,fАналит2);
 S3.Column(10,ColVisible,fАналит2);
 S4.Column(10,ColVisible,fАналит2);
 S5.Column(10,ColVisible,fАналит2);
 S6.Column(10,ColVisible,fАналит2);
end;

Func MyTurn(Val:S; d1:D; d2:D):N;
var Ret:N;
 Try
  Ret=Turn(Val,d1,d2);
 Except
 end;
 ^Ret;
end;

Func MySaldo(Val:S; d:D):N;
var Ret:N;
 Try
  Ret=Saldo(Val,d);
 Except
 end;
 ^Ret;
end;

Func ПолучитьФильтр:S;
var F,tmp,СОП_:S;
 F="Рег"+if(ФЗ="",""," И ФЗ="+ФЗ);
 if ДН<>1.1.100 and ДК= 1.1.100: tmp="((Договор_Пре=nil И ДатаРег>="+Раб.Формат.ДатаСтр(ДН,1)+")or(НЕ Договор_Пре=nil И ДатаИзм>="+Раб.Формат.ДатаСтр(ДН,1)+"))";
   |ДН= 1.1.100 and ДК<>1.1.100: tmp="((Договор_Пре=nil И ДатаРег<" +Раб.Формат.ДатаСтр(ДК,1)+")or(НЕ Договор_Пре=nil И ДатаИзм<"+Раб.Формат.ДатаСтр(ДК,1)+"))";
   |ДН<>1.1.100 and ДК<>1.1.100: tmp="((Договор_Пре=nil И ДатаРег>="+Раб.Формат.ДатаСтр(ДН,1)+"И ДатаРег<"+Раб.Формат.ДатаСтр(ДК,1)+")or(НЕ Договор_Пре=nil И ДатаИзм>="+Раб.Формат.ДатаСтр(ДН,1)+"И ДатаИзм<"+Раб.Формат.ДатаСтр(ДК,1)+"))";
   |true: tmp="НЕ Недейств";
 fi;
 F=Раб.Бюджет2005.Объединить(F,tmp," И ");
 if ДЗН<>1.1.100 and ДЗК= 1.1.100: tmp="ДатаДок>="+Раб.Формат.ДатаСтр(ДЗН,1);
   |ДЗН= 1.1.100 and ДЗК<>1.1.100: tmp="ДатаДок<" +Раб.Формат.ДатаСтр(ДЗК,1);
   |ДЗН<>1.1.100 and ДЗК<>1.1.100: tmp="ДатаДок>="+Раб.Формат.ДатаСтр(ДЗН,1)+"И ДатаДок<"+Раб.Формат.ДатаСтр(ДЗК,1);
   |True: tmp="";
 fi;
 F=Раб.Бюджет2005.Объединить(F,tmp," И ");
 if СДН<>1.1.100 and СДК= 1.1.100: tmp="ДатаК>="+Раб.Формат.ДатаСтр(СДН,1);
   |СДН= 1.1.100 and СДК<>1.1.100: tmp="ДатаК<" +Раб.Формат.ДатаСтр(СДК,1);
   |СДН<>1.1.100 and СДК<>1.1.100: tmp="ДатаК>="+Раб.Формат.ДатаСтр(СДН,1)+"И ДатаК<"+Раб.Формат.ДатаСтр(СДК,1);
   |True: tmp="";
 fi;
 F=Раб.Бюджет2005.Объединить(F,tmp," И ");
 if СПН<>1.1.100 and СПК= 1.1.100: tmp="Срок>="+Раб.Формат.ДатаСтр(СПН,1);
   |СПН= 1.1.100 and СПК<>1.1.100: tmp="Срок<" +Раб.Формат.ДатаСтр(СПК,1);
   |СПН<>1.1.100 and СПК<>1.1.100: tmp="Срок>="+Раб.Формат.ДатаСтр(СПН,1)+"И Срок<"+Раб.Формат.ДатаСтр(СПК,1);
   |True: tmp="";
 fi;
 F=Раб.Бюджет2005.Объединить(F,tmp," И ");
 if not recТипДок=nil: F=Раб.Бюджет2005.Объединить(F,"НАИМДОК="+RecordToString(recТипДок)," И "); fi;
 if not Контр=nil: F=Раб.Бюджет2005.Объединить(F,"Контр="+RecordToString(Контр)," И "); fi;
 if not РазмещЗаказ="": 
    if РазмещЗаказ="0":
       if услРЗ="НЕ":
          F=Раб.Бюджет2005.Объединить(F,"Учет_Реестр_ОФК"," И ");
         else
          F=Раб.Бюджет2005.Объединить(F,"НЕ Учет_Реестр_ОФК"," И ");
       fi;
      else
       СОП_=Раб.Договор.СОП2СРЗ(РазмещЗаказ,"СРЗ");
       if СОП_="20000":
          СОП_="(РазмещЗаказ='"+РазмещЗаказ+"'or Match(РазмещЗаказ,'20*'))";
         else
          СОП_="(РазмещЗаказ='"+РазмещЗаказ+"'or РазмещЗаказ='"+СОП_+"')";
       fi;
       if услРЗ="НЕ":
          F=Раб.Бюджет2005.Объединить(F,"Учет_Реестр_ОФК И НЕ"+СОП_," И ");
         else
          F=Раб.Бюджет2005.Объединить(F,"Учет_Реестр_ОФК И"+СОП_," И ");
       fi;
    fi;
 fi;
-- if fТек: F=Раб.Бюджет2005.Объединить(F,"НЕ Исполнен И НЕ Аннулирован"," И "); fi;
-- if fИспол or fАннул or fСрок:
--    if fИспол and fАннул and fСрок: F=Раб.Бюджет2005.Объединить(F,"(Исполнен or Аннулирован or (ДатаК<"+DateToString(ДК)+"И ДатаК>1.1.100))"," И ");
--      |fИспол and fАннул: F=Раб.Бюджет2005.Объединить(F,"(Исполнен or Аннулирован)"," И ");
--      |fИспол and fСрок: F=Раб.Бюджет2005.Объединить(F,"(Исполнен or (ДатаК<"+DateToString(ДК)+"И ДатаК>1.1.100))"," И ");
--      |fИспол: F=Раб.Бюджет2005.Объединить(F,"Исполнен"," И ");
--      |fАннул and fСрок: F=Раб.Бюджет2005.Объединить(F,"(Аннулирован or (ДатаК<"+DateToString(ДК)+"И ДатаК>1.1.100))"," И ");
--      |fАннул: F=Раб.Бюджет2005.Объединить(F,"Аннулирован"," И ");
--      |fСрок: F=Раб.Бюджет2005.Объединить(F,"НЕ Исполнен И НЕ Аннулирован И ДатаК<"+DateToString(ДК)+"И ДатаК>1.1.100"," И ");
--    fi;
-- fi;
 ^F;
end;

Proc Расчет;
var OWA,n,nr,wrn,z,Iter:I;
var F,ТекГод_:S;
var Сум_:N;
var isГода,isИ,isА,Flag:L;
var ДатаК_:D;
var Rec: Record;
var Признак_:S;
 ClearVariable(KeyD);
 Очистить;
 F="Рег and not НеДейств"+if(ФЗ="",""," И ФЗ="+ФЗ);
 if ДН<>1.1.100 and ДК= 1.1.100: F=F+" И (Договор_Пре=nil И ДатаРег>="+Раб.Формат.ДатаСтр(ДН,1)+")or(НЕ Договор_Пре=nil И ДатаИзм>="+Раб.Формат.ДатаСтр(ДН,1)+"))";
   |ДН= 1.1.100 and ДК<>1.1.100: F=F+" И((Договор_Пре=nil И ДатаРег<" +Раб.Формат.ДатаСтр(ДК,1)+")or(НЕ Договор_Пре=nil И ДатаИзм<"+Раб.Формат.ДатаСтр(ДК,1)+"))";
   |ДН<>1.1.100 and ДК<>1.1.100: F=F+" И((Договор_Пре=nil И ДатаРег>="+Раб.Формат.ДатаСтр(ДН,1)+"И ДатаРег<"+Раб.Формат.ДатаСтр(ДК,1)+")or(НЕ Договор_Пре=nil И ДатаИзм>="+Раб.Формат.ДатаСтр(ДН,1)+"И ДатаИзм<"+Раб.Формат.ДатаСтр(ДК,1)+"))";
 fi;
 OWA=OpenWorkArea("РПО_ДОГОВОР","ПРИЗНАК;ДОГОВОР_ПРЕ",F);
 Try
  nr=Records(OWA);
  for n=1..nr do
   if GetFieldR(OWA,n,"Признак_Ref")=nil:
      Признак_=Up(GetFieldS(OWA,n,"Признак"));
     else
      Признак_=Up(GetFieldS(OWA,n,"Признак_Ref.Признак"));
   fi;
   AddInArray(BufДейств,True,False,Признак_);
  od;
  SetFilter(OWA,ПолучитьФильтр);
  wrn=0;
  nr=Records(OWA);
  ShowProgress(nr,"Расчет....");
  for n=1..nr do
   ProgressPos(n);
   rec=GetRecordKey(OWA,n);
   Flag=n=nr;
   if not Flag: Flag=not Rec=GetFieldR(OWA,n+1,"Договор_Пре"); fi;
   if Flag:
      isИ=GetFieldL(OWA,n,"Исполнен");
      isА=GetFieldL(OWA,n,"Аннулирован");
      ДатаК_=GetFieldD(OWA,n,"ДатаК");
      if fТек: Flag=not isИ and not isА;
        |fИспол and fАннул and fСрок: Flag=isИ or isА or (ДатаК_<ДК and ДатаК_>1.1.100);
        |fИспол and fАннул          : Flag=isИ or isА;
        |fИспол and fСрок           : Flag=isИ or (ДатаК_<ДК and ДатаК_>1.1.100);
        |fИспол                     : Flag=isИ;
        |fАннул and fСрок           : Flag=isА or (ДатаК_<ДК and ДатаК_>1.1.100);
        |fАннул                     : Flag=isА;
        |fСрок                      : Flag=not isИ and not isА and ДатаК_<ДК and ДатаК_>1.1.100;
      fi;
   fi;
   if GetFieldR(OWA,n,"Признак_ref")=nil:
      Признак_=Up(GetFieldS(OWA,n,"Признак"));
     else
      Признак_=Up(GetFieldS(OWA,n,"Признак_Ref.Признак"));
   fi;
   if Flag:
      if GetFieldL(OWA,n,"НеДейств"): --делаем на проверка действующего экземпляра в предалх даты отчета
         Flag=SearchInArray(BufДейств,Признак_,True)=-1;
      fi;
   fi;
   if Flag: --берем последний экземпляр по сортировке о типа актуален на поставленное условие
      z=InsertInArraySort(KeyD,GetFieldD(OWA,n,"ДАТАРЕГ"));
      InsertFrame(Упр,z);
      UKey[z]=Rec;
      ПризнКонтр[z]=GetFieldS(OWA,n,"КОНТР_ПРИЗН");
      ПризнДоговор[z]=СправДоговор+"."+Признак_;
      ДатРег[z]=GetFieldD(OWA,n,"ДАТАРЕГ");
      НаимКонтр[z]=GetFieldS(OWA,n,"КОНТР.КОРИМЯ");
      НаимДок[z]=GetFieldS(OWA,n,"НАИМДОК.НАИМ");
      НомДок[z]=GetFieldS(OWA,n,"НОМЕРДОК");
      ДатДок[z]=GetFieldD(OWA,n,"ДАТАДОК");
      НомДок[z]=Раб.Бюджет2005.Объединить(НомДок[z],DateToString(ДатДок[z])," от ");
      НомРеестр[z]=GetFieldS(OWA,n,"НОМ_РЕЕСТР_ОФК");
      ДатРеестр[z]=GetFieldD(OWA,n,"ДАТА_РЕЕСТР_ОФК");
      НомРеестр[z]=Раб.Бюджет2005.Объединить(НомРеестр[z],DateToString(ДатРеестр[z])," от ");
      СРЗ[z]=if(GetFieldL(OWA,n,"Учет_Реестр_ОФК"),GetFieldS(OWA,n,"РазмещЗаказ"),"0");
      if Length(СРЗ[z])=5:
         СРЗ[z]=Раб.Договор.СОП2СРЗ(СРЗ[z],"СОП");
      fi;
      СРЗ[z]=Раб.Договор.РазмещениеЗаказа(СРЗ[z],False,"44ФЗ");
      ДатДокН[z]=GetFieldD(OWA,n,"ДАТАН");
      ДатДокК[z]=ДатаК_;
      Срок[z]=GetFieldD(OWA,n,"Срок");
      Содерж[z]=GetFieldS(OWA,n,"СОДЕРЖ");
      if not GetFieldR(OWA,n,"НаимИзм")=nil:
         Содерж[z]=Содерж[z]+" ("+GetFieldS(OWA,n,"НаимИзм.Наим")+" №"+GetFieldS(OWA,n,"НомерИзм")+" от "+DateToString(GetFieldD(OWA,n,"ДатаДИзм"))+")";
      fi;
      СумДок[z]=GetFieldN(OWA,n,"СУМДОК");
      ТекГод_=GetFieldS(OWA,n,"ТекГод");
      isГода=GetFieldL(OWA,n,"Учет_Реестр_ОФК") or GetFieldI(OWA,n,"ver")>0;
      if ТекГод_=Str(Year(ДН)):
         СумТек[z]=GetFieldN(OWA,n,"СУМТЕК");
        else
         if isГода:
            if GetFieldS(OWA,n,"Год1")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод1");
              |GetFieldS(OWA,n,"Год2")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод2");
              |GetFieldS(OWA,n,"Год3")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод3");
              |GetFieldS(OWA,n,"Год4")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод4");
              |GetFieldS(OWA,n,"Год5")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод5");
              |GetFieldS(OWA,n,"Год6")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод6");
              |GetFieldS(OWA,n,"Год7")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод7");
              |GetFieldS(OWA,n,"Год8")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод8");
              |GetFieldS(OWA,n,"Год9")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод9");
              |GetFieldS(OWA,n,"Год10")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод10");
              |True: СумТек[z]=0;
            fi;
           else
            СумТек[z]=0;
         fi;
      fi;
      СумБО[z]=Turn("*.1.501.13.*|*.?.506.10.*/*.?.502.11.*{"+ПризнДоговор[z]+"}",ДН,ДК);
      if ExistsTransactions("*.?.206.??.???{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
         ОстДебН[z]=Saldo("*.?.206.??.???{"+ПризнДоговор[z]+"!}",ДН);
         СумДеб[z]=Turn("*.?.206.??.560{"+ПризнДоговор[z]+"!}",ДН,ДК);
         СумЗакрАв[z]=-Saldo("*.?.206.??.660{"+ПризнДоговор[z]+"!}",ДК);
      fi;
      if ExistsTransactions("*.?.302.??.???{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
         ОстКреН[z]=-Saldo("*.?.302.??.???{"+ПризнДоговор[z]+"!}",ДН);
         СумКреН[z]=-Turn("*.?.302.??.730{"+ПризнДоговор[z]+"!&ПЕРИОД.*&~ПЕРИОД."+Str(Year(ДН))+"!}",ДН,ДК);
         СумКре[z]=-Turn("*.?.302.??.730{"+ПризнДоговор[z]+"!&(ПЕРИОД."+Str(Year(ДН))+"!|~ПЕРИОД.*)}",ДН,ДК);
         СумОпл[z]=Turn("*.?.302.??.830{"+ПризнДоговор[z]+"!}",ДН,ДК)-Turn("*.?.302.??.830/*.?.206.??.660{"+ПризнДоговор[z]+"!}",ДН,ДК);
      fi;
      if fЗКР:
         if ExistsTransactions("*.?.ЗАБ.КР.*{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
            СумДеб[z]=СумДеб[z]+Turn("*.?.ЗАБ.00.560/*.?.ЗАБ.КР.*{"+ПризнДоговор[z]+"!}",ДН,ДК);
            СумОпл[z]=СумОпл[z]+Turn("*.?.ЗАБ.00.830/*.?.ЗАБ.КР.*{"+ПризнДоговор[z]+"!}",ДН,ДК);
         fi;
      fi;
      if isИ:
         Статус[z]="Исполнен"+" "+DateToString(GetFieldD(OWA,n,"ИСПОЛДАТА"));
         dСумДок[z]=GetFieldN(OWA,n,"ИсполФактОпл")-СумДок[z];
         if Round(СумДок[z],2)=Round(СумТек[z],2):
            dСумТек[z]=dСумДок[z];
           else
            if isГода:
               Сум_=if(GetFieldS(OWA,n,"Год1")<ТекГод_ and not GetFieldS(OWA,n,"Год1")="",GetFieldN(OWA,n,"СумГод1"),0)
                   +if(GetFieldS(OWA,n,"Год2")<ТекГод_ and not GetFieldS(OWA,n,"Год2")="",GetFieldN(OWA,n,"СумГод2"),0)
                   +if(GetFieldS(OWA,n,"Год3")<ТекГод_ and not GetFieldS(OWA,n,"Год3")="",GetFieldN(OWA,n,"СумГод3"),0)
                   +if(GetFieldS(OWA,n,"Год4")<ТекГод_ and not GetFieldS(OWA,n,"Год4")="",GetFieldN(OWA,n,"СумГод4"),0)
                   +if(GetFieldS(OWA,n,"Год5")<ТекГод_ and not GetFieldS(OWA,n,"Год5")="",GetFieldN(OWA,n,"СумГод5"),0)
                   +if(GetFieldS(OWA,n,"Год6")<ТекГод_ and not GetFieldS(OWA,n,"Год6")="",GetFieldN(OWA,n,"СумГод6"),0)
                   +if(GetFieldS(OWA,n,"Год7")<ТекГод_ and not GetFieldS(OWA,n,"Год7")="",GetFieldN(OWA,n,"СумГод7"),0)
                   +if(GetFieldS(OWA,n,"Год8")<ТекГод_ and not GetFieldS(OWA,n,"Год8")="",GetFieldN(OWA,n,"СумГод8"),0)
                   +if(GetFieldS(OWA,n,"Год9")<ТекГод_ and not GetFieldS(OWA,n,"Год9")="",GetFieldN(OWA,n,"СумГод9"),0)
                   +if(GetFieldS(OWA,n,"Год10")<ТекГод_ and not GetFieldS(OWA,n,"Год10")="",GetFieldN(OWA,n,"СумГод10"),0); --считаем суммы кбк по годом исключая текущий
               dСумТек[z]=GetFieldN(OWA,n,"ИсполФактОпл")-Сум_-СумТек[z];
               if СумТек[z]=0: dСумТек[z]=0; fi; --????
              else
               dСумТек[z]=GetFieldN(OWA,n,"ИсполФактОпл")-СумТек[z];
            fi;
         fi;
        |isА:
         Статус[z]="Расторгнут"+" "+DateToString(GetFieldD(OWA,n,"АННУЛДАТА"));
         dСумДок[z]=GetFieldN(OWA,n,"АннулФактОпл")-СумДок[z];
         if Round(СумДок[z],2)=Round(СумТек[z],2):
            dСумТек[z]=dСумДок[z];
           else
            if isГода:
               ТекГод_=GetFieldS(OWA,n,"ТекГод");
               Сум_=if(GetFieldS(OWA,n,"Год1")<ТекГод_ and not GetFieldS(OWA,n,"Год1")="",GetFieldN(OWA,n,"СумГод1"),0)
                   +if(GetFieldS(OWA,n,"Год2")<ТекГод_ and not GetFieldS(OWA,n,"Год2")="",GetFieldN(OWA,n,"СумГод2"),0)
                   +if(GetFieldS(OWA,n,"Год3")<ТекГод_ and not GetFieldS(OWA,n,"Год3")="",GetFieldN(OWA,n,"СумГод3"),0)
                   +if(GetFieldS(OWA,n,"Год4")<ТекГод_ and not GetFieldS(OWA,n,"Год4")="",GetFieldN(OWA,n,"СумГод4"),0)
                   +if(GetFieldS(OWA,n,"Год5")<ТекГод_ and not GetFieldS(OWA,n,"Год5")="",GetFieldN(OWA,n,"СумГод5"),0)
                   +if(GetFieldS(OWA,n,"Год6")<ТекГод_ and not GetFieldS(OWA,n,"Год6")="",GetFieldN(OWA,n,"СумГод6"),0)
                   +if(GetFieldS(OWA,n,"Год7")<ТекГод_ and not GetFieldS(OWA,n,"Год7")="",GetFieldN(OWA,n,"СумГод7"),0)
                   +if(GetFieldS(OWA,n,"Год8")<ТекГод_ and not GetFieldS(OWA,n,"Год8")="",GetFieldN(OWA,n,"СумГод8"),0)
                   +if(GetFieldS(OWA,n,"Год9")<ТекГод_ and not GetFieldS(OWA,n,"Год9")="",GetFieldN(OWA,n,"СумГод9"),0)
                   +if(GetFieldS(OWA,n,"Год10")<ТекГод_ and not GetFieldS(OWA,n,"Год10")="",GetFieldN(OWA,n,"СумГод10"),0); --считаем суммы кбк по годом исключая текущий
               dСумТек[z]=GetFieldN(OWA,n,"АннулФактОпл")-Сум_-СумТек[z];
               if СумТек[z]=0: dСумТек[z]=0; fi; --????
              else
               dСумТек[z]=GetFieldN(OWA,n,"АннулФактОпл")-СумТек[z];
            fi;
         fi;
        |True: Статус[z]="Текущий";
      fi;
      if ExistsTransactions("*.?.205.41.*{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
         СумПрет[z]=Saldo("*.?.205.41.560{"+ПризнДоговор[z]+"!}",ДК);
         СумСнято[z]=Turn("-*.?.205.41.560{"+ПризнДоговор[z]+"!}",1.1.100,ДК);
         СумСнято[z]=СумСнято[z]-Turn("*.?.401.10.*/*.?.205.41.660{"+ПризнДоговор[z]+"!}",1.1.100,ДК);
         СумУдов[z]=Turn("~*.?.401.10.*/*.?.205.41.660{"+ПризнДоговор[z]+"!}",1.1.100,ДК);
      fi;
   fi; --Flag
  od;
  if fУслИспол or fУслОпл:
     Iter=1;
     While Iter<=Упр do
      if fУслИспол:
         if УслИспол=">": Flag=Round(СумКреПр[Iter],1)>Round(ЗначИспол,1);
           |УслИспол=">=":Flag=Round(СумКреПр[Iter],1)>=Round(ЗначИспол,1);
           |УслИспол="=": Flag=Round(СумКреПр[Iter],1)=Round(ЗначИспол,1);
           |УслИспол="<=":Flag=Round(СумКреПр[Iter],1)<=Round(ЗначИспол,1);
           |УслИспол="<": Flag=Round(СумКреПр[Iter],1)<Round(ЗначИспол,1);
         fi;
        else
         Flag=true;
      fi;
      if fУслОпл and Flag:
         if УслОпл=">": Flag=Round(СумОплПр[Iter],1)>Round(ЗначОпл,1);
           |УслОпл=">=":Flag=Round(СумОплПр[Iter],1)>=Round(ЗначОпл,1);
           |УслОпл="=": Flag=Round(СумОплПр[Iter],1)=Round(ЗначОпл,1);
           |УслОпл="<=":Flag=Round(СумОплПр[Iter],1)<=Round(ЗначОпл,1);
           |УслОпл="<": Flag=Round(СумОплПр[Iter],1)<Round(ЗначОпл,1);
         fi;
      fi;
      if Flag:
         Iter=Iter+1;
        else
         DeleteFrame(Упр,Iter);
      fi;
     od;
  fi;
  for Iter=1..Упр do
   if not Round(dСумБО[Iter],2)=0:
      if wrn=0: wrn=Iter; Trace("-------"); fi;
      Trace("Строка №"+Str(Iter)+" Внимание! Обнаружено отклонение сумм на текущий год и суммы БО");
   fi;
  od;
  ВсегоdСумДок=SumOfArray(dСумДок,Упр);
  ВсегоСумДок=SumOfArray(СумДок,Упр)+ВсегоdСумДок;
  ВсегоdСумТек=SumOfArray(dСумТек,Упр);
  ВсегоСумТек=SumOfArray(СумТек,Упр)+ВсегоdСумТек;
  ВсегоСумБО=SumOfArray(СумБО,Упр);
  ВсегоОстДебН=SumOfArray(ОстДебН,Упр);
  ВсегоСумДеб=SumOfArray(СумДеб,Упр);
  ВсегоОстДебК=SumOfArray(ОстДебК,Упр);
  ВсегоОстКреН=SumOfArray(ОстКреН,Упр);
  ВсегоСумКреН=SumOfArray(СумКреН,Упр);
  ВсегоСумКре=SumOfArray(СумКре,Упр);
  ВсегоСумОпл=SumOfArray(СумОпл,Упр);
  ВсегоСумЗакрАв=SumOfArray(СумЗакрАв,Упр);
  ВсегоОстКреК=SumOfArray(ОстКреК,Упр);
  ВсегоОстИспол=SumOfArray(ОстИспол,Упр);
  ВсегоОстОпл=SumOfArray(ОстОпл,Упр);
  ВсегоСумПрет=SumOfArray(СумПрет,Упр);
  ВсегоСумСнято=SumOfArray(СумСнято,Упр);
  ВсегоСумУдов=SumOfArray(СумУдов,Упр);
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if wrn=0:
    Message("Расчет завершен");
   else
    Message("Расчет завершен^MВнимание! Обнаружено отклонение сумм на текущий год и суммы БО",mtWarning);
    Template.Field="dСумБО";
    Template.Frame=wrn;
 fi;
end;

Func MyFormat(Value:N):S;
 if Round(Value,2)=0: ^"-"; fi;
 ^Format("%.2n",Value);
end;

Func MyFormat2(Value:N):S;
 if Round(Value,2)=0: ^" "; fi;
 ^Format("%.2n",Value);
end;

Proc ОтрисоватьТаблицу (rr:i);
var r,c,Iter,n1,r1,ns:i;
var Obj:Object;
var wrn:L;
 ClearVariable(Idx);
 if rr=0: Exit; fi;
 if FindObject("S3",Obj):
    Obj.RowsCount=1;
    Obj.RowsCount=rr;
    Obj.Column(5,ColVisible,False);
    Iter=1; n1=Iter; ns=1; r=0; wrn=False;
    While Iter<=Упр do
     Hint("Отрисовка таблицы...."+Str(Iter*100/Упр)+"%");
     if UKey[Iter]=Ukey[n1]: 
        if n1=Iter: --"Всего по документу"
           r=r+1;
           Idx[r]=Iter;
           r1=r;
           c=1; Obj.Cell(r,c,CellContents,Str(ns),True); Obj.Cell(r,c,CellBorder,"2,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=2; Obj.Cell(r,c,CellContents,DateToString(ДатРег[Iter]),True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=3; Obj.Cell(r,c,CellContents,НаимКонтр[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=4; Obj.Cell(r,c,CellContents,НаимДок[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFontSize,7); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=6; Obj.Cell(r,c,CellContents,DateToString(ДатДокН[Iter]),True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=7; Obj.Cell(r,c,CellContents,Содерж[Iter],True); Obj.Cell(r,c,CellFontSize,7); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=8; Obj.Cell(r,c,CellContents,КБК[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=9; Obj.Cell(r,c,CellContents,Призн1[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=10;Obj.Cell(r,c,CellContents,Призн2[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=11;Obj.Cell(r,c,CellContents,MyFormat(СумДок[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=12;Obj.Cell(r,c,CellContents,MyFormat(СумТек[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=13;Obj.Cell(r,c,CellContents,MyFormat(СумБО[Iter]),True);  Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick"); Obj.Cell(r,c,CellBgColor,12902076);
           c=14;Obj.Cell(r,c,CellContents,MyFormat(ОстДебН[Iter]),True);Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=15;Obj.Cell(r,c,CellContents,MyFormat(СумДеб[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=16;Obj.Cell(r,c,CellContents,MyFormat(ОстДебК[Iter]),True);Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=17;Obj.Cell(r,c,CellContents,MyFormat(ОстКреН[Iter]),True);Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=18;Obj.Cell(r,c,CellContents,MyFormat(СумКреН[Iter]),True);Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=19;Obj.Cell(r,c,CellContents,MyFormat(СумКре[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=20;Obj.Cell(r,c,CellContents,MyFormat(СумОпл[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=21;Obj.Cell(r,c,CellContents,MyFormat(СумЗакрАв[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=22;Obj.Cell(r,c,CellContents,MyFormat(ОстКреК[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=23;Obj.Cell(r,c,CellContents,MyFormat2(ОстИспол[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0");
           c=24;Obj.Cell(r,c,CellContents,MyFormat2(ОстОпл[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,2,1,0");
           c=25;Obj.Cell(r,c,CellContents,Статус[Iter],True);Obj.Cell(r,c,CellAlignment,2); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick"); Obj.Cell(r,c,CellBgColor,if(Match(Статус[Iter],"Исполнен*"):coLime|Match(Статус[Iter],"Расторгнут*"):coYellow,coTransparent));
           c=26;Obj.Cell(r,c,CellContents,СумПрет_[Iter],True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,1,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=27;Obj.Cell(r,c,CellContents,MyFormat(СумУдов[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+3); Obj.Cell(r,c,CellBorder,"1,2,2,1"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           r=r+1;
           Idx[r]=Iter;
           c=4; Obj.Cell(r,c,CellContents,НомДок[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=6; Obj.Cell(r,c,CellContents,DateToString(ДатДокК[Iter]),True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           r=r+1;
           Idx[r]=Iter;
           c=4; Obj.Cell(r,c,CellContents,СРЗ[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFontSize,7); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=6; Obj.Cell(r,c,CellContents,DateToString(Срок[Iter]),True); Obj.Cell(r,c,CellAlignment,2); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=11;Obj.Cell(r,c,CellContents,MyFormat2(dСумДок[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r); Obj.Cell(r,c,CellBorder,"1,0,1,0"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coBlue); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=12;Obj.Cell(r,c,CellContents,MyFormat2(dСумТек[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r); Obj.Cell(r,c,CellBorder,"1,0,1,0"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coBlue); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=13;Obj.Cell(r,c,CellContents,MyFormat2(dСумБО[Iter]),True);  Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,0,1,1"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coRed); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");  Obj.Cell(r,c,CellBgColor,12902076);
           c=19;Obj.Cell(r,c,CellContents,Format("%.1N",СумКреПр[Iter])+" %",True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,0,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=20;Obj.Cell(r,c,CellContents,Format("%.1N",СумОплПр[Iter])+" %",True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,0,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=23;Obj.Cell(r,c,CellContents,if(Round(ОстИспол[Iter],2)=0," ",Format("%.1N",ОстИсполПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,0,1,0");
           c=24;Obj.Cell(r,c,CellContents,if(Round(ОстОпл[Iter],2)=0," ",Format("%.1N",ОстОплПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r+1); Obj.Cell(r,c,CellBorder,"1,0,1,0");
           r=r+1;
           Idx[r]=Iter;
           c=4; Obj.Cell(r,c,CellContents,НомРеестр[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=11;Obj.Cell(r,c,CellContents,if(Round(dСумДок[Iter],2)=0," ",Format("%.1N",dСумДокПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r); Obj.Cell(r,c,CellBorder,"1,0,1,1"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coBlue); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=12;Obj.Cell(r,c,CellContents,if(Round(dСумТек[Iter],2)=0," ",Format("%.1N",dСумТекПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.CellLinks(c,r,c,r); Obj.Cell(r,c,CellBorder,"1,0,1,1"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coBlue); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
          else
           r=r+1;
           Idx[r]=Iter;
           c=6; Obj.Cell(r,c,CellContents,DateToString(Срок[Iter]),True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=7; Obj.Cell(r,c,CellContents,Содерж[Iter],True); Obj.Cell(r,c,CellFontSize,7); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=8; Obj.Cell(r,c,CellContents,КБК[Iter],True); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=9; Obj.Cell(r,c,CellContents,Призн1[Iter],True);  Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=10;Obj.Cell(r,c,CellContents,Призн2[Iter],True);  Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=11;Obj.Cell(r,c,CellContents,MyFormat(СумДок[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,1,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=12;Obj.Cell(r,c,CellContents,MyFormat(СумТек[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,1,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=13;Obj.Cell(r,c,CellContents,MyFormat(СумБО [Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,1,1,0"); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick"); Obj.Cell(r,c,CellBgColor,12902076);
           c=14;Obj.Cell(r,c,CellContents,MyFormat(ОстДебН[Iter]),True);Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=15;Obj.Cell(r,c,CellContents,MyFormat(СумДеб[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=16;Obj.Cell(r,c,CellContents,MyFormat(ОстДебК[Iter]),True);Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=17;Obj.Cell(r,c,CellContents,MyFormat(ОстКреН[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=18;Obj.Cell(r,c,CellContents,MyFormat(СумКреН[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=19;Obj.Cell(r,c,CellContents,MyFormat2(СумКре[Iter])+" "+Format("%.1N",СумКреПр[Iter])+" %",True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=20;Obj.Cell(r,c,CellContents,MyFormat2(СумОпл[Iter])+" "+Format("%.1N",СумОплПр[Iter])+" %",True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=21;Obj.Cell(r,c,CellContents,MyFormat(СумЗакрАв[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=22;Obj.Cell(r,c,CellContents,MyFormat(ОстКреК[Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
           c=23;Obj.Cell(r,c,CellContents,MyFormat2(ОстИспол[Iter])+if(ОстИспол[Iter]=0," "," "+Format("%.1N",ОстИсполПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1);
           c=24;Obj.Cell(r,c,CellContents,MyFormat2(ОстОпл[Iter])+if(ОстОпл[Iter]=0," "," "+Format("%.1N",ОстОплПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,1,1,1");
           if Round(dСумДок[Iter],2)<>0 or Round(dСумТек[Iter],2)<>0 or Round(dСумБО[Iter],2)<>0:
              r=r+1;
              Idx[r]=Iter;
              c=8; Obj.CellLinks(c,r-1,c,r);
              c=9; Obj.CellLinks(c,r-1,c,r);
              c=10;Obj.CellLinks(c,r-1,c,r);
              c=11;Obj.Cell(r,c,CellContents,MyFormat2(dСумДок[Iter])+if(Round(dСумДок[Iter],2)=0,""," "+Format("%.1N",dСумДокПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,0,1,1"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coBlue); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
              c=12;Obj.Cell(r,c,CellContents,MyFormat2(dСумТек[Iter])+if(Round(dСумТек[Iter],2)=0,""," "+Format("%.1N",dСумТекПр[Iter])+" %"),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,0,1,1"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coBlue); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");
              c=13;Obj.Cell(r,c,CellContents,MyFormat2(dСумБО [Iter]),True); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellBorder,"1,0,1,1"); Obj.Cell(r,c,CellFontStyle,fsItalic); Obj.Cell(r,c,CellFontColor,coRed); Obj.Cell(r,c,CellEventOnClick,"Cell_OnClick");  Obj.Cell(r,c,CellBgColor,12902076);
              c=14;Obj.CellLinks(c,r-1,c,r);
              c=15;Obj.CellLinks(c,r-1,c,r);
              c=16;Obj.CellLinks(c,r-1,c,r);
              c=17;Obj.CellLinks(c,r-1,c,r);
              c=18;Obj.CellLinks(c,r-1,c,r);
              c=19;Obj.CellLinks(c,r-1,c,r);
              c=20;Obj.CellLinks(c,r-1,c,r);
              c=21;Obj.CellLinks(c,r-1,c,r);
              c=22;Obj.CellLinks(c,r-1,c,r);
              c=23;Obj.CellLinks(c,r-1,c,r);
              c=24;Obj.CellLinks(c,r-1,c,r);
              if not wrn and Round(dСумБО[Iter],2)<>0: wrn=True; fi;
           fi;
        fi;
        Iter=Iter+1;
       else
        c=1; Obj.CellLinks(c,r1,c,r);
        c=2; Obj.CellLinks(c,r1,c,r);
        c=3; Obj.CellLinks(c,r1,c,r);
        c=4; Obj.CellLinks(c,r1+3,c,r);
        c=6; Obj.CellLinks(c,r1+2,c,r);
        c=7; Obj.CellLinks(c,r1,c,r);
        c=25;Obj.CellLinks(c,r1,c,r);
        c=26;Obj.CellLinks(c,r1,c,r);
        c=27;Obj.CellLinks(c,r1,c,r);
        if wrn: Trace("Строка №"+Str(ns)+" Внимание! Обнаружено отклонение сумм на текущий год и суммы БО"); fi;
        ns=ns+1;
        n1=Iter;
        wrn=False;
     fi;
    od;
    c=1; Obj.CellLinks(c,r1,c,r);
    c=2; Obj.CellLinks(c,r1,c,r);
    c=3; Obj.CellLinks(c,r1,c,r);
    c=4; Obj.CellLinks(c,r1+3,c,r);
    c=6; Obj.CellLinks(c,r1+2,c,r);
    c=7; Obj.CellLinks(c,r1,c,r);
    c=25;Obj.CellLinks(c,r1,c,r);
    c=26;Obj.CellLinks(c,r1,c,r);
    c=27;Obj.CellLinks(c,r1,c,r);
    Obj.Visible=True;
 fi;
 rr=AsInteger(S5.RowsCount);
 for r=1..rr do
  S5.Cell(r,8 ,CellBorder,if(fСодерж,"1,1,1,1","2,1,1,1"));
  S5.Cell(r,9 ,CellBorder,if(fСодерж or fКБК,"1,1,1,1","2,1,1,1"));
  S5.Cell(r,10,CellBorder,if(fСодерж or fКБК or fАналит1,"1,1,1,1","2,1,1,1"));
  S5.Cell(r,11,CellBorder,if(fСодерж or fКБК or fАналит1 or fАналит2,"1,1,1,1","2,1,1,1"));
 od;
 Упр=0;
end;

Proc Расчет2;
var OWA0,OWA,n,nr,z,zz,Iter,rr,y,МФ_,wrn:I;
var F0,F,ПризнКонтр_,Договор_Призн_,КБК_,Призн1_,Призн2_,ВД_,БК_,КОСГУ_,АнСч,tmp,ТекГод_,ПризнПериод_:S;
var Flag1,Flag2,Flag3,Eql:L;
var dd:d;
var Сум_:N;
var isГода,isИ,isА,f206,f302,fЗАБ:L;
var Договор_:Record;
var ДатаК_:D;
 Очистить;
 F0="Рег and not НеДейств"+if(ФЗ="",""," И ФЗ="+ФЗ);
 if ДН<>1.1.100 and ДК= 1.1.100: F0=F0+" И((Договор_Пре=nil И ДатаРег>="+Раб.Формат.ДатаСтр(ДН,1)+")or(НЕ Договор_Пре=nil И ДатаИзм>="+Раб.Формат.ДатаСтр(ДН,1)+"))";
   |ДН= 1.1.100 and ДК<>1.1.100: F0=F0+" И((Договор_Пре=nil И ДатаРег<" +Раб.Формат.ДатаСтр(ДК,1)+")or(НЕ Договор_Пре=nil И ДатаИзм<"+Раб.Формат.ДатаСтр(ДК,1)+"))";
   |ДН<>1.1.100 and ДК<>1.1.100: F0=F0+" И((Договор_Пре=nil И ДатаРег>="+Раб.Формат.ДатаСтр(ДН,1)+"И ДатаРег<"+Раб.Формат.ДатаСтр(ДК,1)+")or(НЕ Договор_Пре=nil И ДатаИзм>="+Раб.Формат.ДатаСтр(ДН,1)+"И ДатаИзм<"+Раб.Формат.ДатаСтр(ДК,1)+"))";
 fi;
 OWA0=OpenWorkArea("РПО_ДОГОВОР","ПРИЗНАК;ДОГОВОР_ПРЕ",F0);
 Try
  zz=Records(OWA0);
  for z=1..zz do
   if GetFieldR(OWA0,z,"Признак_Ref")=nil:
      Договор_Призн_=Up(GetFieldS(OWA0,z,"Признак"));
     else
      Договор_Призн_=Up(GetFieldS(OWA0,z,"Признак_Ref.Признак"));
   fi;
   AddInArray(BufДейств,True,False,Договор_Призн_);
  od;
  F="Рег";
  if not МаскаВД="" and not МаскаВД="?": F=Раб.Бюджет2005.Объединить(F,"ВД='"+МаскаВД+"'"," И "); fi;
  if not МаскаКБК="" and not МаскаКБК="???.???????.???.???": F=Раб.Бюджет2005.Объединить(F,"Match(КБК,'"+МаскаКБК+"')"," И "); fi;
  if not Аналит1="":
     F=Раб.Бюджет2005.Объединить(F,"(Pos('"+Аналит1+"',Up(Призн))>0or Pos('"+Аналит1+"',Up(Общ_Призн1))>0or Pos('"+Аналит1+"',Up(Общ_Призн2))>0)"," И ");
  fi;
  if not Аналит2="":
     F=Раб.Бюджет2005.Объединить(F,"(Pos('"+Аналит2+"',Up(Призн))>0or Pos('"+Аналит2+"',Up(Общ_Призн1))>0or Pos('"+Аналит2+"',Up(Общ_Призн2))>0)"," И ");
  fi;
  F0=ПолучитьФильтр;
  SetFilter(OWA0,F0);
  zz=Records(OWA0);
  OWA=OpenWorkArea("РПО_ДОГОВОР_ПОЗИЦИИ","ДОГОВОР_ПРИЗН;ДОГОВОР;КБК",F);
  Try
   nr=Records(OWA);
   ShowProgress(nr,"Расчет....");
   rr=0;
   Призн1_=""; Призн2_=""; ПризнПериод_=""; Договор_=nil;
   n=0;
   for y=1..12 do
    if fМес[y]:
       ПризнПериод_=Раб.Бюджет2005.Объединить(ПризнПериод_,"*."+Format("%.2D",y),"|");
       n=n+1;
    fi;
   od;
   if n>0 and n<12: ПризнПериод_="&(ПЕРИОД."+Str(Year(ДН))+".*&("+ПризнПериод_+"))"; else ПризнПериод_=""; fi;
   for n=1..nr do
    ProgressPos(n);
    if not Договор_=GetFieldR(OWA,n,"ДОГОВОР"):
       Flag3=True;
       Договор_=GetFieldR(OWA,n,"ДОГОВОР");
       z=GetRecordNumber(OWA0,Договор_);
       if z=0:
          Flag1=False;
         else
          Flag1=z=zz;
          if not Flag1: Flag1=not Договор_=GetFieldR(OWA0,z+1,"Договор_Пре"); fi;
          if Flag1:
             if GetFieldL(OWA0,z,"НеДейств"): --делаем на проверка действующего экземпляра в предалх даты отчета
                if GetFieldR(OWA0,z,"Признак_Ref")=nil:
                   Договор_Призн_=Up(GetFieldS(OWA0,z,"Признак"));
                  else
                   Договор_Призн_=Up(GetFieldS(OWA0,z,"Признак_Ref.Признак"));
                fi;
                Flag1=SearchInArray(BufДейств,Договор_Призн_,True)=-1;
             fi;
             isИ=GetFieldL(OWA0,z,"Исполнен");
             isА=GetFieldL(OWA0,z,"Аннулирован");
             ДатаК_=GetFieldD(OWA0,z,"ДатаК");
             if fТек: Flag1=not isИ and not isА;
               |fИспол and fАннул and fСрок: Flag1=isИ or isА or (ДатаК_<ДК and ДатаК_>1.1.100);
               |fИспол and fАннул          : Flag1=isИ or isА;
               |fИспол and fСрок           : Flag1=isИ or (ДатаК_<ДК and ДатаК_>1.1.100);
               |fИспол                     : Flag1=isИ;
               |fАннул and fСрок           : Flag1=isА or (ДатаК_<ДК and ДатаК_>1.1.100);
               |fАннул                     : Flag1=isА;
               |fСрок                      : Flag1=not isИ and not isА and ДатаК_<ДК and ДатаК_>1.1.100;
             fi;
          fi;
       fi;
    fi;
    if Flag1 and Flag3:
       if fМес[01] or fМес[02] or fМес[03] or fМес[04] or fМес[05] or fМес[06] or fМес[07] or fМес[08] or fМес[09] or fМес[10] or fМес[11] or fМес[12]:
          МФ_=Int(GetFieldS(OWA,n,"МФ"));
          Flag2=False;
          if МФ_=0:
             if Int(GetFieldS(OWA,n,"ДОГОВОР.ТЕКГОД"))=Year(ДатаК_):
                МФ_=Mon(ДатаК_);
               else
                МФ_=12;
             fi;
          fi;
          if not Round(GetFieldN(OWA,n,"Сум"),2)=0 or ((isИ or isА) and not Round(GetFieldN(OWA,n,"ФактОпл"),2)=0):
             for y=1..12 do
              if МФ_=y and fМес[y]:
                 Flag2=True;
                 Break;
              fi;
             od;
          fi;
         else
          Flag2=True;
       fi;
    fi;
    if Flag1 and Flag2 and Flag3:
       if fАналит1:
          Призн1_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OWA,n,"Призн")," ",Справ1,"");
          if Призн1_="": Призн1_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OWA,n,"Договор.Общ_Призн1")," ",Справ1,""); fi;
          if Призн1_="": Призн1_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OWA,n,"Договор.Общ_Призн2")," ",Справ1,""); fi;
          if not Аналит1="" and not fГрАналит1:
             Flag1=Призн1_=Аналит1;
          fi;
       fi;
       if fАналит2 and Flag1:
          Призн2_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OWA,n,"Призн")," ",Справ2,"");
          if Призн2_="": Призн2_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OWA,n,"Договор.Общ_Призн1")," ",Справ2,""); fi;
          if Призн2_="": Призн2_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OWA,n,"Договор.Общ_Призн2")," ",Справ2,""); fi;
          if not Аналит2="" and not fГрАналит2:
             Flag2=Призн2_=Аналит2;
          fi;
       fi;
    fi;
    if Flag1 and Flag2 and Flag3:
       Договор_Призн_=СправДоговор+"."+GetFieldS(OWA,n,"Договор.Признак");
       ПризнКонтр_=GetFieldS(OWA,n,"Договор.Контр_Призн");
       ВД_="?";
       КБК_="";
       БК_="*";
       КОСГУ_="???";
       АнСч="??";
       --
       dd=GetFieldD(OWA,n,"Договор.ДатаРег");
       tmp=Раб.Формат.ДатаСтр(dd,Раб.Формат.dfYYYYMMDD);
       if SearchInArray(Key,tmp+" "+Договор_Призн_,True)=-1:
          z=InsertInArraySort(Key,tmp+" "+Договор_Призн_);
          InsertFrame(Упр,z);
          UKey[z]=GetFieldR(OWA,n,"ДОГОВОР");
          ПризнКонтр[z]=ПризнКонтр_;
          ПризнДоговор[z]=Договор_Призн_;
          ДатРег[z]=GetFieldD(OWA,n,"ДОГОВОР.ДАТАРЕГ");
          НаимКонтр[z]=GetFieldS(OWA,n,"ДОГОВОР.КОНТР.КОРИМЯ");
          НаимДок[z]=GetFieldS(OWA,n,"ДОГОВОР.НАИМДОК.НАИМ");
          НомДок[z]=GetFieldS(OWA,n,"ДОГОВОР.НОМЕРДОК");
          ДатДок[z]=GetFieldD(OWA,n,"ДОГОВОР.ДАТАДОК");
          НомДок[z]=Раб.Бюджет2005.Объединить(НомДок[z],DateToString(ДатДок[z])," от ");
          НомРеестр[z]=GetFieldS(OWA,n,"ДОГОВОР.НОМ_РЕЕСТР_ОФК");
          ДатРеестр[z]=GetFieldD(OWA,n,"ДОГОВОР.ДАТА_РЕЕСТР_ОФК");
          НомРеестр[z]=Раб.Бюджет2005.Объединить(НомРеестр[z],DateToString(ДатРеестр[z])," от ");
          СРЗ[z]=if(GetFieldL(OWA,n,"ДОГОВОР.Учет_Реестр_ОФК"),GetFieldS(OWA,n,"ДОГОВОР.РазмещЗаказ"),"0");
          if Length(СРЗ[z])=5:
             СРЗ[z]=Раб.Договор.СОП2СРЗ(СРЗ[z],"СОП");
          fi;
          СРЗ[z]=Раб.Договор.РазмещениеЗаказа(СРЗ[z],False,"44ФЗ");
          ДатДокН[z]=GetFieldD(OWA,n,"ДОГОВОР.ДАТАН");
          ДатДокК[z]=ДатаК_;
          Срок[z]=GetFieldD(OWA,n,"Договор.Срок");
          Содерж[z]=GetFieldS(OWA,n,"ДОГОВОР.СОДЕРЖ");
          if not GetFieldR(OWA,n,"ДОГОВОР.НаимИзм")=nil:
             Содерж[z]=Содерж[z]+" ("+GetFieldS(OWA,n,"Договор.НаимИзм.Наим")+" №"+GetFieldS(OWA,n,"Договор.НомерИзм")+" от "+DateToString(GetFieldD(OWA,n,"Договор.ДатаДИзм"))+")";
          fi;
          КБК[z]="Всего";
          Призн1[z]="Всего";
          Призн2[z]="Всего";
          СумДок[z]=GetFieldN(OWA,n,"ДОГОВОР.СУМДОК");
          ТекГод_=GetFieldS(OWA,n,"Договор.ТекГод");
          isГода=GetFieldL(OWA,n,"Договор.Учет_Реестр_ОФК") or GetFieldI(OWA,n,"Договор.ver")>0;
          if ТекГод_=Str(Year(ДН)):
             СумТек[z]=GetFieldN(OWA,n,"ДОГОВОР.СУМТЕК");
            else
             if isГода:
                if GetFieldS(OWA,n,"Договор.Год1")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод1");
                  |GetFieldS(OWA,n,"Договор.Год2")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод2");
                  |GetFieldS(OWA,n,"Договор.Год3")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод3");
                  |GetFieldS(OWA,n,"Договор.Год4")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод4");
                  |GetFieldS(OWA,n,"Договор.Год5")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод5");
                  |GetFieldS(OWA,n,"Договор.Год6")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод6");
                  |GetFieldS(OWA,n,"Договор.Год7")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод7");
                  |GetFieldS(OWA,n,"Договор.Год8")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод8");
                  |GetFieldS(OWA,n,"Договор.Год9")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод9");
                  |GetFieldS(OWA,n,"Договор.Год10")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"Договор.СумГод10");
                  |True: СумТек[z]=0;
                fi;
               else
                СумТек[z]=0;
             fi;
          fi;
          Eql=Round(СумДок[z],2)=Round(СумТек[z],2);
          СумБО[z]=Turn("*."+ВД_+".501.13.*|*."+ВД_+".506.10.*/*."+ВД_+".502.11.*{"+ПризнДоговор[z]+"}",ДН,ДК);
          if ExistsTransactions("*."+ВД_+".206.??.???{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
             ОстДебН[z]=Saldo("*."+ВД_+".206.??.???{"+ПризнДоговор[z]+"!}",ДН);
             СумДеб[z]=Turn("*."+ВД_+".206.??.560{"+ПризнДоговор[z]+"!}",ДН,ДК);
             СумЗакрАв[z]=-Saldo("*."+ВД_+".206.??.660{"+ПризнДоговор[z]+"!}",ДК);
             f206=True;
            else
             f206=False;
          fi;
          if ExistsTransactions("*."+ВД_+".302.??.???{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
             ОстКреН[z]=-Saldo("*."+ВД_+".302.??.???{"+ПризнДоговор[z]+"!}",ДН);
             СумКреН[z]=-Turn("*."+ВД_+".302.??.730{"+ПризнДоговор[z]+"!&ПЕРИОД.*&~ПЕРИОД."+Str(Year(ДН))+"!}",ДН,ДК);
             СумКре[z]=-Turn("*."+ВД_+".302.??.730{"+ПризнДоговор[z]+"!&(ПЕРИОД."+Str(Year(ДН))+"!|~ПЕРИОД.*)}",ДН,ДК);
             СумОпл[z]=Turn("*."+ВД_+".302.??.830{"+ПризнДоговор[z]+"!}",ДН,ДК)-Turn("*."+ВД_+".302.??.830/*."+ВД_+".206.??.660{"+ПризнДоговор[z]+"!}",ДН,ДК);
             f302=True;
            else
             f302=False;
          fi;
          if fЗКР:
             if ExistsTransactions("*."+ВД_+".ЗАБ.КР.*{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
                СумДеб[z]=СумДеб[z]+Turn("*."+ВД_+".ЗАБ.00.560/*."+ВД_+".ЗАБ.КР.*{"+ПризнДоговор[z]+"!}",ДН,ДК);
                СумОпл[z]=СумОпл[z]+Turn("*."+ВД_+".ЗАБ.00.830/*."+ВД_+".ЗАБ.КР.*{"+ПризнДоговор[z]+"!}",ДН,ДК);
                fЗАБ=True;
               else
                fЗАБ=False;
             fi;
          fi;
          if isИ:
             Статус[z]="Исполнен"+" "+DateToString(GetFieldD(OWA,n,"ДОГОВОР.ИСПОЛДАТА"));
             dСумДок[z]=GetFieldN(OWA,n,"Договор.ИсполФактОпл")-СумДок[z];
             if Eql:
                dСумТек[z]=dСумДок[z];
               else
                if isГода:
                   Сум_=if(GetFieldS(OWA,n,"Договор.Год1")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год1")="",GetFieldN(OWA,n,"Договор.СумГод1"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год2")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год2")="",GetFieldN(OWA,n,"Договор.СумГод2"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год3")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год3")="",GetFieldN(OWA,n,"Договор.СумГод3"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год4")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год4")="",GetFieldN(OWA,n,"Договор.СумГод4"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год5")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год5")="",GetFieldN(OWA,n,"Договор.СумГод5"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год6")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год6")="",GetFieldN(OWA,n,"Договор.СумГод6"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год7")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год7")="",GetFieldN(OWA,n,"Договор.СумГод7"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год8")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год8")="",GetFieldN(OWA,n,"Договор.СумГод8"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год9")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год9")="",GetFieldN(OWA,n,"Договор.СумГод9"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год10")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год10")="",GetFieldN(OWA,n,"Договор.СумГод10"),0); --считаем суммы кбк по годом исключая текущий
                   dСумТек[z]=GetFieldN(OWA,n,"Договор.ИсполФактОпл")-Сум_-СумТек[z];
                   if СумТек[z]=0: dСумТек[z]=0; fi; --????
                  else
                   dСумТек[z]=GetFieldN(OWA,n,"Договор.ИсполФактОпл")-СумТек[z];
                fi;
             fi;
            |isА:
             Статус[z]="Расторгнут"+" "+DateToString(GetFieldD(OWA,n,"ДОГОВОР.АННУЛДАТА"));
             dСумДок[z]=GetFieldN(OWA,n,"Договор.АннулФактОпл")-СумДок[z];
             if Eql:
                dСумТек[z]=dСумДок[z];
               else
                if isГода:
                   ТекГод_=GetFieldS(OWA,n,"Договор.ТекГод");
                   Сум_=if(GetFieldS(OWA,n,"Договор.Год1")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год1")="",GetFieldN(OWA,n,"Договор.СумГод1"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год2")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год2")="",GetFieldN(OWA,n,"Договор.СумГод2"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год3")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год3")="",GetFieldN(OWA,n,"Договор.СумГод3"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год4")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год4")="",GetFieldN(OWA,n,"Договор.СумГод4"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год5")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год5")="",GetFieldN(OWA,n,"Договор.СумГод5"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год6")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год6")="",GetFieldN(OWA,n,"Договор.СумГод6"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год7")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год7")="",GetFieldN(OWA,n,"Договор.СумГод7"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год8")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год8")="",GetFieldN(OWA,n,"Договор.СумГод8"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год9")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год9")="",GetFieldN(OWA,n,"Договор.СумГод9"),0)
                       +if(GetFieldS(OWA,n,"Договор.Год10")<ТекГод_ and not GetFieldS(OWA,n,"Договор.Год10")="",GetFieldN(OWA,n,"Договор.СумГод10"),0); --считаем суммы кбк по годом исключая текущий
                   dСумТек[z]=GetFieldN(OWA,n,"Договор.АннулФактОпл")-Сум_-СумТек[z];
                   if СумТек[z]=0: dСумТек[z]=0; fi; --????
                  else
                   dСумТек[z]=GetFieldN(OWA,n,"Договор.АннулФактОпл")-СумТек[z];
                fi;
             fi;
            |True: Статус[z]="Текущий";
          fi;
          if ExistsTransactions("*.?.205.41.*{"+ПризнДоговор[z]+"!}",1.1.100,ДК):
             СумПрет[z]=Saldo("*.?.205.41.560{"+ПризнДоговор[z]+"!}",ДК);
             СумСнято[z]=Turn("-*.?.205.41.560{"+ПризнДоговор[z]+"!}",1.1.100,ДК);
             СумСнято[z]=СумСнято[z]-Turn("*.?.401.10.*/*.?.205.41.660{"+ПризнДоговор[z]+"!}",1.1.100,ДК);
             СумУдов[z]=Turn("~*.?.401.10.*/*.?.205.41.660{"+ПризнДоговор[z]+"!}",1.1.100,ДК);
          fi;
          if fУслИспол:
             if УслИспол=">": Flag3=Round(СумКреПр[z],1)>Round(ЗначИспол,1);
               |УслИспол=">=":Flag3=Round(СумКреПр[z],1)>=Round(ЗначИспол,1);
               |УслИспол="=": Flag3=Round(СумКреПр[z],1)=Round(ЗначИспол,1);
               |УслИспол="<=":Flag3=Round(СумКреПр[z],1)<=Round(ЗначИспол,1);
               |УслИспол="<": Flag3=Round(СумКреПр[z],1)<Round(ЗначИспол,1);
             fi;
            else
             Flag3=true;
          fi;
          if fУслОпл and Flag3:
             if УслОпл=">": Flag3=Round(СумОплПр[z],1)>Round(ЗначОпл,1);
               |УслОпл=">=":Flag3=Round(СумОплПр[z],1)>=Round(ЗначОпл,1);
               |УслОпл="=": Flag3=Round(СумОплПр[z],1)=Round(ЗначОпл,1);
               |УслОпл="<=":Flag3=Round(СумОплПр[z],1)<=Round(ЗначОпл,1);
               |УслОпл="<": Flag3=Round(СумОплПр[z],1)<Round(ЗначОпл,1);
             fi;
          fi;
          if Flag3:
             rr=rr+4;
            else
             DeleteFromArray(Key,z);
             DeleteFrame(Упр,z);
          fi;
       fi; --if SearchInArray(Key,Договор_Призн_,True)=-1:
       if Flag3:
          if fКБК:
             ВД_=GetFieldS(OWA,n,"ВД");
             КБК_=GetFieldS(OWA,n,"КБК");
             БК_=SubStr(КБК_,1,20);
             КОСГУ_=SubStr(КБК_,22,3);
             АнСч=Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ_);
          fi;
          z=SearchInArray(Key,tmp+" "+Договор_Призн_+" "+ВД_+" "+КБК_+" "+Призн1_+" "+Призн2_,True);
          if z=-1:
             z=InsertInArraySort(Key,tmp+" "+Договор_Призн_+" "+ВД_+" "+КБК_+" "+Призн1_+" "+Призн2_);
             InsertFrame(Упр,z);
             UKey[z]=GetFieldR(OWA,n,"ДОГОВОР");
             КБК[z]=ВД_+" "+КБК_;
             Призн1[z]=Призн1_;
             Призн2[z]=Призн2_;
             if ТекГод_=Str(Year(ДН)):
                СумТек[z]=GetFieldN(OWA,n,"СУМ");
               else
                if isГода:
                   if GetFieldS(OWA,n,"Год1")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод1");
                     |GetFieldS(OWA,n,"Год2")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод2");
                     |GetFieldS(OWA,n,"Год3")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод3");
                     |GetFieldS(OWA,n,"Год4")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод4");
                     |GetFieldS(OWA,n,"Год5")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод5");
                     |GetFieldS(OWA,n,"Год6")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод6");
                     |GetFieldS(OWA,n,"Год7")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод7");
                     |GetFieldS(OWA,n,"Год8")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод8");
                     |GetFieldS(OWA,n,"Год9")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод9");
                     |GetFieldS(OWA,n,"Год10")=ТекГод_: СумТек[z]=GetFieldN(OWA,n,"СумГод10");
                     |True: СумТек[z]=0;
                   fi;
                  else
                   СумТек[z]=0;
                fi;
             fi;
             if isГода:
                СумДок[z]=GetFieldN(OWA,n,"СУМГОД1")+GetFieldN(OWA,n,"СУМГОД2")+GetFieldN(OWA,n,"СУМГОД3")+GetFieldN(OWA,n,"СУМГОД4")+GetFieldN(OWA,n,"СУМГОД5")+GetFieldN(OWA,n,"СУМГОД6")+GetFieldN(OWA,n,"СУМГОД7")+GetFieldN(OWA,n,"СУМГОД8")+GetFieldN(OWA,n,"СУМГОД9")+GetFieldN(OWA,n,"СУМГОД10");
               else
                if Eql: СумДок[z]=СумТек[z]; fi;
             fi;
             ПризнКонтр[z]=ПризнКонтр_;
             ПризнДоговор[z]=Договор_Призн_;
             tmp=Раб.Бюджет2005.Объединить(Призн1_,Призн2_,"&");
             if not tmp="": tmp=tmp+"&"; fi;
             СумБО[z]=MyTurn("*."+ВД_+".501.13.*|*."+ВД_+".506.10.*/"+БК_+"."+ВД_+".502.11."+КОСГУ_+"{"+tmp+ПризнДоговор[z]+ПризнПериод_+"}",ДН,ДК);
             if f206:
                if ExistsTransactions(БК_+"."+ВД_+".206."+АнСч+".???{"+tmp+ПризнДоговор[z]+"!}",1.1.100,ДК):
                   ОстДебН[z]=MySaldo(БК_+"."+ВД_+".206."+АнСч+".???{"+tmp+ПризнДоговор[z]+"!}",ДН);
                   СумДеб[z]=MyTurn(БК_+"."+ВД_+".206."+АнСч+".560{"+tmp+ПризнДоговор[z]+"!}",ДН,ДК);
                   СумЗакрАв[z]=-MySaldo(БК_+"."+ВД_+".206."+АнСч+".660{"+tmp+ПризнДоговор[z]+"!}",ДК);
                fi;
             fi;
             if f302:
                if ExistsTransactions(БК_+"."+ВД_+".302."+АнСч+".???{"+tmp+ПризнДоговор[z]+"!}",1.1.100,ДК):
                   ОстКреН[z]=-MySaldo(БК_+"."+ВД_+".302."+АнСч+".???{"+tmp+ПризнДоговор[z]+"!}",ДН);
                   СумКреН[z]=-MyTurn(БК_+"."+ВД_+".302."+АнСч+".730{"+tmp+ПризнДоговор[z]+"!&ПЕРИОД.*&~ПЕРИОД."+Str(Year(ДН))+"!}",ДН,ДК);
                   СумКре[z]=-MyTurn(БК_+"."+ВД_+".302."+АнСч+".730{"+tmp+ПризнДоговор[z]+"!&(ПЕРИОД."+Str(Year(ДН))+"!|~ПЕРИОД.*)}",ДН,ДК);
                   СумОпл[z]=MyTurn(БК_+"."+ВД_+".302."+АнСч+".830{"+tmp+ПризнДоговор[z]+"!}",ДН,ДК)-MyTurn(БК_+"."+ВД_+".302."+АнСч+".830/"+БК_+"."+ВД_+".206."+АнСч+".660{"+tmp+ПризнДоговор[z]+"!}",ДН,ДК);
                fi;
             fi;
             if fЗКР and fЗАБ:
                if ExistsTransactions(БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+"{"+tmp+ПризнДоговор[z]+"!}",1.1.100,ДК):
                   СумДеб[z]=СумДеб[z]+MyTurn(БК_+"."+ВД_+".ЗАБ.00.560/"+БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+"{"+tmp+ПризнДоговор[z]+"!}",ДН,ДК);
                   СумОпл[z]=СумОпл[z]+MyTurn(БК_+"."+ВД_+".ЗАБ.00.830/"+БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+"{"+tmp+ПризнДоговор[z]+"!}",ДН,ДК);
                fi;
             fi;
             if isИ:
                Статус[z]="Исполнен"+" "+DateToString(GetFieldD(OWA,n,"ДОГОВОР.ИСПОЛДАТА"));
                dСумДок[z]=GetFieldN(OWA,n,"ФактОпл")-СумДок[z];
                if Eql:
                   dСумТек[z]=dСумДок[z];
                  else
                   if isГода:
                      Сум_=if(GetFieldS(OWA,n,"Год1")<ТекГод_ and not GetFieldS(OWA,n,"Год1")="",GetFieldN(OWA,n,"СумГод1"),0)
                          +if(GetFieldS(OWA,n,"Год2")<ТекГод_ and not GetFieldS(OWA,n,"Год2")="",GetFieldN(OWA,n,"СумГод2"),0)
                          +if(GetFieldS(OWA,n,"Год3")<ТекГод_ and not GetFieldS(OWA,n,"Год3")="",GetFieldN(OWA,n,"СумГод3"),0)
                          +if(GetFieldS(OWA,n,"Год4")<ТекГод_ and not GetFieldS(OWA,n,"Год4")="",GetFieldN(OWA,n,"СумГод4"),0)
                          +if(GetFieldS(OWA,n,"Год5")<ТекГод_ and not GetFieldS(OWA,n,"Год5")="",GetFieldN(OWA,n,"СумГод5"),0)
                          +if(GetFieldS(OWA,n,"Год6")<ТекГод_ and not GetFieldS(OWA,n,"Год6")="",GetFieldN(OWA,n,"СумГод6"),0)
                          +if(GetFieldS(OWA,n,"Год7")<ТекГод_ and not GetFieldS(OWA,n,"Год7")="",GetFieldN(OWA,n,"СумГод7"),0)
                          +if(GetFieldS(OWA,n,"Год8")<ТекГод_ and not GetFieldS(OWA,n,"Год8")="",GetFieldN(OWA,n,"СумГод8"),0)
                          +if(GetFieldS(OWA,n,"Год9")<ТекГод_ and not GetFieldS(OWA,n,"Год9")="",GetFieldN(OWA,n,"СумГод9"),0)
                          +if(GetFieldS(OWA,n,"Год10")<ТекГод_ and not GetFieldS(OWA,n,"Год10")="",GetFieldN(OWA,n,"СумГод10"),0); --считаем суммы кбк по годом исключая текущий
                      dСумТек[z]=GetFieldN(OWA,n,"ФактОпл")-Сум_-СумТек[z];
                     else
                      dСумТек[z]=GetFieldN(OWA,n,"ФактОпл")-СумТек[z];
                   fi;
                fi;
               |isА:
                Статус[z]="Расторгнут"+" "+DateToString(GetFieldD(OWA,n,"ДОГОВОР.АННУЛДАТА"));
                dСумДок[z]=GetFieldN(OWA,n,"ФактОпл")-СумДок[z];
                if Eql:
                   dСумТек[z]=dСумДок[z];
                  else
                   if isГода:
                      ТекГод_=GetFieldS(OWA,n,"Договор.ТекГод");
                      Сум_=if(GetFieldS(OWA,n,"Год1")<ТекГод_ and not GetFieldS(OWA,n,"Год1")="",GetFieldN(OWA,n,"СумГод1"),0)
                          +if(GetFieldS(OWA,n,"Год2")<ТекГод_ and not GetFieldS(OWA,n,"Год2")="",GetFieldN(OWA,n,"СумГод2"),0)
                          +if(GetFieldS(OWA,n,"Год3")<ТекГод_ and not GetFieldS(OWA,n,"Год3")="",GetFieldN(OWA,n,"СумГод3"),0)
                          +if(GetFieldS(OWA,n,"Год4")<ТекГод_ and not GetFieldS(OWA,n,"Год4")="",GetFieldN(OWA,n,"СумГод4"),0)
                          +if(GetFieldS(OWA,n,"Год5")<ТекГод_ and not GetFieldS(OWA,n,"Год5")="",GetFieldN(OWA,n,"СумГод5"),0)
                          +if(GetFieldS(OWA,n,"Год6")<ТекГод_ and not GetFieldS(OWA,n,"Год6")="",GetFieldN(OWA,n,"СумГод6"),0)
                          +if(GetFieldS(OWA,n,"Год7")<ТекГод_ and not GetFieldS(OWA,n,"Год7")="",GetFieldN(OWA,n,"СумГод7"),0)
                          +if(GetFieldS(OWA,n,"Год8")<ТекГод_ and not GetFieldS(OWA,n,"Год8")="",GetFieldN(OWA,n,"СумГод8"),0)
                          +if(GetFieldS(OWA,n,"Год9")<ТекГод_ and not GetFieldS(OWA,n,"Год9")="",GetFieldN(OWA,n,"СумГод9"),0)
                          +if(GetFieldS(OWA,n,"Год10")<ТекГод_ and not GetFieldS(OWA,n,"Год10")="",GetFieldN(OWA,n,"СумГод10"),0); --считаем суммы кбк по годом исключая текущий
                      dСумТек[z]=GetFieldN(OWA,n,"ФактОпл")-Сум_-СумТек[z];
                     else
                      dСумТек[z]=GetFieldN(OWA,n,"ФактОпл")-СумТек[z];
                   fi;
                fi;
               |True: Статус[z]="Текущий";
             fi;
             rr=rr+1;
            else
             if ТекГод_=Str(Year(ДН)):
                СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СУМ");
               else
                if isГода:
                   if GetFieldS(OWA,n,"Год1")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод1");
                     |GetFieldS(OWA,n,"Год2")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод2");
                     |GetFieldS(OWA,n,"Год3")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод3");
                     |GetFieldS(OWA,n,"Год4")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод4");
                     |GetFieldS(OWA,n,"Год5")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод5");
                     |GetFieldS(OWA,n,"Год6")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод6");
                     |GetFieldS(OWA,n,"Год7")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод7");
                     |GetFieldS(OWA,n,"Год8")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод8");
                     |GetFieldS(OWA,n,"Год9")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод9");
                     |GetFieldS(OWA,n,"Год10")=ТекГод_: СумТек[z]=СумТек[z]+GetFieldN(OWA,n,"СумГод10");
                   fi;
                fi;
             fi;
             if isГода:
                СумДок[z]=СумДок[z]+GetFieldN(OWA,n,"СУМГОД1")+GetFieldN(OWA,n,"СУМГОД2")+GetFieldN(OWA,n,"СУМГОД3")+GetFieldN(OWA,n,"СУМГОД4")+GetFieldN(OWA,n,"СУМГОД5")+GetFieldN(OWA,n,"СУМГОД6")+GetFieldN(OWA,n,"СУМГОД7")+GetFieldN(OWA,n,"СУМГОД8")+GetFieldN(OWA,n,"СУМГОД9")+GetFieldN(OWA,n,"СУМГОД10");
               else
                if Eql: СумДок[z]=СумТек[z]; fi;
             fi;
             if isИ or isА:
                if isГода:
                   dСумДок[z]=dСумДок[z]+GetFieldN(OWA,n,"ФактОпл")-(GetFieldN(OWA,n,"СУМГОД1")+GetFieldN(OWA,n,"СУМГОД2")+GetFieldN(OWA,n,"СУМГОД3")+GetFieldN(OWA,n,"СУМГОД4")+GetFieldN(OWA,n,"СУМГОД5")+GetFieldN(OWA,n,"СУМГОД6")+GetFieldN(OWA,n,"СУМГОД7")+GetFieldN(OWA,n,"СУМГОД8")+GetFieldN(OWA,n,"СУМГОД9")+GetFieldN(OWA,n,"СУМГОД10"));
                   if Eql:
                      dСумТек[z]=dСумДок[z];
                     else
                      ТекГод_=GetFieldS(OWA,n,"Договор.ТекГод");
                      Сум_=if(GetFieldS(OWA,n,"Год1")<ТекГод_ and not GetFieldS(OWA,n,"Год1")="",GetFieldN(OWA,n,"СумГод1"),0)
                          +if(GetFieldS(OWA,n,"Год2")<ТекГод_ and not GetFieldS(OWA,n,"Год2")="",GetFieldN(OWA,n,"СумГод2"),0)
                          +if(GetFieldS(OWA,n,"Год3")<ТекГод_ and not GetFieldS(OWA,n,"Год3")="",GetFieldN(OWA,n,"СумГод3"),0)
                          +if(GetFieldS(OWA,n,"Год4")<ТекГод_ and not GetFieldS(OWA,n,"Год4")="",GetFieldN(OWA,n,"СумГод4"),0)
                          +if(GetFieldS(OWA,n,"Год5")<ТекГод_ and not GetFieldS(OWA,n,"Год5")="",GetFieldN(OWA,n,"СумГод5"),0)
                          +if(GetFieldS(OWA,n,"Год6")<ТекГод_ and not GetFieldS(OWA,n,"Год6")="",GetFieldN(OWA,n,"СумГод6"),0)
                          +if(GetFieldS(OWA,n,"Год7")<ТекГод_ and not GetFieldS(OWA,n,"Год7")="",GetFieldN(OWA,n,"СумГод7"),0)
                          +if(GetFieldS(OWA,n,"Год8")<ТекГод_ and not GetFieldS(OWA,n,"Год8")="",GetFieldN(OWA,n,"СумГод8"),0)
                          +if(GetFieldS(OWA,n,"Год9")<ТекГод_ and not GetFieldS(OWA,n,"Год9")="",GetFieldN(OWA,n,"СумГод9"),0)
                          +if(GetFieldS(OWA,n,"Год10")<ТекГод_ and not GetFieldS(OWA,n,"Год10")="",GetFieldN(OWA,n,"СумГод10"),0); --считаем суммы кбк по годом исключая текущий
                      dСумТек[z]=dСумТек[z]+GetFieldN(OWA,n,"ФактОпл")-Сум_-GetFieldN(OWA,n,"Сум");
                   fi;
                  else
                   dСумТек[z]=dСумТек[z]+GetFieldN(OWA,n,"ФактОпл")-GetFieldN(OWA,n,"Сум");
                   if Eql: dСумДок[z]=dСумТек[z]; fi;
                fi; --if GetFieldL(OWA,n,"ДОГОВОР.УЧЕТ_РЕЕСТР_ОФК"):
             fi; --if GetFieldL(OWA,n,"ДОГОВОР.ИСПОЛНЕН") or GetFieldL(OWA,n,"ДОГОВОР.АННУЛИРОВАН"):
          fi; --if z=-1:
       fi;--if Flag3:
    fi; --if Flag1 and Flag2 and Flag3:
   od;
   ClearVariable(Key);
   for Iter=1..Упр do
    if (Round(dСумДок[Iter],2)<>0 or Round(dСумТек[Iter],2)<>0 or Round(dСумБО[Iter],2)<>0) and not КБК[Iter]="Всего" and not Призн1[Iter]="Всего" and not Призн2[Iter]="Всего": rr=rr+1; fi;
    if not КБК[Iter]="Всего" and not Призн1[Iter]="Всего" and not Призн2[Iter]="Всего":
       if СумТек[Iter]=0: dСумТек[Iter]=0; fi; --????
       z=SearchInArray(Key,КБК[Iter]+" "+Призн1[Iter]+" "+Призн2[Iter],True);
       if z=-1:
          z=InsertInArraySort(Key,КБК[Iter]+" "+Призн1[Iter]+" "+Призн2[Iter]);
          InsertFrame(УпрКБК,z);
          ИтогКБК[z]=КБК[Iter];
          ИтогПризн1[z]=Призн1[Iter];
          ИтогПризн2[z]=Призн2[Iter];
       fi;
       ИтогСумДок[z]=ИтогСумДок[z]+СумДок[Iter]+dСумДок[Iter];
       ИтогdСумДок[z]=ИтогdСумДок[z]+dСумДок[Iter];
       ИтогСумТек[z]=ИтогСумТек[z]+СумТек[Iter]+dСумТек[Iter];
       ИтогdСумТек[z]=ИтогdСумТек[z]+dСумТек[Iter];
       ИтогСумБО [z]=ИтогСумБО [z]+СумБО [Iter];
       ИтогОстДебН[z]=ИтогОстДебН[z]+ОстДебН[Iter];
       ИтогСумДеб[z]=ИтогСумДеб[z]+СумДеб[Iter];
       ИтогОстДебК[z]=ИтогОстДебК[z]+ОстДебК[Iter];
       ИтогОстКреН[z]=ИтогОстКреН[z]+ОстКреН[Iter];
       ИтогСумКреН[z]=ИтогСумКреН[z]+СумКреН[Iter];
       ИтогСумКре[z]=ИтогСумКре[z]+СумКре[Iter];
       ИтогСумОпл[z]=ИтогСумОпл[z]+СумОпл[Iter];
       ИтогСумЗакрАв[z]=ИтогСумЗакрАв[z]+СумЗакрАв[Iter];
       ИтогОстКреК[z]=ИтогОстКреК[z]+ОстКреК[Iter];
       ИтогОстИспол[z]=ИтогОстИспол[z]+ОстИспол[Iter];
       ИтогОстОпл[z]=ИтогОстОпл[z]+ОстОпл[Iter];
    fi;
   od;
   ВсегоСумДок=SumOfArray(ИтогСумДок,УпрКБК);
   ВсегоdСумДок=SumOfArray(ИтогdСумДок,УпрКБК);
   ВсегоСумТек=SumOfArray(ИтогСумТек,УпрКБК);
   ВсегоdСумТек=SumOfArray(ИтогdСумТек,УпрКБК);
   ВсегоСумБО=SumOfArray(ИтогСумБО,УпрКБК);
   ВсегоОстДебН=SumOfArray(ИтогОстДебН,УпрКБК);
   ВсегоСумДеб=SumOfArray(ИтогСумДеб,УпрКБК);
   ВсегоОстДебК=SumOfArray(ИтогОстДебК,УпрКБК);
   ВсегоОстКреН=SumOfArray(ИтогОстКреН,УпрКБК);
   ВсегоСумКреН=SumOfArray(ИтогСумКреН,УпрКБК);
   ВсегоСумКре=SumOfArray(ИтогСумКре,УпрКБК);
   ВсегоСумОпл=SumOfArray(ИтогСумОпл,УпрКБК);
   ВсегоСумЗакрАв=SumOfArray(ИтогСумЗакрАв,УпрКБК);
   ВсегоОстКреК=SumOfArray(ИтогОстКреК,УпрКБК);
   ВсегоОстИспол=SumOfArray(ИтогОстИспол,УпрКБК);
   ВсегоОстОпл=SumOfArray(ИтогОстОпл,УпрКБК);
   ВсегоСумПрет=SumOfArray(СумПрет,Упр);
   ВсегоСумСнято=SumOfArray(СумСнято,Упр);
   ВсегоСумУдов=SumOfArray(СумУдов,Упр);
  Finally
   CloseWorkArea(OWA);
  end;
 Finally
  CloseWorkArea(OWA0);
  CloseProgress;
 end;
 ОтрисоватьТаблицу(rr);
 if wrn=0:
    Message("Расчет завершен");
   else
    Message("Расчет завершен^MВнимание! Обнаружено отклонение сумм на текущий год и суммы БО",mtWarning);
 fi;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func ТипДок_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("РПО_ДОГОВОР_НАИМ","",recТипДок);
 if Rec=nil: ^False; fi;
 recТипДок=Rec;
 ТипДок=GetCardFieldS("РПО_ДОГОВОР_НАИМ",Rec,"НАИМ");
 Очистить;
 Return False;
end;

Proc ТипДок_OnExit(FieldName: String; Iter: Integer);
 recТипДок=nil;
 ТипДок="";
end;

Proc Дата_onExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(AsString(Template.Field),tmp);
 Очистить;
 Return Cur;
end;

Func Контр_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if not Контр=nil:
    rec=OpenCardFile("Контрагент","",Контр,crdRecordOnly);
   else
    rec=Раб.Документы.ВыборСФильтром("Контрагент","КорИмя","");
 fi;
 if Rec=nil: ^False; fi;
 Контр=Rec;
 Контр_=GetCardFieldS("Контрагент",Rec,"КорИмя");
 Очистить;
 Return False;
end;

Proc Контр_OnExit(FieldName: String; Iter: Integer);
 Контр=nil;
 Контр_="";
 Очистить;
end;

Func РазмещЗаказ_OnEnter(FieldName: String; Iter: Integer): logical;
 РазмещЗаказ=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,True,"44ФЗ");
 Очистить;
 Return False;
end;

Proc РазмещЗаказ_OnExit(FieldName: String; Iter: Integer);
 РазмещЗаказ="";
 Очистить;
end;

Func услРЗ_OnEnter(FieldName: String; Iter: Integer): logical;
 if услРЗ="": услРЗ="НЕ"; else услРЗ=""; fi;
 Очистить;
 Return False;
end;

Func ФЗ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="94-ФЗ";
 Buf[2]="44-ФЗ";
 Buf[3]="223-ФЗ";
 n=Alternate("Выберите ФЗ",Buf,-1,1,12);
 if not n=0:
    ФЗ=Str(n-1);
    Очистить;
 fi;
 Return False;
end;


Proc ФЗ_OnExit(FieldName: String; Iter: Integer);
 ФЗ="";
 Очистить;
end;

Func МаскаВД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.КБК.Список("*.?.206.??.*|*.?.302.??.*|*.?.502.??.*","КР","ВД");
 if tmp="?": tmp=""; fi;
 if not tmp="":
    МаскаВД=tmp;
    if not МаскаВД="": fКБК=True; cbКБК.State=fКБК; fi;
    Очистить;
 fi;
 ^False;
end;

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

Func МаскаКБК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.КБК.ВыбратьМаскуКБК("ФКР","*.?.206.??.*|*.?.302.??.*|*.?.502.??.*",МаскаКБК,True);
 if tmp="???.????.???????.???.???": tmp=""; fi;
 if not tmp="":
    МаскаКБК=tmp;
    if not МаскаКБК="": fКБК=True; cbКБК.State=fКБК; fi;
    Очистить;
 fi;
 Return False;
end;

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

Func Аналит_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Аналит,Справ,НаимСправ,i:s;
 i=SubStr(FieldName,Length(FieldName),1);
 Аналит=GetVariableS(FieldName);
 tmp=Раб.Бюджет2005.СписокСправ("*.?.502.??.*|*.?.501.?3.*",0,if(FieldName="Аналит1",Справ2,Справ1));
 tmp=AnaElection(tmp,False,True,Аналит);
 if tmp="": ^False; fi;
 Аналит=tmp;
 tmp=SubStr(Аналит,1,Pos(".",Аналит));
 Справ=tmp+"*";
 НаимСправ=Name_A(tmp);
 if НаимСправ="" or  НаимСправ=" ": НаимСправ=Справ; fi;
 PutVariableS("Аналит"+i,Аналит);
 PutVariableS("Справ"+i,Справ);
 PutVariableS("НаимСправ"+i,НаимСправ);
 PutVariableL("fАналит"+i,True);
 cbАналит1.State=fАналит1;
 cbАналит2.State=fАналит2;
 Очистить;
 Return False;
end;

Proc Аналит_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func ВызватьДоговор(FieldName: String; Iter: Integer): logical;
 OpenBlank("ИНФО.ДОГОВОР",True,UKey[Iter]);
 Return False;
end;

Func ВызватьПроводку(FieldName: String; Iter: Integer): logical;
var n,y:i;
var УслСч,УслАн,ВД,БК,КОСГУ,АнСч,ПризнПериод_:S;
var ДН_,ДК_:D;
 if FieldName="dСумБО": FieldName="СумБО"; fi;
 ПризнПериод_="";
 for y=1..12 do
  if fМес[y]:
     ПризнПериод_=Раб.Бюджет2005.Объединить(ПризнПериод_,"*."+Format("%.2D",y),"|");
     n=n+1;
  fi;
 od;
 if n>0 and n<12: ПризнПериод_="&(ПЕРИОД."+Str(Year(ДН))+".*&("+ПризнПериод_+"))"; else ПризнПериод_=""; fi;
 УслАн=ПризнДоговор[Iter]+"!";
 ДН_=ДН; ДК_=ДК;
 if КБК[Iter]="Всего":
    if FieldName="СумБО":    УслСч="*.1.501.13.???|*.?.506.10.???/*.?.502.11.???"; УслАн=ПризнДоговор[Iter];
      |FieldName="ОстДебН":  УслСч="*.?.206.??.???"; ДН_=1.1.100; ДК_=ДН;
      |FieldName="СумДеб":   УслСч="(*.?.206.??.560)"+if(fЗКР,"|(*.?.ЗАБ.00.560/*.?.ЗАБ.КР.*)","");
      |FieldName="ОстДебК":  УслСч="*.?.206.??.???"+if(fЗКР,"|(*.?.ЗАБ.00.560/*.?.ЗАБ.КР.*)","");
      |FieldName="ОстКреН":  УслСч="*.?.302.??.???"; ДН_=1.1.100; ДК_=ДН;
      |FieldName="СумКреН":  УслСч="*.?.302.??.???"; ДН_=ДН; ДК_=ДК;  УслАн=УслАн+"&ПЕРИОД.*&~ПЕРИОД."+Str(Year(ДН))+"!";
      |FieldName="СумКре":   УслСч="*.?.302.??.730"; УслАн=УслАн+"&(ПЕРИОД."+Str(Year(ДН))+"!|~ПЕРИОД.*)";
      |FieldName="СумОпл":   УслСч="(*.?.302.??.830&~(*.?.302.??.830/*.?.206.??.660))"+if(fЗКР,"|(*.?.ЗАБ.00.830/*.?.ЗАБ.КР.*)","");
      |FieldName="СумЗакрАв":УслСч="*.?.206.??.660";
      |FieldName="ОстКреК":  УслСч="*.?.302.??.???"+if(fЗКР,"|(*.?.ЗАБ.00.830/*.?.ЗАБ.КР.*)","");
      |FieldName="СумПрет_": УслСч="(*.?.205.41.560)|(*.?.401.10.*/*.?.205.41.660)"; ДН_=1.1.100;
      |FieldName="СумУдов":  УслСч="~*.?.401.10.*/*.?.205.41.660"; ДН_=1.1.100;
      |True: ^False;
    fi;
   else
    if not КБК[Iter]="":
       ВД=SubStr(КБК[Iter],1,1);
       БК=SubStr(КБК[Iter],3,20);
       КОСГУ=SubStr(КБК[Iter],24,3);
       АнСч=Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ);
      else
       БК="*";
       КОСГУ="???";
       АнСч="??";
    fi;
    if FieldName="СумБО":    УслСч="*."+ВД+".501.13.???|*."+ВД+".506.10.???/"+БК+"."+ВД+".502.11."+КОСГУ; УслАн=ПризнДоговор[Iter]+ПризнПериод_;
      |FieldName="ОстДебН":  УслСч=БК+"."+ВД+".206."+АнСч+".???"; ДН_=1.1.100; ДК_=ДН;
      |FieldName="СумДеб":   УслСч="("+БК+"."+ВД+".206."+АнСч+".560)"+if(fЗКР,"|("+БК+"."+ВД+".ЗАБ.00.560/"+БК+"."+ВД+".ЗАБ.КР."+КОСГУ+")","");
      |FieldName="ОстДебК":  УслСч=БК+"."+ВД+".206."+АнСч+".???"+if(fЗКР,"|("+БК+"."+ВД+".ЗАБ.00.560/"+БК+"."+ВД+".ЗАБ.КР."+КОСГУ+")","");
      |FieldName="ОстКреН":  УслСч=БК+"."+ВД+".302."+АнСч+".???"; ДН_=1.1.100; ДК_=ДН;
      |FieldName="СумКреН":  УслСч=БК+"."+ВД+".302."+АнСч+".???"; ДН_=ДН; ДК_=ДК; УслАн=УслАн+"&ПЕРИОД.*&~ПЕРИОД."+Str(Year(ДН))+"!";
      |FieldName="СумКре":   УслСч=БК+"."+ВД+".302."+АнСч+".730"; УслАн=УслАн+"&(ПЕРИОД."+Str(Year(ДН))+"!|~ПЕРИОД.*)";
      |FieldName="СумОпл":   УслСч="("+БК+"."+ВД+".302."+АнСч+".830&~(*."+ВД+".302.??.830/*."+ВД+".206.??.660))"+if(fЗКР,"|("+БК+"."+ВД+".ЗАБ.00.830/"+БК+"."+ВД+".ЗАБ.КР."+КОСГУ+")","");
      |FieldName="СумЗакрАв":УслСч=БК+"."+ВД+".206."+АнСч+".660";
      |FieldName="ОстКреК":  УслСч=БК+"."+ВД+".302."+АнСч+".???"+if(fЗКР,"|("+БК+"."+ВД+".ЗАБ.00.830/"+БК+"."+ВД+".ЗАБ.КР."+КОСГУ+")","");
      |FieldName="СумПрет_": УслСч="(*."+ВД+".205.41.560)|(*."+ВД+".401.10.*/*."+ВД+".205.41.660)"; ДН_=1.1.100;
      |FieldName="СумУдов":  УслСч="~*."+ВД+".401.10.*/*."+ВД+".205.41.660"; ДН_=1.1.100;
      |True: ^False;
    fi;
    УслАн=Раб.Бюджет2005.Объединить(УслАн,Призн1[Iter],"&");
    УслАн=Раб.Бюджет2005.Объединить(УслАн,Призн2[Iter],"&");
 fi;
 Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',ДН_,ДК_,УслСч,УслАн);
 Return False;
end;

Proc Cell_OnClick(Row: Integer; Col: Integer; Double: Logical);
var FieldName:S;
 if Double:
    if Col<13 or Col=25: ВызватьДоговор("",Idx[Row]);
      else 
       if Col=13: FieldName="СумБО";
         |Col=14: FieldName="ОстДебН";
         |Col=15: FieldName="СумДеб";
         |Col=16: FieldName="ОстДебК";
         |Col=17: FieldName="ОстКреН";
         |Col=18: FieldName="СумКреН";
         |Col=19: FieldName="СумКре";
         |Col=20: FieldName="СумОпл";
         |Col=21: FieldName="СумЗакрАв";
         |Col=22: FieldName="ОстКреК";
         |Col=26: FieldName="СумПрет_";
         |Col=27: FieldName="СумУдов";
         |True: Exit;
       fi;
       ВызватьПроводку(FieldName,Idx[Row]);
    fi;
 fi;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if ДК=1.1.100: Message("Введите конечную дату",mtError); Template.Field="ДК"; Exit; fi;
 if ДН>ДК: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 if fАналит1 and Справ1="": Message("Укажите аналитический справочник 1",mtError); Template.Object="edАналит1"; Exit; fi;
 if fАналит2 and Справ2="": Message("Укажите аналитический справочник 2",mtError); Template.Object="edАналит2"; Exit; fi;
 if fУслИспол:
    if УслИспол="": Message("Задайте условие исполнения",mtError); Template.Object="btnУслИспол"; Exit; fi;
    if ЗначИспол<0 or ЗначИспол>100: Message("Значение процента исполнения должно быть 0..100",mtError); Template.Object="edЗначИспол"; Exit; fi;
 fi;
 if fУслОпл:
    if УслОпл="": Message("Задайте условие оплаты",mtError); Template.Object="btnУслОпл"; Exit; fi;
    if ЗначОпл<0 or ЗначОпл>100: Message("Значение процента оплаты должно быть 0..100",mtError); Template.Object="edЗначОпл"; Exit; fi;
 fi;
 Refresh;
 Отч="Составлен: "+DateToString(ToDay)+" в "+Раб.Бюджет2005.TimeToStr(Time,"")+" Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"));
 if МаскаВД="?": МаскаВД=""; fi;
 if МаскаКБК="???.???????.???.???": МаскаКБК=""; fi;
 if not МаскаКБК="": fКБК=True; cbКБК.State=fКБК; fi;
 if not Аналит1="": fАналит1=True; cbАналит1.State=fАналит1; fi;
 if not Аналит2="": fАналит2=True; cbАналит2.State=fАналит2; fi;
 fГрАналит1=Match(Аналит1,"*.");
 fГрАналит2=Match(Аналит2,"*.");
 if fГрАналит1: Аналит1=SubStr(Аналит1,1,Length(Аналит1)-1); fi;
 if fГрАналит2: Аналит2=SubStr(Аналит2,1,Length(Аналит2)-1); fi;
 Try
  if not МаскаВД="" or fКБК or fАналит1 or fАналит2 or fМес[01] or fМес[02] or fМес[03] or fМес[04] or fМес[05] or fМес[06] or fМес[07] or fМес[08] or fМес[09] or fМес[10] or fМес[11] or fМес[12]:  Расчет2; else Расчет; fi;
 Finally
  if fГрАналит1: Аналит1=Аналит1+"."; fi;
  if fГрАналит2: Аналит2=Аналит2+"."; fi;
 end;
end;

Proc btnПечать_OnClick(Sender: String);
var tmp:S;
var n:i;
 n=if(fСодерж,1,0)+if(fКБК,1,0)+if(fАналит1,1,0)+if(fАналит2,1,0);
 if n=4: tmp="РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.003.cfg";
   |n=3: tmp="РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.002.cfg";
   |n=2: tmp="РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.001.cfg";
   |True:tmp="РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.000.cfg";
 fi;
 Раб.Настр_Печать.Prn("","",tmp,"",1);
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;

Proc cbКБК_OnChange(Sender: String);
 МаскаКБК="";
 Очистить;
 Оформление;
end;

Proc btnАналит_OnClick(Sender: String);
var tmp,i:S;
 i=SubStr(Sender,Length(Sender),1);
 tmp=Раб.Бюджет2005.СписокСправ("*.?.502.??.*|*.?.501.?3.*",0,if(i="1",Справ2,Справ1));
 tmp=AnaElection(tmp,True,False);
 if not tmp="":
    PutVariableS("Справ"+i,tmp+".*");
    PutVariableS("НаимСправ"+i,Name_A(tmp+"."));
    if GetVariableS("НаимСправ"+i)="": PutVariableS("НаимСправ"+i,tmp+".*"); fi;
    if not Match(GetVariableS("Аналит"+i),GetVariableS("Справ"+i)): PutVariableS("Аналит"+i,""); fi;
    Очистить;
 fi;
end;

Proc edАналит_OnChange(Sender: String);
 if Sender="edАналит1":
    if not AsString(edАналит1.Text)="": btnАналит_OnClick(Sender); fi;
   else
    if not AsString(edАналит2.Text)="": btnАналит_OnClick(Sender); fi;
 fi;
end;

Proc cbАналит_OnChange(Sender: String);
 Очистить;
 Оформление;
end;

Proc CheckBox_OnChange(Sender: String);
 if Sender="cbТек":
    if fТек=True:
       fИспол=False;
       fАннул=False;
       fСрок=False;
    fi;
    cbИспол.Enabled=not fТек;
    cbАннул.Enabled=not fТек;
    cbСрок.Enabled=not fТек;
   else
    if fИспол or fАннул or fСрок:
       fТек=False;
    fi;
    cbТек.Enabled=not (fИспол or fАннул or fСрок);
 fi;
 Очистить;
end;

Proc btnУслИспол_OnClick(Sender: String);
var n:i;
 ClearVariable(Buf);
 Buf[1]=">    больше";
 Buf[2]=">=  больше, равно";
 Buf[3]="=    равно";
 Buf[4]="<=  меньше, равно";
 Buf[5]="<    меньше";
 n=Alternate("Выберите условие",Buf,-1,SearchInArray(Buf,УслИспол),14);
 if not n=0:
    УслИспол=Trim(SubStr(Buf[n],1,2));
    btnУслИспол.Caption=УслИспол;
    Очистить;
 fi;
end;


Proc btnУслОпл_OnClick(Sender: String);
var n:i;
 ClearVariable(Buf);
 Buf[1]=">    больше";
 Buf[2]=">=  больше, равно";
 Buf[3]="=    равно";
 Buf[4]="<=  меньше, равно";
 Buf[5]="<    меньше";
 n=Alternate("Выберите условие",Buf,-1,SearchInArray(Buf,УслОпл),14);
 if not n=0:
    УслОпл=Trim(SubStr(Buf[n],1,2));
    btnУслОпл.Caption=УслОпл;
    Очистить;
 fi;
end;

Proc cbМес_OnChange(Sender: String);
 Очистить;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("","РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.002.cfg");
 Раб.Настр_Печать.Cfg("","РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.001.cfg");
 Раб.Настр_Печать.Cfg("","РПО.ДОКУМЕНТЫ.ДОГОВОРПОСТ.КНИГА_УЧЕТА.000.cfg");
 Очистить;
end;

Proc AfterOpen(Destroy: Logical);
 Оформление;
 if fТек=True:
    fИспол=False;
    fАннул=False;
    fСрок=False;
 fi;
 cbИспол.Enabled=not fТек;
 cbАннул.Enabled=not fТек;
 cbСрок.Enabled=not fТек;
 if fИспол or fАннул or fСрок:
    fТек=False;
 fi;
 cbТек.Enabled=not (fИспол or fАннул or fСрок);
 btnУслИспол.Caption=УслИспол;
 btnУслОпл.Caption=УслОпл;
end;
--Обработчики событий шаблона -----
--

Конец
