-- Шаблон создан мастером бланков
-- 03.03.2012 15:15:36
--
БланкСШаблоном "Сводка изменения документа";

var Prev:Record;
var Cur:Record;
var Crd:S;

var Prev_:S;
var Cur_:S;

var Упр:I;
var пп[]:i=$;
var Поле[]:S;
var Тип[]:S;
var Наим[]:S;
var ЗначПред[]:S;  
var ЗначТек[]:S;
var Разница[]:S;
var Key[]:S;

var Buf[]:S;
var Buf1[]:S;
var Buf2[]:S;

var crdДоговор        :S=Раб.Договор.crdДоговор;
var crdДоговор_Признак:S=Раб.Договор.crdДоговор_Признак;
var crdДоговор_КБК    :S=Раб.Договор.crdДоговор_КБК;
var crdДоговор_ТМЦ    :S=Раб.Договор.crdДоговор_ТМЦ;

var Run:L;
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Key);
 ClearVariable(Поле);
 ClearVariable(Тип);
 ClearVariable(Наим);
 ClearVariable(ЗначПред);
 ClearVariable(ЗначТек);
 ClearVariable(Разница);
end;

Proc Расчет;
var OWA1,OWA2,n,nn,Тип_,vi1,vi2:I;
var vn1,vn2:N;
var vb1,vb2:L;
var vs1,vs2:S;
var vd1,vd2:D;
var vr1,vr2:Record;
var Flag:L;
 ClearVariable(Buf);
 Очистить;
 if Crd="": Crd=crdДоговор; fi;
 nn=GetCardFileFields(Crd,Buf,mtlAll-mtlTimed-mtlSubTab);
 OWA1=OpenWorkArea(Crd,"","UKey="+RecordTOString(Prev));
 Try
  if Records(OWA1)=0: Message("Запись "+RecordTOString(Prev)+" не найдена",mtError); Exit; fi;
  Prev_=GetFieldS(OWA1,1,"НаимДок.Наим")+" №"+GetFieldS(OWA1,1,"НомерДок")+" от "+DateToString(GetFieldD(OWA1,1,"ДатаДок"))+", запись "+RecordToString(Prev);
  OWA2=OpenWorkArea(Crd,"","UKey="+RecordTOString(Cur));
  Try
   if Records(OWA2)=0: Message("Запись "+RecordTOString(Cur)+" не найдена",mtError); Exit; fi;
   Cur_=GetFieldS(OWA2,1,"НаимДок.Наим")+" №"+GetFieldS(OWA2,1,"НомерДок")+" от "+DateToString(GetFieldD(OWA2,1,"ДатаДок"))+", запись "+RecordToString(Cur);
   for n=1..nn do
    Flag=False;
    Тип_=GetCardFileFieldType(Crd,Buf[n]);
    if Тип_=mtlREAL: 
       vn1=GetFieldN(OWA1,1,Buf[n]);
       vn2=GetFieldN(OWA2,1,Buf[n]);
       if not vn1=vn2:
          InsertFrame(Упр,Упр+1);
          Поле[Упр]=Buf[n];
          Тип[Упр]="вещественное поле";
          ЗначПред[Упр]=Format("%.2N",vn1);
          ЗначТек[Упр]=Format("%.2N",vn2);
          Разница[Упр]=if(vn2-vn1>0,"+","")+Format("%.2N",vn2-vn1);
          Flag=True;
       fi;
      |Тип_=mtlINTEGER: 
       vi1=GetFieldI(OWA1,1,Buf[n]);
       vi2=GetFieldI(OWA2,1,Buf[n]);
       if not vi1=vi2:
          InsertFrame(Упр,Упр+1);
          Поле[Упр]=Buf[n];
          Тип[Упр]="целое поле";
          ЗначПред[Упр]=Str(vi1);
          ЗначТек[Упр]=Str(vi2);
          Разница[Упр]=if(vi2-vi1>0,"+","")+Str(vi2-vi1);
          Flag=True;
       fi;
      |Тип_=mtlBOOLEAN: 
       vb1=GetFieldL(OWA1,1,Buf[n]);
       vb2=GetFieldL(OWA2,1,Buf[n]);
       if not vb1=vb2:
          InsertFrame(Упр,Упр+1);
          Поле[Упр]=Buf[n];
          Тип[Упр]="логическое поле";
          ЗначПред[Упр]=if(vb1,"Истина","Ложь");
          ЗначТек[Упр]=if(vb2,"Истина","Ложь");
          Flag=True;
       fi;
      |Тип_=mtlSTRING: 
       vs1=GetFieldS(OWA1,1,Buf[n]);
       vs2=GetFieldS(OWA2,1,Buf[n]);
       if not vs1=vs2:
          InsertFrame(Упр,Упр+1);
          Поле[Упр]=Buf[n];
          Тип[Упр]="строковое поле";
          ЗначПред[Упр]=vs1;
          ЗначТек[Упр]=vs2;
          Flag=True;
       fi;
      |Тип_=mtlDATE: 
       vd1=GetFieldD(OWA1,1,Buf[n]);
       vd2=GetFieldD(OWA2,1,Buf[n]);
       if not vd1=vd2:
          InsertFrame(Упр,Упр+1);
          Поле[Упр]=Buf[n];
          Тип[Упр]="поле даты";
          ЗначПред[Упр]=DateToString(vd1);
          ЗначТек[Упр]=DateToString(vd2);
          Разница[Упр]=if(not vd1=1.1.100 and not vd2=1.1.100,if(vd2>vd1,"+","")+Str(vd2-vd1),"");
          Flag=True;
       fi;
      |Тип_=mtlREF: 
       vr1=GetFieldR(OWA1,1,Buf[n]);
       vr2=GetFieldR(OWA2,1,Buf[n]);
       if not vr1=vr2:
          InsertFrame(Упр,Упр+1);
          Поле[Упр]=Buf[n];
          Тип[Упр]="ссылочное поле";
          ЗначПред[Упр]=RecordToString(vr1);
          ЗначТек[Упр]=RecordToString(vr2);
          Flag=True;
       fi;
    fi;
    if Flag:
       Наим[Упр]=GetCardFileFieldComment(Crd,Buf[n]);
    fi;
   od;
  Finally
   CloseWorkArea(OWA2);
  end;
 Finally
  CloseWorkArea(OWA1);
 end;
 if Упр=0:
    Message("Расхождений не найдено");
   else
    Message("Расчет завершен");
 fi;
