Forked from khorevaa/Запись данных Configuration.os
Created
January 17, 2017 14:58
-
-
Save pumbaEO/e3117e7bd7931706cf624910d09c764e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Процедура устанавливает новые параметры в исходники конфигурации | |
Процедура ЗаписатьПараметрыКонфигурации(Знач КаталогИсходныхФайлов, | |
Знач ПараметрыКонфигурации, | |
ПринудительноПерезаписать = Ложь) Экспорт | |
ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, "Configuration.xml")); | |
Если Не ФайлКонфигурации.Существует() Тогда | |
ВызватьИсключение СтрШаблон(""); | |
КонецЕсли; | |
// Чтение текщего файла Configuration.xml | |
ЧтениеXMLТекущейКофигурации = Новый ЧтениеXML; | |
ЧтениеXMLТекущейКофигурации.ОткрытьФайл(ФайлКонфигурации.ПолноеИмя); | |
ИмяФайлаРезультатаXML = ПолучитьИмяВременногоФайла(".xml"); | |
// Новый файл Configuration.xml | |
ЗаписьXMLНовойКонфигурации = Новый ЗаписьXML; | |
ЗаписьXMLНовойКонфигурации.ОткрытьФайл(ИмяФайлаРезультатаXML); | |
ЗаписьXMLНовойКонфигурации.ЗаписатьОбъявлениеXML(); | |
// Обработка не принудительной записи | |
Если НЕ ПринудительноПерезаписать Тогда | |
ПараметрыНаУстановку = Новый Структура; | |
Для Каждого КлючЗначение Из ПараметрыКонфигурации Цикл | |
Если ЗначениеЗаполнено(СокрЛП(КлючЗначение.Значение)) Тогда | |
ПараметрыНаУстановку.Вставить(КлючЗначение.ключ, КлючЗначение.Значение); | |
КонецЕсли; | |
КонецЦикла; | |
ПараметрыКонфигурации = ПараметрыНаУстановку; | |
КонецЕслИ; | |
// Чтение в цикла изначальной конфигурации | |
Пока ЧтениеXMLТекущейКофигурации.Прочитать() Цикл | |
ТипУзла = ЧтениеXMLТекущейКофигурации.ТипУзла; | |
Лог.Отладка(СтрШаблон("Начало чтение узла: %1",ЧтениеXMLТекущейКофигурации.Имя)); | |
Лог.Отладка(СтрШаблон(" тип узла: %1",ЧтениеXMLТекущейКофигурации.ТипУзла)); | |
// Раздел объявления xml пропускаем | |
Если ЧтениеXMLТекущейКофигурации.Имя = "xml" Тогда | |
Продолжить; | |
КонецЕслИ; | |
// Корневые узлы формируем заново | |
Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.НачалоЭлемента | |
И (ЧтениеXMLТекущейКофигурации.Имя = "Configuration" ИЛИ ЧтениеXMLТекущейКофигурации.Имя = "MetaDataObject") Тогда | |
Лог.Отладка(СтрШаблон("Записываю Начало элемента: %1",ЧтениеXMLТекущейКофигурации.Имя)); | |
// Формирование разделов в ручную | |
ЗаписьXMLНовойКонфигурации.ЗаписатьНачалоЭлемента(ЧтениеXMLТекущейКофигурации.Имя); | |
КоличествоАтрибутов = ЧтениеXMLТекущейКофигурации.КоличествоАтрибутов(); | |
Лог.Отладка(СтрШаблон("Количетво атрибутов: %1",КоличествоАтрибутов)); | |
// Копирование атрибутов узла | |
Пока ЧтениеXMLТекущейКофигурации.СледующийАтрибут() Цикл | |
ЗаписьXMLНовойКонфигурации.ЗаписатьАтрибут(ЧтениеXMLТекущейКофигурации.ЛокальноеИмя, | |
ЧтениеXMLТекущейКофигурации.URIПространстваИмен, | |
ЧтениеXMLТекущейКофигурации.Значение); | |
КонецЦикла; | |
// Дальше обработки нет пошли на новый цикл | |
Продолжить; | |
КонецЕсли; | |
// Все остальные разбелы нас не интересуют. | |
// Записывем как есть | |
Если НЕ (ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.НачалоЭлемента | |
И ЧтениеXMLТекущейКофигурации.Имя = "Properties") Тогда | |
ЗаписьXMLНовойКонфигурации.ЗаписатьТекущий(ЧтениеXMLТекущейКофигурации); | |
КонецЕсли; | |
// Обход всех элементов в искомом разделе Properties | |
Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.НачалоЭлемента | |
И ЧтениеXMLТекущейКофигурации.Имя = "Properties" Тогда | |
Лог.Отладка(СтрШаблон("Записываю Начало элемента: %1",ЧтениеXMLТекущейКофигурации.Имя)); | |
// Формируем новый раздел Properties | |
ЗаписьXMLНовойКонфигурации.ЗаписатьНачалоЭлемента(ЧтениеXMLТекущейКофигурации.Имя); | |
НеНадоЧитать = Ложь; | |
// Чтение до конца свойств конфигурации | |
Пока Не (ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.КонецЭлемента | |
и ЧтениеXMLТекущейКофигурации.Имя = "Properties") Цикл | |
// После записи ЗаписатьТекущий уже выполнено чтение XML далее | |
Если Не НеНадоЧитать Тогда | |
ЧтениеXMLТекущейКофигурации.Прочитать(); | |
КонецЕсли; | |
Ключ = ЧтениеXMLТекущейКофигурации.ЛокальноеИмя; | |
ТипУзла = ЧтениеXMLТекущейКофигурации.ТипУзла; | |
Если ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда | |
Лог.Отладка(СтрШаблон("Ищю ключ: %1",Ключ)); | |
// Продолжаем если нашего свойства нет | |
Если НЕ ПараметрыКонфигурации.Свойство(Ключ) Тогда | |
Сообщить(СтрШаблон("Ключ: %1 не найден",Ключ)); | |
ЗаписьXMLНовойКонфигурации.ЗаписатьТекущий(ЧтениеXMLТекущейКофигурации); | |
НеНадоЧитать = Истина; | |
Иначе | |
// Запишем новые значения для свойств | |
НовоеЗначение = ПараметрыКонфигурации[Ключ]; | |
Лог.Отладка(СтрШаблон("Записываю значение: %1 для свойства %2",НовоеЗначение,Ключ)); | |
ЗаписьXMLНовойКонфигурации.ЗаписатьНачалоЭлемента(Ключ); | |
ЗаписьXMLНовойКонфигурации.ЗаписатьТекст(НовоеЗначение); | |
ЗаписьXMLНовойКонфигурации.ЗаписатьКонецЭлемента(); | |
ЧтениеXMLТекущейКофигурации.Пропустить(); | |
НеНадоЧитать = Ложь; | |
КонецЕсли; | |
КонецЕсли; | |
КонецЦикла; | |
Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.КонецЭлемента | |
И ЧтениеXMLТекущейКофигурации.Имя = "Properties" Тогда | |
Лог.Отладка(СтрШаблон("Записываю окончание элемента: %1",ЧтениеXMLТекущейКофигурации.Имя)); | |
ЗаписьXMLНовойКонфигурации.ЗаписатьКонецЭлемента(); | |
КонецЕслИ; | |
//ЧтениеXMLТекущейКофигурации.Прочитать(); | |
КонецЕсли; | |
Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.КонецЭлемента | |
И (ЧтениеXMLТекущейКофигурации.Имя = "Configuration" ИЛИ ЧтениеXMLТекущейКофигурации.Имя = "MetaDataObject") Тогда | |
ЗаписьXMLНовойКонфигурации.ЗаписатьКонецЭлемента(); | |
КонецЕсли; | |
КонецЦикла; | |
ЗаписьXMLНовойКонфигурации.Закрыть(); | |
ЧтениеXMLТекущейКофигурации.Закрыть(); | |
// подменяем файл | |
КопироватьФайл(ИмяФайлаРезультатаXML,ФайлКонфигурации.ПолноеИмя); | |
КонецПроцедуры |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment