<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://gsbelarus.com:80/gs/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://gsbelarus.com:80/gs/wiki/index.php?action=history&amp;feed=atom&amp;title=FIN_PLACE</id>
		<title>FIN PLACE - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://gsbelarus.com:80/gs/wiki/index.php?action=history&amp;feed=atom&amp;title=FIN_PLACE"/>
		<link rel="alternate" type="text/html" href="https://gsbelarus.com:80/gs/wiki/index.php?title=FIN_PLACE&amp;action=history"/>
		<updated>2026-07-16T22:19:32Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.16</generator>

	<entry>
		<id>https://gsbelarus.com:80/gs/wiki/index.php?title=FIN_PLACE&amp;diff=3106&amp;oldid=prev</id>
		<title>SYSDBA: Создана новая страница размером  &lt;source lang=&quot;SQL&quot;&gt; CREATE TABLE fin_place (   placekey      dintkey,    /* уникальный идентификатор  */   parent ...</title>
		<link rel="alternate" type="text/html" href="https://gsbelarus.com:80/gs/wiki/index.php?title=FIN_PLACE&amp;diff=3106&amp;oldid=prev"/>
				<updated>2009-09-04T10:23:27Z</updated>
		
		<summary type="html">&lt;p&gt;Создана новая страница размером  &amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt; CREATE TABLE fin_place (   placekey      dintkey,    - ‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;уникальный идентификатор: &lt;/span&gt;   parent ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE fin_place&lt;br /&gt;
(&lt;br /&gt;
  placekey      dintkey,    /* уникальный идентификатор  */&lt;br /&gt;
  parent        INTEGER,    /* ссылка на родителя        */  &lt;br /&gt;
  placekind     dintkey,    /* тип места                 */&lt;br /&gt;
  name          dname,      /* наименование              */  &lt;br /&gt;
  comment       dtext,      /* комментарий               */   &lt;br /&gt;
  disabled      dboolean,   /* признак: не используется  */&lt;br /&gt;
  security      INTEGER,    /* дескриптор безопасности   */&lt;br /&gt;
  icon          INTEGER,    /* иконка                    */&lt;br /&gt;
  reserved      INTEGER     /* зарезервировано           */   &lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE fin_place ADD CONSTRAINT fin_pk_place&lt;br /&gt;
  PRIMARY KEY (placekey);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE fin_place ADD CONSTRAINT fin_fk_place_parent&lt;br /&gt;
  FOREIGN KEY (parent) REFERENCES fin_place (placekey);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE fin_place ADD CONSTRAINT fin_fk_place_placekind&lt;br /&gt;
  FOREIGN KEY (placekind) REFERENCES fin_placekind (placekindkey);&lt;br /&gt;
&lt;br /&gt;
CREATE ASC INDEX fin_x_place_name&lt;br /&gt;
  ON fin_place (name);&lt;br /&gt;
&lt;br /&gt;
CREATE ASC INDEX fin_x_place_disabled&lt;br /&gt;
  ON fin_place (disabled);&lt;br /&gt;
&lt;br /&gt;
CREATE ASC INDEX fin_x_place_security&lt;br /&gt;
  ON fin_place (security);&lt;br /&gt;
&lt;br /&gt;
CREATE GENERATOR fin_g_placekey;&lt;br /&gt;
SET GENERATOR fin_g_placekey TO 2000;&lt;br /&gt;
&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
CREATE EXCEPTION fin_e_invalidplace &amp;quot;Неверный адрес (Не соблюдается иерархия)&amp;quot;^&lt;br /&gt;
CREATE EXCEPTION fin_e_duplicateplace &amp;quot;Адрес дублируется&amp;quot;^&lt;br /&gt;
&lt;br /&gt;
CREATE TRIGGER fin_insert_place FOR fin_place&lt;br /&gt;
  BEFORE INSERT&lt;br /&gt;
  POSITION 0&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE G1 SMALLINT;&lt;br /&gt;
  DECLARE VARIABLE G2 SMALLINT;&lt;br /&gt;
  DECLARE VARIABLE C  INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  /* соблюдаем иерархию */&lt;br /&gt;
  SELECT grade FROM fin_placekind&lt;br /&gt;
  WHERE placekindkey = NEW.placekind&lt;br /&gt;
  INTO :G1;&lt;br /&gt;
&lt;br /&gt;
  IF (NEW.parent IS NULL) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    IF (:G1 &amp;lt;&amp;gt; 200) THEN&lt;br /&gt;
      EXCEPTION fin_e_invalidplace;&lt;br /&gt;
  END ELSE&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SELECT grade FROM fin_placekind&lt;br /&gt;
    WHERE placekindkey = (SELECT placekind FROM fin_place WHERE placekey = NEW.parent)&lt;br /&gt;
    INTO :G2;&lt;br /&gt;
&lt;br /&gt;
    IF (:G1 &amp;lt;= :G2) THEN&lt;br /&gt;
      EXCEPTION fin_e_invalidplace;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  SELECT COUNT(*) FROM fin_place&lt;br /&gt;
    WHERE parent = NEW.parent AND g_s_ansicomparetext(name, NEW.name) = 0&lt;br /&gt;
    INTO :C;&lt;br /&gt;
&lt;br /&gt;
  /*IF (:C &amp;gt; 0) THEN&lt;br /&gt;
    EXCEPTION fin_e_duplicateplace; */&lt;br /&gt;
&lt;br /&gt;
  /* присваиваем ключ */&lt;br /&gt;
  IF (NEW.placekey IS NULL) THEN&lt;br /&gt;
    NEW.placekey = GEN_ID(fin_g_placekey, 1);&lt;br /&gt;
&lt;br /&gt;
  /* значения по умолчанию */&lt;br /&gt;
  IF (NEW.disabled IS NULL) THEN&lt;br /&gt;
    NEW.disabled = 0;&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE cst_p_placekey&lt;br /&gt;
  RETURNS (placekey INTEGER)&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
  placekey = GEN_ID(fin_g_placekey, 1);&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_saveplace(Place INTEGER, Building VARCHAR(8),&lt;br /&gt;
  Part VARCHAR(8), Office VARCHAR(8))&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    PlaceKey INTEGER&lt;br /&gt;
  )&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE C INTEGER;&lt;br /&gt;
  DECLARE VARIABLE BK INTEGER;&lt;br /&gt;
  DECLARE VARIABLE PK INTEGER;&lt;br /&gt;
  DECLARE VARIABLE OK INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  /* если такого строения нет, то добавляем его */&lt;br /&gt;
  SELECT COUNT(*) FROM fin_place&lt;br /&gt;
  WHERE parent = :Place AND name = :Building&lt;br /&gt;
  INTO :C;&lt;br /&gt;
&lt;br /&gt;
  IF (:C = 0) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    INSERT INTO fin_place(parent, placekind, name)&lt;br /&gt;
      VALUES (:Place, 120, :Building);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  /* берем ключ строения */&lt;br /&gt;
  SELECT placekey FROM fin_place&lt;br /&gt;
  WHERE parent = :Place AND name = :Building&lt;br /&gt;
  INTO :BK;&lt;br /&gt;
&lt;br /&gt;
  /* корпуса может и не быть */&lt;br /&gt;
  IF (:Part &amp;lt;&amp;gt; &amp;quot;&amp;quot;) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SELECT COUNT(*) FROM fin_place&lt;br /&gt;
    WHERE parent = :BK AND name = :Part&lt;br /&gt;
    INTO :C;&lt;br /&gt;
&lt;br /&gt;
    IF (:C = 0) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      INSERT INTO fin_place(parent, placekind, name)&lt;br /&gt;
        VALUES (:BK, 130, :Part);&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    SELECT placekey FROM fin_place&lt;br /&gt;
    WHERE parent = :BK AND name = :Part&lt;br /&gt;
    INTO :PK;&lt;br /&gt;
  END ELSE&lt;br /&gt;
  BEGIN&lt;br /&gt;
    PK = :BK;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  /* квартиры может и не быть */&lt;br /&gt;
  IF (:Office &amp;lt;&amp;gt; &amp;quot;&amp;quot;) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SELECT COUNT(*) FROM fin_place&lt;br /&gt;
    WHERE parent = :PK AND name = :Office&lt;br /&gt;
    INTO :C;&lt;br /&gt;
&lt;br /&gt;
    IF (:C = 0) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      INSERT INTO fin_place(parent, placekind, name)&lt;br /&gt;
        VALUES (:PK, 140, :Office);&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    SELECT placekey FROM fin_place&lt;br /&gt;
    WHERE parent = :PK AND name = :Office&lt;br /&gt;
    INTO :OK;&lt;br /&gt;
  END ELSE&lt;br /&gt;
  BEGIN&lt;br /&gt;
    OK = :PK;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  PlaceKey = :OK;&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_saveplace_newstreet(Place INTEGER, Street VARCHAR(60),&lt;br /&gt;
  Building VARCHAR(8), Part VARCHAR(8), Office VARCHAR(8))&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    PlaceKey INTEGER&lt;br /&gt;
  )&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE C INTEGER;&lt;br /&gt;
  DECLARE VARIABLE SK INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  /* если такого города нет, то добавляем его */&lt;br /&gt;
  SELECT COUNT(*) FROM fin_place&lt;br /&gt;
  WHERE parent = :Place AND name = :Street&lt;br /&gt;
  INTO :C;&lt;br /&gt;
&lt;br /&gt;
  IF (:C = 0) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    INSERT INTO fin_place(parent, placekind, name)&lt;br /&gt;
      VALUES (:Place, 70, :Street);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  /* берем ключ города */&lt;br /&gt;
  SELECT placekey FROM fin_place&lt;br /&gt;
  WHERE parent = :Place AND name = :Street&lt;br /&gt;
  INTO :SK;&lt;br /&gt;
&lt;br /&gt;
  EXECUTE PROCEDURE fin_p_plc_saveplace (:SK, Building, Part, Office)&lt;br /&gt;
    RETURNING_VALUES :PlaceKey;&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_place2str(PlaceKey INTEGER)&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    FullAddress VARCHAR(255)&lt;br /&gt;
  )&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE Parent INTEGER;&lt;br /&gt;
  DECLARE VARIABLE Name VARCHAR(255);&lt;br /&gt;
  DECLARE VARIABLE PlaceKind INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  SELECT parent, name, placekind&lt;br /&gt;
  FROM fin_place WHERE placekey = :PlaceKey&lt;br /&gt;
    INTO :Parent, :Name, :PlaceKind;&lt;br /&gt;
