-- Шаблон создан мастером бланков
-- 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=["К.*"];
var СумГК:N=[100000];

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

Учр:S;

MM:I;
var MM_:S=if(MM<=12,Месяц(MM),if(MM=13,"Год",if(MM=14,"I квартал",if(MM=15,"II квартал",if(MM=16,"III квартал","IV квартал")))));
YYYY:I=[Year(ToDay)];
var ДН_:D=if(MM<13,Dat(1,MM,YYYY),if(MM=13,Dat(1,1,YYYY),if(MM=14,Dat(1,1,YYYY),if(MM=15,Dat(1,4,YYYY),if(MM=16,Dat(1,7,YYYY),Dat(1,10,YYYY))))));
var ДН:D=if(FlagНИ,Dat(1,1,YYYY),ДН_);
var ДК:D=if(MM<12,Dat(1,MM+1,YYYY),if(MM=12 or MM=13 or MM=17,Dat(1,1,YYYY+1),if(MM=14,Dat(1,4,YYYY),if(MM=15,Dat(1,7,YYYY),if(MM=16,Dat(1,10,YYYY))))));

ДопАн:S;

var A:S="+";
var D:S="-";

Упр:I;

var пп[]:i=$;
verОКДП_Гр[]:S;
ОКДП_Гр[]:S;
ОКДП[]:S;
Предм[]:S;
Цена[]:N;
Кол[]:N;
ЕдИзм[]:S;
СумСНДС[]:N;
НаимКонтр[]:S;
ДЗ[]:D;
Док[]:S;
IDt[]:i;

var Контр_:S="";

var ВсегоСумСНДС:N=SumOfArray(СумСНДС,Упр);

ДолжнИсп: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;
cbОКДП     : Object;
cbОКДП_Гр  : Object;
bvlПересчет: Object;
rbПересчет : Object;
rb601в273  : Object;
rb273в601  : Object;

var OWAДО  :I;
var  OAДО  :I;
var BufДО[]:S;

var OWAАВ  :I;
var  OAАВ  :I;
var OAАВ2  :I;
var BufАВ[]:Record;

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

var Key[]:S;
var Key_verОКДП_Гр[]:S;
var Key_ОКДП_Гр[]:S;
var Key_ОКДП[]:S;
var Key_Сум[]:N;
var Key_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;
 cbОКДП.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;
 УпрН=Flag;
end;

Proc Оформление;
var s,c,i:i;
var Obj: Object;
 cbОКДП.Enabled=flagПоказОКДП;
 cbОКДП_Гр.Enabled=flagОКДП and flagПоказОКДП;
 rbПересчет.Enabled=flagПоказОКДП;
 rb601в273.Enabled=flagПоказОКДП;
 rb273в601.Enabled=flagПоказОКДП;
 for s=1..3 do
  if FindObject("s"+Str(s),Obj):
     Obj.Column(5,ColVisible,flagПоказОКДП);
     Obj.Column(6,ColVisible,flagПоказОКДП);
     Obj.Column(7,ColVisible,flagПоказОКДП);
     --
     Obj.Column(13,ColWidth,if(flagПоказОКДП,500,640));
     Obj.Column(16,ColWidth,if(flagПоказОКДП,440,580));
     if s=1:
        i=if(flagПоказОКДП,5,2);
        for c=8..16 do
         if not c=14:
            Obj.Cell(3,c,CellContents,Str(i),True);
            i=i+1;
         fi;
        od;
     fi;
  fi;
 od;
end;

Proc Очистить;
 ClearVariable(OWAДО);
 ClearVariable(OAДО);
 ClearVariable(BufДО);
 ClearVariable(OWAАВ);
 ClearVariable(OAАВ);
 ClearVariable(OAАВ2);
 ClearVariable(BufАВ);
 ClearVariable(Упр);
 ClearVariable(verОКДП_Гр);
 ClearVariable(ОКДП_Гр);
 ClearVariable(ОКДП);
 ClearVariable(Предм);
 ClearVariable(Цена);
 ClearVariable(Кол);
 ClearVariable(ЕдИзм);
 ClearVariable(СумСНДС);
 ClearVariable(НаимКонтр);
 ClearVariable(ДЗ);
 ClearVariable(Док);
 ClearVariable(IDt);
 S1.RowsCount=3;
 S2.Visible=True;
end;

Func КонвОКДП_Гр(ver:S; gr:S; code:s):s;
var val:s;
 if not ver="" and 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 РасчетДО(Rec: Record; t:i);
