Имя: Пароль:
1C
1С v8
Как загрузить в таблицу config серверной базы роль выгруженную в xml
, ,
0 Vade_kirza
 
07.03.19
14:27
Злдравствуйте! Тут такая проблема, может кто-нибудь подскажет что можно сделать. Суть - есть база УТ 11.0.6.9 очень сильно перепиленная, в процессе общения выяснилась одна проблема - в базе отсутствуют пользователи у которых есть роль Администрирование. Видимо база была какая-то битая. Со слов клиента (проверено, так и есть). В момент записи новой группы доступа слетает роль Администрирование, и не просто слетает, а вообще пропадает в списке выбора ролей профилей групп доступа. К счастью нашлась какая-то копия базы годичной давности с этой же проблемой, но роль еще пока доступна. Было много чего перепробовано (чек, тестирование и т.д.) и в итоге взлетел следующий вариант: Из старой копии через "Выгрузить конфигурацию в файлы" выгружена роль Администрирование в файл .xml затем, сделали вторую базу из той же копии, воспроизвели проблему (создали группу доступа - роль пропала, конфигурацию не открыть), открыли ее через Tool1CD и в таблице config с помощью кнопки "Создать объект из файла" выбрали эту роль в xml. Затем в пользовательском режиме появилась возможность добавить эту роль в профиль групп доступа, затем открываем конфигуратор, открываем конфигурацию и копированием создаем новую роль Администрирование (потому что типовая роль снова пропадает если создать группу доступа). Все вроде бы хорошо, но вот беда - рабочая база развернута на sql и выгрузить в dt нет возможности а следовательно и открыть ее через tool1CD чтобы впихнуть эту роль. Собственно вопрос - что можно сделать в этой ситуации? может есть какой-то другой способ? или может кто подскажет как впихнуть в таблицу config эту роль из файла xml? Извините что много текста, постарался поподробнее описать проблему. Заранее спасибо за любые советы!
1 Cyberhawk
 
07.03.19
14:31
"выгрузить в dt нет возможности" // Причина?
2 Vade_kirza
 
07.03.19
14:39
(1) потому что в рабочей базе не осталось пользователей у которых есть роль Администрирование. При попытке выгрузить базу ругается "Недостаточно прав доступа"
3 Cyberhawk
 
07.03.19
14:46
Выкладывай рабочую базу в облако и логин-пароль кого-нибудь наиболее полноправного.
Народ поможет.
4 Nyoko
 
07.03.19
14:50
(0) Любые манипуляции с xml файлами конфигурации официально не разрешены.
Есть некоторые проблемы, когда я пробовал это делать, у некоторых объектов присваивались новые GUID так что при обновлении эти объекты видит как чужие.
Роль переносить так - ctrl+c , ctrl+v
5 Vade_kirza
 
07.03.19
15:14
(3) К сожалению я не могу выкладывать базу клиента. Сейчас попробую создать чистую базу из этого цф и посмотрю, воспроизведется ли проблема в новой чистой базе
6 aleks_default
 
07.03.19
16:40
А вчем проблема перенести пользователя через XML?
Берешь ПользователяИнформационнойБазы  в базе источнике, записываешь его в XML, а в базе приемнике получаешь из XML и записываешь?

ЗаписьXML     = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ИмяПользователя = СокрЛП(Объект.Наименование);
    //лПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    Если   ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя) <> Неопределено Тогда
        лПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    Иначе
        лПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТекущийОбъект.ИдентификаторПользователяИБ);
    КонецЕсли;

    Если лПользователь = Неопределено Тогда
        возврат;
    КонецЕсли;    
    
    Хранилище = Новый ХранилищеЗначения(лПользователь);
    ЗаписьXML.ЗаписатьНачалоЭлемента("Элемент");
    
    ЗаписатьXML(ЗаписьXML, Хранилище);
    ЗаписьXML.ЗаписатьКонецЭлемента();
    Результат = ЗаписьXML.Закрыть();
7 aleks_default
 
07.03.19
16:41
ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.УстановитьСтроку(дхПользовательИБ);
        Пока ЧтениеXML.Прочитать() Цикл             
            
            //       Хранилище =  XMLЗначение(Тип("ХранилищеЗначения") ,ЧтениеXML.Значение).Получить();
            Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                Если ЧтениеXML.ЛокальноеИмя = "Элемент" Тогда
                    ЧитаемХранилище = Истина;
                КонецЕсли;
            ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
                Если ЧитаемХранилище Тогда
                    ЧитаемХранилище = Не ЧитаемХранилище;
                    Попытка
                        Хранилище =  XMLЗначение(Тип("ХранилищеЗначения") ,ЧтениеXML.Значение).Получить();
                    Исключение
                        Base64Значение(ЧтениеXML.Значение).Записать("C:\temp\aaaaaaaaaaaaa");
                    КонецПопытки;
                    НовыйПользователь =  Хранилище; //.Объект.Получить();
                    
                    Если ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ) <> Неопределено Тогда
                        
                        // Удалим старого пользователя ИБ и запишем нового
                        СтарыйПользовательИБ =   ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ);
                        СтарыйПользовательИБ.Удалить();
                    КонецЕсли;    
                    
                    Попытка                    
                        НовыйПользователь.Записать();                                    
                    Исключение
                    КонецПопытки    
                  КонецЕсли
            КонецЕсли
8 Ник080808
 
07.03.19
17:15
(6) прав на администрирование нет
9 Vade_kirza
 
07.03.19
17:20
(7) Пробовал, на строчке ПользователиИнформационнойБазы говорит что недостаточно прав
10 Vade_kirza
 
07.03.19
17:22
(4) В принципе, если Вы посмотрите на релиз, Вы поймете, что клиент обновляться и не собирается))а вот то, что конфа закрыта и не внести изменения уже хуже.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.