Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ComОбъект

ComОбъект
Я
   noffkj
 
07.05.19 - 15:38
Переношу настройки пользователей из одной базы в другую. базы идентичные.
Подключаюсь через COM-соединение.

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

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

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

ХранилищеСистемныхНастроек.Сохранить
<Настройки> (обязательный)

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

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

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


что-то такое
   sqr4
 
7 - 07.05.19 - 16:25
   noffkj
 
8 - 07.05.19 - 16:33
Спасибо она у меня есть эта обработка. но она использует файлы для переноса. а мне поставлена задача несколько иная.
часть кода я стырил оттуда.
   noffkj
 
9 - 07.05.19 - 16:34
(6) без разницы. всеравно никаких методов нет. ComОбъект и все.
   sqr4
 
10 - 07.05.19 - 16:34
(8) задача у вас такая же, только ХМЛ достаточно передать не через файл а через ком соединение.
 
 Рекламное место пустует
   noffkj
 
11 - 07.05.19 - 16:41
Вот код по выгрузке из этой обработки

Выб = ХранилищеСистемныхНастроек.Выбрать(Новый Структура("Пользователь", Строка.Пользователь));
        Пока Выб.Следующий() Цикл
            Сообщить("  " + Выб.КлючОбъекта + ":" + Выб.КлючНастроек + ?(Выб.Представление = "", "", ":" + Выб.Представление));
            НСтр = Настройки.Добавить();
            НСтр.КлючНастроек = Выб.КлючНастроек;
            НСтр.КлючОбъекта = Выб.КлючОбъекта;
            НСтр.Настройки = Новый ХранилищеЗначения(Выб.Настройки);
            НСтр.Представление = Выб.Представление;
        КонецЦикла;
        
        //XDTO таблица значений в XML и обратно в 1С
        СериализаторXDTO.ЗаписатьXML(З, Настройки);
        
        З.Закрыть();

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

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

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

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

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

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

Но сработает только в случае идентичных конфигураций для предопределенных значений, перечислений и объектов, сопадающих по гуидам. Ну и всякие там таблицы-списки передаются хорошо.
   noffkj
 
17 - 07.05.19 - 16:49
(16) Неопределенно.
   noffkj
 
18 - 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==
   ам794123
 
19 - 07.05.19 - 16:50
(0) такие вещи нужно делать не через СОМобъект, а через внешнее соединение
   sqr4
 
20 - 07.05.19 - 17:05
Для типа объектам записьХМЛ, нужно использовать не сохранение а получить текст
ПОпробуй вот это изменить
   З.Закрыть();
На Перем =    З.Закрыть();
И посмотри что там в ней
   sqr4
 
21 - 07.05.19 - 17:06
и не используй имя Перем
   sqr4
 
22 - 07.05.19 - 17:23
и для З надо сделать так
    З.УстановитьСтроку();
   sqr4
 
23 - 07.05.19 - 17:25
ну а затем 
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрXML);
   sqr4
 
24 - 07.05.19 - 17:44
да и вообще нахрена эта таблица значений нужна, можно и сразу в базу писать перегоняя через ХМЛ только настройки
   noffkj
 
25 - 15.05.19 - 16:25
Получилось. Если кто то вдруг нарвется на эту тему выкладываю решение.

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

        Для Каждого Настройка Из ТаблицаНастроек Цикл
            КлючОбъекта = Настройка.КлючОбъекта;
            КлючНастройки = Настройка.КлючНастроек;
            Попытка
                Значение = МенеджерНастроек.Загрузить(КлючОбъекта, КлючНастройки, , Юзер.Name);
                Сообщить(ТипЗНЧ(Значение));
            Исключение
                Продолжить;
            КонецПопытки;
            //ОписаниеНастроек = МенеджерНастроек.ПолучитьОписание(КлючОбъекта, КлючНастройки, Юзер.Name);

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует