-- Шаблон создан мастером бланков
-- 29.05.2002 17:59:01
--
БланкСШаблоном "Адрес сотрудника", Редактор Сотр_Адрес;

НоваяЗапись:L=(CurrentState=crdusInserted);

K	       :String = "...";
РайонСправ     :String = K;
ГородСправ     :String = K;
ПунктСправ     :String = K;
УлицаСправ     :String = K;
ДомСправ       :String = K;

CardNameKladr  :String = "Kladr";
CardNameDOMA   :String = "DOMA";
CardNameStreet :String = "Street";
CardNameSocr   :String = "SocrBase";

Func приВходе(S:String; It:Integer):Logical;
  If КодСтраны=Nil Or КодСтраны.Код="643": ^True;
  Else Message("Выбор региона возможен только для России"); КодРегиона=Nil; ^False; Fi;
Cnuf;

Proc приСчитывании;
  If НоваяЗапись:
    If Сотр<>Nil: Фактический = False; ПоПрописке = False; Почтовый = False; Fi;
  Fi;
Corp;

Func приПроверке:Logical;
  ^True;
Cnuf;

Func приПроверкеРег(S:String; It:Integer;Val:Record):Logical;
 If КОДРЕГИОНА<>Val:
    ГНИ="";	--ГНИ физ.лица
    UNO="";  --номер участка приема ИМНС
    ОКАТО="";
    РАЙОН="";
    ГОРОД="";
    НАСПУНКТ="";
    ИНДЕКС="";
    УЛИЦА="";
    ДОМ="";
    КОРПУС="";
    КВАРТИРА="";
    КОД_В_КЛАДР="";    --Код места жительства(рег.) в базе адресов МНС(KLADR)
    КОД_В_СТРИТ="";    --Код места жительства(рег.) в базе адресов МНС(STREET)
    КОД_В_ДОМА ="";    --Код места жительства(рег.) в базе адресов МНС(DOMA)

 Fi;
  ^True;
Cnuf;

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

  If S="K":
    TempDate = Calendar(Дата);
    If TempDate>1.1.1900 And TempDate<>Дата: Дата=TempDate; Fi;
  Fi;
  ^False;
Cnuf;

Func ПроверитьНаличиеКартотеки(NameCardFile :String; Сообщать:Logical):Logical;
Var W :Integer;

  Try
    W = OpenWorkArea(NameCardFile, "", "True=False");
    Try
    Finally
      CloseWorkArea(W);
    End;
    ^True;
  Except
    If Сообщать: Message("Картотека '"+NameCardFile+"' не найдена. Выбор возможен при наличии подсистемы 'Зарплата' или 'Кадры'"); Fi;
    ^False;
  End;
Cnuf;

Func Выбор(S :String; I :Integer):Logical;
Var Filter :String;
Var Rec    :Record;

  If S="РайонСправ" Or S="ГородСправ" Or S="ПунктСправ":
    If ПроверитьНаличиеКартотеки(CardNameKladr, True):
      If S="РайонСправ":
      --  Filter = "LEVEL=2"+If(КодРегиона<>Nil, " And SubStr(CODE, 1, 2)='"+КодРегиона.Код+"'", "");
	Filter = "LEVEL=2"+If(КодРегиона<>Nil, " And Match(CODE,'"+КодРегиона.Код+"???00000000')", "");
      |  S="ГородСправ":
	If Length(Район)=0 Or Length(Код_В_Кладр)=0:
	  Filter = "Level=3"+If(КодРегиона<>Nil, " And SubStr(CODE, 1, 2)='"+КодРегиона.Код+"'", "");
	Else
       --   Filter = "Level=3 And SubStr(CODE, 1, 5)='"+SubStr(Код_В_Кладр, 1, 5)+"'";
	  Filter = "Level=3 And Match(CODE,'"+SubStr(Код_В_Кладр, 1, 5)+"???00000')";
	Fi;
      |  S="ПунктСправ":
	If Length(Код_В_Кладр)=0:
	  Filter = "Level=4"+If(КодРегиона<>Nil, " And SubStr(CODE, 1, 2)='"+КодРегиона.Код+"'", "");
	Else
     --     Filter = "Level=4 And SubStr(CODE, 1, 8)='"+SubStr(Код_В_Кладр, 1, 8)+"'";
	  Filter = "Level=4 And Match(CODE,'"+SubStr(Код_В_Кладр, 1, 8)+"???00')";
	Fi;
      Fi;
      Rec = OpenCardFile(CardNameKladr, Filter);
      If Rec<>Nil:
	If S="РайонСправ":
	  Район     = GetCardFieldS(CardNameKladr, Rec, "Name")+" "+GetCardFieldS(CardNameKladr, Rec, "Socr");
	|  S="ГородСправ":
	  Город     = GetCardFieldS(CardNameKladr, Rec, "Name")+" "+GetCardFieldS(CardNameKladr, Rec, "Socr");
	|  S="ПунктСправ":
	  НасПункт  = GetCardFieldS(CardNameKladr, Rec, "Name")+" "+GetCardFieldS(CardNameKladr, Rec, "Socr");
	Fi;
	ГНИ	    = GetCardFieldS(CardNameKladr, Rec, "GNINMB");
	Uno	    = GetCardFieldS(CardNameKladr, Rec, "UNO");
	Индекс	    = GetCardFieldS(CardNameKladr, Rec, "Index");
	ОКАТО	    = GetCardFieldS(CardNameKladr, Rec, "OCATD");
	Код_В_Кладр = GetCardFieldS(CardNameKladr, Rec, "Code");
	Код_В_Стрит = SubStr(Код_В_Кладр, 1, 11);
      Fi;
    Fi;
  |  S="УлицаСправ":
    If ПроверитьНаличиеКартотеки(CardNameStreet, True):
      If Length(Код_В_Стрит)=0:
	Filter = If(КодРегиона<>Nil, "SubStr(CODE, 1, 2)='"+КодРегиона.Код+"'", "");
      Else
