-
Notifications
You must be signed in to change notification settings - Fork 4
/
ИдентификаторыМетаданных.os
166 lines (114 loc) · 5.48 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
Перем ФайлКонфиг;
Перем Таблица;
Функция ТипыМетаданных()
Массив = Новый Массив();
Массив.Добавить("BusinessProcess");
Массив.Добавить("Task");
Массив.Добавить("Catalog");
Массив.Добавить("ChartOfAccounts");
Массив.Добавить("ChartOfCalculationTypes");
Массив.Добавить("ChartOfCharacteristicTypes");
Массив.Добавить("Constant");
Массив.Добавить("Document");
Массив.Добавить("ExchangePlan");
Массив.Добавить("InformationRegister");
Возврат Массив;
КонецФункции
Процедура Инициализация(Путь)
ИмяКонфига = "ConfigDumpInfo.xml";
Файл = Новый Файл(Путь);
Если Файл.Существует() Тогда
Если Файл.ЭтоФайл() И Файл.Имя = "ConfigDumpInfo.xml" Тогда
ФайлКонфиг = Файл.ПолноеИмя;
Возврат;
ИначеЕсли Файл.ЭтоКаталог() Тогда
Файл2 = Новый Файл(ОбъединитьПути(Путь, ИмяКонфига));
Если Файл2.Существует() И Файл2.ЭтоФайл() И Файл2.Имя = "ConfigDumpInfo.xml" Тогда
ФайлКонфиг = Файл2.ПолноеИмя;
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ВызватьИсключение "Файл ConfigDumpInfo.xml не найден";
КонецПроцедуры
Функция ПрочитатьТекстовыйФайл(ИмяФайла)
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
Текст = Чтение.Прочитать();
Чтение.Закрыть();
Возврат Текст;
КонецФункции
Процедура ЗаписатьТекстовыйФайл(ИмяФайла, Текст)
Запись = Новый ЗаписьТекста(
ИмяФайла,
КодировкаТекста.UTF8NoBOM,
Символы.ПС,
Ложь,
Символы.ПС);
Запись.Записать(Текст);
Запись.Закрыть();
КонецПроцедуры
Процедура ПолучитьИменаИдентификаторов()
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("Тип");
Таблица.Колонки.Добавить("Имя");
Таблица.Колонки.Добавить("УИД");
мНужныеТипы = ТипыМетаданных();
Текст = ПрочитатьТекстовыйФайл(ФайлКонфиг);
РВ = Новый РегулярноеВыражение("name=""(" + СтрСоединить(мНужныеТипы, "|") + ")\.([^.]+?)"" id=""(.+?)""");
Совпадения = РВ.НайтиСовпадения(Текст);
Для каждого Совпадение Из Совпадения Цикл
Стр = Таблица.Добавить();
Стр.Тип = Совпадение.Группы[1].Значение;
Стр.Имя = Совпадение.Группы[2].Значение;
Стр.УИД = Совпадение.Группы[3].Значение;
КонецЦикла;
КонецПроцедуры
Процедура СформироватьСкрипт()
мМассивМассивов = Новый Массив;
Шаблон = " (%1, %2, %3)";
мТекст = Новый Массив;
Для инд = 0 По Таблица.Количество()-1 Цикл
Стр = Таблица[инд];
мТекст.Добавить(СтрШаблон(Шаблон,
ПреобразоватьУИДBinary(Стр.УИД),
"'" + Стр.Тип + "'",
"'" + Стр.Имя + "'"));
Если (инд+1) % 1000 = 0 Тогда
мМассивМассивов.Добавить(мТекст);
мТекст = Новый Массив;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(мТекст) Тогда
мМассивМассивов.Добавить(мТекст);
КонецЕсли;
Скрипт = Новый Массив;
Скрипт.Добавить("
|USE [<BaseName, varchar(80),>]
|GO
|
|TRUNCATE TABLE [dbo].[_DataHistoryMetadataName]
|
|");
ШаблонВставки = "
|INSERT INTO [dbo].[_DataHistoryMetadataName]
| ([_MetadataId]
| ,[Type]
| ,[Name])
| VALUES
|%1
|GO
|
|";
Для каждого мТекст Из мМассивМассивов Цикл
Скрипт.Добавить(СтрШаблон(ШаблонВставки, СтрСоединить(мТекст, "," + Символы.ПС)));
КонецЦикла;
ЗаписатьТекстовыйФайл("СкриптВставкиМетаданных.sql", СтрСоединить(Скрипт));
КонецПроцедуры
Функция ПреобразоватьУИДBinary(УИД)
м = СтрРазделить(УИД, "-");
Binary = "0x" + м[3] + м[4] + м[2] + м[1] + м[0];
Возврат Binary;
КонецФункции
Инициализация(АргументыКоманднойСтроки[0]);
ПолучитьИменаИдентификаторов();
СформироватьСкрипт();