-- Шаблон создан мастером бланков
-- 27.09.2005 17:44:42
--
БланкСШаблоном [05.09.05] "Реестр входящих извещений";

Справ:S;

var УпрОтправ:I;
var Отправ_[]:S=if($=1,"Учреждение отправитель","");

var BufОтправ[]:S;
var BufНаимОтправ[]:S;

var Отправ[]:S;
var НаимОтправ[]:S;

Гр2:I;
var Гр2_:I=2;

var Упр:I;

var ПризнПБС[]:S;
var НаимПБС_[]:S=Name_A(ПризнПБС[$]);
var НаимПБС[]:S=if(Гр2=0 or НаимПБС_[$]="" or НаимПБС_[$]=" ",ПризнПБС[$],if(Гр2=1,НаимПБС_[$],if(Гр2=2,НаимПБС_[$]+" ("+ПризнПБС[$]+")",if(Гр2=3,ПризнПБС[$]+" ("+НаимПБС_[$]+")"))));
var КБК[]:S;
var КБК2[]:S;
var НомИзв[]:S;
var СумКБК[]:N;
var СумКБК2[]:N;
var СумИзв[]:N;
var UKey[]:S;
var is69н[]:L;

var ИтогСумИзв:N;

var ИтогСумКБК2[]:N;

var Index[] :S;
var Index2[]:I;

FlagНИ:L;
FlagИтог:L;

var MM:I;
var MMTxt:S=if(MM<=12,Месяц(MM),if(MM=13,"Год",if(MM=14,"I квартал",if(MM=15,"II квартал",if(MM=16,"III квартал","IV квартал")))));
var 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=[BaseCurrency];
ОКЕИ:S;

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

rbКБК      : Object;
rbФКР      : Object;
rbФКР_КОСГУ: Object;
rbКОСГУ    : Object;

var РежимКБК:I;

Отч1: Section;
Отч2: Section;
Отч3: Section;

var sКБК   []:S;
var sUkey  []:S;
var sСумИзв[]:N;
var sСумКБК[]:N;
--
--Процедуры и функции -------------                           
Func GetIndex (r:i; c:i):i;
var Ret,Value,l:I;
 Value=r+BitShl(c,16);
 Ret=SearchInArray(Index2,Value,False);
 if Ret=-1: 
    Ret=LengthOfArray(Index2)+1;
    InsertInArray(Index2,Ret,Value);
 fi;
 ^Ret;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(ПризнПБС);
 ClearVariable(НаимПБС);
 ClearVariable(КБК);
 ClearVariable(КБК2);
 ClearVariable(НомИзв);
 ClearVariable(СумКБК);
 ClearVariable(СумКБК2);
 ClearVariable(СумИзв);
 ClearVariable(UKey);
 ClearVariable(is69н);
 ClearVariable(ИтогСумИзв);
 ClearVariable(ИтогСумКБК2);
 ClearVariable(Index);
 ClearVariable(Index2);
 Template.Column=1;
 Template.Row=1;
 Отч1.ColsCount=5;
 Отч2.ColsCount=5; Отч2.RowsCount=1;
 Отч3.ColsCount=5;
end;

Proc УдалитьПустыеСтроки;
var n:i;
 n=1; 
 While n<=УпрОтправ do
  if НаимОтправ[n]="":
     DeleteFrame(УпрОтправ,n);
    else
     n=n+1;
  fi;
 od;
 if УпрОтправ<1: InsertFrame(УпрОтправ,УпрОтправ+1);fi;
end;

Func ВзятьПризн(Src:S; Value:S):S;
var w,nw:I;
var tmp,sp:s;
 sp=" ";
 nw=WordsCount(Src,sp);
 for w=1..nw do
  tmp=ExtractWord(w,src,sp);
  if Match(tmp,Value): ^tmp; fi;
 od;
 ^"";
end;

Proc ДобавитьОтправ(aПризнПБС:S);
var n:I;
var tmp:S;
 n=SearchInArray(BufОтправ,aПризнПБС,False);
 if n=-1:
    tmp=Name_A(aПризнПБС);
    if tmp="" or tmp=" ": tmp=aПризнПБС; fi;
    n=InsertInArraySort(BufНаимОтправ,tmp);
    InsertInArray(BufОтправ,n,aПризнПБС);
 fi;