end;

Proc Сравнить (aCrd:S; aPrev:Record; aCur:Record);
 Раб.Вспом.Договор_Сводка_Изм.Crd=aCrd;
 Раб.Вспом.Договор_Сводка_Изм.Prev=aPrev;
 Раб.Вспом.Договор_Сводка_Изм.Cur=aCur;
 Раб.Вспом.Договор_Сводка_Изм.Run=True;
 OpenBlank("Раб.Вспом.Договор_Сводка_Изм",True);
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Док_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Crd="": Crd=crdДоговор; fi;
 Rec=OpenCardFile(Crd);
 if not Rec=nil:
    PutVariableS(FieldName,GetCardFieldS(Crd,Rec,"НаимДок.Наим")+" №"+GetCardFieldS(Crd,Rec,"НомерДок")+" от "+DateToString(GetCardFieldD(Crd,Rec,"ДатаДок"))+", запись "+RecordToString(Rec));
    FieldName=SubStr(FieldName,1,Length(FieldName)-1);
    PutVariableR(FieldName,Rec);
 fi;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnСравнить_OnClick(Sender: String);
 if prev=nil or prev_="": Message("Выберите редакцию документа",mtError); Template.Field="prev_"; exit; fi;
 if cur=nil or cur_="": Message("Выберите редакцию документа",mtError); Template.Field="cur_"; exit; fi;
 Расчет;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 if Run:
    Run=False;
    Расчет;
 fi;
end;
--Обработчики событий шаблона -----
--

Конец
