-- Шаблон создан мастером бланков
-- 31.07.2002 10:32:26
--
БланкСШаблоном "Печать расходных расписаний";

var Упр:Handle;

btnРасчет:Object;

КолКопий:I=[2];
--
var A:S="+";
var D:S="-";

var пп[]:I=$;
var НомРР[]:S;
var ДатаРР[]:D;
var НомРР_[]:S=НомРР[$]+" "+DateToString(ДатаРР[$]);
var ДатаВД[]:D;
var ДатаБанк[]:D;
var НаимПБС[]:S;
var Ассигн1[]:N;
var Ассигн2[]:N;
var Ассигн3[]:N;
var ЛБО1[]:N;
var ЛБО2[]:N;
var ЛБО3[]:N;
var Ukey[]:Record;

fОтп:L;
Отп_:S;
var Отп[]:S;

ДН_РР:D;
ДК_РР:D;
ДН_ВД:D;
ДК_ВД:D;
НомерРР_Н:S;
НомерРР_К:S;
Получ:S;
Получ_:S;

Учитывать:I;
var Учитывать_:S=if(Учитывать=0,"Не определено",if(Учитывать=1,"Только учтенные",if(Учитывать=2,"Только не учтенные","?")));
ВБанк:I;
var ВБанк_:S=if(ВБанк=0,"Не определено",if(ВБанк=1,"Только отправленые",if(ВБанк=2,"Только не отправленые","?")));
Проводить:I;
var Проводить_:S=if(Проводить=0,"Не определено",if(Проводить=1,"Только проведенные",if(Проводить=2,"Только не проведенные","?")));
Аннулирован:I;
var Аннулирован_:S=if(Аннулирован=0,"Не определено",if(Аннулирован=1,"Только аннулированные",if(Аннулирован=2,"Только не аннулированные","?")));
Вид:I;
var Вид_:S=if(Вид=1:"Назначение Ассигнований или ЛБО"|Вид=2:"Отзыв Ассигнований или ЛБО"|True:"Не определен");
Секрет:I;
var Секрет_:S=if(Секрет=1:"Не секретно"|Секрет=2:"ДСП"|Секрет=3:"Секретно"|Секрет=4:"Совершенно секретно"|Секрет=5:"Особой важности"|True:"Не определено");

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

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

var Buf[]:S;

var SelfCrd:S="РПО_РР_ИСХ";
var SelfBln:S="ДОКУМЕНТЫ.ЛБО.РР_ИСХ";
var SelfPrn:S="ДОКУМЕНТЫ.ЛБО.РР_ИСХ_ПЕЧАТЬ";
--
--Процедуры и функции -------------
Proc Оформление;
 S1.Column(15,ColVisible,fОтп);
 S2.Column(15,ColVisible,fОтп);
 S3.Column(15,ColVisible,fОтп);
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомРР);
 ClearVariable(ДатаРР);
 ClearVariable(ДатаВД);
 ClearVariable(ДатаБанк);
 ClearVariable(НаимПБС);
 ClearVariable(Ассигн1);
 ClearVariable(Ассигн2);
 ClearVariable(Ассигн3);
 ClearVariable(ЛБО1);
 ClearVariable(ЛБО2);
 ClearVariable(ЛБО3);
 ClearVariable(Ukey);
end;

