1
0
mirror of https://github.com/bia-technologies/bsl-parser.git synced 2024-11-24 08:12:17 +02:00

#ONECICD-165

Ошибка чтения подсистем большой вложенности
Чтение подсистем вынесено в отдельный экспортный метод
This commit is contained in:
aleksey.koryakin 2019-05-27 18:31:52 +03:00
parent 40e873c025
commit 3ce22fd2a2
4 changed files with 49 additions and 34 deletions

View File

@ -57,7 +57,6 @@
Для Каждого Часть Из СтрРазделить(ИмяОбъекта, ".") Цикл
Каталог = ОбъединитьПути(Каталог, ИмяКаталогВидаОбъекта(ВидОбъекта), Часть);
ИмяОбъекта = Часть;
КонецЦикла;
@ -189,6 +188,12 @@
КаталогОписаний = КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта);
Если СтрНайти(ИмяОбъекта, ".") Тогда // Составное имя
ИмяОбъекта = Сред(ИмяОбъекта, СтрНайти(ИмяОбъекта, ".", НаправлениеПоиска.СКонца) + 1);
КонецЕсли;
ИначеЕсли ВидОбъекта = ТипыОбъектовКонфигурации.ИмяТипаПодсистема() И СтрНайти(ИмяОбъекта, ".") Тогда
КаталогОписаний = КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта);
@ -288,7 +293,7 @@
// Возвращаемое значение:
// Массив - Коллекция имен файлов модулей
//
Функция НайтиМодулиОбъекта(ИмяОбъекта, ВидОбъекта, МодулиПодчиненныхОбъектов = Ложь) Экспорт
Функция НайтиМодулиОбъекта(Знач ИмяОбъекта, ВидОбъекта, МодулиПодчиненныхОбъектов = Ложь) Экспорт
Результат = Новый Массив();

View File

@ -30,8 +30,6 @@
ОписаниеКонфигурации = ПрочитатьОписаниеКонфигурации();
ЗаполнитьПодсистемыОбъектовКонфигурации();
ЗаполнитьИменаФайлов();
КонецПроцедуры
@ -181,9 +179,9 @@
// Возвращаемое значение:
// Строка - Полное имя
//
Функция ПолноеИмяОбъекта(СтрокаОбъект, ДобавлятьПрефиксДляОбщихМодулей = Истина) Экспорт
Функция ПолноеИмяОбъекта(СтрокаОбъект, ДобавлятьПрефиксДляОбщихМодулей = Истина, Разделитель = ".") Экспорт
Возврат ЧтениеОписанийБазовый.ПолноеИмяОбъекта(СтрокаОбъект, ДобавлятьПрефиксДляОбщихМодулей);
Возврат ЧтениеОписанийБазовый.ПолноеИмяОбъекта(СтрокаОбъект, ДобавлятьПрефиксДляОбщихМодулей, Разделитель);
КонецФункции
@ -232,6 +230,28 @@
КонецПроцедуры
Процедура ЗаполнитьПодсистемыОбъектовКонфигурации() Экспорт
// дополним объекты информацией о подсистемах
ПодсистемыКонфигурации = ПрочитатьПодсистемыКонфигурации();
ОписаниеКонфигурации.Вставить("ПодсистемыКонфигурации", ПодсистемыКонфигурации);
Для Каждого ОбъектКонфигурации Из ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
Подсистемы = ПодсистемыКонфигурации.НайтиСтроки(Новый Структура("ОбъектМетаданных", ОбъектКонфигурации.Тип + "." + ОбъектКонфигурации.Наименование));
Если Подсистемы.Количество() Тогда
// ставим первую
ОбъектКонфигурации.Подсистемы = Подсистемы;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
@ -294,28 +314,6 @@
КонецФункции
Процедура ЗаполнитьПодсистемыОбъектовКонфигурации()
// дополним объекты информацией о подсистемах
ПодсистемыКонфигурации = ПрочитатьПодсистемыКонфигурации();
ОписаниеКонфигурации.Вставить("ПодсистемыКонфигурации", ПодсистемыКонфигурации);
Для Каждого ОбъектКонфигурации Из ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
Подсистемы = ПодсистемыКонфигурации.НайтиСтроки(Новый Структура("ОбъектМетаданных", ОбъектКонфигурации.Тип + "." + ОбъектКонфигурации.Наименование));
Если Подсистемы.Количество() Тогда
// ставим первую
ОбъектКонфигурации.Подсистемы = Подсистемы;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьОписаниеМодуляПоИмениФайла(Знач ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации)
НовыйМодульКонфигурации = Неопределено;

View File

@ -19,20 +19,30 @@
// Возвращаемое значение:
// Строка - Полное имя
//
Функция ПолноеИмяОбъекта(СтрокаМодуль, ДобавлятьПрефиксДляОбщихМодулей = Истина) Экспорт
Функция ПолноеИмяОбъекта(СтрокаМодуль, ДобавлятьПрефиксДляОбщихМодулей = Истина, Разделитель = ".") Экспорт
Если Утилиты.ПеременнаяСодержитСвойство(СтрокаМодуль, "ТипМодуля") Тогда // Передано описание модуля
Если СтрокаМодуль.ТипМодуля <> ТипыМодуля.ОбщийМодуль ИЛИ ДобавлятьПрефиксДляОбщихМодулей Тогда
Если СтрокаМодуль.ТипМодуля = ТипыМодуля.ОбщийМодуль И НЕ ДобавлятьПрефиксДляОбщихМодулей Тогда
Возврат ТипыОбъектовКонфигурации.ПолучитьИмяТипаНаРусском(СтрокаМодуль.Родитель.Тип) + "." + СтрокаМодуль.Родитель.Наименование;
Иначе
Возврат СтрокаМодуль.Родитель.Наименование;
КонецЕсли;
ПолноеИмя = ТипыОбъектовКонфигурации.ПолучитьИмяТипаНаРусском(СтрокаМодуль.Родитель.Тип) + Разделитель + СтрокаМодуль.Родитель.Наименование;
Если СтрокаМодуль.РодительФорма <> Неопределено Тогда
ПолноеИмя = ПолноеИмя + Разделитель + СтрокаМодуль.РодительФорма.Наименование;
ИначеЕсли СтрокаМодуль.РодительКоманда <> Неопределено Тогда
ПолноеИмя = ПолноеИмя + Разделитель + СтрокаМодуль.РодительКоманда.Наименование;
КонецЕсли;
Возврат ПолноеИмя;
Иначе
Возврат ТипыОбъектовКонфигурации.ПолучитьИмяТипаНаРусском(СтрокаМодуль.Тип) + "." + СтрокаМодуль.Наименование;

View File

@ -44,6 +44,7 @@
Парсер = ПарсерBSL.ПарсерКонфигурации(ОбъединитьПути(КаталогФикстур(), "configurations", "Demo_8_3_10"));
Парсер.ПрочитатьСтруктуруКонфигурации();
Парсер.ЗаполнитьПодсистемыОбъектовКонфигурации();
Парсер.НайтиМодулиКонфигурации();
ПроверитьРезультатЧтенияВыгрузки(Парсер, 168, 89);
@ -54,6 +55,7 @@
Парсер = ПарсерBSL.ПарсерКонфигурации(ОбъединитьПути(КаталогФикстур(), "edtconfigurations", "Demo_8_3_10", "src"));
Парсер.ПрочитатьСтруктуруКонфигурации();
Парсер.ЗаполнитьПодсистемыОбъектовКонфигурации();
Парсер.НайтиМодулиКонфигурации();
ПроверитьРезультатЧтенияВыгрузки(Парсер, 167, 89);