Документы состоят из шапки и одной и более табличных частей, их описание хранится в схеме ядра базы данных в следующих таблицах:

DOC_TYPES – типы документов;

DOCUMENTS – обязательные (предопределенные) свойства шапок документов;

DOC_PROPERTIES – свойства шапок документов;

DOC_TOONEREFS – взаимосвязи свойств документов со справочниками;

DOC_SUBTYPES – подтипы документов;

TABLE_PART_TYPES – табличные части документов;

TBLPART_PROPERTIES – свойства табличных частей документов;

TBLPART_TOONEREFS – взаимосвязи свойств табличных частей документа со справочниками;

DOC_TBLPARTS – взаимосвязи типов документов и табличных частей;

PARENT_DOCUMENTS – взаимосвязи документов-родителей и документов-потомков;

DOC_LINKS – типы взаимосвязей документов-родителей и документов-потомков.

Модель данных выглядит следующим образом:

Doc_Doc_Tables

Таблицы DOCUMENTS, DOC_LINKS и PARENT_DOCUMENTS модели данных не имеют префикса "V". Они не являются представлениями по причине того, что не версионируются. Например, хранимые в таблице DOCUMENTS свойства шапки документов одинаковы для всех типов документов, они предопределены разработчиками системы Ultima Businessware® и недоступны для редактирования прикладному разработчику.

Остановимся подробнее на каждой из таблиц.

Тип документа задает набор полей шапки документа, набор его табличных частей и набор обработчиков.

table В таблице DOC_TYPES хранятся атрибуты, которые описывают тип документа и его таблицу в прикладной схеме базы данных:

NAME – название типа документа, определяет название генерируемого класса;

CAPTION – отображаемое в экранных формах название типа документа, например, для типа документа Invoice это может быть "Приход" или "Приходная накладная";

TABLE_NAME – название таблицы в прикладной схеме базы данных. Для удобства работы к названиям всех таблиц типов документа будет добавлен префикс "D_", например, для значения TABLE_NAME INVOICE название таблицы в базе данных будет D_INVOICE;

HANDLER_OBJ_ID (FK) – обработчик событий для этого типа документа (перед созданием, перед сохранением, после сохранения, перед удалением, после удаления), создается при необходимости.

table В таблице DOCUMENTS хранятся значения предопределенного разработчиками набора полей шапки документа, кроме того, названия полей определяют названия свойств генерируемого класса, а также поля таблицы типа документа в прикладной схеме базы данных:

DELETED – флаг, указывающий удален ли документ (false – удален, true – нет);

DOCTYPE_OBJ_ID (FK) – ссылка на тип документа, которому принадлежит свойство, заполняется автоматически;

CREATOR_ID (FK) – создатель документа (id пользователя системы), заполняется автоматически;

CREATION_DATE – дата создания документа, заполняется автоматически;

DT_PROCESS – дата проведения документа;

SUBTYPE_OBJ_ID (FK) – подтип документа;

VERSION – служебное поле, заполняется автоматически с помощью инкрементирующего счетчика при каждом сохранении документа. Используется при одновременном редактировании документа двумя пользователями, чтобы не дать второму сохранить документ после внесения в него изменений первым;

DESCRIPTION – автоматически генерируемое описание документа вида "{тип документа} №{номер документа} от {дата создания документа}";

COMMENTS – вводимое вручную описание документа;

TOTALS_LIST – автоматически генерируемый обработчиком проведения на основании документа список движений.

table Если прикладному разработчику не хватает предопреденных свойств, составляющих шапку любого нового типа документа, в таблице DOC_PROPERTIES можно описать свои:

NAME – название свойства, определяет название свойства генерируемого класса;

CAPTION – отображаемое в экранных формах название свойства типа документа;

DOC_TYPE_OBJ_ID (FK) – ссылка на тип документа, которому принадлежит свойство, заполняется автоматически при его добавлении;

COLUMN_NAME – название поля таблицы в прикладной схеме базы данных;