var z,i,ii,p,k:i;
var Flag,Flag2:L;
var tmp,verОКДП_Гр_:S;
var ДЗ_:D;
 ДЗ_=TransDate(t);
 if not SearchInArray(BufДО,RecordToString(Rec)+"#"+DateToString(ДЗ_),True)=-1: Exit; fi;
 AddInArray(BufДО,True,False,RecordToString(Rec)+"#"+DateToString(ДЗ_));
 z=GetRecordNumber(OWAДО,Rec);
 if z=0: Exit; fi;
 if flagИсклГос:
    if GetFieldL(OWAДО,z,"УчетБО"):
       Flag=True;
      else
       Try
        Flag=GetFieldN(OWAДО,z,"Договор.СумДок")<СумГК and not GetFieldL(OWAДО,z,"Договор.Учет_Реестр_ОФК");
       Except
        Flag=True;
       end;
    fi;
   else
    Flag=True;
 fi;
 if Flag:
    verОКДП_Гр_=Str(GetFieldI(OWAДО,z,"verОКДП_Гр"));
    if verОКДП_Гр_="0": verОКДП_Гр_="601"; fi;
    k=1;
    if GetFieldL(OWAДО,z,"Аннул"):
       if ДЗ_=GetFieldD(OWAДО,z,"Аннул_Дата") and ДЗ_=GetFieldD(OWAДО,z,"ДатаРег"): Exit;
         |ДЗ_=GetFieldD(OWAДО,z,"Аннул_Дата"): k=-1;
       fi;
    fi;
    Flag=GetFieldL(OWAДО,z,"УчетТМЦ") or GetFieldL(OWAДО,z,"УчетОКДП");
    if Flag:
       ii=Records(OAДО);
       p=0;
       for i=1..ii do
        Flag2=False;
        if not GetFieldR(OAДО,i,"ТМЦ")=nil:
           InsertFrame(Упр,Упр+1);
           Предм[Упр]=GetFieldS(OAДО,i,"ТМЦ.Коммент");
           Flag2=True;
          |not GetFieldS(OAДО,i,"Предм1")="":
           InsertFrame(Упр,Упр+1);
           Предм[Упр]=GetFieldS(OAДО,i,"Предм1")+GetFieldS(OAДО,i,"Предм2")+GetFieldS(OAДО,i,"Предм3")+GetFieldS(OAДО,i,"Предм4");
           Flag2=True;
          |not GetFieldS(OAДО,i,"ОКДП_Гр")="":
           InsertFrame(Упр,Упр+1);
           tmp=GetFieldS(OAДО,i,"ОКДП");
           if tmp="0000000" or tmp="":
              Предм[Упр]="";
             else
              Предм[Упр]=Раб.Договор.ВзятьЗначОКДП(tmp,"Наим");
           fi;
           Flag2=True;
          |True: p=p+1;
        fi;
        if Flag2:
           verОКДП_Гр[Упр]=verОКДП_Гр_;
           ОКДП_Гр[Упр]=GetFieldS(OAДО,i,"ОКДП_Гр");
           if ОКДП_Гр[Упр]="": verОКДП_Гр[Упр]=""; fi;
           ОКДП[Упр]=GetFieldS(OAДО,i,"ОКДП");
           Цена[Упр]=GetFieldN(OAДО,i,"Цена");
           Кол[Упр]=GetFieldN(OAДО,i,"Кол");
           ЕдИзм[Упр]=GetFieldS(OAДО,i,"ЕдИзм");
           СумСНДС[Упр]=if(GetFieldS(OWAДО,z,"ОКВ")="643",GetFieldN(OAДО,i,"СумСНДС"),GetFieldN(OAДО,i,"СумРубСНДС"))*k;
           if Round(Цена[Упр],2)=0: Цена[Упр]=Abs(СумСНДС[Упр]); fi;
           НаимКонтр[Упр]=GetFieldS(OWAДО,z,"Контр.КорИмя")+", ИНН "+GetFieldS(OWAДО,z,"Контр.ИНН")+", "+if(GetFieldS(OWAДО,z,"Контр.ЮрАдрес")="",GetFieldS(OWAДО,z,"Контр.ПочтАдрес"),GetFieldS(OWAДО,z,"Контр.ЮрАдрес"));
           ДЗ[Упр]=ДЗ_;
           Док[Упр]=GetFieldS(OWAДО,z,"НаимДок.Наим")+" №"+GetFieldS(OWAДО,z,"НомерДок")+" от "+DateToString(GetFieldD(OWAДО,z,"ДатаДок"));
           if not GetFieldR(OWAДО,z,"Договор")=nil:
              Try
               Док[Упр]=GetFieldS(OWAДО,z,"Договор.НаимДок.Наим")+" №"+GetFieldS(OWAДО,z,"Договор.НомерДок")+" от "+DateToString(GetFieldD(OWAДО,z,"Договор.ДатаДок"))+" "+Док[Упр];
              Except
              end;
           fi;
           IDt[Упр]=t;
        fi;
       od;
     fi;
     if not Flag or ii=p:
        InsertFrame(Упр,Упр+1);
        Предм[Упр]=GetFieldS(OWAДО,z,"Содерж");
        if GetFieldS(OWAДО,z,"ОКВ")="643":
           СумСНДС[Упр]=GetFieldN(OWAДО,z,"СумДок")*k;
          else
           СумСНДС[Упр]=GetFieldN(OWAДО,z,"СумРубДок")*k;
        fi;
        НаимКонтр[Упр]=GetFieldS(OWAДО,z,"Контр.КорИмя")+", ИНН "+GetFieldS(OWAДО,z,"Контр.ИНН")+", "+if(GetFieldS(OWAДО,z,"Контр.ЮрАдрес")="",GetFieldS(OWAДО,z,"Контр.ПочтАдрес"),GetFieldS(OWAДО,z,"Контр.ЮрАдрес"));
        ДЗ[Упр]=ДЗ_;
        Док[Упр]=GetFieldS(OWAДО,z,"НаимДок.Наим")+" №"+GetFieldS(OWAДО,z,"НомерДок")+" от "+DateToString(GetFieldD(OWAДО,z,"ДатаДок"));
        if not GetFieldR(OWAДО,z,"Договор")=nil:
           Try
            Док[Упр]=GetFieldS(OWAДО,z,"Договор.НаимДок.Наим")+" №"+GetFieldS(OWAДО,z,"Договор.НомерДок")+" от "+DateToString(GetFieldD(OWAДО,z,"Договор.ДатаДок"))+" "+Док[Упр];
           Except
           end;
        fi;
        IDt[Упр]=t;
     fi;
 fi;
