-
Notifications
You must be signed in to change notification settings - Fork 17
/
РедакторОписания.os
150 lines (103 loc) · 8.77 KB
/
РедакторОписания.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
///////////////////////////////////////////////////////////////////////////////
//
// Класс-помощник редактирования объектов конфигурации
//
///////////////////////////////////////////////////////////////////////////////
Перем Конфигурация;
Перем Лог;
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Добавляет в конфигурацию существующий файл, как модуль объекта
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
// ИмяМодуля - Строка - Тип добавляемого модуля (Module, ManagerModule...)
// ИмяФайла - Строка - Путь к добавляемому файлу
//
Процедура ДобавитьМодульОбъекта(ОбъектКонфигурации, ИмяМодуля, ИмяФайла) Экспорт
ИмяФайлаНазначения = Конфигурация.СтруктураКаталогов().ИмяФайлаМодуля(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип, ИмяМодуля);
КопироватьФайл(ИмяФайла, ИмяФайлаНазначения);
Лог.Отладка("Добавлен модуль %3.%1.%2", ОбъектКонфигурации.Наименование, ИмяМодуля, ОбъектКонфигурации.Тип);
КонецПроцедуры
// Добавляет в конфигурацию существующий файл, как общий модуль
//
// Параметры:
// ПараметрыМодуля - Структура - Свойства модуля: Наименование, Клиент, Сервер, ВызовСервера, ВнешнееСоединение, Привилегированный
// ИмяФайла - Строка - Путь к добавляемому файлу
//
Процедура ДобавитьОбщийМодуль(ПараметрыМодуля, ИмяФайла) Экспорт
ТипОбщийМодуль = ТипыОбъектовКонфигурации.ИмяТипаОбщийМодуль();
ОбъектКонфигурации = Конфигурация.ДобавитьОбъект(ТипОбщийМодуль, ПараметрыМодуля);
ДобавитьМодульОбъекта(ОбъектКонфигурации, "Module", ИмяФайла);
КонецПроцедуры
// Добавляет модуль конфигурации (модуль сеанса, приложения и т.д.)
//
// Параметры:
// ИмяМодуля - Строка - Тип добавляемого модуля (Module, ManagerModule...)
// ИмяФайла - Строка - Имя файла содержащего текст модуля
//
Процедура ДобавитьМодульКонфигурации(ИмяМодуля, ИмяФайла) Экспорт
ИмяТипаКонфигурации = ТипыОбъектовКонфигурации.ИмяТипаКонфигурации();
ИмяФайлаНазначения = Конфигурация.СтруктураКаталогов().ИмяФайлаМодуля(ИмяТипаКонфигурации, ИмяТипаКонфигурации, ИмяМодуля);
КопироватьФайл(ИмяФайла, ИмяФайлаНазначения);
Лог.Отладка("Добавлен модуль конфигурации %1", ИмяМодуля);
КонецПроцедуры
// Добавляет произвольный файл в конфигурацию, без регистрации и смс
//
// Параметры:
// ОтносительныйПуть - Строка - Путь в рамках исходников расширения
// ИсходныйФайл - Строка - Полный путь к добавляемому файлу
//
Процедура ДобавитьФайл(ОтносительныйПуть, ИсходныйФайл) Экспорт
ПолныйПуть = ОбъединитьПути(Конфигурация.СтруктураКаталогов().КорневойКаталог(), ОтносительныйПуть);
Утилиты.СоздатьРекурсивноКаталоги((Новый Файл(ПолныйПуть)).Путь);
КопироватьФайл(ИсходныйФайл, ПолныйПуть);
КонецПроцедуры
// Создает поток записи описания объекта для ручного формирования описания
//
// Параметры:
// ОбъектКонфигурации - СтрокаТаблицыЗначений - Описание объекта конфигурации. См. СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации
//
// Возвращаемое значение:
// ЗаписьXML - Поток записи описания
//
Функция СоздатьПотокЗаписиОписания(ОбъектКонфигурации) Экспорт
ПараметрыЗаписи = Конфигурация.ПараметрыЗаписи();
ИмяФайла = ПараметрыЗаписи.СтруктураКаталогов.ИмяФайлаОписанияОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип);
Запись = ПараметрыЗаписи.ГенераторОписаний.СоздатьЗапись(ОбъектКонфигурации.Тип, ПараметрыЗаписи.ПараметрыГенерации, ИмяФайла);
Возврат Запись;
КонецФункции
// Выполняет запись в файл Configuration
// В отличии от стандартной записи, этот метод выполняет вставку записей в конец тэга ChildObjects, без модификации остальных записей
//
// Параметры:
// Объекты - Массив - Массив регистрируемых объектов
//
Процедура ДописатьРегистрациюОбъектов(Объекты) Экспорт
ПараметрыЗаписи = Конфигурация.ПараметрыЗаписи();
ФайлОписания = Конфигурация.СтруктураКаталогов().ИмяФайлаОписанияКонфигурации();
ФайлОписанияORIG = ФайлОписания + ".orig";
КопироватьФайл(ФайлОписания, ФайлОписанияORIG);
Чтение = Новый ЧтениеXML();
Чтение.ОткрытьФайл(ФайлОписанияORIG);
Запись = ПараметрыЗаписи.ГенераторОписаний.СоздатьЗапись("Configuration", ПараметрыЗаписи.ПараметрыГенерации, ФайлОписания);
Чтение.ПерейтиКСодержимому();
Чтение.Прочитать();
ОбработкаXML.СкопироватьДанныеXMLДоТэга(Чтение, Запись, "ChildObjects"); // Скопируем данные до тэга
ОбработкаXML.СкопироватьВложенныеДанныеXML(Чтение, Запись, Ложь); // Скопируем содержимое
Для Каждого Объект Из Объекты Цикл
ПараметрыЗаписи.ГенераторОписаний.ЗарегистрироватьОбъектВКонфигурации(Объект, Запись);
КонецЦикла;
ОбработкаXML.СкопироватьДанныеXMLДоКонца(Чтение, Запись, Истина);
Чтение.Закрыть();
Запись.Закрыть();
УдалитьФайлы(ФайлОписанияORIG);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
Процедура ПриСозданииОбъекта(РедактируемаяКонфигурация)
Конфигурация = РедактируемаяКонфигурация;
Лог = ПараметрыПродукта.ПолучитьЛог();
КонецПроцедуры