-- Шаблон создан мастером бланков
-- 03.06.2002 11:48:17
--
БланкСШаблоном "Удостоверение личности", Редактор Сотр_Документ;

K :String = "...";

Func ПриВхСерНомер(S:S;I:I):Logical;
 If ВИДДОКУМЕНТА=Nil:
   Message("Сначала выберите вид документа!");
   Шаблон.Поле="ВидДокумента.Вид";
   ^False;
 | True:
  ^True;
 Fi;
Cnuf;

Func ЛатЦифра(Simb:S):Logical;
If Simb='I' Or Simb='V' Or Simb='X' Or Simb='L' Or Simb='C' Or Simb='1' Or Simb='У' Or Simb='Х' Or Simb='Л' Or Simb='С':
  ^True;
| True:
  Message("Допускаются заглавные символы:латинские(I,V,X,L,C) или руские(1,У,Х,Л,С)!");
  ^False;
Fi;
Cnuf;

Func РусБуква(Simb:S):Logical;
 If Simb>='А' And Simb<='Я':
  ^True;
 | True:
   Message("Допускаются только буквы русского алфавита!");
   ^False;
 Fi;
Cnuf;

Func АрабЦифра(Simb:S):Logical;
If Simb>='0' And Simb<='9':
  ^True;
| True:
   Message("Допускаются только цифры!");

Fi;
Cnuf;

Func ПриПровДокументДата(S:S; I:I; D:D):Logical;
--  Паспорт="серия:"+Серия+" N"+Номер+" выдан "+DateToString(D)+"г. "+Кем;
  ^True;
Cnuf;

Func ПриПровДокументСтрока(S:S; I:I; St:S):Logical;
 Var Len,Len1,j,n:Integer;
 Var SerLat,SerRus,Simb:String;
 Var FlSimb:Logical;
  FlSimB=True;
  Len=Length(St);
  If Len=0:
   ^True;
  Fi;
  If S="Серия":
    If ВИДДОКУМЕНТА.Код="05" Or ВИДДОКУМЕНТА.Код="10" Or ВИДДОКУМЕНТА.Код="11" Or ВИДДОКУМЕНТА.Код="12" Or ВИДДОКУМЕНТА.Код="13" Or ВИДДОКУМЕНТА.Код="14" Or ВИДДОКУМЕНТА.Код="91" Or ВИДДОКУМЕНТА.Код="23":
      If Len<26:
	 ^True;
      | True:
	Message("Суммарное количество символов (серия + номер) не может быть больше 25!");
	^False;
      Fi;
    | ВИДДОКУМЕНТА.Код="01" Or ВИДДОКУМЕНТА.Код="03":
      N=Pos('-',St);
      If N=0:
	Message('В серии данного вида документа должен быть "-"!');
	^False;
      | True:
	SerLat=Up(Substr(St,1,N-1));
	For j=1..N-1 Do
	  Simb=Substr(SerLat,J,1);
	  FlSimb=ЛатЦифра(Simb);
	  If Not FlSimb: Break;Fi;
	Od;
	If Not FlSimb: ^False;Fi;
	 SerRus=Up(Substr(St,N+1,Len));
	 N=Length(SerRus);
	 If N<>2:
	   Message('В данном виде документа после знака "-" должно быть 2 руские буквы!');
	   ^False;
	 | True:
	    For J=1..N Do
	      Simb=Substr(SerRus,j,1);
	      FlSimb=РусБуква(Simb);
	      If Not FlSimb: Break;Fi;
	    Od;
	    If Not FlSimb: ^False;Fi;
	 Fi;
      Fi;
    | ВИДДОКУМЕНТА.Код="21":
      N=Pos(' ',St);
      If N=0:
	Message('В серии данного вида документа должен быть пробел!');
	^False;
      | True:
	SerLat=Up(Substr(St,1,N-1));
	Len1=Length(SerLat);
	If Len1<>2:
	  Message('В серии данного вида документа до пробела должно быть 2 цифры!');
	  ^False;
	| True:
	  For j=1..2 Do
	    Simb=Substr(SerLat,J,1);
	    FlSimb=АрабЦифра(Simb);
	    If Not FlSimb: Break;Fi;
	  Od;
	  If Not FlSimb: ^False;Fi;
	Fi;
	 SerRus=Up(Substr(St,N+1,Len));
	 N=Length(SerRus);
	 If N<>2:
	   Message('В данном виде документа после знака пробел должно быть 2 цифры!');
	   ^False;
	 | True:
	   For j=1..2 Do
	     Simb=Substr(SerRus,J,1);
	     FlSimb=АрабЦифра(Simb);
	     If Not FlSimb: Break;Fi;
	   Od;
	   If Not FlSimb: ^False;Fi;
	 Fi;
      Fi;
    | ВИДДОКУМЕНТА.Код="02" Or ВИДДОКУМЕНТА.Код="22":
      If Len<>2:
	 Message('В данном виде документа серия состоит из 2 цифр!');
	^False;
      | True:
	For j=1..2 Do
	  Simb=Substr(St,J,1);
	  FlSimb=АрабЦифра(Simb);
	  If Not FlSimb: Break;Fi;
	Od;
	If Not FlSimb: ^False;Fi;
      Fi;
    | ВИДДОКУМЕНТА.Код="04" Or ВИДДОКУМЕНТА.Код="06" Or ВИДДОКУМЕНТА.Код="07" Or ВИДДОКУМЕНТА.Код="26" Or ВИДДОКУМЕНТА.Код="27":
      If Len<>2:
	 Message('В данном виде документа серия состоит из 2 русских букв!');
	^False;
      | True:
	For j=1..2 Do
	  Simb=Up(Substr(St,J,1));
	  FlSimb=РусБуква(Simb);
	  If Not FlSimb: Break;Fi;
	Od;
	If Not FlSimb: ^False;Fi;
      Fi;
    Fi;
