Глава 7. СПРАВОЧНИКИ 
Форматирование наименований в справочниках, системная таблица OBJECT_NAMES 
Способ хранения объектов в справочной системе позволяет легко вносить и 
корректировать объекты, однако создает определенные трудности при их отображении 
из-за «разношерстности» атрибутики разных классов. 
Особенно это могло бы ощущаться в документах (типа накладной
), где требуется одновременно еотображение объектов совершенно разных классов, 
например «Винтов» и «Обуви» в одном 
списке. 
Для решения этой проблемы программа поддерживает так называемую таблицу наименований 
объектов, в которой централизованно хранятся наименования всех объектов, 
присутствующих в справочной системе: 
Системная таблица OBJECT_NAMES 
 
  
    | ID
INTEGER | 
    CLASS_ID
INTEGER | 
    SHORT_NAME
VARCHAR(64) | 
    FULL_NAME
VARCHAR(256) | 
   
  
    | 25 | 
    1000 | 
    Кожа | 
    Кожа | 
   
  
    | 27 | 
    1000 | 
    Пластик | 
    Пластик | 
   
  
    | 28 | 
    1000 | 
    Резина | 
    Резина | 
   
  
    | 38 | 
    1001 | 
    Сапоги | 
    Сапоги | 
   
  
    | 39 | 
    1001 | 
    Кроссовки | 
    Кроссовки | 
   
  
    | …. | 
    …. | 
    …. | 
    …. | 
   
  
    | 118 | 
    1005 | 
    M3 x 20 (латунь) | 
    Винты M3 x 20 (латунь) | 
   
  
    | 300 | 
    1006 | 
    Скоба “такая-то” | 
    Скоба “такая-то” (сталь) | 
   
  
    | 487 | 
    1001 | 
    Сапоги муж. 43 (черн.) | 
    Сапоги муж. 43 (черн., кожа) | 
   
 
 
 
Поддержка наименований происходит автоматически при помощи взаимосвязанной системы автоматически создаваемых 
хранимых процедур, срабатывающих при добавлении, удалении или изменении 
любого объекта. Способ форматирования наименований для каждого справочника пользователь 
задает в простом интерфейсе. При этом он может указать
, какие поля справочника следует использовать для сборки каждого наименования 
и снабдить их префиксами и суффиксами. Сокращенное наименование (
short_name) существует по умолчанию и ограничено длиной 
в 64 символа. В конфигурацию можно добавлять новые виды 
наименований, например, в данном случае добавлено полное наименование 
(full_name) длиной 256 символов. Способы 
форматирования наименований хранятся в таблице CLASS_NAME_DEF
. 
Пример способа форматирования: 
Форматирование кратких наименований,  справочник «Винты» 
 
  
    | Позиция | 
    Префикс | 
    Поле | 
    Суффикс | 
   
  
    | 1 | 
    Винты | 
    Диаметр | 
    X | 
   
  
    | 2 | 
      | 
    Размер | 
      | 
   
  
    | 3 | 
    ( | 
    Металл | 
    ) | 
   
 
 
В любой момент можно изменить способ форматирования наименований объектов. 
Программа сама внесет необходимые изменения в тексты хранимых процедур и 
переформатирует все объекты в соответствии с новыми правилами. Хранимая 
процедура, ответственная за форматирование наименований справочника создается вместе со 
справочником и имеет название  <имя_таблицы_справочника
>_SET_NAMES. 
Пример текста такой процедуры: 
CREATE PROCEDURE CUSTOMER_SET_NAMES(OBJECT_ID INTEGER)
AS
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE ID2 INTEGER;
DECLARE VARIABLE NAME2 VARCHAR(4096);
DECLARE VARIABLE SHORT_NAME VARCHAR(4096);
DECLARE VARIABLE V1 VARCHAR(35);
DECLARE VARIABLE V2 VARCHAR(50);
BEGIN
/*Текст данной процедуры создан системой Allegro автоматически.*/
/*Не меняйте этот текст. Ваши изменения могут быть утеряны*/
  FOR SELECT
    CUSTOMER.ID,
    CUSTOMER.NAME1,
    CUSTOMER.NAME
  FROM
    OBJECT_NAMES O, CUSTOMER
  WHERE
    (O.OBJECT_ID = CUSTOMER.ID) AND (O.CLASS_ID = 2) AND
    ((:OBJECT_ID IS NULL) OR (CUSTOMER.ID = :OBJECT_ID))
  INTO :ID,:V1,:V2
  DO
  IF (ID <> 0) THEN
  BEGIN
    IF (V1 IS NULL) THEN V1 = '';
    IF (V2 IS NULL) THEN V2 = '';
    NAME2 = :V1;
    SHORT_NAME = :V2;
    IF (strlen(NAME2)>64) THEN NAME2 = substr(NAME2, 1, 64);
    IF (strlen(SHORT_NAME)>64) THEN SHORT_NAME = substr(SHORT_NAME, 1, 64);
    UPDATE OBJECT_NAMES
    SET
        NAME2 = :NAME2,
        SHORT_NAME = :SHORT_NAME
    WHERE OBJECT_ID = :ID;
  END
END
Аналогичное форматирование имеют наименования документов (см. далее), 
с той лишь разницей, что наименования объектов справочной системы 
хранятся в системной таблице OBJECT_NAMES, а наименования 
документов хранятся в системной таблице DOC_JOURNAL. 
 
 
               |