-- Шаблон создан мастером бланков
-- 16.02.2010 11:13:06
--
БланкСШаблоном "Отчет по закупкам";

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

var УслСчД:S=["*.?.105.??.*|*.?.109.??.*|*.?.106.??.*|*.?.401.20.*&(*.221|*.222|*.223|*.224|*.225|*.226|*.290)"];
var УслСчК:S=["*.?.302.??.730|*.?.208.??.660"];
var УслСчАвД:S=[""];
var УслСчАвК:S=["*.?.206.??.*"];
var СумГК:N=[100000];

var flagНИ:L;
var flagИсклГос:L=[True];
flagОКДП_Гр:L;
flagПересчет:I=[1];
var flag601в273:L=flagПересчет=1;
var flag273в601:L=flagПересчет=2;
flagБезДаты:L;
flagУчетАванс:L;

Учр:S;

MM:I;
var MM_:S=if(MM=1:"I квартал"|MM=2:"II квартал"|MM=3:"III квартал"|MM=4:"IV квартал"|true:"Год");
YYYY:I=[Year(ToDay)];
var ДН_:D=if(MM=1:Dat(1,1,YYYY)|MM=2:Dat(1,4,YYYY)|MM=3:Dat(1,7,YYYY)|MM=4:Dat(1,10,YYYY)|true:Dat(1,1,YYYY));
var ДН:D=if(FlagНИ,Dat(1,1,YYYY),ДН_);
var ДК:D=if(MM=1:Dat(1,4,YYYY)|MM=2:Dat(1,7,YYYY)|MM=3:Dat(1,10,YYYY)|MM=4:Dat(1,1,YYYY+1)|true:Dat(1,1,YYYY+1));
var ДКГ:D=Dat(1,1,YYYY+1);

var Гр[]:I=[$];

var Загл7:S="Всего (гр.8+гр."+Str(Гр[13])+"+ гр."+Str(Гр[14])+")";
var Упр:I;

var Key[]:S;
var пп[]:i=$;
var verОКДП_Гр[]:S;
var ОКДП_Гр[]:S;
var ОКДП[]:S;
var Предм[]:S;
var ДЗ[]:D;
var СумКт[]:N;
var СумКтДО1[]:N;
var СумКтДО2[]:N;
var СумКтДО3[]:N;
var СумКтДО4[]:N;
var СумДО[]:N;
var СумАвОтч[]:N;
var Сум[]:N=СумКт[$]+СумДО[$]+СумАвОтч[$];
var КтИА[]:L;

var ext[]:S;
var ext2[]:S;
var ext3[]:S;
var ext4[]:S;
var extKey[]:S;
var extКонтр[]:S;
var extКарт[]:S;
var extЗап[]:I;
var extСум[]:N;
var extДЗ[]:D;

var ВсегоКт:N=SumOfArray(СумКт,Упр);
var ВсегоКтДО1:N=SumOfArray(СумКтДО1,Упр);
var ВсегоКтДО2:N=SumOfArray(СумКтДО2,Упр);
var ВсегоКтДО3:N=SumOfArray(СумКтДО3,Упр);
var ВсегоКтДО4:N=SumOfArray(СумКтДО4,Упр);
var ВсегоДО:N=SumOfArray(СумДО,Упр);
var ВсегоАвОтч:N=SumOfArray(СумАвОтч,Упр);
var ВсегоСум:N=ВсегоКт+ВсегоДО+ВсегоАвОтч;

ДолжнИсп:S;
ФИОИсп:S;
ФИОБух:S;

var Buf[]:S;

var SelfCfg:S="ТББ.ОТЧЕТ_ЗАКУПКИ_ОКДП.000.cfg";
var SelfBln:S="ПРОЧИЕ.ОТЧЕТ_ЗАКУПКИ_ОКДП";

var НастрGUID:S;

btnРасчет  : Object;
btnПечать  : Object;
btnНастр   : Object;
cbНИ	   : Object;
btnЗакрыть : Object;
cb100000   : Object;
btnОчистить: Object;
bvlОКДП    : Object;
cbОКДП_Гр  : Object;
bvlПересчет: Object;
rbПересчет : Object;
rb601в273  : Object;
rb273в601  : Object;
cbБезДаты  : Object;
cbУчетАванс: Object;

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

var Rep[]:S;
var Rep_verОКДП_Гр[]:S;
var Rep_ОКДП_Гр[]:S;
var Rep_ОКДП[]:S;
var Rep_СумКт[]:N;
var Rep_ДЗ[]:D;
var Rep_СумКтДО1[]:N;
var Rep_СумКтДО2[]:N;
var Rep_СумКтДО3[]:N;
var Rep_СумКтДО4[]:N;
var Rep_СумДО[]:N;
var Rep_СумАвОтч[]:N;
var Rep_Сум[]:N;
var Rep_Link[]:I;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("УслСчД","S");
    Раб.Настр.Добавить("УслСчК","S");
    Раб.Настр.Добавить("УслСчАвД","S");
    Раб.Настр.Добавить("УслСчАвК","S");
    Раб.Настр.Добавить("flagНИ","L");
    Раб.Настр.Добавить("flagИсклГос","L");
    Раб.Настр.Добавить("СумГос","N");
    if aСохр:
       Раб.Настр.Сохранить;
      else
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
	  Flag=ExecuteFuncL("ПоУмолчанию_OnEnter","",1);
       fi;
    fi;
 fi;
