-- Шаблон создан мастером бланков
-- 20.10.2003 16:24:56
--
БланкСШаблоном "Виды денежных документов", Редактор РПО_ДенДок_Вид;

var FlagEdit:L=[False];

var Признак_:S=Признак;
var НоваяЗапись:L=(CurrentState=crdusInserted);
var ЭтоГруппа  :L;
var ЭтоНеГруппа:L=if(ЭтоГруппа,False,True);
var Заголовок  :S=if(ЭтоГруппа,'Группа денежных документов (бланков строгой отчетности)','Денежный документ (Бланк строгой отчетности)');
var МасНачЗнач[]:S;
var МасИзменений[]:I;
var СписокПолей: S;

var SelfCrd:S="РПО_ДЕНДОК_ВИД";
var FieldSign:S="ПРИЗНАК";
--
--Процедуры и функции -------------   
Proc ПоУмолчанию;
var Родитель:Integer;
 if ПРИЗНАК='' : -- иначе это дубль записи
    if RecordExists(SelfCrd, GroupDoc) : -- считываем значения из записи группы, в которой создали новую запись
       Родитель=OpenWorkArea(SelfCrd,'','Ukey='+RecordToString(GroupDoc));
       try
	if Records(Родитель)>0:
	   КОД=GetFieldS(Родитель,1,'Код');
	   ЕдИзм=GetFieldS(Родитель,1,'ЕдИзм');
	   ТОЧ=GetFieldI(Родитель,1,'ТОЧ');
	fi; -- if Records(Родитель) > 0
       finally
	CloseWorkArea(Родитель);
       end;
    fi;
 fi;
 ПРИЗНАК=Раб.Предм.PtrStr(Current,5);
end;

func НайтиИзменения: Integer;
  СписокПолей='';
  ClearVariable(МасИзменений);
  if ЭтоГруппа:
    if МасНачЗнач[1]<>Код: СписокПолей='Код'; МасИзменений[1]=1; fi;
    if МасНачЗнач[2]<>ЕдИзм: СписокПолей=СписокПолей+if(СписокПолей<>'',', Единица измерения','Единица измерения'); МасИзменений[2]=1; fi;
    if МасНачЗнач[3]<>Str(Точ): СписокПолей=СписокПолей+if(СписокПолей<>'',', Точность изм.','Точность изм.'); МасИзменений[3]=1; fi;
  fi;
  ^SumOfArray(МасИзменений,3);
end;  --  func НайтиИзменения: Integer;

proc ПрисвоениеЗначенийВнутриПодгруппы(DG: String);
var Родитель, РабОбл, КолЗаписей, j,  n: Integer;
 Родитель=OpenWorkArea(SelfCrd,'','UKey='+DG);
 РабОбл=OpenWorkArea(SelfCrd,'','GroupDoc='+DG);
 try
  КолЗаписей=Records(РабОбл);
  for j=1..КолЗаписей do
   Hint('Изменяется денежный документ: '+GetFieldS(РабОбл,j,'Признак'));
   try
    BeginChanging(РабОбл);
     if МасИзменений[1]=1: n=PutFieldS(РабОбл,j,'Код',Код); fi;
     if МасИзменений[2]=1: n=PutFieldS(РабОбл,j,'ЕдИзм',ЕдИзм); fi;
     if МасИзменений[3]=1: n=PutFieldI(РабОбл,j,'Точ', Точ); fi;
     Hint('Подождите, идет запись измененых карточек денежных документов на диск ...');
     EndChanging(РабОбл);
     if GetIsGroup(РабОбл,j) : -- если подгруппа - провести рекурсивные присвоения
	ПрисвоениеЗначенийВнутриПодгруппы(RecordToString(GetRecordKey(РабОбл, j)));
     fi;
   except
    CancelChanging(РабОбл);
    Raise;
   end;
  od;
 finally
  CloseWorkArea(Родитель);
  CloseWorkArea(РабОбл);
 end;
 Hint('');
end;

proc СохранитьДанные;
  if НайтиИзменения>0 :
    if EnqOkCancel('В карточку были внесены изменения в поля: ^M' + СписокПолей + '. ^M' +
		   'Изменить соответствующие значения у записей внутри группы?')=cmOk:
       ПрисвоениеЗначенийВнутриПодгруппы(RecordToString(Current));
    fi;
  fi;
end;

