-- Шаблон создан мастером бланков
-- 31.07.2002 10:32:26
--
БланкСШаблоном "Журнал регистрации поступивших платежных поручений";

S1 :Section;
S2 :Section;
S3 :Section;
S4 :Section;
S5 :Section;
S6 :Section;
S7 :Section;
S8 :Section;
S9 :Section;

Секция1:Section;
Секция2:Section;
Секция3:Section;

btnРасчет:Object;

fПечатьПарам:L;
--
var Упр:Handle;
var пп[]:I=$;
var Сумма[]:N;
var НомДок[]:S;
var ДатаБанк[]:D;
var НомЛС[]:S;
var НаимОРГ[]:S;
var БК[]:S;
var ТекстПризн1[]:S;
var Содерж[]:S;
var Ukey[]:S;
var ИтогСумма:N=SumOfArray(Сумма,Упр);
var ИтогБКСумма:N;
var ИтогПризн1Сумма:N;
----
ДН_ПП:D;
ДК_ПП:D;
ДН_БАНК:D;
ДК_БАНК:D;
НомерПП_Н:S;
НомерПП_К:S;
БанкСчет:Record;
БанкСчет_:S;
Получ:Record;
Получ_:S;
КБК:S;
КОСГУ:S;
Справ1:S;
НаимСправ1:S=if(Name_A(Справ1+".")="" or Name_A(Справ1+".")=" ",Справ1,Name_A(Справ1+"."));
Призн1:S;
Проводить:I;
var Проводить_:S=if(Проводить=0,"Не определено",if(Проводить=1,"Только проведенные",if(Проводить=2,"Только не проведенные","?")));

var BufS1[]:S;
var BufСум1[]:N;
var BufS2[]:S;
var BufСум2[]:N;

var SelfCrd:S="ПРИХПЛПОРУЧЕНИЯ";
var SelfBln:S="ДОКУМЕНТЫ.БАНК.ПОРУЧ_ВХ";
var SelfCfg:S="ТББ.ДОКУМЕНТЫ.БАНК.ЖУРНАЛ_РЕГ_ПП_ВХ.000.cfg";

ДолжнРук:S;
ФИОРук:S;
ДолжнБух:S;
ФИОБух:S;
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомДок);
 ClearVariable(ДатаБанк);
 ClearVariable(НомЛС);
 ClearVariable(НаимОРГ);
 ClearVariable(БК);
 ClearVariable(Содерж);
 ClearVariable(ТекстПризн1);
 ClearVariable(Сумма);
 ClearVariable(Ukey);
 ClearVariable(ИтогБКСумма);
 ClearVariable(ИтогПризн1Сумма);
end;

Proc ВнешнийВид;
var i:i;
var Obj: Object;
 for i=2..9 do
  if FindObject("S"+Str(i),Obj):
     Obj.CanPrint=fПечатьПарам;
  fi;
 od;
 if Справ1="":
    Секция1.Column(8,ColVisible,False);
    Секция2.Column(8,ColVisible,False);
    Секция3.Column(8,ColVisible,False);
    Секция1.Column(9,ColWidth,880);
    Секция2.Column(9,ColWidth,880);
    Секция3.Column(9,ColWidth,880);
    Секция1.Cell(1,9,CellText,"8");
   else
    Секция1.Column(8,ColVisible,True);
    Секция2.Column(8,ColVisible,True);
    Секция3.Column(8,ColVisible,True);
    Секция1.Column(9,ColWidth,480);
    Секция2.Column(9,ColWidth,480);
    Секция3.Column(9,ColWidth,480);
    Секция1.Cell(1,9,CellText,"9");
 fi;
end;

