bsl-parser icon indicating copy to clipboard operation
bsl-parser copied to clipboard

Непонятное поведение при изменении свойства корня конфигурации

Open vsuh opened this issue 3 years ago • 3 comments

Сначала, создается файл listFile.lst с одной строкой "Configuration" в нем. Затем делается выгрузка конфигурации в файлы с помощью v8runner:

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

В результате выгрузки из ИБ УАТ в каталоге выгрузки видим: image

Далее, пытаемся изменить свойство конфигурации "Синоним":

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

После выполнения первой строки процедуры - РазборКонфигураций.ЗагрузитьКонфигурацию(КаталогИсходников), в каталоге выгрузки создаются дерево пустых каталогов, соответствующее всем метаданным конфигурации (?). После вызова метода ЗаписьКонфигурации.СохранитьОписание(ОписаниеКорняКонфигурации) в каталоге выгрузки создается файл УправлениеАвтотранспортомСтандарт.xml в котором и сохраняется измененный синоним. Причем, UUID конфигурации в новом файле отличается от файла Configuration.xml: image

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

image

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

image

Как нужно поступать, чтобы измененное свойство корня конфигурации сохранились в файле Configuration.xml?

vsuh avatar May 15 '22 10:05 vsuh

Добрый день, @vsuh ! Столкнулся с той же самой ошибкой. Вы нашли обходное решение?

akademik1986 avatar May 27 '22 09:05 akademik1986

Пока использую костыль:

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

vsuh avatar May 27 '22 11:05 vsuh

@alkoleft FYI

theshadowco avatar Jul 29 '22 08:07 theshadowco