end;

Proc СписокОтправ;
var OWA:I;
var NumRec1,n1,z:I;
var tmp,Rec:s;
var Filter:S;
 Filter="(ДВОЗВРАТ2>="+DateToString(ДН)+"and ДВОЗВРАТ2<"+DateToString(ДК)+") and ПРОВОДИТЬ";
 ClearVariable(BufОтправ);
 ClearVariable(BufНаимОтправ);
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ВХ","",Filter+" and Валюта='"+Вал+"'");
 Try
  NumRec1=Records(OWA);
  ShowProgress(NumRec1,"Поиск учреждений отправителей...");
  for n1=1..NumRec1 do
   ProgressPos(n1);
   Rec=RecordToString(GetFieldR(OWA,n1,"ОТПРАВРЕКВ"));
   if not Rec="":
      z=SearchInArray(BufОтправ,Rec,False);
      if z=-1:
         tmp=GetCardFieldS("Контрагент",StringToRecord(Rec),"КОРИМЯ");
         if tmp="": tmp=CardFileRecSign("КОНТРАГЕНТ","ПРИЗНАК","",StringToRecord(Rec)); tmp=SubStr(tmp,2,255); fi;
         z=InsertInArraySort(BufНаимОтправ,tmp);
         InsertInArray(BufОтправ,z,Rec);
      fi;
   fi;
  od;
  InsertInArray(BufОтправ,1,"*");
  InsertInArray(BufНаимОтправ,1,"Все учреждения отправители");
  InsertInArray(BufОтправ,1,"");
  InsertInArray(BufНаимОтправ,1,"Обновить список");
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

Func КБКtoКБК2:I;
var Iter:I;
 ClearVariable(КБК2);
 for Iter=1..Упр do
  if SearchInArray(КБК2,КБК[Iter],True)=-1:
     InsertInArraySort(КБК2,КБК[Iter]);
  fi;
 od;
 ^LengthOfArray(КБК2);
end;