Func ПолучитьФильтр:S;
var F,F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10:S;
var FL,FL0,FL1,FL2,FL3,FL4,FL5,FL6,FL7,FL8,FL9,FL10:I;
 F0="Создан<3";
 FL0=Length(F0);
 if ДН_РР= 1.1.100 and ДК_РР= 1.1.100: F1="";
   |ДН_РР<>1.1.100 and ДК_РР= 1.1.100: F1="ДатаДок>="+DateToString(ДН_РР);
   |ДН_РР= 1.1.100 and ДК_РР<>1.1.100: F1="ДатаДок<="+DateToString(ДК_РР);
   |ДН_РР<>1.1.100 and ДК_РР<>1.1.100: F1="ДатаДок>="+DateToString(ДН_РР)+" and ДатаДок<="+DateToString(ДК_РР);
 fi;
 FL1=Length(F1);
 if ДН_ВД= 1.1.100 and ДК_ВД= 1.1.100: F2="";
   |ДН_ВД<>1.1.100 and ДК_ВД= 1.1.100: F2="ДатаВД>="+DateToString(ДН_ВД);
   |ДН_ВД= 1.1.100 and ДК_ВД<>1.1.100: F2="ДатаВД>1.1.100 and ДатаВД<="+DateToString(ДК_ВД);
   |ДН_ВД<>1.1.100 and ДК_ВД<>1.1.100: F2="ДатаВД>="+DateToString(ДН_ВД)+" and ДатаВД<="+DateToString(ДК_ВД);
 fi;
 FL2=Length(F2);
 if НомерРР_Н=""  and НомерРР_К="" : F3="";
   |НомерРР_Н<>"" and НомерРР_К="" : F3="Номер>="+НомерРР_Н;
   |НомерРР_Н=""  and НомерРР_К<>"": F3="Номер<="+НомерРР_К;
   |НомерРР_Н<>"" and НомерРР_К<>"": F3="Номер>="+НомерРР_Н+" and Номер<="+НомерРР_К;
 fi;
 FL3=Length(F3);
 if Получ<>"": F4="ПБС="+Получ;
   |True: F4="";
 fi;
 FL4=Length(F4);
 if Проводить=1: F5="Проводить";
   |Проводить=2: F5="not Проводить";
   |True:	 F5="";
 fi;
 FL5=Length(F5);
 if Аннулирован=1: F6="Аннул";
   |Аннулирован=2: F6="not Аннул";
   |True	 : F6="";
 fi;
 FL6=Length(F6);
 if Проводить=1: F7="ВБанк";
   |Проводить=2: F7="not ВБанк";
   |True:	 F7="";
 fi;
 FL7=Length(F7);
 if Учитывать=1: F8="Учитывать";
   |Учитывать=2: F8="not Учитывать";
   |True:	 F8="";
 fi;
 FL8=Length(F8);
 if Вид=1: F9="not (АССИГН_ИТОГ_СУМ1<0 or АССИГН_ИТОГ_СУМ2<0 or АССИГН_ИТОГ_СУМ1<0 or ЛБО_ИТОГ_СУМ1<0 or ЛБО_ИТОГ_СУМ2<0 or ЛБО_ИТОГ_СУМ1<0)";
   |Вид=2: F9="(АССИГН_ИТОГ_СУМ1<0 or АССИГН_ИТОГ_СУМ2<0 or АССИГН_ИТОГ_СУМ1<0 or ЛБО_ИТОГ_СУМ1<0 or ЛБО_ИТОГ_СУМ2<0 or ЛБО_ИТОГ_СУМ1<0)";
   |True:  F9="";
 fi;
 FL9=Length(F9);
 if Секрет=0: F10=""; else F10="СЕКРЕТ="+Str(Секрет-1); fi;
 FL10=Length(F10);
 --
 if FL0+FL1+FL+FL3+FL4+FL5+FL6+FL7+FL8+FL9+FL10>255: Message("Слишком сложное условие отбора",mtError); ^"1=0"; fi;
 --
 F=F0;
 F=Раб.Бюджет2005.Объединить(F,F1," and ");
 F=Раб.Бюджет2005.Объединить(F,F2," and ");
 F=Раб.Бюджет2005.Объединить(F,F3," and ");
 F=Раб.Бюджет2005.Объединить(F,F4," and ");
 F=Раб.Бюджет2005.Объединить(F,F5," and ");
 F=Раб.Бюджет2005.Объединить(F,F6," and ");
 F=Раб.Бюджет2005.Объединить(F,F7," and ");
 F=Раб.Бюджет2005.Объединить(F,F8," and ");
 F=Раб.Бюджет2005.Объединить(F,F9," and ");
 F=Раб.Бюджет2005.Объединить(F,F10," and ");
 ^F;
end;