end;

Func ПроверитьУсловияСч(Усл1:S; Усл2:S):L;
var Acc:S;
var z:i;
 ClearVariable(Buf);
 Усл1=if(Усл1="","(*)","("+Усл1+")");
 Усл2=if(Усл2="","(*)","("+Усл2+")");
 if Length(Усл1)+Length(Усл2)>254:
    z=0;
    for Account Acc=Усл1,Sort do
     z=z+1;
     Buf[z]=Acc;
    od;
    for Account Acc=Усл2,Sort do
     if not SearchInArray(Buf,Acc,True)=-1: ^True; fi;
    od;
   else
    for Account Acc=Усл1+"&"+Усл2 do
     ^True;
    od;
 fi;
 ^False;
end;

Func ПроверитьУсловияАн(Усл1:S; Усл2:S):L;
var Sgn:S;
var z:i;
 ClearVariable(Buf);
 Усл1=if(Усл1="","(*)","("+Усл1+")");
 Усл2=if(Усл2="","(*)","("+Усл2+")");
 if Length(Усл1)+Length(Усл2)>254:
    z=0;
    for Sign Sgn=Усл1,Sort do
     z=z+1;
     Buf[z]=Sgn;
    od;
    for Sign Sgn=Усл2,Sort do
     if not SearchInArray(Buf,Sgn,True)=-1: ^True; fi;
    od;
   else
    for Sign Sgn=Усл1+"&"+Усл2 do
     ^True;
    od;
 fi;
 ^False;
end;

