Имя: Пароль:
1C
1С v8
ComОбъект
,
0 noffkj
 
07.05.19
15:38
Переношу настройки пользователей из одной базы в другую. базы идентичные.
Подключаюсь через COM-соединение.

Выб = бд.ХранилищеСистемныхНастроек.Выбрать(Новый Структура("Пользователь", Юзер));
            Пока Выб.Следующий() Цикл
                
                ХранилищеСистемныхНастроек.Сохранить(Выб.КлючОбъекта,  Выб.КлючНастроек, Выб.Настройки, Выб.Представление, ПользовательИБ.Имя);
                
            КонецЦикла;

В итоге Выб.Настройки    Значение (COMОбъект)    Тип (COMОбъект) как с ним работать?

Если выполнить такой код.
Выб = ХранилищеСистемныхНастроек.Выбрать(Новый Структура("Пользователь", Строка.Пользователь));
        Пока Выб.Следующий() Цикл
            
            Настройка = Выб.Настройки;
            
        КонецЦикла;
то Настройка будет иметь значение НастройкиОкна    и ТИП НастройкиОкна.
1 sqr4
 
07.05.19
15:47
Протосек? Все что ты получаешь из удаленной базы через ком объект кроме примитивов и будет ком объектом. У этого ком объекта будут свои примитивные поля, по которым можно их как то уникально идентифицировать и сопоставить с тем что у тебя есть в базе.
Можешь еще попробовать БД.ЗначениеВСтрокуВнутр и ЗначениеИзСТрокиВнутр, это я не пробовал, только сейчас придумал
2 noffkj
 
07.05.19
16:15
ЗначениеИзСТрокиВнутр(ЗначениеВСтрокуВнутр(Выб.Настройки)) неопределено.
ЗначениеВСтрокуВнутр(Выб.Настройки)    "{"#",2319dcf1-f4ee-438d-b16f-6a145d6b9422}" Интересно что это? некий уид?

ХранилищеСистемныхНастроек.Сохранить

<Настройки> (обязательный)

Тип: Произвольный.
Содержит настройки, которые нужно сохранить в хранилище.
3 sqr4
 
07.05.19
16:18
(2) хотя да логично, у вас же ее еще нет, ее нужно создавать.
4 sqr4
 
07.05.19
16:19
(2) а если и создадите уиды все равно разные будут, так что вообще не рабочая фигня
5 noffkj
 
07.05.19
16:19
6 hhhh
 
07.05.19
16:22
(2) еще вот здесь фигня

Новый Структура("Пользователь", Юзер)

должно быть типа