Proc Расчет(vIter:I);
var OWA,n,Nr,Iter:I;
var F:S;
 if vIter=0:
    if ДН_РР>ДК_РР and ДК_РР>1.1.100: Message("Конечная дата не может превышать начальную",mtError); Template.Field="ДК_РР"; Exit; fi;
    if ДН_ВД>ДК_ВД and ДК_ВД>1.1.100: Message("Конечная дата не может превышать начальную",mtError); Template.Field="ДК_ВД"; Exit; fi;
    Очистить;
    F=ПолучитьФильтр;
    if F="1=0": Exit; fi;
   else
    F="Ukey="+RecordToString(UKey[vIter]);
 fi;
 OWA=OpenWorkArea(SelfCrd,"ДАТАДОК;НОМЕРДОК",F);
 Try
  NR=Records(OWA);
  ShowProgress(Nr,"Расчет....");
  for n=1..NR do
   ProgressPos(n);
   if vIter=0: 
      Iter=n; 
      InsertFrame(Упр,Iter);
     else 
      Iter=vIter; 
   fi;
   НомРР[Iter]=GetFieldS(OWA,n,"НОМЕРДОК");
   ДатаРР[Iter]=GetFieldD(OWA,n,"ДАТАДОК");
   ДатаВД[Iter]=GetFieldD(OWA,n,"ДАТАВД");
   if GetFieldL(OWA,n,"Проводить"): ДатаБанк[Iter]=GetFieldD(OWA,n,"ДАТАОПЕР"); fi;
   if not GetFieldR(OWA,n,"ПБС")=nil:
      if Гр5=0:   НаимПБС[Iter]=GetFieldS(OWA,n,"ПБС_ПРИЗН");
	|Гр5=1:   НаимПБС[Iter]=GetFieldS(OWA,n,"ПБС.КорИмя");
	|Гр5=2:   НаимПБС[Iter]=GetFieldS(OWA,n,"ПБС.КорИмя")+" ("+GetFieldS(OWA,n,"ПБС_ПРИЗН")+")";
	|Гр5=3:   НаимПБС[Iter]=GetFieldS(OWA,n,"ПБС_ПРИЗН")+" ("+GetFieldS(OWA,n,"ПБС.КорИмя")+")";
      fi;
   fi;
   Ассигн1[Iter]=GetFieldN(OWA,n,"АССИГН_ИТОГ_СУМ1");
   Ассигн2[Iter]=GetFieldN(OWA,n,"АССИГН_ИТОГ_СУМ2");
   Ассигн3[Iter]=GetFieldN(OWA,n,"АССИГН_ИТОГ_СУМ3");
   ЛБО1[Iter]=GetFieldN(OWA,n,"ЛБО_ИТОГ_СУМ1");
   ЛБО2[Iter]=GetFieldN(OWA,n,"ЛБО_ИТОГ_СУМ2");
   ЛБО3[Iter]=GetFieldN(OWA,n,"ЛБО_ИТОГ_СУМ3");
   if not Отп_="": Отп[Iter]=Отп_; fi;
   UKey[Iter]=GetRecordKey(OWA,n);
 od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if vIter=0: Message("Расчет завершен"); fi;
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;

Proc Field_onExit (Field:S; Iter:I);
 Очистить;
end;

Func Д_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
var FieldSender:S;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(AsString(Template.Field),tmp);
 Очистить;
 ^Cur;
end;

Func Получ_onEnter (Field:S; Iter:I):L;
var Rec:Record;
 rec=Раб.Документы.ВыборСФильтром("КОНТРАГЕНТ","КорИмя","РПО_ПБС");
 if Rec=nil: ^False; fi;
 Получ=RecordToString(Rec);
 Получ_=GetCardFieldS("КОНТРАГЕНТ",StringToRecord(Получ),"КорИмя");
 Очистить;
 ^False;
end;

Proc Получ_onExit (Field:S; Iter:I);
 Получ="";
 Очистить;
end;

Func Учитывать_onEnter (Field:S; Iter:I):L;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Все расходные расписания";
 Buf[2]="Только учтеные";
 Buf[3]="Только не учтеные";
 n=Alternate("Режим показа",Buf,-1,Учитывать+1,12);
 if n=0: ^False; fi;
 Учитывать=n-1;
 Очистить;
 ^False;
end;

Func ВБанк_onEnter (Field:S; Iter:I):L;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Все расходные расписания";
 Buf[2]="Только отправленые";
 Buf[3]="Только не отправленые";
 n=Alternate("Режим показа",Buf,-1,ВБанк+1,12);
 if n=0: ^False; fi;
 ВБанк=n-1;
 Очистить;
 ^False;
end;

Func Проводить_onEnter (Field:S; Iter:I):L;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Все расходные расписания";
 Buf[2]="Только проведенные";
 Buf[3]="Только не проведенные";
 n=Alternate("Режим показа",Buf,-1,Проводить+1,12);
 if n=0: ^False; fi;
 Проводить=n-1;
 Очистить;
 ^False;
end;

Func Аннулирован_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Все расходные расписания";
 Buf[2]="Только аннулированные";
 Buf[3]="Только не аннулированные";
 n=Alternate("Режим показа",Buf,-1,Аннулирован+1,12);
 if n=0: ^False; fi;
 Аннулирован=n-1;
 Очистить;
 ^False;
end;

Func Гр5_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Гр5_,n:I;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Гр5_=Гр5;
 Buf[1]="Аналитический признак";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Аналитический признак)";
 Buf[4]="Аналитический признак (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf,-1,Гр5+1,12);
 if n=0: ^Cur; fi;
 Гр5=n-1;
 if not Гр5_=Гр5: If EnqOkCancel("Для вступления изменений в силу необходимо выполнить расчет")=cmOk: Расчет(0); fi; fi;
 Return Cur;
end;

