From c96528dba604adf932a3b8215d3e596663d0089d Mon Sep 17 00:00:00 2001 From: "aleksey.koryakin" Date: Tue, 11 Jun 2019 10:57:14 +0300 Subject: [PATCH] =?UTF-8?q?#ONECICD-148=20=D0=9E=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F,=20=D1=82=D0=B5=D1=81=D1=82=D1=8B,=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ГенераторОписаний/Классы/ГенераторОписаний.os | 96 ----------- .../ГенераторОписаний/Модули/ГенераторОписанийEDT.os | 12 +- .../Модули/ГенераторОписанийКонфигуратор.os | 14 +- .../ГенераторОписаний/Модули/ГенераторОписанийОбщий.os | 4 - .../ГенераторОписаний/Модули/ЗаписьКонфигурации.os | 94 +++++++---- .../ГенераторОписаний/Модули/РедакторКонфигурации.os | 59 +++++-- .../ГенераторОписаний/Модули/РедакторРасширения.os | 17 ++ .../Общее/Модули/СтруктурыОписаний.os | 6 +- .../ЧтениеОписаний/Модули/ЧтениеКонфигурации.os | 157 ++++++++++++------ src/Классы/ДанныеКонфигурации.os | 23 ++- src/Классы/Конфигурация.os | 99 ++++++++++- src/Классы/Расширение.os | 105 +++++++++++- src/Модули/РазборКонфигураций.os | 41 +++-- tests/ТестПроверкиРазбораКонфигурации.os | 26 +-- ...стПроверкиСтруктурыКаталоговКонфигурации.os | 2 +- tests/ТестРедактированияКонфигурации.os | 17 +- tests/ТестСозданияРасширения.os | 2 - 17 files changed, 516 insertions(+), 258 deletions(-) delete mode 100644 src/Внутренние/ГенераторОписаний/Классы/ГенераторОписаний.os diff --git a/src/Внутренние/ГенераторОписаний/Классы/ГенераторОписаний.os b/src/Внутренние/ГенераторОписаний/Классы/ГенераторОписаний.os deleted file mode 100644 index 502d455..0000000 --- a/src/Внутренние/ГенераторОписаний/Классы/ГенераторОписаний.os +++ /dev/null @@ -1,96 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -// Описание модуля -// -/////////////////////////////////////////////////////////////////////////////// - -Перем Генератор Экспорт; -Перем ПараметрыГенерации Экспорт; - -/////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС -/////////////////////////////////////////////////////////////////////////////// - -// Создает и инициализирует поток записи описаний корневого объекта -// -// Параметры: -// Описание - Структура - Описание объекта, наименование синоним и прочее -// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...) -// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные -// -Функция СоздатьОписаниеКорневогоОбъекта(Описание, ТипОбъекта, ИмяФайла) Экспорт - - Запись = Генератор.СоздатьОписаниеКорневогоОбъекта(Описание, ТипОбъекта, ИмяФайла, ПараметрыГенерации); - ПараметрыГенерации.Вставить("ЗаписьConfiguration", Запись); - - Возврат Запись; - -КонецФункции - -// Сохраняет и закрывает поток записи описаний корневого объекта -// -Процедура ЗафиксироватьОписаниеКорневогоОбъекта() Экспорт - - ОбработкаXML.ЗакрытьЗапись(ПараметрыГенерации.ЗаписьConfiguration); - ПараметрыГенерации.ЗаписьConfiguration = Неопределено; - -КонецПроцедуры - -// Регистрирует объект в списке объектов конфигурации -// -// Параметры: -// ОбъектКонфигурации - Произвольный - Объект содержащий реквизиты - Тип и Наименование -// -Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации) Экспорт - - Генератор.ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ПараметрыГенерации); - -КонецПроцедуры - -// Создает поток и инициализирует поток записи описания объекта -// -// Параметры: -// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...) -// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные -// -// Возвращаемое значение: -// ЗаписьXML - Поток записи данных -// -Функция СоздатьЗапись(ТипОбъекта, ИмяФайла) Экспорт - - Возврат Генератор.СоздатьЗапись(ТипОбъекта, ПараметрыГенерации, ИмяФайла); - -КонецФункции - -// Записывает служебную информацию об уидах платформенных типов -// -// Параметры: -// Запись - ЗаписьXML - Поток записи -// ИмяОбъекта - Строка - Имя объекта конфигурации -// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md -// -Процедура ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта) Экспорт - - Генератор.ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта); - -КонецПроцедуры - -Процедура ПриСозданииОбъекта(ФорматВыгрузки, ГенерацияРасширения) Экспорт - - Если ФорматВыгрузки = ФорматыВыгрузки.EDT Тогда - - Генератор = ГенераторОписанийEDT; - - Иначе - - Генератор = ГенераторОписанийКонфигуратор; - - КонецЕсли; - - ПараметрыГенерации = Генератор.СоздатьПараметрыГенерации("8.3.10", ГенерацияРасширения); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -/////////////////////////////////////////////////////////////////////////////// diff --git a/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийEDT.os b/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийEDT.os index 062db34..0b62aac 100644 --- a/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийEDT.os +++ b/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийEDT.os @@ -48,13 +48,13 @@ // Функция СоздатьОписаниеКорневогоОбъекта(ОписаниеРасширения, ТипОбъекта, ИмяФайла, ПараметрыГенерации) Экспорт - ТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта); + НормТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта); ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации, ИмяФайла); - ГенераторОписанийОбщий.ЗаписатьДанные(ЗаписьConfiguration, ОписаниеРасширения, ТипОбъекта, ЭтотОбъект); + ГенераторОписанийОбщий.ЗаписатьДанные(ЗаписьConfiguration, ОписаниеРасширения, НормТипОбъекта, ЭтотОбъект); - Если ТипыОбъектовКонфигурации.ИмяТипаРасширения() = ТипОбъекта Тогда + Если ТипыОбъектовКонфигурации.ИмяТипаРасширения() = НормТипОбъекта Тогда ЗаписьConfiguration.ЗаписатьНачалоЭлемента("extension"); ЗаписьConfiguration.ЗаписатьАтрибут("xsi:type", "mdclassExtension:ConfigurationExtension"); @@ -94,15 +94,15 @@ // // Параметры: // ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации -// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации +// ЗаписьConfiguration - ЗаписьXML - Поток записи описания // -Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ПараметрыГенерации) Экспорт +Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ЗаписьConfiguration) Экспорт ИмяТипа = ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(ОбъектКонфигурации.Тип).НаименованиеКоллекцииEng; ИмяТипа = НРег(Лев(ИмяТипа, 1)) + Сред(ИмяТипа, 2); ИмяОбъекта = СтрШаблон("%1.%2", ОбъектКонфигурации.Тип, ОбъектКонфигурации.Наименование); - ОбработкаXML.ЗаписатьЗначениеXML(ПараметрыГенерации.ЗаписьConfiguration, ИмяТипа, ИмяОбъекта); + ОбработкаXML.ЗаписатьЗначениеXML(ЗаписьConfiguration, ИмяТипа, ИмяОбъекта); КонецПроцедуры diff --git a/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийКонфигуратор.os b/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийКонфигуратор.os index b2a86a5..4530052 100644 --- a/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийКонфигуратор.os +++ b/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийКонфигуратор.os @@ -15,7 +15,7 @@ // ГенерацияРасширения - Булево - Флаг создания расширения // // Возвращаемое значение: -// Структура - Служебные параметры генератора +// ФиксированнаяСтруктура - Служебные параметры генератора // Функция СоздатьПараметрыГенерации(ВерсияПлатформы, ГенерацияРасширения) Экспорт @@ -34,7 +34,7 @@ ПараметрыГенерации.Вставить("ВерсияВыгрузки", ВерсияВыгрузки); ПараметрыГенерации.Вставить("ГенерацияРасширения", ГенерацияРасширения = Истина); - Возврат ПараметрыГенерации; + Возврат Новый ФиксированнаяСтруктура(ПараметрыГенерации); КонецФункции @@ -42,7 +42,7 @@ // // Параметры: // ОписаниеРасширения - Структура - Описание расширения, наименование синоним и прочее -// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...) +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md // ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные // ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации // @@ -92,12 +92,12 @@ // Проверок на существование объекта нет // // Параметры: -// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации -// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// ЗаписьConfiguration - ЗаписьXML - Поток записи описания // -Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ПараметрыГенерации) Экспорт +Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ЗаписьConfiguration) Экспорт - ОбработкаXML.ЗаписатьЗначениеXML(ПараметрыГенерации.ЗаписьConfiguration, ОбъектКонфигурации.Тип, ОбъектКонфигурации.Наименование); + ОбработкаXML.ЗаписатьЗначениеXML(ЗаписьConfiguration, ОбъектКонфигурации.Тип, ОбъектКонфигурации.Наименование); КонецПроцедуры diff --git a/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийОбщий.os b/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийОбщий.os index fd5702a..40abf19 100644 --- a/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийОбщий.os +++ b/src/Внутренние/ГенераторОписаний/Модули/ГенераторОписанийОбщий.os @@ -6,10 +6,6 @@ Перем Рефлектор; -/////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС -/////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС /////////////////////////////////////////////////////////////////////////////// diff --git a/src/Внутренние/ГенераторОписаний/Модули/ЗаписьКонфигурации.os b/src/Внутренние/ГенераторОписаний/Модули/ЗаписьКонфигурации.os index 84dd582..578e7c9 100644 --- a/src/Внутренние/ГенераторОписаний/Модули/ЗаписьКонфигурации.os +++ b/src/Внутренние/ГенераторОписаний/Модули/ЗаписьКонфигурации.os @@ -1,46 +1,78 @@ +// Создает набор параметров необходимый для записи описаний объектов +// +// Параметры: +// Конфигурация - Конфигурация, Расширение - Объект для, которого необходима запись +// ТипКорневогоЭлемента - Строка - Имя типа корневого элемента объекта +// +// Возвращаемое значение: +// Структура- Набор параметров записи +// Функция СоздатьПараметрыЗаписи(Конфигурация, ТипКорневогоЭлемента) Экспорт - + + ГенерацияРасширения = ТипКорневогоЭлемента = ТипыОбъектовКонфигурации.ИмяТипаРасширения(); + ПараметрыЗаписи = Новый Структура(); ПараметрыЗаписи.Вставить("ОписаниеКонфигурации", Конфигурация.ОписаниеКонфигурации()); ПараметрыЗаписи.Вставить("СтруктураКаталогов", Конфигурация.СтруктураКаталогов()); ПараметрыЗаписи.Вставить("ТипКорневогоЭлемента", ТипКорневогоЭлемента); ПараметрыЗаписи.Вставить("ФорматВыгрузки", ПараметрыЗаписи.СтруктураКаталогов.ФорматВыгрузки()); - ПараметрыЗаписи.Вставить("Изменения", Новый Структура("ИзмененКорневойОбъект", Ложь)); + ПараметрыЗаписи.Вставить("Изменения", Новый Структура("ИзмененКорневойОбъект", Истина)); + + Если ПараметрыЗаписи.ФорматВыгрузки = ФорматыВыгрузки.EDT Тогда + + ГенераторОписаний = ГенераторОписанийEDT; + + Иначе + + ГенераторОписаний = ГенераторОписанийКонфигуратор; + + КонецЕсли; + + ПараметрыГенерации = ГенераторОписаний.СоздатьПараметрыГенерации("8.3.10", ГенерацияРасширения); - ГенераторОписаний = Новый ГенераторОписаний(ПараметрыЗаписи.ФорматВыгрузки, ТипКорневогоЭлемента = ТипыОбъектовКонфигурации.ИмяТипаРасширения()); - ПараметрыЗаписи.Вставить("ГенераторОписаний", ГенераторОписаний); + ПараметрыЗаписи.Вставить("ПараметрыГенерации", ПараметрыГенерации); Возврат Новый ФиксированнаяСтруктура(ПараметрыЗаписи); КонецФункции -Функция СохранитьОписание(ОбъектКонфигурации) Экспорт +// Сохраняет описание объекта конфигурации на диск +// +// Параметры: +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Процедура СохранитьОписание(ОбъектКонфигурации) Экспорт ПараметрыЗаписи = ОбъектКонфигурации.Конфигурация.ПараметрыЗаписи(); ДанныеОбъекта = ОбъектКонфигурации.Описание; ИмяФайла = ПараметрыЗаписи.СтруктураКаталогов.ИмяФайлаОписанияОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип); - Запись = ПараметрыЗаписи.ГенераторОписаний.СоздатьЗапись(ОбъектКонфигурации.Тип, ИмяФайла); + Запись = ПараметрыЗаписи.ГенераторОписаний.СоздатьЗапись(ОбъектКонфигурации.Тип, ПараметрыЗаписи.ПараметрыГенерации, ИмяФайла); ОписаниеСвойств = СтруктурыОписаний.ОписаниеСвойствОбъекта(ОбъектКонфигурации.Тип); - ПараметрыЗаписи.ГенераторОписаний.Генератор.ЗаписатьПорождаемыеТипы(Запись, ДанныеОбъекта.Наименование, ОбъектКонфигурации.Тип); - ПараметрыЗаписи.ГенераторОписаний.Генератор.ЗаписатьСвойства(Запись, ОбъектКонфигурации.Тип, ДанныеОбъекта); + ПараметрыЗаписи.ГенераторОписаний.ЗаписатьПорождаемыеТипы(Запись, ДанныеОбъекта.Наименование, ОбъектКонфигурации.Тип); + ПараметрыЗаписи.ГенераторОписаний.ЗаписатьСвойства(Запись, ОбъектКонфигурации.Тип, ДанныеОбъекта); Если ОписаниеСвойств.ЕстьПодчиненные Тогда - ПараметрыЗаписи.ГенераторОписаний.Генератор.Подчиненные(Запись, ?(ДанныеОбъекта.Свойство("Подчиненные"), ДанныеОбъекта.Подчиненные, Неопределено)); + ПараметрыЗаписи.ГенераторОписаний.Подчиненные(Запись, ?(ДанныеОбъекта.Свойство("Подчиненные"), ДанныеОбъекта.Подчиненные, Неопределено)); КонецЕсли; ОбработкаXML.ЗакрытьЗапись(Запись); -КонецФункции +КонецПроцедуры -Функция Зафиксировать(ПараметрыЗаписи) Экспорт +// Записывает данные на диск +// +// Параметры: +// ПараметрыЗаписи - Структура - Параметры записи, уникальные для каждой конфигурации. См. СоздатьПараметрыЗаписи +// +Процедура Зафиксировать(ПараметрыЗаписи) Экспорт ПараметрыЗаписи.ОписаниеКонфигурации.ОбъектыКонфигурации.Сортировать("Тип, Наименование"); @@ -48,40 +80,44 @@ ИмяФайлаОписания = ПараметрыЗаписи.СтруктураКаталогов.ИмяФайлаОписанияКонфигурации(); - ПараметрыЗаписи.ГенераторОписаний.СоздатьОписаниеКорневогоОбъекта( + ЗаписьConfiguration = ПараметрыЗаписи.ГенераторОписаний.СоздатьОписаниеКорневогоОбъекта( ПараметрыЗаписи.ОписаниеКонфигурации.СвойстваКонфигурации, ПараметрыЗаписи.ТипКорневогоЭлемента, - ИмяФайлаОписания); + ИмяФайлаОписания, + ПараметрыЗаписи.ПараметрыГенерации); Для Каждого Стр Из ПараметрыЗаписи.ОписаниеКонфигурации.ОбъектыКонфигурации Цикл Если Стр.Тип <> ПараметрыЗаписи.ТипКорневогоЭлемента И Стр.Родитель = Неопределено Тогда - ПараметрыЗаписи.ГенераторОписаний.ЗарегистрироватьОбъектВКонфигурации(Стр); + ПараметрыЗаписи.ГенераторОписаний.ЗарегистрироватьОбъектВКонфигурации(Стр, ЗаписьConfiguration); КонецЕсли; КонецЦикла; - ПараметрыЗаписи.ГенераторОписаний.ЗафиксироватьОписаниеКорневогоОбъекта(); + ОбработкаXML.ЗакрытьЗапись(ЗаписьConfiguration); КонецЕсли; -КонецФункции + ПараметрыЗаписи.Изменения.ИзмененКорневойОбъект = Ложь; -// Создает структуру данных объекта +КонецПроцедуры + +// Служебный метод, его необходимо вызывать при добавлении объекта в конфигурацию // // Параметры: -// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md -// Наименование - Строка - Имя объекта +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации // -// Возвращаемое значение: -// Структура - Пустышка описания объекта -// -Функция ПолучитьОписаниеОбъекта(ТипОбъекта, Наименование = Неопределено) Экспорт - - ОписаниеОбъекта = СтруктурыОписаний.СоздатьОбъект(ТипОбъекта, Наименование); - - Возврат ОписаниеОбъекта; - -КонецФункции \ No newline at end of file +Процедура ПриДобавленииОбъекта(ОбъектКонфигурации) Экспорт + + ЗаписьКонфигурации.СохранитьОписание(ОбъектКонфигурации); + ОбъектКонфигурации.Конфигурация.ПараметрыЗаписи().Изменения.ИзмененКорневойОбъект = Истина; + +КонецПроцедуры + +Процедура УстановитьПризнакИзменений(ПараметрыЗаписи, НовыйПризнакИзменений) Экспорт + + ПараметрыЗаписи.Изменения.ИзмененКорневойОбъект = НовыйПризнакИзменений; + +КонецПроцедуры \ No newline at end of file diff --git a/src/Внутренние/ГенераторОписаний/Модули/РедакторКонфигурации.os b/src/Внутренние/ГенераторОписаний/Модули/РедакторКонфигурации.os index 199e80a..937f0b0 100644 --- a/src/Внутренние/ГенераторОписаний/Модули/РедакторКонфигурации.os +++ b/src/Внутренние/ГенераторОписаний/Модули/РедакторКонфигурации.os @@ -1,47 +1,80 @@ -Функция ДобавитьОбъект(ОписаниеКонфигурации, Тип, ОписаниеИлиИмя) Экспорт +// Добавляет объект в конфигурацию +// +// Параметры: +// ОписаниеКонфигурации - ДанныеКонфигурации - Объект содержащий данные конфигурации (объекты, модули и т.д.) +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// ОписаниеИлиИмя - Структура, Строка - Имя или данные объекта +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Функция ДобавитьОбъект(ОписаниеКонфигурации, ТипОбъекта, ОписаниеИлиИмя) Экспорт Если ТипЗнч(ОписаниеИлиИмя) = Тип("Строка") Тогда - Возврат ДобавитьОбъектПоИмени(ОписаниеКонфигурации, Тип, ОписаниеИлиИмя); + Возврат ДобавитьОбъектПоИмени(ОписаниеКонфигурации, ТипОбъекта, ОписаниеИлиИмя); Иначе - Возврат ДобавитьОбъектПоОписанию(ОписаниеКонфигурации, Тип, ОписаниеИлиИмя); + Возврат ДобавитьОбъектПоОписанию(ОписаниеКонфигурации, ТипОбъекта, ОписаниеИлиИмя); КонецЕсли; КонецФункции -Функция ДобавитьОбъектПоИмени(ОписаниеКонфигурации, Тип, Имя) Экспорт +// Перегрузка метода добавить, выполняет добавление по типу и имени +// +// Параметры: +// ОписаниеКонфигурации - ДанныеКонфигурации - Объект содержащий данные конфигурации (объекты, модули и т.д.) +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// Имя - Строка - Имя добавляемого объекта +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Функция ДобавитьОбъектПоИмени(ОписаниеКонфигурации, ТипОбъекта, Имя) Экспорт - Тип = ТипыОбъектовКонфигурации.НормализоватьИмя(Тип); + ТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта); - ОбъектКонфигурации = ОписаниеКонфигурации.НайтиОбъект(Имя, Тип); + ОбъектКонфигурации = ОписаниеКонфигурации.НайтиОбъект(Имя, ТипОбъекта); Если ОбъектКонфигурации <> Неопределено Тогда - ВызватьИсключение СтрШаблон("Объект '%1.%2'уже зарегистрирован в конфигурации", Тип, Имя); + ВызватьИсключение СтрШаблон("Объект '%1.%2'уже зарегистрирован в конфигурации", ТипОбъекта, Имя); КонецЕсли; ОбъектКонфигурации = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить(); ОбъектКонфигурации.Наименование = Имя; ОбъектКонфигурации.Конфигурация = ОписаниеКонфигурации.Конфигурация; - ОбъектКонфигурации.Тип = Тип; + ОбъектКонфигурации.Тип = ТипОбъекта; - ОбъектКонфигурации.ПолноеНаименование = Тип + "." + ОбъектКонфигурации.Наименование; - - ОписаниеКонфигурации.Конфигурация.ПараметрыЗаписи().Изменения.ИзмененКорневойОбъект = Истина; + ОбъектКонфигурации.ПолноеНаименование = ТипОбъекта + "." + ОбъектКонфигурации.Наименование; Возврат ОбъектКонфигурации; КонецФункции -Функция ДобавитьОбъектПоОписанию(ОписаниеКонфигурации, Тип, ОписаниеОбъекта) Экспорт +// Перегрузка метода добавить, выполняет добавление по типу и данным объекта +// +// Параметры: +// ОписаниеКонфигурации - ДанныеКонфигурации - Объект содержащий данные конфигурации (объекты, модули и т.д.) +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// ОписаниеОбъекта - Структура - Данные описания объекта +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Функция ДобавитьОбъектПоОписанию(ОписаниеКонфигурации, ТипОбъекта, ОписаниеОбъекта) Экспорт - ОбъектКонфигурации = ДобавитьОбъектПоИмени(ОписаниеКонфигурации, Тип, ОписаниеОбъекта.Наименование); + ОбъектКонфигурации = ДобавитьОбъектПоИмени(ОписаниеКонфигурации, ТипОбъекта, ОписаниеОбъекта.Наименование); ОбъектКонфигурации.Описание = ОписаниеОбъекта; Возврат ОбъектКонфигурации; КонецФункции +// Выполняет настройку объекта для создания новой конфигурации +// +// Параметры: +// Конфигурация - Конфигурация - Описание конфигурации +// Процедура ИнициализироватьСозданиеНового(Конфигурация) Экспорт СвойстваКонфигурации = СтруктурыОписаний.СоздатьОбъект(ТипыОбъектовКонфигурации.ИмяТипаКонфигурации(), "Конфигурация"); diff --git a/src/Внутренние/ГенераторОписаний/Модули/РедакторРасширения.os b/src/Внутренние/ГенераторОписаний/Модули/РедакторРасширения.os index a1add39..48efd9d 100644 --- a/src/Внутренние/ГенераторОписаний/Модули/РедакторРасширения.os +++ b/src/Внутренние/ГенераторОписаний/Модули/РедакторРасширения.os @@ -8,6 +8,15 @@ // ПРОГРАММНЫЙ ИНТЕРФЕЙС /////////////////////////////////////////////////////////////////////////////// +// Добавляет объект конфигурации в расширение, для переопределения, либо использования +// +// Параметры: +// ОписаниеКонфигурации - ДанныеКонфигурации - Объект содержащий данные конфигурации (объекты, модули и т.д.) +// ОбъектРодительскойКонфигурации - СтрокаТаблицыЗначений - Описание объекта родительской конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта расширения. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// Функция ДобавитьОбъектВРасширение(ОписаниеКонфигурации, ОбъектРодительскойКонфигурации) Экспорт Тип = ОбъектРодительскойКонфигурации.Тип; @@ -35,9 +44,17 @@ КонецФункции +// Выполняет настройку объекта для создания нового расширения +// +// Параметры: +// Расширение - Расширение - Описание расширения +// Процедура ИнициализироватьСозданиеНового(Расширение) Экспорт СвойстваРасширения = СтруктурыОписаний.СоздатьОбъект(ТипыОбъектовКонфигурации.ИмяТипаРасширения(), "Расширение"); + СвойстваРасширения.Принадлежность = "Adopted"; + СвойстваРасширения.Назначение = "Customization"; + Расширение.ОписаниеКонфигурации().СвойстваКонфигурации = СвойстваРасширения; КонецПроцедуры diff --git a/src/Внутренние/Общее/Модули/СтруктурыОписаний.os b/src/Внутренние/Общее/Модули/СтруктурыОписаний.os index 12f2d2d..c4bc3b0 100644 --- a/src/Внутренние/Общее/Модули/СтруктурыОписаний.os +++ b/src/Внутренние/Общее/Модули/СтруктурыОписаний.os @@ -59,11 +59,11 @@ Функция ТаблицаОписанияМодулей() Экспорт МодулиКонфигурации = Новый ТаблицаЗначений; - МодулиКонфигурации.Колонки.Добавить("ТипМодуля"); + МодулиКонфигурации.Колонки.Добавить("ТипМодуля", Новый ОписаниеТипов("Строка")); МодулиКонфигурации.Колонки.Добавить("Родитель"); - МодулиКонфигурации.Колонки.Добавить("ПутьКФайлу"); + МодулиКонфигурации.Колонки.Добавить("ПутьКФайлу", Новый ОписаниеТипов("Строка")); МодулиКонфигурации.Колонки.Добавить("НаборБлоков"); - МодулиКонфигурации.Колонки.Добавить("Содержимое"); + МодулиКонфигурации.Колонки.Добавить("Содержимое", Новый ОписаниеТипов("Строка")); МодулиКонфигурации.Колонки.Добавить("РодительФорма"); МодулиКонфигурации.Колонки.Добавить("РодительКоманда"); МодулиКонфигурации.Колонки.Добавить("ОписаниеМодуля"); diff --git a/src/Внутренние/ЧтениеОписаний/Модули/ЧтениеКонфигурации.os b/src/Внутренние/ЧтениеОписаний/Модули/ЧтениеКонфигурации.os index 72c9288..72afc89 100644 --- a/src/Внутренние/ЧтениеОписаний/Модули/ЧтениеКонфигурации.os +++ b/src/Внутренние/ЧтениеОписаний/Модули/ЧтениеКонфигурации.os @@ -1,5 +1,14 @@ #Использовать fs +// Создает набор параметров необходимый для чтения описаний объектов +// +// Параметры: +// Конфигурация - Конфигурация, Расширение - Объект для, которого необходимо чтение +// ТипКорневогоЭлемента - Строка - Имя типа корневого элемента объекта +// +// Возвращаемое значение: +// Структура- Набор параметров чтения +// Функция СоздатьПараметрыЧтения(Конфигурация, ТипКорневогоЭлемента) Экспорт ПараметрыЧтения = Новый Структура(); @@ -70,6 +79,58 @@ КонецПроцедуры +// Выполняет поиск всех модулей конфигурации +// +Процедура НайтиМодулиКонфигурации(ПараметрыЧтения) Экспорт + + ОписаниеКонфигурации = ПараметрыЧтения.ОписаниеКонфигурации; + ОбъектыКонфигурации = ОписаниеКонфигурации.ОбъектыКонфигурации; + СтруктураКаталогов = ПараметрыЧтения.СтруктураКаталогов; + + Для Каждого ОбъектКонфигурации Из ОбъектыКонфигурации Цикл + + ФайлыМодулей = СтруктураКаталогов.НайтиМодулиОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип, Истина); + + Для Каждого ИмяФайлаМодуля Из ФайлыМодулей Цикл + + ПолучитьОписаниеМодуляПоИмениФайла(ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации); + + КонецЦикла; + + КонецЦикла; + + ОписаниеКонфигурации.Модули.Сортировать("ПутьКФайлу"); + +КонецПроцедуры + +// Читает и выполняет анализ содержимого модуля +// Устанавливает реквизиты "НаборБлоков" и "Содержимое" +// Параметры: +// СтрокаМодуль - СтрокаТаблицыЗначений - Базовое описание модуля +// +Процедура ПрочитатьСодержимоеМодуля(СтрокаМодуль) Экспорт + + Файл = Новый ТекстовыйДокумент; + Файл.Прочитать(СтрокаМодуль.ПутьКФайлу, КодировкаТекста.UTF8NoBOM); + + СодержимоеМодуля = ЧтениеМодулей.ПрочитатьМодуль(Файл, СтрокаМодуль); + СтрокаМодуль.Содержимое = СодержимоеМодуля.Содержимое; + СтрокаМодуль.НаборБлоков = СодержимоеМодуля.БлокиМодуля; + + Если СтрокаМодуль.ТипМодуля = ТипыМодуля.ОбщийМодуль Тогда + + Если СтрокаМодуль.Родитель.Описание = Неопределено Тогда + + ПрочитатьОписание(СтрокаМодуль.Родитель); + + КонецЕсли; + + СтрокаМодуль.ОписаниеМодуля.Вставить("Глобальный", СтрокаМодуль.Родитель.Описание.Глобальный); + + КонецЕсли; + +КонецПроцедуры + ////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ /////////////////////////////////////////////////////////////////////////////// @@ -117,67 +178,55 @@ КонецФункции -Функция ПолучитьОписаниеМодуляПоИмениФайла(Знач ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации) +Процедура ПолучитьОписаниеМодуляПоИмениФайла(Знач ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации) - НовыйМодульКонфигурации = Неопределено; - - ПустаяСтрокаМодульКонфигурации = Новый Структура( - "ПутьКФайлу, ТипМодуля, ОписаниеМодуля, Родитель, РодительФорма, РодительКоманда, НаборБлоков, Содержимое", - "", "", Новый Структура, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено); - ТипЭтогоМодуля = ТипыМодуля.ТипМодуляПоИмениФайла(ИмяФайлаМодуля); - - Если Не ПустаяСтрока(ТипЭтогоМодуля) Тогда + + Если ПустаяСтрока(ТипЭтогоМодуля) Тогда - ФормаОбъекта = Неопределено; - КомандаОбъекта = Неопределено; - - Если ТипЭтогоМодуля = ТипыМодуля.МодульОбъекта - ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульМенеджера - ИЛИ ТипЭтогоМодуля = ТипыМодуля.ОбщийМодуль - ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульУправляемогоПриложения - ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульСеанса - ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульВнешнегоСоединения - ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульОбычногоПриложения Тогда + Возврат; - ИначеЕсли ТипыМодуля.ЭтоМодульФормы(ТипЭтогоМодуля) Тогда - - ФормаОбъекта = ОписаниеКонфигурации.ФормыКонфигурации.Добавить(); - ФормаОбъекта.Родитель = ОбъектКонфигурации; - ФормаОбъекта.ЭтоУправляемаяФорма = ТипЭтогоМодуля = ТипыМодуля.МодульУправляемойФормы; - ФормаОбъекта.Наименование = ПолучитьИмяФормыИзИмениФайлаМодуля(ИмяФайлаМодуля); - - ИначеЕсли ТипЭтогоМодуля = ТипыМодуля.МодульКоманды Тогда - - КомандаОбъекта = ОписаниеКонфигурации.КомандыКонфигурации.Добавить(); - КомандаОбъекта.Родитель = ОбъектКонфигурации; - КомандаОбъекта.Наименование = ПолучитьИмяКомандыИзИмениФайлаМодуля(ИмяФайлаМодуля); - - Иначе - - ВызватьИсключение "Тип модуля: " + ТипЭтогоМодуля + " не имеет алгоритма разбора"; - - КонецЕсли; - - НовыйМодульКонфигурации = ОписаниеКонфигурации.МодулиКонфигурации.Добавить(); - ЗаполнитьЗначенияСвойств(НовыйМодульКонфигурации, ПустаяСтрокаМодульКонфигурации); - НовыйМодульКонфигурации.ТипМодуля = ТипЭтогоМодуля; - НовыйМодульКонфигурации.ПутьКФайлу = ИмяФайлаМодуля; - НовыйМодульКонфигурации.Родитель = ОбъектКонфигурации; - НовыйМодульКонфигурации.РодительФорма = ФормаОбъекта; - НовыйМодульКонфигурации.РодительКоманда = КомандаОбъекта; - - КонецЕсли; - - Если НовыйМодульКонфигурации <> Неопределено Тогда - - ЗаполнитьЗначенияСвойств(ПустаяСтрокаМодульКонфигурации, НовыйМодульКонфигурации); - КонецЕсли; - Возврат ПустаяСтрокаМодульКонфигурации; + ФормаОбъекта = Неопределено; + КомандаОбъекта = Неопределено; + + Если ТипЭтогоМодуля = ТипыМодуля.МодульОбъекта + ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульМенеджера + ИЛИ ТипЭтогоМодуля = ТипыМодуля.ОбщийМодуль + ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульУправляемогоПриложения + ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульСеанса + ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульВнешнегоСоединения + ИЛИ ТипЭтогоМодуля = ТипыМодуля.МодульОбычногоПриложения Тогда -КонецФункции + ИначеЕсли ТипыМодуля.ЭтоМодульФормы(ТипЭтогоМодуля) Тогда + + ФормаОбъекта = ОписаниеКонфигурации.ФормыКонфигурации.Добавить(); + ФормаОбъекта.Родитель = ОбъектКонфигурации; + ФормаОбъекта.ЭтоУправляемаяФорма = ТипЭтогоМодуля = ТипыМодуля.МодульУправляемойФормы; + ФормаОбъекта.Наименование = ПолучитьИмяФормыИзИмениФайлаМодуля(ИмяФайлаМодуля); + + ИначеЕсли ТипЭтогоМодуля = ТипыМодуля.МодульКоманды Тогда + + КомандаОбъекта = ОписаниеКонфигурации.КомандыКонфигурации.Добавить(); + КомандаОбъекта.Родитель = ОбъектКонфигурации; + КомандаОбъекта.Наименование = ПолучитьИмяКомандыИзИмениФайлаМодуля(ИмяФайлаМодуля); + + Иначе + + ВызватьИсключение "Тип модуля: " + ТипЭтогоМодуля + " не имеет алгоритма разбора"; + + КонецЕсли; + + НовыйМодульКонфигурации = ОписаниеКонфигурации.Модули.Добавить(); + НовыйМодульКонфигурации.ТипМодуля = ТипЭтогоМодуля; + НовыйМодульКонфигурации.ПутьКФайлу = ИмяФайлаМодуля; + НовыйМодульКонфигурации.Родитель = ОбъектКонфигурации; + НовыйМодульКонфигурации.РодительФорма = ФормаОбъекта; + НовыйМодульКонфигурации.РодительКоманда = КомандаОбъекта; + НовыйМодульКонфигурации.ОписаниеМодуля = Новый Структура(); + +КонецПроцедуры /////////////////////////////////////////////////////////////////// diff --git a/src/Классы/ДанныеКонфигурации.os b/src/Классы/ДанныеКонфигурации.os index 6096108..9559ca6 100644 --- a/src/Классы/ДанныеКонфигурации.os +++ b/src/Классы/ДанныеКонфигурации.os @@ -6,7 +6,7 @@ Перем ОбъектыКонфигурации Экспорт; Перем СвойстваКонфигурации Экспорт; -Перем МодулиКонфигурации Экспорт; +Перем Модули Экспорт; Перем ФормыКонфигурации Экспорт; Перем КомандыКонфигурации Экспорт; @@ -18,6 +18,15 @@ // ПРОГРАММНЫЙ ИНТЕРФЕЙС /////////////////////////////////////////////////////////////////////////////// +// Выполняет поиск объекта конфигурации +// +// Параметры: +// ИмяОбъекта - Строка - Полное или короткое имя объекта (Полное - Справочник.Пользователи, короткой - Пользователи) +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// Функция НайтиОбъект(Знач ИмяОбъекта, Знач ТипОбъекта = Неопределено) Экспорт Если ТипОбъекта = Неопределено @@ -50,6 +59,14 @@ КонецФункции +// Возвращает коллекцию объектов переданного типа +// +// Параметры: +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// +// Возвращаемое значение: +// Массив - Коллекция объектов, структура объектов см. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// Функция НайтиОбъектыПоТипу(Знач ТипОбъекта) Экспорт ТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта); @@ -58,12 +75,12 @@ КонецФункции -Процедура ПриСозданииОбъекта(пКонфигурация) Экспорт +Процедура ПриСозданииОбъекта(пКонфигурация) Конфигурация = пКонфигурация; ОбъектыКонфигурации = СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации(); - МодулиКонфигурации = СтруктурыОписаний.ТаблицаОписанияМодулей(); + Модули = СтруктурыОписаний.ТаблицаОписанияМодулей(); // todo сделать чтение форм ФормыКонфигурации = Новый ТаблицаЗначений; diff --git a/src/Классы/Конфигурация.os b/src/Классы/Конфигурация.os index 1b87c3c..a87b657 100644 --- a/src/Классы/Конфигурация.os +++ b/src/Классы/Конфигурация.os @@ -13,26 +13,70 @@ // ПРОГРАММНЫЙ ИНТЕРФЕЙС /////////////////////////////////////////////////////////////////////////////// +// Читает описание структуры конфигурации +// * Описание конфигурации +// * Определяет местоположение описаний (файлов и каталогов) +// Процедура ПрочитатьСтруктуру() Экспорт ЧтениеКонфигурации.ПрочитатьСтруктуруКонфигурации(ПараметрыЧтения); + ЗаписьКонфигурации.УстановитьПризнакИзменений(ПараметрыЗаписи, Ложь); КонецПроцедуры -Функция ДобавитьОбъект(Тип, ОписаниеОбъекта) Экспорт +// Добавляет новый объект в конфигурацию +// +// Параметры: +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// ОписаниеОбъекта - Структура, Строка - Данные объекта или его имя +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Функция ДобавитьОбъект(ТипОбъекта, ОписаниеОбъекта) Экспорт - ОбъектКонфигурации = РедакторКонфигурации.ДобавитьОбъект(ОписаниеКонфигурации, Тип, ОписаниеОбъекта); + ОбъектКонфигурации = РедакторКонфигурации.ДобавитьОбъект(ОписаниеКонфигурации, ТипОбъекта, ОписаниеОбъекта); - ЗаписьКонфигурации.СохранитьОписание(ОбъектКонфигурации); + ЗаписьКонфигурации.ПриДобавленииОбъекта(ОбъектКонфигурации); Возврат ОбъектКонфигурации; КонецФункции +// Записывает данные на диск +// +Процедура Зафиксировать() Экспорт + + ЗаписьКонфигурации.Зафиксировать(ПараметрыЗаписи); + +КонецПроцедуры + +// Читает описание переданного объекта, его свойства и параметры +// +// Параметры: +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Процедура ПрочитатьОписаниеОбъекта(ОбъектКонфигурации) Экспорт + + ЧтениеКонфигурации.ПрочитатьОписание(ОбъектКонфигурации); + +КонецПроцедуры + +// Сохраняет описание переданного объекта, его свойства и параметры +// +// Параметры: +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Процедура ЗаписатьОписаниеОбъекта(ОбъектКонфигурации) Экспорт + + ЗаписьКонфигурации.СохранитьОписание(ОбъектКонфигурации); + +КонецПроцедуры + // Возвращает описание конфигурации // // Возвращаемое значение: -// Структура - Описание конфигурации +// ДанныеКонфигурации - Описание конфигурации // Функция ОписаниеКонфигурации() Экспорт @@ -40,18 +84,65 @@ КонецФункции +// Возвращает объект для работы с иерархией каталогов расширения +// +// Возвращаемое значение: +// СтруктураКаталоговКонфигурации - объект для работы с иерархией каталогов расширения +// Функция СтруктураКаталогов() Экспорт Возврат СтруктураКаталогов; КонецФункции +// Выполняет поиск модулей конфигурации +// Найденные модули будут доступны ОписаниеКонфигурации().Модули +// +Процедура НайтиМодули() Экспорт + + ЧтениеКонфигурации.НайтиМодулиКонфигурации(ПараметрыЧтения); + +КонецПроцедуры + +// Выполняет чтение вложенных подсистем и привязку их к объектам конфигурации +// +Процедура ЗаполнитьПодсистемыОбъектовКонфигурации() Экспорт + + ЧтениеКонфигурации.ЗаполнитьПодсистемыОбъектовКонфигурации(ПараметрыЧтения); + +КонецПроцедуры + +// Читает и выполняет анализ содержимого модуля +// Устанавливает реквизиты "НаборБлоков" и "Содержимое" +// Параметры: +// СтрокаМодуль - СтрокаТаблицыЗначений - Базовое описание модуля +// +Процедура ПрочитатьСодержимоеМодуля(СтрокаМодуль) Экспорт + + ЧтениеКонфигурации.ПрочитатьСодержимоеМодуля(СтрокаМодуль); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +/////////////////////////////////////////////////////////////////////////////// + +// Возвращает служебные параметры для чтения данных с диска +// +// Возвращаемое значение: +// Структура - Параметры чтения +// Функция ПараметрыЧтения() Экспорт Возврат ПараметрыЧтения; КонецФункции +// Возвращает служебные параметры для записи данных на диск +// +// Возвращаемое значение: +// Структура - Параметры записи +// Функция ПараметрыЗаписи() Экспорт Возврат ПараметрыЗаписи; diff --git a/src/Классы/Расширение.os b/src/Классы/Расширение.os index a846730..31706a0 100644 --- a/src/Классы/Расширение.os +++ b/src/Классы/Расширение.os @@ -13,43 +13,88 @@ // ПРОГРАММНЫЙ ИНТЕРФЕЙС /////////////////////////////////////////////////////////////////////////////// +// Читает описание структуры конфигурации +// * Описание конфигурации +// * Определяет местоположение описаний (файлов и каталогов) +// Процедура ПрочитатьСтруктуру() Экспорт ЧтениеКонфигурации.ПрочитатьСтруктуруКонфигурации(ПараметрыЧтения); - ПараметрыЗаписи.Изменения.ИзмененКорневойОбъект = Ложь; + ЗаписьКонфигурации.УстановитьПризнакИзменений(ПараметрыЗаписи, Ложь); КонецПроцедуры -Функция ДобавитьОбъект(Тип, ОписаниеОбъекта) Экспорт +// Добавляет новый объект в конфигурацию +// +// Параметры: +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md +// ОписаниеОбъекта - Структура, Строка - Данные объекта или его имя +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Функция ДобавитьОбъект(ТипОбъекта, ОписаниеОбъекта) Экспорт - ОбъектКонфигурации = РедакторКонфигурации.ДобавитьОбъект(ОписаниеКонфигурации, Тип, ОписаниеОбъекта); + ОбъектКонфигурации = РедакторКонфигурации.ДобавитьОбъект(ОписаниеКонфигурации, ТипОбъекта, ОписаниеОбъекта); - ЗаписьКонфигурации.СохранитьОписание(ОбъектКонфигурации); + ЗаписьКонфигурации.ПриДобавленииОбъекта(ОбъектКонфигурации); Возврат ОбъектКонфигурации; КонецФункции +// Добавляет объект базовой конфигурации в расширение +// +// Параметры: +// ОбъектРодительскойКонфигурации - СтрокаТаблицыЗначений - Описание объекта родительской конфигурации +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - Описание объекта расширения. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// Функция ДобавитьОбъектВРасширение(ОбъектРодительскойКонфигурации) Экспорт ОбъектКонфигурации = РедакторРасширения.ДобавитьОбъектВРасширение(ОписаниеКонфигурации, ОбъектРодительскойКонфигурации); - ЗаписьКонфигурации.СохранитьОписание(ОбъектКонфигурации); + ЗаписьКонфигурации.ПриДобавленииОбъекта(ОбъектКонфигурации); Возврат ОбъектКонфигурации; КонецФункции +// Записывает данные на диск +// Процедура Зафиксировать() Экспорт ЗаписьКонфигурации.Зафиксировать(ПараметрыЗаписи); КонецПроцедуры +// Читает описание переданного объекта, его свойства и параметры +// +// Параметры: +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Процедура ПрочитатьОписаниеОбъекта(ОбъектКонфигурации) Экспорт + + ЧтениеКонфигурации.ПрочитатьОписание(ОбъектКонфигурации); + +КонецПроцедуры + +// Сохраняет описание переданного объекта, его свойства и параметры +// +// Параметры: +// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации +// +Процедура ЗаписатьОписаниеОбъекта(ОбъектКонфигурации) Экспорт + + ЗаписьКонфигурации.СохранитьОписание(ОбъектКонфигурации); + +КонецПроцедуры + // Возвращает описание конфигурации // // Возвращаемое значение: -// Структура - Описание конфигурации +// ДанныеКонфигурации - Описание конфигурации // Функция ОписаниеКонфигурации() Экспорт @@ -57,24 +102,71 @@ КонецФункции +// Возвращает объект для работы с иерархией каталогов расширения +// +// Возвращаемое значение: +// СтруктураКаталоговКонфигурации - объект для работы с иерархией каталогов расширения +// Функция СтруктураКаталогов() Экспорт Возврат СтруктураКаталогов; КонецФункции +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +/////////////////////////////////////////////////////////////////////////////// + +// Возвращает служебные параметры для чтения данных с диска +// +// Возвращаемое значение: +// Структура - Параметры чтения +// Функция ПараметрыЧтения() Экспорт Возврат ПараметрыЧтения; КонецФункции +// Возвращает служебные параметры для записи данных на диск +// +// Возвращаемое значение: +// Структура - Параметры записи +// Функция ПараметрыЗаписи() Экспорт Возврат ПараметрыЗаписи; КонецФункции +// Выполняет поиск модулей конфигурации +// Найденные модули будут доступны ОписаниеКонфигурации().Модули +// +Процедура НайтиМодули() Экспорт + + ЧтениеКонфигурации.НайтиМодулиКонфигурации(ПараметрыЧтения); + +КонецПроцедуры + +// Выполняет чтение вложенных подсистем и привязку их к объектам конфигурации +// +Процедура ЗаполнитьПодсистемыОбъектовКонфигурации() Экспорт + + ЧтениеКонфигурации.ЗаполнитьПодсистемыОбъектовКонфигурации(ПараметрыЗаписи); + +КонецПроцедуры + +// Читает и выполняет анализ содержимого модуля +// Устанавливает реквизиты "НаборБлоков" и "Содержимое" +// Параметры: +// СтрокаМодуль - СтрокаТаблицыЗначений - Базовое описание модуля +// +Процедура ПрочитатьСодержимоеМодуля(СтрокаМодуль) Экспорт + + ЧтениеКонфигурации.ПрочитатьСодержимоеМодуля(СтрокаМодуль); + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ /////////////////////////////////////////////////////////////////////////////// @@ -86,6 +178,5 @@ ПараметрыЧтения = ЧтениеКонфигурации.СоздатьПараметрыЧтения(ЭтотОбъект, "Extension"); ПараметрыЗаписи = ЗаписьКонфигурации.СоздатьПараметрыЗаписи(ЭтотОбъект, "Extension"); - ПараметрыЗаписи.Изменения.ИзмененКорневойОбъект = Истина; КонецПроцедуры diff --git a/src/Модули/РазборКонфигураций.os b/src/Модули/РазборКонфигураций.os index 7ebaa05..ebeeab2 100644 --- a/src/Модули/РазборКонфигураций.os +++ b/src/Модули/РазборКонфигураций.os @@ -1,15 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Корневой объект библиотеки. Содержит методы конструкторы. +// Создает объекты для работы с выгрузками описаний конфигураций и расширений +// +/////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС +/////////////////////////////////////////////////////////////////////////////// + // Создает объект для чтение и редактирования описания конфигурации // Выполняет чтение структуры описания // // Параметры: // КаталогИсходников - Строка - Каталог, который содержит описание конфигурации +// ФорматВыгрузки - Строка - Формат выгрузки. Значение перечисления ФорматыВыгрузки +// Если указать "Авто", произойдет автоматическое определение формата выгрузки // // Возвращаемое значение: // Конфигурация - Объект для формирования описания // -Функция ЗагрузитьКонфигурацию(КаталогИсходников, Формат = "Авто") Экспорт +Функция ЗагрузитьКонфигурацию(КаталогИсходников, ФорматВыгрузки = "Авто") Экспорт - СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, Формат, Истина); + СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, ФорматВыгрузки, Истина); Конфигурация = Новый Конфигурация(СтруктураКаталогов); Конфигурация.ПрочитатьСтруктуру(); @@ -23,13 +36,15 @@ // // Параметры: // КаталогИсходников - Строка - Каталог, который содержит описание расширения +// ФорматВыгрузки - Строка - Формат выгрузки. Значение перечисления ФорматыВыгрузки +// Если указать "Авто", произойдет автоматическое определение формата выгрузки // // Возвращаемое значение: // Расширение - Объект для формирования описания // -Функция ЗагрузитьРасширение(КаталогИсходников, Формат = "Авто") Экспорт +Функция ЗагрузитьРасширение(КаталогИсходников, ФорматВыгрузки = "Авто") Экспорт - СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, Формат, Истина); + СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, ФорматВыгрузки, Истина); Расширение = Новый Расширение(СтруктураКаталогов); Расширение.ПрочитатьСтруктуру(); @@ -42,14 +57,14 @@ // // Параметры: // КаталогИсходников - Строка - Каталог, в который записываются описания -// Формат - Строка - Формат описания +// ФорматВыгрузки - Строка - Формат выгрузки. Значение перечисления ФорматыВыгрузки // // Возвращаемое значение: // Конфигурация - Объект для формирования описания // -Функция СоздатьНовуюКонфигурацию(КаталогИсходников, Формат) Экспорт +Функция СоздатьНовуюКонфигурацию(КаталогИсходников, ФорматВыгрузки) Экспорт - СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, Формат, Истина); + СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, ФорматВыгрузки, Истина); Конфигурация = Новый Конфигурация(СтруктураКаталогов); @@ -63,14 +78,14 @@ // // Параметры: // КаталогИсходников - Строка - Каталог, в который записываются описания -// Формат - Строка - Формат описания +// ФорматВыгрузки - Строка - Формат выгрузки. Значение перечисления ФорматыВыгрузки // // Возвращаемое значение: // Расширение - Объект для формирования описания // -Функция СоздатьНовоеРасширение(КаталогИсходников, Формат) Экспорт +Функция СоздатьНовоеРасширение(КаталогИсходников, ФорматВыгрузки) Экспорт - СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, Формат, Истина); + СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, ФорматВыгрузки, Истина); Расширение = Новый Расширение(СтруктураКаталогов); @@ -85,14 +100,14 @@ // Используется для регистрации новых объектов в конфигурации // // Параметры: -// Тип - Строка - Тип объекта конфигурации +// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md // Наименование - Строка - Наименование объекта // // Возвращаемое значение: // Структура - пустышка описания объекта // -Функция СоздатьОбъектКонфигурации(Тип, Наименование) Экспорт +Функция СоздатьОбъектКонфигурации(ТипОбъекта, Наименование) Экспорт - Возврат СтруктурыОписаний.СоздатьОбъект(Тип, Наименование); + Возврат СтруктурыОписаний.СоздатьОбъект(ТипОбъекта, Наименование); КонецФункции \ No newline at end of file diff --git a/tests/ТестПроверкиРазбораКонфигурации.os b/tests/ТестПроверкиРазбораКонфигурации.os index 9182117..8f0bf86 100644 --- a/tests/ТестПроверкиРазбораКонфигурации.os +++ b/tests/ТестПроверкиРазбораКонфигурации.os @@ -7,7 +7,7 @@ // /////////////////////////////////////////////////////////////////////////////// -#Использовать ".." +#Использовать "../src" #Использовать logos #Использовать asserts #Использовать fs @@ -42,23 +42,21 @@ Процедура ТестДолженПрочитатьВыгрузкуВИерархическомФорматеКонфигуратора() Экспорт - Парсер = ПарсерBSL.ПарсерКонфигурации(ОбъединитьПути(КаталогФикстур(), "configurations", "Demo_8_3_10")); - Парсер.ПрочитатьСтруктуруКонфигурации(); - Парсер.ЗаполнитьПодсистемыОбъектовКонфигурации(); - Парсер.НайтиМодулиКонфигурации(); + Конфигурация = РазборКонфигураций.ЗагрузитьКонфигурацию(ОбъединитьПути(КаталогФикстур(), "configurations", "Demo_8_3_10")); + Конфигурация.ЗаполнитьПодсистемыОбъектовКонфигурации(); + Конфигурация.НайтиМодули(); - ПроверитьРезультатЧтенияВыгрузки(Парсер, 168, 89); + ПроверитьРезультатЧтенияВыгрузки(Конфигурация, 168, 89); КонецПроцедуры Процедура ТестДолженПрочитатьВыгрузкуВФорматеEDT() Экспорт - Парсер = ПарсерBSL.ПарсерКонфигурации(ОбъединитьПути(КаталогФикстур(), "edtconfigurations", "Demo_8_3_10", "src")); - Парсер.ПрочитатьСтруктуруКонфигурации(); - Парсер.ЗаполнитьПодсистемыОбъектовКонфигурации(); - Парсер.НайтиМодулиКонфигурации(); + Конфигурация = РазборКонфигураций.ЗагрузитьКонфигурацию(ОбъединитьПути(КаталогФикстур(), "edtconfigurations", "Demo_8_3_10", "src")); + Конфигурация.ЗаполнитьПодсистемыОбъектовКонфигурации(); + Конфигурация.НайтиМодули(); - ПроверитьРезультатЧтенияВыгрузки(Парсер, 167, 89); + ПроверитьРезультатЧтенияВыгрузки(Конфигурация, 167, 89); КонецПроцедуры @@ -69,7 +67,7 @@ Процедура ПроверитьРезультатЧтенияВыгрузки(Парсер, КоличествоОбъектов, КоличествоМодулей) Ожидаем.Что(Парсер.ОписаниеКонфигурации().ОбъектыКонфигурации.Количество(), "Количество найденных объектов не соответствует фактическому").Равно(КоличествоОбъектов); - Ожидаем.Что(Парсер.ОписаниеКонфигурации().МодулиКонфигурации.Количество(), "Количество найденных модулей не соответствует фактическому").Равно(КоличествоМодулей); + Ожидаем.Что(Парсер.ОписаниеКонфигурации().Модули.Количество(), "Количество найденных модулей не соответствует фактическому").Равно(КоличествоМодулей); Для Каждого Объект Из Парсер.ОписаниеКонфигурации().ОбъектыКонфигурации Цикл @@ -77,7 +75,7 @@ КонецЦикла; - Для Каждого Объект Из Парсер.ОписаниеКонфигурации().МодулиКонфигурации Цикл + Для Каждого Объект Из Парсер.ОписаниеКонфигурации().Модули Цикл Ожидаем.Что(ФС.ФайлСуществует(Объект.ПутьКФайлу), СтрШаблон("Не существует файл [%2] модуля объекта ""%1""", Объект.Родитель.ПолноеНаименование, Объект.ПутьКФайлу)).ЭтоИстина(); Парсер.ПрочитатьСодержимоеМодуля(Объект); @@ -91,3 +89,5 @@ Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "common-fixtures"); КонецФункции + +ТестДолженПрочитатьВыгрузкуВФорматеEDT(); \ No newline at end of file diff --git a/tests/ТестПроверкиСтруктурыКаталоговКонфигурации.os b/tests/ТестПроверкиСтруктурыКаталоговКонфигурации.os index 4876049..a554f5b 100644 --- a/tests/ТестПроверкиСтруктурыКаталоговКонфигурации.os +++ b/tests/ТестПроверкиСтруктурыКаталоговКонфигурации.os @@ -8,7 +8,7 @@ /////////////////////////////////////////////////////////////////// #Использовать asserts -#Использовать ".." +#Использовать "../src" /////////////////////////////////////////////////////////////////// diff --git a/tests/ТестРедактированияКонфигурации.os b/tests/ТестРедактированияКонфигурации.os index 1ccc740..466a8e2 100644 --- a/tests/ТестРедактированияКонфигурации.os +++ b/tests/ТестРедактированияКонфигурации.os @@ -26,8 +26,8 @@ МассивТестов = Новый Массив; МассивТестов.Добавить("ТестДобавитьВКонфигурациюЭлементы"); - МассивТестов.Добавить("ТестУдалитьИзКонфигурацииЭлементы"); - МассивТестов.Добавить("ТестИзменитьКонфигурацию"); + // МассивТестов.Добавить("ТестУдалитьИзКонфигурацииЭлементы"); + // МассивТестов.Добавить("ТестИзменитьКонфигурацию"); Возврат МассивТестов; @@ -45,6 +45,7 @@ КаталогКонфигурации = ОбъединитьПути(КаталогФикстур(), "configurations", "Demo_8_3_10"); + КаталогКонфигурации = ВременныйКаталогКонфигурации(КаталогКонфигурации); Конфигурация = РазборКонфигураций.ЗагрузитьКонфигурацию(КаталогКонфигурации); Для Каждого Справочник Из Конфигурация.ОписаниеКонфигурации().НайтиОбъектыПоТипу("Справочник") Цикл @@ -58,6 +59,8 @@ Конфигурация.Зафиксировать(); + УдалитьФайлы(КаталогКонфигурации); + КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// @@ -70,4 +73,12 @@ КонецФункции -ТестДобавитьВКонфигурациюЭлементы(); \ No newline at end of file +Функция ВременныйКаталогКонфигурации(КаталогИсходников) + + Каталог = ПолучитьИмяВременногоФайла(); + + ФС.КопироватьСодержимоеКаталога(КаталогИсходников, Каталог); + + Возврат Каталог; + +КонецФункции diff --git a/tests/ТестСозданияРасширения.os b/tests/ТестСозданияРасширения.os index efcab88..b9fc02e 100644 --- a/tests/ТестСозданияРасширения.os +++ b/tests/ТестСозданияРасширения.os @@ -170,5 +170,3 @@ Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "common-fixtures"); КонецФункции - -ТестВключенияВсехМодулейВРасширениеКонфигуратор(); \ No newline at end of file