1
0
mirror of https://github.com/bia-technologies/bsl-parser.git synced 2024-11-27 08:20:55 +02:00

#ARCH-2530

Преработки для генерации расширений
This commit is contained in:
aleksey.koryakin 2019-06-04 14:26:55 +03:00
parent 6b34832c1f
commit 50c4e6c68f
17 changed files with 676 additions and 363 deletions

View File

@ -0,0 +1,96 @@
///////////////////////////////////////////////////////////////////////////////
//
// Описание модуля
//
///////////////////////////////////////////////////////////////////////////////
Перем Генератор Экспорт;
Перем ПараметрыГенерации Экспорт;
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Создает и инициализирует поток записи описаний корневого объекта
//
// Параметры:
// Описание - Структура - Описание объекта, наименование синоним и прочее
// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...)
// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные
//
Функция СоздатьОписаниеКорневогоОбъекта(Описание, ТипОбъекта, ИмяФайла) Экспорт
Запись = Генератор.СоздатьОписаниеКорневогоОбъекта(Описание, ТипОбъекта, ИмяФайла, ПараметрыГенерации);
ПараметрыГенерации.Вставить("ЗаписьConfiguration", Запись);
Возврат Запись;
КонецФункции
// Сохраняет и закрывает поток записи описаний корневого объекта
//
Процедура ЗафиксироватьОписаниеКорневогоОбъекта() Экспорт
ОбработкаXML.ЗакрытьЗапись(ПараметрыГенерации.ЗаписьConfiguration);
ПараметрыГенерации.ЗаписьConfiguration = Неопределено;
КонецПроцедуры
// Регистрирует объект в списке объектов конфигурации
//
// Параметры:
// ОбъектКонфигурации - Произвольный - Объект содержащий реквизиты - Тип и Наименование
//
Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации) Экспорт
Генератор.ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ПараметрыГенерации);
КонецПроцедуры
// Создает поток и инициализирует поток записи описания объекта
//
// Параметры:
// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...)
// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные
//
// Возвращаемое значение:
// ЗаписьXML - Поток записи данных
//
Функция СоздатьЗапись(ТипОбъекта, ИмяФайла) Экспорт
Возврат Генератор.СоздатьЗапись(ТипОбъекта, ПараметрыГенерации, ИмяФайла);
КонецФункции
// Записывает служебную информацию об уидах платформенных типов
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// ИмяОбъекта - Строка - Имя объекта конфигурации
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
//
Процедура ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта) Экспорт
Генератор.ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта);
КонецПроцедуры
Процедура ПриСозданииОбъекта(ФорматВыгрузки, ГенерацияРасширения) Экспорт
Если ФорматВыгрузки = ФорматыВыгрузки.EDT Тогда
Генератор = ГенераторОписанийEDT;
Иначе
Генератор = ГенераторОписанийКонфигуратор;
КонецЕсли;
ПараметрыГенерации = Генератор.СоздатьПараметрыГенерации("8.3.10", ГенерацияРасширения);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////

View File

@ -13,41 +13,84 @@
Перем ЗаписьConfiguration;
Перем ОписаниеКонфигурации;
Перем Лог;
Перем СтруктураКаталоговПриемник;
Перем ПараметрыГенерации;
Перем ГенераторОписаний;
Перем СтруктураКаталогов;
Перем ГенераторОписаний Экспорт;
Перем ТипКорневогоЭлемента;
Перем Парсер;
///////////////////////////////////////////////////////////////////
// Программный интерфейс
///////////////////////////////////////////////////////////////////
// Устанавливает свойства расширения и подготавливает генератор
// Инициализирует новое расширение в указанном каталоге
//
// Параметры:
// КаталогНазначения - Строка - Путь к каталогу нового расширения
// Формат - Строка - Формат выгрузки, см ФорматыВыгрузки
//
Процедура СоздатьНовоеРасширение(Знач КаталогНазначения, Формат) Экспорт
КаталогНазначения = (Новый Файл(КаталогНазначения)).ПолноеИмя;
Лог.Информация("Начало генерации расширения");
Если НЕ ФС.КаталогСуществует(КаталогНазначения) Тогда
ФС.ОбеспечитьКаталог(КаталогНазначения);
ИначеЕсли НЕ ФС.КаталогПустой(КаталогНазначения) Тогда
Лог.Предупреждение("Каталог расширения ""%1"" не пустой. Каталог будет очищен", КаталогНазначения);
ФС.ОбеспечитьПустойКаталог(КаталогНазначения);
КонецЕсли;
ИнициализироватьПеременные(КаталогНазначения, Формат);
СтрокаКонфигурация = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить();
СтрокаКонфигурация.Тип = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
СтрокаКонфигурация.Наименование = СтрокаКонфигурация.Тип;
СтрокаКонфигурация.ПутьКФайлу = СтруктураКаталогов.ИмяФайлаОписанияКонфигурации();
СтрокаКонфигурация.Описание = ОписаниеКонфигурации.СвойстваКонфигурации;
КонецПроцедуры
// Читает расширение из каталога и подготавливает к модификации
//
// Параметры:
// КаталогНазначения - Строка - Путь к каталогу нового расширения
//
Процедура Загрузить(Знач КаталогНазначения) Экспорт
Если НЕ ФС.КаталогСуществует(КаталогНазначения) Тогда
ВызватьИсключение "Каталог не найден " + КаталогНазначения;
КонецЕсли;
КаталогНазначения = (Новый Файл(КаталогНазначения)).ПолноеИмя;
Парсер = ПарсерBSL.ПарсерРасширения(КаталогНазначения);
Парсер.ПрочитатьСтруктуруКонфигурации();
ОписаниеКонфигурации = Парсер.ОписаниеКонфигурации();
ИнициализироватьПеременные(КаталогНазначения, Парсер.ФорматВыгрузки());
КонецПроцедуры
// Устанавливает свойства расширения
//
// Параметры:
// ИмяРасширения - Строка - Наименование расширения
// ПредставлениеРасширения - Строка - Синоним расширения
// ПрефиксРасширения - Строка - Префикс расширения
//
Процедура Инициализировать(ИмяРасширения, ПредставлениеРасширения, ПрефиксРасширения) Экспорт
Процедура УстановитьОписание(ИмяРасширения, ПредставлениеРасширения, ПрефиксРасширения) Экспорт
ОписаниеКонфигурации = Новый ОписаниеКонфигурации;
ОписаниеКонфигурации.СвойстваКонфигурации = СтруктурыОписаний.СоздатьОбъект("Расширение", ИмяРасширения);
ОписаниеКонфигурации.СвойстваКонфигурации.Наименование = ИмяРасширения;
ОписаниеКонфигурации.СвойстваКонфигурации.Синоним = ПредставлениеРасширения;
ОписаниеКонфигурации.СвойстваКонфигурации.ПрефиксИмен = ПрефиксРасширения;
ОписаниеКонфигурации.СвойстваКонфигурации.Принадлежность = "Adopted";
ОписаниеКонфигурации.СвойстваКонфигурации.Назначение = "Customization";
СтрокаКонфигурация = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить();
ПустаяСтрокаОбъектКонфигурации = СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию();
ЗаполнитьЗначенияСвойств(СтрокаКонфигурация, ПустаяСтрокаОбъектКонфигурации);
СтрокаКонфигурация.Тип = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
СтрокаКонфигурация.Наименование = СтрокаКонфигурация.Тип;
СтрокаКонфигурация.ПутьКФайлу = СтруктураКаталоговПриемник.ИмяФайлаОписанияКонфигурации();
СтрокаКонфигурация.Описание = ОписаниеКонфигурации.СвойстваКонфигурации;
ЗаписьConfiguration = ГенераторОписаний.СоздатьОписаниеРасширения(ОписаниеКонфигурации.СвойстваКонфигурации, ПараметрыГенерации);
КонецПроцедуры
@ -62,15 +105,13 @@
Если Стр.Тип <> ТипКонфигурация И Стр.Родитель = Неопределено Тогда
ГенераторОписаний.ЗарегистрироватьОбъектВКонфигурации(Стр, ПараметрыГенерации);
ГенераторОписаний.ЗарегистрироватьОбъектВКонфигурации(Стр);
КонецЕсли;
КонецЦикла;
Описание = ОбработкаXML.ЗакрытьЗапись(ЗаписьConfiguration);
Утилиты.ЗаписатьФайл(СтруктураКаталоговПриемник.ИмяФайлаОписанияКонфигурации(), Описание);
ГенераторОписаний.ЗафиксироватьОписаниеКорневогоОбъекта();
Лог.Информация("Расширение создано");
@ -87,6 +128,16 @@
КонецФункции
// Добавляет новый объект в конфигурацию
//
// Параметры:
// ИмяОбъекта - Строка - Имя добавляемого объекта
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// ОписаниеОбъекта - <Тип.Вид> - <описание параметра>
//
// Возвращаемое значение:
// СтрокаТаблицыЗначений - Описание добавленного объекта. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Функция ДобавитьОбъект(ИмяОбъекта, Знач ТипОбъекта, ОписаниеОбъекта = Неопределено) Экспорт
ОбъектКонфигурации = ДобавитьОбъектКонфигурации(ИмяОбъекта, ТипОбъекта);
@ -111,13 +162,24 @@
КонецФункции
// Обновляет файл описания объекта
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Процедура СохранитьОписаниеОбъекта(ОбъектКонфигурации) Экспорт
ЗаписатьОписаниеОбъекта(ОбъектКонфигурации, ОбъектКонфигурации.Описание);
КонецПроцедуры // Введите имя процедуры()
// Добавляет объект базовой конфигурации в расширение
//
// Параметры:
// ОбъектРодительскойКонфигурации - СтрокаТаблицыЗначений - Описание объекта родительской конфигурации
// ОбъектРодительскойКонфигурации - СтрокаТаблицыЗначений - Описание объекта родительской конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
// Возвращаемое значение:
// СтрокаТаблицыЗначений - Описание объекта расширения
// СтрокаТаблицыЗначений - Описание объекта расширения. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Функция ПеренестиОбъектВРасширение(ОбъектРодительскойКонфигурации, НеЗакрывать = Ложь) Экспорт
@ -127,21 +189,22 @@
Возврат Неопределено;
КонецЕсли;
СокращенноеОписание = СтруктурыОписаний.СоздатьСокращеннуюСтруктураОбъекта(ОбъектРодительскойКонфигурации.ПолноеНаименование);
ОбъектРасширения = СтруктурыОписаний.СоздатьОбъектДляВключенияВРасширение(ОбъектРодительскойКонфигурации.ПолноеНаименование);
Если ОбъектРодительскойКонфигурации.Описание = Неопределено Тогда
СокращенноеОписание.Наименование = ОбъектКонфигурации.Наименование;
ОбъектРасширения.Наименование = ОбъектКонфигурации.Наименование;
Иначе
ЗаполнитьЗначенияСвойств(СокращенноеОписание, ОбъектРодительскойКонфигурации.Описание, , "Подчиненные");
ЗаполнитьЗначенияСвойств(ОбъектРасширения, ОбъектРодительскойКонфигурации.Описание, , "Подчиненные");
КонецЕсли;
СокращенноеОписание.Принадлежность = "Adopted";
ОбъектРасширения.Принадлежность = "Adopted";
ОбъектКонфигурации.Описание = СокращенноеОписание;
ОбъектКонфигурации.Описание = ОбъектРасширения;
Запись = ЗаписатьОписаниеОбъекта(ОбъектКонфигурации, ОбъектКонфигурации.Описание, НеЗакрывать);
Если НеЗакрывать = Истина Тогда
@ -244,14 +307,31 @@
КонецПроцедуры
Функция СкопироватьОбъект(Объект) Экспорт
// Копирует описание объект из другой конфигурации.
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
// Возвращаемое значение:
// СтрокаТаблицыЗначений - Описание добавленного объекта. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Функция СкопироватьОбъект(ОбъектКонфигурации) Экспорт
НовыйОбъект = ДобавитьОбъект(Объект.Наименование, Объект.Тип);
КопироватьФайл(Объект.ПутьКФайлу, НовыйОбъект.ПутьКФайлу);
НовыйОбъект = ДобавитьОбъект(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
КопироватьФайл(ОбъектКонфигурации.ПутьКФайлу, НовыйОбъект.ПутьКФайлу);
Возврат НовыйОбъект;
КонецФункции
// Добавляет внешную обработку в конфигурацию
// TODO: необходима переработка
//
// Параметры:
// КаталогВнешнейОбработки - Строка - Путь до каталога выгрузки внешней обработки
//
// Возвращаемое значение:
// СтрокаТаблицыЗначений - Описание добавленного объекта. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Функция ДобавитьВнешнуюОбработку(КаталогВнешнейОбработки) Экспорт
ИмяОбработки = (Новый Файл(КаталогВнешнейОбработки)).Имя;
@ -292,8 +372,6 @@
КонецФункции
// Добавляет в расширение существующий файл, как общий модуль
//
// Параметры:
@ -303,7 +381,7 @@
//
Процедура ДобавитьМодульОбъекта(ОбъектКонфигурации, ИмяМодуля, ИмяФайла) Экспорт
ИмяФайлаНазначения = СтруктураКаталоговПриемник.ИмяФайлаМодуля(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип, ИмяМодуля);
ИмяФайлаНазначения = СтруктураКаталогов.ИмяФайлаМодуля(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип, ИмяМодуля);
КопироватьФайл(ИмяФайла, ИмяФайлаНазначения);
@ -336,7 +414,7 @@
//
Процедура ДобавитьМодульКонфигурации(ИмяМодуля, ИмяФайла) Экспорт
ИмяФайлаНазначения = СтруктураКаталоговПриемник.ИмяФайлаМодуля("Configuration", "Configuration", ИмяМодуля);
ИмяФайлаНазначения = СтруктураКаталогов.ИмяФайлаМодуля("Configuration", "Configuration", ИмяМодуля);
КопироватьФайл(ИмяФайла, ИмяФайлаНазначения);
@ -352,7 +430,7 @@
//
Процедура ДобавитьФайл(ОтносительныйПуть, ИсходныйФайл) Экспорт
ПолныйПуть = ОбъединитьПути(СтруктураКаталоговПриемник.КорневойКаталог(), ОтносительныйПуть);
ПолныйПуть = ОбъединитьПути(СтруктураКаталогов.КорневойКаталог(), ОтносительныйПуть);
Утилиты.СоздатьРекурсивноКаталоги((Новый Файл(ПолныйПуть)).Путь);
КопироватьФайл(ИсходныйФайл, ПолныйПуть);
@ -376,29 +454,46 @@
КонецФункции
Функция СоздатьЗаписьОписания(ТипОбъекта, ИмяФайла) Экспорт
Возврат ГенераторОписаний.СоздатьЗапись(ТипОбъекта, ПараметрыГенерации, ИмяФайла);
КонецФункции
///////////////////////////////////////////////////////////////////
// Служебный функционал
///////////////////////////////////////////////////////////////////
Процедура ИнициализироватьПеременные(Каталог, Формат)
СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(Каталог, Формат, Истина);
ГенераторОписаний = Новый ГенераторОписаний(Формат, Истина);
Если ОписаниеКонфигурации = Неопределено Тогда
ОписаниеКонфигурации = Новый ОписаниеКонфигурации;
ОписаниеКонфигурации.СвойстваКонфигурации = СтруктурыОписаний.СоздатьОбъект(ТипыОбъектовКонфигурации.ИмяТипаРасширения(), "Расширение");
КонецЕсли;
ОписаниеКонфигурации.СвойстваКонфигурации.Принадлежность = "Adopted";
ОписаниеКонфигурации.СвойстваКонфигурации.Назначение = "Customization";
ИмяФайлаОписания = СтруктураКаталогов.ИмяФайлаОписанияКонфигурации();
ГенераторОписаний.СоздатьОписаниеКорневогоОбъекта(ОписаниеКонфигурации.СвойстваКонфигурации, ТипКорневогоЭлемента, ИмяФайлаОписания);
КонецПроцедуры
Функция ЗаписатьОписаниеОбъекта(ОбъектКонфигурации, ДанныеОбъекта, НеЗакрывать = Ложь)
ИмяФайла = СтруктураКаталоговПриемник.ИмяФайлаОписанияОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
ИмяФайла = СтруктураКаталогов.ИмяФайлаОписанияОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
Запись = СоздатьЗаписьОписания(ОбъектКонфигурации.Тип, ИмяФайла);
Запись = ГенераторОписаний.СоздатьЗапись(ОбъектКонфигурации.Тип, ИмяФайла);
ОписаниеСвойств = СтруктурыОписаний.ОписаниеСвойствОбъекта(ОбъектКонфигурации.Тип);
ГенераторОписаний.ЗаписатьПорождаемыеТипы(Запись, ДанныеОбъекта.Наименование, ОбъектКонфигурации.Тип);
ГенераторОписаний.ЗаписатьСвойства(Запись, ОбъектКонфигурации.Тип, ДанныеОбъекта);
ГенераторОписаний.Генератор.ЗаписатьПорождаемыеТипы(Запись, ДанныеОбъекта.Наименование, ОбъектКонфигурации.Тип);
ГенераторОписаний.Генератор.ЗаписатьСвойства(Запись, ОбъектКонфигурации.Тип, ДанныеОбъекта);
Если ОписаниеСвойств.ЕстьПодчиненные Тогда
ГенераторОписаний.Подчиненные(Запись, ?(ДанныеОбъекта.Свойство("Подчиненные"), ДанныеОбъекта.Подчиненные, Неопределено));
ГенераторОписаний.Генератор.Подчиненные(Запись, ?(ДанныеОбъекта.Свойство("Подчиненные"), ДанныеОбъекта.Подчиненные, Неопределено));
КонецЕсли;
@ -434,8 +529,8 @@
ОбъектКонфигурации.Наименование = ИмяОбъекта;
ОбъектКонфигурации.Тип = ТипОбъекта;
ОбъектКонфигурации.ПутьКФайлу = СтруктураКаталоговПриемник.ИмяФайлаОписанияОбъекта(ИмяОбъекта, ТипОбъекта);
ОбъектКонфигурации.ПутьККаталогу = СтруктураКаталоговПриемник.КаталогФайловОбъекта(ИмяОбъекта, ТипОбъекта);
ОбъектКонфигурации.ПутьКФайлу = СтруктураКаталогов.ИмяФайлаОписанияОбъекта(ИмяОбъекта, ТипОбъекта);
ОбъектКонфигурации.ПутьККаталогу = СтруктураКаталогов.КаталогФайловОбъекта(ИмяОбъекта, ТипОбъекта);
КонецЕсли;
@ -443,36 +538,10 @@
КонецФункции
Процедура ПриСозданииОбъекта(Формат, Знач КаталогНазначения)
Процедура ПриСозданииОбъекта(пТипКорневогоЭлемента)
Лог = ПараметрыПродукта.ПолучитьЛог();
КаталогНазначения = (Новый Файл(КаталогНазначения)).ПолноеИмя;
Если НЕ ФС.КаталогСуществует(КаталогНазначения) Тогда
ФС.ОбеспечитьКаталог(КаталогНазначения);
ИначеЕсли НЕ ФС.КаталогПустой(КаталогНазначения) Тогда
Лог.Предупреждение("Каталог расширения ""%1"" не пустой. Каталог будет очищен", КаталогНазначения);
ФС.ОбеспечитьПустойКаталог(КаталогНазначения);
КонецЕсли;
Лог.Информация("Начало генерации расширения");
СтруктураКаталоговПриемник = Новый СтруктураКаталоговКонфигурации(КаталогНазначения, Формат, Истина);
Если СтруктураКаталоговПриемник.ФорматВыгрузки() = ФорматыВыгрузки.EDT Тогда
ГенераторОписаний = ГенераторОписанийEDT;
Иначе
ГенераторОписаний = ГенераторОписанийКонфигуратор;
КонецЕсли;
ТипКорневогоЭлемента = пТипКорневогоЭлемента;
ПараметрыГенерации = ГенераторОписаний.СоздатьПараметрыГенерации("8.3.10", Истина);
КонецПроцедуры

View File

@ -40,22 +40,30 @@
КонецФункции
// Метод создает базовое описание расширения, в которое потом можно добавлять объекты и т.д.
// Метод создает базовое описание корневого объекта, в которое потом можно добавлять объекты и т.д.
//
// Параметры:
// ОписаниеРасширения - Структура - Описание расширения, наименование синоним и прочее
// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...)
// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные
// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации
//
Функция СоздатьОписаниеРасширения(ОписаниеРасширения, ПараметрыГенерации) Экспорт
Функция СоздатьОписаниеКорневогоОбъекта(ОписаниеРасширения, ТипОбъекта, ИмяФайла, ПараметрыГенерации) Экспорт
ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации);
ТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта);
ГенераторОписанийОбщий.ЗаписатьДанные(ЗаписьConfiguration, ОписаниеРасширения, "Расширение", ЭтотОбъект);
ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации, ИмяФайла);
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("extension");
ЗаписьConfiguration.ЗаписатьАтрибут("xsi:type", "mdclassExtension:ConfigurationExtension");
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // extension
ГенераторОписанийОбщий.ЗаписатьДанные(ЗаписьConfiguration, ОписаниеРасширения, ТипОбъекта, ЭтотОбъект);
Если ТипыОбъектовКонфигурации.ИмяТипаРасширения() = ТипОбъекта Тогда
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("extension");
ЗаписьConfiguration.ЗаписатьАтрибут("xsi:type", "mdclassExtension:ConfigurationExtension");
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // extension
КонецЕсли;
Для Каждого uid из ГенераторОписанийОбщий.ПолучитьUIDДляГенерацииРасширения() Цикл
@ -66,12 +74,17 @@
КонецЦикла;
ПараметрыГенерации.Вставить("ЗаписьConfiguration", ЗаписьConfiguration);
Возврат ЗаписьConfiguration;
КонецФункции
// Записывает описание объекта в поток
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// СвойстваОбъекта - Структура - Данные объекта
//
Процедура ЗаписатьСвойства(Запись, ТипОбъекта, СвойстваОбъекта) Экспорт
ГенераторОписанийОбщий.ЗаписатьДанные(Запись, СвойстваОбъекта, ТипОбъекта, ЭтотОбъект);
@ -82,7 +95,7 @@
// Проверок на существование объекта нет
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации
//
Процедура ЗарегистрироватьОбъектВКонфигурации(ОбъектКонфигурации, ПараметрыГенерации) Экспорт
@ -95,6 +108,13 @@
КонецПроцедуры
// Записывает служебную информацию об уидах платформенных типов
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// ИмяОбъекта - Строка - Имя объекта конфигурации
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
//
Процедура ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта) Экспорт
ПорождаемыеТипы = ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(ТипОбъекта).ПорождаемыеТипы;
@ -120,44 +140,12 @@
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЗаписиЗначений
Процедура МногоязычнаяСтрока(Запись, Значение) Экспорт
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "key", "ru");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "value", Значение);
КонецПроцедуры
Процедура ЗначениеБулево(Запись, Значение) Экспорт
Запись.ЗаписатьТекст(XMLСтрока(Значение));
КонецПроцедуры
Процедура Подчиненные(Запись, Значение) Экспорт
Для Каждого ПолноеИмяЭлемента Из Значение Цикл
ЧастиИмени = СтрРазделить(ПолноеИмяЭлемента, ".");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, ЧастиИмени[0], ПолноеИмяЭлемента);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
// Создает xml запись описания объекта, прописывает базовые параметры
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта конфигурации на английском, например, Catalog, Configuration и т.д.
// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации
// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные
//
// Возвращаемое значение:
// ЗаписьXML- Поток записи описания
@ -199,19 +187,56 @@
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Закрывает запись описания объекта и всех открытых тэгов
#Область МетодыЗаписиЗначений
// Записывает значение формата многонациональная строка
//
// Параметры:
// Запись - ЗаписьXML - запись описания объекта
// Запись - ЗаписьXML - Поток записи
// Значение - Строка - Записываемое значение
//
// Возвращаемое значение:
// Строка - XML описание объекта
Процедура МногоязычнаяСтрока(Запись, Значение) Экспорт
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "key", "ru");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "value", Значение);
КонецПроцедуры
// Записывает логическое значение
//
Функция ЗакрытьЗапись(Запись)
// Параметры:
// Запись - ЗаписьXML - Поток записи
// Значение - Булево - Записываемое значение
//
Процедура ЗначениеБулево(Запись, Значение) Экспорт
Запись.ЗаписатьТекст(XMLСтрока(Значение));
КонецПроцедуры
// Записывает информацию о подчиненных объектах
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// Значение - Массив - Коллекция подчиненных объектов
//
Процедура Подчиненные(Запись, Значение) Экспорт
Возврат ОбработкаXML.ЗакрытьЗапись(Запись);
КонецФункции
Для Каждого ПолноеИмяЭлемента Из Значение Цикл
ЧастиИмени = СтрРазделить(ПолноеИмяЭлемента, ".");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, ЧастиИмени[0], ПолноеИмяЭлемента);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////