&lt;br /&gt;
  IF (:Parent IS NULL) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    FullAddress = :Name;&lt;br /&gt;
  END ELSE&lt;br /&gt;
  BEGIN&lt;br /&gt;
    EXECUTE PROCEDURE fin_p_plc_place2str (:Parent)&lt;br /&gt;
      RETURNING_VALUES :FullAddress;&lt;br /&gt;
&lt;br /&gt;
    FullAddress = :FullAddress || &amp;quot;, &amp;quot; || :Name;&lt;br /&gt;
  END&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_addrlist(PlaceKey INTEGER, DetailKey INTEGER)&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    FullAddress VARCHAR(255)&lt;br /&gt;
  )&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE K INTEGER;&lt;br /&gt;
  DECLARE VARIABLE PK INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  FOR&lt;br /&gt;
    SELECT placekey, placekind FROM fin_place&lt;br /&gt;
    WHERE parent = :PlaceKey&lt;br /&gt;
    INTO :K, :PK&lt;br /&gt;
  DO BEGIN&lt;br /&gt;
    EXECUTE PROCEDURE fin_p_plc_place2str (:K)&lt;br /&gt;
      RETURNING_VALUES :FullAddress;&lt;br /&gt;
&lt;br /&gt;
    SUSPEND;&lt;br /&gt;
  END&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_deleteplace(PlaceKey INTEGER)&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    Result INTEGER&lt;br /&gt;
  )&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE PK INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  FOR&lt;br /&gt;
    SELECT placekey FROM fin_place&lt;br /&gt;
    WHERE parent = :PlaceKey&lt;br /&gt;
    INTO :PK&lt;br /&gt;
  DO&lt;br /&gt;
  BEGIN&lt;br /&gt;
    EXECUTE PROCEDURE fin_p_plc_deleteplace(:PK)&lt;br /&gt;
      RETURNING_VALUES :Result;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  DELETE FROM fin_place WHERE placekey = :PlaceKey;&lt;br /&gt;
