-- Шаблон создан мастером бланков
-- 07.06.2005 16:31:56
--
БланкСШаблоном "Подтверждение заявок";

fВидВыписка:L;
fЗакрытьДок:L;
fAutoInc   :L;

Тип:I;

var Тип_:s=if(Тип=1:"Заявок на возврат"|True:"Заявок на кассовый расход");

var ДатБанк:D=[ToDay];
var ДатПДок_:D;
var ОтчГод:I=Year(ДатБанк);


var Упр:I;

var A:S="+";
var D:S="-";

var пп[]:i=$;
var НомДок[]:S;
var НомДок_[]:S=НомДок[$];
var ДатДок[]:D;
var СумДок[]:N;
var Получ[]:S;
var НазнПлат[]:S;
var НомПДок[]:S;
var НомПДок_[]:S=НомПДок[$];
var ДатПДок[]:D;
var ВсегоСумДок:N=SumOfArray(СумДок,Упр);

var UKey[]:Record;

var FlagEdit:L;

var Buf[]:S;

var SelfCrd:S=if(Тип=1:"РПО_ЗАЯВКА_ВОЗВРАТ"|True:"РПО_ЗАЯВКА_КР");
var SelfBln:S=if(Тип=1:"ДОКУМЕНТЫ.БАНК.ЗАЯВКА_ВОЗВРАТ"|True:"ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР");
var ObjCrd:S="ПОРУЧ";

cbЗакрытьДок: Object;

S1: Section;
S2: Section;
S3: Section;
S4: Section;
S5: Section;
S6: Section;

--
--Процедуры и функции -------------	    
Proc Оформление;
 S1.Visible=not fВидВыписка;
 S2.Visible=not fВидВыписка;
 S3.Visible=not fВидВыписка;
 S4.Visible=fВидВыписка;
 S5.Visible=fВидВыписка;
 S6.Visible=fВидВыписка;
end;

Proc НеПустаяТаблица(ii:I);
var i:i;
 if Упр<ii:
    for i=Упр..ii do
     InsertFrame(Упр,Упр+1);
    od;
 fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Упр do
  if Ukey[Iter]=nil and НомПДок[Iter]="" and ДатПДок[Iter]=1.1.100: DeleteFrame(Упр,Iter); else Iter=Iter+1; fi;
 od;
 НеПустаяТаблица(1);
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомДок);
 ClearVariable(ДатДок);
 ClearVariable(СумДок);
 ClearVariable(Получ);
 ClearVariable(НазнПлат);
 ClearVariable(НомПДок);
 ClearVariable(ДатПДок);
 ClearVariable(UKey);
 НеПустаяТаблица(30);
end;

Proc ЗагрузитьДок(Rec: Record; Iter:I);
var OWA:I;
 OWA=OpenWorkArea(SelfCrd,"","Ukey="+RecordToString(Rec));
 Try
  НомДок[Iter]=GetFieldS(OWA,1,"НомерДок");
  ДатДок[Iter]=GetFieldD(OWA,1,"ДатаДок");
  СумДок[Iter]=GetFieldN(OWA,1,"Док_Сум");
  Получ[Iter]=GetFieldS(OWA,1,"БанкП.БанкИмя");
  НазнПлат[Iter]=GetFieldS(OWA,1,"Док_НазнПл");
  Ukey[Iter]=Rec;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func ПодтвДокСущ (aНом:S; aДат:D; aЗаяв:Record):I;