View File

@ -38,15 +38,17 @@
КонецФункции
// Метод создает базовое описание расширения, в которое потом можно добавлять объекты и т.д.
// Метод создает базовое описание корневого объекта, в которое потом можно добавлять объекты и т.д.
//
// Параметры:
// ОписаниеРасширения - Структура - Описание расширения, наименование синоним и прочее
// ТипОбъекта - Строка - Каноническое имя типа (Configuration, Extension...)
// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные
// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации
//
Функция СоздатьОписаниеРасширения(ОписаниеРасширения, ПараметрыГенерации) Экспорт
Функция СоздатьОписаниеКорневогоОбъекта(ОписаниеРасширения, ТипОбъекта, ИмяФайла, ПараметрыГенерации) Экспорт
ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации);
ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации, ИмяФайла);
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("InternalInfo");
@ -61,21 +63,19 @@
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // InternalInfo
ЗаписатьСвойства(ЗаписьConfiguration, "Расширение", ОписаниеРасширения);
ЗаписатьСвойства(ЗаписьConfiguration, ТипОбъекта, ОписаниеРасширения);
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("ChildObjects");
ПараметрыГенерации.Вставить("ЗаписьConfiguration", ЗаписьConfiguration);
Возврат ЗаписьConfiguration;
КонецФункции
// Записывает свойства объекта в XML
// Записывает описание объекта в поток
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// ТипОбъекта - Строка - Тип объекта конфигурации
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// СвойстваОбъекта - Структура - Данные объекта
//
Процедура ЗаписатьСвойства(Запись, ТипОбъекта, СвойстваОбъекта) Экспорт
@ -106,7 +106,7 @@
// Параметры:
// Запись - ЗаписьXML - Поток записи
// ИмяОбъекта - Строка - Имя объекта конфигурации
// ТипОбъекта - Строка - Тип объекта конфигурации
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
//
Процедура ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта) Экспорт
@ -142,72 +142,12 @@
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЗаписиЗначений
Процедура МногоязычнаяСтрока(Запись, Значение) Экспорт
Запись.ЗаписатьНачалоЭлемента("v8:item");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "v8:lang", "ru");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "v8:content", Значение);
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура ЗначениеБулево(Запись, Значение) Экспорт
Запись.ЗаписатьТекст(XMLСтрока(Значение));
КонецПроцедуры
Процедура СоставПодсистемы(Запись, Значение) Экспорт
Если НЕ ЗначениеЗаполнено(Значение) Тогда
Возврат;
КонецЕсли;
Для Каждого ПолноеИмяЭлемента Из Значение Цикл
ЧастиИмени = СтрРазделить(ПолноеИмяЭлемента, ".");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, ЧастиИмени[0], ЧастиИмени[1]);
КонецЦикла;
КонецПроцедуры
Процедура Подчиненные(Запись, Значение) Экспорт
Запись.ЗаписатьНачалоЭлемента("ChildObjects");
Для Каждого ПолноеИмяЭлемента Из Значение Цикл
ЧастиИмени = СтрРазделить(ПолноеИмяЭлемента, ".");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, ЧастиИмени[0], ЧастиИмени[1]);
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
#КонецОбласти
///////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////
// Создает xml запись описания объекта, прописывает базовые параметры
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта конфигурации на английском, например, Catalog, Configuration и т.д.
// ПараметрыГенерации - Структура - Общие данные/настройки необходимые для генерации
// ИмяФайла - Строка - Имя файла описания объекта, в который будут записаны данные
//
// Возвращаемое значение:
// ЗаписьXML- Поток записи описания
@ -215,17 +155,19 @@
Функция СоздатьЗапись(ТипОбъекта, ПараметрыГенерации, ИмяФайла = Неопределено) Экспорт
Запись = Новый ЗаписьXML();
ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8", , , , Символы.Таб);
Если ЗначениеЗаполнено(ИмяФайла) Тогда
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
Запись.ОткрытьФайл(ИмяФайла, ПараметрыЗаписи);
Иначе
Запись.УстановитьСтроку("UTF-8");
Запись.УстановитьСтроку(ПараметрыЗаписи);
КонецЕсли;
Запись.Отступ = Ложь;
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("MetaDataObject");
Запись.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.3/MDClasses");
@ -254,19 +196,96 @@
КонецФункции
// Закрывает запись описания объекта и всех открытых тэгов
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЗаписиЗначений
// Записывает значение формата многонациональная строка
//
// Параметры:
// Запись - ЗаписьXML - запись описания объекта
// Запись - ЗаписьXML - Поток записи
// Значение - Строка - Записываемое значение
//
// Возвращаемое значение:
// Строка - XML описание объекта
Процедура МногоязычнаяСтрока(Запись, Значение) Экспорт
Если НЕ ЗначениеЗаполнено(Значение) Тогда
Возврат;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("v8:item");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "v8:lang", "ru");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, "v8:content", Значение);
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
// Записывает логическое значение
//
Функция ЗакрытьЗапись(Запись)
// Параметры:
// Запись - ЗаписьXML - Поток записи
// Значение - Булево - Записываемое значение
//
Процедура ЗначениеБулево(Запись, Значение) Экспорт
Запись.ЗаписатьТекст(XMLСтрока(Значение));
КонецПроцедуры
// Записывает состав подсистемы
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// Значение - Массив - Коллекция объектов входящих в состав подсистемы
//
Процедура СоставПодсистемы(Запись, Значение) Экспорт
Возврат ОбработкаXML.ЗакрытьЗапись(Запись);
Если НЕ ЗначениеЗаполнено(Значение) Тогда
Возврат;
КонецЕсли;
КонецФункции
Для Каждого ПолноеИмяЭлемента Из Значение Цикл
ЧастиИмени = СтрРазделить(ПолноеИмяЭлемента, ".");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, ЧастиИмени[0], ЧастиИмени[1]);
КонецЦикла;
КонецПроцедуры
// Записывает информацию о подчиненных объектах
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// Значение - Массив - Коллекция подчиненных объектов
//
Процедура Подчиненные(Запись, Значение) Экспорт
Запись.ЗаписатьНачалоЭлемента("ChildObjects");
Для Каждого ПолноеИмяЭлемента Из Значение Цикл
ЧастиИмени = СтрРазделить(ПолноеИмяЭлемента, ".");
ОбработкаXML.ЗаписатьЗначениеXML(Запись, ЧастиИмени[0], ЧастиИмени[1]);
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
#КонецОбласти
///////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////
Процедура СкопироватьInternalInfo(Запись, ИсходноеОписание)

View File

@ -33,7 +33,15 @@
КонецФункции
Функция ЗаписатьДанные(Запись, Данные, ТипОбъекта, Генератор) Экспорт
// Выполняет запись описания объекта
//
// Параметры:
// Запись - ЗаписьXML - Поток записи
// Данные - Структура - Данные описания объекта
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// Генератор - Модуль - Модуль реализующий специфику записи в необходимом формате
//
Процедура ЗаписатьДанные(Запись, Данные, ТипОбъекта, Генератор) Экспорт
ФорматEDT = Генератор = ГенераторОписанийEDT;
ПараметрыЗаписи = ПараметрыСериализации.ПараметрыЗаписи(ТипОбъекта, ?(ФорматEDT, ФорматыВыгрузки.EDT, ФорматыВыгрузки.Конфигуратор_8_3_10));
@ -77,7 +85,7 @@
КонецЦикла;
КонецФункции
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

View File

@ -52,4 +52,4 @@
| ЭлементСтиля | ЭлементыСтиля | StyleItem | StyleItems | | |
| Язык | Языки | Language | Languages | | |
| Конфигурация | Конфигурации | Configuration | Configurations | true | |
| Расширение | Расширения | Extension | Extensions | true | |
| Расширение | Расширения | Extension | Extensions | true | |