Proc ПостроитьОтчет(nStr:I);
var r,c,rr,cc,n,iter,idx,cw:i;
var Ukey_:S;
 ShowProgress(Упр*2,"Расчет....");
 Try
  Отч1.ColsCount=5;
  Отч2.ColsCount=5; Отч2.RowsCount=1;
  Отч3.ColsCount=5;
  --
  cc=4+КБКtoКБК2;
  if cc<5: Exit; fi;
  --Рисуем заголовок
  if РежимКБК=0: cw=330; else cw=250; fi;
  Отч1.ColsCount=cc;
  Отч1.CellLinks(5,1,cc,1);
  r=2; c=4; --Добавляем КБК в колонки
  for n=1..cc-4 do
   Отч1.Cell(r,c+n,CellContents,"КБК2["+Str(n)+"]");
   Отч1.Cell(r,c+n,CellFieldType,3);
   Отч1.Column(c+n,ColWidth,cw);
   if n=cc-4: Отч1.Cell(r,c+n,CellBorder,"1,1,2,1"); fi;
   --
   Отч1.Cell(r+1,c+n,CellContents,Str(c+n));
   if n=cc-4: Отч1.Cell(r+1,c+n,CellBorder,"1,2,2,2"); else Отч1.Cell(r+1,c+n,CellBorder,"1,2,1,2"); fi;
  od;
  --Рисуем таблицу
  rr=nStr;
  Отч2.RowsCount=rr;
  Отч2.ColsCount=cc;
  for c=5..cc do
   Отч2.Column(c,ColWidth,cw);
   for r=1..rr do
    if c=cc: Отч2.Cell(r,c,CellBorder,"1,1,2,1"); fi;
   od;
  od;
  --Заполняем таблицу данными
  r=0;
  Ukey_="";
  for Iter=1..Упр do
   ProgressPos(Упр+Iter);
   c=4+SearchInArray(КБК2,КБК[Iter],True);
   if c<5: Message("Ошибка ! Неизвестный КБК "+КБК[Iter]); Exit; fi;
   if not UKey_=if(FlagИтог,ПризнПБС[Iter],UKey[Iter]):
      r=r+1;
      Отч2.Cell(r,1,CellContents,Str(r));
      Отч2.Cell(r,1,CellFieldType,1);
      Отч2.Cell(r,1,CellBorder,"2,1,1,1");
      if Ukey[Iter]="*" and not FlagИтог:
         Отч2.Cell(r,1,CellFontStyle,fsBold);
      fi;
      --
      Отч2.Cell(r,2,CellContents,"НаимПБС["+Str(Iter)+"]");
      Отч2.Cell(r,2,CellFieldType,3);
      if Ukey[Iter]="*" and not FlagИтог: Отч2.Cell(r,2,CellFontStyle,fsBold); fi;
      --
      Отч2.Cell(r,3,CellContents,"НомИзв["+Str(Iter)+"]");
      Отч2.Cell(r,3,CellFieldType,3);
      if Ukey[Iter]="*" and not FlagИтог:
         Отч2.Cell(r,3,CellFontStyle,fsBold);
        else
         if FlagИтог:
            Отч2.Cell(r,3,CellLookup,False);
            Отч2.Cell(r,3,CellEventOnEnter,"");
           else
            Отч2.Cell(r,3,CellLookup,True);
            Отч2.Cell(r,3,CellEventOnEnter,"НомИзв_OnEnter");
         fi;
      fi;
      --
      Отч2.Cell(r,4,CellContents,"СумИзв["+Str(Iter)+"]");
      Отч2.Cell(r,4,CellFieldType,4);
      Отч2.Cell(r,4,CellFormat,",##0.00;;-");
      Отч2.Cell(r,4,CellAlignment,1);
      if Ukey[Iter]="*" and not FlagИтог:
         Отч2.Cell(r,4,CellFontStyle,fsBold);
        else
         ИтогСумИзв=ИтогСумИзв+СумИзв[Iter];
      fi;
   fi;
   if r=0: r=1; fi;
   idx=GetIndex(r,c);
   СумКБК2[idx]=СумКБК2[idx]+СумКБК[Iter];
   Отч2.Cell(r,c,CellContents,"СумКБК2["+Str(idx)+"]");
   Отч2.Cell(r,c,CellFieldType,4);
   Отч2.Cell(r,c,CellFormat,",##0.00;;-");
   Отч2.Cell(r,c,CellAlignment,1);
   if Ukey[Iter]="*" and not FlagИтог:
      Отч2.Cell(r,c,CellFontStyle,fsBold);
     else
      ИтогСумКБК2[c]=ИтогСумКБК2[c]+СумКБК[Iter];
   fi;
   UKey_=if(FlagИтог,ПризнПБС[Iter],UKey[Iter]);
  od;
  --Вставка итогов по таблице
  Отч3.ColsCount=cc;
  r=1;
  for c=5..cc do
   Отч3.Column(c,ColWidth,cw);
   Отч3.Cell(r,c,CellContents,"ИтогСумКБК2["+Str(c)+"]");
   Отч3.Cell(r,c,CellFieldType,4);
   Отч3.Cell(r,c,CellFontStyle,fsBold);
   Отч3.Cell(r,c,CellBgColor,coLime);
   Отч3.Cell(r,c,CellFormat,",##0.00;;-");
   Отч3.Cell(r,c,CellAlignment,1);
   if c=cc: Отч3.Cell(r,c,CellBorder,"1,2,2,2"); else  Отч3.Cell(r,c,CellBorder,"1,2,1,2") ;fi;
  od;
 Finally
  CloseProgress;
 end;
end;

