БЛАНКСШАБЛОНОМ "Журнал регистрации кассовых документов";

btnРасчет      :Object;
btnПечать      :Object;
cbТитул        :Object;
cbПроведенные  :Object;
cbУчитыватьПодр:Object;

rb_ВсеДок      :Object;
rb_ДенДок      :Object;
rb_БлнСтр      :Object;
rb_Путевк      :Object;

curТипДок      :Integer=[0];
var oldТипДок  :Integer;

var Упр:Handle;
var Упр_:Handle;

Title:L;
Проведенные:L;
УчитыватьПодр:L;

Период   :S;
НаимОрг  :S;
ОКПО     :S;
ПризнПодр:S;
НаимПодр :S=if(Name_A(ПризнПодр)="" or Name_A(ПризнПодр)=" ",ПризнПодр,Name_A(ПризнПодр));
ДолжнБух :S;
ФИОбух   :S;
ФИОкасс  :S;
ДатаН    :D=[ToDay];
ДатаК    :D=[ToDay+1];

var ДатП []:D;
var НомП []:S;
var СумП []:N;
var ПримП[]:S;
var ДатР []:D;
var НомР []:S;
var СумР []:N;
var ПримР[]:S;
var Дт   []:D;
var Crd  []:S;
var UKey []:Record;

var ИтогСумП:N=SumOfArray(СумП,Упр);
var ИтогСумР:N=SumOfArray(СумР,Упр);


var Link:S="...";
2-- Общие процедуры и функции
Proc ВнешнийВид;
 if Title:
    btnРасчет.Left=10;
    btnРасчет.Top=10;
    btnПечать.Left=270;
    btnПечать.Top=10;
    cbТитул.Left=550;
    cbТитул.Top=30;
    cbПроведенные.Left=10;
    cbПроведенные.Top=100;
    cbУчитыватьПодр.Left=10;
    cbУчитыватьПодр.Top=150;
   else
    btnРасчет.Left=950;
    btnРасчет.Top=50;
    btnПечать.Left=1210;
    btnПечать.Top=50;
    cbТитул.Left=1470;
    cbТитул.Top=70;
    cbПроведенные.Left=10;
    cbПроведенные.Top=10;
    cbУчитыватьПодр.Left=850;
    cbУчитыватьПодр.Top=10;
 fi;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(ДатП);
 ClearVariable(НомП);
 ClearVariable(СумП);
 ClearVariable(ПримП);
 ClearVariable(ДатР);
 ClearVariable(НомР);
 ClearVariable(СумР);
 ClearVariable(ПримР);
 ClearVariable(Дт);
 ClearVariable(Crd);
 ClearVariable(UKey);
end;

Proc НашиРекв(REC :Record);
 НаимОрг=GetCardFieldS("Контрагент", REC, "КорИмя");
 ОКПО= GetCardFieldS("Контрагент", REC, "ОКПО");
 ДолжнБух=GetCardFieldS("Контрагент", REC, "ДолжнБух");
 ФИОБух=GetCardFieldS("Контрагент", REC, "ФИОБух");
 ФИОКасс=GetCardFieldS("Контрагент", REC, "ФИОКасс");
end;

Proc Расчет;
var OWA,n,nr,z:i;
var Fо,Fп,Fр:S;
 Очистить;
 Fо="";Fп="";Fр="";
 if ДатаН>1.1.100 and ДатаК>1.1.100: Fо="Дата>="+DateToString(ДатаН)+" and Дата<"+DateToString(ДатаК);
   |ДатаН=1.1.100 and ДатаК>1.1.100: Fо="Дата<" +DateToString(ДатаК);
   |ДатаН>1.1.100 and ДатаК=1.1.100: Fо="Дата>="+DateToString(ДатаН);
 fi;
 if Проведенные:   Fо=Fо+" and Проводить"; fi;
 if УчитыватьПодр: Fо=Fо+" and ПризнПодр='"+ПризнПодр+"'"; fi;
 if curТипДок=1: Fп=Fо+" and Match(СЧДЕБ, '*.201.35.???')"; Fр=Fо+" and Match(СЧКРЕ, '*.201.35.???')";
 |  curТипДок=2: Fп=Fо+" and Match(СЧДЕБ, 'ЗАБ.03')";       Fр=Fо+" and Match(СЧКРЕ, 'ЗАБ.03')";
 |  curТипДок=3: Fп=Fо+" and Match(СЧДЕБ, 'ЗАБ.08')";       Fр=Fо+" and Match(СЧКРЕ, 'ЗАБ.08')";
 fi;
 --Считаем приходники
 OWA=OpenWorkArea("РПО_ДЕНДОК_ПРИХОД","Дата;Номер",Fп);
 Try
  Nr=Records(OWA);
  ShowProgress(Nr*2,"Расчет...");
  for n=1..Nr do
   ProgressPos(n);
   InsertFrame(Упр,Упр+1);
   ДатП[Упр]=GetFieldD(OWA,n,"Дата");
   НомП[Упр]=GetFieldS(OWA,n,"НомерБум");
   СумП[Упр]=GetFieldN(OWA,n,"СумПриход");
   ПримП[Упр]="Принято от "+GetFieldS(OWA,n,"ФИО")+" "+GetFieldS(OWA,n,"ОСН");
   Дт[Упр]=ДатП[Упр];
   Crd[Упр]="РПО_ДЕНДОК_ПРИХОД";
   UKey[Упр]=GetRecordKey(OWA,n);
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 z=Nr;
 --Считаем расходники
 OWA=OpenWorkArea("РПО_ДЕНДОК_РАСХОД","Дата;Номер",Fр);
 Try
  Nr=Records(OWA);
  ShowProgress(Z+Nr,"Расчет...");
  for n=1..Nr do
   ProgressPos(z+n);
   InsertFrame(Упр,Упр+1);
   ДатР[Упр]=GetFieldD(OWA,n,"Дата");
   НомР[Упр]=GetFieldS(OWA,n,"НомерБум");
   СумР[Упр]=GetFieldN(OWA,n,"СумРасход");
   ПримР[Упр]="Выдать "+GetFieldS(OWA,n,"ФИО")+" "+GetFieldS(OWA,n,"ОСН");
   Дт[Упр]=ДатР[Упр];
   Crd[Упр]="РПО_ДЕНДОК_РАСХОД";
   UKey[Упр]=GetRecordKey(OWA,n);
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 SortSection(Упр,10);
end;
2-- События полей
Func НаимОрг_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 REC=OpenCardFile("Контрагент", "Наше", NIL, crdRecordOnly);
 if Rec=nil: ^False; fi;
 НашиРекв(REC);
 ^False;