Proc РасчетАВ(Rec: Record; t:i);
var z,i,ii :i;
var СчД,СчК,hСчД,hСчК,Призн,hПризн,verОКДП_Гр_:S;
var aRec :Record;
var Flag:L;
 if not SearchInArray(BufАВ,Rec,True)=-1: Exit; fi;
 AddInArray(BufАВ,True,False,Rec);
 z=GetRecordNumber(OWAАВ,Rec);
 if z=0: Exit; fi;
 if GetFieldI(OWAАВ,z,"ver")=1:
    ii=Records(OAАВ);
    for i=1..ii do
     InsertFrame(Упр,Упр+1);
     Предм[Упр]=GetFieldS(OAАВ,i,"Предм");
     Цена[Упр]=GetFieldN(OAАВ,i,"Цена");
     Кол[Упр]=GetFieldN(OAАВ,i,"Кол");
     ЕдИзм[Упр]=GetFieldS(OAАВ,i,"ЕдИзм");
     СумСНДС[Упр]=GetFieldN(OAАВ,i,"СумСНДС");
     aRec=GetFieldR(OAАВ, i, "КОНТР");
     if aRec<>nil:
       НаимКонтр[Упр]=GetFieldS(OAАВ,i,"Контр.КорИмя")+", ИНН "+GetFieldS(OAАВ,i,"Контр.ИНН")+", "+if(GetFieldS(OAАВ,i,"Контр.ЮрАдрес")="",GetFieldS(OAАВ,i,"Контр.ПочтАдрес"),GetFieldS(OAАВ,i,"Контр.ЮрАдрес"));
     fi;
     ДЗ[Упр]=TransDate(t);
     Док[Упр]="Авансовый отчет №"+GetFieldS(OWAАВ,z,"НомерБум")+" от "+DateToString(GetFieldD(OWAАВ,z,"ДатаДок"));
     IDt[Упр]=t;
    od;
   |GetFieldI(OWAАВ,z,"ver")>1:
    verОКДП_Гр_=Str(GetFieldI(OWAАВ,z,"verОКДП_Гр"));
    if verОКДП_Гр_="0": verОКДП_Гр_="601"; fi;
    ii=Records(OAАВ2);
    for i=1..ii do
     if not GetFieldS(OAАВ2,i,"Предм")="":
        InsertFrame(Упр,Упр+1);
        Предм[Упр]=GetFieldS(OAАВ2,i,"Предм");
        verОКДП_Гр[Упр]=verОКДП_Гр_;
        ОКДП_Гр[Упр]=GetFieldS(OAАВ2,i,"ОКДП_Гр");
        ОКДП[Упр]=GetFieldS(OAАВ2,i,"ОКДП");
        Цена[Упр]=GetFieldN(OAАВ2,i,"Цена");
        Кол[Упр]=GetFieldN(OAАВ2,i,"Кол");
        ЕдИзм[Упр]=GetFieldS(OAАВ2,i,"ЕдИзм");
        СумСНДС[Упр]=GetFieldN(OAАВ2,i,"Учт_Руб");
        aRec=GetFieldR(OAАВ2, i, "КОНТР");
        if aRec<>nil:
          НаимКонтр[Упр]=GetFieldS(OAАВ2,i,"Контр.КорИмя")+", ИНН "+GetFieldS(OAАВ2,i,"Контр.ИНН")+", "+if(GetFieldS(OAАВ2,i,"Контр.ЮрАдрес")="",GetFieldS(OAАВ2,i,"Контр.ПочтАдрес"),GetFieldS(OAАВ2,i,"Контр.ЮрАдрес"));
        fi;
        ДЗ[Упр]=TransDate(t);
        Док[Упр]="Авансовый отчет №"+GetFieldS(OWAАВ,z,"НомерБум")+" от "+DateToString(GetFieldD(OWAАВ,z,"ДатаДок"));
        IDt[Упр]=t;
     fi;
    od;
   |True:
    ii=Records(OAАВ2);
    hСчД="@"; hСчК="@"; Призн="";
    for i=1..ii do
     СчД=GetFieldS(OAАВ2,i,"СчДеб");
     СчК=GetFieldS(OAАВ2,i,"СчКре");
     Flag=(hСчД=СчД and hСчК=СчК);
     if not Flag:
        Flag=ПроверитьУсловияСч(УслСчД,СчД);
        if Flag: Flag=ПроверитьУсловияСч(УслСчК,СчК); fi;
     fi;
     if Flag:
        hСчД=СчД; hСчК=СчК; hПризн=Призн;
        InsertFrame(Упр,Упр+1);
        Предм[Упр]=GetFieldS(OAАВ2,i,"Содерж");
        СумСНДС[Упр]=GetFieldN(OAАВ2,i,"Учт_Руб");
        ДЗ[Упр]=TransDate(t);
        Док[Упр]="Авансовый отчет №"+GetFieldS(OWAАВ,z,"НомерБум")+" от "+DateToString(GetFieldD(OWAАВ,z,"ДатаДок"));
        IDt[Упр]=t;
     fi;
    od;
 fi;
end;

Func РасчетДНФА(Rec: Record; t:i):i;-- поиск второй проводки из проводки t+1,t+2... где дебет соответствует (*.?.101.??.???|*.?.102.??.???|*.?.105.??.???) кредит равен debt
var sum:n;                          -- и не встречаются проводки
var z:i;
var dd0,dd1:d;
var УслСч,УслАн_,debt,crd_name:S;
 debt= TransDeb(t);
 if not match(debt,'*.?.106.??.???'): ^0; fi;
 sum=TransSum(t);
 crd_name=TransCardFile(t);
 dd0=TransDate(t);
 dd1=dd0+1;
    УслСч='+(*.?.101.??.???|*.?.102.??.???|*.?.105.??.???)/';
    УслСч=УслСч+SubStr(debt,1,length(debt)-3)+'4??';
    УслАн_='НФА.*&ДНФАid.'+str16(ЗаписьКЧислу(Rec));
    for Transaction z=УслСч+"{"+УслАн_+"}",dd0,dd1 do
      if TransCardFile(z)=crd_name:
         if z-t>3:^0;fi;-- ушли более чем на 3 проводки, дальше искать нет смысла
         if z>t:
            if sum=TransSum(z):
              ^z;
            fi;
         fi;
      fi;
    od;
 ^0;
end;