&lt;br /&gt;
  Result = 1;&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_expandplckey(PlaceKey INTEGER)&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    CountryKey   INTEGER,&lt;br /&gt;
    CountryName  VARCHAR(255),&lt;br /&gt;
    ProvinceKey  INTEGER,&lt;br /&gt;
    ProvinceName VARCHAR(255),&lt;br /&gt;
    DistrictKey  INTEGER,&lt;br /&gt;
    DistrictName VARCHAR(255),&lt;br /&gt;
    TownKey      INTEGER,&lt;br /&gt;
    TownName     VARCHAR(255),&lt;br /&gt;
    StreetKey    INTEGER,&lt;br /&gt;
    StreetName   VARCHAR(255),&lt;br /&gt;
    BuildingKey  INTEGER,&lt;br /&gt;
    BuildingName VARCHAR(8),&lt;br /&gt;
    PartKey      INTEGER,&lt;br /&gt;
    PartName     VARCHAR(8),&lt;br /&gt;
    OfficeKey    INTEGER,&lt;br /&gt;
    OfficeName   VARCHAR(8)&lt;br /&gt;
  )&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE PK     INTEGER;&lt;br /&gt;
  DECLARE VARIABLE Name   VARCHAR(255);&lt;br /&gt;
BEGIN&lt;br /&gt;
  CountryKey = NULL;&lt;br /&gt;
  CountryName = &amp;quot;&amp;quot;;&lt;br /&gt;
  ProvinceKey = NULL;&lt;br /&gt;
  ProvinceName = &amp;quot;&amp;quot;;&lt;br /&gt;
  DistrictKey = NULL;&lt;br /&gt;
  DistrictName = &amp;quot;&amp;quot;;&lt;br /&gt;
  TownKey = NULL;&lt;br /&gt;
  TownName = &amp;quot;&amp;quot;;&lt;br /&gt;
  StreetKey = NULL;&lt;br /&gt;
  StreetName = &amp;quot;&amp;quot;;&lt;br /&gt;
  BuildingKey = NULL;&lt;br /&gt;
  BuildingName = &amp;quot;&amp;quot;;&lt;br /&gt;
  PartKey = NULL;&lt;br /&gt;
  PartName = &amp;quot;&amp;quot;;&lt;br /&gt;
  OfficeKey = NULL;&lt;br /&gt;
  OfficeName = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  WHILE (NOT :PlaceKey IS NULL) DO&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SELECT placekind, name FROM fin_place WHERE placekey = :PlaceKey&lt;br /&gt;
    INTO :PK, :Name;&lt;br /&gt;