--	  Filter = "SubStr(CODE, 1, 11)='"+SubStr(Код_В_Стрит, 1, 11)+"'";
	Filter = "Match(CODE,'"+SubStr(Код_В_Стрит, 1, 11)+"????00')";
      Fi;
      Rec = OpenCardFile(CardNameStreet, Filter);
      If Rec<>Nil:
	ГНИ	    = GetCardFieldS(CardNameStreet, Rec, "GNINMB");
	Uno	    = GetCardFieldS(CardNameStreet, Rec, "UNO");
	Индекс	    = GetCardFieldS(CardNameStreet, Rec, "Index");
	ОКАТО	    = GetCardFieldS(CardNameStreet, Rec, "OCATD");
	Улица	    = GetCardFieldS(CardNameStreet, Rec, "Name")+" "+GetCardFieldS(CardNameStreet, Rec, "Socr");
	Код_В_Стрит = GetCardFieldS(CardNameStreet, Rec, "Code");

      Fi;
    Fi;
  |  S="ДомСправ":
    If ПроверитьНаличиеКартотеки(CardNameDOMA, True):
      If Length(Код_В_Стрит)=0:
	Filter = If(КодРегиона<>Nil, "SubStr(CODE, 1, 2)='"+КодРегиона.Код+"'", "");
      Else
      --  Filter = "SubStr(CODE, 1, 15)='"+SubStr(Код_В_Стрит, 1, 15)+"'";
	Filter = "Match(CODE,'"+SubStr(Код_В_Стрит, 1, 15)+"????')";
      Fi;
      Rec = OpenCardFile(CardNameDOMA, Filter);
      If Rec<>Nil:
	ГНИ	    = GetCardFieldS(CardNameDoma, Rec, "GNINMB");
	Uno	    = GetCardFieldS(CardNameDoma, Rec, "UNO");
	Индекс	    = GetCardFieldS(CardNameDoma, Rec, "Index");
	ОКАТО	    = GetCardFieldS(CardNameDoma, Rec, "OCATD");
	ДОМ	    = GetCardFieldS(CardNameDoma, Rec, "Name");--+" "+GetCardFieldS(CardNameDoma, Rec, "Socr");
	КОРПУС	    = GetCardFieldS(CardNameDoma, Rec, "KORP");
	КОД_В_ДОМА  = GetCardFieldS(CardNameDoma, Rec, "Code");

      Fi;
    Fi;

  Fi;
  ^False;
Cnuf;

Func ВзятьХвостЗаписи(S:String):String;
Var Leng, N, P :Integer;
Var Res        :String;

  Leng = Length(S); N = Leng; P = 0; Res = "";
  While N>0 Do
    If SubStr(S, N, 1)=" " And N>1 And N<Leng: P = N+1; Break; Fi; N = N-1;
  Od;
  If P>0: 
    Res = SubStr(S, P, Leng-P+1);
  Fi;
  ^Res;
Cnuf;