end;

Proc ОткрНастр (Flag:L);
 btnРасчет.Visible=not Flag;
 btnПечать.Visible=not Flag;
 btnНастр.Visible=not Flag;
 cbНИ.Visible=not Flag;
 cb100000.Visible=not Flag;
 btnОчистить.Visible=not Flag;
 bvlОКДП.Visible=not Flag;
 bvlПересчет.Visible=not Flag;
 cbОКДП_Гр.Visible=not Flag;
 rbПересчет.Visible=not Flag;
 rb601в273.Visible=not Flag;
 rb273в601.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 cbБезДаты.Visible=not Flag;
 cbУчетАванс.Visible=not Flag;
 УпрН=Flag;
end;

Proc Оформление;
var s,c,n:i;
var Obj: Object;
 cbБезДаты.Enabled=not flagОКДП_Гр;
 for s=1..3 do
  if FindObject("s"+str(s),Obj):
     Obj.Column(9 ,ColVisible,MM<2 or MM=5); --I кв.
     Obj.Column(10,ColVisible,MM<3 or MM=5); --II кв.
     Obj.Column(11,ColVisible,MM<4 or MM=5); --III кв.
     Obj.Column(12,ColVisible,MM<=5); --IV кв.
     if s=1:
	n=8;
	for c=9..14 do
	 if AsLogical(Obj.Column(c,ColVisible,"")):
	    n=n+1;
	    Гр[c]=n;
	 fi;
	od;
     fi;
  fi;
 od;
end;

Proc Очистить;
 ClearVariable(Key);
 ClearVariable(Упр);
 ClearVariable(verОКДП_Гр);
 ClearVariable(ОКДП_Гр);
 ClearVariable(ОКДП);
 ClearVariable(Предм);
 ClearVariable(ДЗ);
 ClearVariable(СумКт);
 ClearVariable(СумКтДО1);
 ClearVariable(СумКтДО2);
 ClearVariable(СумКтДО3);
 ClearVariable(СумКтДО4);
 ClearVariable(СумДО);
 ClearVariable(СумАвОтч);
 ClearVariable(КтИА);
 ClearVariable(ext);
 ClearVariable(ext2);
 ClearVariable(ext3);
 ClearVariable(ext4);
 ClearVariable(extKey);
 ClearVariable(extКонтр);
 ClearVariable(extКарт);
 ClearVariable(extЗап);
 ClearVariable(extСум);
 ClearVariable(extДЗ);
 S1.RowsCount=5;
 S2.Visible=True;
end;

Func КонвОКДП_Гр(ver:S; gr:S; code:s):s;
var val:s;
 if not ver="000" and not code="0000000":
    val=if(ver="273","ГР273","ГР");
    val=Раб.Договор.ВзятьЗначОКДП(code,val);
    val=if(val="","000",val);
    if not val=gr:
       gr=val;
    fi;
 fi;
 ^gr;
end;