View File

@ -8,15 +8,16 @@
* МетодПреобразования - Имя метода для кастомного чтения свойства. Не обязательное.
* ЗначениеПоУмолчанию - Строковое представление значения по-умолчанию. Не обязательное.
* ТипЗначения - Имя типа значения. Не обязательное.
* ПереноситьВРасширение - Булевый признак необходимости переносить реквизит в описание объекта расширения
## Реквизиты Default
| Наименование | Реквизит | МетодПреобразования |
| -------------- | --------------- | ------------------- |
| Наименование | Name | |
| Синоним | Synonym | МногоязычнаяСтрока |
| Комментарий | Comment | МногоязычнаяСтрока |
| Принадлежность | ObjectBelonging | |
| Наименование | Реквизит | МетодПреобразования | ПереноситьВРасширение |
| -------------- | --------------- | ------------------- | --------------------- |
| Наименование | Name | | true |
| Синоним | Synonym | МногоязычнаяСтрока | true |
| Комментарий | Comment | МногоязычнаяСтрока | false |
| Принадлежность | ObjectBelonging | | true |
## Реквизиты Configuration
@ -80,14 +81,14 @@
## Реквизиты Extension
| Наименование | Реквизит | МетодПреобразования |
| Наименование | Реквизит | МетодПреобразования |
| ------------ | ----------------------------- | ------------------- |
| ПрефиксИмен | NamePrefix | |
| Назначение | ConfigurationExtensionPurpose | |
## Реквизиты Subsystem
| Наименование | Реквизит | МетодПреобразования | ТипЗначения |
| Наименование | Реквизит | МетодПреобразования | ТипЗначения |
| --------------------------- | ------------------------- | ------------------- | ----------- |
| ВключатьВКомандныйИнтерфейс | IncludeInCommandInterface | ЗначениеБулево | |
| ВключатьВСодержимоеСправки | IncludeHelpInContents | ЗначениеБулево | |
@ -96,7 +97,7 @@
## Реквизиты CommonModule
| Наименование | Реквизит | МетодПреобразования | ЗначениеПоУмолчанию |
| Наименование | Реквизит | МетодПреобразования | ЗначениеПоУмолчанию |
| ----------------------- | ------------------------- | ------------------- | ------------------- |
| Глобальный | Global | ЗначениеБулево | false |
| Клиент | ClientManagedApplication | ЗначениеБулево | false |
@ -109,41 +110,41 @@
## Реквизиты Constant
| Наименование | Реквизит | МетодПреобразования |
| ------------ | --------------- | ------------------- |
| Тип | Type | ПолучитьТип |
| Пояснение | Explanation | МногоязычнаяСтрока |
| Наименование | Реквизит | МетодПреобразования |
| ------------ | ----------- | ------------------- |
| Тип | Type | ПолучитьТип |
| Пояснение | Explanation | МногоязычнаяСтрока |
## Реквизиты InformationRegister
| Наименование | Реквизит | МетодПреобразования |
| -------------------------------- | ------------------------------ | ------------------- |
| СтандартныеРеквизиты | StandardAttributes | |
| ВключатьСправкуВСодержание | IncludeHelpInContents | |
| ДополнительнаяФормаЗаписи | AuxiliaryRecordForm | |
| ДополнительнаяФормаСписка | AuxiliaryListForm | |
| Измерения | Dimensions | |
| ИспользоватьСтандартныеКоманды | UseStandardCommands | |
| Команды | Commands | |
| Макеты | Templates | |
| МодульМенеджера | ManagerModule | |
| МодульНабораЗаписей | RecordSetModule | |
| ОсновнаяФормаЗаписи | DefaultRecordForm | |
| ОсновнаяФормаСписка | DefaultListForm | |
| ОсновнойОтборПоПериоду | MainFilterOnPeriod | |
| ПериодичностьРегистраСведений | InformationRegisterPeriodicity | |
| ПолнотекстовыйПоиск | FullTextSearch | |
| Пояснение | Explanation | |
| ПредставлениеЗаписи | RecordPresentation | |
| ПредставлениеСписка | ListPresentation | |
| РазрешитьИтогиСрезПервых | EnableTotalsSliceFirst | |
| РазрешитьИтогиСрезПоследних | EnableTotalsSliceLast | |
| РасширенноеПредставлениеЗаписи | ExtendedRecordPresentation | |
| РасширенноеПредставлениеСписка | ExtendedListPresentation | |
| РежимЗаписи | WriteMode | |
| РежимУправленияБлокировкойДанных | DataLockControlMode | |
| Реквизиты | Attributes | |
| Ресурсы | Resources | |
| СпособРедактирования | EditType | |
| Справка | Help | |
| Формы | Forms | |
| Наименование | Реквизит | ПереноситьВРасширение |
| -------------------------------- | ------------------------------ | --------------------- |
| СтандартныеРеквизиты | StandardAttributes | |
| ВключатьСправкуВСодержание | IncludeHelpInContents | |
| ДополнительнаяФормаЗаписи | AuxiliaryRecordForm | |
| ДополнительнаяФормаСписка | AuxiliaryListForm | |
| Измерения | Dimensions | |
| ИспользоватьСтандартныеКоманды | UseStandardCommands | |
| Команды | Commands | |
| Макеты | Templates | |
| МодульМенеджера | ManagerModule | |
| МодульНабораЗаписей | RecordSetModule | |
| ОсновнаяФормаЗаписи | DefaultRecordForm | |
| ОсновнаяФормаСписка | DefaultListForm | |
| ОсновнойОтборПоПериоду | MainFilterOnPeriod | |
| ПериодичностьРегистраСведений | InformationRegisterPeriodicity | true |
| ПолнотекстовыйПоиск | FullTextSearch | |
| Пояснение | Explanation | |
| ПредставлениеЗаписи | RecordPresentation | |
| ПредставлениеСписка | ListPresentation | |
| РазрешитьИтогиСрезПервых | EnableTotalsSliceFirst | |
| РазрешитьИтогиСрезПоследних | EnableTotalsSliceLast | |
| РасширенноеПредставлениеЗаписи | ExtendedRecordPresentation | |
| РасширенноеПредставлениеСписка | ExtendedListPresentation | |
| РежимЗаписи | WriteMode | true |
| РежимУправленияБлокировкойДанных | DataLockControlMode | |
| Реквизиты | Attributes | |
| Ресурсы | Resources | |
| СпособРедактирования | EditType | |
| Справка | Help | |
| Формы | Forms | |

