Глава 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.
|