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

var Упр:I;

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

ОтчГод:I;

var ДатИзв2_:D;

var пп[]:i=$;
var НомИзв[]:S;
var НомИзв_[]:S=НомИзв[$];
var ДатИзв[]:D;
var СумИзв[]:N;
var Получ[]:S;
var ДатИзв2[]:D;
var СумИзв2[]:N;
var ГЭК2Лист[]:S;
var Статус[]:S;
var UKey[]:Record;
var ГЭК2Rec[]:Record;

var Ok[]: Record;

var FlagEdit:L;

var Buf[]:S;

fАвтоСумПодтв:L;
fЗакрытьДок:L;

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

var СканГЭК:S="Сканировать";
var СканГЭК2:S=if(Раб.Вспом.Сканер.enableDuplex,"Скан. две стороны","");
--
--Процедуры и функции -------------	    
Proc НеПустаяСтрока;
 if Упр<1: InsertFrame(Упр,Упр+1); fi;
end;

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

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомИзв);
 ClearVariable(ДатИзв);
 ClearVariable(СумИзв);
 ClearVariable(Получ);
 ClearVariable(ДатИзв2);
 ClearVariable(СумИзв2);
 ClearVariable(ГЭК2Лист);
 ClearVariable(Статус);
 ClearVariable(UKey);
 ClearVariable(ГЭК2Rec);
 ClearVariable(Ok);
 НеПустаяСтрока;
end;

Proc РасчетГЭК2(Iter:I);
var OWA,n,nn,i1,i2:I;
var isNet:L;
var Rec: Record;
 if UKey[Iter]=nil:
    ГЭК2Лист[Iter]="0 / 0";
    ГЭК2Rec[Iter]=nil;
   else
    OWA=OpenWorkArea("РПО_СКАН_ДОК","Дата","Док='РПО_ИЗВЕЩЕНИЯ_ИСХ' and Запись="+Str(RecordToInteger(UKey[Iter]))+" and Кмнт='Подтверждение'");
    Try
     nn=Records(OWA);
     for n=1..nn do
      Rec=GetRecordKey(OWA,n);
      i1=i1+Раб.Вспом.Сканер.ЧитатьГЭК("РПО_СКАН_ДОК",RecordToInteger(Rec),"jpg",True);
      i2=i2+Раб.Вспом.Файлы.ПоказСписок("РПО_СКАН_ДОК",RecordToInteger(Rec),"","","","","","",0);
     od;
     ГЭК2Лист[Iter]=Str(i1)+" / "+Str(i2);
     ГЭК2Rec[Iter]=if(nn=0,nil,GetRecordKey(OWA,nn));
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
end;

Proc ЗагрузитьИзв(Rec: Record; Iter:I);
var OWA,OA,nr2,n2:I;
 ГЭК2Лист[Iter]="0 / 0";
 ГЭК2Rec[Iter]=nil;
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","","Ukey="+RecordToString(Rec));
 Try
  НомИзв[Iter]=GetFieldS(OWA,1,"НомерБум");
  ДатИзв[Iter]=GetFieldD(OWA,1,"ДатаИзв");
  ДатИзв2[Iter]=GetFieldD(OWA,1,"ДВозврат2");
  СумИзв[Iter]=GetFieldN(OWA,1,"Сумма");
  СумИзв2[Iter]=GetFieldN(OWA,1,"СуммаПолуч");
  if not GetFieldL(OWA,1,"ВОЗВРАТ2"):
     if fАвтоСумПодтв and СумИзв2[Iter]=0: СумИзв2[Iter]=СумИзв[Iter]; fi;
     ДатИзв2[Iter]=ДатИзв2_;
  fi;
  if GetFieldL(OWA,1,"is69н"):
     Получ[Iter]=Раб.Бюджет2005.Объединить(Получ[Iter],GetFieldS(OWA,1,"ПолучРекв.КорИмя"),","+Chr(13));
  fi;
  OA=OpenArray(OWA,1,"ПОЛУЧ","");
  Nr2=Records(OA);
  for n2=1..Nr2 do
   Получ[Iter]=Раб.Бюджет2005.Объединить(Получ[Iter],GetFieldS(OA,n2,"Рекв.КорИмя"),","+Chr(13));
  od;
  CloseWorkArea(OA);
  Ukey[Iter]=Rec;
 Finally
  CloseWorkArea(OWA);
 end;
 РасчетГЭК2(Iter);
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func ОтчГод_OnEnter(FieldName: String; Iter: Integer): logical;
var i:I;
 ClearVariable(Buf);
 for i=1..5 do Buf[i]=Str(Year(ToDay)+i-4); od;
 i=Alternate("Выбор года расчета",Buf,30,4,12);
 if i<>0: ОтчГод=Int(Buf[i]); fi;
 Return False;
