Привет всем!
Проблема с подключением по COM: не могу нормально загрузить табличную часть

подключаюсь, обращаюсь к документу, получаю реквизиты - все ок

обращаюсь к ТЧ документа - выгружаю, все ок

В обработке есть ТЧ, загружаю - выводит COMобъект, а не конкретное значение. Как загрузить именно значения, а не ком-объект?

Вот код:

```1c
    КомОбъект = ПодключитьсяКСерверу();
    ДокКорп = КомОбъект.Документы.аДокументооборотКорпоративныйДокумент;
    ДокКорпоративный = ДокКорп.ПолучитьСсылку(КомОбъект.NewObject("УникальныйИдентификатор",(СсылкаГУИД)));

    //дальше идет выгрузка реквизитов документа, успешно

    //далее выгружаю ТЧ дока из базы, подключенной по com, в новую ТЗ

    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("Файл");
    ТаблицаЗначений = ДокКорпоративный.СсылкиНаФайлы.Выгрузить();

    // и загружаю в тч обработки

    ЗагрузитьВТаблицуЗначений(ТаблицаЗначений, КД_СсылкиНаФайлы);
```

============================================================­=================

```1c
    Процедура ЗагрузитьВТаблицуЗначений(ТаблицаИсточник, ТаблицаПриемник) Экспорт

    Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл
    СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);
    КонецЦикла;
    КонецПроцедуры // ЗагрузитьВТаблицуЗначений()
```
---
ponaroshku, я так понимаю что таб. часть СсылкиНаФайлы содержит колонки с агрегатными объектами, которые и приходят через
COM-соединение как COM-объект. Перевести такие объекты в объекты БД можно такими способами:

```1c
    ОбъектТекущейБД = ЗначениеИзСтрокиВнутр(COMСоединение.ЗначениеВСтрокуВнутр(COMОбъект))
```
при условии, что и идентификатор вида объекта и сама ссылка в двух базах совпадают;

```1c
    ОбъектТекущейБД = XMLЗначение(Тип("СправочникСсылка.СтатьиЗатрат"), COMСоединение.XMLСтрока(COMОбъект))
```
если совпадают только ссылки;

```1c
    ОбъектТекущейБД = Справочники.СтатьиЗатрат.НайтиПоНаименованию(COMОбъект.Наименование)
```
если ни идентификатор вида объекта ни ссылка на объект не совпадают, то остается поиск по коду, наименованию и прочим полям.
---
ponaroshku, я так понимаю что таб. часть СсылкиНаФайлы содержит колонки с агрегатными объектами, которые и приходят через
COM-соединение как COM-объект. Перевести такие объекты в объекты БД можно такими способами:

```1c
    ОбъектТекущейБД = ЗначениеИзСтрокиВнутр(COMСоединение.ЗначениеВСтрокуВнутр(COMОбъект))
```
при условии, что и идентификатор вида объекта и сама ссылка в двух базах совпадают;

```1c
    ОбъектТекущейБД = XMLЗначение(Тип("СправочникСсылка.СтатьиЗатрат"), COMСоединение.XMLСтрока(COMОбъект))
```
если совпадают только ссылки;

```1c
    ОбъектТекущейБД = Справочники.СтатьиЗатрат.НайтиПоНаименованию(COMОбъект.Наименование)
```
если ни идентификатор вида объекта ни ссылка на объект не совпадают, то остается поиск по коду, наименованию и прочим полям.
---
sai_NT,
при условии, что и идентификатор вида объекта и сама ссылка в двух базах совпадают;
этот кошмар даже комментировать не буду.
если совпадают только ссылки
... деградация уже даже в рамках 1С...
если ни идентификатор вида объекта ни ссылка на объект не совпадают, то остается поиск по коду, наименованию и прочим полям.
 - единственной правильный ответ. Но так как автор сообщения пишет и про "остальные" варианты "совпадения ссылок", то он явно не понимает, что пишет - следовательно, правильный ответ попал сюда "до кучи" как копи-паст откуда-то "на всякий случай".
---
sai_NT,
ОбъектТекущейБД = Справочники.СтатьиЗатрат.НайтиПоНаименованию(COMОбъект.Наименование)
кстати, даже этот вариант сработает только в том случае, если запросом в базе-источнику заранее получено поле Наименование с типом Строка.
И этот принцип работает для всех случаев получения примитивных типов по COM-соединению.
---
попробуйте для передачи дополнительно использовать методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр()
При условии, что есть уверенность в наличии в базе всех ссылочных типов, загружаемых в табличную часть, иначе получится <объект не найден>
---
не взлетает

(3) что это было?:))))

:(
---
ponaroshku,
что это было?:))))
Это был пример получения и обработки примитивного типа Boolean из COM-объекта.
С дальнейшей его записью в созданную ТЗ.
---
у меня все ТЧ обрабатываются отдельно, читается ком объект и переделывается в ТЗ