var OWA,nr:I;
var tmp:S;
-- OWA=OpenWorkArea(ObjCrd,"","НомерБум='"+aНом+"' and Year(Дата)="+Str(Year(ДатБанк))+" and not (РПО_ЗАЯВКА_ВОЗВРАТ=nil and РПО_ЗАЯВКА_КР=nil) and not "+SelfCrd+"="+RecordToString(aЗаяв));
 OWA=OpenWorkArea(ObjCrd,"","НомерБум='"+aНом+"' and Дата="+DateToString(aДат)+" and not (РПО_ЗАЯВКА_ВОЗВРАТ=nil and РПО_ЗАЯВКА_КР=nil) and not "+SelfCrd+"="+RecordToString(aЗаяв));
 Try
  Nr=Records(OWA);
  if not nr=0:
     if not GetFieldR(OWA,nr,"РПО_ЗАЯВКА_КР")=nil: tmp="Заявки на кассовый расход №"+GetFieldS(OWA,nr,"РПО_ЗАЯВКА_КР.НомерДок")+" от "+DateToString(GetFieldD(OWA,nr,"РПО_ЗАЯВКА_КР.ДатаДок"));
       |not GetFieldR(OWA,nr,"РПО_ЗАЯВКА_ВОЗВРАТ")=nil: tmp="Заявки на возврат №"+GetFieldS(OWA,nr,"РПО_ЗАЯВКА_ВОЗВРАТ.НомерДок")+" от "+DateToString(GetFieldD(OWA,nr,"РПО_ЗАЯВКА_ВОЗВРАТ.ДатаДок"));
     fi;
     ^EnqOkCancel("Платежное поручение №"+aНом+" от "+DateToString(GetFieldD(OWA,nr,"Дата"))+" уже является подверждающим документом для "+tmp+"^MИгнорировать данное предупреждение ?",mtWarning);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^cmOk;
end;

Func ПодвердитьДок:I;
var Iter,n,OWA,p:I;
var isNet:L;
 isNet=Раб.Бюджет2005.Сетевая;
 ClearTrace(True);
 p=0;
 OWA=OpenWorkArea(SelfCrd,"");
 ShowProgress(Упр,"Подтверждение заявок....");
 Try
  for Iter=1..Упр do
   ProgressPos(Iter);
   n=GetRecordNumber(OWA,Ukey[Iter]);
   if n=0: Message("Заявка с номером "+НомДок[Iter]+" не найдена в базе данных",mtError); Template.Field="НомДок_"; Template.Frame=Iter; ^-1; fi;
   if GetFieldL(OWA,n,"Проводить"):
      Trace("Позиция="+Str(Iter)+" Пропущена. Заявка №"+НомДок[Iter]+" уже подтверждена");
     else
      OpenBlank(SelfBln,False,UKey[Iter]);
      if not ExecuteFuncR(SelfBln+".ТекЗапись")=UKey[Iter]: Message("Ошибка позиционирования на запись",mtError); ^-2; fi;
      PutVariableD(SelfBln+".ДатаОпер",ДатБанк);
      PutVariableS(SelfBln+".ДокОперНом",НомПДок[Iter]);
      PutVariableD(SelfBln+".ДокОперДат",ДатПДок[Iter]);
      PutVariableL(SelfBln+".ВБанк",True);
      PutVariableL(SelfBln+".Проводить",True);
      ExecuteProc(SelfBln+".cbПроводить_OnChange","");
      if isNet and fЗакрытьДок and GetFieldL(OWA,n,"Проводить"):
	 PutVariableL(SelfBln+".ClosedModFob",fЗакрытьДок);
	 ExecuteProc(SelfBln+".cbЗакрытьДок_OnChange","");
      fi;
      Close(SelfBln);
      if GetFieldL(OWA,n,"Проводить"): 
	 p=p+1; 
	else 
	 Trace("Позиция="+Str(Iter)+". Заявка №"+НомДок[Iter]+" ошибка подтверждения"); 
      fi;
      if isBlankOpen(SelfBln): Message("Невозможно закрыть открытый бланк заявки ("+SelfBln+")^MПопробуйте закрыть открытую заявку вручную",mtError); ^-3; fi;
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ^p;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func Тип_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Заявки на кассовый расход";
 Buf[2]="Заявки на возврат";
 n=Alternate("Подтверждаемый документ",Buf,-1,Тип+1,12);
 if not n=0:
    if not Тип=n-1:
       if EnqOkCancel("Изменился подтверждаемый документ, таблица будет очищена. Продолжить ?",mtWarning)=cmCancel: ^False; fi;
       Очистить;
    fi;
    Тип=n-1;
 fi;
 Return False;
end;

