Настройка атрибутов в Менеджере

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск

Что это?

Иногда возникает необходимость хранить дополнительные параметры для товара в базе (место хранения, цвет, размер и т.д.), а свободных полей нет. Для этого существуют атрибуты. Их может быть сколько угодно штук, любого типа (строка, целое или вещественное число, дата) и они могут привязываться по наименованию, партии, штрихкоду. Чтобы их настроить необходимо:

Заменить версию Менеджера

Заменить ManagerXP2.exe на версию 2.272.26 от октября 2014 г. или более новую.

Выполнить скрипт

/******************************************************************************/
/***               Generated by IBExpert 19.11.2015 18:17:38                ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE ATTRIBUTES (
    ATTR_SID            DM_TEXT /* DM_TEXT = VARCHAR(250) */,
    ATTR_LINKFIELDNAME  DM_TEXT /* DM_TEXT = VARCHAR(250) */,
    ATTR_TYPE           DM_STATUS /* DM_STATUS = INTEGER */,
    STATUS              DM_STATUS /* DM_STATUS = INTEGER */,
    INSERTDT            DM_DATETIME /* DM_DATETIME = TIMESTAMP */
);




/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE INDEX ATTRIBUTES_IDX1 ON ATTRIBUTES (ATTR_SID);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: ATTRIBUTES_BI */
CREATE OR ALTER TRIGGER ATTRIBUTES_BI FOR ATTRIBUTES
ACTIVE BEFORE INSERT POSITION 0
as
begin

  new.insertdt='now';
end
^


SET TERM ; ^



/******************************************************************************/
/***                          Fields descriptions                           ***/
/******************************************************************************/

COMMENT ON COLUMN ATTRIBUTES.ATTR_TYPE IS 
'0 - string
1 - int
2 - float
3 - date
4 - datetime';



/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/


/******************************************************************************/
/***               Generated by IBExpert 19.11.2015 18:17:50                ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/


CREATE GENERATOR GEN_ATTRIBUTE_DETAIL_ID;

CREATE TABLE ATTRIBUTE_DETAIL (
    ID           DM_ID NOT NULL /* DM_ID = BIGINT */,
    ATTR_SID     DM_TEXT /* DM_TEXT = VARCHAR(250) */,
    ATTR_LINKID  DM_UUID_NULL /* DM_UUID_NULL = CHAR(36) */,
    ATTR_SVALUE  DM_TEXT1024 /* DM_TEXT1024 = VARCHAR(1024) */,
    INSERTDT     DM_DATETIME /* DM_DATETIME = TIMESTAMP */
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE ATTRIBUTE_DETAIL ADD CONSTRAINT PK_ATTRIBUTE_DETAIL PRIMARY KEY (ID);


/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE UNIQUE INDEX ATTRIBUTE_DETAIL_IDX1 ON ATTRIBUTE_DETAIL (ATTR_SID, ATTR_LINKID);
CREATE INDEX ATTRIBUTE_DETAIL_IDX2 ON ATTRIBUTE_DETAIL (ATTR_SID, ATTR_LINKID, ATTR_SVALUE);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: ATTRIBUTE_DETAIL_BI */
CREATE OR ALTER TRIGGER ATTRIBUTE_DETAIL_BI FOR ATTRIBUTE_DETAIL
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_attribute_detail_id,1);
  new.insertdt = 'now';
end
^


SET TERM ; ^



/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/



SET SQL DIALECT 3;
SET TERM ^ ;
CREATE OR ALTER TRIGGER ATTRIBUTE_DETAIL_BIU0 FOR ATTRIBUTE_DETAIL
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
  new.ATTR_SID = upper(new.ATTR_SID);
end
^
SET TERM ; ^
update ATTRIBUTE_DETAIL set id = id;
SET TERM ^ ;
create or alter procedure PR_GETATTRIBUTE (
    ATTR_SID DM_UUID_NULL,
    ATTR_LINKID DM_TEXT)
returns (
    SVALUE varchar(1024))
as
declare variable GROUP_TYPE DM_STATUS;
begin
  select attr_svalue from attribute_detail where attr_sid = Upper(:attr_sid) and attr_linkid = :attr_linkid into :svalue;
  suspend;
end^
SET TERM ; ^
GRANT SELECT ON ATTRIBUTE_DETAIL TO PROCEDURE PR_GETATTRIBUTE;
GRANT EXECUTE ON PROCEDURE PR_GETATTRIBUTE TO PROCEDURE OUT$PR_SHTRIH_PEREOCENKA;
GRANT EXECUTE ON PROCEDURE PR_GETATTRIBUTE TO SYSDBA;

Создание нового атрибута

Создадим, например, место хранения. В таблице ATTRIBUTES создаем запись, где :

1) ATTR_SID = store_string (как пример, можно любое имя параметра написать)
2) ATTR_LINKFIELDNAME = name_id - связка по наименованию, возможно также
part_id - по партии
barcode - по штрихкоду
3) ATTR_TYPE = 0 - string, возможно также
1 - int
2 - float
3 - date
4 - datetime
4) STATUS = 0 (пока не используется)

Настрока отображения

Необходимо настроить вывод атрибута во вьюхах VW_DOC_DETAIL, VW_DOC_DETAIL_DELETED, VW_DOC_DETAIL_ACTIVE, VW_WAREBASE и при необходимости в VW_WAREBASE_KASSA. Например так выглядит новый атрибут в VW_DOC_DETAIL_ACTIVE: наименования поля STORE_STRING, отображение как (select svalue from pr_getattribute('store_string', da.name_id)), где первый параметр процедуры ('store_string') это имя атрибута из таблицы ATTRIBUTES поле ATTR_SID, а второй (da.name_id), то к чему была сделана связка поле ATTR_LINKFIELDNAME той же таблицы. Итого мы создали дополнительное поле/атрибут для указания места хранения товара.

Теги: атрибуты, места хранения, ATTRIBUTES