end;

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

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр,Iter);
 НеПустаяСтрока;
 ^False;
end;

Func НомИзв_OnEnter(FieldName: String; Iter: Integer): logical;
 if ОтчГод=0: 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;
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","","Проводить 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("В базе данных обнаружено несколько извещений, выберите вручную",mtWarning); Rec=OpenCardFile("РПО_ИЗВЕЩЕНИЯ_ИСХ","Проводить and ВОЗВРАТ2=False and НомерБум='"+Value+"' and ДатаИзв>=1.1."+Str(ОтчГод)+" and ДатаИзв<1.1."+Str(ОтчГод+1),nil,crdRecordOnly);
  fi;
  if Rec=nil: ^False; fi;
  if GetFieldL(OWA,1,"ВОЗВРАТ2"): Message("Извещение уже подтверждено",mtError); ^False; fi;
  if SearchInArray(UKey,Rec)<>-1: Message("Повторный ввод извещения",mtError); ^False; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ЗагрузитьИзв(Rec,Iter);
 if ДатИзв2_=1.1.100:
    Template.Field="ДатИзв2";
   else
    if fАвтоСумПодтв:
       Iter=Iter+1;
       if Iter>Упр: InsertFrame(Упр,Iter); fi;
       Template.Field="НомИзв_";
      else
       Template.Field="СумИзв2";
    fi;
 fi;
 Template.Frame=Iter;
 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]=""; ДатИзв2[Iter]=ДатИзв2_; СумИзв2[Iter]=0; ГЭК2Лист[Iter]=""; ГЭК2Rec[Iter]=nil; UKey[Iter]=nil;
end;

Proc ДатИзв2__OnExit(FieldName: String; Iter: Integer);
 for Iter=1..Упр do
  ДатИзв2[Iter]=ДатИзв2_;
 od;
end;

Func ДатИзв2__OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var Iter:I;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    ДатИзв2_=tmp;
    for Iter=1..Упр do
     ДатИзв2[Iter]=ДатИзв2_;
    od;
 fi;
 Return Cur;
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="Проводить and ДатаИзв>=1.1."+Str(ОтчГод)+" and ДатаИзв<1.1."+Str(ОтчГод+1);
 Rec=OpenCardFile("РПО_ИЗВЕЩЕНИЯ_ИСХ",F,UKey[Iter],crdRecordOnly);
 if Rec=nil: ^Cur; fi;
 if GetCardFieldL("РПО_ИЗВЕЩЕНИЯ_ИСХ",Rec,"ВОЗВРАТ2"): Message("Извещение уже подтверждено",mtError); ^Cur; fi;
 if SearchInArray(UKey,Rec)<>-1: Message("Повторный ввод извещения"); ^Cur; fi;
 ЗагрузитьИзв(Rec,Iter);
 Template.Field="ДатИзв2";
 Template.Frame=Iter;
 FlagEdit=False;
 ^Cur;
end;

Func ДатИзв2_OnVerify(FieldName: String; Iter: Integer; Value: Date): Logical;
 if fАвтоСумПодтв: Template.Field="НомИзв_"; Template.Frame=Iter+1; else Template.Field="СумИзв2"; Template.Frame=Iter; fi;
 Return True;
end;

Func ДатИзв2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var Iter:I;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    Iter=asInteger(Template.Frame);
    ДатИзв2[Iter]=tmp;
    ДатИзв2_OnVerify("ДатИзв2",Iter,tmp);
 fi;
 Return Cur;
end;

Func СумИзв2_OnVerify(FieldName: String; Iter: Integer; Value: Numeric): Logical;
 Template.Field="НомИзв_"; 
 Template.Frame=Iter+1;
 Return True;
end;

