-- Шаблон создан мастером бланков
-- 27.09.2010 17:11:24
--
БланкСШаблоном "Выбор денежного обязательства";

var inДатДок :D;
var inФильтр :S;
var curДО    :Record;
var inДО []  :Record;
var outДО[]  :Record;

fСкрытьОплДок:L;

var Упр:I;
var пп[]:i=$;     
var Выбор[]:L;
var Выбор_[]:S=if(Выбор[$],"V","");
var ДатРег[]:D;
var НаимДок[]:S;
var НомДок[]:S;
var ДатДок[]:D;
var Содерж[]:S;
var СумДок[]:N;
var ОплДок[]:N;
var UKey[]:Record;

var SelfBln:S="РАБ.ВСПОМ.ВЫБОР_ДО";

Tbl: Section;
--
--Процедуры и функции -------------
Proc Начать(aДатДок:D; aФильтр:S; aДО:Record);
 ClearVariable(Раб.Вспом.Выбор_ДО.inДатДок);
 ClearVariable(Раб.Вспом.Выбор_ДО.inФильтр);
 ClearVariable(Раб.Вспом.Выбор_ДО.inДО);
 ClearVariable(Раб.Вспом.Выбор_ДО.outДО);
 Раб.Вспом.Выбор_ДО.inДатДок=aДатДок;
 Раб.Вспом.Выбор_ДО.inФильтр=aФильтр;
 Раб.Вспом.Выбор_ДО.curДО=aДО;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Выбор);
 ClearVariable(ДатРег);
 ClearVariable(НаимДок);
 ClearVariable(НомДок);
 ClearVariable(ДатДок);
 ClearVariable(Содерж);
 ClearVariable(СумДок);
 ClearVariable(ОплДок);
 ClearVariable(UKey);
end;

Proc Расчет;
var OWA,n,nr,Iter:I;
 Refresh;
 Очистить;
 OWA=OpenWorkArea(Раб.Договор.crdДО,"ДатаРег",inФильтр);
 Try
  nr=Records(OWA);
  ShowProgress(nr,"Построение списка...");
  for n=1..nr do
   ProgressPos(n);
   InsertFrame(Упр,Упр+1);
   ДатРег[Упр]=GetFieldD(OWA,n,"ДатаРег");
   НаимДок[Упр]=GetFieldS(OWA,n,"НаимДок.Наим");
   НомДок[Упр]=GetFieldS(OWA,n,"НомерДок");
   ДатДок[Упр]=GetFieldD(OWA,n,"ДатаДок");
   Содерж[Упр]=GetFieldS(OWA,n,"Содерж");
   СумДок[Упр]=GetFieldN(OWA,n,"СумДок");
   UKey[Упр]=GetRecordKey(OWA,n);
   ОплДок[Упр]=0;
   if not Раб.Договор.ДО_Оплата(UKey[Упр],inДатДок,"?","","",False,False,False)=0:
      ОплДок[Упр]=Раб.Договор.lstСум[1];
   fi;
   Выбор[Упр]=not SearchInArray(inДО,UKey[Упр],True)=-1;
  od;
  if fСкрытьОплДок:
     Iter=1;
     While Iter<=Упр do
      if Round(СумДок[Iter]-ОплДок[Iter],2)=0:
         DeleteFrame(Упр,Iter);
        else
         Iter=Iter+1;
      fi;
     od;
  fi;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 End;
end;

Func Выбрать:i;
 OpenBlank(SelfBln,True);
 ^LengthOfArray(outДО);
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Выбор_OnEnter(FieldName: String; Iter: Integer): logical;
 Выбор[Iter]=not Выбор[Iter];
 Return False;
end;

Func СумДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Раб.Договор.altЗагл=НаимДок[Iter]+" №"+НомДок[Iter]+" от "+DateToString(ДатДок[Iter]);
 Раб.Договор.ДО_КБК("UKey="+RecordToString(UKey[Iter]),"",inДатДок,False,True);
 Return Cur;
end;

Func ОплДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Раб.Договор.altЗагл=НаимДок[Iter]+" №"+НомДок[Iter]+" от "+DateToString(ДатДок[Iter]);
 Раб.Договор.ДО_Оплата(UKey[Iter],inДатДок,"?","","",True,True,True);
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnВыбор_OnClick(Sender: String);
var Iter:I;
var n:i;
 if Sender="btnВыборВсе":
    for Iter=1..Упр do
     Выбор[Iter]=not Round(СумДок[Iter]-ОплДок[Iter],2)=0;
    od;
 fi;
 n=0;
 for Iter=1..Упр do
  if Выбор[Iter]: n=n+1; outДО[n]=UKey[Iter]; fi;
 od;
 if n=0: Message("Выберите хотя бы один документ",mtError); Template.Field="Выбор_"; Template.Frame=1; Exit; fi;
 Close;
end;

Proc cbСкрытьОплДок_OnChange(Sender: String);
 Расчет;
end;

Proc btnОтмена_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
var Iter:I;
 Template.Freeze(1,AsInteger(Tbl.Row(1,RowTop,""))+5);
 Iter=SearchInArray(UKey,curДО,False);
 if not Iter=-1:
    Template.Field="Выбор_";
    Template.Frame=Iter;
 fi;
end;

Proc OnOpen(Create: Logical);
 Расчет;
end;
--Обработчики событий шаблона -----
--


Конец