Func НомРР_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var z:i;
 Rec=OpenCardFile(SelfCrd,"",UKey[Iter]);
 if rec=nil: ^False; fi;
 z=SearchInArray(UKey,Rec,False);
 if not z=-1:
    if z=Iter: z=SearchInArray(UKey,Rec,False,z+1); fi;
    if not z=-1: Message("Повторный ввод расходного расписания",mtError); Template.Field="НомРР"; Template.Frame=z; ^False; fi;
 fi;
 UKey[Iter]=Rec;
 Расчет(Iter);
 Return False;
end;

Proc НомРР_OnExit(FieldName: String; Iter: Integer);
 НомРР[Iter]="";
 ДатаРР[Iter]=1.1.100;
 ДатаВД[Iter]=1.1.100; 
 НаимПБС[Iter]="";
 Ассигн1[Iter]=0;
 Ассигн2[Iter]=0;
 Ассигн3[Iter]=0;
 ЛБО1[Iter]=0;
 ЛБО2[Iter]=0;
 ЛБО3[Iter]=0;
 UKey[Iter]=nil;
end;

Func НомРР_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Iter,z:I;
var F:S;
 Template.HideEditor(False);
 Iter=asInteger(Template.Frame);
 if ДН_РР>ДК_РР and ДК_РР>1.1.100: Message("Конечная дата не может превышать начальную",mtError); Template.Field="ДК_РР"; ^Cur; fi;
 if ДН_ВД>ДК_ВД and ДК_ВД>1.1.100: Message("Конечная дата не может превышать начальную",mtError); Template.Field="ДК_ВД"; ^Cur; fi;
 F=ПолучитьФильтр;
 if F="1=0": ^Cur; fi;
 Rec=OpenCardFile(SelfCrd,F,UKey[Iter]);
 if rec=nil: ^Cur; fi;
 z=SearchInArray(UKey,Rec,False);
 if not z=-1:
    if z=Iter: z=SearchInArray(UKey,Rec,False,z+1); fi;
    if not z=-1: Message("Повторный ввод расходного расписания",mtError); Template.Field="НомРР"; Template.Frame=z; ^Cur; fi;
 fi;
 UKey[Iter]=Rec;
 Расчет(Iter);
 Return Cur;
end;

Func ВызовРР (Field:S; Iter:I):l;
 if not UKey[Iter]=nil:
    OpenBlank(SelfBln,True,UKey[Iter]);
 fi;
 ^False;
end;

Func Вид_onEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Все расходные расписания";
 Buf[2]="Только назначение Ассигнований или ЛБО";
 Buf[3]="Только отзыв Ассигнований или ЛБО";
 n=Alternate("Режим показа",Buf,-1,Вид+1,12);
 if n=0: ^False; fi;
 Вид=n-1;
 Очистить;
 Return False;
end;

Func Секрет_onEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Не определено";
 Buf[2]="Не секретно";
 Buf[3]="ДСП";
 Buf[4]="Секретно";
 Buf[5]="Совершенно секретно";
 Buf[6]="Особой важности";
 n=Alternate("Гриф секретности",Buf,-1,Секрет+1,12);
 if n=0: ^False; fi;
 n=n-1;
 Секрет=n;
 Очистить;
 Return False;
end;

Proc Отп_OnExit(FieldName: String; Iter: Integer);
 if FieldName="Отп_":
    for Iter=1..Упр do
     Отп[Iter]=Отп_;
    od;
   else
    Отп_="";
 fi;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_onClick(Obj:S);
 Расчет(0);
end;

Proc btnПечать_OnClick(Sender: String);
var Iter,n:I;
var hОтп:S;
 if КолКопий<1: КолКопий=1; fi;
 n=0;
 for Iter=1..Упр do
  if not UKey[Iter]=nil: n=n+1; fi;
 od;
 if EnqOkCancel("Будет распечатно "+Str(n)+" расходных расписаний по "+Str(КолКопий)+" копии, продолжить ?")=cmCancel: Exit; fi;
 if fОтп: hОтп=GetVariableS(SelfPrn+".Т5"); fi;
 for Iter=1..Упр do
  if not UKey[Iter]=nil:
     if fОтп: PutVariableS(SelfPrn+".Т5",Отп[Iter]); fi;
     for n=1..КолКопий do
      PrintCardBlank(SelfPrn,UKey[Iter]);
     od;
  fi;
 od;
 if fОтп: PutVariableS(SelfPrn+".Т5",hОтп); fi;
 Message("Печать завершена");
end;

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Список расходных расписаний будет очищен, продолжить ?",mtWarning)=cmCancel: Exit; fi;
 Очистить;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc Template_OnOpen(Create: Logical);
 Учитывать=1;
end;

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