Func ГЭК2Лист_OnEnter(FieldName: String; Iter: Integer): logical;
var bln:S;
 if UKey[Iter]=nil: Message("Выберите извещение",mtError); Template.Field="НомИзв_"; Template.Frame=Iter; ^False; fi;
 РасчетГЭК2(Iter);
 bln="Раб.Вспом.Скан_Док";
 if ModalMode and isBlankOpen(bln): Message("Бланк электронной копии уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
 if isBlankOpen(bln): Close(bln); fi;
 if FieldName="СканГЭК" or FieldName="СканГЭК2":
    PutVariableL(bln+".Auto",True);
    PutVariableS(bln+".hСканГЭК",if(FieldName="СканГЭК","СканГЭК","СканГЭК2"));
 fi;
 ExecuteProc(bln+".Вызвать",False,ToDay,"РПО_ИЗВЕЩЕНИЯ_ИСХ",UKey[Iter],"Извещение",НомИзв[Iter],ДатИзв[Iter],"Подтверждение",True,ГЭК2Rec[Iter]);
 РасчетГЭК2(Iter);
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnПодтвер_OnClick(Sender: String);
var Iter,n2,n,p,OWA,OA,nr2:I;
var isNet:L;
 isNet=Раб.Бюджет2005.Сетевая;
 УдалитьПустыеСтроки;
 ClearVariable(Ok);
 ClearVariable(Статус);
 if Ukey[1]=nil: Message("Нет данных для обработки",mtError); Template.Field="НомИзв_"; Exit; fi;
 for Iter=1..Упр do
  if ДатИзв2[Iter]=1.1.100: Message("Введите дату подтверждения",mtError); Template.Field="ДатИзв2"; Template.Frame=Iter; Exit; fi;
  if ДатИзв2[Iter]<ДатИзв[Iter]: Message("Дата подтверждения не может быть ранее даты извщения",mtError); Template.Field="ДатИзв2";  Template.Frame=Iter; Exit; fi;
 od;
 p=0;
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","");
 Try
  ShowProgress(Упр,"Подтверждение извещений....");
  BeginChanging(OWA);
  Try
   for Iter=1..Упр do
    ProgressPos(Iter);
    if Round(СумИзв[Iter],2)=Round(СумИзв2[Iter],2) or Round(СумИзв2[Iter],2)=0:
       p=p+1;
       Ok[p]=Ukey[Iter];
       n=GetRecordNumber(OWA,Ukey[Iter]);
       if n=0: Message("Извещение с номером "+НомИзв[Iter]+" не найдено в базе данных",mtError); Template.Field="НомИзв_"; Template.Frame=Iter; Exit; fi;
       if Iter=1: OA=OpenArray(OWA,n,"ПОЗИЦИИ",""); fi;
       n=PutFieldN(OWA,n,"СУММАПОЛУЧ",СумИзв2[Iter]);
       n=PutFieldD(OWA,n,"ДВОЗВРАТ2",ДатИзв2[Iter]);
       n=PutFieldL(OWA,n,"ВОЗВРАТ2",True);
       Nr2=Records(OA);
       for n2=1..Nr2 do
	if Round(СумИзв2[Iter],2)=0:
	   n2=PutFieldN(OA,n2,"ПОЛУЧСУМ",0);
	  else
	   n2=PutFieldN(OA,n2,"ПОЛУЧСУМ",GetFieldN(OA,n2,"СУМ"));
	fi;
       od;
       if isNet and fЗакрытьДок:
	  n=PutFieldL(OWA,n,"ClosedModFob",fЗакрытьДок);
       fi;
      else
       Статус[Iter]="Сумма подтверждения<>сумме извещения. Подтвердите извещение вручную.";
    fi;
   od;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 Message("Успешно подтверждено извещений "+Str(p)+" из "+Str(Упр));
 p=1;
 While Ok[p]<>nil do
  Iter=SearchInArray(Ukey,Ok[p]);
  DeleteFrame(Упр,Iter);
  p=p+1;
 od;
 НеПустаяСтрока;
 for p=1..30 do
  InsertFrame(Упр,Упр+1);
 od;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
var n:i;
 НеПустаяСтрока;
 for n=Упр..30 do
  InsertFrame(Упр,Упр+1);
 od;
end;

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


Конец