View File

@ -1,18 +1,38 @@
#Использовать "..\ГенераторОписаний"
#Использовать "..\ЧтениеОписаний"
#Использовать "..\Общее"
// Создает генератор для формирования описания расширения
//
// Параметры:
// КаталогНазначения - Строка - Каталог, в который записываются описания
// Формат - Строка - Формат описания
// КаталогИсходниковРасширения - Строка - Каталог, в который записываются описания
//
// Возвращаемое значение:
// ГенераторРасширения - Объект для формирования описания
//
Функция СоздатьРасширение(Формат, КаталогИсходниковРасширения) Экспорт
Функция ГенераторРасширения(КаталогНазначения, Формат) Экспорт
Генератор = Новый ГенераторРасширений(Формат, КаталогИсходниковРасширения);
Генератор = Новый ГенераторРасширений("Extension");
Генератор.СоздатьНовоеРасширение(КаталогНазначения, Формат);
Возврат Генератор;
КонецФункции
// Создает генератор для редактирования описания расширения
//
// Параметры:
// КаталогНазначения - Строка - Каталог, в который записываются описания
//
// Возвращаемое значение:
// ГенераторРасширения - Объект для формирования описания
//
Функция РедакторРасширения(КаталогНазначения) Экспорт
Генератор = Новый ГенераторРасширений("Extension");
Генератор.Загрузить(КаталогНазначения);
Возврат Генератор;
@ -21,7 +41,7 @@
// Создает структуру данных объекта
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// Наименование - Строка - Имя объекта
//
// Возвращаемое значение:

View File

@ -35,7 +35,7 @@
//
Функция ПарсерРасширения(КаталогИсходников) Экспорт
ВызватьИсключение "Не реализованно";
Возврат Новый РазборКонфигурации1С(КаталогИсходников, "Extension");
КонецФункции

View File

@ -8,6 +8,15 @@
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Ищет в потоке XML следующий элемент с указанным именем
//
// Параметры:
// Чтение - ЧтениеXML - Поток чтения
// ИмяЭлемента - Строка - Имя элемента XML
//
// Возвращаемое значение:
// Булево - Успешность поиска
//
Функция ПерейтиКСледующемуЭлементу(Чтение, ИмяЭлемента) Экспорт
Уровень = 0;
@ -42,7 +51,17 @@
КонецФункции
Процедура СкопироватьДанныеXML(Чтение, Запись, КопироватьВсеЭлементыУровня = Ложь) Экспорт
// Выполняет перенос данных из одного потока XML в другой
// Перенос выполняется только подчиненных элементов, с глубинной большей или равной текущей
//
// Параметры:
// Чтение - ЧтениеXML - Поток чтения
// Запись - ЗаписьXML - Поток записи
// КопироватьВсеЭлементыУровня - Булево
// - Истина - копируются все вложенные элементы
// - Ложь - копируются только текущий элемент со всеми вложенными
//
Процедура СкопироватьВложенныеДанныеXML(Чтение, Запись, КопироватьВсеЭлементыУровня = Ложь) Экспорт
Уровень = 0;
УровеньВыхода = ?(КопироватьВсеЭлементыУровня, -1, 0);
@ -53,14 +72,6 @@
Уровень = Уровень + 1;
Запись.ЗаписатьНачалоЭлемента(Чтение.Имя);
Пока Чтение.ПрочитатьАтрибут() Цикл
Запись.ЗаписатьАтрибут(Чтение.Имя, Чтение.Значение);
КонецЦикла;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Уровень = Уровень - 1;
@ -71,13 +82,9 @@
КонецЕсли;
Запись.ЗаписатьКонецЭлемента();
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
Запись.ЗаписатьТекст(Чтение.Значение);
КонецЕсли;
ЗаписатьТекущий(Запись, Чтение);
Чтение.Прочитать();
@ -85,6 +92,90 @@
КонецПроцедуры
// Метод выполняет запись текущего значения чтенияXML
// Метод реализован тк стандартный метод Запись.ЗаписатьТекущий имеет сайдэффект и не понятное поведение
//
// Параметры:
// Чтение - ЧтениеXML - Поток чтения
// Запись - ЗаписьXML - Поток записи
//
Процедура ЗаписатьТекущий(Запись, Чтение) Экспорт
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Запись.ЗаписатьНачалоЭлемента(Чтение.Имя);
Пока Чтение.ПрочитатьАтрибут() Цикл
Запись.ЗаписатьАтрибут(Чтение.Имя, Чтение.Значение);
КонецЦикла;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Запись.ЗаписатьКонецЭлемента();
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
Запись.ЗаписатьТекст(Чтение.Значение);
КонецЕсли;
КонецПроцедуры
// Ищет в потоке XML следующий элемент с указанным именем,
// при этом выполняет копирование прочитанных данных в выходной поток
//
// Параметры:
// Чтение - ЧтениеXML - Поток чтения
// Запись - ЗаписьXML - Поток записи
// ИмяЭлемента - Строка - Имя элемента XML
//
// Возвращаемое значение:
// Булево - Искомый элемент найден
//
Функция СкопироватьДанныеXMLДоТэга(Чтение, Запись, ИмяЭлемента) Экспорт
Пока Чтение.Прочитать() Цикл
Если Чтение.ЛокальноеИмя = ИмяЭлемента Тогда
Возврат Истина;
КонецЕсли;
ЗаписатьТекущий(Запись, Чтение);
КонецЦикла;
Возврат Ложь;
КонецФункции
// Выполняет перенос данных из одного потока XML в другой
// Перенос выполняется с текущей позиции до конца файла
//
// Параметры:
// Чтение - ЧтениеXML - Поток чтения
// Запись - ЗаписьXML - Поток записи
// ЗаписатьТекущий - Булево - Перенести текущий элемент в выходной поток
//
Процедура СкопироватьДанныеXMLДоКонца(Чтение, Запись, ЗаписатьТекущий = Ложь) Экспорт
Если ЗаписатьТекущий Тогда
ЗаписатьТекущий(Запись, Чтение);
КонецЕсли;
Пока Чтение.Прочитать() Цикл
ЗаписатьТекущий(Запись, Чтение);
КонецЦикла;
КонецПроцедуры
// Записывает произвольное значение в XML поток
//
// Параметры:

View File

@ -11,7 +11,7 @@
// Формирует параметры для чтения описания объекта конкретного типа
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// Формат - Строка - Формат выгрузки. Значение перечисления ФорматыВыгрузки
//
// Возвращаемое значение:
@ -34,7 +34,7 @@
// Формирует параметры для записи описания объекта конкретного типа
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
// Формат - Строка - Формат выгрузки. Значение перечисления ФорматыВыгрузки
//
// Возвращаемое значение:

View File

@ -29,12 +29,12 @@
Функция ТаблицаОписанияОбъектовКонфигурации() Экспорт
ОбъектыКонфигурации = Новый ТаблицаЗначений;
ОбъектыКонфигурации.Колонки.Добавить("Наименование");
ОбъектыКонфигурации.Колонки.Добавить("Тип");
ОбъектыКонфигурации.Колонки.Добавить("ПолноеНаименование");
ОбъектыКонфигурации.Колонки.Добавить("ПутьКФайлу");
ОбъектыКонфигурации.Колонки.Добавить("ПутьККаталогу");
ОбъектыКонфигурации.Колонки.Добавить("Подсистемы");
ОбъектыКонфигурации.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
ОбъектыКонфигурации.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка"));
ОбъектыКонфигурации.Колонки.Добавить("ПолноеНаименование", Новый ОписаниеТипов("Строка"));
ОбъектыКонфигурации.Колонки.Добавить("ПутьКФайлу", Новый ОписаниеТипов("Строка"));
ОбъектыКонфигурации.Колонки.Добавить("ПутьККаталогу", Новый ОписаниеТипов("Строка"));
ОбъектыКонфигурации.Колонки.Добавить("Подсистемы", Новый ОписаниеТипов("Массив"));
ОбъектыКонфигурации.Колонки.Добавить("Описание");
ОбъектыКонфигурации.Колонки.Добавить("Родитель");
@ -102,19 +102,6 @@
#КонецОбласти
// <Описание функции>
//
// Возвращаемое значение:
// <Тип.Вид> - <описание возвращаемого значения>
//
Функция ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию() Экспорт
Возврат Новый Структура(
"Наименование, Тип, ПолноеНаименование, ПутьКФайлу, ПутьККаталогу, Подсистемы, Описание, Родитель",
"", "", "", "", "", Новый Массив);
КонецФункции
// Создает пустышку описания объекта
//
// Параметры:
@ -184,7 +171,7 @@
// Возвращаемое значение:
// Структура - минимальное описание объекта
//
Функция СоздатьСокращеннуюСтруктураОбъекта(Знач ТипОбъекта, Знач Наименование = Неопределено) Экспорт
Функция СоздатьОбъектДляВключенияВРасширение(Знач ТипОбъекта, Знач Наименование = Неопределено) Экспорт
Если Наименование = Неопределено
И СтрНайти(ТипОбъекта, ".")
@ -203,7 +190,17 @@
ОписаниеОбъекта = ОписаниеСвойствОбъекта(ТипОбъекта);
Данные = Новый Структура("Наименование, Принадлежность", "");
Данные = Новый Структура("Наименование, Принадлежность", Наименование);
Для Каждого Свойство Из ОписаниеОбъекта.Свойства Цикл
Если Свойство.ПереноситьВРасширение Тогда
Данные.Вставить(Свойство.Наименование);
КонецЕсли;
КонецЦикла;
Если ОписаниеОбъекта.ЕстьПодчиненные Тогда
@ -218,7 +215,7 @@
// Метаданные объекта конфигурации
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта конфигурации
// ТипОбъекта - Строка - Тип объекта конфигурации, см ТипыОбъектовКонфигурации, ОбъектыКонфигурации.md
//
// Возвращаемое значение:
// Структура - Описание структуры и свойств объекта конфигурации
@ -258,12 +255,16 @@
НормализованнаяТаблицаСвойств.Колонки.Добавить("ЗначениеПоУмолчанию", Новый ОписаниеТипов("Строка"));
НормализованнаяТаблицаСвойств.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("Строка"));
НормализованнаяТаблицаСвойств.Колонки.Добавить("ЭтоКоллекция", Новый ОписаниеТипов("Булево"));
НормализованнаяТаблицаСвойств.Колонки.Добавить("ПереноситьВРасширение", Новый ОписаниеТипов("Булево"));
Для Каждого ОписаниеСвойства Из Свойства Цикл
Свойство = НормализованнаяТаблицаСвойств.Добавить();
ЗаполнитьЗначенияСвойств(Свойство, ОписаниеСвойства);
Свойство.ЭтоКоллекция = Свойство.ТипЗначения = "Массив";
Свойство.ПереноситьВРасширение =
Утилиты.ПеременнаяСодержитСвойство(ОписаниеСвойства, "ПереноситьВРасширение")
И ОписаниеСвойства.ПереноситьВРасширение = "true";
КонецЦикла;

View File

@ -92,6 +92,17 @@
КонецФункции
// Возвращает имя типа расширение
//
// Возвращаемое значение:
// Строка - Имя типа
//
Функция ИмяТипаРасширения() Экспорт
Возврат НормализоватьИмя("Расширение");
КонецФункции
// Возвращает имя типа общего модуля
//
// Возвращаемое значение:

View File

