Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Процедура устанавливает новые параметры в исходники конфигурации
- Процедура ЗаписатьПараметрыКонфигурации(Знач КаталогИсходныхФайлов,
- Знач ПараметрыКонфигурации,
- ПринудительноПерезаписать = Ложь) Экспорт
- ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, "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,ФайлКонфигурации.ПолноеИмя);
- КонецПроцедуры
Add Comment
Please, Sign In to add comment