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

#ONECICD-148

Генерация описаний расширения
This commit is contained in:
aleksey.koryakin 2019-04-30 19:02:45 +03:00
parent 4a2fb068f2
commit e076f6994f
15 changed files with 1287 additions and 110 deletions

View File

@ -0,0 +1,255 @@
///////////////////////////////////////////////////////////////////
//
// Класс для генерации расширений
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////
#Использовать fs
///////////////////////////////////////////////////////////////////
Перем ЗаписьConfiguration;
Перем ОписаниеКонфигурации;
Перем Лог;
Перем СтруктураКаталоговПриемник;
Перем ПараметрыГенерации;
Перем ГенераторОписаний;
///////////////////////////////////////////////////////////////////
// Программный интерфейс
///////////////////////////////////////////////////////////////////
Процедура Инициализировать(ИмяРасширения, ПредставлениеРасширения, ПрефиксРасширения) Экспорт
ОписаниеРасширения = СтруктурыОписаний.СоздатьСтруктураОбъекта("Расширение");
ОписаниеРасширения.Наименование = ИмяРасширения;
ОписаниеРасширения.Синоним = ПредставлениеРасширения;
ОписаниеРасширения.ПрефиксИмен = ПрефиксРасширения;
ОписаниеРасширения.Принадлежность = "Adopted";
ОписаниеРасширения.Назначение = "Customization";
ОбъектыКонфигурации = СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации();
ОписаниеКонфигурации = Новый Структура("ОбъектыКонфигурации, СвойстваКонфигурации", ОбъектыКонфигурации, ОписаниеРасширения);
СтрокаКонфигурация = ОбъектыКонфигурации.Добавить();
ПустаяСтрокаОбъектКонфигурации = СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию();
ЗаполнитьЗначенияСвойств(СтрокаКонфигурация, ПустаяСтрокаОбъектКонфигурации);
СтрокаКонфигурация.Тип = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
СтрокаКонфигурация.Наименование = СтрокаКонфигурация.Тип;
СтрокаКонфигурация.ПутьКФайлу = СтруктураКаталоговПриемник.ИмяФайлаОписанияКонфигурации();
СтрокаКонфигурация.Описание = ОписаниеРасширения;
ЗаписьConfiguration = ГенераторОписаний.СоздатьОписаниеРасширения(ОписаниеРасширения, ПараметрыГенерации);
КонецПроцедуры
// Завершает генерацию расширения и записывает описание корневого файла(configuration.xml)
//
Процедура Зафиксировать() Экспорт
ОписаниеКонфигурации.ОбъектыКонфигурации.Сортировать("Тип, Наименование");
ТипКонфигурация = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
Для Каждого Стр Из ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
Если Стр.Тип <> ТипКонфигурация Тогда
ГенераторОписаний.ЗарегистрироватьОбъектВКонфигурации(Стр.Наименование, Стр.Тип, ПараметрыГенерации);
КонецЕсли;
КонецЦикла;
Описание = ГенераторОписанийОбщий.ЗакрытьЗапись(ЗаписьConfiguration);
Утилиты.ЗаписатьФайл(СтруктураКаталоговПриемник.ИмяФайлаОписанияКонфигурации(), Описание);
Лог.Информация("Расширение создано");
КонецПроцедуры
Функция ОписаниеКонфигурации() Экспорт
Возврат ОписаниеКонфигурации;
КонецФункции
Функция ДобавитьОбъект(ИмяОбъекта, Знач ТипОбъекта, ОписаниеОбъекта = Неопределено) Экспорт
ТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта);
НайденныеОбъекты = ОписаниеКонфигурации.ОбъектыКонфигурации.НайтиСтроки(Новый Структура("Наименование, Тип", ИмяОбъекта, ТипОбъекта));
Если НайденныеОбъекты.Количество() Тогда
Описание = НайденныеОбъекты[0];
Иначе
Описание = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить();
Описание.Наименование = ИмяОбъекта;
Описание.Тип = ТипОбъекта;
Описание.ПутьКФайлу = СтруктураКаталоговПриемник.ИмяФайлаОписанияОбъекта(ИмяОбъекта, ТипОбъекта);
Описание.ПутьККаталогу = СтруктураКаталоговПриемник.КаталогФайловОбъекта(ИмяОбъекта, ТипОбъекта);
Описание.Описание = ОписаниеОбъекта;
Если ОписаниеОбъекта <> Неопределено Тогда
ЗаписатьОписаниеОбъекта(ТипОбъекта, ОписаниеОбъекта);
КонецЕсли;
КонецЕсли;
Возврат Описание;
КонецФункции
Функция ПеренестиОбъектВРасширение(ИмяОбъекта, Знач ТипОбъекта, ОписаниеОбъекта = Неопределено) Экспорт
ТипОбъекта = ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта);
НайденныеОбъекты = ОписаниеКонфигурации.ОбъектыКонфигурации.НайтиСтроки(Новый Структура("Наименование, Тип", ИмяОбъекта, ТипОбъекта));
Если НайденныеОбъекты.Количество() Тогда
Описание = НайденныеОбъекты[0];
Если ОписаниеОбъекта = Неопределено Тогда
ОписаниеОбъекта = Описание.Описание;
КонецЕсли;
Иначе
Описание = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить();
Описание.Наименование = ИмяОбъекта;
Описание.Тип = ТипОбъекта;
Описание.ПутьКФайлу = СтруктураКаталоговПриемник.ИмяФайлаОписанияОбъекта(ИмяОбъекта, ТипОбъекта);
Описание.ПутьККаталогу = СтруктураКаталоговПриемник.КаталогФайловОбъекта(ИмяОбъекта, ТипОбъекта);
Описание.Описание = ОписаниеОбъекта;
КонецЕсли;
Если ОписаниеОбъекта = Неопределено Тогда
ОписаниеОбъекта = СтруктурыОписаний.СоздатьСтруктураОбъекта(ТипОбъекта);
ОписаниеОбъекта.Наименование = ИмяОбъекта;
КонецЕсли;
ОписаниеОбъекта.Вставить("ObjectBelonging", "Adopted");
ЗаписатьОписаниеОбъекта(ТипОбъекта, ОписаниеОбъекта);
Возврат Описание;
КонецФункции
// Добавляет в расширение существующий файл, как общий модуль
//
// Параметры:
// ИмяМодуля - Строка - <описание параметра>
// ПараметрыМодуля - Структура - Свойства модуля: Клиент, Сервер, ВызовСервера, ВнешнееСоединение, Привилегированный
// ИмяФайла - Строка - Путь к добавляемому файлу
//
Процедура ДобавитьМодульОбъекта(ИмяОбъекта, ТипОбъекта, ИмяМодуля, ИмяФайла, ОписаниеОбъекта = Неопределено) Экспорт
ДобавитьОбъект(ИмяОбъекта, ТипОбъекта, ОписаниеОбъекта);
ИмяФайлаНазначения = СтруктураКаталоговПриемник.ИмяФайлаМодуля(ИмяОбъекта, ТипОбъекта, ИмяМодуля);
КопироватьФайл(ИмяФайла, ИмяФайлаНазначения);
Лог.Отладка("Добавлен модуль %3.%1.%2", ИмяОбъекта, ИмяМодуля, ТипОбъекта);
КонецПроцедуры
// Добавляет в расширение существующий файл, как общий модуль
//
// Параметры:
// ИмяМодуля - Строка - <описание параметра>
// ПараметрыМодуля - Структура - Свойства модуля: Клиент, Сервер, ВызовСервера, ВнешнееСоединение, Привилегированный
// ИмяФайла - Строка - Путь к добавляемому файлу
//
Процедура ДобавитьОбщийМодуль(ПараметрыМодуля, ИмяФайла) Экспорт
ТипОбщийМодуль = ТипыОбъектовКонфигурации.ИмяТипаОбщийМодуль();
ДобавитьМодульОбъекта(ПараметрыМодуля.Наименование, ТипОбщийМодуль, "Module", ИмяФайла, ПараметрыМодуля);
Лог.Отладка("Добавлен общий модуль %1", ПараметрыМодуля.Наименование);
КонецПроцедуры
// Добавляет произвольный файл в расширение, без регистрации и смс
//
// Параметры:
// ОтносительныйПуть - Строка - Путь в рамках исходников расширения
// ИсходныйФайл - Строка - Полный путь к добавляемому файлу
//
Процедура ДобавитьФайл(ОтносительныйПуть, ИсходныйФайл) Экспорт
ПолныйПуть = ОбъединитьПути(СтруктураКаталоговПриемник.КорневойКаталог(), ОтносительныйПуть);
Утилиты.СоздатьРекурсивноКаталоги((Новый Файл(ПолныйПуть)).Путь);
КопироватьФайл(ИсходныйФайл, ПолныйПуть);
КонецПроцедуры
///////////////////////////////////////////////////////////////////
// Служебный функционал
///////////////////////////////////////////////////////////////////
Процедура ЗаписатьОписаниеОбъекта(ТипОбъекта, ОписаниеОбъекта)
Запись = ГенераторОписаний.СоздатьЗапись(ТипОбъекта, ПараметрыГенерации);
ГенераторОписаний.ЗаписатьПорождаемыеТипы(Запись, ОписаниеОбъекта.Наименование, ТипОбъекта);
ГенераторОписаний.ЗаписатьСвойства(Запись, ТипОбъекта, ОписаниеОбъекта);
ТекстОписания = ГенераторОписанийОбщий.ЗакрытьЗапись(Запись);
ИмяФайла = СтруктураКаталоговПриемник.ИмяФайлаОписанияОбъекта(ОписаниеОбъекта.Наименование, ТипОбъекта);
Утилиты.ЗаписатьФайл(ИмяФайла, ТекстОписания);
КонецПроцедуры
Процедура ПриСозданииОбъекта(Формат, Знач КаталогНазначения)
Лог = ПараметрыПродукта.ПолучитьЛог();
КаталогНазначения = (Новый Файл(КаталогНазначения)).ПолноеИмя;
Если НЕ ФС.КаталогСуществует(КаталогНазначения) Тогда
ФС.ОбеспечитьКаталог(КаталогНазначения);
ИначеЕсли НЕ ФС.КаталогПустой(КаталогНазначения) Тогда
Лог.Предупреждение("Каталог расширения ""%1"" не пустой. Каталог будет очищен", КаталогНазначения);
ФС.ОбеспечитьПустойКаталог(КаталогНазначения);
КонецЕсли;
Лог.Информация("Начало генерации расширения");
СтруктураКаталоговПриемник = Новый СтруктураКаталоговКонфигурации(КаталогНазначения, Формат, Истина);
Если СтруктураКаталоговПриемник.ФорматВыгрузки() = "EDT" Тогда
ГенераторОписаний = ГенераторОписанийEDT;
Иначе
ГенераторОписаний = ГенераторОписанийКонфигуратор;
КонецЕсли;
ПараметрыГенерации = ГенераторОписаний.СоздатьПараметрыГенерации("8.3.10", Истина);
КонецПроцедуры

View File

@ -0,0 +1,182 @@
///////////////////////////////////////////////////////////////////////////////
//
// Модуль генерации описаний файлов 1с в формате EDT
//
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Формирует служебные параметры необходимые для дальнейшей работы генератора
//
// Параметры:
// ВерсияПлатформы - Строка - Версия платформы 1с под которую создается описание
// ГенерацияРасширения - Булево - Флаг создания расширения
//
// Возвращаемое значение:
// Структура - Служебные параметры генератора
//
Функция СоздатьПараметрыГенерации(ВерсияПлатформы, ГенерацияРасширения) Экспорт
Если Лев(ВерсияПлатформы, 6) = "8.3.10" Тогда
ВерсияВыгрузки = "2.4";
Иначе
ВызватьИсключение "Неизвестная версия платформы";
КонецЕсли;
ПараметрыГенерации = Новый Структура();
ПараметрыГенерации.Вставить("ВерсияПлатформы", ВерсияПлатформы);
ПараметрыГенерации.Вставить("ВерсияВыгрузки", ВерсияВыгрузки);
ПараметрыГенерации.Вставить("ГенерацияРасширения", ГенерацияРасширения = Истина);
Возврат ПараметрыГенерации;
КонецФункции
// Метод создает базовое описание расширения, в которое потом можно добавлять объекты и т.д.
//
// Параметры:
// Имя - Строка - Имя расширения
//
Функция СоздатьОписаниеРасширения(ОписаниеРасширения, ПараметрыГенерации) Экспорт
ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации);
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("extension");
ЗаписьConfiguration.ЗаписатьСоответствиеПространстваИмен("type", "mdclassExtension:ConfigurationExtension");
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // extension
Для Каждого uid из ГенераторОписанийОбщий.ПолучитьUIDДляГенерацииРасширения() Цикл
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("containedObjects");
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(ЗаписьConfiguration, "classId", uid);
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(ЗаписьConfiguration, "objectId", Строка(Новый УникальныйИдентификатор()));
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // containedObjects
КонецЦикла;
ГенераторОписанийОбщий.ЗаписатьДанные(ЗаписьConfiguration, ОписаниеРасширения, "Расширение", ЭтотОбъект);
ПараметрыГенерации.Вставить("ЗаписьConfiguration", ЗаписьConfiguration);
Возврат ЗаписьConfiguration;
КонецФункции
Процедура ЗаписатьСвойства(Запись, ТипОбъекта, СвойстваОбъекта) Экспорт
ГенераторОписанийОбщий.ЗаписатьДанные(Запись, СвойстваОбъекта, ТипОбъекта, ЭтотОбъект);
КонецПроцедуры
// Метод регистрирует в конфигурации объект метаданных.
// Проверок на существование объекта нет
//
// Параметры:
// ИмяМетаданного - Строка - Имя регистрируемого метаданного, например, Пользователи
// ВидМетаданного - Строка - Вид регистрируемого метаданного, например, Catalog
//
Процедура ЗарегистрироватьОбъектВКонфигурации(ИмяМетаданного, ВидМетаданного, ПараметрыГенерации) Экспорт
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(ПараметрыГенерации.ЗаписьConfiguration, ВидМетаданного, ИмяМетаданного);
КонецПроцедуры
Процедура ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта) Экспорт
ПорождаемыеТипы = ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(ТипОбъекта).ПорождаемыеТипы;
Если ПорождаемыеТипы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("producedTypes");
Для Каждого Тип Из ПорождаемыеТипы Цикл
Запись.ЗаписатьНачалоЭлемента(Тип);
Запись.ЗаписатьАтрибут("typeId", Строка(Новый УникальныйИдентификатор()));
Запись.ЗаписатьАтрибут("valueTypeId", Строка(Новый УникальныйИдентификатор()));
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЗаписиЗначений
Процедура МногоязычнаяСтрока(Запись, Значение) Экспорт
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "key", "ru");
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "value", Значение);
КонецПроцедуры
Процедура ЗначениеБулево(Запись, Значение) Экспорт
Запись.ЗаписатьТекст(XMLСтрока(Значение));
КонецПроцедуры
#КонецОбласти
// Создает xml запись описания объекта, прописывает базовые параметры
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта конфигурации на английском, например, Catalog, Configuration и т.д.
//
// Возвращаемое значение:
// ЗаписьXML- Поток записи описания
//
Функция СоздатьЗапись(ТипОбъекта, ПараметрыГенерации) Экспорт
Запись = Новый ЗаписьXML();
Запись.Отступ = Ложь;
Запись.УстановитьСтроку("UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента(СтрШаблон("mdclass:%1", ТипОбъекта));
Запись.ЗаписатьСоответствиеПространстваИмен("mdclass", "http://g5.1c.ru/v8/dt/metadata/mdclass");
Если ПараметрыГенерации.ГенерацияРасширения Тогда
Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
Запись.ЗаписатьСоответствиеПространстваИмен("mdclassExtension", "http://g5.1c.ru/v8/dt/metadata/mdclass/extension");
КонецЕсли;
Запись.ЗаписатьАтрибут("uuid", Строка(Новый УникальныйИдентификатор()));
Возврат Запись;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Закрывает запись описания объекта и всех открытых тэгов
//
// Параметры:
// Запись - ЗаписьXML - запись описания объекта
//
// Возвращаемое значение:
// Строка - XML описание объекта
//
Функция ЗакрытьЗапись(Запись)
Возврат ГенераторОписанийОбщий.ЗакрытьЗапись(Запись);
КонецФункции

View File

@ -0,0 +1,254 @@
///////////////////////////////////////////////////////////////////
//
// Модуль помощник, для генерации описаний метаданных 1с
//
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////
// Формирует служебные параметры необходимые для дальнейшей работы генератора
//
// Параметры:
// ВерсияПлатформы - Строка - Версия платформы 1с под которую создается описание
// ГенерацияРасширения - Булево - Флаг создания расширения
//
// Возвращаемое значение:
// Структура - Служебные параметры генератора
//
Функция СоздатьПараметрыГенерации(ВерсияПлатформы, ГенерацияРасширения) Экспорт
Если Лев(ВерсияПлатформы, 6) = "8.3.10" Тогда
ВерсияВыгрузки = "2.4";
Иначе
ВызватьИсключение "Неизвестная версия платформы";
КонецЕсли;
ПараметрыГенерации = Новый Структура();
ПараметрыГенерации.Вставить("ВерсияПлатформы", ВерсияПлатформы);
ПараметрыГенерации.Вставить("ВерсияВыгрузки", ВерсияВыгрузки);
ПараметрыГенерации.Вставить("ГенерацияРасширения", ГенерацияРасширения = Истина);
Возврат ПараметрыГенерации;
КонецФункции
// Метод создает базовое описание расширения, в которое потом можно добавлять объекты и т.д.
//
// Параметры:
// Имя - Строка - Имя расширения
//
Функция СоздатьОписаниеРасширения(ОписаниеРасширения, ПараметрыГенерации) Экспорт
ЗаписьConfiguration = СоздатьЗапись("Configuration", ПараметрыГенерации);
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("InternalInfo");
Для Каждого uid из ГенераторОписанийОбщий.ПолучитьUIDДляГенерацииРасширения() Цикл
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("xr:ContainedObject");
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(ЗаписьConfiguration, "xr:ClassId", uid);
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(ЗаписьConfiguration, "xr:ObjectId", Строка(Новый УникальныйИдентификатор()));
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // xr:ContainedObject
КонецЦикла;
ЗаписьConfiguration.ЗаписатьКонецЭлемента(); // InternalInfo
ЗаписатьСвойства(ЗаписьConfiguration, "Расширение", ОписаниеРасширения);
ЗаписьConfiguration.ЗаписатьНачалоЭлемента("ChildObjects");
ПараметрыГенерации.Вставить("ЗаписьConfiguration", ЗаписьConfiguration);
Возврат ЗаписьConfiguration;
КонецФункции
Процедура ЗаписатьСвойства(Запись, ТипОбъекта, СвойстваОбъекта) Экспорт
Запись.ЗаписатьНачалоЭлемента("Properties");
ГенераторОписанийОбщий.ЗаписатьДанные(Запись, СвойстваОбъекта, ТипОбъекта, ЭтотОбъект);
Запись.ЗаписатьКонецЭлемента(); // Properties
КонецПроцедуры
// Метод регистрирует в конфигурации объект метаданных.
// Проверок на существование объекта нет
//
// Параметры:
// ИмяМетаданного - Строка - Имя регистрируемого метаданного, например, Пользователи
// ВидМетаданного - Строка - Вид регистрируемого метаданного, например, Catalog
//
Процедура ЗарегистрироватьОбъектВКонфигурации(ИмяМетаданного, ВидМетаданного, ПараметрыГенерации) Экспорт
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(ПараметрыГенерации.ЗаписьConfiguration, ВидМетаданного, ИмяМетаданного);
КонецПроцедуры
Процедура ЗаписатьПорождаемыеТипы(Запись, ИмяОбъекта, ТипОбъекта) Экспорт
ПорождаемыеТипы = ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(ТипОбъекта).ПорождаемыеТипы;
Если ПорождаемыеТипы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("InternalInfo");
Для Каждого Тип Из ПорождаемыеТипы Цикл
Запись.ЗаписатьНачалоЭлемента("xr:GeneratedType");
// TODO Есть типы исключения у которых имя формируется по-другому
Запись.ЗаписатьАтрибут("name", СтрШаблон("%1%2.%3", ТипОбъекта, Тип, ИмяОбъекта));
Запись.ЗаписатьАтрибут("category", Тип);
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "xr:TypeId", Строка(Новый УникальныйИдентификатор()));
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "xr:ValueId", Строка(Новый УникальныйИдентификатор()));
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЗаписиЗначений
Процедура МногоязычнаяСтрока(Запись, Значение) Экспорт
Запись.ЗаписатьНачалоЭлемента("v8:item");
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "v8:lang", "ru");
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "v8:content", Значение);
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура ЗначениеБулево(Запись, Значение) Экспорт
Запись.ЗаписатьТекст(XMLСтрока(Значение));
КонецПроцедуры
#КонецОбласти
///////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////
// Создает xml запись описания объекта, прописывает базовые параметры
//
// Параметры:
// ТипОбъекта - Строка - Тип объекта конфигурации на английском, например, Catalog, Configuration и т.д.
//
// Возвращаемое значение:
// ЗаписьXML- Поток записи описания
//
Функция СоздатьЗапись(ТипОбъекта, ПараметрыГенерации) Экспорт
Запись = Новый ЗаписьXML();
Запись.Отступ = Ложь;
Запись.УстановитьСтроку("UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("MetaDataObject");
Запись.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.3/MDClasses");
Запись.ЗаписатьСоответствиеПространстваИмен("app", "http://v8.1c.ru/8.2/managed-application/core");
Запись.ЗаписатьСоответствиеПространстваИмен("cfg", "http://v8.1c.ru/8.1/data/enterprise/current-config");
Запись.ЗаписатьСоответствиеПространстваИмен("cmi", "http://v8.1c.ru/8.2/managed-application/cmi");
Запись.ЗаписатьСоответствиеПространстваИмен("ent", "http://v8.1c.ru/8.1/data/enterprise");
Запись.ЗаписатьСоответствиеПространстваИмен("lf", "http://v8.1c.ru/8.2/managed-application/logform");
Запись.ЗаписатьСоответствиеПространстваИмен("style", "http://v8.1c.ru/8.1/data/ui/style");
Запись.ЗаписатьСоответствиеПространстваИмен("sys", "http://v8.1c.ru/8.1/data/ui/fonts/system");
Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/core");
Запись.ЗаписатьСоответствиеПространстваИмен("v8ui", "http://v8.1c.ru/8.1/data/ui");
Запись.ЗаписатьСоответствиеПространстваИмен("web", "http://v8.1c.ru/8.1/data/ui/colors/web");
Запись.ЗаписатьСоответствиеПространстваИмен("win", "http://v8.1c.ru/8.1/data/ui/colors/windows");
Запись.ЗаписатьСоответствиеПространстваИмен("xen", "http://v8.1c.ru/8.3/xcf/enums");
Запись.ЗаписатьСоответствиеПространстваИмен("xpr", "http://v8.1c.ru/8.3/xcf/predef");
Запись.ЗаписатьСоответствиеПространстваИмен("xr", "http://v8.1c.ru/8.3/xcf/readable");
Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
Запись.ЗаписатьАтрибут("version", ПараметрыГенерации.ВерсияВыгрузки);
Запись.ЗаписатьНачалоЭлемента(ТипОбъекта);
Запись.ЗаписатьАтрибут("uuid", Строка(Новый УникальныйИдентификатор()));
Возврат Запись;
КонецФункции
// Закрывает запись описания объекта и всех открытых тэгов
//
// Параметры:
// Запись - ЗаписьXML - запись описания объекта
//
// Возвращаемое значение:
// Строка - XML описание объекта
//
Функция ЗакрытьЗапись(Запись)
Возврат ГенераторОписанийОбщий.ЗакрытьЗапись(Запись);
КонецФункции
Процедура СкопироватьInternalInfo(Запись, ИсходноеОписание)
Чтение = Новый ЧтениеXML();
Чтение.УстановитьСтроку(ИсходноеОписание);
Переносим = Ложь;
Пока Чтение.Прочитать() И Чтение.Имя <> "InternalInfo" Цикл // Ищем секцию InternalInfo
КонецЦикла;
Если Чтение.Имя <> "InternalInfo" Тогда // Не нашли секцию
Возврат;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("InternalInfo");
Пока Чтение.Прочитать() И Чтение.Имя <> "InternalInfo" Цикл
Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
Запись.ЗаписатьТекст(Строка(Новый УникальныйИдентификатор()));
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Запись.ЗаписатьНачалоЭлемента(Чтение.Имя);
Пока Чтение.СледующийАтрибут() Цикл
Запись.ЗаписатьАтрибут(Чтение.Имя, Чтение.Значение);
КонецЦикла;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Запись.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Запись.ЗаписатьКонецЭлемента(); // InternalInfo
КонецПроцедуры

View File

@ -0,0 +1,129 @@
///////////////////////////////////////////////////////////////////////////////
//
// Модуль помощник по генерации файлов описаний 1с
//
///////////////////////////////////////////////////////////////////////////////
Перем Рефлектор;
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
Функция ПолучитьUIDДляГенерацииРасширения() Экспорт
UIDы = Новый Массив();
UIDы.Добавить("9cd510cd-abfc-11d4-9434-004095e12fc7");
UIDы.Добавить("9fcd25a0-4822-11d4-9414-008048da11f9");
UIDы.Добавить("e3687481-0a87-462c-a166-9f34594f9bba");
UIDы.Добавить("9de14907-ec23-4a07-96f0-85521cb6b53b");
UIDы.Добавить("51f2d5d8-ea4d-4064-8892-82951750031e");
UIDы.Добавить("e68182ea-4237-4383-967f-90c1e3370bc7");
Возврат UIDы;
КонецФункции
// Закрывает запись описания объекта и всех открытых тэгов
//
// Параметры:
// Запись - ЗаписьXML - запись описания объекта
//
// Возвращаемое значение:
// Строка - XML описание объекта
//
Функция ЗакрытьЗапись(Запись) Экспорт
Для Инд = 1 По Запись.КонтекстПространствИмен.Глубина Цикл
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Возврат Запись.Закрыть();
КонецФункции
Процедура ЗаписатьЗначениеXML(Запись, Имя, Значение) Экспорт
Запись.ЗаписатьНачалоЭлемента(Имя);
Запись.ЗаписатьТекст(XMLСтрока(Значение));
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
Функция ПодготовитьДанныеДляЗаписи(Данные, ТипОбъекта, ФорматEDT) Экспорт
ДанныеДляЗаписи = Новый Структура();
Словарь = СтруктурыОписаний.СловарьЗаменыИменРеквизитов(ТипОбъекта, ФорматEDT);
Для Каждого Реквизит Из Данные Цикл
ДанныеДляЗаписи.Вставить(Словарь[Реквизит.Ключ], Реквизит.Значение);
КонецЦикла;
Возврат ДанныеДляЗаписи;
КонецФункции
Функция ЗаписатьДанные(Запись, Данные, ТипОбъекта, Генератор) Экспорт
ФорматEDT = Генератор = ГенераторОписанийEDT;
СвойстваОбъекта = СтруктурыОписаний.ОписаниеСвойствОбъекта(ТипОбъекта);
Если СвойстваОбъекта = Неопределено Тогда
СвойстваОбъекта = СтруктурыОписаний.БазовоеОписаниеСвойствОбъекта();
КонецЕсли;
АргументыПреобразования = Новый Массив(2);
АргументыПреобразования[0] = Запись;
Для Каждого ОписаниеСвойства Из СвойстваОбъекта Цикл
Значение = Неопределено;
Если НЕ Данные.Свойство(ОписаниеСвойства.Наименование, Значение) Тогда
Продолжить;
КонецЕсли;
Ключ = ?(ФорматEDT, ОписаниеСвойства.ЭлементEDT, ОписаниеСвойства.ЭлементDesigner);
Если ПустаяСтрока(ОписаниеСвойства.МетодПреобразования) Тогда
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, Ключ, Значение);
Иначе
Запись.ЗаписатьНачалоЭлемента(Ключ);
АргументыПреобразования[1] = Значение;
Рефлектор.ВызватьМетод(Генератор, ОписаниеСвойства.МетодПреобразования, АргументыПреобразования);
Запись.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЦикла;
Если Данные.Свойство("ObjectBelonging") Тогда
ГенераторОписанийОбщий.ЗаписатьЗначениеXML(Запись, "ObjectBelonging", Данные.ObjectBelonging);
КонецЕсли;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
Рефлектор = Новый Рефлектор();

View File

@ -191,6 +191,34 @@
КонецФункции
Функция ОписаниеОбъекта(ИмяОбъекта, ТипОбъекта = Неопределено) Экспорт
Если ТипОбъекта = Неопределено И СтрНайти(ИмяОбъекта, ".") Тогда
Возврат ОписаниеКонфигурации.ОбъектыКонфигурации.Найти(ИмяОбъекта, "ПолноеНаименование");
Иначе
Возврат ОписаниеКонфигурации.ОбъектыКонфигурации.Найти(СтрШаблон("%1.%2", ТипОбъекта, ИмяОбъекта), "ПолноеНаименование");
КонецЕсли;
КонецФункции
Функция ФорматВыгрузки() Экспорт
Возврат СтруктураКаталогов.ФорматВыгрузки();
КонецФункции
Процедура ПрочитатьОписаниеОбъекта(ОбъектКонфигурации) Экспорт
ПараметрыЧтения = СтруктурыОписаний.ПолучитьОписаниеСвойствОбъекта(ОбъектКонфигурации.Тип);
Описание = ЧитательОписаний.ПрочитатьСвойстваИзФайла(ОбъектКонфигурации.ПутьКФайлу, ПараметрыЧтения);
ОбъектКонфигурации.Описание = Описание;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////

View File

@ -2,50 +2,52 @@
## Имена
| Наименование | Наименование коллекции | Name | Collection name |
| --------------------------- | ---------------------------- | -------------------------- | --------------------------- |
| HTTPСервис | HTTPСервисы | HTTPService | HTTPServices |
| WebСервис | WebСервисы | WebService | WebServices |
| WSСсылка | WSСсылки | WSReference | WSReferences |
| БизнесПроцесс | БизнесПроцессы | BusinessProcess | BusinessProcesses |
| ВнешнийИсточникиДанных | ВнешниеИсточникиДанных | ExternalDataSource | ExternalDataSources |
| ГруппаКоманд | ГруппыКоманд | CommandGroup | CommandGroups |
| Документ | Документы | Document | Documents |
| ЖурналДокументов | ЖурналыДокументов | DocumentJournal | DocumentJournals |
| Задача | Задачи | Task | Tasks |
| Интерфейс | Интерфейсы | Interface | Interfaces |
| Константа | Константы | Constant | Constants |
| КритерийОтбора | КритерииОтбора | FilterCriterion | FilterCriteria |
| НумераторДокументов | НумераторыДокументов | DocumentNumerator | DocumentNumerators |
| Обработка | Обработки | DataProcessor | DataProcessors |
| ОбщаяКартинка | ОбщиеКартинки | CommonPicture | CommonPictures |
| ОбщаяКоманда | ОбщиеКоманды | CommonCommand | CommonCommands |
| ОбщийМакет | ОбщиеМакеты | CommonTemplate | CommonTemplates |
| ОбщийМодуль | ОбщиеМодули | CommonModule | CommonModules |
| ОбщийРеквизит | ОбщиеРеквизиты | CommonAttribute | CommonAttributes |
| ОбщаяФорм | ОбщиеФормы | CommonForm | CommonForms |
| ОпределяемыйТип | ОпределяемыеТипы | DefinedType | DefinedTypes |
| Отчет | Отчеты | Report | Reports |
| ПакетXDTO | ПакетыXDTO | XDTOPackage | XDTOPackages |
| ПараметрСеанса | ПараметрыСеанса | SessionParameter | SessionParameters |
| ПараметрФункциональныхОпций | ПараметрыФункциональныхОпций | FunctionalOptionsParameter | FunctionalOptionsParameters |
| Перечисление | Перечисления | Enum | Enums |
| ПланВидовРасчета | ПланыВидовРасчета | ChartOfCalculationTypes | ChartsOfCalculationTypes |
| ПланВидовХарактеристик | ПланыВидовХарактеристик | ChartOfCharacteristicTypes | ChartsOfCharacteristicTypes |
| ПланОбмена | ПланыОбмена | ExchangePlan | ExchangePlans |
| ПланСчетов | ПланыСчетов | ChartOfAccounts | ChartsOfAccounts |
| ПодпискаНаСобытия | ПодпискиНаСобытия | EventSubscription | EventSubscriptions |
| Подсистема | Подсистемы | Subsystem | Subsystems |
| Последовательность | Последовательности | Sequence | Sequences |
| РегистрБухгалтерии | РегистрыБухгалтерии | AccountingRegister | AccountingRegisters |
| РегистрНакопления | РегистрыНакопления | AccumulationRegister | AccumulationRegisters |
| РегистрРасчета | РегистрыРасчета | CalculationRegister | CalculationRegisters |
| РегистрСведений | РегистрыСведений | InformationRegister | InformationRegisters |
| РегламентноеЗадание | РегламентныеЗадания | ScheduledJob | ScheduledJobs |
| Роль | Роли | Role | Roles |
| Справочник | Справочники | Catalog | Catalogs |
| Стиль | Стили | Style | Styles |
| ФункциональнаяОпция | ФункциональныеОпции | FunctionalOption | FunctionalOptions |
| ХранилищеНастроек | ХранилищаНастроек | SettingsStorage | SettingsStorages |
| ЭлементСтиля | ЭлементыСтиля | StyleItem | StyleItems |
| Язык | Языки | Language | Languages |
| Наименование | НаименованиеКоллекции | НаименованиеEng | НаименованиеКоллекцииEng | ПорождаемыеТипы |
| --------------------------- | ---------------------------- | -------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| HTTPСервис | HTTPСервисы | HTTPService | HTTPServices | |
| WebСервис | WebСервисы | WebService | WebServices | |
| WSСсылка | WSСсылки | WSReference | WSReferences | |
| БизнесПроцесс | БизнесПроцессы | BusinessProcess | BusinessProcesses | Object Ref Selection List Manager RoutePointRef |
| ВнешнийИсточникиДанных | ВнешниеИсточникиДанных | ExternalDataSource | ExternalDataSources | |
| ГруппаКоманд | ГруппыКоманд | CommandGroup | CommandGroups | |
| Документ | Документы | Document | Documents | Object Ref Selection List Manager |
| ЖурналДокументов | ЖурналыДокументов | DocumentJournal | DocumentJournals | Selection List Manager |
| Задача | Задачи | Task | Tasks | Object Ref Selection List Manager |
| Интерфейс | Интерфейсы | Interface | Interfaces | |
| Константа | Константы | Constant | Constants | Manager ValueManager |
| КритерийОтбора | КритерииОтбора | FilterCriterion | FilterCriteria | Manager List |
| НумераторДокументов | НумераторыДокументов | DocumentNumerator | DocumentNumerators | |
| Обработка | Обработки | DataProcessor | DataProcessors | Object Manager |
| ОбщаяКартинка | ОбщиеКартинки | CommonPicture | CommonPictures | |
| ОбщаяКоманда | ОбщиеКоманды | CommonCommand | CommonCommands | |
| ОбщийМакет | ОбщиеМакеты | CommonTemplate | CommonTemplates | |
| ОбщийМодуль | ОбщиеМодули | CommonModule | CommonModules | |
| ОбщийРеквизит | ОбщиеРеквизиты | CommonAttribute | CommonAttributes | |
| ОбщаяФорм | ОбщиеФормы | CommonForm | CommonForms | |
| ОпределяемыйТип | ОпределяемыеТипы | DefinedType | DefinedTypes | DefinedType |
| Отчет | Отчеты | Report | Reports | Object Manager |
| ПакетXDTO | ПакетыXDTO | XDTOPackage | XDTOPackages | |
| ПараметрСеанса | ПараметрыСеанса | SessionParameter | SessionParameters | |
| ПараметрФункциональныхОпций | ПараметрыФункциональныхОпций | FunctionalOptionsParameter | FunctionalOptionsParameters | |
| Перечисление | Перечисления | Enum | Enums | Ref Manager List |
| ПланВидовРасчета | ПланыВидовРасчета | ChartOfCalculationTypes | ChartsOfCalculationTypes | Object Ref Selection List Manager DisplacingCalculationTypes DisplacingCalculationTypesRow BaseCalculationTypes BaseCalculationTypesRow LeadingCalculationTypes LeadingCalculationTypesRow |
| ПланВидовХарактеристик | ПланыВидовХарактеристик | ChartOfCharacteristicTypes | ChartsOfCharacteristicTypes | Object Ref Selection List Manager Characteristic |
| ПланОбмена | ПланыОбмена | ExchangePlan | ExchangePlans | Object Ref Selection List Manager |
| ПланСчетов | ПланыСчетов | ChartOfAccounts | ChartsOfAccounts | Object Ref Selection List Manager ExtDimensionTypes ExtDimensionTypesRow |
| ПодпискаНаСобытия | ПодпискиНаСобытия | EventSubscription | EventSubscriptions | |
| Подсистема | Подсистемы | Subsystem | Subsystems | |
| Последовательность | Последовательности | Sequence | Sequences | Record Manager RecordSet |
| РегистрБухгалтерии | РегистрыБухгалтерии | AccountingRegister | AccountingRegisters | Record Manager RecordSet RecordKey Selection List ExtDimensions |
| РегистрНакопления | РегистрыНакопления | AccumulationRegister | AccumulationRegisters | Record Manager RecordSet RecordKey Selection List |
| РегистрРасчета | РегистрыРасчета | CalculationRegister | CalculationRegisters | Record Manager Selection List RecordSet RecordKey Recalcs |
| РегистрСведений | РегистрыСведений | InformationRegister | InformationRegisters | Record Manager RecordSet RecordKey Selection List RecordManager |
| РегламентноеЗадание | РегламентныеЗадания | ScheduledJob | ScheduledJobs | |
| Роль | Роли | Role | Roles | |
| Справочник | Справочники | Catalog | Catalogs | Object Ref Selection List Manager |
| Стиль | Стили | Style | Styles | |
| ФункциональнаяОпция | ФункциональныеОпции | FunctionalOption | FunctionalOptions | |
| ХранилищеНастроек | ХранилищаНастроек | SettingsStorage | SettingsStorages | Manager |
| ЭлементСтиля | ЭлементыСтиля | StyleItem | StyleItems | |
| Язык | Языки | Language | Languages | |
| Конфигурация | Конфигурации | Configuration | Configurations | |
| Расширение | Расширения | Extension | Extensions | |

View File

@ -0,0 +1,41 @@
# Свойства объектов конфигурации
## Реквизиты Default
| Наименование | ЭлементEDT | ЭлементDesigner | МетодПреобразования |
| ------------ | ---------- | --------------- | ------------------- |
| Наименование | name | Name | |
| Синоним | synonym | Synonym | МногоязычнаяСтрока |
## Реквизиты Configuration
| Наименование | ЭлементEDT | ЭлементDesigner | МетодПреобразования |
| ------------ | ---------- | --------------- | ------------------- |
| Наименование | name | Name | |
| Синоним | synonym | Synonym | МногоязычнаяСтрока |
## Реквизиты Extension
| Наименование | ЭлементEDT | ЭлементDesigner | МетодПреобразования |
| -------------- | ----------------------------- | ----------------------------- | ------------------- |
| Наименование | name | Name | |
| Синоним | synonym | Synonym | МногоязычнаяСтрока |
| Принадлежность | objectBelonging | ObjectBelonging | |
| ПрефиксИмен | namePrefix | NamePrefix | |
| Назначение | ConfigurationExtensionPurpose | ConfigurationExtensionPurpose | |
## Реквизиты CommonModule
| Наименование | ЭлементEDT | ЭлементDesigner | МетодПреобразования | ЗначениеПоУмолчанию |
| ----------------------- | ------------------------- | ------------------------- | ------------------- | ------------------- |
| Наименование | name | Name | | |
| Синоним | synonym | Synonym | МногоязычнаяСтрока | |
| Комментарий | comment | Comment | | |
| Глобальный | global | Global | ЗначениеБулево | false |
| Клиент | clientManagedApplication | ClientManagedApplication | ЗначениеБулево | false |
| КлиентОбычноеПриложение | ClientOrdinaryApplication | ClientOrdinaryApplication | ЗначениеБулево | false |
| Сервер | server | Server | ЗначениеБулево | true |
| ВнешнееСоединение | ExternalConnection | ExternalConnection | ЗначениеБулево | false |
| ВызовСервера | ServerCall | ServerCall | ЗначениеБулево | false |
| Привилегированный | Privileged | Privileged | ЗначениеБулево | false |
| ПовторноеИспользование | ReturnValuesReuse | ReturnValuesReuse | | DontUse |

View File

@ -0,0 +1,17 @@
#Использовать "..\ГенераторОписаний"
Функция СоздатьРасширение(Формат, КаталогИсходниковРасширения) Экспорт
Генератор = Новый ГенераторРасширений(Формат, КаталогИсходниковРасширения);
Возврат Генератор;
КонецФункции
Функция ПолучитьОписаниеОбъекта(ТипОбъекта) Экспорт
ОписаниеОбъекта = СтруктурыОписаний.СоздатьСтруктураОбъекта(ТипОбъекта);
Возврат ОписаниеОбъекта;
КонецФункции

View File

@ -0,0 +1,54 @@
Процедура ЗаписатьОписаниеКонфигурацииXML(ОписаниеКонфигурации, ИмяФайла) Экспорт
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("configuration");
ЗаписатьЗначениеXML(ЗаписьXML, ОписаниеКонфигурации);
ЗаписьXML.ЗаписатьКонецЭлемента();
Текст = ЗаписьXML.Закрыть();
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(Текст);
ТекстовыйДокумент.Записать(ИмяФайла);
КонецПроцедуры
Процедура ЗаписатьЗначениеXML(ЗаписьXML, Знач Значение)
Если ТипЗнч(Значение) = Тип("Структура") ИЛИ ТипЗнч(Значение) = Тип("Соответствие") Тогда
Для Каждого Поле Из Значение Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента(Поле.Ключ);
ЗаписатьЗначениеXML(ЗаписьXML, Поле.Значение);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
Для Каждого Поле Из Значение Цикл
ЗаписатьЗначениеXML(ЗаписьXML, Поле);
КонецЦикла;
ИначеЕсли ТипЗнч(Значение) = Тип("ТаблицаЗначений") Тогда
Для Каждого Поле Из Значение Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("row");
Для Каждого Колонка Из Значение.Колонки Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента(Колонка.Имя);
ЗаписатьЗначениеXML(ЗаписьXML, Поле[Колонка.Имя]);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
Иначе
ЗаписьXML.ЗаписатьТекст(XMLСтрока(Значение));
КонецЕсли;
КонецПроцедуры

View File

@ -4,6 +4,8 @@
//
///////////////////////////////////////////////////////////////////////////////
Перем СвойстваОбъектов;
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
@ -15,12 +17,13 @@
ОбъектыКонфигурации = Новый ТаблицаЗначений;
ОбъектыКонфигурации.Колонки.Добавить("Наименование");
ОбъектыКонфигурации.Колонки.Добавить("Тип");
ОбъектыКонфигурации.Колонки.Добавить("ПолноеНаименование");
ОбъектыКонфигурации.Колонки.Добавить("ПутьКФайлу");
ОбъектыКонфигурации.Колонки.Добавить("ПутьККаталогу");
ОбъектыКонфигурации.Колонки.Добавить("Подсистемы");
ОбъектыКонфигурации.Колонки.Добавить("Описание");
ОбъектыКонфигурации.Колонки.Добавить("Родитель");
Возврат ОбъектыКонфигурации;
КонецФункции
@ -42,7 +45,7 @@
КонецФункции
Функция ТаблицаОписанияПодсистем() Экспорт
ОписаниеПодсистем = Новый ТаблицаЗначений;
ОписаниеПодсистем.Колонки.Добавить("ОбъектМетаданных");
ОписаниеПодсистем.Колонки.Добавить("Имя");
@ -177,7 +180,7 @@
ДобавитьВОписание(ДанныеОписания, "ХранилищаНастроек", "SettingsStorages", , , Истина);
ДобавитьВОписание(ДанныеОписания, "ЭлементыСтиля", "StyleItems", , , Истина);
ДобавитьВОписание(ДанныеОписания, "Языки", "Languages", , , Истина);
Возврат ДанныеОписания;
КонецФункции
@ -191,12 +194,12 @@
ДобавитьВОписание(ДанныеОписания, "Пояснение", "Explanation", Истина);
ДобавитьВОписание(ДанныеОписания, "Картинка", "Picture");
ДобавитьВОписание(ДанныеОписания, "Состав", "Content", , "ПрочитатьСостав", Истина);
Возврат ДанныеОписания;
КонецФункции
Функция БазовоеОписание()
Функция БазовоеОписание() Экспорт
ДанныеОписания = Новый Структура();
ДобавитьВОписание(ДанныеОписания, "Наименование", "Name");
@ -207,6 +210,20 @@
КонецФункции
Функция ПолучитьОписаниеСвойствОбъекта(ТипОбъекта) Экспорт
ДанныеОписания = Новый Структура();
Для Каждого Стр Из ОписаниеСвойствОбъекта(ТипОбъекта) Цикл
ДобавитьВОписание(ДанныеОписания, Стр.Наименование, Стр.ЭлементDesigner, , Стр.МетодПреобразования);
КонецЦикла;
Возврат ДанныеОписания;
КонецФункции
#КонецОбласти
Функция ИменаТиповМетаданных() Экспорт
@ -246,11 +263,57 @@
Функция ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию() Экспорт
Возврат Новый Структура(
"Наименование, Тип, ПутьКФайлу, ПутьККаталогу, Подсистемы, Описание, Родитель",
"", "", "", "", Новый Массив);
"Наименование, Тип, ПолноеНаименование, ПутьКФайлу, ПутьККаталогу, Подсистемы, Описание, Родитель",
"", "", "", "", "", Новый Массив);
КонецФункции
Функция СоздатьСтруктураОбъекта(ТипОбъекта) Экспорт
Свойства = ОписаниеСвойствОбъекта(ТипОбъекта);
Если Свойства = Неопределено Тогда
Свойства = БазовоеОписаниеСвойствОбъекта();
КонецЕсли;
ЕстьЗначенияПоУмолчанию = Свойства.Колонки.Найти("ЗначениеПоУмолчанию") <> Неопределено;
Данные = Новый Структура();
Для Каждого Описание Из Свойства Цикл
Если ЕстьЗначенияПоУмолчанию Тогда
Данные.Вставить(Описание.Наименование, Описание.ЗначениеПоУмолчанию);
Иначе
Данные.Вставить(Описание.Наименование);
КонецЕсли;
КонецЦикла;
Возврат Данные;
КонецФункции
Функция ОписаниеСвойствОбъекта(ТипОбъекта) Экспорт
Возврат СвойстваОбъектов[ТипыОбъектовКонфигурации.НормализоватьИмя(ТипОбъекта)];
КонецФункции
Функция БазовоеОписаниеСвойствОбъекта() Экспорт
Возврат СвойстваОбъектов["Default"];
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
@ -259,4 +322,38 @@
Описание.Вставить(Имя, Новый Структура("Поле, Многоязычный, ФункцияПреобразования, Коллекция", ИмяПоля, Многоязычный, ФункцияПреобразования, Коллекция));
КонецПроцедуры
КонецПроцедуры
Процедура ЗагрузитьСвойстваОбъектов()
ФайлОписаний = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "Макеты", "СвойстваОбъектов.md");
Чтение = Новый ЧтениеТекста();
Чтение.Открыть(ФайлОписаний, КодировкаТекста.UTF8);
СвойстваОбъектов = Новый Соответствие();
Пока Истина Цикл
СтрокаЗаголовка = Утилиты.НайтиСледующийЗаголовокMarkdown(Чтение, "## Реквизиты");
Если СтрокаЗаголовка = Неопределено Тогда
Прервать;
КонецЕсли;
ИмяТипа = СокрЛП(Сред(СтрокаЗаголовка, 13));
ИмяТипа = ТипыОбъектовКонфигурации.НормализоватьИмя(ИмяТипа);
Свойства = Утилиты.ПрочитатьТаблицуMarkdown(Чтение);
СвойстваОбъектов.Вставить(ИмяТипа, Свойства);
КонецЦикла;
Чтение.Закрыть();
КонецПроцедуры
ЗагрузитьСвойстваОбъектов();

View File

@ -24,7 +24,7 @@
// * НаименованиеКоллекцииEng - Английское наименование типа во множественном числе
//
Функция ОписаниеТипаПоИмени(ИмяТипаОбъектаКонфигурации) Экспорт
Возврат ХэшПоиска[ВРег(ИмяТипаОбъектаКонфигурации)];
КонецФункции
@ -40,6 +40,8 @@
//
Функция НормализоватьИмя(ИмяТипаОбъектаКонфигурации) Экспорт
ЗагрузитьОписаниеТиповОбъектовКонфигурации();
Описание = ХэшПоиска[ВРег(ИмяТипаОбъектаКонфигурации)];
Если Описание = Неопределено Тогда
@ -72,6 +74,17 @@
КонецФункции
// Возвращает имя типа общего модуля
//
// Возвращаемое значение:
// Строка - Имя типа
//
Функция ИмяТипаОбщийМодуль() Экспорт
Возврат НормализоватьИмя("ОбщийМодуль");
КонецФункции
// Возвращает имя типа конфигурации
//
// Возвращаемое значение:
@ -105,61 +118,31 @@
Процедура ЗагрузитьОписаниеТиповОбъектовКонфигурации()
ОбъектыКонфигурации = Новый Массив();
ХэшПоиска = Новый Соответствие();
Если ОбъектыКонфигурации <> Неопределено Тогда
Возврат;
КонецЕсли;
ФайлОписаний = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "Макеты", "ОбъектыКонфигурации.md");
Чтение = Новый ЧтениеТекста();
Чтение.Открыть(ФайлОписаний, КодировкаТекста.UTF8);
Пока Истина Цикл // Позиционируемся на нужную строку
Утилиты.НайтиСледующийЗаголовокMarkdown(Чтение, "## Имена");
ОбъектыКонфигурации = Утилиты.ПрочитатьТаблицуMarkdown(Чтение);
ХэшПоиска = Новый Соответствие();
Для Каждого СтрокаОписание Из ОбъектыКонфигурации Цикл
Строка = Чтение.ПрочитатьСтроку();
СтрокаОписание.ПорождаемыеТипы = СтрРазделить(СтрокаОписание.ПорождаемыеТипы, " ", Ложь);
Если Строка = Неопределено Тогда
Прервать;
КонецЕсли;
Если Строка = "## Имена" Тогда
Чтение.ПрочитатьСтроку(); // Пропускаем пустую строку
Чтение.ПрочитатьСтроку(); // Пропускаем заголовок таблицы
Чтение.ПрочитатьСтроку(); // Пропускаем заголовок таблицы
Прервать;
КонецЕсли;
КонецЦикла;
Пока Истина Цикл
Строка = Чтение.ПрочитатьСтроку();
Если Строка = Неопределено Тогда
Прервать;
КонецЕсли;
Если НЕ СтрНачинаетсяС(Строка, "|") Тогда
Прервать;
КонецЕсли;
ЧастиСтроки = СтрРазделить(Строка, "|");
Описание = Новый Структура("Наименование, НаименованиеКоллекции, НаименованиеEng, НаименованиеКоллекцииEng",
СокрЛП(ЧастиСтроки[1]), СокрЛП(ЧастиСтроки[2]), СокрЛП(ЧастиСтроки[3]), СокрЛП(ЧастиСтроки[4]));
ОбъектыКонфигурации.Добавить(Описание);
ХэшПоиска.Вставить(ВРег(Описание.Наименование), Описание);
ХэшПоиска.Вставить(ВРег(Описание.НаименованиеКоллекции), Описание);
ХэшПоиска.Вставить(ВРег(Описание.НаименованиеEng), Описание);
ХэшПоиска.Вставить(ВРег(Описание.НаименованиеКоллекцииEng), Описание);
ХэшПоиска.Вставить(ВРег(СтрокаОписание.Наименование), СтрокаОписание);
ХэшПоиска.Вставить(ВРег(СтрокаОписание.НаименованиеКоллекции), СтрокаОписание);
ХэшПоиска.Вставить(ВРег(СтрокаОписание.НаименованиеEng), СтрокаОписание);
ХэшПоиска.Вставить(ВРег(СтрокаОписание.НаименованиеКоллекцииEng), СтрокаОписание);
КонецЦикла;

View File

@ -29,6 +29,21 @@
КонецФункции
// Записывает текст в файл
//
// Параметры:
// ИмяФайла - Строка - Путь к файлу
// Текст - Строка - Записываемый текст
//
Процедура ЗаписатьФайл(ИмяФайла, Текст) Экспорт
Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM);
Запись.Записать(Текст);
Запись.Закрыть();
КонецПроцедуры
// Создает все необходимы каталоги по пути
//
// Параметры:
@ -91,6 +106,100 @@
КонецФункции
Функция ПрочитатьТаблицуMarkdown(Чтение) Экспорт
ЗаголовокЗагружен = Ложь;
ТаблицаДанных = Новый ТаблицаЗначений();
Строка = Чтение.ПрочитатьСтроку();
Пока Строка = "" Цикл
Строка = Чтение.ПрочитатьСтроку();
КонецЦикла;
Пока Истина Цикл
Если Строка = Неопределено Тогда
Прервать;
КонецЕсли;
Если НЕ СтрНачинаетсяС(Строка, "|") Тогда
Прервать;
КонецЕсли;
ЧастиСтроки = СтрРазделить(Строка, "|");
Если НЕ ЗаголовокЗагружен Тогда
Для Инд = 1 По ЧастиСтроки.ВГраница() Цикл
ТаблицаДанных.Колонки.Добавить(СокрЛП(ЧастиСтроки[Инд]));
КонецЦикла;
ЗаголовокЗагружен = Истина;
Чтение.ПрочитатьСтроку();
Иначе
ЧастиСтроки = СтрРазделить(Строка, "|");
СтрокаДанных = ТаблицаДанных.Добавить();
Для Инд = 1 По ЧастиСтроки.ВГраница() Цикл
СтрокаДанных[Инд - 1] = СокрЛП(ЧастиСтроки[Инд]);
КонецЦикла;
КонецЕсли;
Строка = Чтение.ПрочитатьСтроку();
КонецЦикла;
Возврат ТаблицаДанных;
КонецФункции
Функция НайтиСледующийЗаголовокMarkdown(Чтение, ТекстЗаголовка = Неопределено) Экспорт
Если ТекстЗаголовка = Неопределено Тогда
СтрокаПоиска = "#";
Иначе
СтрокаПоиска = ТекстЗаголовка;
КонецЕсли;
Пока Истина Цикл // Позиционируемся на нужную строку
Строка = Чтение.ПрочитатьСтроку();
Если Строка = Неопределено Тогда
Прервать;
КонецЕсли;
Если СтрНачинаетсяС(Строка, СтрокаПоиска) Тогда
Возврат Строка;
КонецЕсли;
КонецЦикла;
КонецФункции
///////////////////////////////////////////////////////////////////
// Служебный функционал
///////////////////////////////////////////////////////////////////

View File

@ -127,6 +127,7 @@
ЧастиСтроки = СтрРазделить(ПолноеИмяОбъекта, ".");
СтрокаОбъекта.Тип = ТипыОбъектовКонфигурации.НормализоватьИмя(ЧастиСтроки[0]);
СтрокаОбъекта.Наименование = ЧастиСтроки[1];
СтрокаОбъекта.ПолноеНаименование = ПолноеИмяОбъекта;
КонецЦикла;
@ -146,6 +147,7 @@
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЧтения
// Читает строку на разных языках
//
// Параметры:
@ -154,9 +156,9 @@
// Возвращаемое значение:
// Строка - Данные строки
//
Функция МногоЯзыковаяСтрока(Знач Значение) Экспорт
Функция МногоязычнаяСтрока(Знач Значение) Экспорт
Регулярка = РегулярныеВыражения.МногоЯзыковаяСтрока;
Регулярка = РегулярныеВыражения.МногоязычнаяСтрока;
Совпадения = Регулярка.НайтиСовпадения(Значение);
Если Совпадения.Количество() Тогда
@ -200,6 +202,14 @@
КонецФункции
Функция ЗначениеБулево(Знач Значение) Экспорт
Возврат СтрСравнить(Значение, "true") = 0;
КонецФункции
#КонецОбласти
// Читает состав подсистемы
//
// Параметры:
@ -264,7 +274,7 @@
Если НЕ ЗначениеЗаполнено(ФункцияПреобразования) И Параметр.Многоязычный Тогда
ФункцияПреобразования = "МногоЯзыковаяСтрока";
ФункцияПреобразования = "МногоязычнаяСтрока";
КонецЕсли;
@ -294,5 +304,5 @@
РегулярныеВыражения = Новый Структура();
РегулярныеВыражения.Вставить("СвойстваОписания", Новый РегулярноеВыражение("<([a-zA-Z]+)\b[^>]*>([\s\S]*?)<\/\1>"));
РегулярныеВыражения.Вставить("МногоЯзыковаяСтрока", Новый РегулярноеВыражение("<value>([\s\S]*)<\/value>"));
РегулярныеВыражения.Вставить("МногоязычнаяСтрока", Новый РегулярноеВыражение("<value>([\s\S]*)<\/value>"));
РегулярныеВыражения.Вставить("ПолучитьТип", Новый РегулярноеВыражение("<types>([\s\S]*)<\/types>"));

View File

@ -161,6 +161,7 @@
НовСтрока.Тип = ТипыОбъектовКонфигурации.НормализоватьИмя(ЧтениеXML.Имя);
ЧтениеXML.Прочитать();
НовСтрока.Наименование = ЧтениеXML.Значение;
НовСтрока.ПолноеНаименование = НовСтрока.Тип + "." + НовСтрока.Наименование;
ЧтениеXML.Прочитать();
ЧтениеXML.Прочитать();
@ -180,6 +181,8 @@
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
#Область МетодыЧтения
// Читает строку на разных языках
//
// Параметры:
@ -188,7 +191,7 @@
// Возвращаемое значение:
// Строка - Данные строки
//
Функция МногоЯзыковаяСтрока(Знач ЧтениеXML) Экспорт
Функция МногоязычнаяСтрока(Знач ЧтениеXML) Экспорт
Имя = ЧтениеXML.Имя;
@ -242,6 +245,14 @@
КонецФункции
Функция ЗначениеБулево(Знач Значение) Экспорт
Возврат СтрСравнить(Значение, "true") = 0;
КонецФункции
#КонецОбласти
// Читает состав подсистемы
//
// Параметры:
@ -341,7 +352,7 @@
Параметр = Элемент.Значение;
Если ПустаяСтрока(Параметр.ФункцияПреобразования) И Параметр.Многоязычный Тогда
ОбработчикиПолей.Вставить(ВРег(Параметр.Поле), "МногоЯзыковаяСтрока");
ОбработчикиПолей.Вставить(ВРег(Параметр.Поле), "МногоязычнаяСтрока");
ИначеЕсли НЕ ПустаяСтрока(Параметр.ФункцияПреобразования) Тогда

View File

@ -0,0 +1,5 @@
Перем EDT Экспорт;
Перем Конфигуратор_2_4 Экспорт;
EDT = "EDT";
Конфигуратор2_4 = "Designer 2.4";