Proc ДатБанк_OnExit(FieldName: String; Iter: Integer);
 if not ДатБанк=1.1.100:
    ДатПДок_=ДатБанк;
 fi;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar(ДатБанк);
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(AsString(Template.Field),tmp);
 Return Cur;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр,Iter+1);
 ^False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр,Iter);
 НеПустаяТаблица(1);
 ^False;
end;

Func НомДок_OnEnter(FieldName: String; Iter: Integer): logical;
 if ДатБанк=1.1.100: Message("Введите дату выписки",mtError); Template.Field="ДатБанк"; ^False; fi;
 FlagEdit=True;
 Return FlagEdit;
end;

Func НомДок_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var OWA,nr:I;
var Rec: Record;
 if not Value="":
    Value = Trim(Value);
    OWA=OpenWorkArea(SelfCrd,"","Учитывать and НомерДок='"+Value+"' and ДатаДок>=1.1."+Str(ОтчГод)+" and ДатаДок<1.1."+Str(ОтчГод+1));
    Try
     Nr=Records(OWA);
     if Nr=0: Message("Заявка с номером "+Value+" не найдена в базе данных",mtError); ^False;
       |Nr=1: Rec=GetRecordKey(OWA,1);
       |True: Message("В базе данных найдено несколько заявок с номером "+Value+" , выберите необходимую в ручном режиме",mtWarning); Rec=OpenCardFile(SelfCrd,"Учитывать and НомерДок='"+Value+"' and ДатаДок>=1.1."+Str(ОтчГод)+" and ДатаДок<1.1."+Str(ОтчГод+1),nil,crdRecordOnly);
     fi;
     if Rec=nil: ^False; fi;
     if GetFieldL(OWA,1,"Проводить"): Message("Заявка уже подтверждена",mtError); ^False; fi;
     if not SearchInArray(UKey,Rec)=-1: Message("Повторный ввод заявки",mtError); ^False; fi;
    Finally
     CloseWorkArea(OWA);
    end;
    ЗагрузитьДок(Rec,Iter);
    if Упр=Iter: InsertFrame(Упр,Упр+1); fi;
    Template.Name=if(fВидВыписка,"S5","S2");
    Template.Field="НомПДок_";
    if fВидВыписка: Iter=Iter+1; fi;
    Template.Frame=Iter;
    if НомПДок[Iter]="" and not Int(НомПДок[Iter-1])=0 and fAutoInc:
       НомПДок[Iter]=Str(Int(НомПДок[Iter-1])+1); 
       ДатПДок[Iter]=ДатПДок_;
       Template.Name=if(fВидВыписка,"S5","S2");
       Template.Field="НомДок_";
       Template.Frame=Iter;
    fi;
  fi;
  FlagEdit=True;
 ^True;
end;

Proc onExit(FieldName: String; Iter: Integer);
 if FlagEdit=True: FlagEdit=False; Exit; fi;
 НомДок[Iter]=""; ДатДок[Iter]=1.1.100; СумДок[Iter]=0; Получ[Iter]=""; НазнПлат[Iter]=""; UKey[Iter]=nil;
end;

Func НомДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var F:S;
var rec:Record;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 F="УЧИТЫВАТЬ";
 Rec=OpenCardFile(SelfCrd,F,UKey[Iter],crdRecordOnly);
 if Rec=nil: ^Cur; fi;
 if GetCardFieldL(SelfCrd,Rec,"Проводить"): Message("Заявка уже подтверждена",mtError); ^Cur; fi;
 if not SearchInArray(UKey,Rec)=-1: Message("Повторный ввод заявки"); ^Cur; fi;
 ЗагрузитьДок(Rec,Iter);
 Template.Name=if(fВидВыписка,"S5","S2");
 Template.Field="НомПДок_";
 if fВидВыписка: Iter=Iter+1; fi;
 Template.Frame=Iter;
 FlagEdit=False;
 ^Cur;
end;