Func ВставкаИтогов(Nr:I):I;
var Iter,z,zz,nГП:I;
var ПризнПБС_,КБК_:S;
var СумИзв_,СумКБК_:N;
 ShowProgress(2,"Расчет....");
 Try
  ProgressPos(1);
  nГП=0;
  ClearVariable(sКБК);
  ClearVariable(sUkey);
  ClearVariable(sСумИзв);
  ClearVariable(sСумКБК);
  Iter=1;
  ПризнПБС_=ПризнПБС[Iter];
  While Iter<=Упр+1 do
   if ПризнПБС_=ПризнПБС[Iter]:
      --Считаем в разрезе КБК
      z=SearchInArray(sКБК,КБК[Iter],True);
      if z=-1:
         z=InsertInArraySort(sКБК,КБК[Iter]);
         InsertInArray(sСумКБК,z,0);
      fi;
      sСумКБК[z]=sСумКБК[z]+СумКБК[Iter];
      --Считаем в разрезе Извещений
      z=SearchInArray(sUkey,Ukey[Iter],True);
      if z=-1:
         z=InsertInArraySort(sUkey,Ukey[Iter]);
         InsertInArray(sСумИзв,z,СумИзв[Iter]);
      fi;
      Iter=Iter+1;
     else
      nГП=nГП+1;
      zz=LengthOfArray(sКБК);
      for z=1..zz do
       InsertFrame(Упр,Iter);
       ПризнПБС[Iter]=ПризнПБС_;
       НомИзв[Iter]="Итого";
       КБК[Iter]=sКБК[z];
       Ukey[Iter]="*";
       СумИзв[Iter]=SumOfArray(sСумИзв);
       СумКБК[Iter]=sСумКБК[z];
       Iter=Iter+1;
      od;
      ПризнПБС_=ПризнПБС[Iter];
      ClearVariable(sКБК);
      ClearVariable(sUkey);
      ClearVariable(sСумИзв);
      ClearVariable(sСумКБК);
   fi;
  od;
  if FlagИтог:
     Iter=1;
     While Iter<=Упр do
      if Ukey[Iter]="*": Iter=Iter+1; else DeleteFrame(Упр,Iter); fi;
     od;
     nr=0;
  fi;
 Finally
  CloseProgress;
 end;
 ^Nr+nГП;
end;

Func DateToStr(Value:D):S;
var Y,M,D:S;
var Ret:S;
 Y=Str(Year(Value));
 M=Str(Mon(Value)); if Length(M)=1: M="0"+M; fi;
 D=Str(Day(Value)); if Length(D)=1: D="0"+D; fi;
 Ret=Y+"."+M+"."+D;
 ^Ret;
end;