Proc РасчетПров(OWAКт:I; OWAДО:I; t:i; pp:i);
var z,q,nКт,nДО,tЗап:i;
var tmp,val,Crd,tДеб,tКре,tКарт,tПризн,Key_,Ext_,verОКДП_Гр_,ОКДП_Гр_,ОКДП_,Контр_,Договор_:S;
var tДат:D;
var Rec: Record;
var tСум,СумКтДО1_,СумКтДО2_,СумКтДО3_,СумКтДО4_,СумДО_,СумАвОтч_:N;
 tДат=TransDate(t);
 ProgressPos(pp+(ДК-ДН)-(ДК-tДат));
 tСум=TransSum(t);
 tДеб=TransDeb(t);
 tКре=TransCre(t);
 tПризн=TransSigns(t);
 tКарт=TransCardFile(t);
 tЗап=RecordToInteger(TransRecord(t));
 if tКарт="": tКарт=" "; fi;
 if tЗап=0: tЗап=t; fi;
 verОКДП_Гр_="601";
 tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ОКДП.*","");
 if tmp="": tmp=SubStr(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","-ОКДП.*",""),2,255); fi;
 if tmp="":
    tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ОКДП2.*","");
    if tmp="": tmp=SubStr(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","-ОКДП2.*",""),2,255); fi;
    if not tmp="": verОКДП_Гр_="273"; fi;
 fi;
 if tmp="":
    verОКДП_Гр_="000";
    ОКДП_Гр_="000";
    ОКДП_="0000000";
   else
    ОКДП_Гр_=ExtractWord(2,tmp,".");
    ОКДП_=ExtractWord(3,tmp,".");
    if ОКДП_Гр_="": ОКДП_Гр_="000"; fi;
    if ОКДП_="": ОКДП_="0000000"; fi;
 fi;
 if not ОКДП_="0000000":
    if flagПересчет=1: verОКДП_Гр_="273";
      |flagПересчет=2: verОКДП_Гр_="601";
    fi;
    ОКДП_Гр_=КонвОКДП_Гр(verОКДП_Гр_,ОКДП_Гр_,ОКДП_);
 fi;
 СумКтДО1_=0; СумКтДО2_=0; СумКтДО3_=0; СумКтДО4_=0; СумДО_=0; СумАвОтч_=0;
 Договор_="";  Key_="";
 val=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD);
 if Match(tКре,"*.?.208.??.*") and tДат>=ДН and tДат<ДК:
    СумАвОтч_=tСум;
    Key_="A#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val+"# ";
    Контр_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","МОЛ.*","");
   |Match(tКре,"*.?.302.??.*") or (flagУчетАванс and (Match(tДеб,"*.?.206.??.*") or Match(tКре,"*.?.206.??.*"))):
    if flagУчетАванс:
       if Match(tКре,"*.?.206.??.*"): tСум=-tСум; fi;
    fi;
    Контр_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","К.*","");
    Договор_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ДОГОВОР.*","");
    if Договор_="": Договор_=SubStr(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","-ДОГОВОР.*",""),2,255); fi;
    if Договор_="":
       if tДат>=ДН and tДат<ДК:
	  Key_="A#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val+"# ";
	  СумДО_=tСум;
       fi;
      else
       Crd=SignCardFile(Договор_,False);
       Rec=SignToRecord(Договор_,False);
       if Crd="РПО_ДОГОВОР":
	  q=Mon(tДат);
	  nКт=GetRecordNumber(OWAКт,Rec);
	  tДат=GetFieldD(OWAКт,nКт,"ДатаРег");
	  if (not flagИсклГос or (flagИсклГос and GetFieldN(OWAКт,nКт,"СумДок")<СумГК and not GetFieldL(OWAКт,nКт,"Учет_Реестр_ОФК"))) and tДат>=ДН and tДат<ДК:
	     Key_="B#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#"+Договор_;
	     if q<4 : СумКтДО1_=tСум;
	       |q<7 : СумКтДО2_=tСум;
	       |q<10: СумКтДО3_=tСум;
	       |True: СумКтДО4_=tСум;
	     fi;
	  fi;
	 |Crd="РПО_ДО":
	  nДО=GetRecordNumber(OWAДО,Rec);
	  if GetFieldL(OWAДО,nДО,"УчетБО"):
	     if tДат>=ДН and tДат<ДК:
		Key_="A#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"# ";
		СумДО_=tСум;
	     fi;
	     Договор_="";
	    else
	     q=Mon(tДат);
	     tДат=GetFieldD(OWAДО,nДО,"Договор.ДатаРег");
	     if (not flagИсклГос or (flagИсклГос and GetFieldN(OWAДО,nДО,"Договор.СумДок")<СумГК and not GetFieldL(OWAДО,nДО,"Договор.Учет_Реестр_ОФК"))) and tДат>=ДН and tДат<ДК:
		Договор_=ExtractWords(1,4,Договор_,".");
		Key_="B#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#"+Договор_;
		if q<4 : СумКтДО1_=tСум;
		  |q<7 : СумКтДО2_=tСум;
		  |q<10: СумКтДО3_=tСум;
		  |True: СумКтДО4_=tСум;
		fi;
	     fi;
	  fi;
	 |True:
	  if tДат>=ДН and tДат<ДК:
	     q=Mon(tДат);
	     Key_="B#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val+"#"+Договор_;
	     if q<4 : СумКтДО1_=tСум;
	       |q<7 : СумКтДО2_=tСум;
	       |q<10: СумКтДО3_=tСум;
	       |True: СумКтДО4_=tСум;
	     fi;
	  fi;
       fi;
    fi;
 fi;
 if not Key_="":
    Key_=Up(Key_);
    z=SearchInArray(Key,Key_,True);
    if z=-1:
       z=InsertInArraySort(Key,Key_);
       InsertFrame(Упр,z);
       verОКДП_Гр[z]=verОКДП_Гр_;
       ОКДП_Гр[z]=ОКДП_Гр_;
       ОКДП[z]=ОКДП_;
       ДЗ[z]=tДат;
    fi;
    СумКтДО1[z]=СумКтДО1[z]+СумКтДО1_;
    СумКтДО2[z]=СумКтДО2[z]+СумКтДО2_;
    СумКтДО3[z]=СумКтДО3[z]+СумКтДО3_;
    СумКтДО4[z]=СумКтДО4[z]+СумКтДО4_;
    СумДО[z]=СумДО[z]+СумДО_;
    СумАвОтч[z]=СумАвОтч[z]+СумАвОтч_;
    --
    val=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD);
    Ext_=verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val+"#";
    if Договор_="":
       Ext_=Ext_+tКарт+"#"+Str(tЗап);
      else
       Ext_=Ext_+Договор_+"@"+tКарт+"#"+Str(tЗап);
    fi;
    Ext_=Up(Ext_);
    z=SearchInArray(Ext,Ext_,True);
    if z=-1:
       z=InsertInArraySort(Ext,Ext_);
       InsertInArray(extKey,z,SubStr(Key_,3,255)); --не нужно разеделение по договору/без договора???
       InsertInArray(ext2,z,verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val);
       InsertInArray(ext3,z,verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_);
       InsertInArray(ext4,z,verОКДП_Гр_+"#"+ОКДП_Гр_);
       InsertInArray(extКонтр,z,Контр_);
       InsertInArray(extКарт,z,tКарт);
       InsertInArray(extЗап,z,tЗап);
       InsertInArray(extСум,z,tСум);
       InsertInArray(extДЗ,z,TransDate(t));
      else
       extСум[z]=extСум[z]+tСум;
    fi;
 fi;
end;

Proc ДобВОтч(Rep_:S; verОКДП_Гр_:S; ОКДП_Гр_:S; ОКДП_:S; Iter:I);
var z,i:i;
 if Iter<0: i=-1; else i=Abs(Iter); fi;
 Iter=Abs(Iter);
 z=SearchInArray(Rep,Rep_,True);
 if z=-1:
    z=InsertInArraySort(Rep,Rep_);
    InsertInArray(Rep_verОКДП_Гр,z,verОКДП_Гр_);
    InsertInArray(Rep_ОКДП_Гр,z,ОКДП_Гр_);
    InsertInArray(Rep_ОКДП,z,ОКДП_);
    InsertInArray(Rep_ДЗ,z,ДЗ[Iter]);
    InsertInArray(Rep_СумКт,z,СумКт[Iter]);
    InsertInArray(Rep_СумКтДО1,z,СумКтДО1[Iter]);
    InsertInArray(Rep_СумКтДО2,z,СумКтДО2[Iter]);
    InsertInArray(Rep_СумКтДО3,z,СумКтДО3[Iter]);
    InsertInArray(Rep_СумКтДО4,z,СумКтДО4[Iter]);
    InsertInArray(Rep_СумДО,z,СумДО[Iter]);
    InsertInArray(Rep_СумАвОтч,z,СумАвОтч[Iter]);
    InsertInArray(Rep_Link,z,i);
   else
    Rep_СумКт[z]=Rep_СумКт[z]+СумКт[Iter];
    Rep_СумКтДО1[z]=Rep_СумКтДО1[z]+СумКтДО1[Iter];
    Rep_СумКтДО2[z]=Rep_СумКтДО2[z]+СумКтДО2[Iter];
    Rep_СумКтДО3[z]=Rep_СумКтДО3[z]+СумКтДО3[Iter];
    Rep_СумКтДО4[z]=Rep_СумКтДО4[z]+СумКтДО4[Iter];
    Rep_СумДО[z]=Rep_СумДО[z]+СумДО[Iter];
    Rep_СумАвОтч[z]=Rep_СумАвОтч[z]+СумАвОтч[Iter];
 fi;
end;

Proc СоздатьОтч(k:i; msg:s);
var Rep0_,Rep1_,Rep2_,Rep3_:S;
var Iter:I;
 ShowProgress(Упр*k,msg);
 ClearVariable(Rep);
 ClearVariable(Rep_verОКДП_Гр);
 ClearVariable(Rep_ОКДП_Гр);
 ClearVariable(Rep_ОКДП);
 ClearVariable(Rep_ДЗ);
 ClearVariable(Rep_СумКт);
 ClearVariable(Rep_СумКтДО1);
 ClearVariable(Rep_СумКтДО2);
 ClearVariable(Rep_СумКтДО3);
 ClearVariable(Rep_СумКтДО4);
 ClearVariable(Rep_СумДО);
 ClearVariable(Rep_СумАвОтч);
 ClearVariable(Rep_Сум);
 ClearVariable(Rep_Link);
 for Iter=1..Упр do
  ProgressPos((Упр*(k-1))+Iter);
  Rep0_=verОКДП_Гр[Iter];
  Rep1_=Rep0_+"#"+ОКДП_Гр[Iter];
  Rep2_=Rep1_+"."+ОКДП[Iter];
  Rep3_=Rep2_+"#"+Раб.Формат.ДатаСтр(ДЗ[Iter],Раб.Формат.dfYYYYMMDD);
  --группировка приказу
  ДобВОтч(Rep0_,verОКДП_Гр[Iter],"","",-Iter);
  --групировка по группе
  ДобВОтч(Rep1_,verОКДП_Гр[Iter],ОКДП_Гр[Iter],"",-Iter);
  --группировка по коду
  ДобВОтч(Rep2_,verОКДП_Гр[Iter],ОКДП_Гр[Iter],ОКДП[Iter],-Iter);
  --Добавленеи самого значения
  ДобВОтч(Rep3_,verОКДП_Гр[Iter],ОКДП_Гр[Iter],ОКДП[Iter],Iter);
 od;
end;

Proc Расчет;
var t,z,p,pp,ww,OWAКт,nКт,nrКт,OWAДО,nДО:i;
var tmp,val,Key_,Ext_,Crd,tКре,tКарт,tПризн,УслАн_,УслСч_,verОКДП_Гр_,ОКДП_Гр_,ОКДП_,Договор_:S;
var tДат:D;
var tЗап,Rec: Record;
var tСум,СумКтДО_,СумДО_,СумАвОтч_:N;
 Очистить;
 Refresh;
 OWAКт=OpenWorkArea("РПО_ДОГОВОР_ПОЗИЦИИ_ТМЦ","ДатаРег","ДатаРег>="+DateToString(ДН)+" and ДатаРег<"+DateToString(ДК));
 Try
  nrКт=Records(OWAКт);
  ShowProgress(nrКт*4,"Расчет...");
  for nКт=1..nrКт do
   ProgressPos(nКт);
   if not GetFieldL(OWAКт,nКт,"Договор.Недейств") and GetFieldL(OWAКт,nКт,"Договор.Рег") and (not flagИсклГос or (flagИсклГос and GetFieldN(OWAКт,nКт,"Договор.СумДок")<СумГК) and not GetFieldL(OWAКт,nКт,"Договор.Учет_Реестр_ОФК")):
      rec=GetFieldR(OWAКт,nКт,"Договор");
      if GetFieldR(OWAКт,nКт,"Договор.Признак_Ref")=nil:
	 Договор_="Договор."+GetFieldS(OWAКт,nКт,"Договор.Признак");
	else
	 Договор_="Договор."+GetFieldS(OWAКт,nКт,"Договор.Признак_ref.Признак");
      fi;
      tДат=GetFieldD(OWAКт,nКт,"Договор.ДатаРег");
      tСум=GetFieldN(OWAКт,nКт,"Сум");
      verОКДП_Гр_=Str(GetFieldI(OWAКт,nКт,"Договор.verОКДП_Гр"));
      ОКДП_Гр_=GetFieldS(OWAКт,nКт,"ОКДП_Гр");
      ОКДП_=GetFieldS(OWAКт,nКт,"ОКП");
      if verОКДП_Гр_="0": verОКДП_Гр_=if(tДат>8.8.2011,"273","601"); fi;
      if ОКДП_Гр_="" and ОКДП_="": verОКДП_Гр_="000"; fi;
      if ОКДП_Гр_="": ОКДП_Гр_="000"; fi;
      if ОКДП_="": ОКДП_="0000000"; fi;
      if flagПересчет=1: verОКДП_Гр_="273";
	|flagПересчет=2: verОКДП_Гр_="601";
      fi;
      ОКДП_Гр_=КонвОКДП_Гр(verОКДП_Гр_,ОКДП_Гр_,ОКДП_);
      val=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD);
      Key_="B#"+verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val+"#"+Договор_;
      Ext_=verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val+"#"+Договор_+"#0";
      Key_=Up(Key_);
      Ext_=Up(Ext_);
      z=SearchInArray(Key,Key_,True);
      if z=-1:
	 z=InsertInArraySort(Key,Key_);
	 InsertFrame(Упр,z);
	 verОКДП_Гр[z]=verОКДП_Гр_;
	 ОКДП_Гр[z]=ОКДП_Гр_;
	 ОКДП[z]=ОКДП_;
	 ДЗ[z]=tДат;
	 КтИА[z]=GetFieldL(OWAКт,nКт,"Договор.Исполнен") or GetFieldL(OWAКт,nКт,"Договор.Аннулирован");
      fi;
      СумКт[z]=СумКт[z]+tСум;
      z=SearchInArray(Ext,Ext_,True);
      if z=-1:
	 z=InsertInArraySort(Ext,Ext_);
	 InsertInArray(extKey,z,SubStr(Key_,3,255)); --не нужно разеделение по договору/без договора???
	 InsertInArray(ext2,z,verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_+"#"+val);
	 InsertInArray(ext3,z,verОКДП_Гр_+"#"+ОКДП_Гр_+"#"+ОКДП_);
	 InsertInArray(ext4,z,verОКДП_Гр_+"#"+ОКДП_Гр_);
	 InsertInArray(extКонтр,z,GetFieldS(OWAКт,nКт,"Договор.Контр.КорИмя"));
	 InsertInArray(extКарт,z,"РПО_ДОГОВОР");
	 InsertInArray(extЗап,z,RecordToInteger(Rec));
	 InsertInArray(extСум,z,tСум);
	 InsertInArray(extДЗ,z,tДат);
	else
	 extСум[z]=extСум[z]+tСум;
      fi;
   fi;
  od;
 Finally
  CloseWorkArea(OWAКт);
 end;
 OWAКт=OpenWorkArea("РПО_ДОГОВОР","ДатаРег");
 Try
  pp=ДК-ДН;
  ShowProgress(pp*4,"Расчет...");
  OWAДО=OpenWorkArea("РПО_ДО","");
  Try
   УслАн_="~ДОГОВОР.*";
   УслСч_=Раб.Бюджет2005.Объединить(УслСчД,УслСчК,"/");
   for Transaction t=УслСч_+"{"+УслАн_+"}",ДН,ДК do
    РасчетПров(OWAКт,OWAДО,t,pp);
   od;
   ProgressPos(pp*2);
   --
   pp=ДКГ-ДН;
   ShowProgress(pp*4,"Расчет...");
   УслАн_="ДОГОВОР.*";
   if flagУчетАванс:
      tmp=Раб.Бюджет2005.Объединить(УслСчАвД,УслСчАвК,"/");
      if not tmp="": tmp="("+tmp+")"; fi;
      УслСч_=Раб.Бюджет2005.Объединить("("+УслСч_+")",tmp,"|");
   fi;
   for Transaction t=УслСч_+"{"+УслАн_+"}",ДН,ДКГ do
    РасчетПров(OWAКт,OWAДО,t,pp*2);
   od;
   ProgressPos(pp*3);
   --
   for z=1..Упр do
    if КтИА[z]: --проверяем если контракт исполнен на меньшую сумму  (ключи договора начинаются B)
       if Round(СумКтДО1[z]+СумКтДО2[z]+СумКтДО3[z]+СумКтДО4[z],2)<Round(СумКт[z],2): СумКт[z]=СумКтДО1[z]+СумКтДО2[z]+СумКтДО3[z]+СумКтДО4[z]; fi;
    fi;
   od;
   --
   СоздатьОтч(4,"Расчет...");
  Finally
   CloseWorkArea(OWAДО);
  end;
 Finally
  CloseWorkArea(OWAКт);
  CloseProgress;
 end;
 Message("Расчет завершен");