&lt;br /&gt;
    IF (:PK &amp;gt;= 140 AND :PK &amp;lt;= 170) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      OfficeKey = :PlaceKey;&lt;br /&gt;
      OfficeName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK = 130) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      PartKey = :PlaceKey;&lt;br /&gt;
      PartName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK = 120) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      BuildingKey = :PlaceKey;&lt;br /&gt;
      BuildingName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK &amp;gt;= 70 AND :PK &amp;lt;= 110) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      StreetKey = :PlaceKey;&lt;br /&gt;
      StreetName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK &amp;gt;= 40 AND :PK &amp;lt;= 60) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      TownKey = :PlaceKey;&lt;br /&gt;
      TownName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK = 30) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      DistrictKey = :PlaceKey;&lt;br /&gt;
      DistrictName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK = 20) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      ProvinceKey = :PlaceKey;&lt;br /&gt;
      ProvinceName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    IF (:PK = 10) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      CountryKey = :PlaceKey;&lt;br /&gt;
      CountryName = :Name;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    SELECT parent FROM fin_place WHERE placekey = :PlaceKey&lt;br /&gt;
      INTO :PlaceKey;&lt;br /&gt;
  END&lt;br /&gt;
END;&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_plc_subplacelist(ParentKey INTEGER)&lt;br /&gt;
  RETURNS (&lt;br /&gt;
    PlaceKey INTEGER&lt;br /&gt;
  )&lt;br /&gt;
AS &lt;br /&gt;
  DECLARE VARIABLE PK INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
  FOR&lt;br /&gt;
    SELECT placekey &lt;br /&gt;
    FROM fin_place&lt;br /&gt;
    WHERE placekey = :ParentKey&lt;br /&gt;
    INTO :PlaceKey&lt;br /&gt;
  DO &lt;br /&gt;
    SUSPEND;&lt;br /&gt;
&lt;br /&gt;
  FOR&lt;br /&gt;
    SELECT placekey &lt;br /&gt;
    FROM fin_place&lt;br /&gt;
    WHERE parent = :ParentKey&lt;br /&gt;
    INTO :PK&lt;br /&gt;
  DO &lt;br /&gt;
    FOR&lt;br /&gt;
      SELECT placekey &lt;br /&gt;
      FROM fin_p_plc_subplacelist(:PK)&lt;br /&gt;
      INTO :PlaceKey&lt;br /&gt;
    DO&lt;br /&gt;
      SUSPEND;&lt;br /&gt;
END;	&lt;br /&gt;
^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Архив]]&lt;br /&gt;
[[Category:Проект InfoRegistr]]&lt;/div&gt;</summary>
		<author><name>SYSDBA</name></author>	</entry>

	</feed>