Proc Расчет;
var t,t2,OWAК,n,OWA:i;
var tmp,УслАн_,Призн_,tКарт,УслСч,verОКДП_Гр_:S;
var tДат:D;
var tЗап,Rec: Record;
var isTrans,Flag:L;
 isTrans=False;
 Очистить;
 Refresh(False,ДК);
 УслАн_=if(ДопАн="","","("+ДопАн+")");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн,УслАн_,"&");
 ShowProgress(ДК-ДН,"Расчет...");
 Раб.ИмяПолеКарт.Начать;
 OWAДО=OpenWorkArea("РПО_ДО","");
 Try
  if not Records(OWAДО)=0: OAДО=OpenArray(OWAДО,1,"РАСШИФР",""); fi;
  OWAАВ=OpenWorkArea("РПО_АВАНС_ОТЧЕТ","");
  Try
   if not Records(OWAАВ)=0: 
      OAАВ=OpenArray(OWAАВ,1,"РЗ",""); 
      OAАВ2=OpenArray(OWAАВ,1,"Позиции","");
   fi;
   OWAК=OpenWorkArea("Контрагент","");
   Try
    УслСч=Раб.Бюджет2005.Объединить(УслСчД,УслСчК,"/");
    for Transaction t=УслСч+"{"+УслАн_+"}",ДН,ДК do
     tДат=TransDate(t);
     ProgressPos((ДК-ДН)-(ДК-tДат));
     tКарт=TransCardFile(t);
     tЗап=TransRecord(t);
     if tКарт="РПО_ДО": РасчетДО(tЗап,t);
       |tКарт="РПО_АВАНС_ОТЧЕТ": РасчетАВ(tЗап,t);
       |True:
        Призн_=TransSigns(t);
        if flagИсклГос:
           Flag=True;
           tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","ДОГОВОР.*","");
           if not tmp="":
              Rec=SignToRecord(tmp,False);
              if not Rec=nil:
                 tmp=SignCardFile(tmp,False);
                 if tmp="РПО_ДОГОВОР" or tmp="РПО_ДОГОВОР_ПРИЗНАК":
                    OWA=Раб.ИмяПолеКарт.ВзятьКартОбл(tmp);
                    if tmp="РПО_ДОГОВОР_ПРИЗНАК":
                       tmp="Договор.";
                      else
                       tmp="";
                    fi;
                    Try
                     Flag=GetFieldN(OWAДО,n,tmp+"СумДок")<СумГК and not GetFieldL(OWAДО,n,tmp+"Учет_Реестр_ОФК");
                    Except
                     Flag=True;
                    end;
                   |tmp="РПО_ДО":
                    n=GetRecordNumber(OWAДО,Rec);
                    if GetFieldL(OWAДО,n,"УчетБО"):
                       Flag=True;
                      else
                       Try
                        Flag=GetFieldN(OWAДО,n,"Договор.СумДок")<СумГК and not GetFieldL(OWAДО,n,"Договор.Учет_Реестр_ОФК");
                       Except
                        Flag=True;
                       end;
                    fi;
                 fi;
              fi;
           fi;
          else
           Flag=True;
        fi; --if flagИсклГос:
        if Flag:
           t2=0;
           isTrans=True;
           InsertFrame(Упр,Упр+1);
           tmp=TransQuantSign(t);
           if tmp="":--попытка поиска количественного признака из второй проводки
              if tКарт="РПО_ОПЕРАЦИИДНФА": t2=РасчетДНФА(tЗап,t);
                 tmp=TransQuantSign(t2);
              fi;
           fi;
           if tmp="":
              Предм[Упр]=TransComment(t);
             else
              Кол[Упр]=TransSum(if(t2>0,t2,t),"КОЛ");
              Предм[Упр]=Name_A(tmp);
              ЕдИзм[Упр]=Unit(tmp);
              if Предм[Упр]="" or Предм[Упр]=" ": Предм[Упр]=tmp; fi;
           fi;
           if Кол[Упр]=0: Кол[Упр]=1; fi;
           СумСНДС[Упр]=TransSum(t);
           Цена[Упр]=Abs(СумСНДС[Упр]/Кол[Упр]);
           verОКДП_Гр_="601";
           tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","ОКДП.*","");
           if tmp="": tmp=SubStr(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","-ОКДП.*",""),2,255); fi;
           if tmp="":
              tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","ОКДП2.*","");
              if tmp="": tmp=SubStr(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","-ОКДП2.*",""),2,255); fi;
              if tmp="": verОКДП_Гр_=""; else verОКДП_Гр_="273"; fi;
           fi;
           if not tmp="":
              verОКДП_Гр[Упр]=verОКДП_Гр_;
              ОКДП_Гр[Упр]=ExtractWord(2,tmp,".");
              ОКДП[Упр]=ExtractWord(3,tmp,".");
              if Предм[Упр]="":
                 if not ОКДП[Упр]="" and not ОКДП[Упр]="0000000":
                    Предм[Упр]=Раб.Договор.ВзятьЗначОКДП(ОКДП[Упр],"Наим");
                 fi;
              fi;
           fi;
           tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ",СправКонтр,"|");
           if tmp="": tmp=SubStr(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","-"+СправКонтр,"|"),2,255); fi;
           if not tmp="":
              Rec=SignToRecord(tmp,False);
              if not Rec=nil and SignCardFile(tmp,False)="Контрагент":
                 n=GetRecordNumber(OWAК,Rec);
                 if not n=0:
                    НаимКонтр[Упр]=GetFieldS(OWAК,n,"КорИмя");
                    НаимКонтр[Упр]=НаимКонтр[Упр]+", ИНН "+GetFieldS(OWAК,n,"ИНН");
                    tmp=GetFieldS(OWAК,n,"ЮрАдрес");
                    if tmp="": tmp=GetFieldS(OWAК,n,"ПочтАдрес"); fi;
                    НаимКонтр[Упр]=НаимКонтр[Упр]+", "+tmp;
                 fi;
                else
                 НаимКонтр[Упр]=Name_A(tmp);
                 if НаимКонтр[Упр]="" or НаимКонтр[Упр]=" ": НаимКонтр[Упр]=tmp; fi;
              fi;
           fi;
           ДЗ[Упр]=tДат;
           IDt[Упр]=t;
        fi; --Flag
     fi;
    od;
   Finally
    CloseWorkArea(OWAК);
   end;
  Finally
   CloseWorkArea(OWAАВ);
  end;
 Finally
  CloseWorkArea(OWAДО);
  Раб.ИмяПолеКарт.Закончить;
  CloseProgress;
 end;
 for t=1..Упр do
  ОКДП_Гр[t]=КонвОКДП_Гр(verОКДП_Гр[t],ОКДП_Гр[t],ОКДП[t]);
 od;
 Message("Расчет завершен");
 if isTrans:
    Trace("Внимание ! Для корректного заполнения реестра, проводки должны быть сформированы через следующие бланки (подсистемы): Авансовые отчеты; Денежные обязательства; УНФА");
 fi;
end;

Proc Группировать;
var Key0_,Key1_,Key2_,Key3_:S;
var Iter,z,zz,r,c,cfs:i;
 ClearVariable(Key);
 ClearVariable(Key_verОКДП_Гр);
 ClearVariable(Key_ОКДП_Гр);
 ClearVariable(Key_ОКДП);
 ClearVariable(Key_Сум);
 ClearVariable(Key_Link);
 ShowProgress(Упр*2,"Группировка....");
 Try
  for Iter=1..Упр do
   Key0_=if(verОКДП_Гр[Iter]="","000",verОКДП_Гр[Iter]);
   Key1_=Key0_+"#"+if(ОКДП_Гр[Iter]="","000",ОКДП_Гр[Iter]);
   Key2_=Key1_+"."+if(ОКДП[Iter]="","0000000",ОКДП[Iter]);
   Key3_=Key2_+"#"+Раб.Формат.ДатаСтр(ДЗ[Iter],Раб.Формат.dfYYYYMMDD);
   --группировка приказу
   z=SearchInArray(Key,Key0_,True);
   if z=-1:
      z=InsertInArraySort(Key,Key0_);
      InsertInArray(Key_verОКДП_Гр,z,if(verОКДП_Гр[Iter]="","000",verОКДП_Гр[Iter]));
      InsertInArray(Key_ОКДП_Гр,z,"");
      InsertInArray(Key_ОКДП,z,"");
      InsertInArray(Key_Сум,z,СумСНДС[Iter]);
      InsertInArray(Key_Link,z,-1);
     else
      Key_Сум[z]=Key_Сум[z]+СумСНДС[Iter];
   fi;
   --групировка по группе
   z=SearchInArray(Key,Key1_,True);
   if z=-1:
      z=InsertInArraySort(Key,Key1_);
      InsertInArray(Key_verОКДП_Гр,z,if(verОКДП_Гр[Iter]="","000",verОКДП_Гр[Iter])); --нужна версия для получения имени
      InsertInArray(Key_ОКДП_Гр,z,if(ОКДП_Гр[Iter]="","000",ОКДП_Гр[Iter]));
      InsertInArray(Key_ОКДП,z,"");
      InsertInArray(Key_Сум,z,СумСНДС[Iter]);
      InsertInArray(Key_Link,z,-1);
     else
      Key_Сум[z]=Key_Сум[z]+СумСНДС[Iter];
   fi;
   --группировка по коду
   if not flagОКДП_Гр:
      z=SearchInArray(Key,Key2_,True);
      if z=-1:
         z=InsertInArraySort(Key,Key2_);
         InsertInArray(Key_verОКДП_Гр,z,"");
         InsertInArray(Key_ОКДП_Гр,z,"");
         InsertInArray(Key_ОКДП,z,if(ОКДП[Iter]="","0000000",ОКДП[Iter]));
         InsertInArray(Key_Сум,z,СумСНДС[Iter]);
         InsertInArray(Key_Link,z,-1);
        else
         Key_Сум[z]=Key_Сум[z]+СумСНДС[Iter];
      fi;
      z=InsertInArraySort(Key,Key3_);
      InsertInArray(Key_verОКДП_Гр,z,"");
      InsertInArray(Key_ОКДП_Гр,z,"");
      InsertInArray(Key_ОКДП,z,"");
      InsertInArray(Key_Сум,z,0);
      InsertInArray(Key_Link,z,Iter);
   fi;
   ProgressPos(Iter);
  od;
  zz=LengthOfArray(Key);
  ShowProgress(zz*2,"Группировка....");
  S1.Visible=False;
  S2.Visible=False;
  S1.RowsCount=3;
  S1.RowsCount=3+zz;
  cfs=if(flagОКДП_Гр,0,fsBold);
  for z=1..zz do
   r=3+z;
   c=1;  S1.Cell(r,c,CellBorder,"0,0,0,0");
   c=2;  S1.Cell(r,c,CellBorder,"0,0,0,0");
   c=3;  S1.Cell(r,c,CellBorder,"2,1,1,1"); S1.Cell(r,c,CellContents,"пп["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField); S1.Cell(r,c,CellLookup,not Key_Link[z]=-1); S1.Cell(r,c,CellEventOnLookup,"пп_OnLookup");
   c=4;  S1.CellLinks(c-1,r,c,r);
   c=5;  S1.Cell(r,c,CellBorder,"1,1,1,1"); S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Key_verОКДП_Гр["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
   if Length(Key[z])=3:
      c=6;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,if(Key_verОКДП_Гр[z]="273":"Приказ Минэкономразвития РФ от 7 июня 2011 г. N 273"|Key_verОКДП_Гр[z]="601":"Приказ Минэкономразвития РФ от 1 декабря 2010 г. N 601"|true:"Без расшифровки"),True);
            S1.CellLinks(c,r,11,r);
      c=12; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Key_Сум["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      if flagОКДП_Гр:
         c=16; S1.Cell(r,c,CellBorder,"1,1,2,1");
        else
         c=3;  S1.Cell(r,c,CellBorder,"2,2,1,1");
               for c=5..15 do
                S1.Cell(r,c,CellBorder,"1,2,1,1");
               od;
         c=16; S1.Cell(r,c,CellBorder,"1,2,2,1");
      fi;
     |Length(Key[z])=7:
      c=5;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellContents,"",True); S1.Cell(r,c,CellFieldType,cftStaticText); --сбрасывем вывод приказа на экран (само значение нуно для получения првильног наивенования)
      c=6;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Key_ОКДП_Гр["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=7;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,if(Key_ОКДП_Гр[z]="000","Без расшифровки",Раб.Бюджет.НаимКБК(if(Key_verОКДП_Гр[z]="273","ОКДП_ГР273","ОКДП_ГР"),Key_ОКДП_Гр[z])),True);
            S1.CellLinks(c,r,11,r);
      c=12; S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Key_Сум["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellFormat,",##0.00;;-");
      if flagОКДП_Гр:
         c=16; S1.Cell(r,c,CellBorder,"1,1,2,1");
        else
         c=3;  S1.Cell(r,c,CellBorder,"2,2,1,1");
               for c=5..15 do
                S1.Cell(r,c,CellBorder,"1,2,1,1");
               od;
         c=16; S1.Cell(r,c,CellBorder,"1,2,2,1");
      fi;
     |Length(Key[z])=15:
      c=6;  S1.Cell(r,c,CellFontStyle,cfs); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Key_ОКДП_Гр["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=7;  S1.Cell(r,c,CellFontStyle,fsItalic+fsBold); S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"Key_ОКДП["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=8;  S1.Cell(r,c,CellFontStyle,fsItalic+fsBold); S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,if(Key_ОКДП[z]="0000000","Без расшифровки",Раб.Договор.ВзятьЗначОКДП(Key_ОКДП[z],"Наим")),True);
            S1.CellLinks(c,r,11,r);
      c=12; S1.Cell(r,c,CellFontStyle,fsItalic+fsBold); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Key_Сум["+Str(z)+"]",True); S1.Cell(r,c,CellFieldType,cftNumericField);  S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=16; S1.Cell(r,c,CellBorder,"1,1,2,1");
     |True:
      c=8;  S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,"Предм["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=9;  S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"Цена["+Str(Key_Link[z])+"]",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,"Кол["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftNumericField);  S1.Cell(r,c,CellFormat,"##.######");
      c=11; S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"ЕдИзм["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftNumericField);  S1.Cell(r,c,CellFieldType,cftCommonField);
      c=12; S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellContents,"СумСНДС["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftNumericField);  S1.Cell(r,c,CellFormat,",##0.00;;-");
      c=13; S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,"НаимКонтр["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);
      c=15; S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellContents,"ДЗ["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftDateField); S1.Cell(r,c,CellFormat,"dd/mm/yyyy");
      c=16; S1.Cell(r,c,CellAlignment,0); S1.Cell(r,c,CellContents,"Док["+Str(Key_Link[z])+"]",True); S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellBorder,"1,1,2,1");
   fi;
   S1.CellLinks(13,r,14,r);
   ProgressPos(zz+z);
  od;
 Finally
  S1.Visible=True;
  CloseProgress;
 end;
end;

Proc ПересчетГрупп;
var Iter:I;
var ver:s;
 if flagПересчет=0: Exit; fi;
 ver=if(flag601в273,"273","601");
 ShowProgress(Упр,"Пересчет групп....");
 Try
  for Iter=1..Упр do
   ProgressPos(Iter);
   if not verОКДП_Гр[Iter]=ver and not ОКДП[Iter]="0000000":
      verОКДП_Гр[Iter]=ver;
      ОКДП_Гр[Iter]=КонвОКДП_Гр(ver,ОКДП_Гр[Iter],ОКДП[Iter]);
   fi;
  od;
 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;
 if FieldName="ПоУмолчанию":
    Message("Условия восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 if УслСчД="" and УслСчК="": Message("Заполните условие отбора счетов",mtError); Template.Field="УслСчД"; ^False; fi;
 if СправКонтр="": 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 УслАн_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 tmp,Field:s;
 Field=AsString(Template.Field);
 tmp=Раб.Бюджет2005.Объединить(if(УслСчД="","","("+УслСчД+")"),if(УслСчД="","","("+УслСчК+")"),"|");
 if not tmp="": tmp=Раб.Бюджет2005.СписокСправ(tmp,0,""); fi;
 if not tmp="": tmp="("+tmp+")|~*.*"; fi;
 Cur=AnaElection(tmp);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 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 tmp:S;
 if УслСчД="" and УслСчК="": Message("Заполните условие на счета",mtError); Template.Field="УслСчД"; ^False; fi;
 tmp=Раб.Бюджет2005.Объединить(if(УслСчД="","","("+УслСчД+")"),if(УслСчД="","","("+УслСчК+")"),"|");
 tmp=AnaElection(tmp,True,False);
 if not tmp="":
    СправКонтр=Раб.Бюджет2005.Объединить(СправКонтр,tmp+".*","|");
 fi;
 Return False;
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);
 for i=1..12 do Buf[i]=Месяц(i); od;
 Buf[13]="Год";
 Buf[14]="I квартал";
 Buf[15]="II квартал";
 Buf[16]="III квартал";
 Buf[17]="IV квартал";
 I=Alternate("Выбор периода расчета",Buf,30,Mon(ToDay),12);
 if I=0: ^False; fi;
 MM=I;
 Очистить;
 ^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 A_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр,Iter+1);
 Return False;