```1c
    Функция ИзComВТЗ(COMТаблица)
    Таблица = Новый ТаблицаЗначений;
    Для каждого Колонка Из COMТаблица.Columns Цикл
    Если Колонка.Имя = "Выгружать" Тогда
    Таблица.Колонки.Добавить(Колонка.Name,Новый ОписаниеТипов("Булево"));
    Иначе
    Таблица.Колонки.Добавить(Колонка.Name);
    КонецЕсли;
    КонецЦикла;
    Для каждого Строка Из COMТаблица Цикл
    СтрокаТаблицы = Таблица.Добавить();
    Для каждого Колонка Из COMТаблица.Columns Цикл
    Если Колонка.Name = "РасшифровкаПлатежа"
    ИЛИ Колонка.Name = "Запасы"
    ИЛИ Колонка.Name = "Расходы"
    ИЛИ Колонка.Name = "Оплаты"
    ИЛИ Колонка.Name = "Услуги"
    ИЛИ Колонка.Name = "ВыданныеАвансы"
    ИЛИ Колонка.Name = "КонтактнаяИнформация"
    ИЛИ Колонка.Name = "КонтактнаяИнформацияБУ"
    ИЛИ Колонка.Name = "ВыданныеАвансы"
    Тогда
    ВремТЗПриемник = Новый ТаблицаЗначений;
    ВремТЗИсточник = Строка[Колонка.Имя];
    Для каждого КолонкаРасшифровки Из ВремТЗИсточник.Columns Цикл
    ВремТЗПриемник.Колонки.Добавить(КолонкаРасшифровки.Имя);
    КонецЦикла;
    Для каждого СтрокаРасшифровки Из ВремТЗИсточник Цикл
    СтрокаРасшифровкиПриемник= ВремТЗПриемник.Добавить();
    Для каждого КолонкаРасшифровки Из ВремТЗИсточник.Columns Цикл
    СтрокаРасшифровкиПриемник[КолонкаРасшифровки.Имя] = СтрокаРасшифровки[КолонкаРасшифровки.Имя];
    КонецЦикла;
    КонецЦикла;
    СтрокаТаблицы[Колонка.Имя] = ВремТЗПриемник;
    Продолжить;
    КонецЕсли;
    СтрокаТаблицы[Колонка.Имя] = Строка[Колонка.Name];
    КонецЦикла;
    КонецЦикла;
    Возврат Таблица;
    КонецФункции // ИзComВТЗ()
```
---
вижу, идёт перенос данных. почему бы не задействовать Конвертацию Данных 2?
---
```1c
    Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл
    СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();
    Для Каждого КолонкаТаб Из ТаблицаИсточник.Колонки Цикл
    СтрокаТаблицыПриемника[КолонкаТаб.Имя] = СтрокаТаблицыИсточника[КолонкаТаб.Имя];
    КонецЦикла;
    КонецЦикла;
```
---
Вот интересный вариант, где-то на Инфостарте вычитал:

Результат = ЗначениеИзСтрокиВнутр(База.ЗначениеВСтрокуВнутр(комРезультат));

База - это com-соединение;

комРезультат - это com-объект(результат запроса);

Результат - а это уже тот же результат, только тип ТаблицаЗначений =).

Не знаю на счет остального, но с приметивными типами прокатывает.
---
AlekseyKraynov,
Результат - а это уже тот же результат, только тип ТаблицаЗначений
мимо.
ТЗ - это не примитивный тип, а тип, содержащий, минимум, Колонки с типом "ОписаниеТипов", коеи типы - являются "описаниями" из базы-источника (а не "родными" из базы-приемника), и их нужно "переописывать" в базе-приемнике.
Т.е. заново создавать ТЗ в базе приемнике, а просто выгрузить "чужую" ТЗ (хоть через ЗначениеИзСтрокиВнутр, хоть еще как) - не получится.
---
Друзья, а как удалить сообщение (после того как написал увидел, что такой ответ уже был)?
---
AlekseyKraynov, (11) AlexO, +1
---
AlekseyKraynov,
а как удалить сообщение
Редактировать сообщение - выделить все и написать del.
Большего движок форума не позволяет.
---
AlexO, ага это я пробовал. Не кашерно как-то сообщение есть, а текста нет. Думал может есть другой способ, ан нет. Спасибо=)
P.S. придётся думать прежде чем писать, а так не хотелось=) И кстати, без текста сообщение то-же не даёт оставить, увы.
---
AlekseyKraynov,
P.S. придётся думать прежде чем писать, а так не хотелось=)
у модератора есть полные права, если совсем "неприятно" видеть повторы - обратитесь к нему :)
И кстати, без текста сообщение то-же не даёт оставить, увы.
"DEL" пишите
---
Студенты с курсов продолжают отжигать.
ДокКорп = КомОбъект.Документы.аДокументооборотКорпоративныйДокумент;
- всегда возвратит ссылку на объект ДРУГОЙ базы.
Перегружать по COM можно только примитивные типы (без всяких ЗначениеИзСтрокиВнутр). Запросом.
Если же получаете ссылку - то и работать надо в той базе, к которой принадлежит эта ссылка.
Во всех остальных случаях возвратит COM-объект.
Но студенты даже поиск не могут осилить:
http://forum.infostart.ru/forum26/topic82154/
- совсем недавно
---
Ребят, вы были бы бесценны, как специалисты, если обращали бы внимания на столь незначительные вещи, как дата создания темы и дата последнего сообщения ДО сегодняшнего дня:)
---
ponaroshku,
темы и дата последнего сообщения ДО сегодняшнего дня
увы, незнание (как и знание), не имеет границ и дат :))
---
:))) но не в 8 месяцев
Все меняется, и знание, и незнание.. Тем более за такой период
---
ponaroshku,
вот уверен, что кто отвечал восемь месяцев назад, точно так же бы ответили и сейчас :)
---
у них была возможность высказаться :)
Ответ ценен, когда он предоставлен вовремя, заниматься некропостингом бессмысленно
---
ponaroshku,
когда он предоставлен вовремя, заниматься некропостингом бессмысленно
тогда и 1с-программированием - тем более заниматься бессмысленно ;)