Загрузка данных


@startuml
skinparam shadowing false
skinparam classFontSize 11
skinparam dpi 300
skinparam monochrome true

package "Справочники" {
    class Номенклатура {
        **+ ID** : Integer <<PK>>
        + Наименование
        + Артикул
        + ВидНоменклатуры : ВидыНоменклатуры <<FK>>
    }
    class ПричиныБрака {
        **+ ID** : Integer <<PK>>
        + Наименование
        + Описание
    }
    class Подразделения {
        **+ ID** : Integer <<PK>>
        + Наименование
        + ЭтоГруппа
    }
    class Склады {
        **+ ID** : Integer <<PK>>
        + Наименование
        + ТипСклада
    }
    class Сотрудники {
        **+ ID** : Integer <<PK>>
        + ФИО
        + Должность
    }
    class ВидыНоменклатуры {
        **+ ID** : Integer <<PK>>
        + Наименование
    }
}

package "Документы" {
    class ПоступлениеПродукции {
        **+ ID** : Integer <<PK>>
        + Номер : String
        + Дата : Date
        + Подразделение : Подразделения <<FK>>
        + Склад : Склады <<FK>>
        + Сотрудник : Сотрудники <<FK>>
        --
        + ТЧ Продукция
    }
    
    class ВыявлениеБрака {
        **+ ID** : Integer <<PK>>
        + Номер : String
        + Дата : Date
        + Подразделение : Подразделения <<FK>>
        + Склад : Склады <<FK>>
        + Сотрудник : Сотрудники <<FK>>
        --
        + ТЧ Брак
        + ПечатнаяФорма()
        + QRКод : Картинка
    }
}

package "Регистры" {
    class БракПродукции {
        **+ Запись** : Integer <<PK>>
        + Период : Date
        + Подразделение : Подразделения <<FK>>
        + Склад : Склады <<FK>>
        + Номенклатура : Номенклатура <<FK>>
        + ПричинаБрака : ПричиныБрака <<FK>>
        + Количество : Decimal
    }
}

package "Отчеты" {
    class ВедомостьПоБраку {
        + Период
        + Группировка (Подразделение, Номенклатура, ПричинаБрака)
        + Итоги по количеству
    }
    class АнализБракаПоПричинам {
        + Период
        + Диаграмма по причинам брака
    }
    class БракПоПодразделениям {
        + Период
        + Группировка по подразделениям
    }
}

package "Обработки" {
    class ЗагрузкаИзExcel {
        + ЗагрузитьНоменклатуру()
        + ЗагрузитьПричиныБрака()
    }
    class ГенерацияQRКода {
        + Сгенерировать()
        + СохранитьВФайл()
    }
}

' ==================== Связи ====================

Номенклатура "1" --> "1" ВидыНоменклатуры : ВидНоменклатуры

ВыявлениеБрака "1" *-- "0..*" Номенклатура : Брак.Номенклатура
ВыявлениеБрака "1" *-- "0..*" ПричиныБрака : Брак.ПричинаБрака

ПоступлениеПродукции "1" --> "0..*" Номенклатура : Продукция.Номенклатура

БракПродукции --> Подразделения
БракПродукции --> Склады
БракПродукции --> Номенклатура
БракПродукции --> ПричиныБрака

' Движения
ВыявлениеБрака ..> БракПродукции : формирует движения

' Отчеты
ВедомостьПоБраку ..> БракПродукции : использует
АнализБракаПоПричинам ..> БракПродукции : использует
БракПоПодразделениям ..> БракПродукции : использует

note right of ВыявлениеБрака
  <b>Основной документ</b>
  Печать + QR-код
end note

note right of ЗагрузкаИзExcel
  Импорт из Excel
  с поддержкой видов номенклатуры
end note

@enduml