end;

Proc Отрисовать;
var z,zz,r,c,cfs:i;
var ix:S;
 zz=LengthOfArray(Rep);
 ShowProgress(zz,"Построение отчета....");
 Try
  S1.Visible=False;
  S2.Visible=False;
  S3.Visible=False;
  S1.RowsCount=5;
  S1.RowsCount=5+zz;
  cfs=if(flagОКДП_Гр,0,fsBold);
  r=5;
  for z=1..zz do
   ProgressPos(z);
   ix="["+Str(z)+"]";
   Rep_Сум[z]=Rep_СумКт[z]+Rep_СумДО[z]+Rep_СумАвОтч[z];
   if Length(Rep[z])=3: --Приказ
      r=r+1;
      c=1;  S1.Cell(r,c,CellBorder,"2,1,1,1"); S1.Cell(r,c,CellContents,"пп["+Str(r-5)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=2;  S1.Cell(r,c,CellBorder,"1,1,1,1");
      c=2;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Rep_verОКДП_Гр"+ix,True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=3;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,if(Rep_verОКДП_Гр[z]="273":"Приказ Минэкономразвития РФ от 7 июня 2011 г. N 273"|Rep_verОКДП_Гр[z]="601":"Приказ Минэкономразвития РФ от 1 декабря 2010 г. N 601"|true:"Без расшифровки"),True);
	    S1.CellLinks(c,r,6,r);
      c=7;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_Сум"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=8;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКт"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=9;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО1"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=10; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО2"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=11; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО3"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=12; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО4"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=13; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумДО"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=14; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумАвОтч"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      if flagОКДП_Гр:
	 c=14; S1.Cell(r,c,CellBorder,"1,1,2,1");
	else
	 c=1;  S1.Cell(r,c,CellBorder,"2,2,1,1");
	       for c=2..13 do
		S1.Cell(r,c,CellBorder,"1,2,1,1");
	       od;
	 c=14; S1.Cell(r,c,CellBorder,"1,2,2,1");
      fi;
     |Length(Rep[z])=7: --Группа
      r=r+1;
      c=1;  S1.Cell(r,c,CellBorder,"2,1,1,1"); S1.Cell(r,c,CellContents,"пп["+Str(r-5)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField); S1.Cell(r,c,CellLookup,True);
      c=2;  S1.Cell(r,c,CellBorder,"1,1,1,1");
      c=3;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Rep_ОКДП_Гр"+ix,True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=4;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,if(Rep_ОКДП_Гр[z]="000","Без расшифровки",Раб.Бюджет.НаимКБК(if(Rep_verОКДП_Гр[z]="273","ОКДП_ГР273","ОКДП_ГР"),Rep_ОКДП_Гр[z])),True);
	    S1.CellLinks(c,r,6,r);
      c=7;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_Сум"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=8;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКт"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=9;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО1"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=10; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО2"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=11; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО3"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=12; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО4"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=13; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумДО"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=14; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумАвОтч"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      if flagОКДП_Гр:
	 c=14; S1.Cell(r,c,CellBorder,"1,1,2,1");
	else
	 c=1;  S1.Cell(r,c,CellBorder,"2,2,1,1");
	       for c=2..13 do
		S1.Cell(r,c,CellBorder,"1,2,1,1");
	       od;
	 c=14; S1.Cell(r,c,CellBorder,"1,2,2,1");
      fi;
      for c=1..14 do
       S1.Cell(r,c,CellEventOnEnter,"пп_OnEnter");
      od;
      if Rep_Сум[z]>СумГК and MM<5 and (not flagНИ or MM=1): c=7;  S1.Cell(r,c,CellFontColor,coRed); fi;
      if Rep_СумКт[z]>СумГК and MM<5 and (not flagНИ or MM=1): c=8;  S1.Cell(r,c,CellFontColor,coRed); fi;
      if Rep_СумДО[z]>СумГК and MM<5 and (not flagНИ or MM=1): c=13; S1.Cell(r,c,CellFontColor,coRed); fi;
      if Rep_СумАвОтч[z]>СумГК and MM<5 and (not flagНИ or MM=1): c=14; S1.Cell(r,c,CellFontColor,coRed); fi;
     |Length(Rep[z])=15 and not flagОКДП_Гр: --Код ОКДП
      r=r+1;
      c=1;  S1.Cell(r,c,CellBorder,"2,1,1,1"); S1.Cell(r,c,CellContents,"пп["+Str(r-5)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField); S1.Cell(r,c,CellLookup,True);
      c=2;  S1.Cell(r,c,CellBorder,"1,1,1,1");
      c=4;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Rep_ОКДП"+ix,True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=5;  S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,if(Rep_ОКДП[z]="0000000","Без расшифровки",Раб.Договор.ВзятьЗначОКДП(Rep_ОКДП[z],"Наим")),True);
	    S1.CellLinks(c,r,6,r);
      c=7;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_Сум"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=8;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКт"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=9;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО1"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=10; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО2"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=11; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО3"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=12; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО4"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=13; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумДО"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=14; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумАвОтч"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
	    S1.Cell(r,c,CellBorder,"1,1,2,1");
      for c=1..14 do
       S1.Cell(r,c,CellEventOnEnter,"пп_OnEnter");
      od;
     |not flagОКДП_Гр and not flagБезДаты:
      r=r+1;
      c=1;  S1.Cell(r,c,CellBorder,"2,1,1,1"); S1.Cell(r,c,CellContents,"пп["+Str(r-5)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField); S1.Cell(r,c,CellLookup,True);
      c=2;  S1.Cell(r,c,CellBorder,"1,1,1,1");
      c=5;  S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,"Rep_ДЗ"+ix,True); S1.Cell(r,c,CellFieldType,cftDateField); S1.Cell(r,c,CellFormat,"dd mmm yyyy");
      c=7;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_Сум"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=8;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКт"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=9;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО1"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=10; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО2"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=11; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО3"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=12; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумКтДО4"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=13; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумДО"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=14; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Rep_СумАвОтч"+ix,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
	    S1.Cell(r,c,CellBorder,"1,1,2,1");
      for c=1..14 do
       S1.Cell(r,c,CellBgColor,coWhite);
       S1.Cell(r,c,CellEventOnEnter,"пп_OnEnter");
      od;
   fi;
   if Rep_СумКтДО1[z]>Rep_СумКт[z]: c=9; S1.Cell(r,c,CellBgColor,coYellow); fi;
   if Rep_СумКтДО1[z]+Rep_СумКтДО2[z]>Rep_СумКт[z] and not Rep_СумКтДО2[z]=0: c=10; S1.Cell(r,c,CellBgColor,coYellow); fi;
   if Rep_СумКтДО1[z]+Rep_СумКтДО2[z]+Rep_СумКтДО3[z]>Rep_СумКт[z] and not Rep_СумКтДО3[z]=0: c=11; S1.Cell(r,c,CellBgColor,coYellow); fi;
   if Rep_СумКтДО1[z]+Rep_СумКтДО2[z]+Rep_СумКтДО3[z]+Rep_СумКтДО4[z]>Rep_СумКт[z] and not Rep_СумКтДО4[z]=0: c=12; S1.Cell(r,c,CellBgColor,coYellow); fi;
  od;
 Finally
  S1.RowsCount=r;
  S1.Visible=True;
  S3.Visible=True;
  CloseProgress;
 end;
