-- Шаблон создан мастером бланков
-- 13.06.2002 11:29:35
--
БланкСШаблоном "Книга учета материальных ценностей оплаченных в централизованном порядке";

var Упр: Handle;

var ВыгИзвФлаг[] :Logical;

btnВыгрузка :Object;

ПолнИмя:S;
ОКПО1:S;

ПризнПодр:S;
var НаимПодр:S=if(Name_A(ПризнПодр)="" or Name_A(ПризнПодр)=" ",ПризнПодр,Name_A(ПризнПодр));

var ОРГ:S;
var НаимОРГ:S;
var ОКПО2:S;

Вал:S=[BaseCurrency];
ОКЕИ:S;

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))))));

var пп[]:i=$;
var c01[]:S;
var c02[]:S;
var c03[]:S;
var c03_[]:S;
var c04[]:S;
var c06[]:N;
var c06а[]:S;
var c07[]:S;
var c08[]:N;
var c09[]:N;
var Ukey[]:Record;
var is69н[]:L;
var SumC06:N;
var SumC08:N;
var SumC09:N;
var SumCx:N=SumC06+SumC09;

var Buf[]:S;
var Buf1[]:S;
var Buf2[]:S;
var BufОрг[]:S;
var BufНаимОрг[]:S;
var BufПост[]:S;

var BufArr[] :String;
var BufKey[] :Record;
var ExpKey[] :Record;
var BufStr[] :String;
var BufFlg[] :Logical;

FlagMode:L;
FlagДок:L;
FlagПост:L;

cbПост: Object;
Отч   : Section;
--
--Процедуры и функции -------------                           
Proc Оформление;
 if FlagДок and FlagПост:
    Отч.CellLinks(4,1,7,1);
   else
    Отч.CellLinks(4,1,4,1);
    Отч.CellLinks(5,1,7,1);
    Отч.Cell(1,5,CellContents,"c04");
    Отч.Cell(1,5,CellFieldType,3);
 fi;
end;

Proc ClearData;
 ClearVariable(Упр);
 ClearVariable(c01);
 ClearVariable(c02);
 ClearVariable(c03);
 ClearVariable(c04);
 ClearVariable(c06);
 ClearVariable(c06а);
 ClearVariable(c07);
 ClearVariable(c08);
 ClearVariable(c09);
 ClearVariable(SumC06);
 ClearVariable(SumC08);
 ClearVariable(SumC09);
 ClearVariable(Ukey);
 ClearVariable(is69н);
 ClearVariable(ВыгИзвФлаг);
end;

Proc Clear;
 ClearVariable(Buf);
 ClearVariable(Buf1);
 ClearVariable(BufArr);
 ClearVariable(BufKey);
 ClearVariable(ExpKey);
 ClearVariable(BufStr);
 ClearVariable(BufFlg);
 ClearData;
end;

Func Проверить:L;
 if MM=0: Message("Введите месяц расчета",mtError); Template.Field="MMTxt"; ^False; fi;
 if YYYY=0: Message("Введите год расчета",mtError);  Template.Field="YYYY"; ^False; fi;
 if Вал="": Message("Введите валюту отчета",mtError); Template.Field="Вал"; ^False; fi;
 ^True;
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 СписокОргTrans;
var OWA,OA:I;
var NumRec1,NumRec2,n1,n2,z:I;
var tmp,Наим:s;
var Filter:S;
var f69н:L;
 Filter="(ДАТАИЗВ>="+DateToString(ДН)+"and ДАТАИЗВ<"+DateToString(ДК)+") and ПРОВОДИТЬ and Валюта='"+Вал+"'"+if(ПризнПодр="",""," and Подр='"+ПризнПодр+"'");
 ClearVariable(BufОрг);
 ClearVariable(BufНаимОрг);
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","",Filter);
 Try
  NumRec1=Records(OWA);
  ShowProgress(NumRec1,"Поиск учреждений получателей...");
  for n1=1..NumRec1 do
   ProgressPos(n1);
   f69н=GetFieldL(OWA,n1,"is69н");
   if n1=1: OA=OpenArray(OWA,n1,"ПОЗИЦИИ",""); fi;
   if f69н:
      tmp=GetFieldS(OWA,n1,"ПолучПризнак");
      if not tmp="":
         z=SearchInArray(BufОРГ,tmp,False);
         if z=-1:
            Наим=Name_A(tmp);
            if Наим="" or Наим=" ": Наим=tmp; fi;
            z=InsertInArraySort(BufНаимОРГ,Наим);
            InsertInArray(BufОРГ,z,tmp);
         fi;
      fi;
     else
      NumRec2=Records(OA);
      for n2=1..NumRec2 do
       tmp=GetFieldS(OA,n2,"ПРИЗН");
       tmp=ВзятьПризн(tmp,"ПБС.*");
       if tmp="": tmp=GetFieldS(OA,n2,"ПРИЗНДЕБ"); tmp=ВзятьПризн(tmp,"ПБС.*"); fi;
       if not tmp="":
          z=SearchInArray(BufОРГ,tmp,False);
          if z=-1:
             Наим=Name_A(tmp);
             if Наим="" or Наим=" ": Наим=tmp; fi;
             z=InsertInArraySort(BufНаимОРГ,Наим);
             InsertInArray(BufОРГ,z,tmp);
          fi;
       fi;
      od;
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ClearVariable(ОРГ);
 ClearVariable(НаимОРГ);
 ClearVariable(ОКПО2);
