Имя: Пароль:
1C
1С v8
Передаю таблицу по com соединению, используя сериализацию. Как получить таблицу назад
,
0 Ivan_495
 
25.12.17
13:26
Передаю таблицу по com соединению, используя сериализацию. Как получить таблицу назад?

Соединение82 = Соединение82_.Connect(СтрокаПодключения);
    
    ТипыПериод = Новый Массив();
    ТипыПериод.Добавить(Тип("Дата"));    
    
    ТипыСтрока = Новый Массив();
    ТипыСтрока.Добавить(Тип("Строка"));
    
    ТипыЧисло = Новый Массив();
    ТипыЧисло.Добавить(Тип("Число"));    
    
    ТаблицаНовая = Новый ТаблицаЗначений;
    ТаблицаНовая.Колонки.Добавить("ДатаДокумента",          Новый ОписаниеТипов(ТипыПериод));
    ТаблицаНовая.Колонки.Добавить("Период",                 Новый ОписаниеТипов(ТипыПериод));
    ТаблицаНовая.Колонки.Добавить("PostingDate",            Новый ОписаниеТипов(ТипыПериод));
    ТаблицаНовая.Колонки.Добавить("IDDoc",                  Новый ОписаниеТипов(ТипыСтрока));
    ТаблицаНовая.Колонки.Добавить("ПредставлениеДокумента", Новый ОписаниеТипов(ТипыСтрока));
    ТаблицаНовая.Колонки.Добавить("СчетДт",                 Новый ОписаниеТипов(ТипыСтрока));
    ТаблицаНовая.Колонки.Добавить("СчетКт",                 Новый ОписаниеТипов(ТипыСтрока));
    ТаблицаНовая.Колонки.Добавить("Сумма",                  Новый ОписаниеТипов(ТипыЧисло));
    
    
        НоваяСтрока = ТаблицаНовая.Добавить();
        НоваяСтрока.ДатаДокумента          = ТекущаяДата();
        
        
                                
    СериализованноеЗначение = Соединение82.XMLСтрока(Соединение82.NewObject("ХранилищеЗначения","ТаблицаНовая"));
    

как правильно написать???
ИсходноеЗначение = XMLЗначение(Тип("ХранилищеЗначения"), СериализованноеЗначение).Получить();
1 Сияющий в темноте
 
25.12.17
13:53
Зачем таблицу пихать в хранилище?
если ты ее в xml сериализуешь,то на другой стороне можно попытаться восстановить
а хранилище нужно,если хочется сохранить в базе
2 Ivan_495
 
25.12.17
14:13
это просто пример, на самом деле на другой стороне создается таблица и мне надо быстро получить её на текущей стороне бз всяких переборов
3 бомболюк
 
25.12.17
14:14
ЗначениеВСтрокуВнутр - ЗначениеИзСтрокиВнутр
4 vde69
 
25.12.17
14:15
(2) а от куда 1с знает, что у тебя в таблице нет типов данных которые не доступны "на другой стороне"?
5 Сияющий в темноте
 
25.12.17
14:27
передать без проблем можно только примитивные типы,сериализуемые хоть и передадутся,но могут быть битые ссылки
6 Ivan_495
 
25.12.17
15:21
у меня только  примитивные типы
7 Sasha_H
 
25.12.17
15:42
(1) все правильно человек делает. Если требуется сэкономить на пакете то хранилище еще надо сжать.
8 Sasha_H
 
25.12.17
15:44
как-то так:

&НаСервереБезКонтекста
Функция СериализоватьДанные(Объект)
    
    //Если Объект.Количество() = 0 Тогда Возврат "" КонецЕсли;
    
    ХДТО = СериализаторXDTO.ЗаписатьXDTO(Объект);
    хмл = Новый ЗаписьXML;
    хмл.УстановитьСтроку();
    
    ФабрикаXDTO.ЗаписатьXML(хмл,ХДТО);
    
    РезХМЛ = хмл.Закрыть();
    
    Возврат РезХМЛ;
КонецФункции

&НаСервереБезКонтекста
Функция ДесериализоватьДанные(XML)
    
    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(XML);
    Данные = СериализаторXDTO.ПрочитатьXML(Чтение);
    Чтение.Закрыть();
    
    Возврат Данные;
КонецФункции
9 Ivan_495
 
25.12.17
16:04
(1) как предлагаете передавать таблицу, если не помещатьь ее в хранилище
СериализованноеЗначение = Соединение82.XMLСтрока(Соединение82.NewObject("ХранилищеЗначения","ТаблицаНовая"));

XMLСтрока???
10 hhhh
 
25.12.17
16:13
(9) СериализованноеЗначение = Соединение82.ОбщегоНазначения.ЗначениеВСтрокуXML(ТабЗнач);
11 hhhh
 
25.12.17
16:14
(10) в текущей базе

НоваяТабЗнач = ОбщегоНазначения.ЗначениеИзСтрокиXML(СериализованноеЗначение);
12 Ivan_495
 
25.12.17
16:49
СериализованноеЗначение = Соединение82.ОбщегоНазначения.ЗначениеВСтрокуXML(ТаблицаНовая);

Форма.Форма.Форма(121)}: Ошибка при вызове метода контекста (ЗначениеВСтрокуXML)
      СериализованноеЗначение = Соединение82.ОбщегоНазначения.ЗначениеВСтрокуXML(ТаблицаНовая);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.5.1486): {ОбщийМодуль.ОбщегоНазначения.Модуль(1607)}: Ошибка при вызове метода контекста (ЗаписатьXML)
Несоответствие типов (параметр номер '2') (Ошибка отображения типов)
13 Ivan_495
 
25.12.17
16:50
в текущей базе отрабатывает без ошибок, во внешней ошибка
СериализованноеЗначение = ОбщегоНазначения.ЗначениеВСтрокуXML(ТаблицаНовая);
14 Ivan_495
 
25.12.17
16:56
наверно надо ФабрикаXDTO передавать во внешнюю базу
15 Ivan_495
 
26.12.17
11:39
(3) благодарю