Proc Расчет;
var OWA,OA,n1,n2,nr1,nr2,Iter:I;
var F,F1,F2,ПризнПБС_,КБК_,Index_,НомИзв_,ДатИзв_,UKey_,ПризнДоп_:S;
var ДИзв:D;
var СумИзв_:N;
var StoreПризнПБС:S;
var ErrПБС,f69н:L;
 F1="(ПРОВОДИТЬ and ДВОЗВРАТ2>="+DateToString(ДН)+" and ДВОЗВРАТ2<"+DateToString(ДК)+")";
 F1=F1+" and Валюта='"+Вал+"'";
 if Отправ[1]="*" or Отправ[1]="":
    F2="";
   else
    F2=" and (";
    for n1=1..УпрОтправ do
     F2=F2+"ОТПРАВРЕКВ="+Отправ[n1]+" or ";
    od;
    F2=SubStr(F2,1,Length(F2)-4)+")";
 fi;
 if Length(F1)+Length(F2)>255: Message("Слишком длинное условие отбора извещений, сократите список учреждений отправителей",mtError); Exit; fi;
 F=F1+F2;
 Очистить;
 if AsLogical(rbКБК.State):       РежимКБК=0;
   |AsLogical(rbФКР.State):       РежимКБК=1;
   |AsLogical(rbФКР_КОСГУ.State): РежимКБК=2;
   |AsLogical(rbКОСГУ.State):     РежимКБК=3;
 fi;
 ClearTrace(True);
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ВХ","",F);
 Try
  Nr1=Records(OWA);
  ShowProgress(Nr1*2,"Расчет....");
  for n1=1..nr1 do
   ProgressPos(n1);
   UKey_=RecordToString(GetRecordKey(OWA,n1));
   НомИзв_=GetFieldS(OWA,n1,"НомерБум");
   ДИзв=GetFieldD(OWA,n1,"ДАТАИЗВ");
   ДатИзв_=DateToString(ДИзв);
   СумИзв_=GetFieldN(OWA,n1,"СУММА");
   f69н=GetFieldL(OWA,n1,"is69н");
   ErrПБС=False;
   if n1=1: OA=OpenArray(OWA,n1,"ПОЗИЦИИ","ПОЛУЧСЧКРЕ"); fi;
   Nr2=Records(OA);
   if f69н:
      ПризнПБС_=GetFieldS(OWA,n1,"ОТПРАВПРИЗНАК");
   fi;
   for n2=1..nr2 do
    if not f69н:
       ПризнПБС_=ВзятьПризн(GetFieldS(OA,n2,"ПОЛУЧПРИЗН"),"ПБС.*");
       if ПризнПБС_="":
          ПризнПБС_=ВзятьПризн(GetFieldS(OA,n2,"ПОЛУЧПРИЗНКРЕ"),"ПБС.*");
       fi;
    fi;
    if not Справ="":
       ПризнДоп_=ВзятьПризн(GetFieldS(OA,n2,"ПОЛУЧПРИЗН"),Справ);
       if ПризнДоп_="":
          ПризнДоп_=ВзятьПризн(GetFieldS(OA,n2,"ПОЛУЧПРИЗНДЕБ"),Справ);
       fi;
      else
       ПризнДоп_="";
    fi;
    if not ПризнПБС_="":
       if n2=1: StoreПризнПБС=ПризнПБС_; fi;
       if not StoreПризнПБС=ПризнПБС_: ErrПБС=True; fi;
       КБК_=GetFieldS(OA,n2,"ПолучСчКре");
       if РежимКБК=0: КБК_=Раб.Бюджет2005.ВзятьКодСчета(КБК_,"","КБК",False)+"."+Раб.Бюджет2005.ВзятьКодСчета(КБК_,"","КОСГУ",False);
         |РежимКБК=1: КБК_=Раб.Бюджет2005.ВзятьКодСчета(КБК_,"ФКР","РП",True);
         |РежимКБК=2: КБК_=Раб.Бюджет2005.ВзятьКодСчета(КБК_,"ФКР","РП",True)+"."+Раб.Бюджет2005.ВзятьКодСчета(КБК_,"ФКР","КОСГУ",False);
         |РежимКБК=3: КБК_=Раб.Бюджет2005.ВзятьКодСчета(КБК_,"ФКР","КОСГУ",False);
       fi;
       КБК_=Раб.Бюджет2005.Объединить(КБК_,ПризнДоп_,Chr(13));
       Index_=ПризнПБС_+" "+DateToStr(ДИзв)+" "+RepStr("0",10-Length(НомИзв_))+НомИзв_+" "+КБК_+" "+UKey_;
       Iter=SearchInArray(Index,Index_,True);
       if Iter=-1:
          Iter=InsertInArraySort(Index,Index_);
          InsertFrame(Упр,Iter);
          ПризнПБС[Iter]=ПризнПБС_;
          КБК[Iter]=КБК_;
          НомИзв[Iter]="№"+НомИзв_+" от "+ДатИзв_;
          СумИзв[Iter]=СумИзв_;
          UKey[Iter]=UKey_;
          is69н[Iter]=f69н;
       fi; --if Iter=-1:
       СумКБК[Iter]=СумКБК[Iter]+GetFieldN(OA,n2,"СУМ");
      else
       Trace("Ошибка! Ненайден аналитический признак получателя (ПБС) в извещении №"+НомИзв_+" от "+ДатИзв_+" данное извещение НЕ участвует в расчете");
    fi;  --if not ПризнПБС="":
    if ErrПБС: Trace("Ошибка! Обнаружено несколько различных аналитических признаков (ПБС) в одном извещении №"+НомИзв_+" от "+ДатИзв_); fi;
   od; --for n1=1..nr1 do
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 --
 Nr1=ВставкаИтогов(Nr1);
 --
 ПостроитьОтчет(Nr1);
 Message("Расчет завершен");
end;

Func ПроверитьДату:L;
 if MM=0: Message("Введите месяц расчета",mtError); Template.Field="MMTxt"; ^False; fi;
 if YYYY=0: Message("Введите год расчета",mtError); Template.Field="YYYY"; ^False; fi;
 ^True;
end;
--Процедуры и функции -------------                           
--
--Обработчики событий полей шаблона-----
Func MMTxt_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;
 ClearVariable(Buf);
 Очистить;
 ^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]);
 ClearVariable(Buf);
 Очистить;
 ^False;
end;

Proc A1_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 if Отправ[1]="*": Message("Добавление новых строк невозможно т.к. выбран отбор по всем учреждениям отправителям",mtError); Exit; fi;
 Iter=AsInteger(Template.Frame);
 InsertFrame(УпрОтправ,Iter+1);
