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

fЗакрытьДок: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 ДатДокОсн[]:D;
var Контр[]:S;
var УчетНом[]:S;
var НомСвед[]:S;
ПрефиксУчетНом:S;


var UKey[]:Record;

var FlagEdit:L;

var Buf[]:S;

var SelfCrd:S="РПО_СВЕД_БО";
var SelfBln:S="ДОКУМЕНТЫ.ЛБО.СВЕД_БО";

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

S1: Section;
S2: Section;
S3: Section;
--
--Процедуры и функции -------------         
Proc Оформление;
 S2.Cell(1,10,CellReadOnly,Тип=1); S2.Cell(1,10,CellBgColor,if(Тип=1,coTransparent,coAqua));
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]="": DeleteFrame(Упр,Iter); else Iter=Iter+1; fi;
 od;
 НеПустаяТаблица(1);
end;

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

Func УчетНомСущ (aУчетНом:S; aНомСвед:S):I;
var OWA,nr:I;
var tmp,v:S;
 OWA=OpenWorkArea(SelfCrd,"","РегНомер='"+aУчетНом+"' and not НомерДок='"+aНомСвед+"'");
 Try
  nr=Records(OWA);
  if not nr=0:
     if GetFieldI(OWA,nr,"ТипДок")=1:
        tmp="Заявка на изменение №";
        if GetFieldI(OWA,nr,"Изм_ФорматНомер")=0:
           tmp=tmp+GetFieldS(OWA,nr,"Изм_НомерДок")+" от "+DateToString(GetFieldD(OWA,nr,"Изм_ДатаДок"));
          else
           tmp=tmp+GetFieldS(OWA,nr,"Изм_Префикс")+GetFieldS(OWA,nr,"Изм_Сепаратор")+GetFieldS(OWA,nr,"Изм_НомерДок")+" от "+DateToString(GetFieldD(OWA,nr,"Изм_ДатаДок"));
        fi;
       else
        tmp=if(GetFieldI(OWA,nr,"ТипДок")=2,"Заявка на перерегистрацию №","Сведения №");
        if GetFieldI(OWA,nr,"ФорматНомер")=0:
           tmp=tmp+GetFieldS(OWA,nr,"НомерДок")+" от "+DateToString(GetFieldD(OWA,nr,"ДатаДок"));
          else
           tmp=tmp+GetFieldS(OWA,nr,"Префикс")+GetFieldS(OWA,nr,"Сепаратор")+GetFieldS(OWA,nr,"НомерДок")+" от "+DateToString(GetFieldD(OWA,nr,"ДатаДок"));
        fi;
     fi;
     v=GetFieldS(OWA,nr,"Осн_ДокВид");
     if v="":
        tmp=tmp+" (Исполнительный документ "+GetFieldS(OWA,nr,"Исп_ДокНом")+" от "+DateToString(GetFieldD(OWA,nr,"Исп_ДокДат"))+")";
       else
        v=if(v="1","Государственный контракт",GetFieldS(OWA,nr,"Осн_ДокНаим"));
        if v="": v="Иной договор"; fi;
        tmp=tmp+" ("+v+"№ "+GetFieldS(OWA,nr,"Осн_ДокНом")+" от "+DateToString(GetFieldD(OWA,nr,"Осн_ДокДат"))+")";
     fi;
     ^EnqOkCancel("Учетный номер "+aУчетНом+" уже присвоен другому документу:^M"+tmp+"^MИгнорировать данное предупреждение ?",mtWarning);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^cmOk;
end;

