Guest User

Untitled

a guest
Jan 17th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.87 KB | None | 0 0
  1. // Процедура устанавливает новые параметры в исходники конфигурации
  2. Процедура ЗаписатьПараметрыКонфигурации(Знач КаталогИсходныхФайлов,
  3. Знач ПараметрыКонфигурации,
  4. ПринудительноПерезаписать = Ложь) Экспорт
  5.  
  6. ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, "Configuration.xml"));
  7. Если Не ФайлКонфигурации.Существует() Тогда
  8. ВызватьИсключение СтрШаблон("");
  9. КонецЕсли;
  10.  
  11. // Чтение текщего файла Configuration.xml
  12. ЧтениеXMLТекущейКофигурации = Новый ЧтениеXML;
  13. ЧтениеXMLТекущейКофигурации.ОткрытьФайл(ФайлКонфигурации.ПолноеИмя);
  14.  
  15. ИмяФайлаРезультатаXML = ПолучитьИмяВременногоФайла(".xml");
  16.  
  17. // Новый файл Configuration.xml
  18. ЗаписьXMLНовойКонфигурации = Новый ЗаписьXML;
  19. ЗаписьXMLНовойКонфигурации.ОткрытьФайл(ИмяФайлаРезультатаXML);
  20. ЗаписьXMLНовойКонфигурации.ЗаписатьОбъявлениеXML();
  21.  
  22.  
  23. // Обработка не принудительной записи
  24. Если НЕ ПринудительноПерезаписать Тогда
  25.  
  26. ПараметрыНаУстановку = Новый Структура;
  27.  
  28. Для Каждого КлючЗначение Из ПараметрыКонфигурации Цикл
  29. Если ЗначениеЗаполнено(СокрЛП(КлючЗначение.Значение)) Тогда
  30. ПараметрыНаУстановку.Вставить(КлючЗначение.ключ, КлючЗначение.Значение);
  31. КонецЕсли;
  32. КонецЦикла;
  33.  
  34. ПараметрыКонфигурации = ПараметрыНаУстановку;
  35.  
  36. КонецЕслИ;
  37.  
  38. // Чтение в цикла изначальной конфигурации
  39. Пока ЧтениеXMLТекущейКофигурации.Прочитать() Цикл
  40.  
  41. ТипУзла = ЧтениеXMLТекущейКофигурации.ТипУзла;
  42.  
  43. Лог.Отладка(СтрШаблон("Начало чтение узла: %1",ЧтениеXMLТекущейКофигурации.Имя));
  44. Лог.Отладка(СтрШаблон(" тип узла: %1",ЧтениеXMLТекущейКофигурации.ТипУзла));
  45.  
  46. // Раздел объявления xml пропускаем
  47. Если ЧтениеXMLТекущейКофигурации.Имя = "xml" Тогда
  48. Продолжить;
  49. КонецЕслИ;
  50.  
  51.  
  52. // Корневые узлы формируем заново
  53. Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.НачалоЭлемента
  54. И (ЧтениеXMLТекущейКофигурации.Имя = "Configuration" ИЛИ ЧтениеXMLТекущейКофигурации.Имя = "MetaDataObject") Тогда
  55.  
  56. Лог.Отладка(СтрШаблон("Записываю Начало элемента: %1",ЧтениеXMLТекущейКофигурации.Имя));
  57.  
  58. // Формирование разделов в ручную
  59. ЗаписьXMLНовойКонфигурации.ЗаписатьНачалоЭлемента(ЧтениеXMLТекущейКофигурации.Имя);
  60.  
  61. КоличествоАтрибутов = ЧтениеXMLТекущейКофигурации.КоличествоАтрибутов();
  62.  
  63. Лог.Отладка(СтрШаблон("Количетво атрибутов: %1",КоличествоАтрибутов));
  64.  
  65. // Копирование атрибутов узла
  66. Пока ЧтениеXMLТекущейКофигурации.СледующийАтрибут() Цикл
  67.  
  68. ЗаписьXMLНовойКонфигурации.ЗаписатьАтрибут(ЧтениеXMLТекущейКофигурации.ЛокальноеИмя,
  69. ЧтениеXMLТекущейКофигурации.URIПространстваИмен,
  70. ЧтениеXMLТекущейКофигурации.Значение);
  71. КонецЦикла;
  72.  
  73. // Дальше обработки нет пошли на новый цикл
  74. Продолжить;
  75.  
  76. КонецЕсли;
  77.  
  78.  
  79. // Все остальные разбелы нас не интересуют.
  80. // Записывем как есть
  81. Если НЕ (ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.НачалоЭлемента
  82. И ЧтениеXMLТекущейКофигурации.Имя = "Properties") Тогда
  83. ЗаписьXMLНовойКонфигурации.ЗаписатьТекущий(ЧтениеXMLТекущейКофигурации);
  84. КонецЕсли;
  85.  
  86.  
  87. // Обход всех элементов в искомом разделе Properties
  88. Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.НачалоЭлемента
  89. И ЧтениеXMLТекущейКофигурации.Имя = "Properties" Тогда
  90.  
  91. Лог.Отладка(СтрШаблон("Записываю Начало элемента: %1",ЧтениеXMLТекущейКофигурации.Имя));
  92.  
  93. // Формируем новый раздел Properties
  94. ЗаписьXMLНовойКонфигурации.ЗаписатьНачалоЭлемента(ЧтениеXMLТекущейКофигурации.Имя);
  95.  
  96. НеНадоЧитать = Ложь;
  97.  
  98. // Чтение до конца свойств конфигурации
  99. Пока Не (ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.КонецЭлемента
  100. и ЧтениеXMLТекущейКофигурации.Имя = "Properties") Цикл
  101.  
  102. // После записи ЗаписатьТекущий уже выполнено чтение XML далее
  103. Если Не НеНадоЧитать Тогда
  104. ЧтениеXMLТекущейКофигурации.Прочитать();
  105. КонецЕсли;
  106.  
  107. Ключ = ЧтениеXMLТекущейКофигурации.ЛокальноеИмя;
  108. ТипУзла = ЧтениеXMLТекущейКофигурации.ТипУзла;
  109.  
  110. Если ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
  111.  
  112. Лог.Отладка(СтрШаблон("Ищю ключ: %1",Ключ));
  113.  
  114. // Продолжаем если нашего свойства нет
  115. Если НЕ ПараметрыКонфигурации.Свойство(Ключ) Тогда
  116. Сообщить(СтрШаблон("Ключ: %1 не найден",Ключ));
  117. ЗаписьXMLНовойКонфигурации.ЗаписатьТекущий(ЧтениеXMLТекущейКофигурации);
  118. НеНадоЧитать = Истина;
  119. Иначе
  120.  
  121.  
  122. // Запишем новые значения для свойств
  123. НовоеЗначение = ПараметрыКонфигурации[Ключ];
  124.  
  125. Лог.Отладка(СтрШаблон("Записываю значение: %1 для свойства %2",НовоеЗначение,Ключ));
  126.  
  127. ЗаписьXMLНовойКонфигурации.ЗаписатьНачалоЭлемента(Ключ);
  128. ЗаписьXMLНовойКонфигурации.ЗаписатьТекст(НовоеЗначение);
  129. ЗаписьXMLНовойКонфигурации.ЗаписатьКонецЭлемента();
  130.  
  131. ЧтениеXMLТекущейКофигурации.Пропустить();
  132.  
  133. НеНадоЧитать = Ложь;
  134.  
  135. КонецЕсли;
  136.  
  137. КонецЕсли;
  138.  
  139.  
  140. КонецЦикла;
  141.  
  142. Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.КонецЭлемента
  143. И ЧтениеXMLТекущейКофигурации.Имя = "Properties" Тогда
  144. Лог.Отладка(СтрШаблон("Записываю окончание элемента: %1",ЧтениеXMLТекущейКофигурации.Имя));
  145.  
  146. ЗаписьXMLНовойКонфигурации.ЗаписатьКонецЭлемента();
  147. КонецЕслИ;
  148.  
  149. //ЧтениеXMLТекущейКофигурации.Прочитать();
  150.  
  151. КонецЕсли;
  152.  
  153. Если ЧтениеXMLТекущейКофигурации.ТипУзла = ТипУзлаXML.КонецЭлемента
  154. И (ЧтениеXMLТекущейКофигурации.Имя = "Configuration" ИЛИ ЧтениеXMLТекущейКофигурации.Имя = "MetaDataObject") Тогда
  155.  
  156. ЗаписьXMLНовойКонфигурации.ЗаписатьКонецЭлемента();
  157. КонецЕсли;
  158.  
  159. КонецЦикла;
  160.  
  161. ЗаписьXMLНовойКонфигурации.Закрыть();
  162. ЧтениеXMLТекущейКофигурации.Закрыть();
  163.  
  164. // подменяем файл
  165. КопироватьФайл(ИмяФайлаРезультатаXML,ФайлКонфигурации.ПолноеИмя);
  166.  
  167. КонецПроцедуры
Add Comment
Please, Sign In to add comment