end;

Proc ПересчетГрупп;
var Iter:I;
var ver:s;
 if flagПересчет=0: Exit; fi;
 ShowProgress(Упр*2,"Пересчет групп....");
 Try
  ver=if(flag601в273,"273","601");
  for Iter=1..Упр do
   ProgressPos(Iter);
   if not verОКДП_Гр[Iter]=ver:
      verОКДП_Гр[Iter]=ver;
      ОКДП_Гр[Iter]=КонвОКДП_Гр(ver,ОКДП_Гр[Iter],ОКДП[Iter]);
   fi;
  od;
  СоздатьОтч(2,"Пересчет групп....");
 Finally
  CloseProgress;
 end;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func ПоУмолчанию_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="ПоУмолчанию":
    if EnqOkCancel("Восстановить настройку по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 УслСчД="*.?.105.??.*|*.?.106.??.*|*.?.109.??.*|*.?.401.20.*&(*.221|*.222|*.223|*.224|*.225|*.226|*.290)";
 УслСчК="*.?.302.??.730|*.?.208.??.660";
 СумГК=100000;
 УслСчАвД="";
 УслСчАвК="*.?.206.??.*";
 if FieldName="ПоУмолчанию":
    Message("Условия восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 if УслСчД="" and УслСчК="": Message("Заполните условие отбора счетов",mtError); Template.Field="УслСчД"; ^False; fi;
 Настр(True);
 ОткрНастр(False);
 Return False;
end;

Func УслСч_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var ret:n;
 ret=Saldo(Value,1.1.100);
 Return True;
end;

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

Func Учр_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","НАШЕ");
 if not Rec=nil:
    Учр=GetCardFieldS("Контрагент",Rec,"КорИмя");
 fi;
 Return False;
end;

Func MM_onEnter (Field:S; Iter:I):L;
var i:I;
 ClearVariable(Buf);
 Buf[1]="I квартал";
 Buf[2]="II квартал";
 Buf[3]="III квартал";
 Buf[4]="IV квартал";
 Buf[5]="Год";
 i=Mon(ToDay);
 i=if(i>=1 and i<4:1|i>=3 and i<7:2|i>=7 and i<10:3|true:4);
 I=Alternate("Выбор периода расчета",Buf,30,i,12);
 if not I=0: 
    MM=I;
 fi;
 Очистить;
 Оформление;
 ^False;
end;

Func YYYY_onEnter (Field:S; Iter:I):L;
var i:i;
 ClearVariable(Buf);
 for i=1..5 do	Buf[i]=Str(Year(ToDay)+I-4); od;
 i=Alternate("Выбор года расчета",Buf,30,4,12);
 if I=0: ^False; fi; 
 YYYY=Int(Buf[i]);
 Очистить;
 ^False;
end;

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


Func пп_OnEnter(FieldName: String; Iter: Integer): logical;
var y,z:I;
 Iter=Int(ExtractWord(1,ExtractWord(2,FieldName,"["),"]"));
 Прочие.Расшифр_Закупки_ОКДП.Очистить;
 if Rep_Link[Iter]=-1:
    if Rep_ОКДП[Iter]="":
       z=SearchInArray(ext4,Rep_verОКДП_Гр[Iter]+"#"+Rep_ОКДП_Гр[Iter],True);
       While ext4[z]=Rep_verОКДП_Гр[Iter]+"#"+Rep_ОКДП_Гр[Iter] do
	Прочие.Расшифр_Закупки_ОКДП.ДобСтр(ext[z],Rep_verОКДП_Гр[Iter],Rep_ОКДП_Гр[Iter],ExtractWord(3,ext3[z],"#"),extДЗ[z],extСум[z],extКонтр[z],extКарт[z],extЗап[z]);
	z=z+1;
       od;
      else
       z=SearchInArray(ext3,Rep_verОКДП_Гр[Iter]+"#"+Rep_ОКДП_Гр[Iter]+"#"+Rep_ОКДП[Iter],True);
       While ext3[z]=Rep_verОКДП_Гр[Iter]+"#"+Rep_ОКДП_Гр[Iter]+"#"+Rep_ОКДП[Iter] do
	Прочие.Расшифр_Закупки_ОКДП.ДобСтр(ext[z],Rep_verОКДП_Гр[Iter],Rep_ОКДП_Гр[Iter],Rep_ОКДП[Iter],extДЗ[z],extСум[z],extКонтр[z],extКарт[z],extЗап[z]);
	z=z+1;
       od;
    fi;
   else
    Iter=Rep_Link[Iter];
    y=SearchInArray(extKey,SubStr(Key[Iter],3,255),False);
    z=SearchInArray(ext2,ext2[y],True); --можем попать не в начало списка
    While ext2[z]=ext2[y] do
     Прочие.Расшифр_Закупки_ОКДП.ДобСтр(ext[z],verОКДП_Гр[Iter],ОКДП_Гр[Iter],ОКДП[Iter],extДЗ[z],extСум[z],extКонтр[z],extКарт[z],extЗап[z]);
     z=z+1;
    od;
 fi;
 OpenBlank("Прочие.Расшифр_Закупки_ОКДП",True);
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if УслСчД="" and УслСчК="": Message("Заполните условие отбора счетов",mtError); ОткрНастр(True); Template.Field="УслСчД"; Exit; fi;
 if flagУчетАванс:
    if УслСчАвД="" and УслСчАвК="": Message("Заполните условие отбора счетов выданыых авансов",mtError); ОткрНастр(True); Template.Field="УслСчАвД"; Exit; fi;
 fi;
 if MM=0: Message("Выберите период расчета",mtError); Template.Field="MM_"; Exit; fi;
 Расчет;
 Отрисовать;
end;

Proc cbНИ_OnChange(Sender: String);
 Настр(True);
 Очистить;
end;

Proc cb100000_OnChange(Sender: String);
 Настр(True);
 Очистить;
end;

Proc cbОКДП_Гр_OnChange(Sender: String);
 Отрисовать;
 Оформление;
end;

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

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

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

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Реестр будет очищен, продолжить ?",mtWarning)=cmOk:
    Очистить;
 fi;
end;

Proc rbПересчет_OnChange(Sender: String);
 if flagПересчет=0:
    btnРасчет_OnClick(Sender);
   else
    ПересчетГрупп;
 fi;
 Отрисовать;
end;

Proc cbБезДаты_OnChange(Sender: String);
 Отрисовать;
end;

Proc cbУчетАванс_OnChange(Sender: String);
 btnРасчет_OnClick(Sender);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
var Rec: Record;
 Раб.Настр_Печать.Cfg("",SelfCfg);
 if Учр="":
    Rec=Раб.Бюджет2005.НашРекв;
    if not Rec=nil:
       Учр=GetCardFieldS("Контрагент",Rec,"КорИмя");
    fi;
 fi;
 Настр(False);
 ОткрНастр(False);
end;

Proc AfterOpen(Destroy: Logical);
 Оформление;
 if not Упр=0:
    Отрисовать;
 fi;
end;
--Обработчики событий шаблона -----
--


Конец