Func ПризнакИспользуется(Voc:S):S;
var tmp:S;
var OWA,Nr,n:I;
 RefreshAna;
 if ЭтоГруппа:
    OWA=OpenWorkArea(SelfCrd,"","GROUPDOC="+RecordToString(Current));
    Try
     Nr=Records(OWA);
     for n=1..Nr do
      tmp=GetFieldS(OWA,n,FieldSign);
      Hint("Проверка группы '"+Признак+"', "+tmp);
      tmp=Раб.Бюджет2005.КартПризнакИспользуется(SelfCrd,FieldSign,GetRecordKey(OWA,n),Voc);
      if not tmp="": ^tmp; fi;
     od;
    Finally
     CloseWorkArea(OWA);
    end;
   else
    tmp=Раб.Бюджет2005.КартПризнакИспользуется(SelfCrd,FieldSign,Current,Voc);
    if not tmp="": ^tmp; fi;
 fi;
 ^"";
end;

Func ПризнакСуществует(Voc:S):L;
var w,ww:i;
var Призн_,tmp,GFN:S;
var Flag:L;
var Rec:Record;
 Призн_=GetVariableS(FieldSign);
 if IsHierArchical(SelfCrd):
    GFN=GetGroupFieldName(SelfCrd);
    Rec=GetVariableR(GFN);
    Flag=Rec=nil;
   else
    Flag=True;
 fi;
 ww=WordsCount(Voc,"|");
 for w=1..ww do
  if Flag:
     tmp=ExtractWord(w,Voc,"|")+"."+Призн_;
    else
     tmp=CardFileRecSign(SelfCrd,FieldSign,ExtractWord(w,Voc,"|"),Rec);
     tmp=tmp+"."+Призн_;
  fi;
  if not Name_A(tmp)=" " and not SignToRecord(tmp)=Current: Message("Признак '"+tmp+"' уже существует !",mtError); ^True; fi;
 od;
 ^False;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
func ПРИЗНАК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if not Признак="":
    tmp=ПризнакИспользуется("*");
    if not tmp="": Message("Код '"+tmp+"' используется в проводках."+Chr(13)+"Удаление невозможно!",mtError); ^False; fi;
 fi;
 FlagEdit=True;
 ^True;
end;

Func Признак_onValidate (Field:S; Iter:I; Value:S):L;
var R:L;
 FlagEdit=True;
 R=ValidSign(Value);
 if R=False: Раб.Бюджет.ПроверитьПризнак(Value); 
   else
    Признак=Value;
 fi;
 ^R;
end;

Proc Признак_onExit (Field:S; Iter:I);
var tmp:S;
 if FlagEdit: FlagEdit=False; Exit; fi;
 if not Признак="":
    tmp=ПризнакИспользуется("*");
    if not tmp="": Message("Код '"+tmp+"' используется в проводках."+Chr(13)+"Удаление невозможно!",mtError); Exit; fi;
 fi;
 Признак="";
end;

func Точ_OnVerify(FieldName: String; Iter: Integer; Value: Integer): Logical;
 if Value<0: Message('Нельзя указывать отрицательные числа.'); ^false; fi;
 ^True;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
proc btnСохранить_onClick(Sender: String);
  EditorApply;
  Close;
end;

proc btnОтмена_onClick (Sender: String);
  EditorCancel;
  Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
proc Template_onRead;
 ЭтоГруппа=IsCardGroup(SelfCrd,Current);
 if НоваяЗапись: ПоУмолчанию; fi;
 if ЭтоГруппа and НоваяЗапись=False:
    ClearVariable(МасНачЗнач);
    МасНачЗнач[1]=Код;
    МасНачЗнач[2]=ЕдИзм;
    МасНачЗнач[3]=Str(Точ);
 fi;
 Template.Field="Признак";
end;

func Template_onValidate: Logical;
 if Признак="": Message('Заполните поле "Признак"!'); Template.Field="Признак"; ^False; fi;
 if ПризнакСуществует("ДЕНДОК"): ^False; fi;
 if Номинал=0: Message("Заполните поле 'Номинал' !"); Template.Field="Номинал"; ^False; fi;
 Признак=UP(ПРИЗНАК);
 if ЭтоГруппа and НоваяЗапись=False: СохранитьДанные; fi;
 ^True;
end;

--Обработчики событий шаблона -----
--


Конец
