How-to: Наследование и агрегации
Для демонстрации принципов наследования и агрегирования объектов, реализуем логику по созданию партий на основе документов поступления и производства. Сделаем так, чтобы каждый такой документ, для которого проставлен признак Проведен, автоматически генерировал ровно одну новую партию товара.
Создаем в логике понятие товар, партии которого будут учитываться:
CLASS Item 'Товар';
name 'Имя' = DATA ISTRING[50] (Item) IN id;
FORM items 'Товары'
OBJECTS i = Item
PROPERTIES(i) name, NEW, DELETE
;
NAVIGATOR {
NEW items;
}
Создадим класс Receipt
, объекты которого будут отражать поступление товаров:
CLASS Receipt 'Поступление';
date 'Дата' = DATA DATE (Receipt) IN id;
item 'Товар' = DATA Item (Receipt);
nameItem 'Товар' (Receipt r) = name(item(r)) IN id;
posted 'Проведен' = DATA BOOLEAN (Receipt);
FORM receipts 'Поступления'
OBJECTS r = Receipt
PROPERTIES(r) date, nameItem, posted, NEW, DELETE
;
NAVIGATOR {
NEW receipts;
}
В данном случае, для примера используем упрощенную схему с одним классом. На практике обычно используются два класса: Receipt
(для документов) и ReceiptDetail
(для строк документов).
По аналогии создадим класс Production
, который будет использоваться для отражения производства товаров:
CLASS Production 'Производство';
date 'Дата' = DATA DATE (Production) IN id;
item 'Товар' = DATA Item (Production);
nameItem 'Товар' (Production p) = name(item(p)) IN id;
posted 'Проведен' = DATA BOOLEAN (Production);
FORM productions 'Производства'
OBJECTS p = Production
PROPERTIES(p) date, nameItem, posted, NEW, DELETE
;
NAVIGATOR {
NEW productions;
}