bsl-parser
bsl-parser copied to clipboard
Непонятное поведение при изменении свойства корня конфигурации
Сначала, создается файл listFile.lst с одной строкой "Configuration" в нем.
Затем делается выгрузка конфигурации в файлы с помощью v8runner:
Процедура ВыгрузитьКонфигурациюВФайлы()
УправлениеКонфигуратором = Новый УправлениеКонфигуратором();
УправлениеКонфигуратором.УстановитьКонтекст("/IBConnectionString""Srvr=App-1; Ref='ib_uat'""", "admin", "$$$rd");
ПараметрыЗапуска = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска();
ПараметрыЗапуска.Добавить("/DumpConfigToFiles " + КаталогИсходников);
ПараметрыЗапуска.Добавить("-listFile " + СоздатьФайлСпискаВыгружаемыхОбъектов());
ПараметрыЗапуска.Добавить("/out log\unload-to-files." + ЛатИмяКонфигурации + ".log");
Попытка
Лог.Информация("Выгрузка конфигурации """ + ЛатИмяКонфигурации + """ в каталог " + КаталогИсходников);
УправлениеКонфигуратором.ВыполнитьКоманду(ПараметрыЗапуска);
В результате выгрузки из ИБ УАТ в каталоге выгрузки видим:

Далее, пытаемся изменить свойство конфигурации "Синоним":
Процедура ЗаписатьНовыйНомерРелиза()
Парсер = РазборКонфигураций.ЗагрузитьКонфигурацию(КаталогИсходников);
Конфигурация = Парсер.ОписаниеКонфигурации();
Для Каждого ОписаниеКорняКонфигурации Из Конфигурация.ОбъектыКонфигурации Цикл
Если ОписаниеКорняКонфигурации.Тип = "Configuration" Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ЧтениеКонфигурации.ПрочитатьОписание(ОписаниеКорняКонфигурации);
Если ОписаниеКорняКонфигурации.Описание.Свойство("Синоним") Тогда
СтрокаОписанияСинонима = ОписаниеКорняКонфигурации.Описание["Синоним"];
ОписаниеКорняКонфигурации.Описание["Синоним"] = ВычислитьСтрокуНовогоСинонима(СтрокаОписанияСинонима);
КонецЕсли;
ЗаписьКонфигурации.СохранитьОписание(ОписаниеКорняКонфигурации);
КонецПроцедуры
После выполнения первой строки процедуры - РазборКонфигураций.ЗагрузитьКонфигурацию(КаталогИсходников), в каталоге выгрузки создаются дерево пустых каталогов, соответствующее всем метаданным конфигурации (?).
После вызова метода ЗаписьКонфигурации.СохранитьОписание(ОписаниеКорняКонфигурации) в каталоге выгрузки создается файл УправлениеАвтотранспортомСтандарт.xml в котором и сохраняется измененный синоним. Причем, UUID конфигурации в новом файле отличается от файла Configuration.xml:

Если попытаться загрузить полученный файл УправлениеАвтотранспортомСтандарт.xml с опцией -files то получаем ошибку:
.../LoadConfigFromFiles ib.src.uat -files "УправлениеАвтотранспортомСтандарт.xml"

Если переименовать файл УправлениеАвтотранспортомСтандарт.xml в Configuration.xml и попытаться его загрузить, то получаем ошибку:

Как нужно поступать, чтобы измененное свойство корня конфигурации сохранились в файле Configuration.xml?
Добрый день, @vsuh ! Столкнулся с той же самой ошибкой. Вы нашли обходное решение?
Пока использую костыль:
Парсер = РазборКонфигураций.ЗагрузитьКонфигурацию(КаталогИсходников);
Конфигурация = Парсер.ОписаниеКонфигурации();
ОригТекстСинонима = Конфигурация.СвойстваКонфигурации.Синоним.ru;
НовыйТекстСинонима = ВычислитьСтрокуНовогоСинонима(ОригТекстСинонима);
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла, "UTF-8");
СтрокаXML = Текст.ПолучитьТекст();
СтрокаXML = СтрЗаменить(СтрокаXML, ОригТекстСинонима, НовыйТекстСинонима);
Текст.УстановитьТекст(СтрокаXML);
Текст.Записать(ИмяФайла, "UTF-8");
@alkoleft FYI