1
0
mirror of https://github.com/bia-technologies/bsl-parser.git synced 2024-11-19 20:31:44 +02:00

Исправление ошибок чтения

- чтение модулей поддерживает какноническое описание возвращаемых значений
 - чтение подсистем учитывает мультиязычность синонима
This commit is contained in:
Maximov Valery 2023-05-24 15:03:43 +03:00
parent bcc30767b8
commit e9770a9d96
4 changed files with 639 additions and 638 deletions

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2019-2021 BIA Technologies, LLC
Copyright (c) 2019-2023 BIA Technologies, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -15,7 +15,7 @@
ПараметрыЧтения.Вставить("ОписаниеКонфигурации", Конфигурация.ОписаниеКонфигурации());
ПараметрыЧтения.Вставить("СтруктураКаталогов", Конфигурация.СтруктураКаталогов());
ПараметрыЧтения.Вставить("ТипКорневогоЭлемента", ТипКорневогоЭлемента);
ПараметрыЧтения.Вставить("ФорматВыгрузки", ПараметрыЧтения.СтруктураКаталогов.ФорматВыгрузки());
ПараметрыЧтения.Вставить("ФорматВыгрузки", ПараметрыЧтения.СтруктураКаталогов.ФорматВыгрузки());
Если ПараметрыЧтения.ФорматВыгрузки = ФорматыВыгрузки.EDT Тогда
ЧитательОписаний = ЧтениеОписанийEDT;
@ -44,12 +44,15 @@
// Читает описание объекта конфигурации
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации.
// См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Процедура ПрочитатьОписание(ОбъектКонфигурации) Экспорт
ПараметрыЧтения = ОбъектКонфигурации.Конфигурация.ПараметрыЧтения();
ОбъектКонфигурации.Описание = ПрочитатьФайлОписанияОбъекта(ПараметрыЧтения, ОбъектКонфигурации.ПутьКФайлу, ОбъектКонфигурации.Тип);
ОбъектКонфигурации.Описание = ПрочитатьФайлОписанияОбъекта(
ПараметрыЧтения, ОбъектКонфигурации.ПутьКФайлу, ОбъектКонфигурации.Тип
);
КонецПроцедуры
@ -63,8 +66,8 @@
ПараметрыЧтения.ОписаниеКонфигурации.ПодсистемыКонфигурации = ПодсистемыКонфигурации;
Для Каждого ОбъектКонфигурации Из ПараметрыЧтения.ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
Подсистемы = ПодсистемыКонфигурации.НайтиСтроки(Новый Структура("ОбъектМетаданных", ОбъектКонфигурации.Тип + "." + ОбъектКонфигурации.Наименование));
Отбор = Новый Структура("ОбъектМетаданных", ОбъектКонфигурации.Тип + "." + ОбъектКонфигурации.Наименование);
Подсистемы = ПодсистемыКонфигурации.НайтиСтроки(Отбор);
Если Подсистемы.Количество() Тогда
@ -93,7 +96,7 @@
ПолучитьОписаниеМодуляПоИмениФайла(ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации);
КонецЦикла;
КонецЦикла;
КонецЦикла;
@ -112,20 +115,17 @@
СтрокаМодуль.Содержимое = СодержимоеМодуля.Содержимое;
СтрокаМодуль.НаборБлоков = СодержимоеМодуля.БлокиМодуля;
Если СтрокаМодуль.ТипМодуля = ТипыМодуля.ОбщийМодуль Тогда
Если СтрокаМодуль.Родитель <> Неопределено Тогда
Если СтрокаМодуль.ТипМодуля = ТипыМодуля.ОбщийМодуль
И СтрокаМодуль.Родитель <> Неопределено Тогда
Если СтрокаМодуль.Родитель.Описание = Неопределено Тогда
Если СтрокаМодуль.Родитель.Описание = Неопределено Тогда
ПрочитатьОписание(СтрокаМодуль.Родитель);
КонецЕсли;
СтрокаМодуль.ОписаниеМодуля.Вставить("Глобальный", СтрокаМодуль.Родитель.Описание.Глобальный);
ПрочитатьОписание(СтрокаМодуль.Родитель);
КонецЕсли;
СтрокаМодуль.ОписаниеМодуля.Вставить("Глобальный", СтрокаМодуль.Родитель.Описание.Глобальный);
КонецЕсли;
КонецПроцедуры
@ -134,7 +134,7 @@
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
Функция ПрочитатьОписаниеКонфигурации(ПараметрыЧтения)
Процедура ПрочитатьОписаниеКонфигурации(ПараметрыЧтения)
// Выполняет чтение объектов первого уровня, вложенные объекты не читаются
@ -149,10 +149,14 @@
КонецЕсли;
ДанныеКонфигурации = ПрочитатьФайлОписанияОбъекта(ПараметрыЧтения, ФайлКонфигурации, ПараметрыЧтения.ТипКорневогоЭлемента);
ДанныеКонфигурации = ПрочитатьФайлОписанияОбъекта(
ПараметрыЧтения, ФайлКонфигурации, ПараметрыЧтения.ТипКорневогоЭлемента
);
// добавим руками объект "Configuration" для модулей приложения
НовСтрока = РедакторКонфигурации.ЗарегистрироватьОбъектКонфигурации(ОписаниеКонфигурации, ПараметрыЧтения.ТипКорневогоЭлемента, ДанныеКонфигурации);
НовСтрока = РедакторКонфигурации.ЗарегистрироватьОбъектКонфигурации(
ОписаниеКонфигурации, ПараметрыЧтения.ТипКорневогоЭлемента, ДанныеКонфигурации
);
НовСтрока.ПутьКФайлу = ФайлКонфигурации;
Для Каждого Подчиненный Из ДанныеКонфигурации.Подчиненные Цикл
@ -167,7 +171,7 @@
ОписаниеКонфигурации.СвойстваКонфигурации = ДанныеКонфигурации;
КонецФункции
КонецПроцедуры
Функция ПрочитатьФайлОписанияОбъекта(ПараметрыЧтения, ПутьКФайлу, ТипОбъекта)
@ -191,16 +195,15 @@
ФормаОбъекта = Неопределено;
КомандаОбъекта = Неопределено;
Если ТипЭтогоМодуля = ТипыМодуля.МодульОбъекта
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульМенеджера
ИЛИ ТипЭтогоМодуля = ТипыМодуля.ОбщийМодуль
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульУправляемогоПриложения
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульСеанса
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульВнешнегоСоединения
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульОбычногоПриложения Тогда
ПропускаемыйТип = ТипЭтогоМодуля = ТипыМодуля.МодульОбъекта
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульМенеджера
ИЛИ ТипЭтогоМодуля = ТипыМодуля.ОбщийМодуль
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульУправляемогоПриложения
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульСеанса
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульВнешнегоСоединения
ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульОбычногоПриложения;
ИначеЕсли ТипыМодуля.ЭтоМодульФормы(ТипЭтогоМодуля) Тогда
Если ТипыМодуля.ЭтоМодульФормы(ТипЭтогоМодуля) Тогда
ФормаОбъекта = ОписаниеКонфигурации.ФормыКонфигурации.Добавить();
ФормаОбъекта.Родитель = ОбъектКонфигурации;
@ -214,9 +217,9 @@
КомандаОбъекта.Наименование = ПолучитьИмяКомандыИзИмениФайлаМодуля(ИмяФайлаМодуля);
Иначе
ВызватьИсключение "Тип модуля: " + ТипЭтогоМодуля + " не имеет алгоритма разбора";
Если НЕ ПропускаемыйТип Тогда
ВызватьИсключение "Тип модуля: " + ТипЭтогоМодуля + " не имеет алгоритма разбора";
КонецЕсли;
КонецЕсли;
НовыйМодульКонфигурации = ОписаниеКонфигурации.Модули.Добавить();
@ -309,20 +312,35 @@
КонецФункции
Процедура ПрочитатьПодсистему(ПараметрыЧтения, ОписаниеПодсистем, ОбъектКонфигурации, Знач Визуальная, Знач Родитель, РодительскаяПодсистема)
Процедура ПрочитатьПодсистему(ПараметрыЧтения, ОписаниеПодсистем, ОбъектКонфигурации, Знач Визуальная,
Знач Родитель, РодительскаяПодсистема)
ТипПодсистема = ТипыОбъектовКонфигурации.ИмяТипаПодсистема();
ИмяФайлаОписание = ПараметрыЧтения.СтруктураКаталогов.ИмяФайлаОписанияОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
ИмяФайлаОписание = ПараметрыЧтения.СтруктураКаталогов.ИмяФайлаОписанияОбъекта(
ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип
);
СвойстваОписания = ПрочитатьФайлОписанияОбъекта(ПараметрыЧтения, ИмяФайлаОписание, ТипПодсистема);
ОбъектКонфигурации.Описание = СвойстваОписания;
ОбъектКонфигурации.ПутьКФайлу = ИмяФайлаОписание;
ОбъектКонфигурации.ПутьККаталогу = ПараметрыЧтения.СтруктураКаталогов.КаталогФайловОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
ОбъектКонфигурации.ПутьККаталогу = ПараметрыЧтения.СтруктураКаталогов.КаталогФайловОбъекта(
ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
Визуальная = Визуальная И СвойстваОписания.ВключатьВКомандныйИнтерфейс;
ПредставлениеПодсистемы = ?(РодительскаяПодсистема = Неопределено, СвойстваОписания.Синоним, РодительскаяПодсистема.Представление + "/" + СвойстваОписания.Синоним);
Если СвойстваОписания.Синоним.Свойство("ru") Тогда
СинонимПодсистемы = СвойстваОписания.Синоним.ru;
ИначеЕсли СвойстваОписания.Синоним.Свойство("en") Тогда
СинонимПодсистемы = СвойстваОписания.Синоним.en;
Иначе
СинонимПодсистемы = СвойстваОписания.Имя;
КонецЕсли;
ПредставлениеПодсистемы = ?(РодительскаяПодсистема = Неопределено,
СинонимПодсистемы,
РодительскаяПодсистема.Представление + "/" + СинонимПодсистемы
);
Если СвойстваОписания.Состав.Количество() Тогда
Состав = СвойстваОписания.Состав;
@ -337,7 +355,7 @@
ЭтаПодсистема.Имя = ОбъектКонфигурации.Наименование;
ЭтаПодсистема.ИмяКратко = СвойстваОписания.Наименование;
ЭтаПодсистема.Представление = ПредставлениеПодсистемы;
ЭтаПодсистема.ПредставлениеКратко = СвойстваОписания.Синоним;
ЭтаПодсистема.ПредставлениеКратко = СинонимПодсистемы;
ЭтаПодсистема.ОбъектМетаданных = ОбъектМетаданных;
ЭтаПодсистема.Визуальная = Визуальная;
ЭтаПодсистема.Родитель = РодительскаяПодсистема;
@ -368,7 +386,8 @@
ВложеннаяПодсистема.ПолноеНаименование = СтрШаблон("%1.%2", ТипПодсистема, ИмяПодсистемы);
ВложеннаяПодсистема.Родитель = ОбъектКонфигурации;
ПрочитатьПодсистему(ПараметрыЧтения, ОписаниеПодсистем, ВложеннаяПодсистема, Визуальная, ОбъектКонфигурации, ЭтаПодсистема)
ПрочитатьПодсистему(ПараметрыЧтения, ОписаниеПодсистем, ВложеннаяПодсистема, Визуальная,
ОбъектКонфигурации, ЭтаПодсистема);
КонецЦикла;

View File

@ -18,6 +18,36 @@
///////////////////////////////////////////////////////////////////////////////////////////////
Функция ЭтоБлокНачалоОбласти(СтрокаМодуля) Экспорт
Возврат СтрНачинаетсяС(СтрокаМодуля, "#ОБЛАСТЬ")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "// #ОБЛАСТЬ");
КонецФункции
Функция ЭтоБлокКонецОбласти(СтрокаМодуля) Экспорт
Возврат СтрНачинаетсяС(СтрокаМодуля, "#КОНЕЦОБЛАСТИ")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "// #КОНЕЦОБЛАСТИ");
КонецФункции
Функция ЭтоБлокНачалоФункции(СтрокаМодуля) Экспорт
Возврат СтрНачинаетсяС(СтрокаМодуля, "ФУНКЦИЯ ")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "FUNCTION ");
КонецФункции
Функция ЭтоБлокНачалоПроцедуры(СтрокаМодуля) Экспорт
Возврат СтрНачинаетсяС(СтрокаМодуля, "ПРОЦЕДУРА ")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "PROCEDURE ");
КонецФункции
Функция ЭтоБлокКонецФункции(СтрокаМодуля) Экспорт
Возврат СтрНачинаетсяС(СтрокаМодуля, "КОНЕЦФУНКЦИИ")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "ENDFUNCTION");
КонецФункции
Функция ЭтоБлокКонецПроцедуры(СтрокаМодуля) Экспорт
Возврат СтрНачинаетсяС(СтрокаМодуля, "КОНЕЦПРОЦЕДУРЫ")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "ENDPROCEDURE");
КонецФункции
ОписаниеПеременной = "ОписаниеПеременной";
ЗаголовокПроцедуры = "ЗаголовокПроцедуры";