end;

Func Подр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П!");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 if УчитыватьПодр: Очистить;  fi;
 ^False;
end;

Proc НаимПодр_OnExit(FieldName: String; Iter: Integer);
 ПризнПодр="";
 if УчитыватьПодр: Очистить; fi;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
var v1,v2,Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Rec=OpenCardFile("Сотрудники");
 if Rec=nil: ^Cur; fi;
 v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
 v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
 if Field="ДолжнБух" or Field="ФИОБух": ДолжнБух=v1; ФИОБух=v2;
   |Field="ФИОКасс": ФИОКасс=v2;
 fi;
 ^Cur;
end;

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

Func Link_OnEnter(FieldName: String; Iter: Integer): logical;
 if Crd[Iter]="РПО_ДЕНДОК_ПРИХОД": OpenBlank("Документы.ДенДок.Приход",True,UKey[Iter]);
   |Crd[Iter]="РПО_ДЕНДОК_РАСХОД": OpenBlank("Документы.ДенДок.Расход",True,UKey[Iter]);
 fi;
 ^False;
end;

2--События обкъектов
Proc btnРасчет_onClick(Sender: String);
 if ДатаН=1.1.100 and ДатаК=1.1.100: Message("Введите дату !"); Template.Field="ДатаН"; Exit; fi;
 if ДатаК<ДатаН: Message("Ошибка ! Начальная дата превышает конечную."); Template.Field="ДатаН"; Exit; fi;
 if ДатаН=ДатаК: ДатаК=ДатаК+1; fi;
 Расчет;
 Message("Расчет завершен.");
end;

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

Proc cbТитул_OnChange(Sender: String);
2 0ВнешнийВид;
end;

Proc cbПроведенные_OnChange(Sender: String);
 Очистить;
 if EnqOkCancel("Выполнить перерасчет ?")=cmCancel: Exit; fi;
 btnРасчет_onClick(Sender);
end;

Proc cbУчитыватьПодр_OnChange(Sender: String);
 Очистить;
 if EnqOkCancel("Выполнить перерасчет ?")=cmCancel: Exit; fi;
 btnРасчет_onClick(Sender);
end;

Proc ФлагиТипДокумента_onChange(Sender:String);
var qq, curFlag, oldFlag :Integer;
 curFlag=curТипДок;
 oldFlag=oldТипДок;
 if Упр>0:
   qq=EnqOkCancel("Условия отбора данных для отчета изменились!^MОчистить отчет?", mtConfirmation);
   if qq=cmOk: Очистить; | qq=cmCancel: curFlag=oldFlag; fi;
 fi;
 curТипДок=curFlag;
 oldТипДок=curТипДок;
end;  

2-- События шаблона
Proc Template_onOpen(Create: Logical);
var Rec: Record;
 if Раб.Настр_Печать.ExistCfg("RPO_0310003_000.cfg")=False: Раб.Настр_Печать.CreateCfg("","RPO_0310003_000.cfg"); fi;
 if НаимОрг<>"":
    REC=РАБ.БЮДЖЕТ2005.НашРекв; 
    if REC<>NIL: НашиРекв(REC); fi;
 fi;
 ВнешнийВид;
 if not Упр>0: curТипДок=0; fi;
 oldТипДок=curТипДок;
end;


КОНЕЦ