end;

Proc СписокОргField;
var OWA,OA,OWAК:I;
var NumRec1,NumRec2,n1,n2,n:I;
var tmp,Filter,Rec:s;
var f69н:L;
 Filter="(ДАТАИЗВ>="+DateToString(ДН)+"and ДАТАИЗВ<"+DateToString(ДК)+") and ПРОВОДИТЬ and Валюта='"+Вал+"'"+if(ПризнПодр="",""," and Подр='"+ПризнПодр+"'");
 ClearVariable(BufОрг);
 ClearVariable(BufНаимОрг);
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","НОМЕРБУМ",Filter);
 Try
  NumRec1=Records(OWA);
  ShowProgress(NumRec1,"Поиск учреждений получателей...");
  for n1=1..NumRec1 do
   ProgressPos(n1);
   f69н=GetFieldL(OWA,n1,"is69н");
   if n1=1: OA=OpenArray(OWA,n1,"ПОЛУЧ",""); fi;
   if f69н:
      Rec=RecordToString(GetFieldR(OWA,n1,"ПОЛУЧРЕКВ"));
      if not Rec="":
         n=SearchInArray(BufОРГ,Rec,False);
         if n=-1:
            tmp=GetFieldS(OWA,n1,"ПОЛУЧРЕКВ.КОРИМЯ");
            if tmp="": tmp=CardFileRecSign("КОНТРАГЕНТ","ПРИЗНАК","",StringToRecord(Rec)); tmp=SubStr(tmp,2,255); fi;
            n=InsertInArraySort(BufНаимОРГ,tmp);
            InsertInArray(BufОРГ,n,Rec);
         fi;
      fi;
   fi;
   NumRec2=Records(OA);
   for n2=1..NumRec2 do
    Rec=RecordToString(GetFieldR(OA,n2,"РЕКВ"));
    if not Rec="":
       n=SearchInArray(BufОРГ,Rec,False);
       if n=-1:
          tmp=GetFieldS(OA,n2,"РЕКВ.КОРИМЯ");
          if tmp="": tmp=CardFileRecSign("КОНТРАГЕНТ","ПРИЗНАК","",StringToRecord(Rec)); tmp=SubStr(tmp,2,255); fi;
          n=InsertInArraySort(BufНаимОРГ,tmp);
          InsertInArray(BufОРГ,n,Rec);
       fi;
    fi;
   od;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ClearVariable(ОРГ);
 ClearVariable(НаимОРГ);
 ClearVariable(ОКПО2);
end;