бд.NewOdject("Структура"


что-то такое
7 sqr4
 
07.05.19
16:25
8 noffkj
 
07.05.19
16:33
Спасибо она у меня есть эта обработка. но она использует файлы для переноса. а мне поставлена задача несколько иная.
часть кода я стырил оттуда.
9 noffkj
 
07.05.19
16:34
(6) без разницы. всеравно никаких методов нет. ComОбъект и все.
10 sqr4
 
07.05.19
16:34
(8) задача у вас такая же, только ХМЛ достаточно передать не через файл а через ком соединение.
11 noffkj
 
07.05.19
16:41
Вот код по выгрузке из этой обработки
Выб = ХранилищеСистемныхНастроек.Выбрать(Новый Структура("Пользователь", Строка.Пользователь));
        Пока Выб.Следующий() Цикл
            Сообщить("  " + Выб.КлючОбъекта + ":" + Выб.КлючНастроек + ?(Выб.Представление = "", "", ":" + Выб.Представление));
            НСтр = Настройки.Добавить();
            НСтр.КлючНастроек = Выб.КлючНастроек;
            НСтр.КлючОбъекта = Выб.КлючОбъекта;
            НСтр.Настройки = Новый ХранилищеЗначения(Выб.Настройки);
            НСтр.Представление = Выб.Представление;
        КонецЦикла;
        
        //XDTO таблица значений в XML и обратно в 1С
        СериализаторXDTO.ЗаписатьXML(З, Настройки);
        
        З.Закрыть();

Но как только я меняю ХранилищеСистемныхНастроек.Выбрать на бд.ХранилищеСистемныхНастроек.Выбрать появляется ошибка.

{ВнешняяОбработка.ПереносДанныхПоOLEМатрица.Форма.Форма.Форма(134)}: Ошибка при вызове конструктора (ХранилищеЗначения)
                НСтр.Настройки = Новый ХранилищеЗначения(Выб.Настройки);
по причине:
Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент

делал я и так.

УдаленноеХранилище = бд.NewObject("ХранилищеЗначения",Выб.Настройки);

Всеравно ComОбъект и никаких методов полей... вобще ничего.
12 noffkj
 
07.05.19
16:42
13 noffkj
 
07.05.19
16:43
УдаленноеХранилище.Get()    COMОбъект    COMОбъект
14 hhhh
 
07.05.19
16:44
(11) Выб.Настройки это у вас объект другой базы. Зачем вы его в эту базу захерачиваете?
15 sqr4
 
07.05.19
16:47
Вам нужно из объекта З получить текст ХМЛ и его засунуть в процедуру загрузки той обработки
16 Провинциальный 1сник
 
07.05.19
16:48
(2) "ЗначениеИзСТрокиВнутр(ЗначениеВСтрокуВнутр(Выб.Настройки)) "

Неправильно, вот как надо:

ЗначениеИзСТрокиВнутр(бд.ЗначениеВСтрокуВнутр(Выб.Настройки))

Но сработает только в случае идентичных конфигураций для предопределенных значений, перечислений и объектов, сопадающих по гуидам. Ну и всякие там таблицы-списки передаются хорошо.
17 noffkj
 
07.05.19
16:49
(16) Неопределенно.
18 noffkj
 
07.05.19
16:50
(15) бд.XMLСтрока(УдаленноеХранилище) Получаю строку

AQHCBAAAAAAAAO+7v3siIyIsNjNhMmJkNWEtNjdlMy00MGQxLTg2ZGQtYzUyYTMx
MjA5ZGEyLA0KezMsMTYsIkZvcm1TZXR0aW5nc19UREkiLCJ7MywNCnswfQ0KfSIs
IlRvcExldmVsTS9fVERJIiwiezQsMSw2MzksMTY4LDEyODIsODczLDYzMSw2MzAs
MCwwLDAsMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwLDAsQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPX0iLCJcNmE1ODFlOTUtMjk4Mi00OTNk
LWFmNzYtNjk4ZjQ1NjVlZGZlXDFfVERJIiwiezQsNDI5NDk2NzI5NSwwLDAsMH0i
LCJcODc1ZmFhMjQtYmE0Yi00NzMxLTlmMTEtN2E3Y2VhOTllZjE2XDE3X1RESSIs
Ins0LDQyOTQ5NjcyOTUsMCwwLDF9IiwiXDg3NWZhYTI0LWJhNGItNDczMS05ZjEx
LTdhN2NlYTk5ZWYxNlw0X1RESSIsIns0LDQyOTQ5NjcyOTUsMCwwLDF9IiwiXDk5
NGUwYWQ3LTczYTUtNGRlMC1hNjkyLWQ4NGMzNmRlOTIzZlwxNF9UREkiLCJ7NCw0
Mjk0OTY3Mjk1LDAsMCwwfSIsIlw5OTRlMGFkNy03M2E1LTRkZTAtYTY5Mi1kODRj
MzZkZTkyM2ZcMTlfVERJIiwiezQsNDI5NDk2NzI5NSwwLDAsMH0iLCJcOTk0ZTBh
ZDctNzNhNS00ZGUwLWE2OTItZDg0YzM2ZGU5MjNmXDdfVERJIiwiezQsNDI5NDk2
NzI5NSwwLDAsMH0iLCJcOWRkNTU3ODYtMTlkYy00YTk5LWI0MjEtMjM3Njk1MWRj
MDMxXDRfVERJIiwiezQsNDI5NDk2NzI5NSwwLDAsMX0iLCJcYjc4ZjJlODAtZWM2
OC0xMWQ0LTlkY2YtMDA1MGJhZTJiYzc5XDExX1RESSIsIns0LDQyOTQ5NjcyOTUs
MCwwLDF9IiwiXGI3OGYyZTgwLWVjNjgtMTFkNC05ZGNmLTAwNTBiYWUyYmM3OVwx
N19UREkiLCJ7NCw0Mjk0OTY3Mjk1LDQsDQp7MCwwfSwNCnsxLDB9LA0KezMsMH0s
DQp7NCwwfSwwLDF9IiwiXGI3OGYyZTgwLWVjNjgtMTFkNC05ZGNmLTAwNTBiYWUy
YmM3OVw1X1RESSIsIns0LDQyOTQ5NjcyOTUsMCwwLDB9IiwiXGI3OGYyZTgwLWVj
NjgtMTFkNC05ZGNmLTAwNTBiYWUyYmM3OVw2X1RESSIsIns0LDQyOTQ5NjcyOTUs
MCwwLDB9IiwiXGI3OGYyZTgwLWVjNjgtMTFkNC05ZGNmLTAwNTBiYWUyYmM3OVw3
MF9UREkiLCJ7NCw0Mjk0OTY3Mjk1LDAsMCwwfSIsIlxmZmUyNmNiMy0zMjJiLTEx
ZDUtYjA5Ni0wMDgwNDhkYTA3NjVcMTBfVERJIiwiezQsNDI5NDk2NzI5NSwwLDAs
MX0iLCJcZmZlMjZjYjMtMzIyYi0xMWQ1LWIwOTYtMDA4MDQ4ZGEwNzY1XDRfVERJ
IiwiezQsNDI5NDk2NzI5NSwwLDAsMH0ifQ0KfQ==
19 ам794123
 
07.05.19
16:50
(0) такие вещи нужно делать не через СОМобъект, а через внешнее соединение
20 sqr4
 
07.05.19
17:05
Для типа объектам записьХМЛ, нужно использовать не сохранение а получить текст
ПОпробуй вот это изменить
   З.Закрыть();
На Перем =    З.Закрыть();
И посмотри что там в ней
21 sqr4
 
07.05.19
17:06
и не используй имя Перем
22 sqr4
 
07.05.19
17:23
и для З надо сделать так
    З.УстановитьСтроку();
23 sqr4
 
07.05.19
17:25
ну а затем
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрXML);
24 sqr4
 