@ -20,9 +20,9 @@
//
Функция ПрочитатьФайл(ИмяФайла) Экспорт
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Прочитать(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = ТекстовыйДокумент.ПолучитьТекст();
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Чтение.Прочитать();
Чтение.Закрыть();
Возврат СодержимоеФайла;

View File

@ -10,10 +10,11 @@
///////////////////////////////////////////////////////////////////////////////
Перем СтруктураКаталогов;
Перем СтруктураКаталогов Экспорт;
Перем ЧитательОписаний;
Перем ОписаниеКонфигурации;
Перем ДанныеКонфигурации;
Перем ТипКорневогоЭлемента;
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
@ -155,44 +156,6 @@
КонецПроцедуры
// Возвращает полное наименование объекта конфигурации или модуля
//
// Параметры:
// СтрокаОбъект - СтрокаТаблицыЗначений - Описание объекта или модуля конфигурации
// ДобавлятьПрефиксДляОбщихМодулей - Булево - Признак, добавлять ли тип объекта для общих модулей
//
// Возвращаемое значение:
// Строка - Полное имя
//
Функция ПолноеИмяОбъекта(СтрокаОбъект, ДобавлятьПрефиксДляОбщихМодулей = Истина, Разделитель = ".") Экспорт
Возврат ЧтениеОписанийБазовый.ПолноеИмяОбъекта(СтрокаОбъект, ДобавлятьПрефиксДляОбщихМодулей, Разделитель);
КонецФункции
// Ищет описание объекта по имени и типу
//
// Параметры:
// ИмяОбъекта - Строка - Наименование или полное наименование объекта
// ТипОбъекта - Строка - Тип объекта
//
// Возвращаемое значение:
// СтрокаТаблицыЗначений - Строка описания объекта конфигурации
//
Функция ОписаниеОбъекта(ИмяОбъекта, ТипОбъекта = Неопределено) Экспорт
Если ТипОбъекта = Неопределено И СтрНайти(ИмяОбъекта, ".") Тогда
Возврат ОписаниеКонфигурации.ОбъектыКонфигурации.Найти(ИмяОбъекта, "ПолноеНаименование");
Иначе
Возврат ОписаниеКонфигурации.ОбъектыКонфигурации.Найти(СтрШаблон("%1.%2", ТипОбъекта, ИмяОбъекта), "ПолноеНаименование");
КонецЕсли;
КонецФункции
// Формат выгрузки исходников
//
// Возвращаемое значение:
@ -207,7 +170,7 @@
// Читает описание объекта конфигурации
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Строка описания объекта конфигурации
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
Процедура ПрочитатьОписаниеОбъекта(ОбъектКонфигурации) Экспорт
@ -215,6 +178,8 @@
КонецПроцедуры
// Выполняет чтение подсистем и привязку объектов к ним
//
Процедура ЗаполнитьПодсистемыОбъектовКонфигурации() Экспорт
// дополним объекты информацией о подсистемах
@ -251,15 +216,11 @@
КонецЕсли;
ДанныеКонфигурации = ПрочитатьФайлОписанияОбъекта(ФайлКонфигурации, ТипыОбъектовКонфигурации.ИмяТипаКонфигурации());
ОбъектыКонфигурации = СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации();
ДанныеКонфигурации = ПрочитатьФайлОписанияОбъекта(ФайлКонфигурации, ТипКорневогоЭлемента);
// добавим руками объект "Configuration" для модулей приложения
ПустаяСтрокаОбъектКонфигурации = СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию();
НовСтрока = ОбъектыКонфигурации.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрока, ПустаяСтрокаОбъектКонфигурации);
НовСтрока.Тип = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
НовСтрока = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить();
НовСтрока.Тип = ТипКорневогоЭлемента;
НовСтрока.Наименование = НовСтрока.Тип;
НовСтрока.ПутьКФайлу = ФайлКонфигурации;
@ -362,6 +323,7 @@
Если ПустаяСтрока(СтрокаОбъектКонфигурации.ПутьКФайлу) Тогда
СтрокаОбъектКонфигурации.ПутьКФайлу = СтруктураКаталогов.ИмяФайлаОписанияОбъекта(СтрокаОбъектКонфигурации.Наименование, СтрокаОбъектКонфигурации.Тип);
СтрокаОбъектКонфигурации.ПутьККаталогу = СтруктураКаталогов.КаталогФайловОбъекта(СтрокаОбъектКонфигурации.Наименование, СтрокаОбъектКонфигурации.Тип);
КонецЕсли;
@ -501,8 +463,18 @@
КонецПроцедуры
Процедура ПриСозданииОбъекта(КаталогИсходников)
Процедура ПриСозданииОбъекта(КаталогИсходников, пТипКорневогоЭлемента = Неопределено)
Если пТипКорневогоЭлемента = Неопределено Тогда
ТипКорневогоЭлемента = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
Иначе
ТипКорневогоЭлемента = пТипКорневогоЭлемента;
КонецЕсли;
СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, "Авто");
Если СтруктураКаталогов.ФорматВыгрузки() = ФорматыВыгрузки.EDT Тогда

View File

@ -73,13 +73,13 @@
Для Каждого Объект Из Парсер.ОписаниеКонфигурации().ОбъектыКонфигурации Цикл
Ожидаем.Что(ФС.ФайлСуществует(Объект.ПутьКФайлу), СтрШаблон("Не существует файл [%2] описания объекта ""%1""", Парсер.ПолноеИмяОбъекта(Объект), Объект.ПутьКФайлу)).ЭтоИстина();
Ожидаем.Что(ФС.ФайлСуществует(Объект.ПутьКФайлу), СтрШаблон("Не существует файл [%2] описания объекта ""%1""", Объект.ПолноеНаименование, Объект.ПутьКФайлу)).ЭтоИстина();
КонецЦикла;
Для Каждого Объект Из Парсер.ОписаниеКонфигурации().МодулиКонфигурации Цикл
Ожидаем.Что(ФС.ФайлСуществует(Объект.ПутьКФайлу), СтрШаблон("Не существует файл [%2] модуля объекта ""%1""", Парсер.ПолноеИмяОбъекта(Объект), Объект.ПутьКФайлу)).ЭтоИстина();
Ожидаем.Что(ФС.ФайлСуществует(Объект.ПутьКФайлу), СтрШаблон("Не существует файл [%2] модуля объекта ""%1""", Объект.Родитель.ПолноеНаименование, Объект.ПутьКФайлу)).ЭтоИстина();
Парсер.ПрочитатьСодержимоеМодуля(Объект);
КонецЦикла;

View File

@ -45,8 +45,8 @@
КаталогРасширения = ОбъединитьПути("ignore", "extension", "designer");
КаталогКонфигурации = ОбъединитьПути(КаталогФикстур(), "configurations", "Demo_8_3_10");
Генератор = ГенераторBSL.СоздатьРасширение(ФорматыВыгрузки.Конфигуратор_8_3_10, КаталогРасширения);
Генератор.Инициализировать("Simple", "Простое расширение", "smpl_");
Генератор = ГенераторBSL.ГенераторРасширения(КаталогРасширения, ФорматыВыгрузки.Конфигуратор_8_3_10);
Генератор.УстановитьОписание("Simple", "Простое расширение", "smpl_");
Парсер = ПарсерBSL.ПарсерКонфигурации(КаталогКонфигурации);
Парсер.ПрочитатьСтруктуруКонфигурации();
@ -73,7 +73,7 @@
КаталогРасширения = ОбъединитьПути("ignore", "extension", "designer");
КаталогКонфигурации = ОбъединитьПути(КаталогФикстур(), "configurations", "Demo_8_3_10");
Генератор = ГенераторBSL.СоздатьРасширение(ФорматыВыгрузки.Конфигуратор_8_3_10, КаталогРасширения);
Генератор = ГенераторBSL.ГенераторРасширения(КаталогРасширения, ФорматыВыгрузки.Конфигуратор_8_3_10);
Парсер = ПарсерBSL.ПарсерКонфигурации(КаталогКонфигурации);
СоздатьПростоеРасширение(Парсер, Генератор);
@ -85,7 +85,7 @@
КаталогРасширения = ОбъединитьПути("ignore", "extension", "edt");
КаталогКонфигурации = ОбъединитьПути(КаталогФикстур(), "edtconfigurations", "Demo_8_3_10", "src");
Генератор = ГенераторBSL.СоздатьРасширение(ФорматыВыгрузки.EDT, КаталогРасширения);
Генератор = ГенераторBSL.ГенераторРасширения(КаталогРасширения, ФорматыВыгрузки.EDT);
Парсер = ПарсерBSL.ПарсерКонфигурации(КаталогКонфигурации);
СоздатьПростоеРасширение(Парсер, Генератор);
@ -117,7 +117,7 @@
Процедура СоздатьПростоеРасширение(Парсер, Генератор)
Генератор.Инициализировать("Simple", "Простое расширение", "smpl_");
Генератор.УстановитьОписание("Simple", "Простое расширение", "smpl_");
Парсер.ПрочитатьСтруктуруКонфигурации();