Proc СуммаСуб (OA:I; nr:I);
var n,n1,n2,z:i;
var Acc,Sgn:S;
var Сум_:N;
 ClearVariable(BufS1);
 ClearVariable(BufСум1);
 ClearVariable(BufS2);
 ClearVariable(BufСум2);
 for n=1..nr do
  Acc=GetFieldS(OA,n,"КБК");
  Sgn=GetFieldS(OA,n,"Призн");
  Sgn=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(Sgn,Справ1+".*"," ");
  Сум_=GetFieldN(OA,n,"Сум");
  --
  if not Acc="":
     z=SearchInArray(BufS1,Acc,True);
     if z=-1:
	z=InsertInArraySort(BufS1,Acc);
	InsertInArray(BufСум1,z,Сум_);
       else
	BufСум1[z]=BufСум1[z]+Сум_;
     fi;
  fi;
  --
  if not Sgn="":
     z=SearchInArray(BufS2,Sgn,True);
     if z=-1:
	z=InsertInArraySort(BufS2,Sgn);
	InsertInArray(BufСум2,z,Сум_);
       else
	BufСум2[z]=BufСум2[z]+Сум_;
     fi;
  fi;
 od;
 --
 n1=1;
 While not BufS1[n1]=""  do
  if BufS1[2]="":
     БК[Упр]=BufS1[n1]+" ="+Format("%.2N",BufСум1[n1])+" руб. ";
    else
     БК[Упр]=БК[Упр]+BufS1[n1]+" ="+Format("%.2N",BufСум1[n1])+" руб. ";
  fi;
  n1=n1+1;
 od;
 n2=1;
 While not BufS2[n2]=""  do
  if BufS2[2]="":
     ТекстПризн1[Упр]=BufS2[n2]+" ="+Format("%.2N",BufСум2[n2])+" руб. ";
    else
     ТекстПризн1[Упр]=ТекстПризн1[Упр]+BufS2[n2]+" ="+Format("%.2N",BufСум2[n2])+" руб. ";
  fi;
  n2=n2+1;
 od;
 ИтогБКСумма=ИтогБКСумма+SumOfArray(BufСум1,n1-1);
 ИтогПризн1Сумма=ИтогПризн1Сумма+SumOfArray(BufСум2,n2-1);
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);
 FieldSender=AsString(Template.Field);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 if FieldSender="ДН_ПП": ДН_ПП=tmp;
   |FieldSender="ДК_ПП": ДК_ПП=tmp;
   |FieldSender="ДН_Банк": ДН_Банк=tmp;
   |FieldSender="ДК_Банк": ДК_Банк=tmp;
 fi;
 Очистить;
 ^Cur;
end;

Func БанкСчет_onEnter (Field:S; Iter:I):L;
var Rec: Record;
 Rec=OpenCardFile("БАНК_СЧЕТА","НАШ",БанкСчет);
 if Rec=nil: ^False; fi;
 БанкСчет=Rec;
 if not GetCardFieldS("БАНК_СЧЕТА",Rec,"РПО_ЛСчет")="":
    БанкСчет_=GetCardFieldS("БАНК_СЧЕТА",Rec,"РПО_ОФК_ИМЯ")+" Л/С "+GetCardFieldS("БАНК_СЧЕТА",Rec,"РПО_ЛСчет");
   else
    БанкСчет_=GetCardFieldS("БАНК_СЧЕТА",Rec,"БАНК")+" Р/С "+GetCardFieldS("БАНК_СЧЕТА",Rec,"РСчет");
 fi;
 Очистить;
 ^False;
end;

Proc БанкСчет_onExit (Field:S; Iter:I);
 БанкСчет=nil;
 Очистить;
end;

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

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

Func КБК_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:s;
 Template.HideEditor(False);
 tmp=AnaElection("ФКР.*|КД.*|КИФД.*");
 if tmp="": ^Cur; fi;
 КБК=SubStr(tmp,Pos(".",tmp)+1,255);
 Очистить;
 ^Cur;
end;

Func КОСГУ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:s;
 Template.HideEditor(False);
 tmp=AnaElection("КОСГУ.*");
 if tmp="": ^Cur; fi;
 КОСГУ=SubStr(tmp,7,255);
 Очистить;
 ^Cur;
end;

Func Справ1_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("*",True);
 if tmp="": ^False; fi;
 Справ1=tmp;
 ВнешнийВид;
 Очистить;
 ^False;
end;

Proc Справ1_OnExit(FieldName: String; Iter: Integer);
 Призн1="";
 ВнешнийВид;
 Очистить;
end;

Func Призн1_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Mask:s;
 if Справ1="": Mask="*"; else Mask=Справ1+".*"; fi;
 tmp=AnaElection(Mask);
 if tmp="": ^False; fi;
 Призн1=tmp;
 Справ1=SubStr(Призн1,1,Pos(".",Призн1)-1);
 ВнешнийВид;
 Очистить;
 ^False;
end;

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

Func ВызовПП (Field:S; Iter:I):l;
 OpenBlank(SelfBln,True,StringToRecord(UKey[Iter]));
 ^False;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Rec:Record;