Proc РасчетTrans;
var OWA,OA:I;
var NumRec1,NumRec2,n1,n2,z,zz:I;
var tmp,НаимПост:s;
var L:L;
var Filter:S;
var Sum1,Sum2,Sum3:N;
var f69н,f69н_:L;
 if FlagНеПодтв:
    Filter="(ДАТАИЗВ>="+DateToString(ДН)+"and ДАТАИЗВ<"+DateToString(ДК)+") and ПРОВОДИТЬ and not ВОЗВРАТ2"+if(ПризнПодр="",""," and Подр='"+ПризнПодр+"'");
   else
    Filter="(ДАТАИЗВ>="+DateToString(ДН)+"and ДАТАИЗВ<"+DateToString(ДК)+") and ПРОВОДИТЬ"+if(ПризнПодр="",""," and Подр='"+ПризнПодр+"'");
 fi;
 ClearData;
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","ДАТАИЗВ; НОМЕР",Filter+" and Валюта='"+Вал+"'");
 Try
  NumRec1=Records(OWA);
  ShowProgress(NumRec1,"Расчет...");
  for n1=1..NumRec1 do
   ProgressPos(n1);
   f69н=GetFieldL(OWA,n1,"is69н");
   L=GetFieldL(OWA,n1,"Возврат2");
   if n1=1 or not f69н_=f69н:
      f69н_=f69н;
      if not n1=1: CloseWorkArea(OA); fi;
      OA=OpenArray(OWA,n1,"ПОЗИЦИИ","",if(f69н,"",'not Pos("'+ОРГ+'",ПРИЗН)=0 or not Pos("'+ОРГ+'",ПРИЗНДЕБ)=0'));
   fi;
   NumRec2=Records(OA);
   if (not NumRec2=0 and not f69н) or (f69н and GetFieldS(OWA,n1,"ПолучПризнак")=Орг):
      if FlagДок:
         InsertFrame(Упр,Упр+1);
         c01[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаОрд"));
         c01[Упр]=c01[Упр]+" "+GetFieldS(OWA,n1,"НомОрд");
         c02[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаИзв"));
         c02[Упр]=c02[Упр]+" № "+GetFieldS(OWA,n1,"НомерБум");
         c06[Упр]=GetFieldN(OWA,n1,"СУММА");
         c06а[Упр]="x";
         SumC06=SumC06+c06[Упр];
         if L:
            c07[Упр]=DateToString(GetFieldD(OWA,n1,"ДВОЗВРАТ2"));
            c08[Упр]=GetFieldN(OWA,n1,"СУММАПОЛУЧ");
            c09[Упр]=c08[Упр]-c06[Упр];
            SumC08=SumC08+c08[Упр];
            SumC09=SumC09+c09[Упр];
         fi;
         ClearVariable(BufПост);
         for n2=1..NumRec2 do
          tmp=GetFieldS(OA,n2,"ПРИЗН");
          tmp=ВзятьПризн(tmp,"К.*");
          if tmp="": tmp=GetFieldS(OA,n2,"ПРИЗНКРЕ"); tmp=ВзятьПризн(tmp,"К.*"); fi;
          НаимПост=Name_A(tmp);
          if НаимПост="" or НаимПост=" ": НаимПост=tmp; else НаимПост=Name_A(tmp); fi;
          if SearchInArray(BufПост,НаимПост,True)=-1: InsertInArraySort(BufПост,НаимПост); fi;
          zz=LengthOfArray(BufПост);
         od;
         for z=1..zz do
          c03_[Упр]=c03_[Упр]+BufПост[z];
          if z+1<=zz: c03_[Упр]=c03_[Упр]+Chr(13); fi;
         od;
         Ukey[Упр]=GetRecordKey(OWA,n1);
         is69н[Упр]=f69н;
         ВыгИзвФлаг[Упр]=False;
        else
         Sum1=0; Sum2=0; Sum3=0;
         for n2=1..NumRec2 do
          InsertFrame(Упр,Упр+1);
          c01[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаОрд"));
          c01[Упр]=c01[Упр]+" "+GetFieldS(OWA,n1,"НомОрд");
          c02[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаИзв"));
          c02[Упр]=c02[Упр]+" № "+GetFieldS(OWA,n1,"НомерБум");
          tmp=GetFieldS(OA,n2,"ПРИЗН");
          tmp=ВзятьПризн(tmp,"К.*");
          if tmp="": tmp=GetFieldS(OA,n2,"ПРИЗНКРЕ"); tmp=ВзятьПризн(tmp,"К.*"); fi;
          НаимПост=Name_A(tmp);
          if НаимПост="" or НаимПост=" ": НаимПост=tmp; else НаимПост=Name_A(tmp); fi;
          c03[Упр]=НаимПост;
          c04[Упр]=GetFieldS(OA,n2,"Содерж");
          c06[Упр]=GetFieldN(OA,n2,"СУМ");
          tmp=GetFieldS(OA,n2,"СчДеб");
          c06а[Упр]=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","КБК",False)+"."+Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","КОСГУ",False);
          Sum1=Sum1+c06[Упр];
          if L:
             c07[Упр]=DateToString(GetFieldD(OWA,n1,"ДВОЗВРАТ2"));
             c08[Упр]=GetFieldN(OA,n2,"ПолучСУМ");
             c09[Упр]=c08[Упр]-c06[Упр];
             Sum2=Sum2+c08[Упр];
             Sum3=Sum3+c09[Упр];
          fi;
          Ukey[Упр]=GetRecordKey(OWA,n1);
          is69н[Упр]=f69н;
          ВыгИзвФлаг[Упр]=False;
         od;
         --Итого по извещению
         if NumRec2>1:
            InsertFrame(Упр,Упр+1);
            c01[Упр]="               x";
            c02[Упр]="Итого";
            c03[Упр]="                               x";
            c04[Упр]="                                         x";
            c06[Упр]=Sum1;
            c06а[Упр]="x";
            if L: c07[Упр]=DateToString(GetFieldD(OWA,n1,"ДВОЗВРАТ2")); fi;
            c08[Упр]=Sum2;
            c09[Упр]=Sum3;
            Ukey[Упр]=GetRecordKey(OWA,n1);
            is69н[Упр]=f69н;
            ВыгИзвФлаг[Упр]=False;
         fi;
         SumC06=SumC06+Sum1;
         SumC08=SumC08+Sum2;
         SumC09=SumC09+Sum3;
      fi;
   fi;
 od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if FlagДок and FlagПост: CopyArray(c03_,c03); fi;
end;

Proc РасчетField;
var OWA,OA,OAПолуч:I;
var NumRec1,NumRec2,n1,n2,z,zz:I;
var tmp,НаимПост:s;
var L:L;
var Filter:S;
var Sum1,Sum2,Sum3:N;
var f69н:L;
 if FlagНеПодтв:
    Filter="(ДАТАИЗВ>="+DateToString(ДН)+"and ДАТАИЗВ<"+DateToString(ДК)+") and ПРОВОДИТЬ=True and not ВОЗВРАТ2"+if(ПризнПодр="",""," and Подр='"+ПризнПодр+"'");
   else
    Filter="(ДАТАИЗВ>="+DateToString(ДН)+"and ДАТАИЗВ<"+DateToString(ДК)+") and ПРОВОДИТЬ=True"+if(ПризнПодр="",""," and Подр='"+ПризнПодр+"'");
 fi;
 ClearData;
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","ДАТАИЗВ; НОМЕР",Filter+" and Валюта='"+Вал+"'");
 Try
  NumRec1=Records(OWA);
  ShowProgress(NumRec1,"Расчет...");
  for n1=1..NumRec1 do
   ProgressPos(n1);
   L=GetFieldL(OWA,n1,"Возврат2");
   f69н=GetFieldL(OWA,n1,"is69н");
   if n1=1: 
      OAПолуч=OpenArray(OWA,n1,"ПОЛУЧ","","РЕКВ="+ОРГ);
      OA=OpenArray(OWA,n1,"ПОЗИЦИИ","");
   fi;
   Sum1=0; Sum2=0; Sum3=0;
   if not Records(OAПолуч)=0 or (f69н and RecordToString(GetFieldR(OWA,n1,"ПолучРекв"))=ОРГ):
      NumRec2=Records(OA);
      if FlagДок:
         InsertFrame(Упр,Упр+1);
         c01[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаОрд"));
         c01[Упр]=c01[Упр]+" "+GetFieldS(OWA,n1,"НомОрд");
         c02[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаИзв"));
         c02[Упр]=c02[Упр]+" № "+GetFieldS(OWA,n1,"НомерБум");
         c06[Упр]=GetFieldN(OWA,n1,"СУММА");
         c06а[Упр]="x";
         SumC06=SumC06+c06[Упр];
         if L:
            c07[Упр]=DateToString(GetFieldD(OWA,n1,"ДВОЗВРАТ2"));
            c08[Упр]=GetFieldN(OWA,n1,"СУММАПОЛУЧ");
            c09[Упр]=c08[Упр]-c06[Упр];
            SumC08=SumC08+c08[Упр];
            SumC09=SumC09+c09[Упр];
         fi;
         ClearVariable(BufПост);
         for n2=1..NumRec2 do
          tmp=GetFieldS(OA,n2,"ПРИЗН");
          tmp=ВзятьПризн(tmp,"К.*");
          if tmp="": tmp=GetFieldS(OA,n2,"ПРИЗНКРЕ"); tmp=ВзятьПризн(tmp,"К.*"); fi;
          НаимПост=Name_A(tmp);
          if НаимПост="" or НаимПост=" ": НаимПост=tmp; else НаимПост=Name_A(tmp); fi;
          if SearchInArray(BufПост,НаимПост,True)=-1: InsertInArraySort(BufПост,НаимПост); fi;
          zz=LengthOfArray(BufПост);
         od;
         for z=1..zz do
          c03_[Упр]=c03_[Упр]+BufПост[z];
          if z+1<=zz: c03_[Упр]=c03_[Упр]+Chr(13); fi;
         od;
         Ukey[Упр]=GetRecordKey(OWA,n1);
         is69н[Упр]=f69н;
         ВыгИзвФлаг[Упр]=False;
        else
         for n2=1..NumRec2 do
         InsertFrame(Упр,Упр+1);
         c01[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаОрд"));
         c01[Упр]=c01[Упр]+" "+GetFieldS(OWA,n1,"НомОрд");
         c02[Упр]=DateToString(GetFieldD(OWA,n1,"ДатаИзв"));
         c02[Упр]=c02[Упр]+" № "+GetFieldS(OWA,n1,"НомерБум");
         tmp=GetFieldS(OA,n2,"ПРИЗН");
         tmp=ВзятьПризн(tmp,"К.*");
         if tmp="": tmp=GetFieldS(OA,n2,"ПРИЗНКРЕ"); tmp=ВзятьПризн(tmp,"К.*"); fi;
         НаимПост=Name_A(tmp);
         if НаимПост="" or НаимПост=" ": НаимПост=tmp; else НаимПост=Name_A(tmp); fi;
         c03[Упр]=НаимПост;
         c04[Упр]=GetFieldS(OA,n2,"Содерж");
         c06[Упр]=GetFieldN(OA,n2,"СУМ");
         tmp=GetFieldS(OA,n2,"СчДеб");
         c06а[Упр]=Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","КБК",False)+"."+Раб.Бюджет2005.ВзятьКодСчета(tmp,"ФКР","КОСГУ",False);
         Sum1=Sum1+c06[Упр];
         if L:
            c07[Упр]=DateToString(GetFieldD(OWA,n1,"ДВОЗВРАТ2"));
            c08[Упр]=GetFieldN(OA,n2,"ПолучСУМ");
            c09[Упр]=c08[Упр]-c06[Упр];
            Sum2=Sum2+c08[Упр];
            Sum3=Sum3+c09[Упр];
         fi;
         Ukey[Упр]=GetRecordKey(OWA,n1);
         is69н[Упр]=f69н;
         ВыгИзвФлаг[Упр]=False;
        od;
        --Итого по извещению
        if NumRec2>1:
           InsertFrame(Упр,Упр+1);
           c01[Упр]="               x";
           c02[Упр]="Итого";
           c03[Упр]="                               x";
           c04[Упр]="                                         x";
           c06[Упр]=Sum1;
           c06а[Упр]="x";
           if L: c07[Упр]=DateToString(GetFieldD(OWA,n1,"ДВОЗВРАТ2")); fi;
           c08[Упр]=Sum2;
           c09[Упр]=Sum3;
           Ukey[Упр]=GetRecordKey(OWA,n1);
           is69н[Упр]=f69н;
           ВыгИзвФлаг[Упр]=False;
        fi;
        SumC06=SumC06+Sum1;
        SumC08=SumC08+Sum2;
        SumC09=SumC09+Sum3;
       fi;
   fi; --if NumRec2>0:
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if FlagДок and FlagПост: CopyArray(c03_,c03); fi;
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);
 ClearData;
 if MM>0 and YYYY>100: 
  if FlagMode: СписокОргTrans; else СписокОргField; fi;
  if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 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]);
 ClearVariable(Buf);
 ClearData;
 if MM>0 and YYYY>100: 
  if FlagMode: СписокОргTrans; else СписокОргField; fi;
  if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 fi;
 ^False;
end;

Func ПолнИмя_onEnter (Field:S; Iter:i):L;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","Наше",nil,crdRecordOnly);
 if Rec=nil: ^False; fi;
 ПолнИмя=GetCardFieldS("Контрагент",Rec,"КОРИМЯ");
 ОКПО1=GetCardFieldS("Контрагент",Rec,"ОКПО");
 ^False;
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П.*");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 ClearVariable(Buf);
 ClearData;
 if MM>0 and YYYY>100: 
  if FlagMode: СписокОргTrans; else СписокОргField; fi;
  if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 fi;
 ^False;
end;

Proc НаимПодр_OnExit(FieldName: String; Iter: Integer);
 ПризнПодр="";
 ClearVariable(Buf);
 ClearData;
 if MM>0 and YYYY>100: 
  if FlagMode: СписокОргTrans; else СписокОргField; fi;
  if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 fi;
end;

Func НаимОрг_onEnter (Field:S; Iter:i):L;
var Rec:Record;
var n:i;
 if not Проверить: ^False; fi;
 if BufОрг[1]="": Message("В данном месяце ни одному из грузополучателей извещение не отправлялось"); ^False; fi;
 n=Alternate("Список учреждений-грузополучателей за "+MMTxt+" "+Str(YYYY),BufНаимОрг,-1,SearchInArray(BufНаимОрг,НаимОРГ),12);
 if n=0: ^false; fi;
 Орг=BufОрг[n];
 if FlagMode: Rec=SignToRecord(Орг); else Rec=StringToRecord(Орг); fi;
 if Rec=Nil: ^False; fi;
 НаимОРГ=GetCardFieldS("КОНТРАГЕНТ",Rec,"КорИмя");
 if НаимОРГ="": НаимОРГ=GetCardFieldS("КОНТРАГЕНТ",Rec,"Признак"); fi;
 ОКПО2=GetCardFieldS("КОНТРАГЕНТ",Rec,"ОКПО");
 ClearData;
 ^False;
end;

Proc НаимОРГ_OnExit(FieldName: String; Iter: Integer);
 Орг="";
 НаимОРГ="";
 ОКПО2="";
 ClearData;
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];
 ClearData;
 if FlagMode: СписокОргTrans; else СписокОргField; fi;
 if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 Return False;
end;

Proc Найти_извещения_для_выгрузки;
var ii, pp :Integer;
 for ii=1 to Упр do
   if Ukey[ii]<>NIL:
     if not SearchInArray(BufKey, Ukey[ii], True, 1)>0:
       pp=InsertInArraySort(BufKey, Ukey[ii]);
       InsertInArray(BufStr, pp, c02[ii]);
       InsertInArray(BufFlg, pp, ВыгИзвФлаг[ii]);
     fi;
   fi;
 od;
end;

Proc Извещения_ОбновитьМеню(aIter:Integer; aMaxK:Integer);
 if aIter>aMaxK: BufArr[aIter]="UKEY$"+RecordToString(BufKey[aIter-aMaxK])+"-->> "+if(BufFlg[aIter-aMaxK], "[XLS]: ", "[нет]: ")+BufStr[aIter-aMaxK]; fi;
end;

Proc Извещения_СинхроОтмеченные;
var ii, pp :Integer;
 for ii=1 to Упр do
   if Ukey[ii]<>NIL:
     pp=SearchInArray(BufKey, Ukey[ii], True, 1);
     if pp>0: ВыгИзвФлаг[ii]=BufFlg[pp]; fi;
   fi;
 od;
end;

Proc Извещения_ОтобратьНомераДляВыгрузки;
var ii :Integer;
 ClearVariable(ExpKey);
 if Упр>0:
   for ii=1 to Упр do
     if ВыгИзвФлаг[ii]: AddInArray(ExpKey, True, False, Ukey[ii]); fi;
   od;
 else
   Message("Нет данных для выгрузки.^MСделайте расчет.", mtWarning);
 fi;
end;

Proc Извещения_только_Выгрузка;
var num, kk, ii, начало :Integer;
var PathToSave :String;
 Извещения_ОтобратьНомераДляВыгрузки;
 num=LengthOfArray(ExpKey);
 if num>0:
   if FuncExists("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.ExportIZV_toExcel") and FuncExists("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.TimeToHMSstring_adv"):
     if ChooseFolder(PathToSave, "Выберите папку для сохранения файла экспорта...")=cmOK:
       kk=0; начало=Time;
       RefreshAna;
       ShowProgress(num, "Экспорт извещений...");
       Try
         for ii=1 to num  do
           ProgressPos(ii);
           if ExecuteFuncL("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.ExportIZV_toExcel", ExpKey[ii], PathToSave, False, начало): kk=kk+1; fi;
         od;
       Finally
         CloseProgress;
       end;
       if kk>0: Message("Экспорт завершен!^MЭкспортировано "+Str(kk)+" извещений.^MВремя работы - "+ExecuteFuncS("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.TimeToHMSstring_adv", Time-начало, ":")+".", mtInformation); fi;
     fi;
   else
     Message("Не найдена функция экспорта в Excel", mtError);
   fi;
 else
   Message("Не найдено отмеченных для эксорта в Excel извещений", mtError);
 fi;
end;

Proc Извещения_Выбор_и_Выгрузка;
var kk, MaxK, num, ii :Integer;
var Work :Logical;
 if Упр>0:
   ClearVariable(BufArr); ClearVariable(BufKey); ClearVariable(BufStr); ClearVariable(BufFlg);
   Work=False;
   MaxK=0;
   BufArr[1]=Chr(149)+"-->> Отмена изменений";
--   BufArr[2]=Chr(169)+"-->> Выгрузить отмеченные извещения";
   BufArr[2]=Chr(64)+"-->> Выгрузить отмеченные извещения";
   BufArr[3]=Chr(187)+Chr(043)+Chr(171)+"-->> Выделить все извещения";
   BufArr[4]=Chr(171)+Chr(151)+Chr(187)+"-->> Сбросить все извещения";
   BufArr[5]="UKEY$-->> Дата и номер извещения";
   MaxK=LengthOfArray(BufArr);
   Найти_извещения_для_выгрузки;
   num=LengthOfArray(BufKey);
   if num>0:
     for ii=1 to num do BufArr[ii+MaxK]="UKEY$"+RecordToString(BufKey[ii])+"-->> "+if(BufFlg[ii], "[XLS]: ", "[нет]: ")+BufStr[ii]; od;
     kk=0;
     while kk=0 or kk>MaxK do
       Извещения_ОбновитьМеню(kk, MaxK);
       kk=AlternateTree("", BufArr, 40, if(kk>MaxK, kk, MaxK), 12, "$", "Параметр", "Комментарий", 10, False);
       if kk=1:
         Exit;
       |  kk=2:
         if SearchInArray(BufFlg, True, False, 1)<1:
           Message("[Выгрузка извещений]^MНет выбранных извещений!", mtWarning);
           kk=0;
         else
           Work=True;
         fi;
       |  kk=3:
         for ii=1 to num do BufFlg[ii]=True;  Извещения_ОбновитьМеню(ii+MaxK, MaxK); od;
         kk=0;
       |  kk=4:
         for ii=1 to num do BufFlg[ii]=False; Извещения_ОбновитьМеню(ii+MaxK, MaxK); od;
         kk=0;
       |  kk>MaxK:
         BufFlg[kk-MaxK] = not BufFlg[kk-MaxK];
       fi;
     od;
     Извещения_СинхроОтмеченные;
     if Work: Извещения_только_Выгрузка; fi;
   else
     Message("Не найдено ссылок на извещения.^MСделайте перерасчет.", mtError);
   fi;
 else
   Message("Нет данных для выгрузки.^MСделайте расчет.", mtWarning);
 fi;
end;

Proc Отметка_Извещения(checkKeys:Record; checkStat:Logical);
var ii :Integer;
 if Упр>0 and checkKeys<>NIL:
   for ii=1 to Упр do
     if Ukey[ii]=checkKeys: ВыгИзвФлаг[ii]=checkStat; fi;
   od;
 fi;
end;

Func ВыгИзвФлаг_OnEnter(FieldName:String; Iter:Integer): Logical;
 ВыгИзвФлаг[Iter] = not ВыгИзвФлаг[Iter];
 Отметка_Извещения(Ukey[Iter], ВыгИзвФлаг[Iter]);
 ^False;
end;

Proc ВыгИзвФлаг_OnExit(FieldName:String; Iter:Integer);
 Отметка_Извещения(Ukey[Iter], ВыгИзвФлаг[Iter]);
end;

Func ВызовИзвещения (Field:S; Iter:i):L;
 if not UKey[Iter]=nil:
  if is69н[Iter]:
    OpenBlank("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н",True,UKey[Iter]);
  else
    OpenBlank("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ",True,UKey[Iter]);
  fi;
 fi;
 ^False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_onClick (Obj:S);
 if not Проверить: Exit; fi;
 if ОРГ="": Message("Введите грузополучателя",mtError); Template.Field="НаимОРГ"; Exit; fi;
 if FlagMode: РасчетTrans; else РасчетField; fi;
 Message("Расчет завершен");
end;

Proc btnВызовИзвещение_onClick (Obj:S);
 Message("Установите курсор на нужную позицию и нажмите Enter");
end;

Proc btnПоискОрг_onClick (Obj:S);
var Mask:s;
var n,nn:i;
var Rec:Record;
 if not Проверить: Exit; fi;
 if BufОрг[1]="": Message("В данном месяце ни одному из грузополучателей извещение не отправлялось"); Exit; fi;
 ClearVariable(Buf);
 ClearVariable(Buf1);
 n=Input(Mask,"Введите строку поиска");
 if n=cmCancel: Exit; fi;
 Mask="*"+Mask+"*";
 n=1; nn=0;
 While BufНаимОрг[n]<>"" do
  if Match(BufНаимОрг[n],Mask): nn=nn+1; Buf[nn]=BufНаимОрг[n]; Buf1[nn]=BufОрг[n]; fi;
  n=n+1;
 od;
 if Buf1[1]="": Message("Не найден ни один грузополучатель соотвествующий строке поиска: "+Mask); Exit; fi;
 n=Alternate("Список учреждений грузополучателей за "+MMTxt+" "+Str(YYYY)+"г.",Buf,-1,SearchInArray(Buf,НаимОРГ),12);
 if n=0: Exit; fi;
 Орг=Buf1[n];
 if FlagMode:
    Rec=SignToRecord(Орг);
   else
    Rec=StringToRecord(Орг);
 fi;
 if Rec=Nil: Exit; fi;
 НаимОРГ=GetCardFieldS("КОНТРАГЕНТ",Rec,"КорИмя");
 if НаимОРГ="": НаимОРГ=GetCardFieldS("КОНТРАГЕНТ",Rec,"КорИмя"); fi;
 ОКПО2=GetCardFieldS("КОНТРАГЕНТ",Rec,"ОКПО");
 ClearData;
 ClearVariable(Buf);
 ClearVariable(Buf1);
end;

Proc rbFlagMode_onChange (Obj:S);
 if not Проверить: Exit; fi;
 if FlagMode: СписокОргTrans; else СписокОргField; fi;
 if BufОрг[1]="": Message("В данном месяце (годе) ни одному из грузополучателей извещение не отправлялось"); fi;
 ClearData;
end;

Proc btnRefresh_onClick (Obj:S);
 if not Проверить: Exit; fi;
 if FlagMode: СписокОргTrans; else СписокОргField; fi;
 if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 ClearData;
end;

Proc btnПечать_onClick (Obj:S);
 Раб.Настр_Печать.Prn("","","ТББ.ДОКУМЕНТЫ.ЦЕНТРСНАБ.КНИГА_ИЗВ_ИСХ.000.cfg","",1);
end;

Proc btnВыгрузка_onClick(Obj:String);
var num :Integer;
 ClearVariable(Buf);
 Buf[1]="Выгрузить в Excel отмеченные извещения";
 Buf[2]="Отметить и выгрузить в Excel извещения";
 num=Alternate("Выберите действие...", Buf, -1, 1, 12);
 if num=1: Извещения_только_Выгрузка;
 |  num=2: Извещения_Выбор_и_Выгрузка;
 else Exit;
 fi;
end;

Proc cbFlagНИ_onChange  (Obj:S);
 ClearData;
 if MM>0 and YYYY>100: 
  if FlagMode: СписокОргTrans; else СписокОргField; fi;
  if BufОрг[1]="": Message("В данном периоде ни одному из грузополучателей извещение не отправлялось"); fi;
 fi;
end;

Proc cbДок_OnChange(Sender: String);
 cbПост.Visible=FlagДок;
 Оформление;
 if EnqOkCancel("Для вступления изменений в силу необходимо выполинть перерасчет")=cmOk: btnРасчет_onClick (Sender); fi;
end;

Proc cbПост_OnChange(Sender: String);
 if FlagПост: CopyArray(c03_,c03); else ClearVariable(c03); fi;
 Оформление;
end;

Proc cbНеПодтв_OnChange(Sender: String);
 if EnqOkCancel("Для вступления изменений в силу необходимо выполинть перерасчет")=cmOk: btnРасчет_onClick (Sender); fi;
end;

--Обработчики событий объектов шаблона-----
--
--Обработчики событий шаблона -----
Proc Template_onClose (Destroy:L);
 Clear;
end;

Proc OnOpen(Create: Logical);
var Rec: Record;
 if ПолнИмя="":
    Rec=Раб.Бюджет2005.НашРекв;
    if Rec<>nil:
       ПолнИмя=GetCardFieldS("Контрагент",Rec,"КОРИМЯ");
       ОКПО1=GetCardFieldS("Контрагент",Rec,"ОКПО");
    fi;
 fi;
 Раб.Настр_Печать.Cfg("","ТББ.ДОКУМЕНТЫ.ЦЕНТРСНАБ.КНИГА_ИЗВ_ИСХ.000.cfg");
 cbПост.Visible=FlagДок;
end;

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


Конец