/
Alexandr_Pidkasisty
/
froma2
Обзор
Документация
Войти
/
Alexandr_Pidkasisty
/
froma2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
libsource/agregate_module.h
437 строк
25 KB
Alexandr Pidkasisty
Изменил семантику включения заголовочных файлов библиотеки froma2 в модуль agregate (использовал кавычки вместо угловых скобок)
26 июл 2026, 12:17
Верифицирован
26 июл 2026, 12:17
e2b266c
Код
Авторство
О чём код?
/** ���� ���� �������� ������ ���������� ������������ ����������� ��� �������������� �������������, ����������� ������� � ������������ ������������ ������������ ����������� "Free Operation Manager 2" (���������� FROMA2). **/ /****************************************************************************************************/ /****************************************************************************************************/ /*** ***/ /*** Copyright � 2025 ����������� ��������� �������� ***/ /*** ***/ /*** ������ �������� ��������� �����, ���������� ����� ������� ������������ ����������� � ***/ /*** ������������� ������������ (����� � ����������� �����������), ������������ ������������ ***/ /*** ����������� ����������� ��� �����������, ������� �������������� ����� �� �������������, ***/ /*** �����������, ���������, �������, ����������, ���������������, ����������������� �/��� ***/ /*** ������� ����� ������������ �����������, � ����� �����, ������� ��������������� ������ ***/ /*** ����������� �����������, ��� ���������� ��������� �������: ***/ /*** ***/ /*** ��������� ���� ����������� �� ��������� ����� � ������ ������� ������ ���� �������� �� ***/ /*** ��� ����� ��� �������� ����� ������� ������������ �����������. ***/ /*** ***/ /*** ������ ����������� ����������� ��������������� ���� ���ܻ, ��� �����-���� ��������, ���� ***/ /*** ���������� ��� ���������������, ������� �������� �������� �����������, ������������ �� ***/ /*** ��� ����������� ���������� � ���������� ���������, �� �� ������������� ���. �� � ����� ***/ /*** ������ ������ ��� ��������������� �� ����� ��������������� �� �����-���� �����, �� ����� ***/ /*** ��� �� ���� �����������, � ��� �����, ��� �������� ���������, ������� ��� ���� ��������, ***/ /*** ��������� ��-�� ������������� ������������ ����������� ��� ���� �������� � ����������� ***/ /*** ������������. ***/ /*** ***/ /****************************************************************************************************/ /****************************************************************************************************/ #ifndef FROMA2_AGREGATE_MODULE_H #define FROMA2_AGREGATE_MODULE_H #include "common_values.hpp" // �������� ����� ����, ���������� � ������� ���������� FROMA2 #include "warehouse_module.h" // ���������� ����� ������ clsStorage #include "manufact_module.h" // ���������� ����� ������������ clsManufactory #include "Impex_module.h" // ������ �������� ������ �� ������ #include "baseproject_module.h" // ������������� �������� ������ clsBaseProject #include <variant> // ������������� ���� variant enum Clc_type{seq = sZero, fut, thrd}; // ��������� ������ ���� ����������: ����������������, // � ����������� ������� ��� ���������� const Clc_type clc = thrd; // ��������� � ����������� /** ����������� ���� �������� ���������� **/ typedef variant<clsStorage, clsManufactory> T_agregate; /***************************************************************************************************************/ /** **/ /** ��������� - ���������� ��� ���� T_agregate **/ /** **/ /***************************************************************************************************************/ struct Getter_exporting_data { /** ��������� � �������� ��������� ������ ��� �������� � CSV-�����. ���������� ��������� �� ����� ������ ���� strItem � ������� ��� ������������ ��������. **/ private: strItem* (clsStorage::*fSdata)() const; // ��������� �� ���������� ������� ������ clsStorage strItem* (clsManufactory::*fMdata)() const; // ��������� �� ���������� ������� ������ clsManufactory ChoiseData arr; // ��������� ������ ������: "purchase" - ��������, "balance" // - �������/������������� ������������, "shipment" - �������� public: Getter_exporting_data(const ChoiseData _arr) : arr(_arr) {} // Ctor � ���������� ���������� strItem* operator() (const clsStorage& obj) { // ���������� ��������� �������: if(arr == purchase) fSdata = &clsStorage::GetPure; // �������� ��������� �� ������ ����������� �� ����� else if(arr==balance) fSdata = &clsStorage::GetBal; // �������� ��������� �� ������ �������� �� ������ else fSdata = &clsStorage::GetShip; // �������� ��������� �� ������ �������� �� ������ return (obj.*fSdata)(); // �������� ������ ��� �������� } strItem* operator() (const clsManufactory& obj) { if(arr == purchase) fMdata = &clsManufactory::GetRMPurchPlan; // �������� ��������� �� ������ ����������� ����� else if(arr==balance) fMdata = &clsManufactory::GetTotalBalance;// �������� ������� � ������������� ������������� else fMdata = &clsManufactory::GetTotalProduct; // ����� �������� ������� � ������� ���������� return (obj.*fMdata)(); // �������� ������ ��� �������� } }; // Getter_exporting_data struct Getter_exporting_names { /** ��������� � �������� ��������� ������������ ��� �������� � CSV-�����. ���������� ��������� �� ����� ������ ���� strNameMeas � �������������� �������� � �� ������ ��������� ��� ������������ ��������. **/ private: strNameMeas* (clsManufactory::*fMnames) () const; // ��������� �� ���������� ������� ������ clsManufactory ChoiseData arr; // ��������� ������ ������: "purchase" - ��������, "balance" // - �������/������������� ������������, "shipment" - �������� public: Getter_exporting_names(const ChoiseData _arr) : arr(_arr) {}// Ctor � ���������� ���������� strNameMeas* operator() (const clsStorage& obj) { return obj.GetNameMeas(); // �������� ������ ��� �������� } strNameMeas* operator() (const clsManufactory& obj) { if((arr==balance) || (arr==shipment)) fMnames = &clsManufactory::GetProductDescription; // ��������� �� ������� �������� �������� ��������� else // ����� ��������� �� ������� �������� ��������� fMnames = &clsManufactory::GetRawMatDescription; // �� ����� ������ �������� ����� � ���������� return (obj.*fMnames)(); // �������� ������ ��� �������� } }; // Getter_exporting_names struct Getter_exporting_count { /** ��������� � �������� ��������� ����� �������������� ������� � ������� � �������������� �������� � �� ������ ���������. ���������� ����� ���� size_t. **/ private: const size_t (clsManufactory::*fMcount) () const; // ��������� �� ������� �������� ����� ��������/��������� ChoiseData arr; // ��������� ������ ������: "purchase" - ��������, "balance" // - �������/������������� ������������, "shipment" - �������� public: Getter_exporting_count(const ChoiseData _arr) : arr(_arr) {}// Ctor � ���������� ���������� size_t operator() (const clsStorage& obj) { // �������� ����� ������� return obj.Size(); } size_t operator() (const clsManufactory& obj) { if((arr==balance) || (arr==shipment)) fMcount = &clsManufactory::GetProdCount; // ��������� �� ������� �������� ����� ��������� else fMcount = &clsManufactory::GetRMCount; // �������� ����� ������� ����� � ���������� return (obj.*fMcount)(); } }; // Getter_exporting_count struct Calculater_back { /** ��������� � �������� ������� ����������� � �������� ��� ������� clsStorage � clsManufactory. ����� ������� ���������� � ����������� �� ���������� clc �� ����� ����������. **/ TLack (clsStorage::*fStorageCalc)(size_t); // ���������� ��� ��������� �� ���������� ������� ������ clsStorage void (clsManufactory::*fManufCalc_back)(); // ���������� ��� ��������� �� ���������� ������� ������ clsManufactory TLack operator()(clsStorage& obj) { // �������� ��� �������� clsStorage if constexpr((clc == fut) || (clc == thrd)) if constexpr(clc == fut) fStorageCalc = &clsStorage::Calculate_future; else fStorageCalc = &clsStorage::Calculate_thread; else fStorageCalc = &clsStorage::Calculate; return (obj.*fStorageCalc)(1); // ������ ������������� ������� ��� ������� ����������� � �������� (1) } TLack operator() (clsManufactory& obj) { // �������� ��� �������� clsManufactory if constexpr((clc == fut) || (clc == thrd)) if constexpr(clc == fut) fManufCalc_back = &clsManufactory::CalcRawMatPurchPlan_future; else fManufCalc_back = &clsManufactory::CalcRawMatPurchPlan_thread; else fManufCalc_back = &clsManufactory::CalcRawMatPurchPlan; (obj.*fManufCalc_back)(); return {dZero, EmpStr}; // ��� �������������: ��� ��������� ������ ���������� ��������� ������ � ���� �� ����. } }; // struct Calculater_back struct Calculater_fwrd { /** ��������� � �������� ������� ��������� ��� ������� clsStorage � clsManufactory. ����� ������� ���������� � ����������� �� ���������� clc �� ����� ����������. **/ private: TLack (clsStorage::*fStorageCalc)(size_t); // ���������� ��������� �� ���������� ������� ������ clsStorage bool (clsManufactory::*fManufCalc_fwrd)(); // ���������� ��������� �� ���������� ������� ������ clsManufactory public: TLack operator()(clsStorage& obj) { // �������� ��� �������� clsStorage if constexpr((clc == fut) || (clc == thrd)) if constexpr(clc == fut) fStorageCalc = &clsStorage::Calculate_future; else fStorageCalc = &clsStorage::Calculate_thread; else fStorageCalc = &clsStorage::Calculate; return (obj.*fStorageCalc)(2); // ������ ������������� ������� ��� ������� ���������� (2) } TLack operator() (clsManufactory& obj) { if constexpr((clc == fut) || (clc == thrd)) if constexpr(clc == fut) fManufCalc_fwrd = &clsManufactory::Calculate_future; else fManufCalc_fwrd = &clsManufactory::Calculate_thread; else fManufCalc_fwrd = &clsManufactory::Calculate; bool tmp = (obj.*fManufCalc_fwrd)(); if(tmp) return {dZero, EmpStr}; // ��� �������������: ��� ��������� ������ ���������� ��������� ������ else return {99999.99, "false"};// � ���� �� ����. ���� tmp == false, �� ������� �������� �������� } }; // struct Calculater_fwrd struct Setter_ship { /** ��������� � �������� ����� ������� �������� ��� ������� clsStorage � clsManufactory. ������ �������� � ����������� ��������� �������� � ������������. **/ private: strItem* buffer; // ��������� �� ������ ��� �������� ���������� ���������� ������� public: Setter_ship(strItem* &_buffer) : buffer(nullptr) { std::swap(_buffer, buffer); } // Ctor with Move-parametrs ~Setter_ship() { if(buffer) delete[] buffer; } // Dtor bool operator() (clsStorage& obj) { return obj.SetShipment(move(buffer)); } bool operator() (clsManufactory& obj) { return obj.SetProdPlan(move(buffer)); } }; // Setter_ship struct Getter_ship { /** ��������� � �������� ������ ������� � ����������� ����������� �������� ��� ������� clsStorage � clsManufactory **/ public: strItem* operator() (const clsStorage& obj) { return obj.GetShip(); } strItem* operator() (const clsManufactory& obj) { return obj.GetTotalProduct(); } }; // Getter_ship struct Setter_purch { /** ��������� � �������� ����� ��� � ������� �������� ��� ������� clsStorage � clsManufactory. ���� �������� � ������������. **/ private: strItem* buffer; // ��������� �� ������ ��� �������� ���������� ���������� ������� public: Setter_purch(strItem* &_buffer) : buffer(nullptr) { std::swap(_buffer, buffer); } // Ctor with Move-parametrs ~Setter_purch() { if(buffer) delete[] buffer; } // Dtor bool operator() (clsStorage& obj) { return obj.SetPurchase(move(buffer)); } bool operator() (clsManufactory& obj) { return obj.SetRawMatPrice(move(buffer)); } }; // Setter_purch struct Getter_purch { /** ��������� � �������� ������ ������� �������� � ����������� ��������� ��� ������� clsStorage � clsManufactory **/ public: strItem* operator() (clsStorage& obj) { return obj.GetPure(); } strItem* operator() (clsManufactory& obj) { return obj.GetRMPurchPlan(); } }; // Getter_purch struct Getter_NameMeas { /** ��������� � �������� �������� ��������� �� ����� ����������� ������� � �������������� �������� � ��.��������� ��� ������� clsStorage � clsManufactory **/ strNameMeas* operator() (const clsStorage& obj) { return obj.GetNameMeas(); } strNameMeas* operator() (const clsManufactory& obj) { return obj.GetRawMatDescription(); } }; // Getter_NameMeas struct Setter_progress_message { string Message; // ��������� ���������� ��������� void operator() (clsStorage& obj) { obj.Set_progress_message(move(Message)); } void operator() (clsManufactory& obj) { obj.Set_progress_message(move(Message)); } }; // Setter_progress_message /***************************************************************************************************************/ /** **/ /** ������������ ���� nmAgregate **/ /** **/ /***************************************************************************************************************/ namespace nmAgregate { const size_t w1 = 25, w2 = 12, w3 = 15; // ������� ����� � ������� const size_t precis = 4; // ���������� ������ ����� ������� � ������� const string rTableName = "������������"; const string rTableMeas = "��.���������"; const string rByVolume = "� ����������� ���������"; const string rByPrice = "� �������� ����������� ���������"; const string rByValue = "� ����������� ���������"; const string aPurchase = "�����������"; const string aBalance = "�������/ ������������� ������������"; const string aShipment = "��������"; }; /***************************************************************************************************************/ /** **/ /** clsAgregate **/ /** **/ /***************************************************************************************************************/ class clsAgregate : public clsBaseProject { /** ����� ��� ����������� �������� ���� clsStorage � clsManufactory � ���������������� ������� �� ���� ������� ���� variant. ��������� ������ ������������� ������� ������ - ������������ � ����� � ���������� ������ ��������� ������� CostChain (���������� ������ ������������� ������������). **/ private: public: /** ����������� �� ��������� clsAgregate() �������� � ������ private, ����� ��� ���� ������������ ������ ����� - ���������. **/ void swap(clsAgregate& other) noexcept; /** ������� ������ ���������� ����� ���������. ������� ��������� noexcept - �� ���������� ���������� **/ clsAgregate(const clsAgregate& other); /** ����������� ����������� **/ clsAgregate(clsAgregate&& other); /** ����������� ����������� **/ virtual ~clsAgregate(); // ���������� clsAgregate& operator=(const clsAgregate& rhs); /** ���������� ��������� ������������ ������������. ����������� � ������ �����������-�-������ (copy-and-swap idiom) **/ clsAgregate& operator=(clsAgregate&& rhs); /** ���������� ��������� ������������ ������������. ����������� � ������ �����������-�-������ (move-and-swap idiom) **/ /** Get - ������ **/ size_t ProjectCount(); /** ����� ���������� ���������� �������� ������� **/ size_t Counts(const ChoiseData _arr, const size_t _count); /** ����� ���������� ����� �������� ���������� �������������. ���������: _arr - ��������� ������ ������: "purchase" - ��������, "balance" - �������/������������� ������������, "shipment" - ��������; _count - ������ ���������� �������������: 0 - ������ �������������, ����������� ������� (������� ���������� CostChain � �������� ����); �������������, ����������� ������� ��������� ����� ����� ����� ������� ����� (������� ���������� CostChain � ������������ ��������). **/ strNameMeas* GetNameMeas(const ChoiseData _arr, const size_t _count) const; /** ����� ���������� ��������� �� ����� ������ ���� strNameMeas � ��������� �������� � ��������� ���������. ����� ��������� ������� ����� Counts(_arr, _count). ���������: _arr - ��������� ������ ������: "purchase" - ��������, "balance" - �������/������������� ������������, "shipment" - ��������; _count - ������ ���������� �������������: 0 - ������ �������������, ����������� ������� (������� ���������� CostChain � �������� ����); �������������, ����������� ������� ��������� ����� ����� ����� ������� ����� (������� ���������� CostChain � ������������ ��������).**/ bool Export_Data(const string filename, const size_t _dep, const ChoiseData _arr, const ReportData& flg) const; /** ����� ���������� ������ ��������, �������� ��� �������� ���������� ������������� � csv-���� � ������ filename. ���������: _dep - ������ ������������� � ������� ������������� CostChain; _arr - ����� ������: "purchase" - ��������, "balance" - �������/������������� ������������, "shipment" - ��������; flg - ��� ��������� � ���� ����������: volume - � �����������, value - � �����������, price - � ������� ���������. � �������� ����������� ����� ������ ������������ ������ _ch �� ��������� (';'). **/ bool Detail_report(const size_t _dep, const string _depName[], const ChoiseData _arr, const ReportData& flg) const; /** ������� ������� ��������� �����. ���������: _dep - ������ ������������� � ������� ������������� CostChain; _depName - ��������� �� ������ � ���������� ������������� (����� ��������� �� nullptr; � ���� ������ ������ �������� ������������� � ����� ����� �������� �� ������); _arr - ����� ������: "purchase" - ��������, "balance" - �������/ ������������� ������������, "shipment" - ��������; flg - ��� ��������� � ���� ����������: volume - � �����������, value - � �����������, price - � ������� ���������. ����� ��������� � ���� � ������, ������������ � ���������� clsBaseProject::RName. **/ /** Set - ������ **/ void Set_progress_shell(clsProgress_shell<type_progress>* val); /** ������� ����������� ��������� pshell ������� ������� �� ���������� CostChain ����� ������� val - �������� ��� ���������� ���������. **/ void Set_share(const size_t index, const decimal _share[]); /** ������� ������������� ��������� ������� �� ������. ���������: index - ������ �������� ���������� CostChain, � ������� ��������� ������ ���� clsStorage, _share - ��������� �� ������ � ����������� ������� �������� ��� ������� ��������������� ������. ����� ���������� � ����� �� ������� ��������. **/ void Set_permission(const size_t index, const bool _perm[]); /** ������� ������������� ����������/������ �� �������� � ������� �� ������ � ����� � ��� �� �������. ���������: index - ������ �������� ���������� CostChain, _perm - ��������� �� ������ � ������� ����������. **/ void Set_autopurchase(const size_t index, const PurchaseCalc _pcalc[]); /** ������� ������������� ���� �����������/ ������� ������� ������� �� ������. ���������: index - ������ �������� ���������� CostChain, _pcalc - ��������� �� ������ � ������� �����������.**/ void Set_autopurchase(const size_t index, const size_t _pcalc[]); /** ������� ������������� ���� �����������/ ������� ������� ������� �� ������. ���������: index - ������ �������� ���������� CostChain, _pcalc - ��������� �� ������ � ������� �����������.**/ bool Set_ship_volume(const strItem _Shipment[]); /** ����� ����� ������� �������� � ������������� � ����� ������� ��������. ���������: _Shipment - ��������� �� �������� ������ � ����������. ����� ���������� true ��� ������� ����������� �������� ������� �� ���������� ������ Shipment.**/ bool Set_pur_price(const strItem _Purchase[]); /** ����� ����� ��� �������� � ������������� � ������� ��������. ���������: _Purchase - ��������� �� �������� ������ � ����������. ����� ���������� true ��� ������� ����������� �������� ������� �� ���������� ������ Purchase. **/ bool Set_pur_volume(const strItem _Pur_vol[]); /** ����� ����� ������� �������� � ������������� ���� clsStorage � ����� ������ ��������. ������������ � ������, ����� ���� �� ��� ������ SKU ���������� ���� ������� ����� ������� �������� (���� "nocalc" - ��� ��������������� �������). ��������!!! ����� ���������� �� ������ ������� RCalculate, �������� ����� � ������� ������ Set_ship_volume. ���������: _Pur_vol - ��������� �� �������� ������ � ����������. **/ virtual void Reset() override; /** ����� ���������� ��� ���������� � �������� ������ � ��������� �� ��������� **/ /** View- ������ **/ void ViewSettings() const; /** ������� ������� �� ����� ���������� � ���������� ��� �������. **/ /** ��������� ������ **/ bool RCalculate(const string msg[]); /** ����� ������������ ����� �������� � ����������� ���������, ����������� � ������������� � ������� ��������. ���� ������� ����������� ������ (����� ������ true), � ������� Purchase ����� ����������� ��������� ������. ���������: msg - ��������� �� ������ � �������������� ����������� ���������. **/ bool FCalculate(const string msg[]); /** ����� ������������ �������� � ������ ��������� ��������, ����������� �� ������������� � ������������ ��������. ���� ������� ����������� ������ (����� ������ true), � ������� Shipment ����� ����������� ��������� ������. ���������: msg - ��������� �� ������ � �������������� ����������� ���������. **/ protected: size_t PrCount; // ���������� �������� ������� vector<T_agregate> CostChain; // ��������� ���� variant ��� ����������� �������� ���� clsStorage � clsManufactory strItem* Purchase; // ��������� �� ������ � ������ � �������� �������; ���������� ������ ������� strItem* Shipment; // ��������� �� �������� ������. �� ������ ���������� �������� ������ ��������; // ����� ���� ���������� - ������ � ����������� ������; ���������� ������ ������� size_t sh_size; // ������������ ����� ����� ������� Shipment (����� �������� ����� PrCount) clsAgregate(); /** ����������� �� ���������. ����� ��������� �������� ����������� ������� ������, ����������� ��������� � ������ protected. � ����������� ������� ������������ ���������� ��������� � ������ public. **/ virtual void reportstream(ostream& os) const override; /** ����� ������� ����� � ����� os. ������������ ������������� ������� clsBaseProject::Report **/ /** ������ ������������ � �������������� **/ virtual bool StF(ofstream &_outF) override; /** ����� ������������� ������ � �������� ���������� �������� ���������� ������ (������ � ����, ����� ������������). ���������: &_outF - ������ �� ��������� ������ ofstream ��� ������ ������ **/ virtual bool RfF(ifstream &_inF) override; /** ����� ������������� ������ �� �������� ���������� ���������� ������ (������ �� �����, ����� ��������������). ���������: &_inF - ������ �� ��������� ������ ifstream ��� ������ ������. **/ }; #endif // FROMA2_AGREGATE_MODULE_H