07.05.19
17:44
да и вообще нахрена эта таблица значений нужна, можно и сразу в базу писать перегоняя через ХМЛ только настройки
25 noffkj
 
15.05.19
16:25
Получилось. Если кто то вдруг нарвется на эту тему выкладываю решение.

МенеджерНастроек = База.ХранилищеСистемныхНастроек;
        ТаблицаНастроек = ЧтениеНастроекИзХранилища(МенеджерНастроек, Юзер.Name);

        Для Каждого Настройка Из ТаблицаНастроек Цикл
            КлючОбъекта = Настройка.КлючОбъекта;
            КлючНастройки = Настройка.КлючНастроек;
            Попытка
                Значение = МенеджерНастроек.Загрузить(КлючОбъекта, КлючНастройки, , Юзер.Name);
                Сообщить(ТипЗНЧ(Значение));
            Исключение
                Продолжить;
            КонецПопытки;
            //ОписаниеНастроек = МенеджерНастроек.ПолучитьОписание(КлючОбъекта, КлючНастройки, Юзер.Name);
            ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, КлючНастройки, ЗначениеИзСтрокиВнутр(База.ЗначениеВСтрокуВнутр(Значение)),, ПользовательИБ.Имя);
        КонецЦикла;
26 sqr4
 
15.05.19
16:30
(25) получается уиды ну или что там вместо них совпали в базах, ну да и ладно, работает не трож)
27 noffkj
 
15.05.19
16:32
(16) был прав. Спасибо. Если бы я еще прочитал внимательно то не потратил бы зря неделю.
28 lamme
 
15.05.19
17:04
эм .. перенос данных между идентичными конфигурациями - не предлагать  ?
29 sqr4
 
15.05.19
17:12
(28) а что там и настройки пользователей можно переносить?
30 lamme
 
15.05.19
17:20
так это вроде регистр сведений ...
в не уф - рс переноситься
только с типом = хранилище не проверял.
но вроде оно выгружается как двоичные данные в хмл
31 sqr4
 
15.05.19
17:34
(30) Ну судя по коду, не хранилище, в той что у меня есть обработке нет эдакой штуки.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан