<?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_VS</id>
		<title>FIN VS - История изменений</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_VS"/>
		<link rel="alternate" type="text/html" href="https://gsbelarus.com:80/gs/wiki/index.php?title=FIN_VS&amp;action=history"/>
		<updated>2026-07-16T23:43:58Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.16</generator>

	<entry>
		<id>https://gsbelarus.com:80/gs/wiki/index.php?title=FIN_VS&amp;diff=3104&amp;oldid=prev</id>
		<title>SYSDBA: Создана новая страница размером  &lt;source lang=&quot;SQL&quot;&gt; CREATE TABLE fin_vs (   /* Параметры для полей */   vskey            dintkey,     /* Первичн...</title>
		<link rel="alternate" type="text/html" href="https://gsbelarus.com:80/gs/wiki/index.php?title=FIN_VS&amp;diff=3104&amp;oldid=prev"/>
				<updated>2009-09-04T10:18:05Z</updated>
		
		<summary type="html">&lt;p&gt;Создана новая страница размером  &amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt; CREATE TABLE fin_vs (   - ‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Параметры для полей: &lt;/span&gt;   vskey            dintkey,     /* Первичн...&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_vs&lt;br /&gt;
(&lt;br /&gt;
  /* Параметры для полей */&lt;br /&gt;
  vskey            dintkey,     /* Первичный ключ */&lt;br /&gt;
  userkey          INTEGER,     /* Индетификатор пользователя */&lt;br /&gt;
  context          SMALLINT,    /* Контекст */&lt;br /&gt;
  tablename        dname,       /* Наименование таблицы */&lt;br /&gt;
  language         dlanguage,   /* Язык (на будущее) */&lt;br /&gt;
&lt;br /&gt;
  fieldname        dtablename,  /* Наименование поля */&lt;br /&gt;
  fieldorder       SMALLINT,    /* Номер по порядку */&lt;br /&gt;
  visible          dboolean,    /* Отображаемо ли поле */&lt;br /&gt;
  displaylabel     dname,       /* Визуальное наименование поля */&lt;br /&gt;
  displaywidth     SMALLINT,    /* Текущий визуальный размер поля */&lt;br /&gt;
  resizeable       dboolean,    /* Может изменяться размер пользователем или нет */&lt;br /&gt;
  maxwidth         SMALLINT,    /* Максимальная ширина колонки */&lt;br /&gt;
  minwidth         SMALLINT,    /* Минимальная ширина колонки  */&lt;br /&gt;
  displayformat    VARCHAR(60), /* Формат отображения поля */&lt;br /&gt;
  alignment        CHAR(1),     /* Выравнивание поля */&lt;br /&gt;
  editmask         VARCHAR(60), /* Маска редактирования поля */&lt;br /&gt;
&lt;br /&gt;
  /* Параметры для grid-ов */&lt;br /&gt;
  titlefontcolor   dcolor,      /* Шрифт заглавия */&lt;br /&gt;
  titlefontsize    INTEGER,     /* Размер шрифта заглавия */&lt;br /&gt;
  titlefontstyle   CHAR(4),     /* Стиль шрифта заглавия */&lt;br /&gt;
  titlefontname    dfontname,   /* Название шрифта заглавия */&lt;br /&gt;
  titlealignment   CHAR(1),     /* Выравнивание заглавия */&lt;br /&gt;
  titlecolor       dcolor,      /* Цвет заглавия */&lt;br /&gt;
  fontcolor        dcolor,      /* Цвет шрифта */&lt;br /&gt;
  fontsize         INTEGER,     /* размер шрифта */&lt;br /&gt;
  fontstyle        CHAR(4),     /* Стиль шрифта */&lt;br /&gt;
  fontname         dfontname,   /* Наименование шрифта */&lt;br /&gt;
  color            dcolor       /* Цвет колонки */&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE fin_vs ADD CONSTRAINT fin_pk_vs&lt;br /&gt;
  PRIMARY KEY (vskey);&lt;br /&gt;
&lt;br /&gt;
CREATE ASC INDEX fin_xvs&lt;br /&gt;
  ON fin_vs&lt;br /&gt;
(&lt;br /&gt;
  userkey,&lt;br /&gt;
  context,&lt;br /&gt;
  tablename&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
CREATE EXCEPTION fin_einvalidvs &amp;quot;Invalid VS&amp;quot;^&lt;br /&gt;
&lt;br /&gt;
/* Генератор ключа для fin_vs */&lt;br /&gt;
CREATE GENERATOR fin_g_vs^&lt;br /&gt;
SET GENERATOR fin_g_vs TO 2000^&lt;br /&gt;
&lt;br /&gt;
/* trigger на добавление новой записи fin_vs */&lt;br /&gt;
CREATE TRIGGER fin_insert_vs FOR fin_vs&lt;br /&gt;
  BEFORE INSERT&lt;br /&gt;
  POSITION 0&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
  /* Генерируем новый ключ */&lt;br /&gt;
  IF (NEW.vskey IS NULL) THEN&lt;br /&gt;
    NEW.vskey = GEN_ID(fin_g_vs, 1);&lt;br /&gt;
&lt;br /&gt;
  /* Все названия таблиц и полей должны прописываться заглавными буквами */&lt;br /&gt;
  NEW.tablename = g_s_ansiuppercase(NEW.tablename);&lt;br /&gt;
  NEW.fieldname = g_s_ansiuppercase(NEW.fieldname);&lt;br /&gt;
&lt;br /&gt;
  /* Проверка на повтор одинаковых userkey, contex, tablename, fieldname */&lt;br /&gt;
  DELETE FROM fin_vs WHERE userkey = NEW.userkey&lt;br /&gt;
    AND context = NEW.context AND tablename = NEW.tablename&lt;br /&gt;
    AND fieldname = NEW.fieldname;&lt;br /&gt;
&lt;br /&gt;
  /* Размер шрифта не может быть отрицательным или нулевым*/&lt;br /&gt;
  IF (NEW.fontsize &amp;lt; 1) THEN&lt;br /&gt;
    NEW.fontsize = NULL;&lt;br /&gt;
&lt;br /&gt;
  /* Размер шрифта не может быть отрицательным или нулевым*/&lt;br /&gt;
  IF (NEW.titlefontsize &amp;lt; 1) THEN&lt;br /&gt;
    NEW.titlefontsize = NULL;&lt;br /&gt;
&lt;br /&gt;
  /* Если пользователь не указывает растягиваемость колонки, то по умолчанию ставим ее растягиваемой */&lt;br /&gt;
  IF (NEW.resizeable IS NULL) THEN&lt;br /&gt;
    NEW.resizeable = 1;&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
/* trigger на изменение параметров полей fin_vs */&lt;br /&gt;
CREATE TRIGGER fin_update_vs FOR fin_vs&lt;br /&gt;
  BEFORE UPDATE&lt;br /&gt;
  POSITION 0&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE C INTEGER; /* Служит для проверки существования одинковых параметров поля */&lt;br /&gt;
BEGIN&lt;br /&gt;
  /* Все названия таблиц и полей должны прописываться заглавными буквами */  &lt;br /&gt;
  NEW.tablename = UPPER(NEW.tablename);&lt;br /&gt;
  NEW.fieldname = UPPER(NEW.fieldname);&lt;br /&gt;
&lt;br /&gt;
  /* Проверка на содержание базы полей с одинаковыми userkey, context, tablename, fieldname */&lt;br /&gt;
  SELECT COUNT(*) FROM fin_vs WHERE userkey = NEW.userkey&lt;br /&gt;
    AND context = NEW.context AND tablename = NEW.tablename&lt;br /&gt;
    AND fieldname = NEW.fieldname INTO :C;&lt;br /&gt;
&lt;br /&gt;
  /* Если одинаковые параметры существуют, то выдаем ошибку */&lt;br /&gt;
  IF (:C &amp;gt; 1) THEN&lt;br /&gt;
    EXCEPTION fin_einvalidvs;&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  Данная процедура возвращает список визуальных настроек для таблиц и&lt;br /&gt;
  связанных с ними контролов по ключам userkey, context.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE fin_p_vs_getvs(auserkey INTEGER, acontext INTEGER)&lt;br /&gt;
  RETURNS /* Возвращаемые данные: */&lt;br /&gt;
(&lt;br /&gt;
  vskey            INTEGER, /* Ключ таблицы визуальных настроек fin_vs */&lt;br /&gt;
  exist            INTEGER  /* Существуют ли настройки */&lt;br /&gt;
)&lt;br /&gt;
AS&lt;br /&gt;
  DECLARE VARIABLE C INTEGER; /* Обычный счетчик */&lt;br /&gt;
  DECLARE VARIABLE UK INTEGER; /* Userkey */&lt;br /&gt;
  DECLARE VARIABLE CTXT INTEGER; /* context */&lt;br /&gt;
  DECLARE VARIABLE TABLENAME VARCHAR(60); /* Наименование текущей таблицы */&lt;br /&gt;
BEGIN&lt;br /&gt;
  /*&lt;br /&gt;
    По порядку проходим по всем названиям таблиц или query (дополнительно,&lt;br /&gt;
    не знаю зачем, производим отсеивание одинаковых tablename)&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  FOR&lt;br /&gt;
    SELECT DISTINCT tablename&lt;br /&gt;
    FROM fin_vs&lt;br /&gt;
    GROUP BY tablename&lt;br /&gt;
    INTO :tablename&lt;br /&gt;
  DO&lt;br /&gt;
  BEGIN&lt;br /&gt;
    /* Производим проверку на наличие указанного context с текущей tablename */&lt;br /&gt;
    SELECT COUNT(*) FROM fin_vs WHERE&lt;br /&gt;
      tablename = :tablename AND context = :acontext&lt;br /&gt;
    INTO :C;&lt;br /&gt;
&lt;br /&gt;
    IF (:C = 0) THEN&lt;br /&gt;
      CTXT = -1; /* Если tablename и context такие не существуют, то возращает контекст по умолчанию*/&lt;br /&gt;
    ELSE&lt;br /&gt;
      CTXT = :acontext; /* Если же существует, то используем данный context */&lt;br /&gt;
&lt;br /&gt;
    /* Производим такую же проверку на userkey */&lt;br /&gt;
    SELECT COUNT(*) FROM fin_vs WHERE&lt;br /&gt;
      tablename = :tablename AND userkey = :auserkey AND context = :CTXT&lt;br /&gt;
      INTO :C;&lt;br /&gt;
    IF (:C = 0) THEN&lt;br /&gt;
      UK = -1; /* Если настроек с таким userkey нет, то берем userkey по умолчанию */&lt;br /&gt;
    ELSE&lt;br /&gt;
      UK = :auserkey; /* Если же существует, то используем данный userkey */&lt;br /&gt;
&lt;br /&gt;
    /* Дополнительно производим проверку на существование указанных context, userkey в параметрах процедуры */&lt;br /&gt;
    SELECT COUNT(*) FROM fin_vs WHERE&lt;br /&gt;
      tablename = :tablename AND context = :acontext AND userkey = :auserkey&lt;br /&gt;
      INTO :C;&lt;br /&gt;
&lt;br /&gt;
    /* Указываем существование данных с параметрами процедуры */&lt;br /&gt;
    IF (:C = 0) THEN&lt;br /&gt;
      exist = 0;&lt;br /&gt;
    ELSE&lt;br /&gt;
      exist = 1;&lt;br /&gt;
&lt;br /&gt;
    /* Скидываем данные в результат процедуры */  &lt;br /&gt;
    FOR&lt;br /&gt;
      SELECT vskey&lt;br /&gt;
      FROM fin_vs&lt;br /&gt;
      WHERE tablename = :tablename AND userkey = :UK AND context = :CTXT&lt;br /&gt;
      INTO :vskey&lt;br /&gt;
    DO&lt;br /&gt;
      SUSPEND;&lt;br /&gt;
  END&lt;br /&gt;
END^&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>