Func НайтиХвостЗаписи(S :String; Filter :String):Logical;
Var W :Integer;

  If S>"" And ПроверитьНаличиеКартотеки(CardNameSocr, False):
    W = OpenWorkArea(CardNameSocr, "", "Up(ScName)='"+Up(S)+"' And "+Filter);
    Try
      If Records(W)=1: ^True; Fi;
    Finally
      CloseWorkArea(W);
    End;
  Fi;
  ^False;
Cnuf;

Func ВыбратьСокращение(Filter:String):String;
Var Rec :Record;
Var Res :String;

  Res = "";
  If ПроверитьНаличиеКартотеки(CardNameSocr, False):
    Rec = OpenCardFile(CardNameSocr, Filter);
    If Rec<>Nil: Res = GetCardFieldS(CardNameSocr, Rec, "ScName"); Fi;
  Fi;
  ^Res;
Cnuf;

Proc приВыходе(S:String; It:Integer);
Var Filter, Socr  :String;

  If S="Район":
    If Район>"":
      Filter   = "LEVEL='2'";
      Район    = Trim(Район);
      Socr     = ВзятьХвостЗаписи(Район);
      If Not НайтиХвостЗаписи(Socr, Filter):
	Socr   = ВыбратьСокращение(Filter);
	If Socr>"": Район = Район+" "+Socr; Fi;
      Fi;
    | True:
      Город="";НасПункт=""; Улица=""; Дом="";
      КОД_В_ДОМА="";КОД_В_СТРИТ="";КОД_В_КЛАДР=Substr(КОД_В_КЛАДР,1,2)+"00000000000";
    Fi;
  |  S="Город":
     If Город>"":
	Filter	 = "LEVEL='3'";
	Город	 = Trim(Город);
	Socr	 = ВзятьХвостЗаписи(Город);
	If Not НайтиХвостЗаписи(Socr, Filter):
	   Socr   = ВыбратьСокращение(Filter);
	   If Socr>"": Город = Город+" "+Socr; Fi;
	Fi;
     | True:
       НасПункт=""; Улица=""; Дом="";
       КОД_В_ДОМА="";КОД_В_СТРИТ=If(КОД_В_СТРИТ>"",Substr(КОД_В_СТРИТ,1,5)+"000000000000","");
       КОД_В_КЛАДР=Substr(КОД_В_КЛАДР,1,5)+"00000000";
     Fi;
  |  S="НасПункт":
     If НасПункт>"":
	Filter	 = "LEVEL='4'";
	НасПункт = Trim(НасПункт);
	Socr	 = ВзятьХвостЗаписи(НасПункт);
	If Not НайтиХвостЗаписи(Socr, Filter):
	   Socr   = ВыбратьСокращение(Filter);
	  If Socr>"": НасПункт = НасПункт+" "+Socr; Fi;
	Fi;
     |True:
       НасПункт=""; Улица=""; Дом="";
       КОД_В_ДОМА="";КОД_В_СТРИТ=If(КОД_В_СТРИТ>"",Substr(КОД_В_СТРИТ,1,8)+"000000000","");
       КОД_В_КЛАДР=Substr(КОД_В_КЛАДР,1,8)+"00000";
     Fi;
  |  S="Улица":
     If Улица>"":
	Filter	 = "LEVEL='5'";
	Улица	 = Trim(Улица);
	Socr	 = ВзятьХвостЗаписи(Улица);
	If Not НайтиХвостЗаписи(Socr, Filter):
	   Socr   = ВыбратьСокращение(Filter);
	  If Socr>"": Улица = Улица+" "+Socr; Fi;
	Fi;
     | True:
       Улица=""; Дом="";
       КОД_В_ДОМА="";КОД_В_СТРИТ=If(КОД_В_СТРИТ>"",Substr(КОД_В_СТРИТ,1,11)+"000000","");
     Fi;
  |  S="Дом":
     If Дом>"":
	Filter	 = "LEVEL='6'";
	Дом	 = Trim(Дом);
	Socr	 = ВзятьХвостЗаписи(Дом);
       -- If Not НайтиХвостЗаписи(Socr, Filter):
       --    Socr   = ВыбратьСокращение(Filter);
       --   If Socr>"": Дом = Дом+" "+Socr; Fi;
       -- Fi;
     | True:
	Дом="";
       КОД_В_ДОМА=If(КОД_В_ДОМА>"",Substr(КОД_В_ДОМА,1,15)+"0000","");
     Fi;
  |  True:
  Fi;
Corp;

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

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

Конец