end;

Proc D1_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 DeleteFrame(УпрОтправ,Iter);
end;

Proc A2_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 if Отправ[1]="*": Message("Добавление новых строк невозможно т.к. выбран отбор по всем учреждениям получателям",mtError); Exit; fi;
 Iter=AsInteger(Template.Frame);
 InsertFrame(УпрПолуч,Iter+1);
end;

Proc D2_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 DeleteFrame(УпрПолуч,Iter);
end;

Func Отправ_onEnter(FieldName: String; Iter: Integer): logical;
var n,z:i;
 if not ПроверитьДату: ^False; fi;
 if BufОтправ[3]="": СписокОтправ; fi;
 n=1;
 While n=1 do
  n=Alternate("Учреждения отправители",BufНаимОтправ,-1,1,12);
  if n=0: ^False; fi;
  if n=1: СписокОтправ; fi;
 od;
 z=SearchInArray(Отправ,BufОтправ[n],False);
 if not z=-1 and not z=Iter: Message("Повторный ввод учреждения отправителя^M"+BufНаимОтправ[n],mtError); ^False; fi;
 if BufОтправ[n]="*":
    ClearVariable(УпрОтправ);
    ClearVariable(Отправ);
    ClearVariable(НаимОтправ);
    Iter=1;
 fi;
 Отправ[Iter]=BufОтправ[n];
 НаимОтправ[Iter]=BufНаимОтправ[n];
 Return False;
end;

Proc Отправ_OnExit(FieldName: String; Iter: Integer);
 Отправ[Iter]="";
 НаимОтправ[Iter]="";
end;

Func Вал_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var Cur:S;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 n=0;
 for Currencies Cur="*" do
  n=n+1;
  Buf[n]=Up(Cur);
  Buf2[n]=Buf[n]+" --"+Name_C(Cur);
 od;
 n=Alternate("Валюта",Buf2,-1,SearchInArray(Buf,Вал),12);
 if n=0: ^False; fi;
 Вал=Buf[n];
 Очистить;
 Return False;
end;

Func Гр2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Аналитический признак";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Аналитический признак)";
 Buf[4]="Аналитический признак (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf,-1,Гр2-1,12);
 if n=0: ^Cur; fi;
 Гр2=n-1;
 Return  Cur;
end;

Func НомИзв_OnEnter(Field:S; Iter:I):L;
var p1,p2:I;
 p1=Pos("[",Field);
 p2=Pos("]",Field);
 Iter=Int(SubStr(Field,p1+1,p2-p1-1));
 if not Ukey[Iter]="" and not Ukey[Iter]="*":
    if is69н[Iter]:
       OpenBlank("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ВХ_69Н",True,StringToRecord(Ukey[Iter]));
      else
       OpenBlank("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ВХ",True,StringToRecord(Ukey[Iter]));
    fi;
 fi;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnСправ_OnClick(Sender: String);
var tmp:S;
 tmp=AnaElection("~ПБС.*",True);
 if tmp="": Exit; fi;
 Справ=tmp+".*";
end;

Proc cbFlagНИ_onChange  (Obj:S);
 Очистить;
end;

Proc btnРасчет_OnClick(Sender: String);
 УдалитьПустыеСтроки;
 if not ПроверитьДату: Exit; fi;
 Расчет;
end;

Proc cbИтог_OnChange(Sender: String);
 Message("Для вступления измений в силу необходмио выполнить расчет");
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 if РежимКБК=0: rbКБК.State=True;  rbФКР.State=False; rbФКР_КОСГУ.State=False; rbКОСГУ.State=False;
   |РежимКБК=1: rbКБК.State=False; rbФКР.State=True;  rbФКР_КОСГУ.State=False; rbКОСГУ.State=False;
   |РежимКБК=2: rbКБК.State=False; rbФКР.State=False; rbФКР_КОСГУ.State=True;  rbКОСГУ.State=False;
   |РежимКБК=3: rbКБК.State=False; rbФКР.State=False; rbФКР_КОСГУ.State=False; rbКОСГУ.State=True;
 fi;
 if УпрОтправ<1: InsertFrame(УпрОтправ,1); fi;
end;
--Обработчики событий шаблона -----
--



Конец