TYPE_ID (FK) – тип свойства (подробнее см. раздел Типы данных);

CONTROL_ID (FK) – элемент управления, который будет использоваться по умолчанию в экранных формах для ввода значений этого свойства, выбирается из предлагаемых системой. Например, для строкового свойства это может быть строка или поле;

STRING_SIZE – ограничивает длину строки, если в качестве типа свойства TYPE_ID выбран string;

IS_MULTILANGUAGE – флаг, указывающий требуется ли перевод для этого свойства;

IS_REQUIRED – флаг, указывающий обязательно ли свойство для заполнения;

DEFAULT_VALUE – значение свойства по умолчанию, которое подставляется автоматически при создании нового документа.

table Свойство документа может быть ссылкой на справочник, взаимосвязи такого рода хранятся в таблице DOC_TOONEREFS:

NAME – название взаимосвязи, определяет название свойства генерируемого класса типа класса, на который оно ссылается;

CAPTION – отображаемое в экранных формах название взаимосвязи;

DOC_OBJ_ID (FK) – тип документа, свойство которого является ссылкой на справочник;

PROP_OBJ_ID (FK) – свойство типа документа, которое является ссылкой на справочник. В качестве значения типа этого свойства (TYPE_ID) должен быть выбран long;

REF_DICT_OBJ_ID (FK) – справочник, на который ссылается указанное свойство.

output В результате заполнения всех обязательных атрибутов и свойств в прикладной схеме базы данных будет создана новая таблица D_TABLE_NAME с первичным ключом ID, всеми полями из таблицы DOCUMENTS (IS_ALIVE, BALANCE_ID (FK), DOCTYPE_OBJ_ID (FK) и т.д.) плюс полями COLUMN_NAME, которая будет использоваться для хранения данных шапок всех соответствующих созданному типу документов.

35_example

Рассмотрим на примере создание типа документа "Приход".

В результате описания атрибутов и свойств нового типа документа в схеме ядра, в прикладной схеме базы данных будет создана таблица D_INVOICE:

Doc_Example

35_important

Данные прикладной области хранятся в прикладной схеме базы данных. То есть шапки всех создаваемых в системе документов будут храниться в соответствующих их типу таблицах прикладной схемы, например, шапки заказов в таблице D_ORDERS, шапки приходов в D_INVOICE, шапки резервов в D_RESERVE. Но при этом все общие поля шапок всех документов независимо от их типа будут также реплицированы и в схему ядра в таблицу DOCUMENTS.

table В таблице DOC_SUBTYPES описываются подтипы документов:

CAPTION – отображаемое в экранных формах название подтипа документа;

DOC_TYPE_OBJ_ID (FK) – ссылка на тип документа, которому соответствует подтип.

table В таблице TABLE_PART_TYPES хранятся описания табличных частей документов и их таблиц в прикладной схеме базы данных

NAME – название типа табличной части, определяет название класса строки табличной части;

CAPTION – отображаемое в экранных формах название закладки табличной части;

TABLE_NAME – название таблицы в прикладной схеме базы данных. Для удобства работы к названиям всех таблиц табличных частей будет добавлен префикс "TP_", например, для значения TABLE_NAME RESERVE название таблицы в базе данных будет TP_RESERVE.

table В таблице TBLPART_PROPERTIES описываются свойства табличных частей документов – по сути, поля таблицы табличной части в прикладной схеме базы данных:

NAME – название свойства табличной части определяет название свойства класса строки табличной части;

CAPTION – отображаемое в экранных формах название свойства табличной части;

TP_TYPE_OBJ_ID (FK)ссылка на тип табличной части, которому принадлежит свойство, заполняется автоматически при его добавлении;

COLUMN_NAME – название поля таблицы в прикладной схеме базы данных;

TYPE_ID (FK) – тип свойства (подробнее см. раздел Типы данных);

CONTROL_ID (FK) – элемент управления, который будет использоваться по умолчанию в экранных формах для ввода значений этого свойства, выбирается из предлагаемых системой. Например, для строкового свойства это может быть строка или поле;

