-- Шаблон создан мастером бланков
-- 09.06.2009 15:06:05
--
БланкСШаблоном "Семафор";

var Val_I:I;
var Val_N:N;
var Val_S:S;
var Val_L:L;
var Val_D:D;

var cUser:S;
var mUser:S;

var Msg1:S;
var Msg2:S;

var SelfCrd:S="РПО_СТАТУС";

var TimeOut:I=600; --10 минут
--
--Процедуры и функции -------------
Func Установить(aID:S; aI:I; aN:N; aS:S; aL:L; aD:D; aTimeOut:I):I; -- ^1 установлен ^2 установлен (старый просрочен) ^0 ошибка общая ^-1 не задано имя семафора ^-2 ошибка транзакции ^-99 семафор уже установлен
var OWA,nr,n,mto,state:I;
var mDate:d;
var UKey:S;
 if aID="": ^-1; fi;
 aID="СЕМАФОР="+aID;
 OWA=OpenWorkArea(SelfCrd,"","ID='"+aID+"'");
 Try
  nr=Records(OWA);
  state=1;
  if not nr=0:
     state=-99;
     UKey=RecordToString(GetRecordKey(OWA,nr));
     mDate=GetFieldD(OWA,nr,"UpdateTime");
     if ToDay-mDate=0:
	mto=Time-if(aTimeOut=0,TimeOut,aTimeOut);
	SetFilter(OWA,"UKey="+UKey+" and UpdateTimeSec>="+Str(mto));
	if Records(OWA)=0:
	   SetFilter(OWA,"UKey="+UKey);
	   State=2; --просрочен
	fi;
       else
	State=2; --просрочен
     fi;
     if state<0: ^state; fi;
  fi;
  BeginChanging(OWA,False);
  Try
   DeleteAllRecords(OWA);
   n=InsertRecord(OWA);
   n=PutFieldS(OWA,n,"ID",aID);
   n=PutFieldI(OWA,n,"Val_I",aI);
   n=PutFieldN(OWA,n,"Val_N",aN);
   n=PutFieldS(OWA,n,"Val_S",aS);
   n=PutFieldL(OWA,n,"Val_L",aL);
   n=PutFieldD(OWA,n,"Val_D",aD);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   ^-2;
  end;
  ^state;
 Finally
  CloseWorkArea(OWA);
 end;
 ^0;
end;

Func Обновить(aForce:L; aID:S; aI:I; aN:N; aS:S; aL:L; aD:D):I; -- ^1 установлен ^0 ошибка общая ^-1 не задано имя семафора ^-2 ошибка транзакции ^-98 семафор не найден
var OWA,n,nr:I;
 if aID="": ^-1; fi;
 aID="СЕМАФОР="+aID;
 OWA=OpenWorkArea(SelfCrd,"","ID='"+aID+"'"+if(aForce or GetScheme="",""," and CREATEDUSER='"+UserName(AliasName(SelfCrd))+"'"));
 Try
  nr=Records(OWA);
  if nr=0: ^-98; fi;
  BeginChanging(OWA,False);
  Try
   n=PutFieldI(OWA,nr,"Val_I",aI);
   n=PutFieldN(OWA,nr,"Val_N",aN);
   n=PutFieldS(OWA,nr,"Val_S",aS);
   n=PutFieldL(OWA,nr,"Val_L",aL);
   n=PutFieldD(OWA,nr,"Val_D",aD);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   ^-2;
  end;
  ^1;
 Finally
  CloseWorkArea(OWA);
 end;
 ^0;
end;

Func Статус(aID:S; aTimeOut:I):I;  -- ^0 не установлен ^1 установлен -1 ошибка общая -2 не задано имя семафора
var OWA,nr,mto:I;
var Ukey:String;
var mDate:d;
 if aID="": ^-1; fi;
 aID="СЕМАФОР="+aID;
 Try
  OWA=OpenWorkArea(SelfCrd,"","ID='"+aID+"'");
  Try
   nr=Records(OWA);
   if nr=0:
      ^0;
     else
      UKey=RecordToString(GetRecordKey(OWA,nr));
      mDate=GetFieldD(OWA,nr,"UpdateTime");
      if ToDay-mDate=0:
	 mto=Time-if(aTimeOut=0,TimeOut,aTimeOut);
	 SetFilter(OWA,"UKey="+UKey+" and UpdateTimeSec>="+Str(mto));
	 if Records(OWA)=0:
	    ^0;
	 fi;
	else
	 ^0; --просрочен
      fi;
      Val_I=GetFieldI(OWA,nr,"Val_I");
      Val_N=GetFieldN(OWA,nr,"Val_N");
      Val_S=GetFieldS(OWA,nr,"Val_S");
      Val_L=GetFieldL(OWA,nr,"Val_L");
      Val_D=GetFieldD(OWA,nr,"Val_D");
      if GetScheme="":
	 cUser="";
	 mUser="";
	else
	 cUser=GetFieldS(OWA,nr,"CREATEDUSER");
	 mUser=GetFieldS(OWA,nr,"MODIFIEDUSER");
      fi;
      ^1;
   fi;
  Finally
   CloseWorkArea(OWA);
  end;
 Except
 end;
 ^-1;
end;

Func Снять(aID:S; aForce:L):I; -- ^1 снят ^2 неайден ^0 ошибка общая ^-1 не задано имя семафора ^-2 ошибка транзакции
var OWA:I;
 if aID="": ^-1; fi;
 aID="СЕМАФОР="+aID;
 OWA=OpenWorkArea(SelfCrd,"","ID='"+aID+"'"+if(aForce or GetScheme="",""," and CREATEDUSER='"+UserName(AliasName(SelfCrd))+"'"));
 Try
  if Records(OWA)=0: ^2; fi;
  BeginChanging(OWA,False);
  Try
   DeleteAllRecords(OWA);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   ^-2;
  end;
  ^1;
 Finally
  CloseWorkArea(OWA);
 end;
 ^0;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
--Обработчики событий шаблона -----
--


Конец
