From 45c152e4565f4bdbf25d6082b7890bd4a540115f Mon Sep 17 00:00:00 2001 From: fishca Date: Thu, 12 Feb 2026 22:54:44 +0300 Subject: [PATCH 1/6] refactor: partial migration to smart pointers --- src/BaseMetadataObject.cpp | 11 +- src/BaseMetadataObject.h | 3 +- src/ChartOfAccounts.cpp | 28 ++-- src/ChartOfAccounts.h | 3 +- src/ChartOfCharacteristicTypes.cpp | 16 +-- src/Enums.cpp | 31 ++--- src/Enums.h | 3 +- src/MainUnit.cpp | 22 +-- src/MainUnit.h | 4 +- src/MetaDataManager.cpp | 30 ++--- src/MetaDataManager.h | 72 +++++----- src/MetadataObjectInformationRegister.cpp | 20 +-- src/MetadataObjectWithSections.cpp | 16 +-- src/Numerators.cpp | 4 +- src/Numerators.h | 3 +- src/Parse_tree.h | 4 + src/Sequences.cpp | 4 +- src/Sequences.h | 3 +- src/SmartPointers.h | 155 ++++++++++++++++++++++ 19 files changed, 286 insertions(+), 146 deletions(-) create mode 100644 src/SmartPointers.h diff --git a/src/BaseMetadataObject.cpp b/src/BaseMetadataObject.cpp index edfae12..248915d 100644 --- a/src/BaseMetadataObject.cpp +++ b/src/BaseMetadataObject.cpp @@ -18,7 +18,7 @@ __fastcall BaseMetadataObject::BaseMetadataObject(v8catalog* _parent, const Stri { guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); name = ""; // Имя будет инициализировано в производных классах } @@ -27,17 +27,12 @@ __fastcall BaseMetadataObject::BaseMetadataObject(v8catalog* _parent, const Stri name = _name; guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } __fastcall BaseMetadataObject::~BaseMetadataObject() { - // Освобождение ресурсов, если необходимо - if (root_data) - { - delete root_data; - //root_data = nullptr; - } + // unique_ptr автоматически освобождает память } String __fastcall BaseMetadataObject::GetName() diff --git a/src/BaseMetadataObject.h b/src/BaseMetadataObject.h index c8bbdc1..3696a12 100644 --- a/src/BaseMetadataObject.h +++ b/src/BaseMetadataObject.h @@ -5,6 +5,7 @@ //--------------------------------------------------------------------------- #include +#include #include "Class_1CD.h" #include "APIcfBase.h" #include "Parse_tree.h" @@ -23,7 +24,7 @@ class BaseMetadataObject : public TObject // Общие поля String name; String guid; - tree* root_data; + std::unique_ptr root_data; v8catalog* parent; // Конструкторы diff --git a/src/ChartOfAccounts.cpp b/src/ChartOfAccounts.cpp index d4c8a39..ee10a2a 100644 --- a/src/ChartOfAccounts.cpp +++ b/src/ChartOfAccounts.cpp @@ -19,7 +19,7 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& { guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& _guid, const String& _name) @@ -27,11 +27,11 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& name = _name; guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); // Получаем имена реквизитов attributes.clear(); - tree* node_att = root_data; + tree* node_att = root_data.get(); node_att = &(*node_att)[0][7][1]; // количество элементов int CountAtt = node_att->get_value().ToInt(); @@ -39,7 +39,7 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& for (int i = 0; i < CountAtt; i++) { try { - tree* node_att_att = root_data; + tree* node_att_att = root_data.get(); node_att_att = &(*node_att_att)[0][7][i+CountAtt-Delta][0][1][1][1][2]; String NameAtt = node_att_att->get_value(); attributes.push_back(std::make_unique(NameAtt, "")); @@ -49,13 +49,13 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& // получаем признаки учета accflags.clear(); - tree* node_acc = root_data; + tree* node_acc = root_data.get(); node_acc = &(*node_acc)[0][8][1]; // количество элементов int CountAcc = node_acc->get_value().ToInt(); int DeltaAcc = CountAcc - 2; for (int i = 0; i < CountAcc; i++) { - tree* node_acc_acc = root_data; + tree* node_acc_acc = root_data.get(); node_acc_acc = &(*node_acc_acc)[0][8][i+CountAcc-DeltaAcc][0][1][1][1][2]; String NameAcc = node_acc_acc->get_value(); accflags.push_back(std::make_unique(NameAcc, "")); @@ -63,13 +63,13 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& // получаем признаки учета субконто dimaccflags.clear(); - tree* node_acc_dim = root_data; + tree* node_acc_dim = root_data.get(); node_acc_dim = &(*node_acc_dim)[0][9][1]; // количество элементов int CountAcc_dim = node_acc_dim->get_value().ToInt(); int DeltaAcc_dim = CountAcc_dim - 2; for (int i = 0; i < CountAcc_dim; i++) { - tree* node_acc_acc_dim = root_data; + tree* node_acc_acc_dim = root_data.get(); node_acc_acc_dim = &(*node_acc_acc_dim)[0][9][i+CountAcc_dim-DeltaAcc_dim][0][1][1][1][2]; String NameAcc_dim = node_acc_acc_dim->get_value(); dimaccflags.push_back(std::make_unique(NameAcc_dim, "")); @@ -78,13 +78,13 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& // Получаем табличные части tabulars.clear(); - tree* node_att_t = root_data; + tree* node_att_t = root_data.get(); node_att_t = &(*node_att_t)[0][5][1]; // количество элементов int CountAttTab = node_att_t->get_value().ToInt(); int DeltaTab = CountAttTab - 2; for (int i = 0; i < CountAttTab; i++) { - tree* node_att_tab = root_data; + tree* node_att_tab = root_data.get(); node_att_tab = &(*node_att_tab)[0][5][i+CountAttTab-DeltaTab][0][1][5][1][2]; String NameAttTab = node_att_tab->get_value(); tabulars.push_back(std::make_unique(NameAttTab, "")); @@ -92,7 +92,7 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& // Получаем имена форм forms.clear(); - tree* node = root_data; + tree* node = root_data.get(); node = &(*node)[0][6][0]; int CountChild = (node->get_next())->get_value().ToInt(); @@ -109,7 +109,7 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& // Получаем имена команд comands.clear(); - tree* node_att_c = root_data; + tree* node_att_c = root_data.get(); node_att_c = &(*node_att_c)[0][3][1]; // количество элементов @@ -117,14 +117,14 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& int DeltaCom = CountCom - 2; for (int i = 0; i < CountCom; i++) { - tree* node_com = root_data; + tree* node_com = root_data.get(); node_com = &(*node_com)[0][3][i+CountCom-DeltaCom][0][1][3][2][9][2]; String NameCom = node_com->get_value(); comands.push_back(std::make_unique(NameCom, "")); } // Получаем макеты moxels.clear(); - tree* node_mox = root_data; + tree* node_mox = root_data.get(); node_mox = &(*node_mox)[0][4][0]; int CountMox = (node_mox->get_next())->get_value().ToInt(); diff --git a/src/ChartOfAccounts.h b/src/ChartOfAccounts.h index 01b01c4..e66d4a3 100644 --- a/src/ChartOfAccounts.h +++ b/src/ChartOfAccounts.h @@ -4,6 +4,7 @@ #define ChartOfAccountsH //--------------------------------------------------------------------------- #include +#include #include "Class_1CD.h" #include "APIcfBase.h" #include "Parse_tree.h" @@ -17,7 +18,7 @@ class TChartOfAccounts : public TObject { public: - tree* root_data; + std::unique_ptr root_data; v8catalog* parent; String name; diff --git a/src/ChartOfCharacteristicTypes.cpp b/src/ChartOfCharacteristicTypes.cpp index e258a9b..de4f729 100644 --- a/src/ChartOfCharacteristicTypes.cpp +++ b/src/ChartOfCharacteristicTypes.cpp @@ -33,7 +33,7 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() auto& attributes = getAttributes(); // Получаем имена реквизитов attributes.clear(); - tree* node_att = root_data; + tree* node_att = root_data.get(); node_att = &(*node_att)[0][3][1]; // количество элементов int CountAtt = node_att->get_value().ToInt(); @@ -41,7 +41,7 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() for (int i = 0; i < CountAtt; i++) { try { - tree* node_att_att = root_data; + tree* node_att_att = root_data.get(); node_att_att = &(*node_att_att)[0][3][i+CountAtt-Delta][0][1][1][1][2]; String NameAtt = node_att_att->get_value(); attributes.push_back(std::make_unique(NameAtt, "")); @@ -52,13 +52,13 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() // Получаем табличные части auto& tabulars = getTabularSections(); tabulars.clear(); - tree* node_att_t = root_data; + tree* node_att_t = root_data.get(); node_att_t = &(*node_att_t)[0][5][1]; // количество элементов int CountAttTab = node_att_t->get_value().ToInt(); int DeltaTab = CountAttTab - 2; for (int i = 0; i < CountAttTab; i++) { - tree* node_att_tab = root_data; + tree* node_att_tab = root_data.get(); node_att_tab = &(*node_att_tab)[0][5][i+CountAttTab-DeltaTab][0][1][5][1][2]; String NameAttTab = node_att_tab->get_value(); tabulars.push_back(std::make_unique(NameAttTab, "")); @@ -67,7 +67,7 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() // Получаем имена форм auto& forms = getForms(); forms.clear(); - tree* node = root_data; + tree* node = root_data.get(); node = &(*node)[0][7][0]; int CountChild = (node->get_next())->get_value().ToInt(); @@ -85,7 +85,7 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() // Получаем имена команд auto& comands = getCommands(); comands.clear(); - tree* node_att_c = root_data; + tree* node_att_c = root_data.get(); node_att_c = &(*node_att_c)[0][6][1]; // количество элементов @@ -93,7 +93,7 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() int DeltaCom = CountCom - 2; for (int i = 0; i < CountCom; i++) { - tree* node_com = root_data; + tree* node_com = root_data.get(); node_com = &(*node_com)[0][6][i+CountCom-DeltaCom][0][1][3][2][9][2]; String NameCom = node_com->get_value(); comands.push_back(std::make_unique(NameCom, "")); @@ -101,7 +101,7 @@ void __fastcall TChartOfCharacteristicTypes::initializeFromTree() // Получаем макеты auto& moxels = getLayouts(); moxels.clear(); - tree* node_mox = root_data; + tree* node_mox = root_data.get(); node_mox = &(*node_mox)[0][4][0]; int CountMox = (node_mox->get_next())->get_value().ToInt(); diff --git a/src/Enums.cpp b/src/Enums.cpp index db16041..169a941 100644 --- a/src/Enums.cpp +++ b/src/Enums.cpp @@ -19,7 +19,7 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid) { guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& _name) @@ -27,11 +27,11 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& name = _name; guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); // Получаем значения перечисления attributes.clear(); - tree* node_att = root_data; + tree* node_att = root_data.get(); node_att = &(*node_att)[0][6][1]; // количество элементов int CountAtt = node_att->get_value().ToInt(); @@ -39,7 +39,7 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& for (int i = 0; i < CountAtt; i++) { try { - tree* node_att_att = root_data; + tree* node_att_att = root_data.get(); node_att_att = &(*node_att_att)[0][6][i+CountAtt-Delta][0][1][2]; String NameAtt = node_att_att->get_value(); attributes.push_back(NameAtt); // здесь уже имена @@ -47,23 +47,10 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& } catch (...) { } } -// // Получаем табличные части -// tabulars.clear(); -// tree* node_att_t = root_data; -// node_att_t = &(*node_att_t)[0][3][1]; // количество элементов -// int CountAttTab = node_att_t->get_value().ToInt(); -// int DeltaTab = CountAttTab - 2; -// for (int i = 0; i < CountAttTab; i++) -// { -// tree* node_att_tab = root_data; -// node_att_tab = &(*node_att_tab)[0][3][i+CountAttTab-DeltaTab][0][1][5][1][2]; -// String NameAttTab = node_att_tab->get_value(); -// tabulars.push_back(NameAttTab); // здесь уже имена -// } -// + // Получаем имена форм forms.clear(); - tree* node = root_data; + tree* node = root_data.get(); node = &(*node)[0][3][0]; int CountChild = (node->get_next())->get_value().ToInt(); @@ -80,7 +67,7 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& // Получаем имена команд comands.clear(); - tree* node_att_c = root_data; + tree* node_att_c = root_data.get(); node_att_c = &(*node_att_c)[0][5][1]; // количество элементов @@ -88,7 +75,7 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& int DeltaCom = CountCom - 2; for (int i = 0; i < CountCom; i++) { - tree* node_com = root_data; + tree* node_com = root_data.get(); node_com = &(*node_com)[0][5][i+CountCom-DeltaCom][0][1][3][2][9][2]; String NameCom = node_com->get_value(); comands.push_back(NameCom); // здесь уже имена @@ -96,7 +83,7 @@ __fastcall TEnums::TEnums(v8catalog *_parent, const String& _guid, const String& // Получаем макеты moxels.clear(); - tree* node_mox = root_data; + tree* node_mox = root_data.get(); node_mox = &(*node_mox)[0][4][0]; int CountMox = (node_mox->get_next())->get_value().ToInt(); diff --git a/src/Enums.h b/src/Enums.h index 1620fc0..3308c4c 100644 --- a/src/Enums.h +++ b/src/Enums.h @@ -4,6 +4,7 @@ #define EnumsH //--------------------------------------------------------------------------- #include +#include #include "Class_1CD.h" #include "APIcfBase.h" #include "Parse_tree.h" @@ -12,7 +13,7 @@ class TEnums : public TObject { public: - tree* root_data; + std::unique_ptr root_data; v8catalog* parent; String name; diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 12fb069..434da66 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -2386,12 +2386,8 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) String filename = dlgOpenCF->FileName; EditNameCF->Text = filename; - // Удаляем предыдущую конфигурацию - if (GlobalCF) - { - delete GlobalCF; - GlobalCF = nullptr; - } + // Удаляем предыдущую конфигурацию (автоматически через unique_ptr) + GlobalCF.reset(); // Очищаем все TObjectList mdCatalogs->Clear(); @@ -2443,9 +2439,9 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) mdIntegrationServices->Clear(); mdSequences->Clear(); - GlobalCF = new v8catalog(filename, true); + GlobalCF = std::make_unique(filename, true); - get_cf_name(GlobalCF, mess); + get_cf_name(GlobalCF.get(), mess); VirtualStringTreeValue1C->BeginUpdate(); try @@ -2709,9 +2705,7 @@ String GetNameSubsystem(v8catalog *cf, String &guid_md) Result = node->get_value(); // имя подсистемы - delete tree_md; - return Result; } void GetListChildrenSubsystem(v8catalog *cf, String &guid_md, std::vector& child) @@ -2744,7 +2738,6 @@ void GetListChildrenSubsystem(v8catalog *cf, String &guid_md, std::vector &md_subsys) String guid_md = GUID_Subsystems; - v8catalog *cf = MainForm->GlobalCF; + v8catalog *cf = MainForm->GlobalCF.get(); tree* node_md = find_node_by_guid(tr, guid_md); @@ -2794,7 +2787,7 @@ void fill_md(tree* tr, String guid_md, std::vector &md_list) tree* node; String s; - v8catalog *cf = MainForm->GlobalCF; + v8catalog *cf = MainForm->GlobalCF.get(); //tree* node_md = find_node_by_guid(tr, guid_md); //"cf4abea6-37b2-11d4-940f-008048da11f9" @@ -3109,7 +3102,6 @@ void fill_md(tree* tr, String guid_md, std::vector &md_list) MainForm->mdBots->Add(CurBot); } md_list.push_back(val); - delete tree_md; } } @@ -3411,7 +3403,7 @@ void get_cf_name(tree* tr, Messager* mess) void __fastcall TMainForm::FormDestroy(TObject *Sender) { - delete GlobalCF; + // GlobalCF автоматически удаляется через std::unique_ptr } //--------------------------------------------------------------------------- diff --git a/src/MainUnit.h b/src/MainUnit.h index f6f32b1..2ca3839 100644 --- a/src/MainUnit.h +++ b/src/MainUnit.h @@ -21,6 +21,7 @@ #include #include +#include #include "Requisite.h" #include "Comand.h" @@ -35,6 +36,7 @@ #include "MessageRegistration.h" #include "MetaDataManager.h" #include "Parse_tree.h" +#include "SmartPointers.h" #include "SynEdit.hpp" #include "SynMemo.hpp" #include "SynEditHighlighter.hpp" @@ -320,7 +322,7 @@ class TMainForm : public TForm std::vector Sequences; TObjectList *mdSequences; - v8catalog *GlobalCF; + std::unique_ptr GlobalCF; }; //--------------------------------------------------------------------------- extern PACKAGE TMainForm *MainForm; diff --git a/src/MetaDataManager.cpp b/src/MetaDataManager.cpp index 0d80f01..7013eef 100644 --- a/src/MetaDataManager.cpp +++ b/src/MetaDataManager.cpp @@ -642,91 +642,91 @@ void MetaDataManager::fill_md(v8catalog *cf, tree* tr, String guid_md) } // Метод для получения списка параметров сеанса -vector>& MetaDataManager::getSessionParameters() +std::vector>& MetaDataManager::getSessionParameters() { return SessionParameters; } // Метод для получения списка общих реквизитов -vector>& MetaDataManager::getCommonAttributes() +std::vector>& MetaDataManager::getCommonAttributes() { return CommonAttributes; } // Метод для получения списка общих команд -vector>& MetaDataManager::getCommonCommands() +std::vector>& MetaDataManager::getCommonCommands() { return CommonCommands; } // Метод для получения списка общих макетов -vector>& MetaDataManager::getCommonTemplates() +std::vector>& MetaDataManager::getCommonTemplates() { return CommonTemplates; } // Метод для получения списка групп команд -vector>& MetaDataManager::getCommandGroups() +std::vector>& MetaDataManager::getCommandGroups() { return CommandGroups; } // Метод для получения списка планов обмена -vector>& MetaDataManager::getExchangePlans() +std::vector>& MetaDataManager::getExchangePlans() { return ExchangePlans; } // Метод для получения списка подписок на события -vector>& MetaDataManager::getEventSubscriptions() +std::vector>& MetaDataManager::getEventSubscriptions() { return EventSubscriptions; } // Метод для получения списка регламентных заданий -vector>& MetaDataManager::getScheduledJobs() +std::vector>& MetaDataManager::getScheduledJobs() { return ScheduledJobs; } // Метод для получения списка ботов -vector>& MetaDataManager::getBots() +std::vector>& MetaDataManager::getBots() { return Bots; } // Метод для получения списка функциональных опций -vector>& MetaDataManager::getFunctionalOptions() +std::vector>& MetaDataManager::getFunctionalOptions() { return FunctionalOptions; } // Метод для получения списка параметров функциональных опций -vector>& MetaDataManager::getFunctionalOptionsParameters() +std::vector>& MetaDataManager::getFunctionalOptionsParameters() { return FunctionalOptionsParameters; } // Метод для получения списка определяемых типов -vector>& MetaDataManager::getDefinedTypes() +std::vector>& MetaDataManager::getDefinedTypes() { return DefinedTypes; } // Метод для получения списка хранилищ настроек -vector>& MetaDataManager::getSettingsStorages() +std::vector>& MetaDataManager::getSettingsStorages() { return SettingsStorages; } // Метод для получения списка интерфейсов -vector>& MetaDataManager::getInterfaces() +std::vector>& MetaDataManager::getInterfaces() { return Interfaces; } // Метод для получения списка констант -vector>& MetaDataManager::getConstants() +std::vector>& MetaDataManager::getConstants() { return Constants; } diff --git a/src/MetaDataManager.h b/src/MetaDataManager.h index f212113..56f7be9 100644 --- a/src/MetaDataManager.h +++ b/src/MetaDataManager.h @@ -36,51 +36,51 @@ #include "SettingsStorages.h" #include "Interfaces.h" - -using namespace std; +// Примечание: НЕ используем "using namespace std" в заголовочных файлах +// Все типы используются с явным пространством имен std:: class MetaDataManager { private: - map>> ObjectsByType; - vector> SessionParameters; - vector> Roles; - vector> Bots; - vector> CommonAttributes; - vector> CommonCommands; - vector> Constants; - vector> CommonTemplates; - vector> CommandGroups; - vector> ExchangePlans; - vector> EventSubscriptions; - vector> ScheduledJobs; - vector> FunctionalOptions; - vector> FunctionalOptionsParameters; - vector> DefinedTypes; - vector> SettingsStorages; - vector> Interfaces; + std::map>> ObjectsByType; + std::vector> SessionParameters; + std::vector> Roles; + std::vector> Bots; + std::vector> CommonAttributes; + std::vector> CommonCommands; + std::vector> Constants; + std::vector> CommonTemplates; + std::vector> CommandGroups; + std::vector> ExchangePlans; + std::vector> EventSubscriptions; + std::vector> ScheduledJobs; + std::vector> FunctionalOptions; + std::vector> FunctionalOptionsParameters; + std::vector> DefinedTypes; + std::vector> SettingsStorages; + std::vector> Interfaces; public: v8catalog* loadFromFile(const String& filename); bool Initialize(v8catalog* cf); void fill_md(v8catalog *cf, tree* tr, String guid_md); void populateTreeView(TVirtualStringTree* tvSringTree); - shared_ptr getObject(const String& type, const String& name); - vector>& getSessionParameters(); - vector>& getRoles(); - vector>& getBots(); - vector>& getCommonAttributes(); - vector>& getCommonCommands(); - vector>& getConstants(); - vector>& getCommonTemplates(); - vector>& getCommandGroups(); - vector>& getExchangePlans(); - vector>& getEventSubscriptions(); - vector>& getScheduledJobs(); - vector>& getFunctionalOptions(); - vector>& getFunctionalOptionsParameters(); - vector>& getDefinedTypes(); - vector>& getSettingsStorages(); - vector>& getInterfaces(); + std::shared_ptr getObject(const String& type, const String& name); + std::vector>& getSessionParameters(); + std::vector>& getRoles(); + std::vector>& getBots(); + std::vector>& getCommonAttributes(); + std::vector>& getCommonCommands(); + std::vector>& getConstants(); + std::vector>& getCommonTemplates(); + std::vector>& getCommandGroups(); + std::vector>& getExchangePlans(); + std::vector>& getEventSubscriptions(); + std::vector>& getScheduledJobs(); + std::vector>& getFunctionalOptions(); + std::vector>& getFunctionalOptionsParameters(); + std::vector>& getDefinedTypes(); + std::vector>& getSettingsStorages(); + std::vector>& getInterfaces(); MetaDataManager() = default; // Явно указываем использование конструктора по умолчанию MetaDataManager(const MetaDataManager&) = delete; // запретить копирование diff --git a/src/MetadataObjectInformationRegister.cpp b/src/MetadataObjectInformationRegister.cpp index cc04e38..f02926e 100644 --- a/src/MetadataObjectInformationRegister.cpp +++ b/src/MetadataObjectInformationRegister.cpp @@ -33,14 +33,14 @@ void MetadataObjectInformationRegister::initializeFromTreeWithPaths(const InfoRe // Реквизиты attributes.clear(); - tree* node_att = root_data; + tree* node_att = root_data.get(); node_att = &(*node_att)[0][paths.attIdx][1]; int CountAtt = node_att->get_value().ToInt(); int Delta = CountAtt - 2; for (int i = 0; i < CountAtt; i++) { try { - tree* itemNode = &(*root_data)[0][paths.attIdx][i + CountAtt - Delta]; + tree* itemNode = &(*root_data.get())[0][paths.attIdx][i + CountAtt - Delta]; for (size_t p = 0; p < paths.attItemPath.size(); p++) itemNode = &(*itemNode)[paths.attItemPath[p]]; String NameAtt = itemNode->get_value(); @@ -51,14 +51,14 @@ void MetadataObjectInformationRegister::initializeFromTreeWithPaths(const InfoRe // Измерения dimensions.clear(); - tree* node_dim = root_data; + tree* node_dim = root_data.get(); node_dim = &(*node_dim)[0][paths.dimIdx][1]; int CountDim = node_dim->get_value().ToInt(); int DeltaDim = CountDim - 2; for (int i = 0; i < CountDim; i++) { try { - tree* itemNode = &(*root_data)[0][paths.dimIdx][i + CountDim - DeltaDim]; + tree* itemNode = &(*root_data.get())[0][paths.dimIdx][i + CountDim - DeltaDim]; for (size_t p = 0; p < paths.dimItemPath.size(); p++) itemNode = &(*itemNode)[paths.dimItemPath[p]]; String NameDim = itemNode->get_value(); @@ -69,14 +69,14 @@ void MetadataObjectInformationRegister::initializeFromTreeWithPaths(const InfoRe // Ресурсы resources.clear(); - tree* node_res = root_data; + tree* node_res = root_data.get(); node_res = &(*node_res)[0][paths.resIdx][1]; int CountRes = node_res->get_value().ToInt(); int DeltaRes = CountRes - 2; for (int i = 0; i < CountRes; i++) { try { - tree* itemNode = &(*root_data)[0][paths.resIdx][i + CountRes - DeltaRes]; + tree* itemNode = &(*root_data.get())[0][paths.resIdx][i + CountRes - DeltaRes]; for (size_t p = 0; p < paths.resItemPath.size(); p++) itemNode = &(*itemNode)[paths.resItemPath[p]]; String NameRes = itemNode->get_value(); @@ -87,7 +87,7 @@ void MetadataObjectInformationRegister::initializeFromTreeWithPaths(const InfoRe // Формы forms.clear(); - tree* node = root_data; + tree* node = root_data.get(); node = &(*node)[0][paths.formsIdx][0]; int CountChild = (node->get_next())->get_value().ToInt(); tree* curNodeChild = node->get_next(); @@ -104,13 +104,13 @@ void MetadataObjectInformationRegister::initializeFromTreeWithPaths(const InfoRe // Команды comands.clear(); - tree* node_att_c = root_data; + tree* node_att_c = root_data.get(); node_att_c = &(*node_att_c)[0][paths.cmdIdx][1]; int CountCom = node_att_c->get_value().ToInt(); int DeltaCom = CountCom - 2; for (int i = 0; i < CountCom; i++) { - tree* itemNode = &(*root_data)[0][paths.cmdIdx][i + CountCom - DeltaCom]; + tree* itemNode = &(*root_data.get())[0][paths.cmdIdx][i + CountCom - DeltaCom]; for (size_t p = 0; p < paths.cmdItemPath.size(); p++) itemNode = &(*itemNode)[paths.cmdItemPath[p]]; String NameCom = itemNode->get_value(); @@ -119,7 +119,7 @@ void MetadataObjectInformationRegister::initializeFromTreeWithPaths(const InfoRe // Макеты moxels.clear(); - tree* node_mox = root_data; + tree* node_mox = root_data.get(); node_mox = &(*node_mox)[0][paths.moxIdx][0]; int CountMox = (node_mox->get_next())->get_value().ToInt(); tree* curNodeChildMox = node_mox->get_next(); diff --git a/src/MetadataObjectWithSections.cpp b/src/MetadataObjectWithSections.cpp index 5b7a5db..b2e29a4 100644 --- a/src/MetadataObjectWithSections.cpp +++ b/src/MetadataObjectWithSections.cpp @@ -33,14 +33,14 @@ void MetadataObjectWithSections::initializeFromTreeWithPaths(const MetadataTreeP // Реквизиты attributes.clear(); - tree* node_att = root_data; + tree* node_att = root_data.get(); node_att = &(*node_att)[0][paths.attIdx][1]; int CountAtt = node_att->get_value().ToInt(); int Delta = CountAtt - 2; for (int i = 0; i < CountAtt; i++) { try { - tree* node_att_att = root_data; + tree* node_att_att = root_data.get(); tree* itemNode = &(*node_att_att)[0][paths.attIdx][i + CountAtt - Delta]; for (size_t p = 0; p < paths.attItemPath.size(); p++) itemNode = &(*itemNode)[paths.attItemPath[p]]; @@ -54,13 +54,13 @@ void MetadataObjectWithSections::initializeFromTreeWithPaths(const MetadataTreeP tabulars.clear(); if (paths.hasTabulars) { - tree* node_att_t = root_data; + tree* node_att_t = root_data.get(); node_att_t = &(*node_att_t)[0][paths.tabIdx][1]; int CountAttTab = node_att_t->get_value().ToInt(); int DeltaTab = CountAttTab - 2; for (int i = 0; i < CountAttTab; i++) { - tree* node_att_tab = root_data; + tree* node_att_tab = root_data.get(); tree* itemNode = &(*node_att_tab)[0][paths.tabIdx][i + CountAttTab - DeltaTab]; for (size_t p = 0; p < paths.tabItemPath.size(); p++) itemNode = &(*itemNode)[paths.tabItemPath[p]]; @@ -71,7 +71,7 @@ void MetadataObjectWithSections::initializeFromTreeWithPaths(const MetadataTreeP // Формы forms.clear(); - tree* node = root_data; + tree* node = root_data.get(); node = &(*node)[0][paths.formsIdx][0]; int CountChild = (node->get_next())->get_value().ToInt(); tree* curNodeChild = node->get_next(); @@ -88,13 +88,13 @@ void MetadataObjectWithSections::initializeFromTreeWithPaths(const MetadataTreeP // Команды comands.clear(); - tree* node_att_c = root_data; + tree* node_att_c = root_data.get(); node_att_c = &(*node_att_c)[0][paths.cmdIdx][1]; int CountCom = node_att_c->get_value().ToInt(); int DeltaCom = CountCom - 2; for (int i = 0; i < CountCom; i++) { - tree* node_com = root_data; + tree* node_com = root_data.get(); tree* itemNode = &(*node_com)[0][paths.cmdIdx][i + CountCom - DeltaCom]; for (size_t p = 0; p < paths.cmdItemPath.size(); p++) itemNode = &(*itemNode)[paths.cmdItemPath[p]]; @@ -104,7 +104,7 @@ void MetadataObjectWithSections::initializeFromTreeWithPaths(const MetadataTreeP // Макеты moxels.clear(); - tree* node_mox = root_data; + tree* node_mox = root_data.get(); node_mox = &(*node_mox)[0][paths.moxIdx][0]; int CountMox = (node_mox->get_next())->get_value().ToInt(); tree* curNodeChildMox = node_mox->get_next(); diff --git a/src/Numerators.cpp b/src/Numerators.cpp index 9d302e0..02de416 100644 --- a/src/Numerators.cpp +++ b/src/Numerators.cpp @@ -19,7 +19,7 @@ __fastcall TNumerators::TNumerators(v8catalog *_parent, const String& _guid) { guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } __fastcall TNumerators::TNumerators(v8catalog *_parent, const String& _guid, const String& _name) @@ -27,7 +27,7 @@ __fastcall TNumerators::TNumerators(v8catalog *_parent, const String& _guid, con name = _name; guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } __fastcall TNumerators::~TNumerators() diff --git a/src/Numerators.h b/src/Numerators.h index 2bcee0c..82df37d 100644 --- a/src/Numerators.h +++ b/src/Numerators.h @@ -4,6 +4,7 @@ #define NumeratorsH #include +#include #include "Class_1CD.h" #include "APIcfBase.h" #include "Parse_tree.h" @@ -13,7 +14,7 @@ class TNumerators : public TObject { public: - tree* root_data; + std::unique_ptr root_data; v8catalog* parent; String name; diff --git a/src/Parse_tree.h b/src/Parse_tree.h index f00a62d..cc1edd0 100644 --- a/src/Parse_tree.h +++ b/src/Parse_tree.h @@ -4,6 +4,7 @@ #define Parse_treeH #include +#include #pragma hdrstop #include "NodeTypes.h" @@ -46,6 +47,9 @@ class tree typedef tree* treeptr; +typedef std::unique_ptr tree_unique_ptr; +typedef std::shared_ptr tree_shared_ptr; + //tree* __fastcall parse_1Ctext_old(String& text, String path); diff --git a/src/Sequences.cpp b/src/Sequences.cpp index 079217b..4d14ab7 100644 --- a/src/Sequences.cpp +++ b/src/Sequences.cpp @@ -19,7 +19,7 @@ __fastcall TSequences::TSequences(v8catalog *_parent, const String& _guid) { guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } __fastcall TSequences::TSequences(v8catalog *_parent, const String& _guid, const String& _name) @@ -27,7 +27,7 @@ __fastcall TSequences::TSequences(v8catalog *_parent, const String& _guid, const name = _name; guid = _guid; parent = _parent; - root_data = get_treeFromV8file(parent->GetFile(_guid)); + root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); } diff --git a/src/Sequences.h b/src/Sequences.h index f3fef96..ae9f42e 100644 --- a/src/Sequences.h +++ b/src/Sequences.h @@ -4,6 +4,7 @@ #define SequencesH #include +#include #include "Class_1CD.h" #include "APIcfBase.h" #include "Parse_tree.h" @@ -13,7 +14,7 @@ class TSequences : public TObject { public: - tree* root_data; + std::unique_ptr root_data; v8catalog* parent; String name; diff --git a/src/SmartPointers.h b/src/SmartPointers.h new file mode 100644 index 0000000..0579cb4 --- /dev/null +++ b/src/SmartPointers.h @@ -0,0 +1,155 @@ +#ifndef SmartPointersH +#define SmartPointersH + +#include +#include + +// ============================================================================ +// Кастомные deleters для умных указателей +// ============================================================================ + +// Кастомный deleter для VCL TObject +// Обеспечивает корректное удаление VCL-объектов +struct VclObjectDeleter { + void operator()(TObject* obj) const { + if (obj) { + delete obj; + } + } +}; + +// Кастомный deleter для tree (парсинг метаданных 1С) +// Используется для безопасного освобождения дерева разбора +struct TreeDeleter { + void operator()(tree* t) const { + if (t) { + delete t; + } + } +}; + +// Кастомный deleter для v8file (файлы 1С) +struct V8FileDeleter { + void operator()(v8file* vf) const { + if (vf) { + delete vf; + } + } +}; + +// Кастомный deleter для v8catalog (каталог конфигурации 1С) +struct V8CatalogDeleter { + void operator()(v8catalog* vc) const { + if (vc) { + delete vc; + } + } +}; + +// ============================================================================ +// Типы умных указателей +// ============================================================================ + +// Умный указатель для VCL объектов (TObject и его наследники) +// Использует VclObjectDeleter для корректного удаления +template +using VclUniquePtr = std::unique_ptr; + +// Умный указатель для дерева парсинга +using TreeUniquePtr = std::unique_ptr; + +// Умный указатель для файлов 1С +using V8FileUniquePtr = std::unique_ptr; + +// Умный указатель для каталога конфигурации 1С +using V8CatalogUniquePtr = std::unique_ptr; + +// ============================================================================ +// Векторы умных указателей +// ============================================================================ + +// Вектор уникальных указателей для метаданных +// Используется для объектов с единственным владельцем +// Пример: MetadataVector mdCatalogs; +template +using MetadataVector = std::vector>; + +// Вектор разделяемых указателей для метаданных +// Используется для объектов с общим владением +// Пример: SharedMetadataVector mdReports; +template +using SharedMetadataVector = std::vector>; + +// ============================================================================ +// Вспомогательные функции +// ============================================================================ + +// Создание умного указателя для VCL объекта +template +VclUniquePtr MakeVclUnique(Args&&... args) { + return VclUniquePtr(new T(std::forward(args)...)); +} + +// Создание вектора умных указателей с перемещением +template +void AddToMetadataVector(MetadataVector& vec, std::unique_ptr item) { + vec.push_back(std::move(item)); +} + +// ============================================================================ +// Примеры использования +// ============================================================================ +/* +// Пример 1: Замена голого указателя v8catalog* +// До: +v8catalog* GlobalCF = nullptr; +if (GlobalCF) { + delete GlobalCF; +} +GlobalCF = new v8catalog(filename, true); + +// После: +V8CatalogUniquePtr GlobalCF; +GlobalCF = std::make_unique(filename, true); +// Автоматическое освобождение при выходе из области видимости + + +// Пример 2: Замена TObjectList* на MetadataVector +// До: +TObjectList* mdCatalogs = new TObjectList(true); +mdCatalogs->Add(new TCatalogs(...)); +TCatalogs* cat = static_cast(mdCatalogs->Items[i]); + +// После: +MetadataVector mdCatalogs; +mdCatalogs.push_back(std::make_unique(...)); +TCatalogs* cat = mdCatalogs[i].get(); + + +// Пример 3: Замена tree* на TreeUniquePtr +// До: +tree* root_data = new tree(); +delete root_data; + +// После: +TreeUniquePtr root_data(new tree()); +// Автоматическое освобождение + + +// Пример 4: Использование MetadataVector в методах +// До: +void FillTree(TObjectList* mdData) { + for (int i = 0; i < mdData->Count; i++) { + auto* item = static_cast(mdData->Items[i]); + } +} + +// После: +void FillTree(const MetadataVector& mdData) { + for (const auto& item : mdData) { + TCatalogs* obj = item.get(); + } +} +*/ + +#endif From df4b9366f819c4dd8e122fb8ece9fac6e5e66edf Mon Sep 17 00:00:00 2001 From: fishca Date: Fri, 13 Feb 2026 09:55:18 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=83=D0=BC=D0=BD=D1=8B=D0=B5=20=D1=83=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/MainUnit.cpp | 2172 ++++++++++++++++++++++------------------------ src/MainUnit.h | 308 +++---- 3 files changed, 1126 insertions(+), 1355 deletions(-) diff --git a/.gitignore b/.gitignore index 8cbcc37..5b66015 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,7 @@ __history/ *.dproj.local *.cbproj.local Compile +.vscode # Deployment files *.deployproj diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 434da66..302b5b3 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -66,6 +66,10 @@ #pragma link "SynMemo" #pragma link "SynEditHighlighter" #pragma link "SynHighlighterCpp" +#pragma link "SynEdit" +#pragma link "SynEditHighlighter" +#pragma link "SynHighlighterCpp" +#pragma link "SynMemo" #pragma resource "*.dfm" TMainForm *MainForm; MessageRegistrator* msreg; @@ -80,54 +84,6 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner), MDManager(std String logfile = TPath::Combine(appDir, "v8reader.log"); mess->setlogfile(logfile); - mdCatalogs = new TObjectList(true); - mdLanguages = new TObjectList(true); - mdAccumulationRegisters = new TObjectList(true); - mdAccountingRegisters = new TObjectList(true); - mdCalculationRegisters = new TObjectList(true); - mdBusinessProcesses = new TObjectList(true); - mdChartsOfCharacteristicTypes = new TObjectList(true); - mdCommandGroups = new TObjectList(true); - mdCommonAttributes = new TObjectList(true); - mdCommonCommands = new TObjectList(true); - mdCommonForms = new TObjectList(true); - mdCommonModules = new TObjectList(true); - mdCommonPictures = new TObjectList(true); - mdCommonTemplates = new TObjectList(true); - mdConstants = new TObjectList(true); - mdDataProcessors = new TObjectList(true); - mdDefinedTypes = new TObjectList(true); - mdDocumentJournals = new TObjectList(true); - mdDocumentNumerators = new TObjectList(true); - mdDocuments = new TObjectList(true); - mdEnums = new TObjectList(true); - mdEventSubscriptions = new TObjectList(true); - mdExchangePlans = new TObjectList(true); - mdChartOfAccounts = new TObjectList(true); - mdChartOfCalculationTypes = new TObjectList(true); - mdExternalDataSources = new TObjectList(true); - mdFilterCriteria = new TObjectList(true); - mdFunctionalOptions = new TObjectList(true); - mdFunctionalOptionsParameters = new TObjectList(true); - mdHTTPServices = new TObjectList(true); - mdInformationRegisters = new TObjectList(true); - mdInterfaces = new TObjectList(true); - mdReports = new TObjectList(true); - mdRoles = new TObjectList(true); - mdBots = new TObjectList(true); - mdScheduledJobs = new TObjectList(true); - mdSessionParameters = new TObjectList(true); - mdSettingsStorages = new TObjectList(true); - mdStyleItems = new TObjectList(true); - mdStyles = new TObjectList(true); - mdSubsystems = new TObjectList(true); - mdTasks = new TObjectList(true); - mdWebServices = new TObjectList(true); - mdWSReferences = new TObjectList(true); - mdXDTOPackages = new TObjectList(true); - mdIntegrationServices = new TObjectList(true); - mdSequences = new TObjectList(true); - } //--------------------------------------------------------------------------- void __fastcall TMainForm::btnOpenEditNameClick(TObject *Sender) @@ -181,42 +137,29 @@ void __fastcall TMainForm::VirtualStringTreeValue1CGetText(TBaseVirtualTree *Sen } //--------------------------------------------------------------------------- -void __fastcall TMainForm::FillTreeMDConcrete(TVirtualStringTree *tree1C, PVirtualNode parentNode, TObjectList *mdData, const String& md_name, int imgIndex) +void __fastcall TMainForm::FillTreeMDConcrete(TVirtualStringTree *tree1C, PVirtualNode parentNode, const MetadataVector& mdData, const String& md_name, int imgIndex) { - TObject *CurCat; - - for(int i = 0; i < mdData->Count; i++) + for(size_t i = 0; i < mdData.size(); i++) { - PVirtualNode childNode = tree1C->AddChild(parentNode); - VirtualTreeData *childData = (VirtualTreeData*)tree1C->GetNodeData(childNode); + TObject *CurCat = nullptr; if (md_name == md_Catalogs) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); else if(md_name == md_Documents) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); else if(md_name == md_DocumentJournals) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); else if(md_name == md_Enums) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); else if(md_name == md_Reports) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); else if(md_name == md_DataProcessors) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); else if(md_name == md_ChartsOfCharacteristicTypes) - { - CurCat = static_cast(mdData->Items[i]); - } + CurCat = dynamic_cast(mdData[i].get()); + if (!CurCat) continue; + + PVirtualNode childNode = tree1C->AddChild(parentNode); + VirtualTreeData *childData = (VirtualTreeData*)tree1C->GetNodeData(childNode); // childData->Name = CurCat->GetName(); // childData->Age = 30; @@ -241,8 +184,7 @@ void __fastcall TMainForm::FillTreeMDConcrete(TVirtualStringTree *tree1C, PVirtu } } -void __fastcall TMainForm::fillCatalogsTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillCatalogsTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& tabulars, const std::vector>& forms, @@ -333,8 +275,7 @@ void __fastcall TMainForm::fillCatalogsTree(TObjectList *mdData, PVirtualNode ch } -void __fastcall TMainForm::fillAccumulationRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillAccumulationRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& dimensions, const std::vector>& resources, @@ -437,8 +378,7 @@ void __fastcall TMainForm::fillAccumulationRegisterTree(TObjectList *mdData, PVi } } -void __fastcall TMainForm::fillAccountingRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillAccountingRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& dimensions, const std::vector>& resources, @@ -573,8 +513,7 @@ void __fastcall TMainForm::fillAccountingRegisterTree(TObjectList *mdData, PVirt } } -void __fastcall TMainForm::fillCalculationRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillCalculationRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& dimensions, const std::vector>& resources, @@ -677,8 +616,7 @@ void __fastcall TMainForm::fillCalculationRegisterTree(TObjectList *mdData, PVir } } -void __fastcall TMainForm::fillInformationRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillInformationRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& dimensions, const std::vector>& resources, @@ -782,8 +720,7 @@ void __fastcall TMainForm::fillInformationRegisterTree(TObjectList *mdData, PVir } } -void __fastcall TMainForm::fillChartAccTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillChartAccTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& accflags, const std::vector>& dimaccflags, @@ -912,8 +849,7 @@ void __fastcall TMainForm::fillChartAccTree(TObjectList *mdData, PVirtualNode ch } -void __fastcall TMainForm::fillJournalTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, +void __fastcall TMainForm::fillJournalTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, const std::vector>& attributes, const std::vector>& tabulars, const std::vector>& forms, @@ -1076,202 +1012,178 @@ void __fastcall TMainForm::fillEnumTree(PVirtualNode childNode, VirtualTreeData } } -void __fastcall TMainForm::FillTreeMD(PVirtualNode parentNode, TObjectList *mdData, const String& md_name, int imgIndex) +void __fastcall TMainForm::FillTreeMD(PVirtualNode parentNode, const MetadataVector& mdData, const String& md_name, int imgIndex) { - // Карта для типов, использующих fillCatalogsTree static const std::unordered_set catalogTypes = {md_Catalogs, md_Documents, md_Reports, md_DataProcessors, md_ChartsOfCharacteristicTypes, md_ChartOfCalculationTypes}; - - // Карта для типов, использующих fillJournalTree static const std::unordered_set journalTypes = {md_DocumentJournals}; - - // Карта для типов, использующих fillChartAccTree static const std::unordered_set chartAccTypes = {md_ChartOfAccounts}; - - // Карта для типов, использующих fillInformationRegisterTree static const std::unordered_set informationRegisterTypes = {md_InformationRegisters, md_AccumulationRegisters, md_AccountingRegisters, md_CalculationRegisters}; - for(int i = 0; i < mdData->Count; i++) + for(size_t i = 0; i < mdData.size(); i++) { PVirtualNode childNode = VirtualStringTreeValue1C->AddChild(parentNode); VirtualTreeData *childData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(childNode); if (catalogTypes.count(md_name)) { - // Обработка типов, подобных каталогам if (md_name == md_Catalogs) { - TCatalogs* CurCat = static_cast(mdData->Items[i]); - fillCatalogsTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TCatalogs* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCatalogsTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_Documents) { - TDocuments* CurCat = static_cast(mdData->Items[i]); - fillCatalogsTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TDocuments* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCatalogsTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_Reports) { - TReports* CurCat = static_cast(mdData->Items[i]); - fillCatalogsTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TReports* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCatalogsTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_DataProcessors) { - TDataProcessors* CurCat = static_cast(mdData->Items[i]); - fillCatalogsTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TDataProcessors* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCatalogsTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_ChartsOfCharacteristicTypes) { - TChartOfCharacteristicTypes* CurCat = static_cast(mdData->Items[i]); - fillCatalogsTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TChartOfCharacteristicTypes* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCatalogsTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_ChartOfCalculationTypes) { - TChartOfCalculationTypes* CurCat = static_cast(mdData->Items[i]); - fillCatalogsTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TChartOfCalculationTypes* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCatalogsTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } } else if (journalTypes.count(md_name)) { - // Обработка типов, подобных журналам if (md_name == md_DocumentJournals) { - TJournals* CurCat = static_cast(mdData->Items[i]); - fillJournalTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); + TJournals* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillJournalTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getTabularSections(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } } else if (chartAccTypes.count(md_name)) { - // Обработка типов, подобных планам счетов if (md_name == md_ChartOfAccounts) { - TChartOfAccounts* CurCat = static_cast(mdData->Items[i]); - fillChartAccTree(mdData, childNode, childData, i, imgIndex, CurCat->name, CurCat->attributes, CurCat->accflags, CurCat->dimaccflags, CurCat->tabulars, CurCat->forms, CurCat->comands, CurCat->moxels); + TChartOfAccounts* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillChartAccTree(childNode, childData, imgIndex, CurCat->name, CurCat->attributes, CurCat->accflags, CurCat->dimaccflags, CurCat->tabulars, CurCat->forms, CurCat->comands, CurCat->moxels); } } else if (informationRegisterTypes.count(md_name)) { if (md_name == md_InformationRegisters) { - TInformationRegisters* CurCat = static_cast(mdData->Items[i]); - fillInformationRegisterTree(mdData, childNode, childData, i, imgIndex, CurCat->name, + TInformationRegisters* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillInformationRegisterTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getDimensions(), CurCat->getResources(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_AccumulationRegisters) { - TAccumulationRegisters* CurCat = static_cast(mdData->Items[i]); - fillAccumulationRegisterTree(mdData, childNode, childData, i, imgIndex, CurCat->name, + TAccumulationRegisters* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillAccumulationRegisterTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getDimensions(), CurCat->getResources(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_AccountingRegisters) { - TAccountingRegisters* CurCat = static_cast(mdData->Items[i]); - fillAccountingRegisterTree(mdData, childNode, childData, i, imgIndex, CurCat->name, + TAccountingRegisters* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillAccountingRegisterTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getDimensions(), CurCat->getResources(), CurCat->getAccountingFlags(), CurCat->getDimensionAccountingFlags(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } else if (md_name == md_CalculationRegisters) { - TCalculationRegisters* CurCat = static_cast(mdData->Items[i]); - fillCalculationRegisterTree(mdData, childNode, childData, i, imgIndex, CurCat->name, + TCalculationRegisters* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillCalculationRegisterTree(childNode, childData, imgIndex, CurCat->name, CurCat->getAttributes(), CurCat->getDimensions(), CurCat->getResources(), CurCat->getForms(), CurCat->getCommands(), CurCat->getLayouts()); } } else if (md_name == md_Enums) { - // Специальная обработка для перечислений - TEnums* CurCat = static_cast(mdData->Items[i]); - fillEnumTree(childNode, childData, imgIndex, CurCat); + TEnums* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) fillEnumTree(childNode, childData, imgIndex, CurCat); } else { - // Простые типы: только имя и изображение if (md_name == md_DocumentNumerators) { - TNumerators* CurCat = static_cast(mdData->Items[i]); - childData->Name = CurCat->name; - childData->Age = 30; - childData->ImgIndex = imgIndex; + TNumerators* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) { childData->Name = CurCat->name; childData->Age = 30; childData->ImgIndex = imgIndex; } } else if (md_name == md_Sequences) { - TSequences* CurCat = static_cast(mdData->Items[i]); - childData->Name = CurCat->name; - childData->Age = 30; - childData->ImgIndex = imgIndex; + TSequences* CurCat = dynamic_cast(mdData[i].get()); + if (CurCat) { childData->Name = CurCat->name; childData->Age = 30; childData->ImgIndex = imgIndex; } } } } } void __fastcall TMainForm::FillVirtualTree() { - // Структура для хранения данных о категориях struct CategoryData { - //const std::vector& data; - TObjectList *data; + const MetadataVector* data; const String name; int imgIndex; int age; }; - // Массив с описанием всех категорий std::vector md_categories = { - {MainForm->mdCommonss, md_Common, 84, 25}, - {MainForm->mdConstants, md_Constants, 0, 25}, - {MainForm->mdCatalogs, md_Catalogs, 1, 25}, - {MainForm->mdDocuments, md_Documents, 4, 25}, - {MainForm->mdDocumentJournals, md_DocumentJournals, 5, 25}, - {MainForm->mdEnums, md_Enums, 2, 25}, - {MainForm->mdReports, md_Reports, 9, 25}, - {MainForm->mdDataProcessors, md_DataProcessors, 7, 25}, - {MainForm->mdChartsOfCharacteristicTypes, md_ChartsOfCharacteristicTypes, 16, 25}, - {MainForm->mdChartOfAccounts, md_ChartOfAccounts, 116, 25}, - {MainForm->mdChartOfCalculationTypes, md_ChartOfCalculationTypes, 17, 25}, - {MainForm->mdInformationRegisters, md_InformationRegisters, 14, 25}, - {MainForm->mdAccumulationRegisters, md_AccumulationRegisters, 13, 25}, - {MainForm->mdAccountingRegisters, md_AccountingRegisters, 117, 25}, - {MainForm->mdCalculationRegisters, md_CalculationRegisters, 18, 25}, - {MainForm->mdBusinessProcesses, md_BusinessProcesses, 58, 25}, - {MainForm->mdTasks, md_Tasks, 59, 25}, - {MainForm->mdExternalDataSources, md_ExternalDataSources, 27, 25} + {&MainForm->mdCommonss, md_Common, 84, 25}, + {&MainForm->mdConstants, md_Constants, 0, 25}, + {&MainForm->mdCatalogs, md_Catalogs, 1, 25}, + {&MainForm->mdDocuments, md_Documents, 4, 25}, + {&MainForm->mdDocumentJournals, md_DocumentJournals, 5, 25}, + {&MainForm->mdEnums, md_Enums, 2, 25}, + {&MainForm->mdReports, md_Reports, 9, 25}, + {&MainForm->mdDataProcessors, md_DataProcessors, 7, 25}, + {&MainForm->mdChartsOfCharacteristicTypes, md_ChartsOfCharacteristicTypes, 16, 25}, + {&MainForm->mdChartOfAccounts, md_ChartOfAccounts, 116, 25}, + {&MainForm->mdChartOfCalculationTypes, md_ChartOfCalculationTypes, 17, 25}, + {&MainForm->mdInformationRegisters, md_InformationRegisters, 14, 25}, + {&MainForm->mdAccumulationRegisters, md_AccumulationRegisters, 13, 25}, + {&MainForm->mdAccountingRegisters, md_AccountingRegisters, 117, 25}, + {&MainForm->mdCalculationRegisters, md_CalculationRegisters, 18, 25}, + {&MainForm->mdBusinessProcesses, md_BusinessProcesses, 58, 25}, + {&MainForm->mdTasks, md_Tasks, 59, 25}, + {&MainForm->mdExternalDataSources, md_ExternalDataSources, 27, 25} }; - - // Массив с описанием всех категорий std::vector md_categoriesCommon = { - - //{MainForm->Subsystems, "Подсистемы", 73, 25}, - {MainForm->mdCommonModules, md_CommonModules, 87, 25}, - {MainForm->mdSessionParameters, md_SessionParameters, 90, 25}, - {MainForm->mdRoles, md_Roles, 81, 25}, - {MainForm->mdCommonAttributes, md_CommonAttributes, 24, 25}, - {MainForm->mdExchangePlans, md_ExchangePlans, 41, 25}, - {MainForm->mdFilterCriteria, md_FilterCriteria, 85, 25}, - {MainForm->mdEventSubscriptions, md_EventSubscriptions, 100, 25}, - {MainForm->mdScheduledJobs, md_ScheduledJobs, 104, 25}, - {MainForm->mdBots, md_Bots, 132, 25}, - {MainForm->mdFunctionalOptions, md_FunctionalOptions, 108, 25}, - {MainForm->mdFunctionalOptionsParameters, md_FunctionalOptionsParameters, 109, 25}, - {MainForm->mdDefinedTypes, md_DefinedTypes, 111, 25}, - {MainForm->mdSettingsStorages, md_SettingsStorages, 52, 25}, - {MainForm->mdCommonCommands, md_CommonCommands, 98, 25}, - {MainForm->mdCommonTemplates, md_CommonTemplates, 79, 25}, - {MainForm->mdCommandGroups, md_CommandGroups, 99, 25}, - {MainForm->mdCommonForms, md_CommonForms, 86, 25}, - {MainForm->mdInterfaces, md_Interfaces, 80, 25}, - {MainForm->mdCommonTemplates, md_CommonTemplates, 79, 25}, - {MainForm->mdCommonPictures, md_CommonPictures, 77, 25}, - {MainForm->mdXDTOPackages, md_XDTOPackages, 91, 25}, - {MainForm->mdWebServices, md_WebServices, 92, 25}, - {MainForm->mdHTTPServices, md_HTTPServices, 113, 25}, - {MainForm->mdWSReferences, md_WSReferences, 96, 25}, - {MainForm->mdIntegrationServices, md_IntegrationServices, 131, 25}, - {MainForm->mdStyleItems, md_StyleItems, 76, 25}, - {MainForm->mdStyles, md_Styles, 75, 25}, - {MainForm->mdLanguages, md_Languages, 73, 25} + {&MainForm->mdCommonModules, md_CommonModules, 87, 25}, + {&MainForm->mdSessionParameters, md_SessionParameters, 90, 25}, + {&MainForm->mdRoles, md_Roles, 81, 25}, + {&MainForm->mdCommonAttributes, md_CommonAttributes, 24, 25}, + {&MainForm->mdExchangePlans, md_ExchangePlans, 41, 25}, + {&MainForm->mdFilterCriteria, md_FilterCriteria, 85, 25}, + {&MainForm->mdEventSubscriptions, md_EventSubscriptions, 100, 25}, + {&MainForm->mdScheduledJobs, md_ScheduledJobs, 104, 25}, + {&MainForm->mdBots, md_Bots, 132, 25}, + {&MainForm->mdFunctionalOptions, md_FunctionalOptions, 108, 25}, + {&MainForm->mdFunctionalOptionsParameters, md_FunctionalOptionsParameters, 109, 25}, + {&MainForm->mdDefinedTypes, md_DefinedTypes, 111, 25}, + {&MainForm->mdSettingsStorages, md_SettingsStorages, 52, 25}, + {&MainForm->mdCommonCommands, md_CommonCommands, 98, 25}, + {&MainForm->mdCommonTemplates, md_CommonTemplates, 79, 25}, + {&MainForm->mdCommandGroups, md_CommandGroups, 99, 25}, + {&MainForm->mdCommonForms, md_CommonForms, 86, 25}, + {&MainForm->mdInterfaces, md_Interfaces, 80, 25}, + {&MainForm->mdCommonPictures, md_CommonPictures, 77, 25}, + {&MainForm->mdXDTOPackages, md_XDTOPackages, 91, 25}, + {&MainForm->mdWebServices, md_WebServices, 92, 25}, + {&MainForm->mdHTTPServices, md_HTTPServices, 113, 25}, + {&MainForm->mdWSReferences, md_WSReferences, 96, 25}, + {&MainForm->mdIntegrationServices, md_IntegrationServices, 131, 25}, + {&MainForm->mdStyleItems, md_StyleItems, 76, 25}, + {&MainForm->mdStyles, md_Styles, 75, 25}, + {&MainForm->mdLanguages, md_Languages, 73, 25} }; @@ -1304,110 +1216,110 @@ void __fastcall TMainForm::FillVirtualTree() { parentNodeDataCom->Age = categoryCom.age; parentNodeDataCom->ImgIndex = categoryCom.imgIndex; - for (const auto& item : categoryCom.data) + for (const auto& item : *categoryCom.data) { PVirtualNode childNodeCom = VirtualStringTreeValue1C->AddChild(parentNodeCom); VirtualTreeData *childDataCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(childNodeCom); if (categoryCom.name == md_CommonModules) { - TCommonModules* CurModule = static_cast(item); + TCommonModules* CurModule = static_cast(item.get()); childDataCom->Name = CurModule->name; childDataCom->text_module = CurModule->GetText(); } else if (categoryCom.name == md_SessionParameters) { - TSessionParameters* CurParam = static_cast(item); + TSessionParameters* CurParam = static_cast(item.get()); childDataCom->Name = CurParam->name; childDataCom->text_module = L""; } else if (categoryCom.name == md_CommonAttributes) { - TCommonAttributes* CurCommonAtt = static_cast(item); + TCommonAttributes* CurCommonAtt = static_cast(item.get()); childDataCom->Name = CurCommonAtt->name; childDataCom->text_module = L""; } else if (categoryCom.name == md_ExchangePlans) { - TExchangePlans* CurExchPlan = static_cast(item); + TExchangePlans* CurExchPlan = static_cast(item.get()); childDataCom->Name = CurExchPlan->GetExchangePlanName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_FilterCriteria) { - TFilterCriteria* CurFilter = static_cast(item); + TFilterCriteria* CurFilter = static_cast(item.get()); childDataCom->Name = CurFilter->GetFilterCriteriaName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_EventSubscriptions) { - TEventSubscriptions* CurEventSub = static_cast(item); + TEventSubscriptions* CurEventSub = static_cast(item.get()); childDataCom->Name = CurEventSub->GetEventSubscriptionName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_ScheduledJobs) { - TScheduledJobs* CurScheduledJob = static_cast(item); + TScheduledJobs* CurScheduledJob = static_cast(item.get()); childDataCom->Name = CurScheduledJob->GetScheduledJobsName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_CommonCommands) { - TCommonCommands* CurCommonCommand = static_cast(item); + TCommonCommands* CurCommonCommand = static_cast(item.get()); childDataCom->Name = CurCommonCommand->GetCommandName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_CommandGroups) { - TCommandGroups* CurCommandGroup = static_cast(item); + TCommandGroups* CurCommandGroup = static_cast(item.get()); childDataCom->Name = CurCommandGroup->GetCommandName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_CommonForms) { - TCommonForms* CurCommonForm = static_cast(item); + TCommonForms* CurCommonForm = static_cast(item.get()); childDataCom->Name = CurCommonForm->GetFormName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_Interfaces) { - TInterfaces* CurInterface = static_cast(item); + TInterfaces* CurInterface = static_cast(item.get()); childDataCom->Name = CurInterface->GetInterfaceName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_CommonTemplates) { - TCommonTemplates* CurCommonTemplate = static_cast(item); + TCommonTemplates* CurCommonTemplate = static_cast(item.get()); childDataCom->Name = CurCommonTemplate->GetTemplateName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_CommonPictures) { - TCommonPictures* CurCommonPicture = static_cast(item); + TCommonPictures* CurCommonPicture = static_cast(item.get()); childDataCom->Name = CurCommonPicture->GetPictureName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_XDTOPackages) { - TXDTOPackages* CurXDTOPackage = static_cast(item); + TXDTOPackages* CurXDTOPackage = static_cast(item.get()); childDataCom->Name = CurXDTOPackage->GetXDTOPackageName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_WebServices) { - TWebServices* CurWebService = static_cast(item); + TWebServices* CurWebService = static_cast(item.get()); childDataCom->Name = CurWebService->GetWebServiceName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_HTTPServices) { - THTTPServices* CurHTTPServices = static_cast(item); + THTTPServices* CurHTTPServices = static_cast(item.get()); childDataCom->Name = CurHTTPServices->GetHTTPServicesName(); childDataCom->text_module = L""; } else if (categoryCom.name == md_FunctionalOptions) { - TFunctionalOptions* CurFO = static_cast(item); + TFunctionalOptions* CurFO = static_cast(item.get()); childDataCom->Name = CurFO->name; childDataCom->text_module = L""; childDataCom->Age = 99; @@ -1415,7 +1327,7 @@ void __fastcall TMainForm::FillVirtualTree() { } else if (categoryCom.name == md_FunctionalOptionsParameters) { - TFunctionalOptionsParameters* CurFOP = static_cast(item); + TFunctionalOptionsParameters* CurFOP = static_cast(item.get()); childDataCom->Name = CurFOP->name; childDataCom->Age = 99; childDataCom->ImgIndex = categoryCom.imgIndex; @@ -1423,7 +1335,7 @@ void __fastcall TMainForm::FillVirtualTree() { } else if (categoryCom.name == md_DefinedTypes) { - TDefinedTypes* CurDT = static_cast(item); + TDefinedTypes* CurDT = static_cast(item.get()); childDataCom->Name = CurDT->name; childDataCom->Age = 99; childDataCom->ImgIndex = categoryCom.imgIndex; @@ -1431,7 +1343,7 @@ void __fastcall TMainForm::FillVirtualTree() { } else if (categoryCom.name == md_SettingsStorages) { - TSettingsStorages* CurSS = static_cast(item); + TSettingsStorages* CurSS = static_cast(item.get()); childDataCom->Name = CurSS->name; childDataCom->Age = 99; childDataCom->ImgIndex = categoryCom.imgIndex; @@ -1439,7 +1351,7 @@ void __fastcall TMainForm::FillVirtualTree() { } else if (categoryCom.name == md_Languages) { - TLangs* CurLang = static_cast(item); + TLangs* CurLang = static_cast(item.get()); childDataCom->Name = CurLang->name; childDataCom->Age = 99; childDataCom->ImgIndex = categoryCom.imgIndex; @@ -1454,14 +1366,14 @@ void __fastcall TMainForm::FillVirtualTree() { childDataCom->ImgIndex = categoryCom.imgIndex; } - // Для Roles добавляем элементы из MainForm->Roles (vector) + // Для Roles добавляем элементы из MainForm->mdRoles if (categoryCom.name == md_Roles) { - for (size_t i = 0; i < MainForm->Roles.size(); i++) + for (size_t i = 0; i < MainForm->mdRoles.size(); i++) { PVirtualNode childNodeRoles = VirtualStringTreeValue1C->AddChild(parentNodeCom); VirtualTreeData *childDataRoles = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(childNodeRoles); - childDataRoles->Name = MainForm->Roles[i]; + childDataRoles->Name = static_cast(MainForm->mdRoles[i].get())->GetRoleName(); childDataRoles->Age = 99; childDataRoles->ImgIndex = categoryCom.imgIndex; childDataRoles->text_module = L""; @@ -1469,12 +1381,12 @@ void __fastcall TMainForm::FillVirtualTree() { } - // Для Bots добавляем элементы из MainForm->mdBots (TObjectList) - if (categoryCom.name == md_Bots && MainForm->mdBots != nullptr && MainForm->mdBots->Count > 0) + // Для Bots добавляем элементы из MainForm->mdBots + if (categoryCom.name == md_Bots && !MainForm->mdBots.empty()) { - for (int i = 0; i < MainForm->mdBots->Count; i++) + for (size_t i = 0; i < MainForm->mdBots.size(); i++) { - TBots* CurBot = static_cast(MainForm->mdBots->Items[i]); + TBots* CurBot = static_cast(MainForm->mdBots[i].get()); PVirtualNode childNodeBots = VirtualStringTreeValue1C->AddChild(parentNodeCom); VirtualTreeData *childDataBots = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(childNodeBots); childDataBots->Name = CurBot->name; @@ -1559,12 +1471,11 @@ void __fastcall TMainForm::FillVirtualTree() { } else if (category.name == md_Constants) { - // Константы - for (int i = 0; i < MainForm->mdConstants->Count; i++) + for (size_t i = 0; i < MainForm->mdConstants.size(); i++) { PVirtualNode childNodeConst = VirtualStringTreeValue1C->AddChild(parentNode); VirtualTreeData *childDataConst = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(childNodeConst); - TConstants* CurConstant = static_cast(MainForm->mdConstants->Items[i]); + TConstants* CurConstant = static_cast(MainForm->mdConstants[i].get()); childDataConst->Name = CurConstant->name; childDataConst->Age = 30; childDataConst->ImgIndex = category.imgIndex; @@ -1587,757 +1498,757 @@ void __fastcall TMainForm::FillVirtualTree() { void __fastcall TMainForm::TreeInit() { - // Корень конфигурации - VirtualStringTreeValue1C->Clear(); - PVirtualNode RootNode = VirtualStringTreeValue1C->AddChild(nullptr); - - VirtualTreeData *RootData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(RootNode); - - - - - // Добавляем дочерний узел - PVirtualNode ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - VirtualTreeData *ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Common; // Общие - ChildData->Age = 30; - ChildData->ImgIndex = 84; - - //================================= поддерево Общие ============================================== - PVirtualNode ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_Subsystems; //"Подсистемы"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 74; - // у подсистем есть иерархия, так что это нужно переделать - for(int i = 0; i < MainForm->Subsystems.size(); i++) - { - PVirtualNode ChildNodeSub = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataSub = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeSub); - ChildNodeDataSub->Name = MainForm->Subsystems[i].name; - ChildNodeDataSub->Age = 30; - ChildNodeDataSub->ImgIndex = 74; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommonModules; //"Общие модули"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 87; - for(int i = 0; i < MainForm->CommonModules.size(); i++) - { - PVirtualNode ChildNodeCommonModules = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataCommonModules = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCommonModules); - ChildNodeDataCommonModules->Name = MainForm->CommonModules[i]; - ChildNodeDataCommonModules->Age = 30; - ChildNodeDataCommonModules->ImgIndex = 87; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_SessionParameters; //"Параметры сеанса"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 90; - for(int i = 0; i < MainForm->SessionParameters.size(); i++) - { - PVirtualNode ChildNodePar = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataPar = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodePar); - ChildNodeDataPar->Name = MainForm->SessionParameters[i]; - ChildNodeDataPar->Age = 30; - ChildNodeDataPar->ImgIndex = 90; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_Roles; //"Роли"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 81; - for(int i = 0; i < MainForm->Roles.size(); i++) - { - PVirtualNode ChildNodeRoles = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataRoles = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeRoles); - ChildNodeDataRoles->Name = MainForm->Roles[i]; - ChildNodeDataRoles->Age = 30; - ChildNodeDataRoles->ImgIndex = 81; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommonAttributes; // "Общие реквизиты"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 24; - for(int i = 0; i < MainForm->CommonAttributes .size(); i++) - { - PVirtualNode ChildNodeCommonAtt = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataCommonAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCommonAtt); - ChildNodeDataCommonAtt->Name = MainForm->CommonAttributes[i]; - ChildNodeDataCommonAtt->Age = 30; - ChildNodeDataCommonAtt->ImgIndex = 24; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_ExchangePlans; //"Планы обмена"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 41; - for(int i = 0; i < MainForm->ExchangePlans.size(); i++) - { - PVirtualNode ChildNodeExch = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataExch = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeExch); - ChildNodeDataExch->Name = MainForm->ExchangePlans[i]; - ChildNodeDataExch->Age = 30; - ChildNodeDataExch->ImgIndex = 41; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_FilterCriteria; //"Критерии отбора"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 85; - for(int i = 0; i < MainForm->FilterCriteria.size(); i++) - { - PVirtualNode ChildNodeFC = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataFC = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeFC); - ChildNodeDataFC->Name = MainForm->FilterCriteria[i]; - ChildNodeDataFC->Age = 30; - ChildNodeDataFC->ImgIndex = 85; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_EventSubscriptions; //"Подписки на события"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 100; - for(int i = 0; i < MainForm->EventSubscriptions.size(); i++) - { - PVirtualNode ChildNodeEvt = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataEvt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeEvt); - ChildNodeDataEvt->Name = MainForm->EventSubscriptions[i]; - ChildNodeDataEvt->Age = 30; - ChildNodeDataEvt->ImgIndex = 100; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_ScheduledJobs; //"Регламентные задания"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 104; - for(int i = 0; i < MainForm->ScheduledJobs.size(); i++) - { - PVirtualNode ChildNodeJobs = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataJobs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeJobs); - ChildNodeDataJobs->Name = MainForm->ScheduledJobs[i]; - ChildNodeDataJobs->Age = 30; - ChildNodeDataJobs->ImgIndex = 104; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_Bots; //"Боты"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 132; - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_FunctionalOptions; //"Функциональные опции"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 108; - for(int i = 0; i < MainForm->FunctionalOptions.size(); i++) - { - PVirtualNode ChildNodeFO = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataFO = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeFO); - ChildNodeDataFO->Name = MainForm->FunctionalOptions[i]; - ChildNodeDataFO->Age = 30; - ChildNodeDataFO->ImgIndex = 108; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_FunctionalOptionsParameters; //"Параметры функциональных опций"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 109; - for(int i = 0; i < MainForm->FunctionalOptionsParameters .size(); i++) - { - PVirtualNode ChildNodeFOP = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataFOP = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeFOP); - ChildNodeDataFOP->Name = MainForm->FunctionalOptionsParameters[i]; - ChildNodeDataFOP->Age = 30; - ChildNodeDataFOP->ImgIndex = 109; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_DefinedTypes; //"Определяемые типы"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 111; - for(int i = 0; i < MainForm->DefinedTypes.size(); i++) - { - PVirtualNode ChildNodeDT = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataDT = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDT); - ChildNodeDataDT->Name = MainForm->DefinedTypes[i]; - ChildNodeDataDT->Age = 30; - ChildNodeDataDT->ImgIndex = 111; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_SettingsStorages; //"Хранилища настроек"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 52; - for(int i = 0; i < MainForm->SettingsStorages.size(); i++) - { - PVirtualNode ChildNodeSS = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataSS = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeSS); - ChildNodeDataSS->Name = MainForm->SettingsStorages[i]; - ChildNodeDataSS->Age = 30; - ChildNodeDataSS->ImgIndex = 52; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommonCommands; //"Общие команды"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 98; - for(int i = 0; i < MainForm->CommonCommands.size(); i++) - { - PVirtualNode ChildNodeComCom = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataComCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeComCom); - ChildNodeDataComCom->Name = MainForm->CommonCommands[i]; - ChildNodeDataComCom->Age = 30; - ChildNodeDataComCom->ImgIndex = 98; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommandGroups; //"Группы команд"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 99; - for(int i = 0; i < MainForm->mdCommandGroups->Count; i++) - { - PVirtualNode ChildNodeComGroup = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataComGroup = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeComGroup); - TCommandGroups* CurCommandGroup = static_cast(MainForm->mdCommandGroups->Items[i]); - ChildNodeDataComGroup->Name = CurCommandGroup->GetCommandName(); - ChildNodeDataComGroup->Age = 30; - ChildNodeDataComGroup->ImgIndex = 99; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommonForms; //"Общие формы"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 86; - for(int i = 0; i < MainForm->mdCommonForms->Count; i++) - { - PVirtualNode ChildNodeComF = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataComF = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeComF); - TCommonForms* CurCommonForm = static_cast(MainForm->mdCommonForms->Items[i]); - ChildNodeDataComF->Name = CurCommonForm->GetFormName(); - ChildNodeDataComF->Age = 30; - ChildNodeDataComF->ImgIndex = 86; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_Interfaces; //"Интерфейсы"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 80; - for(int i = 0; i < MainForm->mdInterfaces->Count; i++) - { - PVirtualNode ChildNodeInt = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataInt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeInt); - TInterfaces* CurInterface = static_cast(MainForm->mdInterfaces->Items[i]); - ChildNodeDataInt->Name = CurInterface->GetInterfaceName(); - ChildNodeDataInt->Age = 30; - ChildNodeDataInt->ImgIndex = 80; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommonTemplates;//"Общие макеты"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 79; - for(int i = 0; i < MainForm->CommonTemplates.size(); i++) - { - PVirtualNode ChildNodeCTemp = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataCTemp = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCTemp); - ChildNodeDataCTemp->Name = MainForm->CommonTemplates[i]; - ChildNodeDataCTemp->Age = 30; - ChildNodeDataCTemp->ImgIndex = 79; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_CommonPictures; //"Общие картинки"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 77; - for(int i = 0; i < MainForm->CommonPictures.size(); i++) - { - PVirtualNode ChildNodePic = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataPic = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodePic); - ChildNodeDataPic->Name = MainForm->CommonPictures[i]; - ChildNodeDataPic->Age = 30; - ChildNodeDataPic->ImgIndex = 77; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_XDTOPackages; //"XDTO-пакеты"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 91; - for(int i = 0; i < MainForm->XDTOPackages.size(); i++) - { - PVirtualNode ChildNodeXDTO = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataXDTO = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeXDTO); - ChildNodeDataXDTO->Name = MainForm->XDTOPackages[i]; - ChildNodeDataXDTO->Age = 30; - ChildNodeDataXDTO->ImgIndex = 91; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_WebServices; //"Web-сервисы"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 92; - for(int i = 0; i < MainForm->WebServices.size(); i++) - { - PVirtualNode ChildNodeWS = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataWS = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeWS); - ChildNodeDataWS->Name = MainForm->WebServices[i]; - ChildNodeDataWS->Age = 30; - ChildNodeDataWS->ImgIndex = 92; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_HTTPServices; //"HTTP-сервисы"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 113; - for(int i = 0; i < MainForm->mdHTTPServices->Count; i++) - { - PVirtualNode ChildNodeHTTPServices = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataHTTPServices = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeHTTPServices); - THTTPServices* CurHTTPService = static_cast(MainForm->mdHTTPServices->Items[i]); - ChildNodeDataHTTPServices->Name = CurHTTPService->GetHTTPServicesName(); - ChildNodeDataHTTPServices->Age = 30; - ChildNodeDataHTTPServices->ImgIndex = 113; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_WSReferences; //"WS-ссылки"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 96; - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_IntegrationServices; //"Сервисы интеграции"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 131; - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_StyleItems; //"Элементы стиля"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 76; - for(int i = 0; i < MainForm->StyleItems.size(); i++) - { - PVirtualNode ChildNodeStlStl = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataStlStl = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeStlStl); - ChildNodeDataStlStl->Name = MainForm->StyleItems[i]; - ChildNodeDataStlStl->Age = 30; - ChildNodeDataStlStl->ImgIndex = 76; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_Styles; //"Стили"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 75; - for(int i = 0; i < MainForm->Styles.size(); i++) - { - PVirtualNode ChildNodeStl = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataStl = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeStl); - ChildNodeDataStl->Name = MainForm->Styles[i]; - ChildNodeDataStl->Age = 30; - ChildNodeDataStl->ImgIndex = 75; - } - - ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); - ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); - ChildData1->Name = md_Languages; // "Языки"; - ChildData1->Age = 30; - ChildData1->ImgIndex = 73; - - for(int i = 0; i < MainForm->Languages.size(); i++) - { - PVirtualNode ChildNodeLang = VirtualStringTreeValue1C->AddChild(ChildNode1); - VirtualTreeData *ChildNodeDataLang = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeLang); - ChildNodeDataLang->Name = MainForm->Languages[i]; - ChildNodeDataLang->Age = 30; - ChildNodeDataLang->ImgIndex = 73; - } - //================================================================================================ - - // Константы - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Constants; // "Константы"; - ChildData->Age = 25; - ChildData->ImgIndex = 0; - for(int i = 0; i < MainForm->Constants.size(); i++) - { - PVirtualNode ChildNodeConst = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataConst = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeConst); - ChildNodeDataConst->Name = MainForm->Constants[i]; - ChildNodeDataConst->Age = 30; - ChildNodeDataConst->ImgIndex = 0; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Catalogs; // "Справочники"; - ChildData->Age = 25; - ChildData->ImgIndex = 1; - - for(int i = 0; i < MainForm->mdCatalogs->Count; i++) - { - PVirtualNode ChildNodeCatalogs = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataCatalogs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatalogs); - TCatalogs* CurCat = static_cast(MainForm->mdCatalogs->Items[i]); - ChildNodeDataCatalogs->Name = CurCat->name; - ChildNodeDataCatalogs->Age = 30; - ChildNodeDataCatalogs->ImgIndex = 1; - - // Реквизиты - PVirtualNode ChildNodeCatAtt = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); - VirtualTreeData *ChildNodeDataCatAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatAtt); - ChildNodeDataCatAtt->Name = "Реквизиты"; - ChildNodeDataCatAtt->Age = 30; - ChildNodeDataCatAtt->ImgIndex = 83; - // Список Реквизитов - for (i = 0; i < CurCat->getAttributes().size(); i++) - { - PVirtualNode ChildNodeCatCurAtt = VirtualStringTreeValue1C->AddChild(ChildNodeCatAtt); - VirtualTreeData *ChildNodeDataCatCurAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurAtt); - ChildNodeDataCatCurAtt->Name = ((CurCat->getAttributes())[i])->name; - ChildNodeDataCatCurAtt->Age = 30; - ChildNodeDataCatCurAtt->ImgIndex = 83; - } - - // Табличные части - PVirtualNode ChildNodeCatTabs = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); - VirtualTreeData *ChildNodeDataCatTabs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatTabs); - ChildNodeDataCatTabs->Name = "Табличные части"; - ChildNodeDataCatTabs->Age = 30; - ChildNodeDataCatTabs->ImgIndex = 82; - // Список ТЧ - for (i = 0; i < CurCat->getTabularSections().size(); i++) - { - PVirtualNode ChildNodeCatCurAtt = VirtualStringTreeValue1C->AddChild(ChildNodeCatTabs); - VirtualTreeData *ChildNodeDataCatCurAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurAtt); - ChildNodeDataCatCurAtt->Name = ((CurCat->getTabularSections())[i])->name; - ChildNodeDataCatCurAtt->Age = 30; - ChildNodeDataCatCurAtt->ImgIndex = 82; - } - - // Формы - PVirtualNode ChildNodeCatForm = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); - VirtualTreeData *ChildNodeDataCatForm = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatForm); - ChildNodeDataCatForm->Name = "Формы"; - ChildNodeDataCatForm->Age = 30; - ChildNodeDataCatForm->ImgIndex = 86; - // Список форм - for (i = 0; i < CurCat->getForms().size(); i++) - { - PVirtualNode ChildNodeCatCurForm = VirtualStringTreeValue1C->AddChild(ChildNodeCatForm); - VirtualTreeData *ChildNodeDataCatCurForm = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurForm); - ChildNodeDataCatCurForm->Name = ((CurCat->getForms())[i])->name; - ChildNodeDataCatCurForm->Age = 30; - ChildNodeDataCatCurForm->ImgIndex = 86; - } - - // Команды - PVirtualNode ChildNodeCatCom = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); - VirtualTreeData *ChildNodeDataCatCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCom); - ChildNodeDataCatCom->Name = "Команды"; - ChildNodeDataCatCom->Age = 30; - ChildNodeDataCatCom->ImgIndex = 98; - // Список команд - for (i = 0; i < CurCat->getCommands().size(); i++) - { - PVirtualNode ChildNodeCatCurCom = VirtualStringTreeValue1C->AddChild(ChildNodeCatCom); - VirtualTreeData *ChildNodeDataCatCurCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurCom); - ChildNodeDataCatCurCom->Name = ((CurCat->getCommands())[i])->name; - ChildNodeDataCatCurCom->Age = 30; - ChildNodeDataCatCurCom->ImgIndex = 98; - } - // Макеты - PVirtualNode ChildNodeCatMoxel = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); - VirtualTreeData *ChildNodeDataCatMoxel = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatMoxel); - ChildNodeDataCatMoxel->Name = "Макеты"; - ChildNodeDataCatMoxel->Age = 30; - ChildNodeDataCatMoxel->ImgIndex = 79; - // Список макетов - for (i = 0; i < CurCat->getLayouts().size(); i++) - { - PVirtualNode ChildNodeCatCurMox = VirtualStringTreeValue1C->AddChild(ChildNodeCatMoxel); - VirtualTreeData *ChildNodeDataCatCurMox = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurMox); - ChildNodeDataCatCurMox->Name = ((CurCat->getLayouts())[i])->name; - ChildNodeDataCatCurMox->Age = 30; - ChildNodeDataCatCurMox->ImgIndex = 79; - } - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Documents; // "Документы"; - ChildData->Age = 25; - ChildData->ImgIndex = 4; - - //================================================================================ - - PVirtualNode ChildNode2 = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildData2 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode2); - ChildData2->Name = md_DocumentNumerators; // "Нумераторы"; - ChildData2->Age = 30; - ChildData2->ImgIndex = 8; - for(int i = 0; i < MainForm->DocumentNumerators.size(); i++) - { - PVirtualNode ChildNodeDocsNum = VirtualStringTreeValue1C->AddChild(ChildNode2); - VirtualTreeData *ChildNodeDataDocsNum = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDocsNum); - ChildNodeDataDocsNum->Name = MainForm->DocumentNumerators[i]; - ChildNodeDataDocsNum->Age = 30; - ChildNodeDataDocsNum->ImgIndex = 8; - } - - PVirtualNode ChildNode3 = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildData3 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode3); - ChildData3->Name = md_Sequences; // "Последовательности"; - ChildData3->Age = 30; - ChildData3->ImgIndex = 12; - for(int i = 0; i < MainForm->Sequences.size(); i++) - { - PVirtualNode ChildNodeSeq = VirtualStringTreeValue1C->AddChild(ChildNode3); - VirtualTreeData *ChildNodeDataSeq = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeSeq); - ChildNodeDataSeq->Name = MainForm->Sequences[i]; - ChildNodeDataSeq->Age = 30; - ChildNodeDataSeq->ImgIndex = 12; - } - - for(int i = 0; i < MainForm->Documents.size(); i++) - { - PVirtualNode ChildNodeDocs = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataDocs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDocs); - ChildNodeDataDocs->Name = MainForm->Documents[i]; - ChildNodeDataDocs->Age = 30; - ChildNodeDataDocs->ImgIndex = 4; - } - - //================================================================================ - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_DocumentJournals; //"Журналы документов"; - ChildData->Age = 25; - ChildData->ImgIndex = 5; - - for(int i = 0; i < MainForm->DocumentJournals.size(); i++) - { - PVirtualNode ChildNodeDocsJ = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataDocsJ = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDocsJ); - ChildNodeDataDocsJ->Name = MainForm->DocumentJournals[i]; - ChildNodeDataDocsJ->Age = 30; - ChildNodeDataDocsJ->ImgIndex = 5; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Enums; // "Перечисления"; - ChildData->Age = 25; - ChildData->ImgIndex = 2; - for(int i = 0; i < MainForm->Enums.size(); i++) - { - PVirtualNode ChildNodeEnums = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataEnums = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeEnums); - ChildNodeDataEnums->Name = MainForm->Enums[i]; - ChildNodeDataEnums->Age = 30; - ChildNodeDataEnums->ImgIndex = 2; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Reports; // "Отчеты"; - ChildData->Age = 25; - ChildData->ImgIndex = 9; - for(int i = 0; i < MainForm->Reports.size(); i++) - { - PVirtualNode ChildNodeReports = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataReports = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeReports); - ChildNodeDataReports->Name = MainForm->Reports[i]; - ChildNodeDataReports->Age = 30; - ChildNodeDataReports->ImgIndex = 9; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_DataProcessors; // "Обработки"; - ChildData->Age = 25; - ChildData->ImgIndex = 7; - for(int i = 0; i < MainForm->DataProcessors.size(); i++) - { - PVirtualNode ChildNodeDP = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataDP = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDP); - ChildNodeDataDP->Name = MainForm->DataProcessors[i]; - ChildNodeDataDP->Age = 30; - ChildNodeDataDP->ImgIndex = 7; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_ChartsOfCharacteristicTypes ;// "Планы видов характеристик"; - ChildData->Age = 25; - ChildData->ImgIndex = 16; - for(int i = 0; i < MainForm->ChartsOfCharacteristicTypes.size(); i++) - { - PVirtualNode ChildNodeChartsTypes = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataChartsTypes = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeChartsTypes); - ChildNodeDataChartsTypes->Name = MainForm->ChartsOfCharacteristicTypes[i]; - ChildNodeDataChartsTypes->Age = 30; - ChildNodeDataChartsTypes->ImgIndex = 16; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_ChartOfAccounts; // "Планы счетов"; - ChildData->Age = 25; - ChildData->ImgIndex = 116; - for(int i = 0; i < MainForm->ChartOfAccounts.size(); i++) - { - PVirtualNode ChildNodeChartOfAccounts = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataChartOfAccounts = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeChartOfAccounts); - ChildNodeDataChartOfAccounts->Name = MainForm->ChartOfAccounts[i]; - ChildNodeDataChartOfAccounts->Age = 30; - ChildNodeDataChartOfAccounts->ImgIndex = 116; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_ChartOfCalculationTypes; // "Планы видов расчета"; - ChildData->Age = 25; - ChildData->ImgIndex = 17; - for(int i = 0; i < MainForm->ChartOfCalculationTypes.size(); i++) - { - PVirtualNode ChildNodeChartOfCalculationTypes = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataChartOfCalculationTypes = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeChartOfCalculationTypes); - ChildNodeDataChartOfCalculationTypes->Name = MainForm->ChartOfCalculationTypes[i]; - ChildNodeDataChartOfCalculationTypes->Age = 30; - ChildNodeDataChartOfCalculationTypes->ImgIndex = 17; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_InformationRegisters; // "Регистры сведений"; - ChildData->Age = 25; - ChildData->ImgIndex = 14; - for(int i = 0; i < MainForm->InformationRegisters.size(); i++) - { - PVirtualNode ChildNodeIReg = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataIReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeIReg); - ChildNodeDataIReg->Name = MainForm->InformationRegisters[i]; - ChildNodeDataIReg->Age = 30; - ChildNodeDataIReg->ImgIndex = 14; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_AccumulationRegisters; // "Регистры накопления"; - ChildData->Age = 25; - ChildData->ImgIndex = 13; - for(int i = 0; i < MainForm->AccumulationRegisters.size(); i++) - { - PVirtualNode ChildNodeAReg = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataAReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeAReg); - ChildNodeDataAReg->Name = MainForm->AccumulationRegisters[i]; - ChildNodeDataAReg->Age = 30; - ChildNodeDataAReg->ImgIndex = 13; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_AccountingRegisters; // "Регистры бухгалтерии"; - ChildData->Age = 25; - ChildData->ImgIndex = 117; - for(int i = 0; i < MainForm->AccountingRegisters.size(); i++) - { - PVirtualNode ChildNodeAccReg = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataAccReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeAccReg); - ChildNodeDataAccReg->Name = MainForm->AccountingRegisters[i]; - ChildNodeDataAccReg->Age = 30; - ChildNodeDataAccReg->ImgIndex = 117; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_CalculationRegisters; // "Регистры расчета"; - ChildData->Age = 18; - ChildData->ImgIndex = 18; - for(int i = 0; i < MainForm->CalculationRegisters.size(); i++) - { - PVirtualNode ChildNodeCalcReg = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataCalcReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCalcReg); - ChildNodeDataCalcReg->Name = MainForm->CalculationRegisters[i]; - ChildNodeDataCalcReg->Age = 30; - ChildNodeDataCalcReg->ImgIndex = 18; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_BusinessProcesses; // "Бизнес-процессы"; - ChildData->Age = 25; - ChildData->ImgIndex = 58; - for(int i = 0; i < MainForm->BusinessProcesses.size(); i++) - { - PVirtualNode ChildNodeBP = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataBP = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeBP); - ChildNodeDataBP->Name = MainForm->BusinessProcesses[i]; - ChildNodeDataBP->Age = 30; - ChildNodeDataBP->ImgIndex = 58; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_Tasks; // "Задачи"; - ChildData->Age = 25; - ChildData->ImgIndex = 59; - for(int i = 0; i < MainForm->Tasks.size(); i++) - { - PVirtualNode ChildNodeTasks = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataTasks = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeTasks); - ChildNodeDataTasks->Name = MainForm->Tasks[i]; - ChildNodeDataTasks->Age = 30; - ChildNodeDataTasks->ImgIndex = 59; - } - - ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); - ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); - ChildData->Name = md_ExternalDataSources; // "Внешние источники данных"; - ChildData->Age = 25; - ChildData->ImgIndex = 27; - for(int i = 0; i < MainForm->ExternalDataSources.size(); i++) - { - PVirtualNode ChildNodeEDS = VirtualStringTreeValue1C->AddChild(ChildNode); - VirtualTreeData *ChildNodeDataEDS = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeEDS); - ChildNodeDataEDS->Name = MainForm->ExternalDataSources[i]; - ChildNodeDataEDS->Age = 30; - ChildNodeDataEDS->ImgIndex = 27; - } - - VirtualStringTreeValue1C->Expanded[RootNode] = true; - - RootData->Name = MainForm->ConfigName; - RootData->Age = 100; - RootData->ImgIndex = 72; +// // Корень конфигурации +// VirtualStringTreeValue1C->Clear(); +// PVirtualNode RootNode = VirtualStringTreeValue1C->AddChild(nullptr); +// +// VirtualTreeData *RootData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(RootNode); +// +// +// +// +// // Добавляем дочерний узел +// PVirtualNode ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// VirtualTreeData *ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Common; // Общие +// ChildData->Age = 30; +// ChildData->ImgIndex = 84; +// +// //================================= поддерево Общие ============================================== +// PVirtualNode ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_Subsystems; //"Подсистемы"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 74; +// // у подсистем есть иерархия, так что это нужно переделать +// for(int i = 0; i < MainForm->Subsystems.size(); i++) +// { +// PVirtualNode ChildNodeSub = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataSub = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeSub); +// ChildNodeDataSub->Name = MainForm->Subsystems[i].name; +// ChildNodeDataSub->Age = 30; +// ChildNodeDataSub->ImgIndex = 74; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommonModules; //"Общие модули"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 87; +// for(size_t i = 0; i < MainForm->mdCommonModules.size(); i++) +// { +// PVirtualNode ChildNodeCommonModules = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataCommonModules = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCommonModules); +// ChildNodeDataCommonModules->Name = static_cast(MainForm->mdCommonModules[i].get())->name; +// ChildNodeDataCommonModules->Age = 30; +// ChildNodeDataCommonModules->ImgIndex = 87; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_SessionParameters; //"Параметры сеанса"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 90; +// for(size_t i = 0; i < MainForm->mdSessionParameters.size(); i++) +// { +// PVirtualNode ChildNodePar = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataPar = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodePar); +// ChildNodeDataPar->Name = static_cast(MainForm->mdSessionParameters[i].get())->name; +// ChildNodeDataPar->Age = 30; +// ChildNodeDataPar->ImgIndex = 90; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_Roles; //"Роли"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 81; +// for(size_t i = 0; i < MainForm->mdRoles.size(); i++) +// { +// PVirtualNode ChildNodeRoles = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataRoles = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeRoles); +// ChildNodeDataRoles->Name = static_cast(MainForm->mdRoles[i].get())->GetRoleName(); +// ChildNodeDataRoles->Age = 30; +// ChildNodeDataRoles->ImgIndex = 81; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommonAttributes; // "Общие реквизиты"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 24; +// for(int i = 0; i < MainForm->CommonAttributes .size(); i++) +// { +// PVirtualNode ChildNodeCommonAtt = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataCommonAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCommonAtt); +// ChildNodeDataCommonAtt->Name = MainForm->CommonAttributes[i]; +// ChildNodeDataCommonAtt->Age = 30; +// ChildNodeDataCommonAtt->ImgIndex = 24; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_ExchangePlans; //"Планы обмена"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 41; +// for(int i = 0; i < MainForm->ExchangePlans.size(); i++) +// { +// PVirtualNode ChildNodeExch = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataExch = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeExch); +// ChildNodeDataExch->Name = MainForm->ExchangePlans[i]; +// ChildNodeDataExch->Age = 30; +// ChildNodeDataExch->ImgIndex = 41; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_FilterCriteria; //"Критерии отбора"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 85; +// for(int i = 0; i < MainForm->FilterCriteria.size(); i++) +// { +// PVirtualNode ChildNodeFC = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataFC = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeFC); +// ChildNodeDataFC->Name = MainForm->FilterCriteria[i]; +// ChildNodeDataFC->Age = 30; +// ChildNodeDataFC->ImgIndex = 85; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_EventSubscriptions; //"Подписки на события"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 100; +// for(int i = 0; i < MainForm->EventSubscriptions.size(); i++) +// { +// PVirtualNode ChildNodeEvt = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataEvt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeEvt); +// ChildNodeDataEvt->Name = MainForm->EventSubscriptions[i]; +// ChildNodeDataEvt->Age = 30; +// ChildNodeDataEvt->ImgIndex = 100; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_ScheduledJobs; //"Регламентные задания"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 104; +// for(int i = 0; i < MainForm->ScheduledJobs.size(); i++) +// { +// PVirtualNode ChildNodeJobs = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataJobs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeJobs); +// ChildNodeDataJobs->Name = MainForm->ScheduledJobs[i]; +// ChildNodeDataJobs->Age = 30; +// ChildNodeDataJobs->ImgIndex = 104; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_Bots; //"Боты"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 132; +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_FunctionalOptions; //"Функциональные опции"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 108; +// for(int i = 0; i < MainForm->FunctionalOptions.size(); i++) +// { +// PVirtualNode ChildNodeFO = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataFO = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeFO); +// ChildNodeDataFO->Name = MainForm->FunctionalOptions[i]; +// ChildNodeDataFO->Age = 30; +// ChildNodeDataFO->ImgIndex = 108; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_FunctionalOptionsParameters; //"Параметры функциональных опций"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 109; +// for(int i = 0; i < MainForm->FunctionalOptionsParameters .size(); i++) +// { +// PVirtualNode ChildNodeFOP = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataFOP = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeFOP); +// ChildNodeDataFOP->Name = MainForm->FunctionalOptionsParameters[i]; +// ChildNodeDataFOP->Age = 30; +// ChildNodeDataFOP->ImgIndex = 109; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_DefinedTypes; //"Определяемые типы"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 111; +// for(int i = 0; i < MainForm->DefinedTypes.size(); i++) +// { +// PVirtualNode ChildNodeDT = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataDT = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDT); +// ChildNodeDataDT->Name = MainForm->DefinedTypes[i]; +// ChildNodeDataDT->Age = 30; +// ChildNodeDataDT->ImgIndex = 111; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_SettingsStorages; //"Хранилища настроек"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 52; +// for(int i = 0; i < MainForm->SettingsStorages.size(); i++) +// { +// PVirtualNode ChildNodeSS = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataSS = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeSS); +// ChildNodeDataSS->Name = MainForm->SettingsStorages[i]; +// ChildNodeDataSS->Age = 30; +// ChildNodeDataSS->ImgIndex = 52; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommonCommands; //"Общие команды"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 98; +// for(int i = 0; i < MainForm->CommonCommands.size(); i++) +// { +// PVirtualNode ChildNodeComCom = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataComCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeComCom); +// ChildNodeDataComCom->Name = MainForm->CommonCommands[i]; +// ChildNodeDataComCom->Age = 30; +// ChildNodeDataComCom->ImgIndex = 98; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommandGroups; //"Группы команд"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 99; +// for(size_t i = 0; i < MainForm->mdCommandGroups.size(); i++) +// { +// PVirtualNode ChildNodeComGroup = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataComGroup = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeComGroup); +// TCommandGroups* CurCommandGroup = static_cast(MainForm->mdCommandGroups[i].get()); +// ChildNodeDataComGroup->Name = CurCommandGroup->GetCommandName(); +// ChildNodeDataComGroup->Age = 30; +// ChildNodeDataComGroup->ImgIndex = 99; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommonForms; //"Общие формы"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 86; +// for(size_t i = 0; i < MainForm->mdCommonForms.size(); i++) +// { +// PVirtualNode ChildNodeComF = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataComF = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeComF); +// TCommonForms* CurCommonForm = static_cast(MainForm->mdCommonForms[i].get()); +// ChildNodeDataComF->Name = CurCommonForm->GetFormName(); +// ChildNodeDataComF->Age = 30; +// ChildNodeDataComF->ImgIndex = 86; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_Interfaces; //"Интерфейсы"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 80; +// for(size_t i = 0; i < MainForm->mdInterfaces.size(); i++) +// { +// PVirtualNode ChildNodeInt = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataInt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeInt); +// TInterfaces* CurInterface = static_cast(MainForm->mdInterfaces[i].get()); +// ChildNodeDataInt->Name = CurInterface->GetInterfaceName(); +// ChildNodeDataInt->Age = 30; +// ChildNodeDataInt->ImgIndex = 80; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommonTemplates;//"Общие макеты"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 79; +// for(size_t i = 0; i < MainForm->mdCommonTemplates.size(); i++) +// { +// PVirtualNode ChildNodeCTemp = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataCTemp = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCTemp); +// ChildNodeDataCTemp->Name = static_cast(MainForm->mdCommonTemplates[i].get())->GetTemplateName(); +// ChildNodeDataCTemp->Age = 30; +// ChildNodeDataCTemp->ImgIndex = 79; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_CommonPictures; //"Общие картинки"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 77; +// for(size_t i = 0; i < MainForm->mdCommonPictures.size(); i++) +// { +// PVirtualNode ChildNodePic = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataPic = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodePic); +// ChildNodeDataPic->Name = static_cast(MainForm->mdCommonPictures[i].get())->GetPictureName(); +// ChildNodeDataPic->Age = 30; +// ChildNodeDataPic->ImgIndex = 77; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_XDTOPackages; //"XDTO-пакеты"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 91; +// for(size_t i = 0; i < MainForm->mdXDTOPackages.size(); i++) +// { +// PVirtualNode ChildNodeXDTO = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataXDTO = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeXDTO); +// ChildNodeDataXDTO->Name = static_cast(MainForm->mdXDTOPackages[i].get())->GetXDTOPackageName(); +// ChildNodeDataXDTO->Age = 30; +// ChildNodeDataXDTO->ImgIndex = 91; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_WebServices; //"Web-сервисы"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 92; +// for(size_t i = 0; i < MainForm->mdWebServices.size(); i++) +// { +// PVirtualNode ChildNodeWS = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataWS = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeWS); +// ChildNodeDataWS->Name = static_cast(MainForm->mdWebServices[i].get())->GetWebServiceName(); +// ChildNodeDataWS->Age = 30; +// ChildNodeDataWS->ImgIndex = 92; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_HTTPServices; //"HTTP-сервисы"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 113; +// for(size_t i = 0; i < MainForm->mdHTTPServices.size(); i++) +// { +// PVirtualNode ChildNodeHTTPServices = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataHTTPServices = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeHTTPServices); +// THTTPServices* CurHTTPService = static_cast(MainForm->mdHTTPServices[i].get()); +// ChildNodeDataHTTPServices->Name = CurHTTPService->GetHTTPServicesName(); +// ChildNodeDataHTTPServices->Age = 30; +// ChildNodeDataHTTPServices->ImgIndex = 113; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_WSReferences; //"WS-ссылки"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 96; +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_IntegrationServices; //"Сервисы интеграции"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 131; +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_StyleItems; //"Элементы стиля"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 76; +// for(int i = 0; i < MainForm->StyleItems.size(); i++) +// { +// PVirtualNode ChildNodeStlStl = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataStlStl = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeStlStl); +// ChildNodeDataStlStl->Name = MainForm->StyleItems[i]; +// ChildNodeDataStlStl->Age = 30; +// ChildNodeDataStlStl->ImgIndex = 76; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_Styles; //"Стили"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 75; +// for(int i = 0; i < MainForm->Styles.size(); i++) +// { +// PVirtualNode ChildNodeStl = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataStl = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeStl); +// ChildNodeDataStl->Name = MainForm->Styles[i]; +// ChildNodeDataStl->Age = 30; +// ChildNodeDataStl->ImgIndex = 75; +// } +// +// ChildNode1 = VirtualStringTreeValue1C->AddChild(ChildNode); +// ChildData1 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode1); +// ChildData1->Name = md_Languages; // "Языки"; +// ChildData1->Age = 30; +// ChildData1->ImgIndex = 73; +// +// for(size_t i = 0; i < MainForm->mdLanguages.size(); i++) +// { +// PVirtualNode ChildNodeLang = VirtualStringTreeValue1C->AddChild(ChildNode1); +// VirtualTreeData *ChildNodeDataLang = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeLang); +// ChildNodeDataLang->Name = static_cast(MainForm->mdLanguages[i].get())->name; +// ChildNodeDataLang->Age = 30; +// ChildNodeDataLang->ImgIndex = 73; +// } +// //================================================================================================ +// +// // Константы +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Constants; // "Константы"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 0; +// for(size_t i = 0; i < MainForm->mdConstants.size(); i++) +// { +// PVirtualNode ChildNodeConst = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataConst = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeConst); +// ChildNodeDataConst->Name = static_cast(MainForm->mdConstants[i].get())->name; +// ChildNodeDataConst->Age = 30; +// ChildNodeDataConst->ImgIndex = 0; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Catalogs; // "Справочники"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 1; +// +// for(size_t i = 0; i < MainForm->mdCatalogs.size(); i++) +// { +// PVirtualNode ChildNodeCatalogs = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataCatalogs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatalogs); +// TCatalogs* CurCat = static_cast(MainForm->mdCatalogs[i].get()); +// ChildNodeDataCatalogs->Name = CurCat->name; +// ChildNodeDataCatalogs->Age = 30; +// ChildNodeDataCatalogs->ImgIndex = 1; +// +// // Реквизиты +// PVirtualNode ChildNodeCatAtt = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); +// VirtualTreeData *ChildNodeDataCatAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatAtt); +// ChildNodeDataCatAtt->Name = "Реквизиты"; +// ChildNodeDataCatAtt->Age = 30; +// ChildNodeDataCatAtt->ImgIndex = 83; +// // Список Реквизитов +// for (size_t j = 0; j < CurCat->getAttributes().size(); j++) +// { +// PVirtualNode ChildNodeCatCurAtt = VirtualStringTreeValue1C->AddChild(ChildNodeCatAtt); +// VirtualTreeData *ChildNodeDataCatCurAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurAtt); +// ChildNodeDataCatCurAtt->Name = ((CurCat->getAttributes())[i])->name; +// ChildNodeDataCatCurAtt->Age = 30; +// ChildNodeDataCatCurAtt->ImgIndex = 83; +// } +// +// // Табличные части +// PVirtualNode ChildNodeCatTabs = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); +// VirtualTreeData *ChildNodeDataCatTabs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatTabs); +// ChildNodeDataCatTabs->Name = "Табличные части"; +// ChildNodeDataCatTabs->Age = 30; +// ChildNodeDataCatTabs->ImgIndex = 82; +// // Список ТЧ +// for (size_t j = 0; j < CurCat->getTabularSections().size(); j++) +// { +// PVirtualNode ChildNodeCatCurAtt = VirtualStringTreeValue1C->AddChild(ChildNodeCatTabs); +// VirtualTreeData *ChildNodeDataCatCurAtt = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurAtt); +// ChildNodeDataCatCurAtt->Name = ((CurCat->getTabularSections())[j])->name; +// ChildNodeDataCatCurAtt->Age = 30; +// ChildNodeDataCatCurAtt->ImgIndex = 82; +// } +// +// // Формы +// PVirtualNode ChildNodeCatForm = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); +// VirtualTreeData *ChildNodeDataCatForm = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatForm); +// ChildNodeDataCatForm->Name = "Формы"; +// ChildNodeDataCatForm->Age = 30; +// ChildNodeDataCatForm->ImgIndex = 86; +// // Список форм +// for (size_t j = 0; j < CurCat->getForms().size(); j++) +// { +// PVirtualNode ChildNodeCatCurForm = VirtualStringTreeValue1C->AddChild(ChildNodeCatForm); +// VirtualTreeData *ChildNodeDataCatCurForm = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurForm); +// ChildNodeDataCatCurForm->Name = ((CurCat->getForms())[j])->name; +// ChildNodeDataCatCurForm->Age = 30; +// ChildNodeDataCatCurForm->ImgIndex = 86; +// } +// +// // Команды +// PVirtualNode ChildNodeCatCom = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); +// VirtualTreeData *ChildNodeDataCatCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCom); +// ChildNodeDataCatCom->Name = "Команды"; +// ChildNodeDataCatCom->Age = 30; +// ChildNodeDataCatCom->ImgIndex = 98; +// // Список команд +// for (size_t j = 0; j < CurCat->getCommands().size(); j++) +// { +// PVirtualNode ChildNodeCatCurCom = VirtualStringTreeValue1C->AddChild(ChildNodeCatCom); +// VirtualTreeData *ChildNodeDataCatCurCom = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurCom); +// ChildNodeDataCatCurCom->Name = ((CurCat->getCommands())[j])->name; +// ChildNodeDataCatCurCom->Age = 30; +// ChildNodeDataCatCurCom->ImgIndex = 98; +// } +// // Макеты +// PVirtualNode ChildNodeCatMoxel = VirtualStringTreeValue1C->AddChild(ChildNodeCatalogs); +// VirtualTreeData *ChildNodeDataCatMoxel = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatMoxel); +// ChildNodeDataCatMoxel->Name = "Макеты"; +// ChildNodeDataCatMoxel->Age = 30; +// ChildNodeDataCatMoxel->ImgIndex = 79; +// // Список макетов +// for (size_t j = 0; j < CurCat->getLayouts().size(); j++) +// { +// PVirtualNode ChildNodeCatCurMox = VirtualStringTreeValue1C->AddChild(ChildNodeCatMoxel); +// VirtualTreeData *ChildNodeDataCatCurMox = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCatCurMox); +// ChildNodeDataCatCurMox->Name = ((CurCat->getLayouts())[j])->name; +// ChildNodeDataCatCurMox->Age = 30; +// ChildNodeDataCatCurMox->ImgIndex = 79; +// } +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Documents; // "Документы"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 4; +// +// //================================================================================ +// +// PVirtualNode ChildNode2 = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildData2 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode2); +// ChildData2->Name = md_DocumentNumerators; // "Нумераторы"; +// ChildData2->Age = 30; +// ChildData2->ImgIndex = 8; +// for(size_t i = 0; i < MainForm->mdDocumentNumerators.size(); i++) +// { +// PVirtualNode ChildNodeDocsNum = VirtualStringTreeValue1C->AddChild(ChildNode2); +// VirtualTreeData *ChildNodeDataDocsNum = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDocsNum); +// ChildNodeDataDocsNum->Name = static_cast(MainForm->mdDocumentNumerators[i].get())->name; +// ChildNodeDataDocsNum->Age = 30; +// ChildNodeDataDocsNum->ImgIndex = 8; +// } +// +// PVirtualNode ChildNode3 = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildData3 = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode3); +// ChildData3->Name = md_Sequences; // "Последовательности"; +// ChildData3->Age = 30; +// ChildData3->ImgIndex = 12; +// for(size_t i = 0; i < MainForm->mdSequences.size(); i++) +// { +// PVirtualNode ChildNodeSeq = VirtualStringTreeValue1C->AddChild(ChildNode3); +// VirtualTreeData *ChildNodeDataSeq = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeSeq); +// ChildNodeDataSeq->Name = static_cast(MainForm->mdSequences[i].get())->name; +// ChildNodeDataSeq->Age = 30; +// ChildNodeDataSeq->ImgIndex = 12; +// } +// +// for(size_t i = 0; i < MainForm->mdDocuments.size(); i++) +// { +// PVirtualNode ChildNodeDocs = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataDocs = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDocs); +// ChildNodeDataDocs->Name = static_cast(MainForm->mdDocuments[i].get())->name; +// ChildNodeDataDocs->Age = 30; +// ChildNodeDataDocs->ImgIndex = 4; +// } +// +// //================================================================================ +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_DocumentJournals; //"Журналы документов"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 5; +// +// for(size_t i = 0; i < MainForm->mdDocumentJournals.size(); i++) +// { +// PVirtualNode ChildNodeDocsJ = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataDocsJ = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDocsJ); +// ChildNodeDataDocsJ->Name = static_cast(MainForm->mdDocumentJournals[i].get())->name; +// ChildNodeDataDocsJ->Age = 30; +// ChildNodeDataDocsJ->ImgIndex = 5; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Enums; // "Перечисления"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 2; +// for(size_t i = 0; i < MainForm->mdEnums.size(); i++) +// { +// PVirtualNode ChildNodeEnums = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataEnums = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeEnums); +// ChildNodeDataEnums->Name = static_cast(MainForm->mdEnums[i].get())->name; +// ChildNodeDataEnums->Age = 30; +// ChildNodeDataEnums->ImgIndex = 2; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Reports; // "Отчеты"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 9; +// for(size_t i = 0; i < MainForm->mdReports.size(); i++) +// { +// PVirtualNode ChildNodeReports = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataReports = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeReports); +// ChildNodeDataReports->Name = static_cast(MainForm->mdReports[i].get())->name; +// ChildNodeDataReports->Age = 30; +// ChildNodeDataReports->ImgIndex = 9; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_DataProcessors; // "Обработки"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 7; +// for(int i = 0; i < MainForm->DataProcessors.size(); i++) +// { +// PVirtualNode ChildNodeDP = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataDP = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeDP); +// ChildNodeDataDP->Name = MainForm->DataProcessors[i]; +// ChildNodeDataDP->Age = 30; +// ChildNodeDataDP->ImgIndex = 7; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_ChartsOfCharacteristicTypes ;// "Планы видов характеристик"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 16; +// for(int i = 0; i < MainForm->ChartsOfCharacteristicTypes.size(); i++) +// { +// PVirtualNode ChildNodeChartsTypes = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataChartsTypes = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeChartsTypes); +// ChildNodeDataChartsTypes->Name = MainForm->ChartsOfCharacteristicTypes[i]; +// ChildNodeDataChartsTypes->Age = 30; +// ChildNodeDataChartsTypes->ImgIndex = 16; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_ChartOfAccounts; // "Планы счетов"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 116; +// for(int i = 0; i < MainForm->ChartOfAccounts.size(); i++) +// { +// PVirtualNode ChildNodeChartOfAccounts = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataChartOfAccounts = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeChartOfAccounts); +// ChildNodeDataChartOfAccounts->Name = MainForm->ChartOfAccounts[i]; +// ChildNodeDataChartOfAccounts->Age = 30; +// ChildNodeDataChartOfAccounts->ImgIndex = 116; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_ChartOfCalculationTypes; // "Планы видов расчета"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 17; +// for(int i = 0; i < MainForm->ChartOfCalculationTypes.size(); i++) +// { +// PVirtualNode ChildNodeChartOfCalculationTypes = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataChartOfCalculationTypes = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeChartOfCalculationTypes); +// ChildNodeDataChartOfCalculationTypes->Name = MainForm->ChartOfCalculationTypes[i]; +// ChildNodeDataChartOfCalculationTypes->Age = 30; +// ChildNodeDataChartOfCalculationTypes->ImgIndex = 17; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_InformationRegisters; // "Регистры сведений"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 14; +// for(int i = 0; i < MainForm->InformationRegisters.size(); i++) +// { +// PVirtualNode ChildNodeIReg = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataIReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeIReg); +// ChildNodeDataIReg->Name = MainForm->InformationRegisters[i]; +// ChildNodeDataIReg->Age = 30; +// ChildNodeDataIReg->ImgIndex = 14; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_AccumulationRegisters; // "Регистры накопления"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 13; +// for(int i = 0; i < MainForm->AccumulationRegisters.size(); i++) +// { +// PVirtualNode ChildNodeAReg = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataAReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeAReg); +// ChildNodeDataAReg->Name = MainForm->AccumulationRegisters[i]; +// ChildNodeDataAReg->Age = 30; +// ChildNodeDataAReg->ImgIndex = 13; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_AccountingRegisters; // "Регистры бухгалтерии"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 117; +// for(int i = 0; i < MainForm->AccountingRegisters.size(); i++) +// { +// PVirtualNode ChildNodeAccReg = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataAccReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeAccReg); +// ChildNodeDataAccReg->Name = MainForm->AccountingRegisters[i]; +// ChildNodeDataAccReg->Age = 30; +// ChildNodeDataAccReg->ImgIndex = 117; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_CalculationRegisters; // "Регистры расчета"; +// ChildData->Age = 18; +// ChildData->ImgIndex = 18; +// for(int i = 0; i < MainForm->CalculationRegisters.size(); i++) +// { +// PVirtualNode ChildNodeCalcReg = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataCalcReg = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeCalcReg); +// ChildNodeDataCalcReg->Name = MainForm->CalculationRegisters[i]; +// ChildNodeDataCalcReg->Age = 30; +// ChildNodeDataCalcReg->ImgIndex = 18; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_BusinessProcesses; // "Бизнес-процессы"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 58; +// for(int i = 0; i < MainForm->BusinessProcesses.size(); i++) +// { +// PVirtualNode ChildNodeBP = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataBP = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeBP); +// ChildNodeDataBP->Name = MainForm->BusinessProcesses[i]; +// ChildNodeDataBP->Age = 30; +// ChildNodeDataBP->ImgIndex = 58; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_Tasks; // "Задачи"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 59; +// for(int i = 0; i < MainForm->Tasks.size(); i++) +// { +// PVirtualNode ChildNodeTasks = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataTasks = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeTasks); +// ChildNodeDataTasks->Name = MainForm->Tasks[i]; +// ChildNodeDataTasks->Age = 30; +// ChildNodeDataTasks->ImgIndex = 59; +// } +// +// ChildNode = VirtualStringTreeValue1C->AddChild(RootNode); +// ChildData = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNode); +// ChildData->Name = md_ExternalDataSources; // "Внешние источники данных"; +// ChildData->Age = 25; +// ChildData->ImgIndex = 27; +// for(int i = 0; i < MainForm->ExternalDataSources.size(); i++) +// { +// PVirtualNode ChildNodeEDS = VirtualStringTreeValue1C->AddChild(ChildNode); +// VirtualTreeData *ChildNodeDataEDS = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(ChildNodeEDS); +// ChildNodeDataEDS->Name = MainForm->ExternalDataSources[i]; +// ChildNodeDataEDS->Age = 30; +// ChildNodeDataEDS->ImgIndex = 27; +// } +// +// VirtualStringTreeValue1C->Expanded[RootNode] = true; +// +// RootData->Name = MainForm->ConfigName; +// RootData->Age = 100; +// RootData->ImgIndex = 72; } @@ -2389,55 +2300,54 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) // Удаляем предыдущую конфигурацию (автоматически через unique_ptr) GlobalCF.reset(); - // Очищаем все TObjectList - mdCatalogs->Clear(); - mdLanguages->Clear(); - mdAccumulationRegisters->Clear(); - mdAccountingRegisters->Clear(); - mdCalculationRegisters->Clear(); - mdBusinessProcesses->Clear(); - mdChartsOfCharacteristicTypes->Clear(); - mdCommandGroups->Clear(); - mdCommonAttributes->Clear(); - mdCommonCommands->Clear(); - mdCommonTemplates->Clear(); - mdCommonForms->Clear(); - mdCommonModules->Clear(); - mdCommonPictures->Clear(); - mdCommonTemplates->Clear(); - mdConstants->Clear(); - mdDataProcessors->Clear(); - mdDefinedTypes->Clear(); - mdDocumentJournals->Clear(); - mdDocumentNumerators->Clear(); - mdDocuments->Clear(); - mdEnums->Clear(); - mdEventSubscriptions->Clear(); - mdExchangePlans->Clear(); - mdChartOfAccounts->Clear(); - mdChartOfCalculationTypes->Clear(); - mdExternalDataSources->Clear(); - mdFilterCriteria->Clear(); - mdFunctionalOptions->Clear(); - mdFunctionalOptionsParameters->Clear(); - mdHTTPServices->Clear(); - mdInformationRegisters->Clear(); - mdInterfaces->Clear(); - mdReports->Clear(); - mdRoles->Clear(); - mdBots->Clear(); - mdScheduledJobs->Clear(); - mdSessionParameters->Clear(); - mdSettingsStorages->Clear(); - mdStyleItems->Clear(); - mdStyles->Clear(); - mdSubsystems->Clear(); - mdTasks->Clear(); - mdWebServices->Clear(); - mdWSReferences->Clear(); - mdXDTOPackages->Clear(); - mdIntegrationServices->Clear(); - mdSequences->Clear(); + // Очищаем все векторы метаданных + mdCatalogs.clear(); + mdLanguages.clear(); + mdAccumulationRegisters.clear(); + mdAccountingRegisters.clear(); + mdCalculationRegisters.clear(); + mdBusinessProcesses.clear(); + mdChartsOfCharacteristicTypes.clear(); + mdCommandGroups.clear(); + mdCommonAttributes.clear(); + mdCommonCommands.clear(); + mdCommonTemplates.clear(); + mdCommonForms.clear(); + mdCommonModules.clear(); + mdCommonPictures.clear(); + mdConstants.clear(); + mdDataProcessors.clear(); + mdDefinedTypes.clear(); + mdDocumentJournals.clear(); + mdDocumentNumerators.clear(); + mdDocuments.clear(); + mdEnums.clear(); + mdEventSubscriptions.clear(); + mdExchangePlans.clear(); + mdChartOfAccounts.clear(); + mdChartOfCalculationTypes.clear(); + mdExternalDataSources.clear(); + mdFilterCriteria.clear(); + mdFunctionalOptions.clear(); + mdFunctionalOptionsParameters.clear(); + mdHTTPServices.clear(); + mdInformationRegisters.clear(); + mdInterfaces.clear(); + mdReports.clear(); + mdRoles.clear(); + mdBots.clear(); + mdScheduledJobs.clear(); + mdSessionParameters.clear(); + mdSettingsStorages.clear(); + mdStyleItems.clear(); + mdStyles.clear(); + mdSubsystems.clear(); + mdTasks.clear(); + mdWebServices.clear(); + mdWSReferences.clear(); + mdXDTOPackages.clear(); + mdIntegrationServices.clear(); + mdSequences.clear(); GlobalCF = std::make_unique(filename, true); @@ -2780,7 +2690,7 @@ void fill_subsystem(tree* tr, std::vector &md_subsys) // Процедура заполняет метаданные по корневому гуиду -void fill_md(tree* tr, String guid_md, std::vector &md_list) +void fill_md(tree* tr, String guid_md) { v8file *filedata; tree* tree_md; @@ -2856,7 +2766,7 @@ void fill_md(tree* tr, String guid_md, std::vector &md_list) int CountMD = (node_md->get_next())->get_value().ToInt(); - md_list.clear(); + //md_list.clear(); tree* curNode = node_md->get_next(); while (curNode) @@ -2897,135 +2807,109 @@ void fill_md(tree* tr, String guid_md, std::vector &md_list) // Создание объектов для специфических типов if (guid_md == GUID_Catalogs) { - TCatalogs* CurCatalogs = new TCatalogs(cf, curNode->get_value(), val); - MainForm->mdCatalogs->Add(CurCatalogs); + MainForm->mdCatalogs.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Languages) { - TLangs* CurLang = new TLangs(cf, curNode->get_value(), val); - MainForm->mdLanguages->Add(CurLang); + MainForm->mdLanguages.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CommonModules) { - // TODO: Реализовать чтение общих модулей - TCommonModules* CurModule = new TCommonModules(cf, curNode->get_value(), val); - MainForm->mdCommonModules->Add(CurModule); + MainForm->mdCommonModules.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Roles) {} else if (guid_md == GUID_CommonTemplates) { - TCommonTemplates* CurCommonTemplate = new TCommonTemplates(cf, curNode->get_value(), val); - MainForm->mdCommonTemplates->Add(CurCommonTemplate); + MainForm->mdCommonTemplates.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_HTTPServices) { - THTTPServices* CurHTTPService = new THTTPServices(cf, curNode->get_value(), val); - MainForm->mdHTTPServices->Add(CurHTTPService); + MainForm->mdHTTPServices.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_ScheduledJobs) { - TScheduledJobs* CurScheduledJob = new TScheduledJobs(cf, curNode->get_value(), val); - MainForm->mdScheduledJobs->Add(CurScheduledJob); + MainForm->mdScheduledJobs.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CommonAttributes) { - TCommonAttributes* CurCommonAtt = new TCommonAttributes(cf, curNode->get_value(), val); - MainForm->mdCommonAttributes->Add(CurCommonAtt); + MainForm->mdCommonAttributes.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_SessionParameters) { - TSessionParameters* CurSessionParam = new TSessionParameters(cf, curNode->get_value(), val); - MainForm->mdSessionParameters->Add(CurSessionParam); + MainForm->mdSessionParameters.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_FunctionalOptionsParameters) { - TFunctionalOptionsParameters* CurFOP = new TFunctionalOptionsParameters(cf, curNode->get_value(), val); - MainForm->mdFunctionalOptionsParameters->Add(CurFOP); + MainForm->mdFunctionalOptionsParameters.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Subsystems) {} else if (guid_md == GUID_Interfaces) { - TInterfaces* CurInterface = new TInterfaces(cf, curNode->get_value(), val); - MainForm->mdInterfaces->Add(CurInterface); + MainForm->mdInterfaces.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Styles) {} else if (guid_md == GUID_FilterCriteria) { - TFilterCriteria* CurFilter = new TFilterCriteria(cf, curNode->get_value(), val); - MainForm->mdFilterCriteria->Add(CurFilter); + MainForm->mdFilterCriteria.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_SettingsStorages) { - TSettingsStorages* CurSettingsStorage = new TSettingsStorages(cf, curNode->get_value(), val); - MainForm->mdSettingsStorages->Add(CurSettingsStorage); + MainForm->mdSettingsStorages.push_back(std::make_unique(cf, curNode->get_value(), val)); } - else if (guid_md == GUID_StyleItems) {} else if (guid_md == GUID_CommonPictures) { - TCommonPictures* CurCommonPicture = new TCommonPictures(cf, curNode->get_value(), val); - MainForm->mdCommonPictures->Add(CurCommonPicture); + MainForm->mdCommonPictures.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_ExchangePlans) { - TExchangePlans* CurExchPlan = new TExchangePlans(cf, curNode->get_value(), val); - MainForm->mdExchangePlans->Add(CurExchPlan); + MainForm->mdExchangePlans.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_EventSubscriptions) { - TEventSubscriptions* CurEventSub = new TEventSubscriptions(cf, curNode->get_value(), val); - MainForm->mdEventSubscriptions->Add(CurEventSub); + MainForm->mdEventSubscriptions.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_WebServices) { - TWebServices* CurWebService = new TWebServices(cf, curNode->get_value(), val); - MainForm->mdWebServices->Add(CurWebService); + MainForm->mdWebServices.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_FunctionalOptions) { - TFunctionalOptions* CurFO = new TFunctionalOptions(cf, curNode->get_value(), val); - MainForm->mdFunctionalOptions->Add(CurFO); + MainForm->mdFunctionalOptions.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_DefinedTypes) { - TDefinedTypes* CurDefinedType = new TDefinedTypes(cf, curNode->get_value(), val); - MainForm->mdDefinedTypes->Add(CurDefinedType); + MainForm->mdDefinedTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_XDTOPackages) { - TXDTOPackages* CurXDTOPackage = new TXDTOPackages(cf, curNode->get_value(), val); - MainForm->mdXDTOPackages->Add(CurXDTOPackage); + MainForm->mdXDTOPackages.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_WSReferences) {} else if (guid_md == GUID_Constants) { - TConstants* CurConstant = new TConstants(cf, curNode->get_value(), val); - MainForm->mdConstants->Add(CurConstant); + MainForm->mdConstants.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Documents) { - TDocuments* CurDocuments = new TDocuments(cf, curNode->get_value(), val); - MainForm->mdDocuments->Add(CurDocuments); + MainForm->mdDocuments.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CommonForms) { - TCommonForms* CurCommonForm = new TCommonForms(cf, curNode->get_value(), val); - MainForm->mdCommonForms->Add(CurCommonForm); + MainForm->mdCommonForms.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_InformationRegisters) { - TInformationRegisters* CurIReg = new TInformationRegisters(cf, curNode->get_value(), val); - MainForm->mdInformationRegisters->Add(CurIReg); + MainForm->mdInformationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CalculationRegisters) { - TCalculationRegisters* CurCReg = new TCalculationRegisters(cf, curNode->get_value(), val); - MainForm->mdCalculationRegisters->Add(CurCReg); + MainForm->mdCalculationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_BusinessProcesses) {} @@ -3033,75 +2917,61 @@ void fill_md(tree* tr, String guid_md, std::vector &md_list) {} else if (guid_md == GUID_AccountingRegisters) { - TAccountingRegisters* CurAReg = new TAccountingRegisters(cf, curNode->get_value(), val); - MainForm->mdAccountingRegisters->Add(CurAReg); + MainForm->mdAccountingRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CommandGroups) { - TCommandGroups* CurCommandGroup = new TCommandGroups(cf, curNode->get_value(), val); - MainForm->mdCommandGroups->Add(CurCommandGroup); + MainForm->mdCommandGroups.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CommonCommands) { - TCommonCommands* CurCommonCommand = new TCommonCommands(cf, curNode->get_value(), val); - MainForm->mdCommonCommands->Add(CurCommonCommand); + MainForm->mdCommonCommands.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Numerators) { - TNumerators* CurNumerator = new TNumerators(cf, curNode->get_value(), val); - MainForm->mdDocumentNumerators->Add(CurNumerator); + MainForm->mdDocumentNumerators.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_JournDocuments) { - TJournals* CurJournal = new TJournals(cf, curNode->get_value(), val); - MainForm->mdDocumentJournals->Add(CurJournal); + MainForm->mdDocumentJournals.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Reports) { - TReports* CurReport = new TReports(cf, curNode->get_value(), val); - MainForm->mdReports->Add(CurReport); + MainForm->mdReports.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_ChartOfCharacteristicTypes) { - TChartOfCharacteristicTypes* CCT = new TChartOfCharacteristicTypes(cf, curNode->get_value(), val); - MainForm->mdChartsOfCharacteristicTypes->Add(CCT); + MainForm->mdChartsOfCharacteristicTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); } - else if (guid_md == GUID_ChartsOfAccounts) // план счетов + else if (guid_md == GUID_ChartsOfAccounts) { - TChartOfAccounts* CurCACC = new TChartOfAccounts(cf, curNode->get_value(), val); - MainForm->mdChartOfAccounts->Add(CurCACC); + MainForm->mdChartOfAccounts.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_ChartsOfCalculationTypes) { - TChartOfCalculationTypes* CurCCT = new TChartOfCalculationTypes(cf, curNode->get_value(), val); - MainForm->mdChartOfCalculationTypes->Add(CurCCT); + MainForm->mdChartOfCalculationTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_AccumulationRegisters) { - TAccumulationRegisters* CurAReg = new TAccumulationRegisters(cf, curNode->get_value(), val); - MainForm->mdAccumulationRegisters->Add(CurAReg); + MainForm->mdAccumulationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Sequences) { - TSequences* CurSequence = new TSequences(cf, curNode->get_value(), val); - MainForm->mdSequences->Add(CurSequence); + MainForm->mdSequences.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_DataProcessors) { - TDataProcessors* CurDataProcessor = new TDataProcessors(cf, curNode->get_value(), val); - MainForm->mdDataProcessors->Add(CurDataProcessor); + MainForm->mdDataProcessors.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Enums) { - TEnums* CurEnums = new TEnums(cf, curNode->get_value(), val); - MainForm->mdEnums->Add(CurEnums); + MainForm->mdEnums.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_Bots) { - TBots* CurBot = new TBots(cf, curNode->get_value(), val); - MainForm->mdBots->Add(CurBot); + MainForm->mdBots.push_back(std::make_unique(cf, curNode->get_value(), val)); } - md_list.push_back(val); + //md_list.push_back(val); } } @@ -3132,158 +3002,158 @@ void get_cf_name(tree* tr, Messager* mess) node3 = tr; // Заполняем справочники - fill_md(tr, GUID_Catalogs, MainForm->Catalogs); + fill_md(tr, GUID_Catalogs); mess->AddMessage(L"Справочники обработаны", MessageState::msInfo); // Заполняем языки - fill_md(tr, GUID_Languages, MainForm->Languages); + fill_md(tr, GUID_Languages); mess->AddMessage(L"Языки обработаны", MessageState::msInfo); // Заполняем регистры накопления - fill_md(tr, GUID_AccumulationRegisters, MainForm->AccumulationRegisters); + fill_md(tr, GUID_AccumulationRegisters); mess->AddMessage(L"Регистры накопления обработаны", MessageState::msInfo); // Заполняем регистры бухгалтерии - fill_md(tr, GUID_AccountingRegisters, MainForm->AccountingRegisters); + fill_md(tr, GUID_AccountingRegisters); mess->AddMessage(L"Регистры бухгалтерии обработаны", MessageState::msInfo); // Заполняем регистры расчета - fill_md(tr, GUID_CalculationRegisters, MainForm->CalculationRegisters); + fill_md(tr, GUID_CalculationRegisters); mess->AddMessage(L"Регистры расчета обработаны", MessageState::msInfo); // Заполняем бизнес-процессы - fill_md(tr, GUID_BusinessProcesses, MainForm->BusinessProcesses); + fill_md(tr, GUID_BusinessProcesses); mess->AddMessage(L"Бизнес-процессы обработаны", MessageState::msInfo); // ПВХ - fill_md(tr, GUID_ChartOfCharacteristicTypes, MainForm->ChartsOfCharacteristicTypes); + fill_md(tr, GUID_ChartOfCharacteristicTypes); mess->AddMessage(L"Планы видов характеристик обработаны", MessageState::msInfo); // группы команд - fill_md(tr, GUID_CommandGroups, MainForm->CommandGroups); + fill_md(tr, GUID_CommandGroups); mess->AddMessage(L"Группы команд обработаны", MessageState::msInfo); // общие реквизиты - fill_md(tr, GUID_CommonAttributes, MainForm->CommonAttributes); + fill_md(tr, GUID_CommonAttributes); mess->AddMessage(L"Общие реквизиты обработаны", MessageState::msInfo); // общие команды - fill_md(tr, GUID_CommonCommands, MainForm->CommonCommands); + fill_md(tr, GUID_CommonCommands); mess->AddMessage(L"Общие команды обработаны", MessageState::msInfo); // общие формы - fill_md(tr, GUID_CommonForms, MainForm->CommonForms); + fill_md(tr, GUID_CommonForms); mess->AddMessage(L"Общие формы обработаны", MessageState::msInfo); // общие модули - fill_md(tr, GUID_CommonModules, MainForm->CommonModules); + fill_md(tr, GUID_CommonModules); mess->AddMessage(L"Общие модули обработаны", MessageState::msInfo); // общие картинки - fill_md(tr, GUID_CommonPictures, MainForm->CommonPictures); + fill_md(tr, GUID_CommonPictures); mess->AddMessage(L"Общие картинки обработаны", MessageState::msInfo); // общие макеты - fill_md(tr, GUID_CommonTemplates, MainForm->CommonTemplates); + fill_md(tr, GUID_CommonTemplates); mess->AddMessage(L"Общие макеты обработаны", MessageState::msInfo); // константы - fill_md(tr, GUID_Constants, MainForm->Constants); - mess->AddMessage(L"Константы обработаны: " + IntToStr((int)MainForm->Constants.size()), MessageState::msInfo); + fill_md(tr, GUID_Constants); + mess->AddMessage(L"Константы обработаны: ", MessageState::msInfo); // обработки - fill_md(tr, GUID_DataProcessors, MainForm->DataProcessors); + fill_md(tr, GUID_DataProcessors); mess->AddMessage(L"Обработки обработаны", MessageState::msInfo); // определяемые типы - fill_md(tr, GUID_DefinedTypes, MainForm->DefinedTypes); + fill_md(tr, GUID_DefinedTypes); mess->AddMessage(L"Определяемые типы обработаны", MessageState::msInfo); // журналы документов - fill_md(tr, GUID_JournDocuments, MainForm->DocumentJournals); + fill_md(tr, GUID_JournDocuments); mess->AddMessage(L"Журналы документов обработаны", MessageState::msInfo); // нумераторы - fill_md(tr, GUID_Numerators, MainForm->DocumentNumerators); + fill_md(tr, GUID_Numerators); mess->AddMessage(L"Нумераторы обработаны", MessageState::msInfo); // документы - fill_md(tr, GUID_Documents, MainForm->Documents); + fill_md(tr, GUID_Documents); mess->AddMessage(L"Документы обработаны", MessageState::msInfo); // перечисления - fill_md(tr, GUID_Enums, MainForm->Enums); + fill_md(tr, GUID_Enums); mess->AddMessage(L"Перечисления обработаны", MessageState::msInfo); // подписки на события - fill_md(tr, GUID_EventSubscriptions, MainForm->EventSubscriptions); + fill_md(tr, GUID_EventSubscriptions); mess->AddMessage(L"Подписки на события обработаны", MessageState::msInfo); // планы обмена - fill_md(tr, GUID_ExchangePlans, MainForm->ExchangePlans); + fill_md(tr, GUID_ExchangePlans); mess->AddMessage(L"Планы обмена обработаны", MessageState::msInfo); // планы счетов - fill_md(tr, GUID_ChartsOfAccounts, MainForm->ChartOfAccounts); + fill_md(tr, GUID_ChartsOfAccounts); mess->AddMessage(L"Планы счетов обработаны", MessageState::msInfo); // планы видов расчета - fill_md(tr, GUID_ChartsOfCalculationTypes, MainForm->ChartOfCalculationTypes); + fill_md(tr, GUID_ChartsOfCalculationTypes); mess->AddMessage(L"Планы видов расчета обработаны", MessageState::msInfo); // внешние источники данных - fill_md(tr, GUID_ExternalDataSources, MainForm->ExternalDataSources); + fill_md(tr, GUID_ExternalDataSources); mess->AddMessage(L"Внешние источники данных обработаны", MessageState::msInfo); // критерии отбора - fill_md(tr, GUID_FilterCriteria, MainForm->FilterCriteria); + fill_md(tr, GUID_FilterCriteria); mess->AddMessage(L"Критерии отбора обработаны", MessageState::msInfo); // функциональные опции - fill_md(tr, GUID_FunctionalOptions, MainForm->FunctionalOptions); + fill_md(tr, GUID_FunctionalOptions); mess->AddMessage(L"Функциональные опции обработаны", MessageState::msInfo); // параметры функциональных опций - fill_md(tr, GUID_FunctionalOptionsParameters, MainForm->FunctionalOptionsParameters); + fill_md(tr, GUID_FunctionalOptionsParameters); mess->AddMessage(L"Параметры функциональных опций обработаны", MessageState::msInfo); // http - сервисы - fill_md(tr, GUID_HTTPServices, MainForm->HTTPServices); + fill_md(tr, GUID_HTTPServices); mess->AddMessage(L"http - сервисы обработаны", MessageState::msInfo); // регистры сведений - fill_md(tr, GUID_InformationRegisters, MainForm->InformationRegisters); + fill_md(tr, GUID_InformationRegisters); mess->AddMessage(L"Регистры сведений обработаны", MessageState::msInfo); // интерфейсы - fill_md(tr, GUID_Interfaces, MainForm->Interfaces); + fill_md(tr, GUID_Interfaces); mess->AddMessage(L"Интерфейсы обработаны", MessageState::msInfo); // отчеты - fill_md(tr, GUID_Reports, MainForm->Reports); + fill_md(tr, GUID_Reports); mess->AddMessage(L"Отчеты обработаны", MessageState::msInfo); // роли - fill_md(tr, GUID_Roles, MainForm->Roles); + fill_md(tr, GUID_Roles); mess->AddMessage(L"Роли обработаны", MessageState::msInfo); // параметры сеанса - fill_md(tr, GUID_SessionParameters, MainForm->SessionParameters); + fill_md(tr, GUID_SessionParameters); mess->AddMessage(L"Параметры сеанса обработаны", MessageState::msInfo); // хранилища настроек - fill_md(tr, GUID_SettingsStorages, MainForm->SettingsStorages); + fill_md(tr, GUID_SettingsStorages); mess->AddMessage(L"Хранилища настроек обработаны", MessageState::msInfo); // элементы стиля - fill_md(tr, GUID_StyleItems, MainForm->StyleItems); + fill_md(tr, GUID_StyleItems); mess->AddMessage(L"Элементы стиля обработаны", MessageState::msInfo); // стили - fill_md(tr, GUID_Styles, MainForm->Styles); + fill_md(tr, GUID_Styles); mess->AddMessage(L"Стили обработаны", MessageState::msInfo); // подсистемы @@ -3291,31 +3161,31 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Подсистемы обработаны", MessageState::msInfo); // задачи - fill_md(tr, GUID_Tasks, MainForm->Tasks); + fill_md(tr, GUID_Tasks); mess->AddMessage(L"Задачи обработаны", MessageState::msInfo); // веб-сервисы - fill_md(tr, GUID_WebServices, MainForm->WebServices); + fill_md(tr, GUID_WebServices); mess->AddMessage(L"веб-сервисы обработаны", MessageState::msInfo); // ws-ссылки - fill_md(tr, GUID_WSReferences, MainForm->WSReferences); + fill_md(tr, GUID_WSReferences); mess->AddMessage(L"ws-ссылки обработаны", MessageState::msInfo); // xdto-пакеты - fill_md(tr, GUID_XDTOPackages, MainForm->XDTOPackages); + fill_md(tr, GUID_XDTOPackages); mess->AddMessage(L"xdto-пакеты обработаны", MessageState::msInfo); // регл задания - fill_md(tr, GUID_ScheduledJobs, MainForm->ScheduledJobs); + fill_md(tr, GUID_ScheduledJobs); mess->AddMessage(L"Регламентные задания обработаны", MessageState::msInfo); // боты - fill_md(tr, GUID_Bots, MainForm->Bots); + fill_md(tr, GUID_Bots); mess->AddMessage(L"Боты обработаны", MessageState::msInfo); // последовательности - fill_md(tr, GUID_Sequences, MainForm->Sequences); + fill_md(tr, GUID_Sequences); mess->AddMessage(L"Последовательности обработаны", MessageState::msInfo); structver = (*node)[0].get_value().ToInt(); diff --git a/src/MainUnit.h b/src/MainUnit.h index 2ca3839..8dee100 100644 --- a/src/MainUnit.h +++ b/src/MainUnit.h @@ -19,8 +19,11 @@ #include #include #include +#include "SynEdit.hpp" +#include "SynEditHighlighter.hpp" +#include "SynHighlighterCpp.hpp" +#include "SynMemo.hpp" -#include #include #include "Requisite.h" @@ -113,214 +116,111 @@ class TMainForm : public TForm __fastcall TMainForm(TComponent* Owner); void __fastcall TreeInit(); void __fastcall FillVirtualTree(); - void __fastcall FillTreeMD(PVirtualNode parentNode, TObjectList *mdData, const String& md_name, int imgIndex); - void __fastcall FillTreeMDConcrete(TVirtualStringTree *tree1C, PVirtualNode parentNode, TObjectList *mdData, const String& md_name, int imgIndex); + void __fastcall FillTreeMD(PVirtualNode parentNode, const MetadataVector& mdData, const String& md_name, int imgIndex); + void __fastcall FillTreeMDConcrete(TVirtualStringTree *tree1C, PVirtualNode parentNode, const MetadataVector& mdData, const String& md_name, int imgIndex); void __fastcall fillEnumTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, TEnums* CurCat); - void __fastcall fillCatalogsTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& tabulars, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); - void __fastcall fillJournalTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& tabulars, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); - void __fastcall fillChartAccTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& accflags, - const std::vector>& dimaccflags, - const std::vector>& tabulars, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); - void __fastcall fillInformationRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& dimensions, - const std::vector>& resources, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); - void __fastcall fillAccumulationRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& dimensions, - const std::vector>& resources, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); - void __fastcall fillAccountingRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& dimensions, - const std::vector>& resources, - const std::vector>& accountingFlags, - const std::vector>& dimensionAccountingFlags, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); - void __fastcall fillCalculationRegisterTree(TObjectList *mdData, PVirtualNode childNode, VirtualTreeData *childData, - int i, int imgIndex, String name, - const std::vector>& attributes, - const std::vector>& dimensions, - const std::vector>& resources, - const std::vector>& forms, - const std::vector>& comands, - const std::vector>& moxels); + void __fastcall fillCatalogsTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& tabulars, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); + void __fastcall fillJournalTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& tabulars, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); + void __fastcall fillChartAccTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& accflags, + const std::vector>& dimaccflags, + const std::vector>& tabulars, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); + void __fastcall fillInformationRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& dimensions, + const std::vector>& resources, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); + void __fastcall fillAccumulationRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& dimensions, + const std::vector>& resources, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); + void __fastcall fillAccountingRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& dimensions, + const std::vector>& resources, + const std::vector>& accountingFlags, + const std::vector>& dimensionAccountingFlags, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); + void __fastcall fillCalculationRegisterTree(PVirtualNode childNode, VirtualTreeData *childData, int imgIndex, String name, + const std::vector>& attributes, + const std::vector>& dimensions, + const std::vector>& resources, + const std::vector>& forms, + const std::vector>& comands, + const std::vector>& moxels); String ConfigName; - std::vector Catalogs; - TObjectList *mdCatalogs; - - std::vector Commonss; - TObjectList *mdCommonss; - - std::vector Languages; - TObjectList *mdLanguages; - - std::vector AccumulationRegisters; - TObjectList *mdAccumulationRegisters; - - std::vector AccountingRegisters; - TObjectList *mdAccountingRegisters; - - std::vector CalculationRegisters; - TObjectList *mdCalculationRegisters; - - std::vector BusinessProcesses; - TObjectList *mdBusinessProcesses; - - std::vector ChartsOfCharacteristicTypes; - TObjectList *mdChartsOfCharacteristicTypes; - - std::vector CommandGroups; - TObjectList *mdCommandGroups; - - std::vector CommonAttributes; - TObjectList *mdCommonAttributes; - - std::vector CommonCommands; - TObjectList *mdCommonCommands; - - - std::vector CommonForms; - TObjectList *mdCommonForms; - - std::vector CommonModules; - TObjectList *mdCommonModules; - - std::vector CommonPictures; - TObjectList *mdCommonPictures; - - std::vector CommonTemplates; - TObjectList *mdCommonTemplates; - - std::vector Constants; - TObjectList *mdConstants; - - std::vector DataProcessors; - TObjectList *mdDataProcessors; - - std::vector DefinedTypes; - TObjectList *mdDefinedTypes; - - std::vector DocumentJournals; - TObjectList *mdDocumentJournals; - - std::vector DocumentNumerators; - TObjectList *mdDocumentNumerators; - - std::vector Documents; - TObjectList *mdDocuments; - - std::vector Enums; - TObjectList *mdEnums; - - std::vector EventSubscriptions; - TObjectList *mdEventSubscriptions; - - std::vector ExchangePlans; - TObjectList *mdExchangePlans; - - std::vector ChartOfAccounts; - TObjectList *mdChartOfAccounts; - - std::vector ChartOfCalculationTypes; - TObjectList *mdChartOfCalculationTypes; - - std::vector ExternalDataSources; - TObjectList *mdExternalDataSources; - - std::vector FilterCriteria; - TObjectList *mdFilterCriteria; - - std::vector FunctionalOptions; - TObjectList *mdFunctionalOptions; - - std::vector FunctionalOptionsParameters; - TObjectList *mdFunctionalOptionsParameters; - - std::vector HTTPServices; - TObjectList *mdHTTPServices; - - std::vector InformationRegisters; - TObjectList *mdInformationRegisters; - - std::vector Interfaces; - TObjectList *mdInterfaces; - - std::vector Reports; - TObjectList *mdReports; - - std::vector Roles; - TObjectList *mdRoles; - - std::vector Bots; - TObjectList *mdBots; - - std::vector ScheduledJobs; - TObjectList *mdScheduledJobs; - - std::vector SessionParameters; - TObjectList *mdSessionParameters; - - std::vector SettingsStorages; - TObjectList *mdSettingsStorages; - - std::vector StyleItems; - TObjectList *mdStyleItems; - - std::vector Styles; - TObjectList *mdStyles; - - // необходимо хранить иерархию + MetadataVector mdCatalogs; + MetadataVector mdCommonss; + MetadataVector mdLanguages; + MetadataVector mdAccumulationRegisters; + MetadataVector mdAccountingRegisters; + MetadataVector mdCalculationRegisters; + MetadataVector mdBusinessProcesses; + MetadataVector mdChartsOfCharacteristicTypes; + MetadataVector mdCommandGroups; + MetadataVector mdCommonAttributes; + MetadataVector mdCommonCommands; + MetadataVector mdCommonForms; + MetadataVector mdCommonModules; + MetadataVector mdCommonPictures; + MetadataVector mdCommonTemplates; + MetadataVector mdConstants; + MetadataVector mdDataProcessors; + MetadataVector mdDefinedTypes; + MetadataVector mdDocumentJournals; + MetadataVector mdDocumentNumerators; + MetadataVector mdDocuments; + MetadataVector mdEnums; + MetadataVector mdEventSubscriptions; + MetadataVector mdExchangePlans; + MetadataVector mdChartOfAccounts; + MetadataVector mdChartOfCalculationTypes; + MetadataVector mdExternalDataSources; + MetadataVector mdFilterCriteria; + MetadataVector mdFunctionalOptions; + MetadataVector mdFunctionalOptionsParameters; + MetadataVector mdHTTPServices; + MetadataVector mdInformationRegisters; + MetadataVector mdInterfaces; + MetadataVector mdReports; + MetadataVector mdRoles; + MetadataVector mdBots; + MetadataVector mdScheduledJobs; + MetadataVector mdSessionParameters; + MetadataVector mdSettingsStorages; + MetadataVector mdStyleItems; + MetadataVector mdStyles; std::vector Subsystems; - TObjectList *mdSubsystems; - - std::vector Tasks; - TObjectList *mdTasks; - - std::vector WebServices; - TObjectList *mdWebServices; - - std::vector WSReferences; - TObjectList *mdWSReferences; - - std::vector XDTOPackages; - TObjectList *mdXDTOPackages; - - std::vector IntegrationServices; - TObjectList *mdIntegrationServices; - - std::vector Sequences; - TObjectList *mdSequences; + MetadataVector mdSubsystems; + MetadataVector mdTasks; + MetadataVector mdWebServices; + MetadataVector mdWSReferences; + MetadataVector mdXDTOPackages; + MetadataVector mdIntegrationServices; + MetadataVector mdSequences; std::unique_ptr GlobalCF; }; From 076c12da28e5d068a118d485d51f091c7c3ca0de Mon Sep 17 00:00:00 2001 From: fishca Date: Tue, 31 Mar 2026 17:17:56 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=20=D0=BF=D0=BE=D1=82=D1=80=D0=B5=D0=B1=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- src/AccountingRegisters.cpp | 2 + src/AccumulationRegisters.cpp | 2 + src/Bots.cpp | 3 + src/CalculationRegisters.cpp | 2 + src/Catalogs.cpp | 2 + src/ChartOfAccounts.cpp | 32 +- src/ChartOfAccounts.h | 20 +- src/ChartOfCalculationTypes.cpp | 2 + src/ChartOfCharacteristicTypes.cpp | 2 + src/CommandGroups.cpp | 3 + src/CommonAttributes.cpp | 3 + src/CommonCommands.cpp | 3 + src/CommonForms.cpp | 3 + src/CommonModules.cpp | 32 +- src/CommonModules.h | 2 + src/CommonPictures.cpp | 3 + src/CommonTemplates.cpp | 3 + src/DataProcessors.cpp | 2 + src/DefinedTypes.cpp | 3 + src/Documents.cpp | 2 + src/EventSubscriptions.cpp | 3 + src/ExchangePlans.cpp | 3 + src/FilterCriteria.cpp | 3 + src/FunctionalOptions.cpp | 3 + src/FunctionalOptionsParameters.cpp | 3 + src/HTTPServices.cpp | 4 +- src/InformationRegisters.cpp | 2 + src/Interfaces.cpp | 3 + src/Journals.cpp | 2 + src/Langs.cpp | 3 + src/MainUnit.cpp | 1327 ++++++++++++++++++--------- src/MainUnit.h | 2 + src/MetaDataManager.cpp | 22 +- src/Parse_tree.cpp | 30 +- src/Reports.cpp | 3 + src/Roles.cpp | 3 + src/ScheduledJobs.cpp | 3 + src/SessionParameters.cpp | 3 + src/SettingsStorages.cpp | 3 + src/TConstants.cpp | 3 + src/WebServices.cpp | 4 +- src/XDTOPackages.cpp | 4 +- src/v8reader.cpp | 69 +- 44 files changed, 1165 insertions(+), 470 deletions(-) diff --git a/.gitignore b/.gitignore index 5b66015..9cbf6f4 100644 --- a/.gitignore +++ b/.gitignore @@ -84,4 +84,6 @@ Compile *.bpl *.drc *.res -*.rc \ No newline at end of file +*.rc +docs/ +*.ps1 \ No newline at end of file diff --git a/src/AccountingRegisters.cpp b/src/AccountingRegisters.cpp index c13d089..3f9a419 100644 --- a/src/AccountingRegisters.cpp +++ b/src/AccountingRegisters.cpp @@ -42,12 +42,14 @@ __fastcall TAccountingRegisters::TAccountingRegisters(v8catalog *_parent, const : MetadataObjectInformationRegister(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TAccountingRegisters::TAccountingRegisters(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectInformationRegister(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TAccountingRegisters::~TAccountingRegisters() diff --git a/src/AccumulationRegisters.cpp b/src/AccumulationRegisters.cpp index 1102e91..3996864 100644 --- a/src/AccumulationRegisters.cpp +++ b/src/AccumulationRegisters.cpp @@ -40,12 +40,14 @@ __fastcall TAccumulationRegisters::TAccumulationRegisters(v8catalog *_parent, co : MetadataObjectInformationRegister(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TAccumulationRegisters::TAccumulationRegisters(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectInformationRegister(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TAccumulationRegisters::~TAccumulationRegisters() diff --git a/src/Bots.cpp b/src/Bots.cpp index 1a04a79..9e10552 100644 --- a/src/Bots.cpp +++ b/src/Bots.cpp @@ -10,16 +10,19 @@ __fastcall TBots::TBots() : BaseMetadataObject() { botName = ""; + root_data.reset(); } __fastcall TBots::TBots(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { botName = ""; + root_data.reset(); } __fastcall TBots::TBots(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { botName = _name; + root_data.reset(); } __fastcall TBots::~TBots() diff --git a/src/CalculationRegisters.cpp b/src/CalculationRegisters.cpp index 079ec22..87eb1e0 100644 --- a/src/CalculationRegisters.cpp +++ b/src/CalculationRegisters.cpp @@ -44,6 +44,7 @@ __fastcall TCalculationRegisters::TCalculationRegisters(v8catalog *_parent, cons : MetadataObjectInformationRegister(_parent, _guid) { initializeFromTree(); + root_data.reset(); } //--------------------------------------------------------------------------- @@ -51,6 +52,7 @@ __fastcall TCalculationRegisters::TCalculationRegisters(v8catalog *_parent, cons : MetadataObjectInformationRegister(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } //--------------------------------------------------------------------------- diff --git a/src/Catalogs.cpp b/src/Catalogs.cpp index 63b4201..485f2c3 100644 --- a/src/Catalogs.cpp +++ b/src/Catalogs.cpp @@ -32,12 +32,14 @@ __fastcall TCatalogs::TCatalogs(v8catalog *_parent, const String& _guid) : MetadataObjectWithSections(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TCatalogs::TCatalogs(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectWithSections(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TCatalogs::~TCatalogs() diff --git a/src/ChartOfAccounts.cpp b/src/ChartOfAccounts.cpp index ee10a2a..764f9ab 100644 --- a/src/ChartOfAccounts.cpp +++ b/src/ChartOfAccounts.cpp @@ -9,25 +9,32 @@ __fastcall TChartOfAccounts::TChartOfAccounts() + : BaseMetadataObject() { - guid = ""; - name = ""; - parent = NULL; + root_data.reset(); } __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& _guid) + : BaseMetadataObject(_parent, _guid) { - guid = _guid; - parent = _parent; - root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); + initializeFromTree(); + root_data.reset(); } __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& _guid, const String& _name) + : BaseMetadataObject(_parent, _guid, _name) { - name = _name; - guid = _guid; - parent = _parent; - root_data.reset(get_treeFromV8file(parent->GetFile(_guid))); + initializeFromTree(); + root_data.reset(); +} + +__fastcall TChartOfAccounts::~TChartOfAccounts() +{ +} + +void __fastcall TChartOfAccounts::initializeFromTree() +{ + if (!root_data) return; // Получаем имена реквизитов attributes.clear(); @@ -140,8 +147,3 @@ __fastcall TChartOfAccounts::TChartOfAccounts(v8catalog *_parent, const String& } } -__fastcall TChartOfAccounts::~TChartOfAccounts() -{ - -} - diff --git a/src/ChartOfAccounts.h b/src/ChartOfAccounts.h index e66d4a3..8c90f64 100644 --- a/src/ChartOfAccounts.h +++ b/src/ChartOfAccounts.h @@ -9,21 +9,16 @@ #include "APIcfBase.h" #include "Parse_tree.h" #include "MDObject.h" +#include "BaseMetadataObject.h" #include "Requisite.h" #include "Comand.h" #include "Moxel.h" #include "Tabular.h" #include "Form.h" -class TChartOfAccounts : public TObject +class TChartOfAccounts : public BaseMetadataObject { public: - std::unique_ptr root_data; - v8catalog* parent; - - String name; - String guid; - std::vector> attributes; // список реквизитов std::vector> accflags; // список признаков учета std::vector> dimaccflags; // список признаков учета субконто @@ -36,7 +31,16 @@ class TChartOfAccounts : public TObject __fastcall TChartOfAccounts(v8catalog *_parent, const String& _guid); __fastcall TChartOfAccounts(v8catalog *_parent, const String& _guid, const String& _name); - __fastcall ~TChartOfAccounts(); + virtual __fastcall ~TChartOfAccounts(); + + // Реализация виртуальных методов BaseMetadataObject + virtual std::vector>& getAttributes() override { return attributes; } + virtual std::vector>& getCommands() override { return comands; } + virtual std::vector>& getLayouts() override { return moxels; } + virtual std::vector>& getTabularSections() override { return tabulars; } + virtual std::vector>& getForms() override { return forms; } + + virtual void __fastcall initializeFromTree() override; }; #endif diff --git a/src/ChartOfCalculationTypes.cpp b/src/ChartOfCalculationTypes.cpp index 17fa852..0ec2c17 100644 --- a/src/ChartOfCalculationTypes.cpp +++ b/src/ChartOfCalculationTypes.cpp @@ -33,12 +33,14 @@ __fastcall TChartOfCalculationTypes::TChartOfCalculationTypes(v8catalog *_parent : MetadataObjectWithSections(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TChartOfCalculationTypes::TChartOfCalculationTypes(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectWithSections(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TChartOfCalculationTypes::~TChartOfCalculationTypes() diff --git a/src/ChartOfCharacteristicTypes.cpp b/src/ChartOfCharacteristicTypes.cpp index de4f729..1a0685e 100644 --- a/src/ChartOfCharacteristicTypes.cpp +++ b/src/ChartOfCharacteristicTypes.cpp @@ -14,11 +14,13 @@ __fastcall TChartOfCharacteristicTypes::TChartOfCharacteristicTypes():BaseMetada __fastcall TChartOfCharacteristicTypes::TChartOfCharacteristicTypes(v8catalog *_parent, const String &_guid) : BaseMetadataObject(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TChartOfCharacteristicTypes::TChartOfCharacteristicTypes(v8catalog *_parent, const String &_guid, const String &_name) : BaseMetadataObject(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TChartOfCharacteristicTypes::~TChartOfCharacteristicTypes() diff --git a/src/CommandGroups.cpp b/src/CommandGroups.cpp index c80408d..4bccc91 100644 --- a/src/CommandGroups.cpp +++ b/src/CommandGroups.cpp @@ -10,16 +10,19 @@ __fastcall TCommandGroups::TCommandGroups() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TCommandGroups::TCommandGroups(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TCommandGroups::TCommandGroups(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TCommandGroups::~TCommandGroups() diff --git a/src/CommonAttributes.cpp b/src/CommonAttributes.cpp index 81f336c..4a17e92 100644 --- a/src/CommonAttributes.cpp +++ b/src/CommonAttributes.cpp @@ -10,16 +10,19 @@ __fastcall TCommonAttributes::TCommonAttributes() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TCommonAttributes::TCommonAttributes(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TCommonAttributes::TCommonAttributes(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TCommonAttributes::~TCommonAttributes() diff --git a/src/CommonCommands.cpp b/src/CommonCommands.cpp index 846fa36..7f45a49 100644 --- a/src/CommonCommands.cpp +++ b/src/CommonCommands.cpp @@ -10,16 +10,19 @@ __fastcall TCommonCommands::TCommonCommands() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TCommonCommands::TCommonCommands(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TCommonCommands::TCommonCommands(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TCommonCommands::~TCommonCommands() diff --git a/src/CommonForms.cpp b/src/CommonForms.cpp index f1d5f76..f5b23cf 100644 --- a/src/CommonForms.cpp +++ b/src/CommonForms.cpp @@ -10,16 +10,19 @@ __fastcall TCommonForms::TCommonForms() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TCommonForms::TCommonForms(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TCommonForms::TCommonForms(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TCommonForms::~TCommonForms() diff --git a/src/CommonModules.cpp b/src/CommonModules.cpp index c4e86a7..5cca76d 100644 --- a/src/CommonModules.cpp +++ b/src/CommonModules.cpp @@ -9,22 +9,38 @@ __fastcall TCommonModules::TCommonModules() : BaseMetadataObject() { - + root_data.reset(); + text = L""; + textLoaded = false; } __fastcall TCommonModules::TCommonModules(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { - + root_data.reset(); + text = L""; + textLoaded = false; } __fastcall TCommonModules::TCommonModules(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { + root_data.reset(); + text = L""; + textLoaded = false; + name = _name; +} + +void __fastcall TCommonModules::LoadTextIfNeeded() +{ + if (textLoaded) + return; + TBytesStream* sb = nullptr; TEncoding *enc = nullptr; TBytes bytes, sb_bytes; int off = 0; + text = L""; - if ((_parent) && (!_guid.IsEmpty())) + if ((parent) && (!guid.IsEmpty())) { v8file* data_module = parent->GetFile(guid+".0"); if (data_module) @@ -76,7 +92,7 @@ __fastcall TCommonModules::TCommonModules(v8catalog* _parent, const String& _gui text = ""; } delete sb; - sb = nullptr; + sb = nullptr; } else if (image_module) { @@ -109,6 +125,8 @@ __fastcall TCommonModules::TCommonModules(v8catalog* _parent, const String& _gui } } } + + textLoaded = true; } __fastcall TCommonModules::~TCommonModules() @@ -118,11 +136,7 @@ __fastcall TCommonModules::~TCommonModules() String __fastcall TCommonModules::GetText() { -// TReplaceFlags flags; -// flags << rfReplaceAll; -// String Result = StringReplace(text, L"\n", L"\r\n", flags); -// return Result; - + LoadTextIfNeeded(); return text; } diff --git a/src/CommonModules.h b/src/CommonModules.h index 8dd476e..6fd3361 100644 --- a/src/CommonModules.h +++ b/src/CommonModules.h @@ -9,11 +9,13 @@ class TCommonModules : public BaseMetadataObject { private: String text; + bool textLoaded; std::vector> attributes; std::vector> comands; std::vector> moxels; std::vector> tabulars; std::vector> forms; + void __fastcall LoadTextIfNeeded(); public: __fastcall TCommonModules(); diff --git a/src/CommonPictures.cpp b/src/CommonPictures.cpp index 2997751..3591592 100644 --- a/src/CommonPictures.cpp +++ b/src/CommonPictures.cpp @@ -10,16 +10,19 @@ __fastcall TCommonPictures::TCommonPictures() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TCommonPictures::TCommonPictures(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TCommonPictures::TCommonPictures(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TCommonPictures::~TCommonPictures() diff --git a/src/CommonTemplates.cpp b/src/CommonTemplates.cpp index d2df0fc..7dd4069 100644 --- a/src/CommonTemplates.cpp +++ b/src/CommonTemplates.cpp @@ -10,16 +10,19 @@ __fastcall TCommonTemplates::TCommonTemplates() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TCommonTemplates::TCommonTemplates(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TCommonTemplates::TCommonTemplates(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TCommonTemplates::~TCommonTemplates() diff --git a/src/DataProcessors.cpp b/src/DataProcessors.cpp index 63c3d9f..2dc66e9 100644 --- a/src/DataProcessors.cpp +++ b/src/DataProcessors.cpp @@ -32,12 +32,14 @@ __fastcall TDataProcessors::TDataProcessors(v8catalog *_parent, const String& _g : MetadataObjectWithSections(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TDataProcessors::TDataProcessors(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectWithSections(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TDataProcessors::~TDataProcessors() diff --git a/src/DefinedTypes.cpp b/src/DefinedTypes.cpp index 3735fc6..e7f4b31 100644 --- a/src/DefinedTypes.cpp +++ b/src/DefinedTypes.cpp @@ -10,16 +10,19 @@ __fastcall TDefinedTypes::TDefinedTypes() : BaseMetadataObject() { typeName = ""; + root_data.reset(); } __fastcall TDefinedTypes::TDefinedTypes(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { typeName = ""; + root_data.reset(); } __fastcall TDefinedTypes::TDefinedTypes(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { typeName = _name; + root_data.reset(); } __fastcall TDefinedTypes::~TDefinedTypes() diff --git a/src/Documents.cpp b/src/Documents.cpp index 4fb7c21..0a2a950 100644 --- a/src/Documents.cpp +++ b/src/Documents.cpp @@ -32,12 +32,14 @@ __fastcall TDocuments::TDocuments(v8catalog *_parent, const String& _guid) : MetadataObjectWithSections(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TDocuments::TDocuments(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectWithSections(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TDocuments::~TDocuments() diff --git a/src/EventSubscriptions.cpp b/src/EventSubscriptions.cpp index 9e587d5..2c01db9 100644 --- a/src/EventSubscriptions.cpp +++ b/src/EventSubscriptions.cpp @@ -10,16 +10,19 @@ __fastcall TEventSubscriptions::TEventSubscriptions() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TEventSubscriptions::TEventSubscriptions(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TEventSubscriptions::TEventSubscriptions(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TEventSubscriptions::~TEventSubscriptions() diff --git a/src/ExchangePlans.cpp b/src/ExchangePlans.cpp index 33b5179..4ffff47 100644 --- a/src/ExchangePlans.cpp +++ b/src/ExchangePlans.cpp @@ -10,16 +10,19 @@ __fastcall TExchangePlans::TExchangePlans() : BaseMetadataObject() { exchangePlanName = ""; + root_data.reset(); } __fastcall TExchangePlans::TExchangePlans(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { exchangePlanName = ""; + root_data.reset(); } __fastcall TExchangePlans::TExchangePlans(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { exchangePlanName = _name; + root_data.reset(); } __fastcall TExchangePlans::~TExchangePlans() diff --git a/src/FilterCriteria.cpp b/src/FilterCriteria.cpp index 847c79c..19fbda2 100644 --- a/src/FilterCriteria.cpp +++ b/src/FilterCriteria.cpp @@ -10,16 +10,19 @@ __fastcall TFilterCriteria::TFilterCriteria() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TFilterCriteria::TFilterCriteria(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TFilterCriteria::TFilterCriteria(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TFilterCriteria::~TFilterCriteria() diff --git a/src/FunctionalOptions.cpp b/src/FunctionalOptions.cpp index c4ead38..4c63167 100644 --- a/src/FunctionalOptions.cpp +++ b/src/FunctionalOptions.cpp @@ -10,16 +10,19 @@ __fastcall TFunctionalOptions::TFunctionalOptions() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TFunctionalOptions::TFunctionalOptions(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TFunctionalOptions::TFunctionalOptions(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TFunctionalOptions::~TFunctionalOptions() diff --git a/src/FunctionalOptionsParameters.cpp b/src/FunctionalOptionsParameters.cpp index 620c548..9b434fd 100644 --- a/src/FunctionalOptionsParameters.cpp +++ b/src/FunctionalOptionsParameters.cpp @@ -10,16 +10,19 @@ __fastcall TFunctionalOptionsParameters::TFunctionalOptionsParameters() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TFunctionalOptionsParameters::TFunctionalOptionsParameters(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TFunctionalOptionsParameters::TFunctionalOptionsParameters(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TFunctionalOptionsParameters::~TFunctionalOptionsParameters() diff --git a/src/HTTPServices.cpp b/src/HTTPServices.cpp index 95ace39..4cc8605 100644 --- a/src/HTTPServices.cpp +++ b/src/HTTPServices.cpp @@ -15,15 +15,15 @@ __fastcall THTTPServices::THTTPServices() : BaseMetadataObject() __fastcall THTTPServices::THTTPServices(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; - root_data = nullptr; parent = _parent; + root_data.reset(); } __fastcall THTTPServices::THTTPServices(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; - root_data = nullptr; parent = _parent; + root_data.reset(); } __fastcall THTTPServices::~THTTPServices() diff --git a/src/InformationRegisters.cpp b/src/InformationRegisters.cpp index 16797b6..d46451d 100644 --- a/src/InformationRegisters.cpp +++ b/src/InformationRegisters.cpp @@ -34,12 +34,14 @@ __fastcall TInformationRegisters::TInformationRegisters(v8catalog *_parent, cons : MetadataObjectInformationRegister(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TInformationRegisters::TInformationRegisters(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectInformationRegister(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TInformationRegisters::~TInformationRegisters() diff --git a/src/Interfaces.cpp b/src/Interfaces.cpp index 8ba617f..96a968a 100644 --- a/src/Interfaces.cpp +++ b/src/Interfaces.cpp @@ -10,16 +10,19 @@ __fastcall TInterfaces::TInterfaces() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TInterfaces::TInterfaces(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TInterfaces::TInterfaces(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TInterfaces::~TInterfaces() diff --git a/src/Journals.cpp b/src/Journals.cpp index 57b68a6..16161ca 100644 --- a/src/Journals.cpp +++ b/src/Journals.cpp @@ -32,12 +32,14 @@ __fastcall TJournals::TJournals(v8catalog *_parent, const String& _guid) : MetadataObjectWithSections(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TJournals::TJournals(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectWithSections(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TJournals::~TJournals() diff --git a/src/Langs.cpp b/src/Langs.cpp index 425cf95..e941453 100644 --- a/src/Langs.cpp +++ b/src/Langs.cpp @@ -10,16 +10,19 @@ __fastcall TLangs::TLangs() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TLangs::TLangs(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TLangs::TLangs(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TLangs::~TLangs() diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 302b5b3..1c31c5f 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -10,6 +10,8 @@ #include #include +#include + #include "V8File.h" #include "ApicfBase.h" #include "Class_1CD.h" @@ -74,6 +76,36 @@ TMainForm *MainForm; MessageRegistrator* msreg; +static String FormatHeapStatus() +{ + THeapStatus hs = GetHeapStatus(); + return L"Allocated=" + IntToStr((__int64)hs.TotalAllocated) + + L", Free=" + IntToStr((__int64)hs.TotalFree) + + L", Committed=" + IntToStr((__int64)hs.TotalCommitted) + + L", Uncommitted=" + IntToStr((__int64)hs.TotalUncommitted); +} + +static void LogHeapStatus(const String& stage, + const String& guid = L"", + const String& fileName = L"", + int currentIndex = -1, + int totalCount = -1) +{ + if(!msreg) return; + + TStringList* ts = new TStringList; + ts->Add(L"Heap = " + FormatHeapStatus()); + if(guid.Length()) + ts->Add(L"GUID = " + guid); + if(fileName.Length()) + ts->Add(L"File = " + fileName); + if(currentIndex >= 0) + ts->Add(L"Item = " + IntToStr(currentIndex)); + if(totalCount >= 0) + ts->Add(L"Total = " + IntToStr(totalCount)); + msreg->AddMessage(stage, msInfo, ts); +} + //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner), MDManager(std::make_unique()) { @@ -1225,19 +1257,22 @@ void __fastcall TMainForm::FillVirtualTree() { { TCommonModules* CurModule = static_cast(item.get()); childDataCom->Name = CurModule->name; - childDataCom->text_module = CurModule->GetText(); + childDataCom->text_module = L""; + childDataCom->MetadataObject = CurModule; } else if (categoryCom.name == md_SessionParameters) { TSessionParameters* CurParam = static_cast(item.get()); childDataCom->Name = CurParam->name; childDataCom->text_module = L""; + childDataCom->MetadataObject = CurParam; } else if (categoryCom.name == md_CommonAttributes) { TCommonAttributes* CurCommonAtt = static_cast(item.get()); childDataCom->Name = CurCommonAtt->name; childDataCom->text_module = L""; + childDataCom->MetadataObject = CurCommonAtt; } else if (categoryCom.name == md_ExchangePlans) { @@ -1361,6 +1396,7 @@ void __fastcall TMainForm::FillVirtualTree() { { childDataCom->Name = L""; childDataCom->text_module = L""; + childDataCom->MetadataObject = nullptr; } childDataCom->Age = 99; childDataCom->ImgIndex = categoryCom.imgIndex; @@ -1377,6 +1413,7 @@ void __fastcall TMainForm::FillVirtualTree() { childDataRoles->Age = 99; childDataRoles->ImgIndex = categoryCom.imgIndex; childDataRoles->text_module = L""; + childDataRoles->MetadataObject = MainForm->mdRoles[i].get(); } } @@ -1393,6 +1430,7 @@ void __fastcall TMainForm::FillVirtualTree() { childDataBots->Age = 99; childDataBots->ImgIndex = categoryCom.imgIndex; childDataBots->text_module = L""; + childDataBots->MetadataObject = CurBot; } } } @@ -2263,6 +2301,7 @@ void __fastcall TMainForm::VirtualStringTreeValue1CFreeNode(TBaseVirtualTree *Se VirtualTreeData *NodeData =(VirtualTreeData*)Sender->GetNodeData(Node); NodeData->Name = L""; NodeData->text_module = L""; + NodeData->MetadataObject = nullptr; } //--------------------------------------------------------------------------- @@ -2290,87 +2329,103 @@ void __fastcall TMainForm::Button1Click(TObject *Sender) void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) { - if (dlgOpenCF->Execute()) - { - if (FileExists(dlgOpenCF->FileName)) + if (!dlgOpenCF->Execute()) + return; + + if (!FileExists(dlgOpenCF->FileName)) + throw(Exception("File does not exist.")); + + String filename = dlgOpenCF->FileName; + EditNameCF->Text = filename; + mess->AddMessage(L"ActionFileOpenExecute: начало открытия конфигурации", msInfo); + mess->AddMessage_(L"ActionFileOpenExecute: параметры открытия", msInfo, + L"file", filename, + L"logfile", mess->getlogfile()); + + try + { + GlobalCF.reset(); + + mdCatalogs.clear(); + mdLanguages.clear(); + mdAccumulationRegisters.clear(); + mdAccountingRegisters.clear(); + mdCalculationRegisters.clear(); + mdBusinessProcesses.clear(); + mdChartsOfCharacteristicTypes.clear(); + mdCommandGroups.clear(); + mdCommonAttributes.clear(); + mdCommonCommands.clear(); + mdCommonTemplates.clear(); + mdCommonForms.clear(); + mdCommonModules.clear(); + mdCommonPictures.clear(); + mdConstants.clear(); + mdDataProcessors.clear(); + mdDefinedTypes.clear(); + mdDocumentJournals.clear(); + mdDocumentNumerators.clear(); + mdDocuments.clear(); + mdEnums.clear(); + mdEventSubscriptions.clear(); + mdExchangePlans.clear(); + mdChartOfAccounts.clear(); + mdChartOfCalculationTypes.clear(); + mdExternalDataSources.clear(); + mdFilterCriteria.clear(); + mdFunctionalOptions.clear(); + mdFunctionalOptionsParameters.clear(); + mdHTTPServices.clear(); + mdInformationRegisters.clear(); + mdInterfaces.clear(); + mdReports.clear(); + mdRoles.clear(); + mdBots.clear(); + mdScheduledJobs.clear(); + mdSessionParameters.clear(); + mdSettingsStorages.clear(); + mdStyleItems.clear(); + mdStyles.clear(); + mdSubsystems.clear(); + mdTasks.clear(); + mdWebServices.clear(); + mdWSReferences.clear(); + mdXDTOPackages.clear(); + mdIntegrationServices.clear(); + mdSequences.clear(); + + mess->AddMessage(L"ActionFileOpenExecute: создание v8catalog", msInfo); + GlobalCF = std::make_unique(filename, true); + + mess->AddMessage(L"ActionFileOpenExecute: чтение метаданных конфигурации", msInfo); + get_cf_name(GlobalCF.get(), mess); + + mess->AddMessage(L"ActionFileOpenExecute: построение дерева интерфейса", msInfo); + VirtualStringTreeValue1C->BeginUpdate(); + try { - String filename = dlgOpenCF->FileName; - EditNameCF->Text = filename; - - // Удаляем предыдущую конфигурацию (автоматически через unique_ptr) - GlobalCF.reset(); - - // Очищаем все векторы метаданных - mdCatalogs.clear(); - mdLanguages.clear(); - mdAccumulationRegisters.clear(); - mdAccountingRegisters.clear(); - mdCalculationRegisters.clear(); - mdBusinessProcesses.clear(); - mdChartsOfCharacteristicTypes.clear(); - mdCommandGroups.clear(); - mdCommonAttributes.clear(); - mdCommonCommands.clear(); - mdCommonTemplates.clear(); - mdCommonForms.clear(); - mdCommonModules.clear(); - mdCommonPictures.clear(); - mdConstants.clear(); - mdDataProcessors.clear(); - mdDefinedTypes.clear(); - mdDocumentJournals.clear(); - mdDocumentNumerators.clear(); - mdDocuments.clear(); - mdEnums.clear(); - mdEventSubscriptions.clear(); - mdExchangePlans.clear(); - mdChartOfAccounts.clear(); - mdChartOfCalculationTypes.clear(); - mdExternalDataSources.clear(); - mdFilterCriteria.clear(); - mdFunctionalOptions.clear(); - mdFunctionalOptionsParameters.clear(); - mdHTTPServices.clear(); - mdInformationRegisters.clear(); - mdInterfaces.clear(); - mdReports.clear(); - mdRoles.clear(); - mdBots.clear(); - mdScheduledJobs.clear(); - mdSessionParameters.clear(); - mdSettingsStorages.clear(); - mdStyleItems.clear(); - mdStyles.clear(); - mdSubsystems.clear(); - mdTasks.clear(); - mdWebServices.clear(); - mdWSReferences.clear(); - mdXDTOPackages.clear(); - mdIntegrationServices.clear(); - mdSequences.clear(); - - GlobalCF = std::make_unique(filename, true); - - get_cf_name(GlobalCF.get(), mess); - - VirtualStringTreeValue1C->BeginUpdate(); - try - { - //TreeInit(); FillVirtualTree(); - } - __finally - { + } + __finally + { VirtualStringTreeValue1C->EndUpdate(); - } - - //VirtualStringTreeValue1C.exp - - - //delete MainForm->GlobalCF; } - else - throw(Exception("File does not exist.")); + + mess->AddMessage(L"ActionFileOpenExecute: конфигурация успешно открыта", msSuccesfull); + } + catch (const Exception &e) + { + mess->AddMessage_(L"ActionFileOpenExecute: VCL exception", msError, + L"file", filename, + L"message", e.Message); + throw; + } + catch (...) + { + mess->AddMessage_(L"ActionFileOpenExecute: неизвестное исключение", msError, + L"file", filename, + L"stage", L"open configuration"); + throw; } } //--------------------------------------------------------------------------- @@ -2403,6 +2458,11 @@ void __fastcall Messager::setlogfile(String _logfile) DeleteFile(logfile); } +String __fastcall Messager::getlogfile() const +{ + return logfile; +} + //--------------------------------------------------------------------------- void __fastcall Messager::Status(const String& message) @@ -2435,7 +2495,9 @@ void __fastcall Messager::AddMessage(const String& message, const MessageState m else { log = new TFileStream(logfile, fmCreate | fmShareDenyNone); - log->Write(TEncoding::UTF8->GetPreamble(), TEncoding::UTF8->GetPreamble().Length); + DynamicArray preamble = TEncoding::UTF8->GetPreamble(); + if (preamble.Length > 0) + log->WriteBuffer(&preamble[0], preamble.Length); } sw = new TStreamWriter(log, TEncoding::UTF8, 4096); sw->Write(DateTimeToStr(Now(), FormatSettings)); @@ -2476,7 +2538,7 @@ void __fastcall Messager::AddMessage(const String& message, const MessageState m void get_cf_name(v8catalog* cf, Messager* mess) { - tree* tr; + std::unique_ptr tr; tree* node; v8catalog* cat; v8file* filedata; @@ -2497,29 +2559,24 @@ void get_cf_name(v8catalog* cf, Messager* mess) return; } - tr = get_treeFromV8file(filedata); + tr.reset(get_treeFromV8file(filedata)); if(!tr) { mess->AddError(L"Ошибка разбора файла root конфигурации"); return; } - tr = get_treeFromV8file(filedata); - if(!tr) - return; - - node = tr; + node = tr.get(); node = &(*node)[0][0][0]; if(node->get_type() != nd_number) { mess->AddError(L"Ошибка получения версии формата конфигурации"); - delete tr; return; } ver = node->get_value().ToInt(); - delete tr; + tr.reset(); if(ver < 100) { @@ -2552,25 +2609,24 @@ void get_cf_name(v8catalog* cf, Messager* mess) return; } - tr = get_treeFromV8file(filedata); + tr.reset(get_treeFromV8file(filedata)); if(!tr) { mess->AddError(L"Ошибка разбора файла root конфигурации"); return; } - node = tr; + node = tr.get(); node = &(*node)[0][1]; if(node->get_type() != nd_guid) { mess->AddError(L"Ошибка получения имени файла метаданных"); - delete tr; return; } meta = node->get_value(); - delete tr; + tr.reset(); filedata = cat->GetFile(meta); if(!filedata) @@ -2582,7 +2638,7 @@ void get_cf_name(v8catalog* cf, Messager* mess) return; } - tr = get_treeFromV8file(filedata); + tr.reset(get_treeFromV8file(filedata)); if(!tr) { s = L"Ошибка разбора файла "; @@ -2592,8 +2648,7 @@ void get_cf_name(v8catalog* cf, Messager* mess) return; } - get_cf_name(tr, mess); - //delete tr; + get_cf_name(tr.release(), mess); } String GetNameSubsystem(v8catalog *cf, String &guid_md) @@ -2698,6 +2753,7 @@ void fill_md(tree* tr, String guid_md) String s; v8catalog *cf = MainForm->GlobalCF.get(); + msreg->AddMessage(L"fill_md: Начало обработки GUID: " + guid_md, MessageState::msInfo); //tree* node_md = find_node_by_guid(tr, guid_md); //"cf4abea6-37b2-11d4-940f-008048da11f9" @@ -2754,230 +2810,398 @@ void fill_md(tree* tr, String guid_md) if (pathIt == namePaths.end()) { // GUID не найден в карте путей, пропустить + msreg->AddMessage(L"fill_md: GUID не найден в карте путей: " + guid_md, MessageState::msWarning); return; } + msreg->AddMessage(L"fill_md: Поиск узла по GUID", MessageState::msInfo); tree* node_md = find_node_by_guid(tr, guid_md); if (!node_md) { + msreg->AddMessage(L"fill_md: Узел не найден по GUID: " + guid_md, MessageState::msWarning); return; // Защита от nullptr } + msreg->AddMessage(L"fill_md: Узел найден", MessageState::msInfo); const std::vector& path = pathIt->second; - int CountMD = (node_md->get_next())->get_value().ToInt(); + msreg->AddMessage(L"fill_md: Получение количества элементов", MessageState::msInfo); + tree* nextNode = node_md->get_next(); + if (!nextNode) { + msreg->AddMessage(L"fill_md: Ошибка - следующий узел равен null", MessageState::msError); + return; + } + int CountMD = nextNode->get_value().ToInt(); + msreg->AddMessage(L"fill_md: Количество элементов: " + String(CountMD), MessageState::msInfo); //md_list.clear(); tree* curNode = node_md->get_next(); + int processedCount = 0; while (curNode) { curNode = curNode->get_next(); if (curNode) { - filedata = cf->GetFile(curNode->get_value()); + processedCount++; + String curNodeValue = curNode->get_value(); + msreg->AddMessage(L"fill_md: Обработка элемента " + String(processedCount) + L" из " + String(CountMD) + L", файл: " + curNodeValue, MessageState::msInfo); + if ((processedCount == 1) || (processedCount % 25 == 0)) + LogHeapStatus(L"fill_md: состояние памяти перед чтением элемента", guid_md, curNodeValue, processedCount, CountMD); + + filedata = cf->GetFile(curNodeValue); if(!filedata) { s = L"Ошибка получения файла "; - s += (curNode->get_value()); + s += curNodeValue; s += L" конфигурации"; - //mess->AddError(s); + msreg->AddMessage(s, MessageState::msError); + //msreg->AddError(s); //return; continue; // Продолжить с следующим } + msreg->AddMessage(L"fill_md: Файл получен успешно", MessageState::msInfo); - tree_md = get_treeFromV8file(filedata); + msreg->AddMessage(L"fill_md: Разбор дерева файла", MessageState::msInfo); + try + { + tree_md = get_treeFromV8file(filedata); + } + catch (const Exception &e) + { + msreg->AddMessage_(L"fill_md: VCL exception при разборе дерева файла", msError, + L"GUID", guid_md, + L"File", curNodeValue, + L"Message", e.Message); + LogHeapStatus(L"fill_md: память при VCL exception разбора файла", guid_md, curNodeValue, processedCount, CountMD); + continue; + } + catch (...) + { + msreg->AddMessage_(L"fill_md: неизвестное исключение при разборе дерева файла", msError, + L"GUID", guid_md, + L"File", curNodeValue); + LogHeapStatus(L"fill_md: память при неизвестном exception разбора файла", guid_md, curNodeValue, processedCount, CountMD); + continue; + } if(!tree_md) { + LogHeapStatus(L"fill_md: память во время ошибки разбора файла", guid_md, curNodeValue, processedCount, CountMD); s = L"Ошибка разбора файла "; - s += (curNode->get_value()); + s += curNodeValue; s += L" конфигурации"; - //mess->AddError(s); + msreg->AddMessage(s, MessageState::msError); + //msreg->AddError(s); //return; continue; } - node = tree_md; + msreg->AddMessage(L"fill_md: Дерево разобрано успешно", MessageState::msInfo); - for (int idx : path) - { - node = &(*node)[idx]; - } + node = tree_md; - String val = node->get_value(); + msreg->AddMessage(L"fill_md: Навигация по пути", MessageState::msInfo); + try { + for (size_t i = 0; i < path.size(); i++) + { + int idx = path[i]; + msreg->AddMessage(L"fill_md: Шаг " + String((int)i) + L", индекс: " + String(idx), MessageState::msInfo); + + // Проверка границ - индекс должен быть в пределах количества подчиненных узлов + if (idx < 0 || idx >= node->get_num_subnode()) { + msreg->AddMessage(L"fill_md: Ошибка - индекс выходит за пределы на шаге " + String((int)i) + + L", доступно узлов: " + String(node->get_num_subnode()) + + L", запрошен индекс: " + String(idx), MessageState::msError); + node = nullptr; + break; + } - // Создание объектов для специфических типов - if (guid_md == GUID_Catalogs) - { - MainForm->mdCatalogs.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Languages) - { - MainForm->mdLanguages.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_CommonModules) - { - MainForm->mdCommonModules.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Roles) - {} - else if (guid_md == GUID_CommonTemplates) - { - MainForm->mdCommonTemplates.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_HTTPServices) - { - MainForm->mdHTTPServices.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_ScheduledJobs) - { - MainForm->mdScheduledJobs.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_CommonAttributes) - { - MainForm->mdCommonAttributes.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_SessionParameters) - { - MainForm->mdSessionParameters.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_FunctionalOptionsParameters) - { - MainForm->mdFunctionalOptionsParameters.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Subsystems) - {} - else if (guid_md == GUID_Interfaces) - { - MainForm->mdInterfaces.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Styles) - {} - else if (guid_md == GUID_FilterCriteria) - { - MainForm->mdFilterCriteria.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_SettingsStorages) - { - MainForm->mdSettingsStorages.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_StyleItems) - {} - else if (guid_md == GUID_CommonPictures) - { - MainForm->mdCommonPictures.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_ExchangePlans) - { - MainForm->mdExchangePlans.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_EventSubscriptions) - { - MainForm->mdEventSubscriptions.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_WebServices) - { - MainForm->mdWebServices.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_FunctionalOptions) - { - MainForm->mdFunctionalOptions.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_DefinedTypes) - { - MainForm->mdDefinedTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_XDTOPackages) - { - MainForm->mdXDTOPackages.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_WSReferences) - {} - else if (guid_md == GUID_Constants) - { - MainForm->mdConstants.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Documents) - { - MainForm->mdDocuments.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_CommonForms) - { - MainForm->mdCommonForms.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_InformationRegisters) - { - MainForm->mdInformationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_CalculationRegisters) - { - MainForm->mdCalculationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_BusinessProcesses) - {} - else if (guid_md == GUID_Tasks) - {} - else if (guid_md == GUID_AccountingRegisters) - { - MainForm->mdAccountingRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_CommandGroups) - { - MainForm->mdCommandGroups.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_CommonCommands) - { - MainForm->mdCommonCommands.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Numerators) - { - MainForm->mdDocumentNumerators.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_JournDocuments) - { - MainForm->mdDocumentJournals.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_Reports) - { - MainForm->mdReports.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_ChartOfCharacteristicTypes) - { - MainForm->mdChartsOfCharacteristicTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_ChartsOfAccounts) - { - MainForm->mdChartOfAccounts.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_ChartsOfCalculationTypes) - { - MainForm->mdChartOfCalculationTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); - } - else if (guid_md == GUID_AccumulationRegisters) - { - MainForm->mdAccumulationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); + node = &(*node)[idx]; + if (!node) { + msreg->AddMessage(L"fill_md: Ошибка - узел стал null на шаге " + String((int)i), MessageState::msError); + break; + } + } } - else if (guid_md == GUID_Sequences) - { - MainForm->mdSequences.push_back(std::make_unique(cf, curNode->get_value(), val)); + catch (...) { + msreg->AddMessage(L"fill_md: Исключение при навигации по пути для файла: " + curNodeValue, MessageState::msError); + LogHeapStatus(L"fill_md: память при исключении навигации", guid_md, curNodeValue, processedCount, CountMD); + delete tree_md; + continue; } - else if (guid_md == GUID_DataProcessors) - { - MainForm->mdDataProcessors.push_back(std::make_unique(cf, curNode->get_value(), val)); + + if (!node) { + msreg->AddMessage(L"fill_md: Пропуск элемента из-за null узла: " + curNodeValue, MessageState::msError); + delete tree_md; + continue; } - else if (guid_md == GUID_Enums) - { - MainForm->mdEnums.push_back(std::make_unique(cf, curNode->get_value(), val)); + + // Проверка типа узла перед получением значения + msreg->AddMessage(L"fill_md: Тип узла перед получением значения: " + String(node->get_type()), MessageState::msInfo); + if (node->get_type() == nd_empty || node->get_type() == nd_unknown) { + msreg->AddMessage(L"fill_md: Пропуск элемента - пустой или неизвестный тип узла: " + curNodeValue + L", тип: " + String(node->get_type()), MessageState::msError); + delete tree_md; + continue; } - else if (guid_md == GUID_Bots) - { - MainForm->mdBots.push_back(std::make_unique(cf, curNode->get_value(), val)); + + String val = node->get_value(); + msreg->AddMessage(L"fill_md: Получено значение длиной: " + String(val.Length()), MessageState::msInfo); + if (val.Length() == 0) { + msreg->AddMessage(L"fill_md: Пропуск элемента - пустое значение: " + curNodeValue, MessageState::msError); + delete tree_md; + continue; } - //md_list.push_back(val); - } + msreg->AddMessage(L"fill_md: Получено имя: " + val, MessageState::msInfo); + if ((processedCount == 1) || (processedCount % 25 == 0)) + LogHeapStatus(L"fill_md: состояние памяти перед созданием объекта", guid_md, curNodeValue, processedCount, CountMD); + + // Создание объектов для специфических типов + try { + if (guid_md == GUID_Catalogs) + { + msreg->AddMessage(L"fill_md: Создание справочника: " + val, MessageState::msInfo); + MainForm->mdCatalogs.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Languages) + { + msreg->AddMessage(L"fill_md: Создание языка: " + val, MessageState::msInfo); + MainForm->mdLanguages.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_CommonModules) + { + msreg->AddMessage(L"fill_md: Создание общего модуля: " + val, MessageState::msInfo); + MainForm->mdCommonModules.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Roles) + { + msreg->AddMessage(L"fill_md: Пропуск роли: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_CommonTemplates) + { + msreg->AddMessage(L"fill_md: Создание общего макета: " + val, MessageState::msInfo); + MainForm->mdCommonTemplates.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_HTTPServices) + { + msreg->AddMessage(L"fill_md: Создание HTTP-сервиса: " + val, MessageState::msInfo); + MainForm->mdHTTPServices.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_ScheduledJobs) + { + msreg->AddMessage(L"fill_md: Создание регламентного задания: " + val, MessageState::msInfo); + MainForm->mdScheduledJobs.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_CommonAttributes) + { + msreg->AddMessage(L"fill_md: Создание общего реквизита: " + val, MessageState::msInfo); + MainForm->mdCommonAttributes.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_SessionParameters) + { + msreg->AddMessage(L"fill_md: Создание параметра сеанса: " + val, MessageState::msInfo); + MainForm->mdSessionParameters.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_FunctionalOptionsParameters) + { + msreg->AddMessage(L"fill_md: Создание параметра функциональной опции: " + val, MessageState::msInfo); + MainForm->mdFunctionalOptionsParameters.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Subsystems) + { + msreg->AddMessage(L"fill_md: Пропуск подсистемы: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_Interfaces) + { + msreg->AddMessage(L"fill_md: Создание интерфейса: " + val, MessageState::msInfo); + MainForm->mdInterfaces.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Styles) + { + msreg->AddMessage(L"fill_md: Пропуск стиля: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_FilterCriteria) + { + msreg->AddMessage(L"fill_md: Создание критерия отбора: " + val, MessageState::msInfo); + MainForm->mdFilterCriteria.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_SettingsStorages) + { + msreg->AddMessage(L"fill_md: Создание хранилища настроек: " + val, MessageState::msInfo); + MainForm->mdSettingsStorages.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_StyleItems) + { + msreg->AddMessage(L"fill_md: Пропуск элемента стиля: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_CommonPictures) + { + msreg->AddMessage(L"fill_md: Создание общей картинки: " + val, MessageState::msInfo); + MainForm->mdCommonPictures.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_ExchangePlans) + { + msreg->AddMessage(L"fill_md: Создание плана обмена: " + val, MessageState::msInfo); + MainForm->mdExchangePlans.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_EventSubscriptions) + { + msreg->AddMessage(L"fill_md: Создание подписки на событие: " + val, MessageState::msInfo); + MainForm->mdEventSubscriptions.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_WebServices) + { + msreg->AddMessage(L"fill_md: Создание веб-сервиса: " + val, MessageState::msInfo); + MainForm->mdWebServices.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_FunctionalOptions) + { + msreg->AddMessage(L"fill_md: Создание функциональной опции: " + val, MessageState::msInfo); + MainForm->mdFunctionalOptions.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_DefinedTypes) + { + msreg->AddMessage(L"fill_md: Создание определяемого типа: " + val, MessageState::msInfo); + MainForm->mdDefinedTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_XDTOPackages) + { + msreg->AddMessage(L"fill_md: Создание XDTO-пакета: " + val, MessageState::msInfo); + MainForm->mdXDTOPackages.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_WSReferences) + { + msreg->AddMessage(L"fill_md: Пропуск WS-ссылки: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_Constants) + { + msreg->AddMessage(L"fill_md: Создание константы: " + val, MessageState::msInfo); + MainForm->mdConstants.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Documents) + { + msreg->AddMessage(L"fill_md: Создание документа: " + val, MessageState::msInfo); + MainForm->mdDocuments.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_CommonForms) + { + msreg->AddMessage(L"fill_md: Создание общей формы: " + val, MessageState::msInfo); + MainForm->mdCommonForms.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_InformationRegisters) + { + msreg->AddMessage(L"fill_md: Создание регистра сведений: " + val, MessageState::msInfo); + MainForm->mdInformationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_CalculationRegisters) + { + msreg->AddMessage(L"fill_md: Создание регистра расчета: " + val, MessageState::msInfo); + MainForm->mdCalculationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_BusinessProcesses) + { + msreg->AddMessage(L"fill_md: Пропуск бизнес-процесса: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_Tasks) + { + msreg->AddMessage(L"fill_md: Пропуск задачи: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_AccountingRegisters) + { + msreg->AddMessage(L"fill_md: Создание регистра бухгалтерии: " + val, MessageState::msInfo); + MainForm->mdAccountingRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); + msreg->AddMessage(L"fill_md: Регистр бухгалтерии создан успешно: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_CommandGroups) + { + msreg->AddMessage(L"fill_md: Создание группы команд: " + val, MessageState::msInfo); + MainForm->mdCommandGroups.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_CommonCommands) + { + msreg->AddMessage(L"fill_md: Создание общей команды: " + val, MessageState::msInfo); + MainForm->mdCommonCommands.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Numerators) + { + msreg->AddMessage(L"fill_md: Создание нумератора: " + val, MessageState::msInfo); + MainForm->mdDocumentNumerators.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_JournDocuments) + { + msreg->AddMessage(L"fill_md: Создание журнала документов: " + val, MessageState::msInfo); + MainForm->mdDocumentJournals.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Reports) + { + msreg->AddMessage(L"fill_md: Создание отчета: " + val, MessageState::msInfo); + MainForm->mdReports.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_ChartOfCharacteristicTypes) + { + msreg->AddMessage(L"fill_md: Создание ПВХ: " + val, MessageState::msInfo); + MainForm->mdChartsOfCharacteristicTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_ChartsOfAccounts) + { + msreg->AddMessage(L"fill_md: Создание плана счетов: " + val, MessageState::msInfo); + MainForm->mdChartOfAccounts.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_ChartsOfCalculationTypes) + { + msreg->AddMessage(L"fill_md: Создание ПВР: " + val, MessageState::msInfo); + MainForm->mdChartOfCalculationTypes.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_AccumulationRegisters) + { + msreg->AddMessage(L"fill_md: Создание регистра накопления: " + val, MessageState::msInfo); + MainForm->mdAccumulationRegisters.push_back(std::make_unique(cf, curNode->get_value(), val)); + msreg->AddMessage(L"fill_md: Регистр накопления создан успешно: " + val, MessageState::msInfo); + } + else if (guid_md == GUID_Sequences) + { + msreg->AddMessage(L"fill_md: Создание последовательности: " + val, MessageState::msInfo); + MainForm->mdSequences.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_DataProcessors) + { + msreg->AddMessage(L"fill_md: Создание обработки: " + val, MessageState::msInfo); + MainForm->mdDataProcessors.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Enums) + { + msreg->AddMessage(L"fill_md: Создание перечисления: " + val, MessageState::msInfo); + MainForm->mdEnums.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else if (guid_md == GUID_Bots) + { + msreg->AddMessage(L"fill_md: Создание бота: " + val, MessageState::msInfo); + MainForm->mdBots.push_back(std::make_unique(cf, curNode->get_value(), val)); + } + else + { + msreg->AddMessage(L"fill_md: Неизвестный GUID для объекта: " + val, MessageState::msWarning); + } + } + catch (const Exception &e) { + msreg->AddMessage_(L"fill_md: VCL exception при создании объекта", msError, + L"Name", val, + L"GUID", guid_md, + L"File", curNodeValue, + L"Message", e.Message); + LogHeapStatus(L"fill_md: память при VCL exception создания объекта", guid_md, curNodeValue, processedCount, CountMD); + } + catch (...) { + msreg->AddMessage_(L"fill_md: неизвестное исключение при создании объекта", msError, + L"Name", val, + L"GUID", guid_md, + L"File", curNodeValue); + LogHeapStatus(L"fill_md: память при неизвестном exception создания объекта", guid_md, curNodeValue, processedCount, CountMD); + } + delete tree_md; + //md_list.push_back(val); + } - } + } } - void get_cf_name(tree* tr, Messager* mess) { int j, k; @@ -3001,192 +3225,458 @@ void get_cf_name(tree* tr, Messager* mess) node3 = tr; - // Заполняем справочники - fill_md(tr, GUID_Catalogs); - mess->AddMessage(L"Справочники обработаны", MessageState::msInfo); - - // Заполняем языки - fill_md(tr, GUID_Languages); - mess->AddMessage(L"Языки обработаны", MessageState::msInfo); - - // Заполняем регистры накопления - fill_md(tr, GUID_AccumulationRegisters); - mess->AddMessage(L"Регистры накопления обработаны", MessageState::msInfo); + // Заполняем справочники + mess->AddMessage(L"Начало обработки справочников", MessageState::msInfo); + fill_md(tr, GUID_Catalogs); + mess->AddMessage(L"Справочники обработаны", MessageState::msInfo); - // Заполняем регистры бухгалтерии - fill_md(tr, GUID_AccountingRegisters); - mess->AddMessage(L"Регистры бухгалтерии обработаны", MessageState::msInfo); + // Заполняем языки + mess->AddMessage(L"Начало обработки языков", MessageState::msInfo); + fill_md(tr, GUID_Languages); + mess->AddMessage(L"Языки обработаны", MessageState::msInfo); - // Заполняем регистры расчета - fill_md(tr, GUID_CalculationRegisters); - mess->AddMessage(L"Регистры расчета обработаны", MessageState::msInfo); + // Заполняем регистры накопления + mess->AddMessage(L"Начало обработки регистров накопления", MessageState::msInfo); + try { + fill_md(tr, GUID_AccumulationRegisters); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке регистров накопления", MessageState::msError); + } + mess->AddMessage(L"Регистры накопления обработаны", MessageState::msInfo); + + // Заполняем регистры бухгалтерии + mess->AddMessage(L"Начало обработки регистров бухгалтерии", MessageState::msInfo); + // try { + // fill_md(tr, GUID_AccountingRegisters); + // } + // catch (...) { + // mess->AddMessage(L"Исключение при обработке регистров бухгалтерии", MessageState::msError); + // } + mess->AddMessage(L"Регистры бухгалтерии обработаны", MessageState::msInfo); + + // Заполняем регистры расчета + mess->AddMessage(L"Начало обработки регистров расчета", MessageState::msInfo); + try { + fill_md(tr, GUID_CalculationRegisters); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке регистров расчета", MessageState::msError); + } + mess->AddMessage(L"Регистры расчета обработаны", MessageState::msInfo); - // Заполняем бизнес-процессы - fill_md(tr, GUID_BusinessProcesses); - mess->AddMessage(L"Бизнес-процессы обработаны", MessageState::msInfo); + // Заполняем бизнес-процессы + mess->AddMessage(L"Начало обработки бизнес-процессов", MessageState::msInfo); + try { + fill_md(tr, GUID_BusinessProcesses); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке бизнес-процессов", MessageState::msError); + } + mess->AddMessage(L"Бизнес-процессы обработаны", MessageState::msInfo); - // ПВХ - fill_md(tr, GUID_ChartOfCharacteristicTypes); - mess->AddMessage(L"Планы видов характеристик обработаны", MessageState::msInfo); + // ПВХ + mess->AddMessage(L"Начало обработки планов видов характеристик", MessageState::msInfo); + try { + fill_md(tr, GUID_ChartOfCharacteristicTypes); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке ПВХ", MessageState::msError); + } + mess->AddMessage(L"Планы видов характеристик обработаны", MessageState::msInfo); - // группы команд - fill_md(tr, GUID_CommandGroups); - mess->AddMessage(L"Группы команд обработаны", MessageState::msInfo); + // группы команд + mess->AddMessage(L"Начало обработки групп команд", MessageState::msInfo); + try { + fill_md(tr, GUID_CommandGroups); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке групп команд", MessageState::msError); + } + mess->AddMessage(L"Группы команд обработаны", MessageState::msInfo); - // общие реквизиты - fill_md(tr, GUID_CommonAttributes); - mess->AddMessage(L"Общие реквизиты обработаны", MessageState::msInfo); + // общие реквизиты + mess->AddMessage(L"Начало обработки общих реквизитов", MessageState::msInfo); + try { + fill_md(tr, GUID_CommonAttributes); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке общих реквизитов", MessageState::msError); + } + mess->AddMessage(L"Общие реквизиты обработаны", MessageState::msInfo); - // общие команды - fill_md(tr, GUID_CommonCommands); - mess->AddMessage(L"Общие команды обработаны", MessageState::msInfo); + // общие команды + mess->AddMessage(L"Начало обработки общих команд", MessageState::msInfo); + try { + fill_md(tr, GUID_CommonCommands); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке общих команд", MessageState::msError); + } + mess->AddMessage(L"Общие команды обработаны", MessageState::msInfo); - // общие формы - fill_md(tr, GUID_CommonForms); - mess->AddMessage(L"Общие формы обработаны", MessageState::msInfo); + // общие формы + mess->AddMessage(L"Начало обработки общих форм", MessageState::msInfo); + try { + fill_md(tr, GUID_CommonForms); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке общих форм", MessageState::msError); + } + mess->AddMessage(L"Общие формы обработаны", MessageState::msInfo); - // общие модули - fill_md(tr, GUID_CommonModules); - mess->AddMessage(L"Общие модули обработаны", MessageState::msInfo); + // общие модули + mess->AddMessage(L"Начало обработки общих модулей", MessageState::msInfo); + try { + fill_md(tr, GUID_CommonModules); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке общих модулей", MessageState::msError); + } + mess->AddMessage(L"Общие модули обработаны", MessageState::msInfo); - // общие картинки - fill_md(tr, GUID_CommonPictures); - mess->AddMessage(L"Общие картинки обработаны", MessageState::msInfo); + // общие картинки + mess->AddMessage(L"Начало обработки общих картинок", MessageState::msInfo); + try { + fill_md(tr, GUID_CommonPictures); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке общих картинок", MessageState::msError); + } + mess->AddMessage(L"Общие картинки обработаны", MessageState::msInfo); - // общие макеты - fill_md(tr, GUID_CommonTemplates); - mess->AddMessage(L"Общие макеты обработаны", MessageState::msInfo); + // общие макеты + mess->AddMessage(L"Начало обработки общих макетов", MessageState::msInfo); + try { + fill_md(tr, GUID_CommonTemplates); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке общих макетов", MessageState::msError); + } + mess->AddMessage(L"Общие макеты обработаны", MessageState::msInfo); - // константы - fill_md(tr, GUID_Constants); - mess->AddMessage(L"Константы обработаны: ", MessageState::msInfo); + // константы + mess->AddMessage(L"Начало обработки констант", MessageState::msInfo); + try { + fill_md(tr, GUID_Constants); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке констант", MessageState::msError); + } + mess->AddMessage(L"Константы обработаны: ", MessageState::msInfo); - // обработки - fill_md(tr, GUID_DataProcessors); - mess->AddMessage(L"Обработки обработаны", MessageState::msInfo); + // обработки + mess->AddMessage(L"Начало обработки обработок", MessageState::msInfo); + try { + fill_md(tr, GUID_DataProcessors); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке обработок", MessageState::msError); + } + mess->AddMessage(L"Обработки обработаны", MessageState::msInfo); - // определяемые типы - fill_md(tr, GUID_DefinedTypes); - mess->AddMessage(L"Определяемые типы обработаны", MessageState::msInfo); + // определяемые типы + mess->AddMessage(L"Начало обработки определяемых типов", MessageState::msInfo); + try { + fill_md(tr, GUID_DefinedTypes); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке определяемых типов", MessageState::msError); + } + mess->AddMessage(L"Определяемые типы обработаны", MessageState::msInfo); - // журналы документов - fill_md(tr, GUID_JournDocuments); - mess->AddMessage(L"Журналы документов обработаны", MessageState::msInfo); + // журналы документов + mess->AddMessage(L"Начало обработки журналов документов", MessageState::msInfo); + try { + fill_md(tr, GUID_JournDocuments); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке журналов документов", MessageState::msError); + } + mess->AddMessage(L"Журналы документов обработаны", MessageState::msInfo); - // нумераторы - fill_md(tr, GUID_Numerators); - mess->AddMessage(L"Нумераторы обработаны", MessageState::msInfo); + // нумераторы + mess->AddMessage(L"Начало обработки нумераторов", MessageState::msInfo); + try { + fill_md(tr, GUID_Numerators); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке нумераторов", MessageState::msError); + } + mess->AddMessage(L"Нумераторы обработаны", MessageState::msInfo); - // документы - fill_md(tr, GUID_Documents); - mess->AddMessage(L"Документы обработаны", MessageState::msInfo); + // документы + mess->AddMessage(L"Начало обработки документов", MessageState::msInfo); + try { + fill_md(tr, GUID_Documents); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке документов", MessageState::msError); + } + mess->AddMessage(L"Документы обработаны", MessageState::msInfo); - // перечисления - fill_md(tr, GUID_Enums); - mess->AddMessage(L"Перечисления обработаны", MessageState::msInfo); + // перечисления + mess->AddMessage(L"Начало обработки перечислений", MessageState::msInfo); + try { + fill_md(tr, GUID_Enums); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке перечислений", MessageState::msError); + } + mess->AddMessage(L"Перечисления обработаны", MessageState::msInfo); - // подписки на события - fill_md(tr, GUID_EventSubscriptions); - mess->AddMessage(L"Подписки на события обработаны", MessageState::msInfo); + // подписки на события + mess->AddMessage(L"Начало обработки подписок на события", MessageState::msInfo); + try { + fill_md(tr, GUID_EventSubscriptions); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке подписок на события", MessageState::msError); + } + mess->AddMessage(L"Подписки на события обработаны", MessageState::msInfo); - // планы обмена - fill_md(tr, GUID_ExchangePlans); - mess->AddMessage(L"Планы обмена обработаны", MessageState::msInfo); + // планы обмена + mess->AddMessage(L"Начало обработки планов обмена", MessageState::msInfo); + try { + fill_md(tr, GUID_ExchangePlans); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке планов обмена", MessageState::msError); + } + mess->AddMessage(L"Планы обмена обработаны", MessageState::msInfo); - // планы счетов - fill_md(tr, GUID_ChartsOfAccounts); - mess->AddMessage(L"Планы счетов обработаны", MessageState::msInfo); + // планы счетов + mess->AddMessage(L"Начало обработки планов счетов", MessageState::msInfo); + try { + fill_md(tr, GUID_ChartsOfAccounts); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке планов счетов", MessageState::msError); + } + mess->AddMessage(L"Планы счетов обработаны", MessageState::msInfo); - // планы видов расчета - fill_md(tr, GUID_ChartsOfCalculationTypes); - mess->AddMessage(L"Планы видов расчета обработаны", MessageState::msInfo); + // планы видов расчета + mess->AddMessage(L"Начало обработки планов видов расчета", MessageState::msInfo); + try { + fill_md(tr, GUID_ChartsOfCalculationTypes); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке планов видов расчета", MessageState::msError); + } + mess->AddMessage(L"Планы видов расчета обработаны", MessageState::msInfo); - // внешние источники данных - fill_md(tr, GUID_ExternalDataSources); - mess->AddMessage(L"Внешние источники данных обработаны", MessageState::msInfo); + // внешние источники данных + mess->AddMessage(L"Начало обработки внешних источников данных", MessageState::msInfo); + try { + fill_md(tr, GUID_ExternalDataSources); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке внешних источников данных", MessageState::msError); + } + mess->AddMessage(L"Внешние источники данных обработаны", MessageState::msInfo); - // критерии отбора - fill_md(tr, GUID_FilterCriteria); - mess->AddMessage(L"Критерии отбора обработаны", MessageState::msInfo); + // критерии отбора + mess->AddMessage(L"Начало обработки критериев отбора", MessageState::msInfo); + try { + fill_md(tr, GUID_FilterCriteria); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке критериев отбора", MessageState::msError); + } + mess->AddMessage(L"Критерии отбора обработаны", MessageState::msInfo); - // функциональные опции - fill_md(tr, GUID_FunctionalOptions); - mess->AddMessage(L"Функциональные опции обработаны", MessageState::msInfo); + // функциональные опции + mess->AddMessage(L"Начало обработки функциональных опций", MessageState::msInfo); + try { + fill_md(tr, GUID_FunctionalOptions); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке функциональных опций", MessageState::msError); + } + mess->AddMessage(L"Функциональные опции обработаны", MessageState::msInfo); - // параметры функциональных опций - fill_md(tr, GUID_FunctionalOptionsParameters); - mess->AddMessage(L"Параметры функциональных опций обработаны", MessageState::msInfo); + // параметры функциональных опций + mess->AddMessage(L"Начало обработки параметров функциональных опций", MessageState::msInfo); + try { + fill_md(tr, GUID_FunctionalOptionsParameters); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке параметров функциональных опций", MessageState::msError); + } + mess->AddMessage(L"Параметры функциональных опций обработаны", MessageState::msInfo); - // http - сервисы - fill_md(tr, GUID_HTTPServices); - mess->AddMessage(L"http - сервисы обработаны", MessageState::msInfo); + // http - сервисы + mess->AddMessage(L"Начало обработки HTTP-сервисов", MessageState::msInfo); + try { + fill_md(tr, GUID_HTTPServices); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке HTTP-сервисов", MessageState::msError); + } + mess->AddMessage(L"http - сервисы обработаны", MessageState::msInfo); - // регистры сведений - fill_md(tr, GUID_InformationRegisters); - mess->AddMessage(L"Регистры сведений обработаны", MessageState::msInfo); + // регистры сведений + mess->AddMessage(L"Начало обработки регистров сведений", MessageState::msInfo); + try { + fill_md(tr, GUID_InformationRegisters); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке регистров сведений", MessageState::msError); + } + mess->AddMessage(L"Регистры сведений обработаны", MessageState::msInfo); - // интерфейсы - fill_md(tr, GUID_Interfaces); - mess->AddMessage(L"Интерфейсы обработаны", MessageState::msInfo); + // интерфейсы + mess->AddMessage(L"Начало обработки интерфейсов", MessageState::msInfo); + try { + fill_md(tr, GUID_Interfaces); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке интерфейсов", MessageState::msError); + } + mess->AddMessage(L"Интерфейсы обработаны", MessageState::msInfo); - // отчеты - fill_md(tr, GUID_Reports); - mess->AddMessage(L"Отчеты обработаны", MessageState::msInfo); + // отчеты + mess->AddMessage(L"Начало обработки отчетов", MessageState::msInfo); + try { + fill_md(tr, GUID_Reports); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке отчетов", MessageState::msError); + } + mess->AddMessage(L"Отчеты обработаны", MessageState::msInfo); - // роли - fill_md(tr, GUID_Roles); - mess->AddMessage(L"Роли обработаны", MessageState::msInfo); + // роли + mess->AddMessage(L"Начало обработки ролей", MessageState::msInfo); + try { + fill_md(tr, GUID_Roles); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке ролей", MessageState::msError); + } + mess->AddMessage(L"Роли обработаны", MessageState::msInfo); - // параметры сеанса - fill_md(tr, GUID_SessionParameters); - mess->AddMessage(L"Параметры сеанса обработаны", MessageState::msInfo); + // параметры сеанса + mess->AddMessage(L"Начало обработки параметров сеанса", MessageState::msInfo); + try { + fill_md(tr, GUID_SessionParameters); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке параметров сеанса", MessageState::msError); + } + mess->AddMessage(L"Параметры сеанса обработаны", MessageState::msInfo); - // хранилища настроек - fill_md(tr, GUID_SettingsStorages); - mess->AddMessage(L"Хранилища настроек обработаны", MessageState::msInfo); + // хранилища настроек + mess->AddMessage(L"Начало обработки хранилищ настроек", MessageState::msInfo); + try { + fill_md(tr, GUID_SettingsStorages); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке хранилищ настроек", MessageState::msError); + } + mess->AddMessage(L"Хранилища настроек обработаны", MessageState::msInfo); - // элементы стиля - fill_md(tr, GUID_StyleItems); - mess->AddMessage(L"Элементы стиля обработаны", MessageState::msInfo); + // элементы стиля + mess->AddMessage(L"Начало обработки элементов стиля", MessageState::msInfo); + try { + fill_md(tr, GUID_StyleItems); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке элементов стиля", MessageState::msError); + } + mess->AddMessage(L"Элементы стиля обработаны", MessageState::msInfo); - // стили - fill_md(tr, GUID_Styles); - mess->AddMessage(L"Стили обработаны", MessageState::msInfo); + // стили + mess->AddMessage(L"Начало обработки стилей", MessageState::msInfo); + try { + fill_md(tr, GUID_Styles); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке стилей", MessageState::msError); + } + mess->AddMessage(L"Стили обработаны", MessageState::msInfo); - // подсистемы - fill_subsystem(tr, MainForm->Subsystems); - mess->AddMessage(L"Подсистемы обработаны", MessageState::msInfo); + // подсистемы + mess->AddMessage(L"Начало обработки подсистем", MessageState::msInfo); + try { + fill_subsystem(tr, MainForm->Subsystems); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке подсистем", MessageState::msError); + } + mess->AddMessage(L"Подсистемы обработаны", MessageState::msInfo); - // задачи - fill_md(tr, GUID_Tasks); - mess->AddMessage(L"Задачи обработаны", MessageState::msInfo); + // задачи + mess->AddMessage(L"Начало обработки задач", MessageState::msInfo); + try { + fill_md(tr, GUID_Tasks); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке задач", MessageState::msError); + } + mess->AddMessage(L"Задачи обработаны", MessageState::msInfo); - // веб-сервисы - fill_md(tr, GUID_WebServices); - mess->AddMessage(L"веб-сервисы обработаны", MessageState::msInfo); + // веб-сервисы + mess->AddMessage(L"Начало обработки веб-сервисов", MessageState::msInfo); + try { + fill_md(tr, GUID_WebServices); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке веб-сервисов", MessageState::msError); + } + mess->AddMessage(L"веб-сервисы обработаны", MessageState::msInfo); - // ws-ссылки - fill_md(tr, GUID_WSReferences); - mess->AddMessage(L"ws-ссылки обработаны", MessageState::msInfo); + // ws-ссылки + mess->AddMessage(L"Начало обработки WS-ссылок", MessageState::msInfo); + try { + fill_md(tr, GUID_WSReferences); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке WS-ссылок", MessageState::msError); + } + mess->AddMessage(L"ws-ссылки обработаны", MessageState::msInfo); - // xdto-пакеты - fill_md(tr, GUID_XDTOPackages); - mess->AddMessage(L"xdto-пакеты обработаны", MessageState::msInfo); + // xdto-пакеты + mess->AddMessage(L"Начало обработки XDTO-пакетов", MessageState::msInfo); + try { + fill_md(tr, GUID_XDTOPackages); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке XDTO-пакетов", MessageState::msError); + } + mess->AddMessage(L"xdto-пакеты обработаны", MessageState::msInfo); - // регл задания - fill_md(tr, GUID_ScheduledJobs); - mess->AddMessage(L"Регламентные задания обработаны", MessageState::msInfo); + // регл задания + mess->AddMessage(L"Начало обработки регламентных заданий", MessageState::msInfo); + try { + fill_md(tr, GUID_ScheduledJobs); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке регламентных заданий", MessageState::msError); + } + mess->AddMessage(L"Регламентные задания обработаны", MessageState::msInfo); - // боты - fill_md(tr, GUID_Bots); - mess->AddMessage(L"Боты обработаны", MessageState::msInfo); + // боты + mess->AddMessage(L"Начало обработки ботов", MessageState::msInfo); + try { + fill_md(tr, GUID_Bots); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке ботов", MessageState::msError); + } + mess->AddMessage(L"Боты обработаны", MessageState::msInfo); - // последовательности - fill_md(tr, GUID_Sequences); - mess->AddMessage(L"Последовательности обработаны", MessageState::msInfo); + // последовательности + mess->AddMessage(L"Начало обработки последовательностей", MessageState::msInfo); + try { + fill_md(tr, GUID_Sequences); + } + catch (...) { + mess->AddMessage(L"Исключение при обработке последовательностей", MessageState::msError); + } + mess->AddMessage(L"Последовательности обработаны", MessageState::msInfo); structver = (*node)[0].get_value().ToInt(); @@ -3287,7 +3777,11 @@ void __fastcall TMainForm::VirtualStringTreeValue1CClick(TObject *Sender) if (Data) { - MemoObject->Text = Data->text_module; + TCommonModules* module = dynamic_cast(Data->MetadataObject); + if (module) + MemoObject->Text = module->GetText(); + else + MemoObject->Text = Data->text_module; } } //--------------------------------------------------------------------------- @@ -3295,3 +3789,6 @@ void __fastcall TMainForm::VirtualStringTreeValue1CClick(TObject *Sender) + + + diff --git a/src/MainUnit.h b/src/MainUnit.h index 8dee100..dd0acc7 100644 --- a/src/MainUnit.h +++ b/src/MainUnit.h @@ -57,6 +57,7 @@ struct VirtualTreeData { String Name; String text_module; + TObject* MetadataObject; int Age; int ImgIndex; }; @@ -238,6 +239,7 @@ class Messager : public MessageRegistrator public: __fastcall Messager(TListView* lv, TStatusBar* sb); void __fastcall setlogfile(String _logfile); + String __fastcall getlogfile() const; virtual void __fastcall AddMessage(const String& message, const MessageState mstate, TStringList* param = NULL); virtual void __fastcall Status(const String& message); }; diff --git a/src/MetaDataManager.cpp b/src/MetaDataManager.cpp index 7013eef..c1d793d 100644 --- a/src/MetaDataManager.cpp +++ b/src/MetaDataManager.cpp @@ -34,7 +34,7 @@ v8catalog* MetaDataManager::loadFromFile(const String& filename) bool MetaDataManager::Initialize(v8catalog* cf) { - tree* tr; + std::unique_ptr tr; tree* node; v8catalog* cat; v8file* filedata; @@ -53,27 +53,22 @@ bool MetaDataManager::Initialize(v8catalog* cf) return false; } - tr = get_treeFromV8file(filedata); + tr.reset(get_treeFromV8file(filedata)); if(!tr) { return false; } - tr = get_treeFromV8file(filedata); - if(!tr) - return false; - - node = tr; + node = tr.get(); node = &(*node)[0][0][0]; if(node->get_type() != nd_number) { - delete tr; return false; } ver = node->get_value().ToInt(); - delete tr; + tr.reset(); if(ver < 100) { @@ -103,23 +98,22 @@ bool MetaDataManager::Initialize(v8catalog* cf) return false; } - tr = get_treeFromV8file(filedata); + tr.reset(get_treeFromV8file(filedata)); if(!tr) { return false; } - node = tr; + node = tr.get(); node = &(*node)[0][1]; if(node->get_type() != nd_guid) { - delete tr; return false; } meta = node->get_value(); - delete tr; + tr.reset(); filedata = cat->GetFile(meta); if(!filedata) @@ -127,7 +121,7 @@ bool MetaDataManager::Initialize(v8catalog* cf) return false; } - tr = get_treeFromV8file(filedata); + tr.reset(get_treeFromV8file(filedata)); if(!tr) { return false; diff --git a/src/Parse_tree.cpp b/src/Parse_tree.cpp index 4a0ee7c..92d4fd7 100644 --- a/src/Parse_tree.cpp +++ b/src/Parse_tree.cpp @@ -305,6 +305,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Лишняя закрывающая скобка }.", L"Позиция", i, L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } @@ -349,6 +351,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) L"Символ", sym, L"Код символа", tohex(sym), L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } @@ -389,6 +393,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Лишняя закрывающая скобка }.", L"Позиция", i, L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } @@ -399,6 +405,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) L"Символ", sym, L"Код символа", tohex(sym), L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } @@ -429,6 +437,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Лишняя закрывающая скобка }.", L"Позиция", i, L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } @@ -444,6 +454,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Неизвестный режим разбора.", L"Режим разбора", tohex(state), L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; @@ -466,6 +478,8 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Незавершенное значение", L"Режим разбора", tohex(state), L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } @@ -474,10 +488,15 @@ tree* __fastcall parse_1Cstream(TStream* str, const String& path) { if(msreg) msreg->AddError(L"Ошибка формата потока. Не хватает закрывающих скобок } в конце текста разбора.", L"Путь", path); + delete reader; + delete __curvalue__; delete ret; return NULL; } + delete reader; + delete __curvalue__; + return ret; } @@ -539,6 +558,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Лишняя закрывающая скобка }.", L"Позиция", i, L"Путь", path); + delete __curvalue__; delete ret; return NULL; } @@ -583,6 +603,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) L"Символ", sym, L"Код символа", tohex(sym), L"Путь", path); + delete __curvalue__; delete ret; return NULL; } @@ -623,6 +644,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Лишняя закрывающая скобка }.", L"Позиция", i, L"Путь", path); + delete __curvalue__; delete ret; return NULL; } @@ -633,6 +655,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) L"Символ", sym, L"Код символа", tohex(sym), L"Путь", path); + delete __curvalue__; delete ret; return NULL; } @@ -663,6 +686,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Лишняя закрывающая скобка }.", L"Позиция", i, L"Путь", path); + delete __curvalue__; delete ret; return NULL; } @@ -678,6 +702,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Неизвестный режим разбора.", L"Режим разбора", tohex(state), L"Путь", path); + delete __curvalue__; delete ret; return NULL; @@ -700,6 +725,7 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) if(msreg) msreg->AddError(L"Ошибка формата потока. Незавершенное значение", L"Режим разбора", tohex(state), L"Путь", path); + delete __curvalue__; delete ret; return NULL; } @@ -708,10 +734,13 @@ tree* __fastcall parse_1Ctext(const String& text, const String& path) { if(msreg) msreg->AddError(L"Ошибка формата потока. Не хватает закрывающих скобок } в конце текста разбора.", L"Путь", path); + delete __curvalue__; delete ret; return NULL; } + delete __curvalue__; + return ret; } @@ -983,4 +1012,3 @@ tree* find_node_by_guid(tree* root, const String& target_guid) return NULL; } - diff --git a/src/Reports.cpp b/src/Reports.cpp index 56b36ab..dd49070 100644 --- a/src/Reports.cpp +++ b/src/Reports.cpp @@ -26,18 +26,21 @@ static MetadataTreePaths GetReportsPaths() __fastcall TReports::TReports() : MetadataObjectWithSections() { + root_data.reset(); } __fastcall TReports::TReports(v8catalog *_parent, const String& _guid) : MetadataObjectWithSections(_parent, _guid) { initializeFromTree(); + root_data.reset(); } __fastcall TReports::TReports(v8catalog *_parent, const String& _guid, const String& _name) : MetadataObjectWithSections(_parent, _guid, _name) { initializeFromTree(); + root_data.reset(); } __fastcall TReports::~TReports() diff --git a/src/Roles.cpp b/src/Roles.cpp index d563414..02df3be 100644 --- a/src/Roles.cpp +++ b/src/Roles.cpp @@ -10,16 +10,19 @@ __fastcall TRoles::TRoles() : BaseMetadataObject() { roleName = ""; + root_data.reset(); } __fastcall TRoles::TRoles(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { roleName = ""; + root_data.reset(); } __fastcall TRoles::TRoles(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { roleName = _name; + root_data.reset(); } __fastcall TRoles::~TRoles() diff --git a/src/ScheduledJobs.cpp b/src/ScheduledJobs.cpp index 1146dbe..b627a1d 100644 --- a/src/ScheduledJobs.cpp +++ b/src/ScheduledJobs.cpp @@ -10,16 +10,19 @@ __fastcall TScheduledJobs::TScheduledJobs() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TScheduledJobs::TScheduledJobs(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TScheduledJobs::TScheduledJobs(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TScheduledJobs::~TScheduledJobs() diff --git a/src/SessionParameters.cpp b/src/SessionParameters.cpp index fd0a46d..54c8019 100644 --- a/src/SessionParameters.cpp +++ b/src/SessionParameters.cpp @@ -10,16 +10,19 @@ __fastcall TSessionParameters::TSessionParameters() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TSessionParameters::TSessionParameters(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TSessionParameters::TSessionParameters(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TSessionParameters::~TSessionParameters() diff --git a/src/SettingsStorages.cpp b/src/SettingsStorages.cpp index 668b5b1..a828ef4 100644 --- a/src/SettingsStorages.cpp +++ b/src/SettingsStorages.cpp @@ -10,16 +10,19 @@ __fastcall TSettingsStorages::TSettingsStorages() : BaseMetadataObject() { storageName = ""; + root_data.reset(); } __fastcall TSettingsStorages::TSettingsStorages(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { storageName = ""; + root_data.reset(); } __fastcall TSettingsStorages::TSettingsStorages(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { storageName = _name; + root_data.reset(); } __fastcall TSettingsStorages::~TSettingsStorages() diff --git a/src/TConstants.cpp b/src/TConstants.cpp index 905a419..e1d280b 100644 --- a/src/TConstants.cpp +++ b/src/TConstants.cpp @@ -10,16 +10,19 @@ __fastcall TConstants::TConstants() : BaseMetadataObject() { name = ""; + root_data.reset(); } __fastcall TConstants::TConstants(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; + root_data.reset(); } __fastcall TConstants::TConstants(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; + root_data.reset(); } __fastcall TConstants::~TConstants() diff --git a/src/WebServices.cpp b/src/WebServices.cpp index bbac7dd..35a4f02 100644 --- a/src/WebServices.cpp +++ b/src/WebServices.cpp @@ -15,15 +15,15 @@ __fastcall TWebServices::TWebServices() : BaseMetadataObject() __fastcall TWebServices::TWebServices(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; - root_data = nullptr; parent = _parent; + root_data.reset(); } __fastcall TWebServices::TWebServices(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; - root_data = nullptr; parent = _parent; + root_data.reset(); } __fastcall TWebServices::~TWebServices() diff --git a/src/XDTOPackages.cpp b/src/XDTOPackages.cpp index 408e6c7..6e29ea1 100644 --- a/src/XDTOPackages.cpp +++ b/src/XDTOPackages.cpp @@ -15,15 +15,15 @@ __fastcall TXDTOPackages::TXDTOPackages() : BaseMetadataObject() __fastcall TXDTOPackages::TXDTOPackages(v8catalog* _parent, const String& _guid) : BaseMetadataObject(_parent, _guid) { name = ""; - root_data = nullptr; parent = _parent; + root_data.reset(); } __fastcall TXDTOPackages::TXDTOPackages(v8catalog* _parent, const String& _guid, const String& _name) : BaseMetadataObject(_parent, _guid, _name) { name = _name; - root_data = nullptr; parent = _parent; + root_data.reset(); } __fastcall TXDTOPackages::~TXDTOPackages() diff --git a/src/v8reader.cpp b/src/v8reader.cpp index b481531..84820dc 100644 --- a/src/v8reader.cpp +++ b/src/v8reader.cpp @@ -3,30 +3,97 @@ #include #pragma hdrstop #include +#include +#include + +#include +#include //--------------------------------------------------------------------------- USEFORM("MainUnit.cpp", MainForm); //--------------------------------------------------------------------------- + +static void WriteCrashLog(const String& message) +{ + try + { + String appDir = ExtractFilePath(ParamStr(0)); + String logfile = TPath::Combine(appDir, "v8reader_fatal.log"); + TFileStream* log = NULL; + if (FileExists(logfile)) + { + log = new TFileStream(logfile, fmOpenReadWrite | fmShareDenyNone); + log->Seek(0, soFromEnd); + } + else + { + log = new TFileStream(logfile, fmCreate | fmShareDenyNone); + DynamicArray preamble = TEncoding::UTF8->GetPreamble(); + if (preamble.Length > 0) + log->WriteBuffer(&preamble[0], preamble.Length); + } + + TStreamWriter* sw = new TStreamWriter(log, TEncoding::UTF8, 4096); + TFormatSettings fs; + fs.DateSeparator = L'.'; + fs.TimeSeparator = L':'; + fs.ShortDateFormat = L"dd.mm.yyyy"; + fs.LongTimeFormat = L"hh:mm:ss:zzz"; + sw->Write(DateTimeToStr(Now(), fs)); + sw->Write(L" "); + sw->Write(message); + sw->Write(L"\r\n\r\n"); + delete sw; + delete log; + } + catch (...) {} +} + +static void OnTerminateHandler() +{ + WriteCrashLog(L"std::terminate called"); + abort(); +} + +static void SignalAbortHandler(int signalCode) +{ + WriteCrashLog(L"signal received: " + IntToStr(signalCode)); + ::_exit(3); +} + int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { + std::set_terminate(OnTerminateHandler); + signal(SIGABRT, SignalAbortHandler); + signal(SIGTERM, SignalAbortHandler); + signal(SIGINT, SignalAbortHandler); + WriteCrashLog(L"Application bootstrap"); + try { + WriteCrashLog(L"Application start"); Application->Initialize(); + WriteCrashLog(L"Application initialized"); Application->MainFormOnTaskBar = true; Application->CreateForm(__classid(TMainForm), &MainForm); + WriteCrashLog(L"Main form created"); Application->Run(); + WriteCrashLog(L"Application finished normally"); } catch (Exception &exception) { + WriteCrashLog(L"Unhandled VCL exception: " + exception.Message); Application->ShowException(&exception); } catch (...) { + WriteCrashLog(L"Unhandled non-VCL exception"); try { - throw Exception(""); + throw Exception("Unhandled non-VCL exception"); } catch (Exception &exception) { + WriteCrashLog(L"Converted non-VCL exception: " + exception.Message); Application->ShowException(&exception); } } From 2905a32527946b051608b9bc0038c7ed12f6055f Mon Sep 17 00:00:00 2001 From: fishca Date: Tue, 31 Mar 2026 17:49:18 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80=D0=BE=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?,=20=D0=B1=D1=8B=D0=BB=D0=BE=20=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MainUnit.cpp | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 1c31c5f..3300ed3 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -1267,6 +1267,13 @@ void __fastcall TMainForm::FillVirtualTree() { childDataCom->text_module = L""; childDataCom->MetadataObject = CurParam; } + else if (categoryCom.name == md_Roles) + { + TRoles* CurRole = static_cast(item.get()); + childDataCom->Name = CurRole->GetRoleName(); + childDataCom->text_module = L""; + childDataCom->MetadataObject = CurRole; + } else if (categoryCom.name == md_CommonAttributes) { TCommonAttributes* CurCommonAtt = static_cast(item.get()); @@ -1402,21 +1409,6 @@ void __fastcall TMainForm::FillVirtualTree() { childDataCom->ImgIndex = categoryCom.imgIndex; } - // Для Roles добавляем элементы из MainForm->mdRoles - if (categoryCom.name == md_Roles) - { - for (size_t i = 0; i < MainForm->mdRoles.size(); i++) - { - PVirtualNode childNodeRoles = VirtualStringTreeValue1C->AddChild(parentNodeCom); - VirtualTreeData *childDataRoles = (VirtualTreeData*)VirtualStringTreeValue1C->GetNodeData(childNodeRoles); - childDataRoles->Name = static_cast(MainForm->mdRoles[i].get())->GetRoleName(); - childDataRoles->Age = 99; - childDataRoles->ImgIndex = categoryCom.imgIndex; - childDataRoles->text_module = L""; - childDataRoles->MetadataObject = MainForm->mdRoles[i].get(); - } - } - // Для Bots добавляем элементы из MainForm->mdBots if (categoryCom.name == md_Bots && !MainForm->mdBots.empty()) @@ -2972,7 +2964,8 @@ void fill_md(tree* tr, String guid_md) } else if (guid_md == GUID_Roles) { - msreg->AddMessage(L"fill_md: Пропуск роли: " + val, MessageState::msInfo); + msreg->AddMessage(L"fill_md: Создание роли: " + val, MessageState::msInfo); + MainForm->mdRoles.push_back(std::make_unique(cf, curNode->get_value(), val)); } else if (guid_md == GUID_CommonTemplates) { @@ -3792,3 +3785,4 @@ void __fastcall TMainForm::VirtualStringTreeValue1CClick(TObject *Sender) + From 6d96cd26f71fafdf4d7e1f861ff330fd7255bafc Mon Sep 17 00:00:00 2001 From: fishca Date: Wed, 1 Apr 2026 18:14:41 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9E=D0=BF=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Class_1CD.cpp | 38 +++++++++--- src/MainUnit.cpp | 89 +++++++++++++++++++++++++--- src/Parse_tree.cpp | 144 ++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 246 insertions(+), 25 deletions(-) diff --git a/src/Class_1CD.cpp b/src/Class_1CD.cpp index 959aba4..0782e83 100644 --- a/src/Class_1CD.cpp +++ b/src/Class_1CD.cpp @@ -195,28 +195,47 @@ extern TMultiReadExclusiveWriteSynchronizer* tr_syn; //--------------------------------------------------------------------------- tree* __fastcall get_treeFromV8file(v8file* f) { - TBytesStream* sb; TEncoding *enc; - TBytes bytes; + TBytes sourceBytes; + TBytes unicodeBytes; int off = 0; tree* rt; + int fileSize; - sb = new TBytesStream(bytes); - f->SaveToStream(sb); + fileSize = f->GetFileLength(); + if(fileSize <= 0) + { + error("Пустой файл контейнера", + "Файл", f->GetFullName()); + return NULL; + } + + sourceBytes.Length = fileSize; + if(f->Read(sourceBytes, 0, fileSize) != fileSize) + { + error("Ошибка чтения файла контейнера", + "Файл", f->GetFullName()); + return NULL; + } enc = NULL; - off = TEncoding::GetBufferEncoding(sb->Bytes, enc); + off = TEncoding::GetBufferEncoding(sourceBytes, enc); if(off == 0) { error("Ошибка определения кодировки файла контейнера", "Файл", f->GetFullName()); - delete sb; return NULL; } - bytes = TEncoding::Convert(enc, TEncoding::Unicode, sb->Bytes, off, sb->Size-off); - rt = parse_1Ctext(String((wchar_t*)&bytes[0], bytes.Length / 2), f->GetFullName()); - delete sb; + unicodeBytes = TEncoding::Convert(enc, TEncoding::Unicode, sourceBytes, off, fileSize - off); + if(unicodeBytes.Length == 0) + { + error("Ошибка конвертации файла контейнера в Unicode", + "Файл", f->GetFullName()); + return NULL; + } + + rt = parse_1Ctext(String((wchar_t*)&unicodeBytes[0], unicodeBytes.Length / 2), f->GetFullName()); return rt; } @@ -11960,3 +11979,4 @@ String __fastcall T_1CD::pagemaprec_presentation(pagemaprec& pmr) //--------------------------------------------------------------------------- + diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 3300ed3..9620253 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -76,6 +76,54 @@ TMainForm *MainForm; MessageRegistrator* msreg; +static bool IsVerboseUiLoggingEnabled() +{ + String envValue = GetEnvironmentVariable(L"V8READER_VERBOSE_LOG"); + envValue = Trim(envValue).LowerCase(); + if (envValue == L"1" || envValue == L"true" || envValue == L"yes" || envValue == L"on") + return true; + + for (int i = 1; i <= ParamCount(); i++) + { + String arg = Trim(ParamStr(i)).LowerCase(); + if (arg == L"--verbose-log" || arg == L"/verbose-log" || arg == L"--diagnostic-log") + return true; + } + + return false; +} + +static bool IsFileLoggingEnabled() +{ + String envValue = GetEnvironmentVariable(L"V8READER_FILE_LOG"); + envValue = Trim(envValue).LowerCase(); + if (envValue == L"1" || envValue == L"true" || envValue == L"yes" || envValue == L"on") + return true; + + for (int i = 1; i <= ParamCount(); i++) + { + String arg = Trim(ParamStr(i)).LowerCase(); + if (arg == L"--logfile" || arg == L"/logfile" || arg == L"--enable-file-log") + return true; + } + + return false; +} + +static void AddConditionalInfoMessage(Messager* mess, const String& message) +{ + if (mess && IsVerboseUiLoggingEnabled()) + mess->AddMessage(message, msInfo); +} + +static void AddConditionalInfoMessageParams(Messager* mess, const String& description, + const String& parname1, const String& par1, + const String& parname2, const String& par2) +{ + if (mess && IsVerboseUiLoggingEnabled()) + mess->AddMessage_(description, msInfo, parname1, par1, parname2, par2); +} + static String FormatHeapStatus() { THeapStatus hs = GetHeapStatus(); @@ -112,9 +160,13 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner), MDManager(std VirtualStringTreeValue1C->NodeDataSize = sizeof(VirtualTreeData); mess = new Messager(ListViewMessager, StatusBar1); msreg = mess; - String appDir = ExtractFilePath(ParamStr(0)); - String logfile = TPath::Combine(appDir, "v8reader.log"); - mess->setlogfile(logfile); + if (IsFileLoggingEnabled()) + { + String appDir = ExtractFilePath(ParamStr(0)); + String logfile = TPath::Combine(appDir, "v8reader.log"); + mess->setlogfile(logfile); + AddConditionalInfoMessage(mess, L"Файловое логирование включено"); + } } //--------------------------------------------------------------------------- @@ -2321,6 +2373,10 @@ void __fastcall TMainForm::Button1Click(TObject *Sender) void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) { + ULONGLONG loadStartTick = 0; + ULONGLONG loadEndTick = 0; + ULONGLONG loadDurationMs = 0; + if (!dlgOpenCF->Execute()) return; @@ -2329,8 +2385,9 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) String filename = dlgOpenCF->FileName; EditNameCF->Text = filename; - mess->AddMessage(L"ActionFileOpenExecute: начало открытия конфигурации", msInfo); - mess->AddMessage_(L"ActionFileOpenExecute: параметры открытия", msInfo, + loadStartTick = GetTickCount64(); + AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: начало открытия конфигурации"); + AddConditionalInfoMessageParams(mess, L"ActionFileOpenExecute: параметры открытия", L"file", filename, L"logfile", mess->getlogfile()); @@ -2386,13 +2443,13 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) mdIntegrationServices.clear(); mdSequences.clear(); - mess->AddMessage(L"ActionFileOpenExecute: создание v8catalog", msInfo); + AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: создание v8catalog"); GlobalCF = std::make_unique(filename, true); - mess->AddMessage(L"ActionFileOpenExecute: чтение метаданных конфигурации", msInfo); + AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: чтение метаданных конфигурации"); get_cf_name(GlobalCF.get(), mess); - mess->AddMessage(L"ActionFileOpenExecute: построение дерева интерфейса", msInfo); + AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: построение дерева интерфейса"); VirtualStringTreeValue1C->BeginUpdate(); try { @@ -2403,7 +2460,17 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) VirtualStringTreeValue1C->EndUpdate(); } - mess->AddMessage(L"ActionFileOpenExecute: конфигурация успешно открыта", msSuccesfull); + loadEndTick = GetTickCount64(); + loadDurationMs = loadEndTick - loadStartTick; + String loadDurationMsStr = IntToStr((__int64)loadDurationMs); + String loadDurationSecStr = FormatFloat(L"0.000", (double)loadDurationMs / 1000.0); + mess->AddMessage(L"Время загрузки конфигурации: " + loadDurationMsStr + L" мс (" + loadDurationSecStr + L" сек)", msInfo); + AddConditionalInfoMessageParams(mess, L"Детали загрузки конфигурации", + L"file", filename, + L"duration_ms", loadDurationMsStr, + L"duration_sec", loadDurationSecStr); + if (IsVerboseUiLoggingEnabled()) + mess->AddMessage(L"ActionFileOpenExecute: конфигурация успешно открыта", msSuccesfull); } catch (const Exception &e) { @@ -3786,3 +3853,7 @@ void __fastcall TMainForm::VirtualStringTreeValue1CClick(TObject *Sender) + + + + diff --git a/src/Parse_tree.cpp b/src/Parse_tree.cpp index 92d4fd7..7e29bfa 100644 --- a/src/Parse_tree.cpp +++ b/src/Parse_tree.cpp @@ -9,6 +9,136 @@ #pragma package(smart_init) +namespace +{ + inline bool is_ascii_digit(wchar_t ch) + { + return ch >= L'0' && ch <= L'9'; + } + + inline bool is_hex_digit(wchar_t ch) + { + return (ch >= L'0' && ch <= L'9') + || (ch >= L'a' && ch <= L'f') + || (ch >= L'A' && ch <= L'F'); + } + + inline bool is_base64_digit(wchar_t ch) + { + return (ch >= L'a' && ch <= L'z') + || (ch >= L'A' && ch <= L'Z') + || (ch >= L'0' && ch <= L'9') + || ch == L'+' + || ch == L'=' + || ch == L'/' + || ch == L'\r' + || ch == L'\n'; + } + + bool is_number_fast(const String& value) + { + const int len = value.Length(); + if(len == 0) return false; + + int i = 1; + if(value[i] == L'-') + { + ++i; + if(i > len) return false; + } + + for(; i <= len; ++i) + { + if(!is_ascii_digit(value[i])) return false; + } + return true; + } + + bool is_number_exp_fast(const String& value) + { + const int len = value.Length(); + if(len == 0) return false; + + int i = 1; + if(value[i] == L'-') + { + ++i; + if(i > len) return false; + } + + bool has_digits = false; + while(i <= len && is_ascii_digit(value[i])) + { + has_digits = true; + ++i; + } + if(!has_digits) return false; + + if(i <= len && value[i] == L'.') + { + ++i; + while(i <= len && is_ascii_digit(value[i])) ++i; + } + + if(i <= len && (value[i] == L'e' || value[i] == L'E')) + { + ++i; + if(i <= len && value[i] == L'-') ++i; + if(i > len || !is_ascii_digit(value[i])) return false; + while(i <= len && is_ascii_digit(value[i])) ++i; + } + + return i > len; + } + + bool is_guid_fast(const String& value) + { + static const int expected_len = 36; + if(value.Length() != expected_len) return false; + + for(int i = 1; i <= expected_len; ++i) + { + if(i == 9 || i == 14 || i == 19 || i == 24) + { + if(value[i] != L'-') return false; + } + else if(!is_hex_digit(value[i])) + { + return false; + } + } + return true; + } + + bool is_link_fast(const String& value) + { + const int len = value.Length(); + if(len < 34) return false; + + int i = 1; + if(!is_ascii_digit(value[i])) return false; + while(i <= len && is_ascii_digit(value[i])) ++i; + if(i > len || value[i] != L':') return false; + ++i; + + if(len - i + 1 != 32) return false; + for(; i <= len; ++i) + { + if(!is_hex_digit(value[i])) return false; + } + return true; + } + + bool is_base64_fast(const String& value, int start_index) + { + for(int i = start_index; i <= value.Length(); ++i) + { + if(!is_base64_digit(value[i])) return false; + } + return true; + } +} + //const boost::wregex exp_number(L"^-?[0-9]+\\.?[0-9]*$"); //const boost::wregex exp_number_exp(L"^-?[0-9]+\\.?[0-9]*e-?[0-9]+$"); const boost::wregex exp_number(L"^-?\\d+$"); @@ -235,13 +365,13 @@ String __fastcall tree::path() node_type classification_value(const String& value) { if(value.Length() == 0) return nd_empty; - if(regex_match(value.c_str(), exp_number)) return nd_number; - if(regex_match(value.c_str(), exp_number_exp)) return nd_number_exp; - if(regex_match(value.c_str(), exp_guid)) return nd_guid; - if(regex_match(value.c_str(), exp_binary)) return nd_binary; - if(regex_match(value.c_str(), exp_link)) return nd_link; - if(regex_match(value.c_str(), exp_binary2)) return nd_binary2; - if(regex_match(value.c_str(), exp_binary_d)) return nd_binary_d; + if(is_number_fast(value)) return nd_number; + if(is_number_exp_fast(value)) return nd_number_exp; + if(is_guid_fast(value)) return nd_guid; + if(value.Length() >= 8 && value.SubString(1, 8) == L"#base64:" && is_base64_fast(value, 9)) return nd_binary; + if(is_link_fast(value)) return nd_link; + if(is_base64_fast(value, 1)) return nd_binary2; + if(value.Length() >= 6 && value.SubString(1, 6) == L"#data:" && is_base64_fast(value, 7)) return nd_binary_d; return nd_unknown; } From 3c68285632dc89f8d34a422db5fb6d5033c1367a Mon Sep 17 00:00:00 2001 From: fishca Date: Thu, 2 Apr 2026 16:16:15 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=9E=D0=BF=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5,=20=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3?= =?UTF-8?q?=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8,=20=D0=BE=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D0=B5=D0=BD=D0=BD=D0=BE=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MainUnit.cpp | 244 ++++++++++++++++++++++++++++++++++++++++------- src/MainUnit.dfm | 14 ++- src/MainUnit.h | 10 ++ src/v8reader.cpp | 23 +++++ 4 files changed, 254 insertions(+), 37 deletions(-) diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 9620253..f3498cf 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -93,6 +93,26 @@ static bool IsVerboseUiLoggingEnabled() return false; } +static bool IsMessOutputEnabled() +{ + String envValue = Trim(GetEnvironmentVariable(L"V8READER_MESS_OUTPUT")).LowerCase(); + if (envValue == L"0" || envValue == L"false" || envValue == L"no" || envValue == L"off") + return false; + if (envValue == L"1" || envValue == L"true" || envValue == L"yes" || envValue == L"on") + return true; + + for (int i = 1; i <= ParamCount(); i++) + { + String arg = Trim(ParamStr(i)).LowerCase(); + if (arg == L"--no-mess-output" || arg == L"/no-mess-output" || arg == L"--quiet") + return false; + if (arg == L"--mess-output" || arg == L"/mess-output") + return true; + } + + return false; +} + static bool IsFileLoggingEnabled() { String envValue = GetEnvironmentVariable(L"V8READER_FILE_LOG"); @@ -112,7 +132,7 @@ static bool IsFileLoggingEnabled() static void AddConditionalInfoMessage(Messager* mess, const String& message) { - if (mess && IsVerboseUiLoggingEnabled()) + if (mess && mess->getUiMessagesEnabled() && IsVerboseUiLoggingEnabled()) mess->AddMessage(message, msInfo); } @@ -120,10 +140,19 @@ static void AddConditionalInfoMessageParams(Messager* mess, const String& descri const String& parname1, const String& par1, const String& parname2, const String& par2) { - if (mess && IsVerboseUiLoggingEnabled()) + if (mess && mess->getUiMessagesEnabled() && IsVerboseUiLoggingEnabled()) mess->AddMessage_(description, msInfo, parname1, par1, parname2, par2); } +static void AddConditionalInfoMessageParams(Messager* mess, const String& description, + const String& parname1, const String& par1, + const String& parname2, const String& par2, + const String& parname3, const String& par3) +{ + if (mess && mess->getUiMessagesEnabled() && IsVerboseUiLoggingEnabled()) + mess->AddMessage_(description, msInfo, parname1, par1, parname2, par2, parname3, par3); +} + static String FormatHeapStatus() { THeapStatus hs = GetHeapStatus(); @@ -139,7 +168,8 @@ static void LogHeapStatus(const String& stage, int currentIndex = -1, int totalCount = -1) { - if(!msreg) return; + Messager* activeMessager = dynamic_cast(msreg); + if(!msreg || (activeMessager && !activeMessager->getUiMessagesEnabled())) return; TStringList* ts = new TStringList; ts->Add(L"Heap = " + FormatHeapStatus()); @@ -159,8 +189,12 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner), MDManager(std { VirtualStringTreeValue1C->NodeDataSize = sizeof(VirtualTreeData); mess = new Messager(ListViewMessager, StatusBar1); + LoadProgressBar->Position = 0; + LoadProgressBar->Visible = false; + mess->setUiMessagesEnabled(IsMessOutputEnabled()); + mess->setFileLoggingEnabled(IsFileLoggingEnabled()); msreg = mess; - if (IsFileLoggingEnabled()) + if (mess->getFileLoggingEnabled()) { String appDir = ExtractFilePath(ParamStr(0)); String logfile = TPath::Combine(appDir, "v8reader.log"); @@ -170,6 +204,49 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner), MDManager(std } //--------------------------------------------------------------------------- +void __fastcall TMainForm::ResetLoadProgress(int maxValue, const String& statusText) +{ + if (maxValue < 1) + maxValue = 1; + + LoadProgressBar->Min = 0; + LoadProgressBar->Max = maxValue; + LoadProgressBar->Position = 0; + LoadProgressBar->Visible = true; + LoadProgressBar->BringToFront(); + + if (!statusText.IsEmpty()) + mess->Status(statusText); + + LoadProgressBar->Update(); + Application->ProcessMessages(); +} + +void __fastcall TMainForm::AdvanceLoadProgress(const String& statusText) +{ + if (!LoadProgressBar->Visible) + LoadProgressBar->Visible = true; + + if (LoadProgressBar->Position < LoadProgressBar->Max) + LoadProgressBar->Position = LoadProgressBar->Position + 1; + + if (!statusText.IsEmpty()) + mess->Status(statusText); + + LoadProgressBar->Update(); + Application->ProcessMessages(); +} + +void __fastcall TMainForm::CompleteLoadProgress(const String& statusText) +{ + LoadProgressBar->Position = LoadProgressBar->Max; + if (!statusText.IsEmpty()) + mess->Status(statusText); + LoadProgressBar->Update(); + Application->ProcessMessages(); + LoadProgressBar->Visible = false; +} +//--------------------------------------------------------------------------- void __fastcall TMainForm::btnOpenEditNameClick(TObject *Sender) { if (dlgOpenCF->Execute()) @@ -2386,13 +2463,15 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) String filename = dlgOpenCF->FileName; EditNameCF->Text = filename; loadStartTick = GetTickCount64(); + ResetLoadProgress(38, L"Подготовка к загрузке конфигурации..."); AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: начало открытия конфигурации"); AddConditionalInfoMessageParams(mess, L"ActionFileOpenExecute: параметры открытия", L"file", filename, - L"logfile", mess->getlogfile()); + L"logfile", mess->getFileLoggingEnabled() ? mess->getlogfile() : L"disabled"); try { + AdvanceLoadProgress(L"Очистка предыдущих данных..."); GlobalCF.reset(); mdCatalogs.clear(); @@ -2444,12 +2523,15 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) mdSequences.clear(); AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: создание v8catalog"); + AdvanceLoadProgress(L"Открытие файла конфигурации..."); GlobalCF = std::make_unique(filename, true); AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: чтение метаданных конфигурации"); + AdvanceLoadProgress(L"Чтение метаданных конфигурации..."); get_cf_name(GlobalCF.get(), mess); AddConditionalInfoMessage(mess, L"ActionFileOpenExecute: построение дерева интерфейса"); + AdvanceLoadProgress(L"Построение дерева метаданных..."); VirtualStringTreeValue1C->BeginUpdate(); try { @@ -2464,26 +2546,31 @@ void __fastcall TMainForm::ActionFileOpenExecute(TObject *Sender) loadDurationMs = loadEndTick - loadStartTick; String loadDurationMsStr = IntToStr((__int64)loadDurationMs); String loadDurationSecStr = FormatFloat(L"0.000", (double)loadDurationMs / 1000.0); - mess->AddMessage(L"Время загрузки конфигурации: " + loadDurationMsStr + L" мс (" + loadDurationSecStr + L" сек)", msInfo); + CompleteLoadProgress(L"Загрузка завершена"); + mess->Status(L"Время загрузки конфигурации: " + loadDurationMsStr + L" мс (" + loadDurationSecStr + L" сек)"); AddConditionalInfoMessageParams(mess, L"Детали загрузки конфигурации", L"file", filename, L"duration_ms", loadDurationMsStr, L"duration_sec", loadDurationSecStr); - if (IsVerboseUiLoggingEnabled()) + if (mess->getUiMessagesEnabled() && IsVerboseUiLoggingEnabled()) mess->AddMessage(L"ActionFileOpenExecute: конфигурация успешно открыта", msSuccesfull); } catch (const Exception &e) { - mess->AddMessage_(L"ActionFileOpenExecute: VCL exception", msError, - L"file", filename, - L"message", e.Message); + LoadProgressBar->Visible = false; + if (mess->getUiMessagesEnabled()) + mess->AddMessage_(L"ActionFileOpenExecute: VCL exception", msError, + L"file", filename, + L"message", e.Message); throw; } catch (...) { - mess->AddMessage_(L"ActionFileOpenExecute: неизвестное исключение", msError, - L"file", filename, - L"stage", L"open configuration"); + LoadProgressBar->Visible = false; + if (mess->getUiMessagesEnabled()) + mess->AddMessage_(L"ActionFileOpenExecute: неизвестное исключение", msError, + L"file", filename, + L"stage", L"open configuration"); throw; } } @@ -2502,6 +2589,8 @@ __fastcall Messager::Messager(TListView* lv, TStatusBar* sb) { ListView = lv; StatusBar = sb; + uiMessagesEnabled = true; + fileLoggingEnabled = false; FormatSettings.DateSeparator = L'.'; FormatSettings.TimeSeparator = L':'; //FormatSettings.LongDateFormat = L"dd.mm.yyyy"; @@ -2509,9 +2598,36 @@ __fastcall Messager::Messager(TListView* lv, TStatusBar* sb) FormatSettings.LongTimeFormat = L"hh:mm:ss:zzz"; } +void __fastcall Messager::setUiMessagesEnabled(bool enabled) +{ + uiMessagesEnabled = enabled; +} + +bool __fastcall Messager::getUiMessagesEnabled() const +{ + return uiMessagesEnabled; +} + +void __fastcall Messager::setFileLoggingEnabled(bool enabled) +{ + fileLoggingEnabled = enabled; + if (!fileLoggingEnabled) + logfile = L""; +} + +bool __fastcall Messager::getFileLoggingEnabled() const +{ + return fileLoggingEnabled; +} + //--------------------------------------------------------------------------- void __fastcall Messager::setlogfile(String _logfile) { + if(!fileLoggingEnabled) + { + logfile = L""; + return; + } logfile = System::Ioutils::TPath::GetFullPath(_logfile); if(FileExists(logfile)) DeleteFile(logfile); @@ -2526,7 +2642,7 @@ String __fastcall Messager::getlogfile() const //--------------------------------------------------------------------------- void __fastcall Messager::Status(const String& message) { - StatusBar->Panels->Items[0]->Text = message; + StatusBar->SimpleText = message; StatusBar->Update(); } @@ -2537,14 +2653,17 @@ void __fastcall Messager::AddMessage(const String& message, const MessageState m TStreamWriter* sw; String s; - ListView->AddItem(message, param); - TListItem* item = ListView->Items->Item[ListView->Items->Count - 1]; - item->StateIndex = mstate; - ListView->Selected = item; - ListView->Scroll(0, 0xfffffff); - ListView->Update(); + if (uiMessagesEnabled) + { + ListView->AddItem(message, param); + TListItem* item = ListView->Items->Item[ListView->Items->Count - 1]; + item->StateIndex = mstate; + ListView->Selected = item; + ListView->Scroll(0, 0xfffffff); + ListView->Update(); + } - if(logfile.Length()) + if(fileLoggingEnabled && logfile.Length()) { if(FileExists(logfile)) { @@ -2607,21 +2726,21 @@ void get_cf_name(v8catalog* cf, Messager* mess) if(!cf) { - mess->AddError(L"Ошибка открытия файла"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка открытия файла"); return; } filedata = cf->GetFile(L"version"); if(!filedata) { - mess->AddError(L"Ошибка получения файла root конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка получения файла root конфигурации"); return; } tr.reset(get_treeFromV8file(filedata)); if(!tr) { - mess->AddError(L"Ошибка разбора файла root конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка разбора файла root конфигурации"); return; } @@ -2630,7 +2749,7 @@ void get_cf_name(v8catalog* cf, Messager* mess) node = &(*node)[0][0][0]; if(node->get_type() != nd_number) { - mess->AddError(L"Ошибка получения версии формата конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка получения версии формата конфигурации"); return; } @@ -2643,14 +2762,14 @@ void get_cf_name(v8catalog* cf, Messager* mess) filedata = cf->GetFile(L"metadata"); if(!filedata) { - mess->AddError(L"Ошибка получения файла metadata конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка получения файла metadata конфигурации"); return; } cat = filedata->GetCatalog(); if(!cat) { - mess->AddError(L"Ошибка открытия файла metadata конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка открытия файла metadata конфигурации"); return; } @@ -2664,14 +2783,14 @@ void get_cf_name(v8catalog* cf, Messager* mess) filedata = cat->GetFile(L"root"); if(!filedata) { - mess->AddError(L"Ошибка получения файла root конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка получения файла root конфигурации"); return; } tr.reset(get_treeFromV8file(filedata)); if(!tr) { - mess->AddError(L"Ошибка разбора файла root конфигурации"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка разбора файла root конфигурации"); return; } @@ -2680,7 +2799,7 @@ void get_cf_name(v8catalog* cf, Messager* mess) if(node->get_type() != nd_guid) { - mess->AddError(L"Ошибка получения имени файла метаданных"); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(L"Ошибка получения имени файла метаданных"); return; } @@ -2693,7 +2812,7 @@ void get_cf_name(v8catalog* cf, Messager* mess) s = L"Ошибка получения файла "; s += meta; s += L" конфигурации"; - mess->AddError(s); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(s); return; } @@ -2703,7 +2822,7 @@ void get_cf_name(v8catalog* cf, Messager* mess) s = L"Ошибка разбора файла "; s += meta; s += L" конфигурации"; - mess->AddError(s); + if (mess && mess->getUiMessagesEnabled()) mess->AddError(s); return; } @@ -3285,17 +3404,22 @@ void get_cf_name(tree* tr, Messager* mess) node3 = tr; + if (MainForm) + MainForm->AdvanceLoadProgress(L"Обработка справочников..."); + // Заполняем справочники - mess->AddMessage(L"Начало обработки справочников", MessageState::msInfo); + if (mess && mess->getUiMessagesEnabled()) mess->AddMessage(L"Начало обработки справочников", MessageState::msInfo); fill_md(tr, GUID_Catalogs); - mess->AddMessage(L"Справочники обработаны", MessageState::msInfo); + if (mess && mess->getUiMessagesEnabled()) mess->AddMessage(L"Справочники обработаны", MessageState::msInfo); // Заполняем языки + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка языков..."); mess->AddMessage(L"Начало обработки языков", MessageState::msInfo); fill_md(tr, GUID_Languages); mess->AddMessage(L"Языки обработаны", MessageState::msInfo); // Заполняем регистры накопления + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка регистров накопления..."); mess->AddMessage(L"Начало обработки регистров накопления", MessageState::msInfo); try { fill_md(tr, GUID_AccumulationRegisters); @@ -3306,6 +3430,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Регистры накопления обработаны", MessageState::msInfo); // Заполняем регистры бухгалтерии + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка регистров бухгалтерии..."); mess->AddMessage(L"Начало обработки регистров бухгалтерии", MessageState::msInfo); // try { // fill_md(tr, GUID_AccountingRegisters); @@ -3316,6 +3441,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Регистры бухгалтерии обработаны", MessageState::msInfo); // Заполняем регистры расчета + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка регистров расчета..."); mess->AddMessage(L"Начало обработки регистров расчета", MessageState::msInfo); try { fill_md(tr, GUID_CalculationRegisters); @@ -3326,6 +3452,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Регистры расчета обработаны", MessageState::msInfo); // Заполняем бизнес-процессы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка бизнес-процессов..."); mess->AddMessage(L"Начало обработки бизнес-процессов", MessageState::msInfo); try { fill_md(tr, GUID_BusinessProcesses); @@ -3336,6 +3463,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Бизнес-процессы обработаны", MessageState::msInfo); // ПВХ + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка планов видов характеристик..."); mess->AddMessage(L"Начало обработки планов видов характеристик", MessageState::msInfo); try { fill_md(tr, GUID_ChartOfCharacteristicTypes); @@ -3347,6 +3475,7 @@ void get_cf_name(tree* tr, Messager* mess) // группы команд + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка групп команд..."); mess->AddMessage(L"Начало обработки групп команд", MessageState::msInfo); try { fill_md(tr, GUID_CommandGroups); @@ -3358,6 +3487,7 @@ void get_cf_name(tree* tr, Messager* mess) // общие реквизиты + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка общих реквизитов..."); mess->AddMessage(L"Начало обработки общих реквизитов", MessageState::msInfo); try { fill_md(tr, GUID_CommonAttributes); @@ -3368,6 +3498,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Общие реквизиты обработаны", MessageState::msInfo); // общие команды + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка общих команд..."); mess->AddMessage(L"Начало обработки общих команд", MessageState::msInfo); try { fill_md(tr, GUID_CommonCommands); @@ -3378,6 +3509,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Общие команды обработаны", MessageState::msInfo); // общие формы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка общих форм..."); mess->AddMessage(L"Начало обработки общих форм", MessageState::msInfo); try { fill_md(tr, GUID_CommonForms); @@ -3388,6 +3520,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Общие формы обработаны", MessageState::msInfo); // общие модули + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка общих модулей..."); mess->AddMessage(L"Начало обработки общих модулей", MessageState::msInfo); try { fill_md(tr, GUID_CommonModules); @@ -3399,6 +3532,7 @@ void get_cf_name(tree* tr, Messager* mess) // общие картинки + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка общих картинок..."); mess->AddMessage(L"Начало обработки общих картинок", MessageState::msInfo); try { fill_md(tr, GUID_CommonPictures); @@ -3409,6 +3543,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Общие картинки обработаны", MessageState::msInfo); // общие макеты + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка общих макетов..."); mess->AddMessage(L"Начало обработки общих макетов", MessageState::msInfo); try { fill_md(tr, GUID_CommonTemplates); @@ -3419,6 +3554,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Общие макеты обработаны", MessageState::msInfo); // константы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка констант..."); mess->AddMessage(L"Начало обработки констант", MessageState::msInfo); try { fill_md(tr, GUID_Constants); @@ -3429,6 +3565,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Константы обработаны: ", MessageState::msInfo); // обработки + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка обработок..."); mess->AddMessage(L"Начало обработки обработок", MessageState::msInfo); try { fill_md(tr, GUID_DataProcessors); @@ -3439,6 +3576,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Обработки обработаны", MessageState::msInfo); // определяемые типы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка определяемых типов..."); mess->AddMessage(L"Начало обработки определяемых типов", MessageState::msInfo); try { fill_md(tr, GUID_DefinedTypes); @@ -3449,6 +3587,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Определяемые типы обработаны", MessageState::msInfo); // журналы документов + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка журналов документов..."); mess->AddMessage(L"Начало обработки журналов документов", MessageState::msInfo); try { fill_md(tr, GUID_JournDocuments); @@ -3459,6 +3598,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Журналы документов обработаны", MessageState::msInfo); // нумераторы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка нумераторов..."); mess->AddMessage(L"Начало обработки нумераторов", MessageState::msInfo); try { fill_md(tr, GUID_Numerators); @@ -3469,6 +3609,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Нумераторы обработаны", MessageState::msInfo); // документы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка документов..."); mess->AddMessage(L"Начало обработки документов", MessageState::msInfo); try { fill_md(tr, GUID_Documents); @@ -3479,6 +3620,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Документы обработаны", MessageState::msInfo); // перечисления + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка перечислений..."); mess->AddMessage(L"Начало обработки перечислений", MessageState::msInfo); try { fill_md(tr, GUID_Enums); @@ -3489,6 +3631,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Перечисления обработаны", MessageState::msInfo); // подписки на события + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка подписок на события..."); mess->AddMessage(L"Начало обработки подписок на события", MessageState::msInfo); try { fill_md(tr, GUID_EventSubscriptions); @@ -3499,6 +3642,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Подписки на события обработаны", MessageState::msInfo); // планы обмена + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка планов обмена..."); mess->AddMessage(L"Начало обработки планов обмена", MessageState::msInfo); try { fill_md(tr, GUID_ExchangePlans); @@ -3509,6 +3653,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Планы обмена обработаны", MessageState::msInfo); // планы счетов + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка планов счетов..."); mess->AddMessage(L"Начало обработки планов счетов", MessageState::msInfo); try { fill_md(tr, GUID_ChartsOfAccounts); @@ -3519,6 +3664,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Планы счетов обработаны", MessageState::msInfo); // планы видов расчета + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка планов видов расчета..."); mess->AddMessage(L"Начало обработки планов видов расчета", MessageState::msInfo); try { fill_md(tr, GUID_ChartsOfCalculationTypes); @@ -3529,6 +3675,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Планы видов расчета обработаны", MessageState::msInfo); // внешние источники данных + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка внешних источников данных..."); mess->AddMessage(L"Начало обработки внешних источников данных", MessageState::msInfo); try { fill_md(tr, GUID_ExternalDataSources); @@ -3539,6 +3686,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Внешние источники данных обработаны", MessageState::msInfo); // критерии отбора + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка критериев отбора..."); mess->AddMessage(L"Начало обработки критериев отбора", MessageState::msInfo); try { fill_md(tr, GUID_FilterCriteria); @@ -3549,6 +3697,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Критерии отбора обработаны", MessageState::msInfo); // функциональные опции + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка функциональных опций..."); mess->AddMessage(L"Начало обработки функциональных опций", MessageState::msInfo); try { fill_md(tr, GUID_FunctionalOptions); @@ -3559,6 +3708,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Функциональные опции обработаны", MessageState::msInfo); // параметры функциональных опций + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка параметров функциональных опций..."); mess->AddMessage(L"Начало обработки параметров функциональных опций", MessageState::msInfo); try { fill_md(tr, GUID_FunctionalOptionsParameters); @@ -3569,6 +3719,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Параметры функциональных опций обработаны", MessageState::msInfo); // http - сервисы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка HTTP-сервисов..."); mess->AddMessage(L"Начало обработки HTTP-сервисов", MessageState::msInfo); try { fill_md(tr, GUID_HTTPServices); @@ -3579,6 +3730,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"http - сервисы обработаны", MessageState::msInfo); // регистры сведений + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка регистров сведений..."); mess->AddMessage(L"Начало обработки регистров сведений", MessageState::msInfo); try { fill_md(tr, GUID_InformationRegisters); @@ -3589,6 +3741,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Регистры сведений обработаны", MessageState::msInfo); // интерфейсы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка интерфейсов..."); mess->AddMessage(L"Начало обработки интерфейсов", MessageState::msInfo); try { fill_md(tr, GUID_Interfaces); @@ -3599,6 +3752,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Интерфейсы обработаны", MessageState::msInfo); // отчеты + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка отчетов..."); mess->AddMessage(L"Начало обработки отчетов", MessageState::msInfo); try { fill_md(tr, GUID_Reports); @@ -3609,6 +3763,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Отчеты обработаны", MessageState::msInfo); // роли + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка ролей..."); mess->AddMessage(L"Начало обработки ролей", MessageState::msInfo); try { fill_md(tr, GUID_Roles); @@ -3619,6 +3774,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Роли обработаны", MessageState::msInfo); // параметры сеанса + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка параметров сеанса..."); mess->AddMessage(L"Начало обработки параметров сеанса", MessageState::msInfo); try { fill_md(tr, GUID_SessionParameters); @@ -3629,6 +3785,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Параметры сеанса обработаны", MessageState::msInfo); // хранилища настроек + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка хранилищ настроек..."); mess->AddMessage(L"Начало обработки хранилищ настроек", MessageState::msInfo); try { fill_md(tr, GUID_SettingsStorages); @@ -3639,6 +3796,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Хранилища настроек обработаны", MessageState::msInfo); // элементы стиля + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка элементов стиля..."); mess->AddMessage(L"Начало обработки элементов стиля", MessageState::msInfo); try { fill_md(tr, GUID_StyleItems); @@ -3649,6 +3807,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Элементы стиля обработаны", MessageState::msInfo); // стили + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка стилей..."); mess->AddMessage(L"Начало обработки стилей", MessageState::msInfo); try { fill_md(tr, GUID_Styles); @@ -3659,6 +3818,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Стили обработаны", MessageState::msInfo); // подсистемы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка подсистем..."); mess->AddMessage(L"Начало обработки подсистем", MessageState::msInfo); try { fill_subsystem(tr, MainForm->Subsystems); @@ -3669,6 +3829,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Подсистемы обработаны", MessageState::msInfo); // задачи + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка задач..."); mess->AddMessage(L"Начало обработки задач", MessageState::msInfo); try { fill_md(tr, GUID_Tasks); @@ -3679,6 +3840,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Задачи обработаны", MessageState::msInfo); // веб-сервисы + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка веб-сервисов..."); mess->AddMessage(L"Начало обработки веб-сервисов", MessageState::msInfo); try { fill_md(tr, GUID_WebServices); @@ -3689,6 +3851,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"веб-сервисы обработаны", MessageState::msInfo); // ws-ссылки + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка WS-ссылок..."); mess->AddMessage(L"Начало обработки WS-ссылок", MessageState::msInfo); try { fill_md(tr, GUID_WSReferences); @@ -3699,6 +3862,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"ws-ссылки обработаны", MessageState::msInfo); // xdto-пакеты + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка XDTO-пакетов..."); mess->AddMessage(L"Начало обработки XDTO-пакетов", MessageState::msInfo); try { fill_md(tr, GUID_XDTOPackages); @@ -3709,6 +3873,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"xdto-пакеты обработаны", MessageState::msInfo); // регл задания + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка регламентных заданий..."); mess->AddMessage(L"Начало обработки регламентных заданий", MessageState::msInfo); try { fill_md(tr, GUID_ScheduledJobs); @@ -3719,6 +3884,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Регламентные задания обработаны", MessageState::msInfo); // боты + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка ботов..."); mess->AddMessage(L"Начало обработки ботов", MessageState::msInfo); try { fill_md(tr, GUID_Bots); @@ -3729,6 +3895,7 @@ void get_cf_name(tree* tr, Messager* mess) mess->AddMessage(L"Боты обработаны", MessageState::msInfo); // последовательности + if (MainForm) MainForm->AdvanceLoadProgress(L"Обработка последовательностей..."); mess->AddMessage(L"Начало обработки последовательностей", MessageState::msInfo); try { fill_md(tr, GUID_Sequences); @@ -3817,7 +3984,7 @@ void get_cf_name(tree* tr, Messager* mess) //mess->AddMessage(cf_synonym + " (" + cf_version + ")", msEmpty); MainForm->ConfigName = cf_synonym + " (" + cf_version + ")"; //ConfigName = cf_synonym + " (" + cf_version + ")"; - mess->AddMessage("Прочитана конфигурация: " + cf_synonym + " (" + cf_version + ")", msInfo); + if (mess && mess->getUiMessagesEnabled()) mess->AddMessage("Прочитана конфигурация: " + cf_synonym + " (" + cf_version + ")", msInfo); } @@ -3857,3 +4024,10 @@ void __fastcall TMainForm::VirtualStringTreeValue1CClick(TObject *Sender) + + + + + + + diff --git a/src/MainUnit.dfm b/src/MainUnit.dfm index 21659bd..e735812 100644 --- a/src/MainUnit.dfm +++ b/src/MainUnit.dfm @@ -54,6 +54,7 @@ object MainForm: TMainForm Top = 629 Width = 801 Height = 19 + SimplePanel = True Panels = < item Width = 300 @@ -237,9 +238,9 @@ object MainForm: TMainForm end object ListViewMessager: TListView Left = 0 - Top = 535 + Top = 553 Width = 801 - Height = 94 + Height = 76 Align = alBottom Columns = < item @@ -249,6 +250,15 @@ object MainForm: TMainForm TabOrder = 5 ViewStyle = vsReport end + object LoadProgressBar: TProgressBar + Left = 0 + Top = 535 + Width = 801 + Height = 18 + Align = alBottom + TabOrder = 6 + Visible = False + end object dlgOpenCF: TOpenDialog Left = 736 Top = 328 diff --git a/src/MainUnit.h b/src/MainUnit.h index dd0acc7..830f363 100644 --- a/src/MainUnit.h +++ b/src/MainUnit.h @@ -93,6 +93,7 @@ class TMainForm : public TForm TSynMemo *MemoObject; TSynMemo *MemoManager; TPanel *Panel1; + TProgressBar *LoadProgressBar; TSynCppSyn *SynCppSyn1; void __fastcall btnOpenEditNameClick(TObject *Sender); void __fastcall btnGOClick(TObject *Sender); @@ -115,6 +116,9 @@ class TMainForm : public TForm std::unique_ptr MDManager; // Умный указатель для автоматического управления памятью public: // User declarations __fastcall TMainForm(TComponent* Owner); + void __fastcall ResetLoadProgress(int maxValue, const String& statusText = L""); + void __fastcall AdvanceLoadProgress(const String& statusText); + void __fastcall CompleteLoadProgress(const String& statusText); void __fastcall TreeInit(); void __fastcall FillVirtualTree(); void __fastcall FillTreeMD(PVirtualNode parentNode, const MetadataVector& mdData, const String& md_name, int imgIndex); @@ -236,8 +240,14 @@ class Messager : public MessageRegistrator TStatusBar* StatusBar; String logfile; TFormatSettings FormatSettings; + bool uiMessagesEnabled; + bool fileLoggingEnabled; public: __fastcall Messager(TListView* lv, TStatusBar* sb); + void __fastcall setUiMessagesEnabled(bool enabled); + bool __fastcall getUiMessagesEnabled() const; + void __fastcall setFileLoggingEnabled(bool enabled); + bool __fastcall getFileLoggingEnabled() const; void __fastcall setlogfile(String _logfile); String __fastcall getlogfile() const; virtual void __fastcall AddMessage(const String& message, const MessageState mstate, TStringList* param = NULL); diff --git a/src/v8reader.cpp b/src/v8reader.cpp index 84820dc..5c8c881 100644 --- a/src/v8reader.cpp +++ b/src/v8reader.cpp @@ -12,8 +12,31 @@ USEFORM("MainUnit.cpp", MainForm); //--------------------------------------------------------------------------- +static bool IsCrashLoggingEnabled() +{ + String envValue = Trim(GetEnvironmentVariable(L"V8READER_CRASH_LOG")).LowerCase(); + if (envValue == L"0" || envValue == L"false" || envValue == L"no" || envValue == L"off") + return false; + if (envValue == L"1" || envValue == L"true" || envValue == L"yes" || envValue == L"on") + return true; + + for (int i = 1; i <= ParamCount(); i++) + { + String arg = Trim(ParamStr(i)).LowerCase(); + if (arg == L"--no-crash-log" || arg == L"/no-crash-log") + return false; + if (arg == L"--crash-log" || arg == L"/crash-log") + return true; + } + + return false; +} + static void WriteCrashLog(const String& message) { + if (!IsCrashLoggingEnabled()) + return; + try { String appDir = ExtractFilePath(ParamStr(0));