STRING_SIZE – ограничивает длину строки, если в качестве типа свойства TYPE_ID выбран string;

IS_REQUIRED – флаг, указывающий обязательно ли свойство для заполнения;

IS_VISIBLE – флаг, указывающий на необходимость отображать свойство в табличной части экранной формы документа, используется для сокрытия служебных полей.

DEFAULT_VALUE – значение свойства по умолчанию, которое подставляется автоматически при создании нового элемента содержимого табличной части.

table Свойство табличной части документа может быть ссылкой на справочник, взаимосвязи такого рода хранятся в таблице TBLPART_TOONEREFS:

NAME – название взаимосвязи, определяет название свойства класса строки табличной части типа класса, на который оно ссылается;

CAPTION – отображаемое в экранных формах название взаимосвязи;

TBLPART_OBJ_ID (FK) – табличная часть документа, свойство которой является ссылкой на справочник;

PROP_OBJ_ID (FK) – свойство табличной части документа, которое является ссылкой на справочник. В качестве значения типа этого свойства (TYPE_ID) должен быть выбран long;

REF_DICT_OBJ_ID (FK) – справочник, на который ссылается указанное свойство.

Кроме свойств табличных частей, описываемых прикладным разработчиком, также, как и для шапки документа, существуют свойства предопределенные разработчиками системы. Они будут добавлены в каждую создаваемую в прикладной схеме базы данных таблицу нового типа табличной части:

ID – идентификатор записи (первичный ключ), заполняется автоматически с помощью инкрементирующего счетчика;

DOCUMENT_ID (FK) – ссылка на документ, с которым связана табличная часть, заполняется автоматически;

TP_ENTRY_ID (FK) – код вхождения табличной части в документ, соответствует записи в DOC_TBLPARTS;

IS_ALIVEфлаг, указывающий удалено ли содержимое табличной части (false – удалено, true – нет);

FLAG – флаг, доступный для редактирования конечному пользователю в виде элемента checkbox в экранной форме документа.

output В результате заполнения всех обязательных атрибутов и свойств в прикладной схеме базы данных будет создана новая таблица TP_TABLE_NAME с обязательными полями плюс полями COLUMN_NAME, которая будет использоваться для хранения данных нового типа табличной части документов.

table В таблице DOC_TBLPARTS описываются и хранятся взаимосвязи типов документов и табличных частей:

NAME – название взаимосвязи, определяет название коллекции экземпляров класса строки табличной части;

CAPTIONотображаемое в экранных формах название табличной части, подставляется по умолчанию из соответствующего атрибута TABLE_PART_TYPES, может быть изменено;

DOC_TYPE_OBJ_ID (FK) – ссылка на тип документа, заполняется автоматически;

TBL_TYPE_OBJ_ID (FK) – ссылка на тип табличной части документа, которая связана с данным типом документа;

HANDLER_OBJ_ID (FK) – обработчик проведения для данного типа табличной части этого типа документов;

SOFT_DELETION – флаг, указывающий на необходимость мягкого удаления содержимого табличной части этого типа. Если он установлен в значение true, содержимое соответствующей табличной части этого типа документов при удалении останется в базе данных и будет доступно для восстановления. Обычно используется для табличных частей, содержимое которых вводится руками, для автоматически генерируемых рекомендуется устанавливать флаг в значение false.

table В таблице PARENT_DOCUMENTS хранятся взаимосвязи документов-родителей и документов-потомков:

PARENT_DOC_ID (FK) – ссылка на документ-родитель;

CHILD_DOC_ID (FK) – ссылка на документ-потомок;

LINK_ID (FK) – тип взаимосвязи.

table В таблице DOC_LINKS хранятся типы взаимосвязей документов-родителей и документов-потомков:

NAME – название типа взаимосвязи, служит для описания механизма связи. Например, "Накладная сгенерирована на основании заказа".