var verified:L;
Func НомПДок_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    Value = trim(Value);
    if not ДатПДок[Iter]=1.1.100 or not ДатПДок_=1.1.100:
       if ПодтвДокСущ(Value,if(ДатПДок[Iter]=1.1.100,ДатПДок_,ДатПДок[Iter]),UKey[Iter])=cmCancel: ^False; fi;
    fi;
 fi;
 if FieldName = "НомПДок_":
    НомПДок[Iter] = Value;
    verified=True;
 fi;

 Template.Name=if(fВидВыписка,"S5","S2");
 if ДатПДок[Iter]=1.1.100 and not ДатПДок_=1.1.100:
    ДатПДок[Iter]=ДатПДок_;
    Template.Field="НомДок_";
    if not fВидВыписка: Iter=Iter+1; fi;
   else
    Template.Field="ДатПДок";
 fi;
 Template.Frame=Iter;
 Return True;
end;

Func ДатПДок_OnVerify(FieldName: String; Iter: Integer; Value: Date): Logical;
 Template.Name=if(fВидВыписка,"S5","S2");
 if not НомПДок[Iter]="":
    if ПодтвДокСущ(НомПДок[Iter],Value,UKey[Iter])=cmCancel: ^False; fi;
    Template.Field="НомДок_";
    if not fВидВыписка: Iter=Iter+1; fi;
   else
    Template.Field="НомПДок";
 fi;
 Template.Frame=Iter;
 Return True;
end;

Func ДатПДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var Iter:I;
 Template.HideEditor(False);
 Iter=asInteger(Template.Frame);
 if ДатБанк=1.1.100: tmp=Calendar; else tmp=ДатБанк; fi;
 if not tmp=1.1.100:
    Template.Name=if(fВидВыписка,"S5","S2");
    ДатПДок[Iter]=tmp;
    Template.Field="НомДок_";
    if not fВидВыписка: Iter=Iter+1; fi;
    Template.Frame=Iter;
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnПодтвер_OnClick(Sender: String);
var Iter,p:I;
var ss:s;
 Template.Name=if(fВидВыписка,"S5","S2");
 УдалитьПустыеСтроки;
 if ДатБанк=1.1.100: Message("Введите дату выписки",mtError); Template.Field="ДатБанк"; Exit; fi;
 if Ukey[1]=nil: Message("Нет данных для обработки",mtError); Template.Field="НомДок_"; Exit; fi;
 for Iter=1..Упр do
  if UKey[Iter]=nil: Message("Выберите заявку",mtError); Template.Field="НомДок_"; Template.Frame=Iter; Exit; fi;
  if ДатБанк<ДатДок[Iter]: Message("Дата банковской выписки не может быть ранее даты документа",mtError); Template.Field="ДатДок";  Template.Frame=Iter; Exit; fi;
  if НомПДок[Iter]="": Message("Введите номер подтверждающего документа",mtError); Template.Field="НомПДок_";  Template.Frame=Iter; Exit; fi;
  if ДатПДок[Iter]=1.1.100: Message("Введите дату подтверждающего документа",mtError); Template.Field="ДатПДок";  Template.Frame=Iter; Exit; fi;
 od;
 if not BlankExist(SelfBln): Message("Бланк заявки не найден ("+SelfBln+")",mtError); Exit; fi;
 if isBlankOpen(SelfBln): Close(SelfBln); fi;
 if isBlankOpen(SelfBln): Message("Невозможно закрыть открытый бланк заявки ("+SelfBln+")^MПопробуйте закрыть открытую заявку вручную",mtError); Exit; fi;
 p=ПодвердитьДок;
 if not p<0:
    Message("Успешно подтверждено "+Str(p)+" из "+Str(Упр)+" заявок");
    Очистить;
 fi;
end;

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

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;

Proc cbВидВыписка_OnChange(Sender: String);
 Оформление;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 НеПустаяТаблица(30);
end;

Proc AfterOpen(Destroy: Logical);
 cbЗакрытьДок.Visible=Раб.Бюджет2005.Сетевая;
 Оформление;
end;
--Обработчики событий шаблона -----
--

Proc НомПДок_OnExit(FieldName: String; Iter: Integer);
  if verified:
    verified=False;
  else
    НомПДок[Iter]="";
  fi;
end;


Конец