var v1,v2:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    if Field="ДолжнРук" or Field="ФИОРук": ДолжнРук=v1; ФИОРук=v2;
      |Field="ДолжнБух" or Field="ФИОБух": ДолжнБух=v1; ФИОБух=v2;
    fi;
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_onClick(Obj:S);
var OWA,OA,n,Nr,n2,NR2:I;
var F,F1,F2,F3,F4,F5,F6,F7,F8,F9,tmp1,tmp2,tmp:S;
var FL,FL1,FL2,FL3,FL4,FL5,FL6,FL7,FL8,FL9:I;
var FS,FS1,FS2:S;
var p,z:I;
var RРекв,RБанк,Rec:Record;
 if ДН_ПП>ДК_ПП and ДК_ПП>1.1.100: Message("Конечная дата не может превышать начальную",mtError); Template.Field="ДК_ПП"; Exit; fi;
 if ДН_Банк>ДК_Банк and ДК_Банк>1.1.100: Message("Конечная дата не может превышать начальную",mtError); Template.Field="ДК_Банк"; Exit; fi;
 Очистить;
 --
 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 not Получ=nil: F4="РеквКонтр="+RecordToString(Получ);
   |True: F4="";
 fi;
 FL4=Length(F4);
 if Проводить=1: F5="РПО_Проводить";
   |Проводить=2: F5="not РПО_Проводить";
   |True:	 F5="";
 fi;
 FL5=Length(F5);
 if not БанкСчет=nil: F6="РеквБанк="+RecordToString(БанкСчет);
   |True: F6="";
 fi;
 FL6=Length(F6);
 --
 F=Раб.Бюджет2005.Объединить(F1,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 ");
 if FL1+FL+FL3+FL4+FL5+FL6+FL7+FL8+FL9>Length(F): Message("Слишком сложное условие отбора",mtError); Exit; fi;
 --
 if КБК<>"" and КОСГУ= "": FS1="Match(КБК,'"+КБК+".???')";
   |КБК= "" and КОСГУ<>"": FS1="Match(КБК,'*."+КОСГУ+"')";
   |КБК<>"" and КОСГУ<>"": FS1="Match(КБК,'"+КБК+"."+КОСГУ+"')";
   |True: FS1="";
 fi;
 if Справ1<>"" and Призн1= "": FS2="Match(Призн,'*"+Справ1+".*')";
   |Справ1<>"" and Призн1<>"": FS2="Match(Призн,'*"+Призн1+"*')";
   |True: FS2="";
 fi;
 FS=Раб.Бюджет2005.Объединить(FS1,FS2," and ");
 OWA=OpenWorkArea(SelfCrd,"ДатаДок;Номер",F);
 Try
  nr=Records(OWA);
  ShowProgress(Nr,"Расчет....");
  for n=1..nr do
   ProgressPos(n);
   Rec=GetRecordKey(OWA,n);
   if n=1: 
      OA=OpenArray(OWA,n,"РПО_РАСШИФР","",FS);
   fi;
   nr2=Records(OA);
   if not nr2=0:
      InsertFrame(Упр,Упр+1);
      НомДок[Упр]="№ "+GetFieldS(OWA,n,"НомерБум")+" / "+DateToString(GetFieldD(OWA,n,"ДатаДок"));
      if GetFieldL(OWA,n,"РПО_Проводить"):
	 ДатаБанк[Упр]=GetFieldD(OWA,n,"РПО_ДатаОпер");
      fi;
      if not GetFieldR(OWA,n,"РеквБанк")=nil:
	 НомЛС[Упр]=GetFieldS(OWA,n,"РеквБанк.РПО_ЛСчет");
	 if НомЛС[Упр]="":
	    НомЛС[Упр]=GetFieldS(OWA,n,"РеквБанк.РСчет");
	 fi;
      fi;
      Сумма[Упр]=GetFieldN(OWA,n,"Сумма");
      RРекв=GetFieldR(OWA,n,"РеквКонтр");
      RБанк=GetFieldR(OWA,n,"КонтрБанк");
      if not RРекв=nil:
	 if RБанк=nil: 
	    НаимОРГ[Упр]=GetFieldS(OWA,n,"РеквКонтр.КорИмя");
	   else
	    НаимОРГ[Упр]=GetFieldS(OWA,n,"КонтрБанк.БанкИмя");
	 fi;
	 НаимОРГ[Упр]=НаимОРГ[Упр]+" ИНН "+GetFieldS(OWA,n,"РеквКонтр.ИНН");
      fi;
      СуммаСуб(OA,nr2);
      Содерж[Упр]=GetFieldS(OWA,n,"НазначПлат");
      UKey[Упр]=RecordToString(Rec);
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 Message("Расчет завершен");
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn("","",SelfCfg,"",1);
end;

Proc cbПечатьПарам_OnChange(Sender: String);
 ВнешнийВид;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc Template_OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("",SelfCfg);
 ВнешнийВид;
end;
--Обработчики событий шаблона -----
--


Конец