--    Паспорт="серия:"+St+" N"+Номер+" выдан "+DateToString(ДатаВыдачи)+"г. "+Кем;
  |  S="Номер":
     If Len>25:
       Message("Для любых видов документов количество символов номера не более 25!");
     | True:
       If ВИДДОКУМЕНТА.Код="01" Or ВИДДОКУМЕНТА.Код="03" Or ВИДДОКУМЕНТА.Код="04" Or ВИДДОКУМЕНТА.Код="06" Or ВИДДОКУМЕНТА.Код="21":
	  If (Len <>6 And ВИДДОКУМЕНТА.Код<>"21") Or (ВИДДОКУМЕНТА.Код="21" And (Len<6 Or Len>7)):
	    Message("В данном виде документа в номере должно быть 6(Паспорт России допускает 7) цифр!");
	    ^False;
	  | True:
	    For j=1..Len Do
	      Simb=Up(Substr(St,J,1));
	      FlSimb=АрабЦифра(Simb);
	      If Not FlSimb: Break;Fi;
	    Od;
	    If Not FlSimb: ^False;Fi;
	  Fi;
       | ВИДДОКУМЕНТА.Код="02"	Or ВИДДОКУМЕНТА.Код="07" Or ВИДДОКУМЕНТА.Код="26" Or ВИДДОКУМЕНТА.Код="27":
	  If Len <6 Or Len>7 :
	    Message("В данном виде документа в номере должно быть 6-7 цифр!");
	    ^False;
	  | True:
	    For j=1..Len Do
	      Simb=Up(Substr(St,J,1));
	      FlSimb=АрабЦифра(Simb);
	      If Not FlSimb: Break;Fi;
	    Od;
	    If Not FlSimb: ^False;Fi;
	  Fi;
       | ВИДДОКУМЕНТА.Код="22":
	  If Len <>7 :
	    Message("В данном виде документа в номере должно быть 7 цифр!");
	    ^False;
	  | True:
	    For j=1..Len Do
	      Simb=Up(Substr(St,J,1));
	      FlSimb=АрабЦифра(Simb);
	      If Not FlSimb: Break;Fi;
	    Od;
	    If Not FlSimb: ^False;Fi;
	  Fi;
       Fi;
     Fi;
--    Паспорт="серия:"+Серия+" N"+St+" выдан "+DateToString(ДатаВыдачи)+"г. "+Кем;
--  |  S="Кем":
--    Паспорт="серия:"+Серия+" N"+Номер+" выдан "+DateToString(ДатаВыдачи)+"г. "+St;
  Fi;
  ^True;
Cnuf;

Proc ПриВыхСерии(S:S;I:I);
 Var j,n:Integer;
 Var SerLat,SerRus,Simb:String;
 If Серия<>"":
   If ВИДДОКУМЕНТА.Код="01" Or ВИДДОКУМЕНТА.Код="03" Or ВИДДОКУМЕНТА.Код="04" Or ВИДДОКУМЕНТА.Код="06" Or ВИДДОКУМЕНТА.Код="07" Or ВИДДОКУМЕНТА.Код="26" Or ВИДДОКУМЕНТА.Код="27":
      Серия=Up(Серия);
      If ВИДДОКУМЕНТА.Код="01" Or ВИДДОКУМЕНТА.Код="03":
	 N=Pos("-",Серия);
	 SerLat=Substr(Серия,1,N-1);
	 SerRus=Substr(Серия,N,Length(Серия));
	 For j=1..N-1 Do
	   Simb=Substr(SerLat,j,1);
	   if Simb="1":Simb="I";
	   |  Simb="У":Simb="V";
	   |  Simb="Х":Simb="X";
	   |  Simb="Л":Simb="L";
	   |  Simb="С":Simb="C";
	   fi;
	    If j=1: SerLat=Simb + substr(SerLat,2,n-1);
	    | true:   SerLat=substr(SerLat,1,j-1)+ Simb + substr(SerLat,j+1,n-1);
	    Fi;
	  OD;
	  Серия=SerLat+SerRus;
      Fi;
   Fi;
 Fi;
Corp;

Func ВызовКалендаря(S:S;I:I):Logical;
Var TempDate :Date;

  If S="K":
    TempDate = Calendar(ДатаВыдачи);
    If TempDate<>1.1.1000 And TempDate<>ДатаВыдачи: ДатаВыдачи=TempDate; Fi;
  Fi;
  ^False;
Cnuf;

Func ПриПроверке:Logical;
--  Паспорт="серия:"+Серия+" N"+Номер+" выдан "+DateToString(ДатаВыдачи)+"г. "+Кем;
  ^True;
Cnuf;

Proc кнОК(S:String);
  EditorApply;	Close;
Corp;

Proc кнОтмена(S:String);
  EditorCancel; Close;
Corp;

Proc кнПомощь(S:String);
  Раб.Сис.ShowHelpContext(221);
Corp;

Конец
