Имя: Пароль:
1C
1С v8
Табличный документ через Com
0 0xFFFFFF
 
29.11.13
13:13
Из базы1 Соединился с базой2 через Com, получил оттуда табличный документ, который понятно, что имеет тип ComОбъект.
Как мне в базе1 его преобразовать в ТабличныйДокумент? Важна только визуальная форма. Расшифровками и пр. пренебрегаем.
1 Ork
 
29.11.13
13:16
(0) Через Com передаются только примитивные типы. Посему : циклом по ячейкам перебираем содержимое и заполняем аналог на вызывающей стороне.
2 Ненавижу 1С
 
гуру
29.11.13
13:16
сохраняем в файл, читаем
3 ptrtss
 
29.11.13
13:18
Лучше его запихать сначала в строку, а потом уже строку получить по COM и уже на месте назначения распаковать обратно в таблицу значений
4 Wobland
 
29.11.13
13:19
(3) предлагаешь ТабДок предварительно сконвертировать в ТЗ? ;)
5 0xFFFFFF
 
29.11.13
13:22
(1) Думал об этом, однако всё, даже шрифты тоже будут Com... Некузяво.
(2) В MXL?
(3) речь о табдок
6 Ненавижу 1С
 
гуру
29.11.13
13:22
(5) в MXL
7 Wobland
 
29.11.13
13:22
(5) дай минутку подумать. мм.. да, в mxl
8 0xFFFFFF
 
29.11.13
14:05
Если mxl завернуть в ХранилищеЗначений, то оно потом тоже имеет тип COMобъект. А как его оттуда достать...
9 Wobland
 
29.11.13
14:08
ну по почте отправь
10 Kvestin
 
29.11.13
14:55
Если базы разные (GUID-ы у элементов разные), то только сопоставлением в текущей базе по реквизитам примитивных типов (Код, Наименование и т.д).
Я бы, чтобы много не писать, в базе2 выбрал все запросом так, чтобы в ТЗ выгруженной из запроса не было данных ссылочного типа, но были все необходимые данные, чтобы найти соответствующий элемент в текущей базе. Затем получил ЗначениеВСтрокуВнутр(ТЗ), полученныю строку передал по COM и развернул в базе1. После этого получим в базе1 объект типа ТаблицаЗначений. Дальше, делаешь из нее то что нужно.

Если данные ссылочного типа совпадают по GUID (например база1 и база2 - узлы одной и той же распределенной базы), то тогда можно просто завернуть ТЗ в строку и развернуть в текущей базе. Все ссылки встанут автоматом.
11 Kvestin
 
29.11.13
14:57
Тфу ... подумал про ТабличнуюЧасть - пятница.
12 0xFFFFFF
 
29.11.13
15:14
Заработало!
Делал так: в базе 2 "заворачиваем"

ТабДок.Записать(ИмяВременногоФайла);
ЗначениеВСтрокуВнутр(Новый ДвоичныеДанные(ИмяВременногоФайла));

В базе 1 "разворачиваем"

ДвоичныеДанные = ЗначениеИзСтрокиВнутр(ПеременнаяКОМ);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ТабДокумент = Новый ТабличныйДОкумент;
ТабДокумент.Прочитать(ИмяВременногоФайла);
ТабДокумент.Показать();
13 Serginio1
 
29.11.13
16:36
Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.2/data/spreadsheet}. Имя типа XDTO: SpreadsheetDocument.

Можешь использовать СериализаторXDTO
14 Ненавижу 1С
 
гуру
29.11.13
21:13
(12) жду гонорар ))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший