Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование автоматизированных информационных систем на основе о..pdf
Скачиваний:
27
Добавлен:
15.11.2022
Размер:
10.45 Mб
Скачать

для пользователей. Для того чтобы сакцентировать внимание на этом факте, для этих классов был установлен стереотип «boundary».

В спецификации соответствующих прецедентов было указано, что большинство операций с заказами контролируются системой. Поэтому имеет смысл создать классы управления: «OrderControl» (контроль за­ каза) и «OrderPosControl» (контроль строки заказа) - и возложить на них обязанности по контролю за потоком событий. Оба класса выде­ лены стереотипом «control» и содержат некую операцию проверки/подтверждения корректности выполнения действий над заказами и их строками. Назовем данную операцию «submit()». Класс «OrderPos Control» содержит дополнительную операцию «getNet(productCode: char *): double», позволяющую определить остаток по продукту при создании новой строки заказа. Остаток в общем случае рассчитывается вычитанием из прихода товара его расхода и оплаченных, но неотгруженных заказов. Если остаток меньше затребованного количества, то соответствующая строка заказа создана не будет.

Диаграмма классов, объединяющая классы, относящиеся к оформ­ лению заказа, представлена на рис. П3.18.

5.5. Накладная на получение товара

Следующим важным документом, который необходимо рассмот­ реть, является товарно-транспортная накладная. Класс, соответствую­ щий накладной, назовем «Waybill». Товарно-транспортная накладная ассоциирована с получателем и отправителем груза (рис. П3.19).

Рис. П3.19. Ассоциация накладной с грузополучателем и грузоотправителем

Класс «Waybill» содержит следующие атрибуты:

-wbNumber (номер накладной);

-wbDate (дата накладной);

-amount (сумма);

-taxAmount (сумма с налогом);

-netWeight (вес нетто);

-totalWeight (вес брутто по накладной);

-priority (приоритет);

-status (статус накладной);

-factShipmentDate (дата фактической отгрузки);

-factShipmentTime (время фактической отгрузки);

-responsGive (ФИО материально ответственного лица, отпус­ тившего груз);

-cargoRecip (ФИО лица, принявшего груз);

-note (примечания, комментарии);

атакже операции:

-getNetWeight() (получить вес нетто по позициям/строкам на­ кладной);

-getTotalWeight() (получить вес брутто по позициям/строкам накладной).

Накладная, как и заказ, содержит строки, связанные с ней отно­ шением агрегирования (рис. ИЗ.20).

Рис. П3.20. Накладная на отпуск продукции

Класс «WaybillPosition» (строка накладной) содержит атрибуты:

-quantity (количество);

-measureUnit (единица измерения);

-tareWeight (вес упаковки);

-tareKind (вид упаковки);

-price (цена);

-taxPrice (цена с налогом);

-amount (сумма);

-taxAmount (сумма с налогом);

-note (примечания, комментарии).

При описании соответствующих прецедентов было сказано, что накладная, как и ее строки, связана с заказом. Точнее говоря, опла­ ченный заказ служит основанием для выписки накладной. Можно подумать, что накладная является потомком заказа. Но на самом деле нет, поскольку это два совершенно разных документа, играющие аб­ солютно разные роли в бизнес-процессах. Накладная связана с зака­ зом обыкновенной ассоциацией, также как ее строки связаны с соот­ ветствующими строками заказа. При этом мы не исключаем возмож­ ности, что с одного заказа будет выписано несколько накладных. Справедливости ради стоит отметить, что мы могли бы использовать и механизмы наследования, если бы создали некий общий класс - документ, содержащий атрибуты, характерные как для накладной, так и для заказа. В этом случае заказ и накладная были бы производ­ ными классами общего класса-документа.

На рис. П3.21 представлена диаграмма классов, на которой изо­ бражены связи накладной с заказом.

Рис. П3.21. Связь накладной с заказом

Позиция накладной, как и позиция заказа, ассоциирована с про­ дуктом (рис. П3.22).

W a y w b illP o s itio n

-----------------

P ro d u c t

1

1

 

Для реализации работы пользователя с накладными вводятся гра­ ничные классы. При этом необходимо помнить, что работа с наклад­ ными осуществляется как в офисе, так и на складе. Набор опций, предоставляемый офисной формой (бухгалтерский модуль), отлича­ ется от набора опций складской формы (АРМ кладовщика), но ряд опций одинаков для обеих форм. Поэтому создадим базовый класс «WaybillForm» (форма работы с накладной), содержащий следующие общие операции для обеих форм:

-select () (выделить накладную);

-display() (отобразить атрибуты накладной);

-find() (найти накладную);

-changeStatus() (state: char *) (изменить статус накладной). Затем создадим производные классы от «WaybillForm»: «Waybill-

OfficeForm» и «WaybillWarehouseForm» (рис. П3.23).

Рис. П3.23. Отношение наследования для форм работы с накладными

Операции производных классов не нуждаются в комментариях (так как аналогичны тем операциям, которые использовались при описании заказа), за исключением операции «displayPositions», кото­ рая отображает на экране позиции выбранной накладной, и операции «changeDisplayList()», обеспечивающей переход накладной из одного списка в другой при изменении статуса накладной.

Бухгалтер, в отличие от кладовщика, имеет возможность моди­ фицировать накладную, включая ее строки. Поэтому необходимо создать еще один класс поддержки работы со строками (рис. П3.24).

Рис. П3.24. Опции формы бухгалтерского модуля

Рис. П3.25. Опции работы с накладными

По аналогии с заказами создаются классы управления: «WaybillWarehouseControl», «WaybillOfficeControl», «WaybillOfficePosControl». Полная диаграмма классов работы с накладными пред­ ставлена на рис. П3.25.

В разд. 4.2 содержится полное описание процедуры возврата то­ вара клиентом. При этом создается документ - акт возврата товара. Система, как и в ранее описанных случаях работы с документами, предоставляет стандартный набор опций: создание, удаление, печать акта и т.д. Из новых опций только одна - печать договорного согла­ шения. Данная операция называется «printAgreement» и заключается в создании твердой копии договорного соглашения с содержимым, приведенным в разд. 4.2.

Структура класса «RetumAct» (акт возврата) аналогична структу­ ре накладной и заказа. Акт содержит некоторую шапку, в которой указывается номер и дата акта, а также подробное описание причины возврата, т.е. выявленного дефекта, и товарные позиции/строки, ко­ торые содержат информацию о количестве возвращаемого товара.

Рис. П3.26. Диаграмма классов акта возврата товара

Структура и связи акта представлены на рис. П3.26.

Планирование поставок очередной партии товара для дальней­ шей реализации - одна из самых важных задач, решаемая аналитика­ ми, экономистами и логистами. От того, насколько оптимально будет выстроена цепочка поставок, зависит финансовый результат деятель­ ности предприятия.

Мы не будем заострять внимание на разработке интерфейса и форм обработки данных, а рассмотрим структуру самого плана закупок.

Каждый план составляется на определенный период планирования и утверждается руководителем предприятия. Пока этот период не ис­ тек, план является действующим. По истечении периода план закрыва­ ется. Поэтому класс «PurchasePlan» (план закупок) должен иметь ат­ рибуты, определяющие период действия плана и его статус, а также номер и дату составления плана для идентификации в системе:

-planNumber (номер плана);

-planDate (дата составления);

-startDate (дата начала действия плана);

-finishDate (дата окончания действия плана);

-status (статус плана).

Рис. П3.27. План закупок

План составляется для каждой номенклатурной позиции. Поэто­ му необходимо создать еще один класс, который бы детализировал

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]