end;


Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр,Iter);
 Return False;
end;

Func пп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 if flagОКДП:
    Iter=row-3;
    Iter=Key_Link[Iter];
    if Iter=-1: ^Cur; fi;
   else
    Iter=AsInteger(Template.Frame);
 fi;
 TransOpenJur(IDt[Iter]);
 Return Cur;
end;

Proc Сум_onExit(FieldName: String; Iter: Integer);
 if FieldName="Цена" or FieldName="Кол": СумСНДС[Iter]=Цена[Iter]*Кол[Iter];
   |True: Цена[Iter]=СумСНДС[Iter]/Кол[Iter];
 fi;
end;

Func Контр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
var Iter:i;
var Rec: Record;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
 if not Rec=nil:
    НаимКонтр[Iter]=GetCardFieldS("Контрагент",Rec,"КорИмя");
    НаимКонтр[Iter]=НаимКонтр[Iter]+", ИНН "+GetCardFieldS("Контрагент",Rec,"ИНН");
    tmp=GetCardFieldS("Контрагент",Rec,"ЮрАдрес");
    if tmp="": tmp=GetCardFieldS("Контрагент",Rec,"ПочтАдрес"); fi;
    НаимКонтр[Iter]=НаимКонтр[Iter]+", "+tmp;
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if УслСчД="" and УслСчК="": Message("Заполните условие отбора счетов",mtError); ОткрНастр(True); Template.Field="УслСчД"; Exit; fi;
 if СправКонтр="": Message("Заполните справочник контрагента",mtError); ОткрНастр(True); Template.Field="СправКонтр"; Exit; fi;
 if MM=0: Message("Выберите период расчета",mtError); Template.Field="MM_"; Exit; fi;
 S1.RowsCount=3;
 S2.Visible=True;
 Расчет;
 if flagПоказОКДП and flagОКДП and Упр>0:
    ПересчетГрупп;
    if flagОКДП: Группировать; fi;
 fi;
end;

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

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

Proc cbПоказОКДП_OnChange(Sender: String);
 Оформление;
 if flagПоказОКДП and flagОКДП:
    Группировать;
   else
    S1.RowsCount=3;
    S2.Visible=True;
 fi;
end;

Proc cbОКДП_OnChange(Sender: String);
 Оформление;
 if not Упр=0:
    if flagОКДП:
       Группировать;
      else
       S1.RowsCount=3;
       S2.Visible=True;
    fi;
 fi;
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:
    Очистить;
    S1.RowsCount=3;
    S2.Visible=True;
 fi;
end;

Proc rbПересчет_OnChange(Sender: String);
 if flagПересчет=0:
    btnРасчет_OnClick(Sender);
   else
    ПересчетГрупп;
    if flagОКДП: Группировать; fi;
 fi;
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:
    if flagОКДП:
       Группировать;
    fi;
 fi;
 Оформление;
end;
--Обработчики событий шаблона -----
--



Конец