Proc ЗагрузитьДок(Rec: Record; Iter:I);
var OWA:I;
var Осн_ДокВид:S;
 OWA=OpenWorkArea(SelfCrd,"","Ukey="+RecordToString(Rec));
 Try
  if Тип=1:
     НомДок[Iter]=GetFieldS(OWA,1,"Изм_НомерДок");
     ДатДок[Iter]=GetFieldD(OWA,1,"Изм_ДатаДок");
     if not GetFieldI(OWA,1,"Изм_ФорматНомер")=0:
        НомДок[Iter]=GetFieldS(OWA,1,"Изм_Префикс")+GetFieldS(OWA,1,"Изм_Сепаратор")+НомДок[Iter];
     fi;
    else
     НомДок[Iter]=GetFieldS(OWA,1,"НомерДок");
     ДатДок[Iter]=GetFieldD(OWA,1,"ДатаДок");
     if not GetFieldI(OWA,1,"ФорматНомер")=0:
        НомДок[Iter]=GetFieldS(OWA,1,"Префикс")+GetFieldS(OWA,1,"Сепаратор")+НомДок[Iter];
     fi;
  fi;
  Осн_ДокВид=GetFieldS(OWA,1,"Осн_ДокВид");
  if Осн_ДокВид="":
     НомДокОсн[Iter]="Исполнительный документ "+GetFieldS(OWA,1,"Исп_ДокНом");
     ДатДокОсн[Iter]=GetFieldD(OWA,1,"Исп_ДокДат");
     СумДок[Iter]=GetFieldN(OWA,1,"Исп_ДокСум");
    else
     НомДокОсн[Iter]=if(Осн_ДокВид="1","Государственный контракт ",GetFieldS(OWA,1,"Осн_ДокНаим")+" ")+GetFieldS(OWA,1,"Осн_ДокНом");
     ДатДокОсн[Iter]=GetFieldD(OWA,1,"Осн_ДокДат");
     СумДок[Iter]=GetFieldN(OWA,1,"Осн_ДокСум");
  fi;
  Контр[Iter]=GetFieldS(OWA,1,"РеквП.ПолнИмя");
  if not Тип=0:
     УчетНом[Iter]=GetFieldS(OWA,1,"РегНомер");
  fi;
  НомСвед[Iter]=GetFieldS(OWA,1,"НомерДок");
  Ukey[Iter]=Rec;
 Finally
  CloseWorkArea(OWA);
 end;
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
      BeginChanging(OWA,False);
      Try
       if Тип=0:
          n=PutFieldS(OWA,n,"РегНомер",УчетНом[Iter]);
       fi;
       n=PutFieldD(OWA,n,"РегДата",ДатБанк);
       n=PutFieldL(OWA,n,"Рег",True);
       if isNet and fЗакрытьДок:
          n=PutFieldL(OWA,n,"ClosedModFob",True);
       fi;
       EndChanging(OWA);
       p=p+1;
      Except
       CancelChanging(OWA);
       Raise;
      end;
      if isNet and fЗакрытьДок and not GetFieldR(OWA,n,"Договор")=nil: Раб.Договор.УстанCMF(SelfCrd,"РПО_ДОГОВОР",GetFieldR(OWA,n,"Договор"),True,True);
        |isNet and fЗакрытьДок and not GetFieldR(OWA,n,"ДО")=nil: Раб.Договор.УстанCMF(SelfCrd,"РПО_ДО",GetFieldR(OWA,n,"ДО"),True,True);
      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;

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 ff:S;
var Rec: Record;
 if not Value="":
    if Тип=1:
       ff="(ТипДок=1 or overrideТипДок='1') and Учитывать and Изм_НомерДок='"+Value+"' and Изм_ДатаДок>=1.1."+Str(ОтчГод)+" and ДатаДок<1.1."+Str(ОтчГод+1);
      else
       ff="(ТипДок=0 or overrideТипДок='0' or ТипДок=2 or overrideТипДок='2') and Учитывать and НомерДок='"+Value+"' and ДатаДок>=1.1."+Str(ОтчГод)+" and ДатаДок<1.1."+Str(ОтчГод+1);
    fi;
    OWA=OpenWorkArea(SelfCrd,"",ff);
    Try
     Nr=Records(OWA);
     if Nr=0: Message("Документ с номером "+Value+" не найдена в базе данных",mtError); ^False;
       |Nr=1: Rec=GetRecordKey(OWA,1);
       |True: Message("В базе данных найдено несколько документов с номером "+Value+" , выберите необходимую в ручном режиме",mtWarning); Rec=OpenCardFile(SelfCrd,ff,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);
    Template.Field="УчетНом";
    Template.Frame=Iter;
  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]=1.1.100; Контр[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="--Учитывать and УчетФК and "+if(Тип=1,"(ТипДок=1 or overrideТипДок='1')","(ТипДок=0 or overrideТипДок='0' or ТипДок=2 or overrideТипДок='2')");
 if Тип=1:
    Rec=OpenCardFile("РПО_СВЕД_БО_ИЗМ",F,UKey[Iter],crdRecordOnly);
   else
    Rec=OpenCardFile(SelfCrd,F,UKey[Iter],crdRecordOnly);
 fi;
 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.Field="УчетНом";
 Template.Frame=Iter;
 FlagEdit=False;
 ^Cur;
end;

Func УчетНом_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var l:i;
 if not Value="":
    l=Length(Value);
    if l=16:
       ПрефиксУчетНом=SubStr(Value,1,11);
      |l<6 and not ПрефиксУчетНом="":
       Value=ПрефиксУчетНом+RepStr("0",5-l)+Value;
      |true:
    fi;
    if УчетНомСущ(Value,НомСвед[Iter])=cmCancel: ^False; fi;
 fi;
 Template.Field="НомДок_";
 Iter=Iter+1;
 Template.Frame=Iter;
 Return True;
end;

Proc УчетНом_OnExit(FieldName: String; Iter: Integer);
var l:i;
 l=Length(УчетНом[Iter]);
 if l>0 and l<6 and not ПрефиксУчетНом="":
    УчетНом[Iter]=ПрефиксУчетНом+RepStr("0",5-l)+УчетНом[Iter];
 fi;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnПодтвер_OnClick(Sender: String);
var Iter,p:I;
 УдалитьПустыеСтроки;
 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;
 od;
 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);
var tmp:S;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.ЛБО.СВЕД_БО",0,0,"",GetGUID):
    tmp=Раб.Настр.ВзятьЗначение("fCMF_onРег");
    if tmp="True":
       fЗакрытьДок=True;
       cbЗакрытьДок.State=fЗакрытьДок;
       cbЗакрытьДок.Enabled=False;
    fi;
 fi;
 НеПустаяТаблица(30);
end;

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


Конец


