Работа с табличной частью через COMConnector (Загрузить(тзCOMConnector), Очистить())

1. el-gamberro 57 07.09.17 17:25 Сейчас в теме
Через Внешнее соединение (из БП к УТ 10.3) работаю с табличной частью ТребованиеНакладной.Материалы.
Есть задача преобразовать табличную часть.
Но странно, что доступен узкий спектр команд.
Иными словами читать могу, трансформировать никак не могу.
Кто встречался с таким и как поступить в такой ситуации?
Вознаграждение за ответ
Показать полностью
Найденные решения
11. DAL 07.09.17 23:27 Сейчас в теме +1 $m
(1) Вы же в своем вопросе сами ответ дали.

Суть в том, что каждый элемент COMObject - тоже COMObject.
Я не совсем понимаю, что Вы имели ввиду под словом "преобразовать", но обычно поступаю так:

Имеем табличную часть "Материалы" документа "Требование-Накладная".
Ссылка_ДокументУдаленнойБазы = COM_объект_Удаленной_Базы.Документы.ТребованиеНакладная.НайтиПоНомеру("УТ000000345", ТекущаяДата());

Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять

СтрокаТоваров = Объект_ДокументУдаленнойБазы.Товары.Получить(0);

НоменклатураНаЗамену = COM_объект_Удаленной_Базы.Справочники.Номенклатура.НайтиПоКоду("УТ000000001");

СтрокаТоваров.Номенклатура = НоменклатураНаЗамену;

Объект_ДокументУдаленнойБазы.Записать(COM_объект_Удаленной_Базы.РежимЗаписиДокумента.Запись);
Показать


В изменяемый COM-объект нужно подставлять данные, которые являются COM-объектами.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. vovan_victory 63 07.09.17 22:51 Сейчас в теме
(1)Покажите код и хотя бы скрин ошибки
13. el-gamberro 57 08.09.17 06:12 Сейчас в теме
(10) вот такая ошибка - {ВнешняяОбработка.ЗагрузкаИзУТ.Форма.Форма.Форма(9818)}: Ошибка при вызове метода контекста (Загрузить): Произошла исключительная ситуация (1C:Enterprise 8.3.9.2233): Объект недоступен для изменения.
15. DAL 08.09.17 07:48 Сейчас в теме
(13)
Объект недоступен для изменения


А вы уверены, что загружаете именно в объект, а не в ссылку на объект?
vovan_victory; +1 Ответить
17. el-gamberro 57 08.09.17 11:41 Сейчас в теме
(15) А какая разница ссылка или объект для табличной части?
И ссылка и объект ссылаются на одинаковую табличную часть
18. Ziggurat 50 08.09.17 12:29 Сейчас в теме +1 $m
(17) Табличная часть является реквизитом экземпляра класса "Документ" или "Справочник", например. Ссылка лишь указывает на экземпляр, через ссылку можно читать его реквизиты, коим и является табличная часть. Объект это и есть этот самый экземпляр класса и предоставляет возможности для изменения реквизитов экземпляра и записи их в БД. Посмотрите СП методы и свойства для типов ДокументСсылка и ДокументОбъект, полагаю, всё станет очевидным.
19. el-gamberro 57 08.09.17 12:48 Сейчас в теме
(18) Действительно Табличная часть Объекта позволяет Загрузить, а тч из Ссылки не позволяет.
Видимо синтаксис-помощник меня ввел в заблуждение, т.к. идет описание универсального объекта Табличная часть.
Плюс работал поздно вечером и видимо что-то напутал при проверке (пытался получить объект и загрузить в его табличную часть).

Всем спасибо.
11. DAL 07.09.17 23:27 Сейчас в теме +1 $m
(1) Вы же в своем вопросе сами ответ дали.

Суть в том, что каждый элемент COMObject - тоже COMObject.
Я не совсем понимаю, что Вы имели ввиду под словом "преобразовать", но обычно поступаю так:

Имеем табличную часть "Материалы" документа "Требование-Накладная".
Ссылка_ДокументУдаленнойБазы = COM_объект_Удаленной_Базы.Документы.ТребованиеНакладная.НайтиПоНомеру("УТ000000345", ТекущаяДата());

Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять

СтрокаТоваров = Объект_ДокументУдаленнойБазы.Товары.Получить(0);

НоменклатураНаЗамену = COM_объект_Удаленной_Базы.Справочники.Номенклатура.НайтиПоКоду("УТ000000001");

СтрокаТоваров.Номенклатура = НоменклатураНаЗамену;

Объект_ДокументУдаленнойБазы.Записать(COM_объект_Удаленной_Базы.РежимЗаписиДокумента.Запись);
Показать


В изменяемый COM-объект нужно подставлять данные, которые являются COM-объектами.
12. el-gamberro 57 08.09.17 05:40 Сейчас в теме
(11)
Объект_ДокументУдаленнойБазы

В тот то и дело, что возможность изменений очень ограничена.
например не дает в тчКомОбъекта загрузить измененную таблицу значений (которая тоже КомОбъект удаленной базы)
Более того для "Объект_ДокументУдаленнойБазы" нет возможность очистить табличную часть.
Вот это у меня и вызывает удивление и непонимание.
14. DAL 08.09.17 07:42 Сейчас в теме
(12)

Объект_ДокументУдаленнойБазы.Товары.Очистить();

ЗапросВУдаленнойБазе = СоединениеСБазой.NewObject("Запрос");
ЗапросВУдаленнойБазе = "ВЫБРАТЬ ....";
ЗапросВУдаленнойБазе.УстановитьПараметр("...", ...);

Объект_ДокументУдаленнойБазы.Товары.Загрузить(ЗапросВУдаленнойБазе.Выполнить().Выгрузить());

Показать
16. vovan_victory 63 08.09.17 09:32 Сейчас в теме
(11)
Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять

Из СП:

Возвращаемое значение:

Тип: ДокументСсылка.<Имя документа>; Неопределено.
Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.


А если

Если НЕ Ссылка_ДокументУдаленнойБазы.Пустая() Тогда
Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять
КонецЕсли;
2. Prikum 3 07.09.17 17:32 Сейчас в теме
Преобразовать где? В УТ или в БП? И что значит преобразовать?
3. el-gamberro 57 07.09.17 17:44 Сейчас в теме
(2) Преобразовать объект который я получил через COMConnector
4. Prikum 3 07.09.17 17:46 Сейчас в теме
(3) имеется ввиду, преобразовать документ в базе подключенной через COM?
6. el-gamberro 57 07.09.17 18:04 Сейчас в теме
5. roman77 333 07.09.17 17:55 Сейчас в теме
а если как-нибудь так:


//получаем объект документа в базе УТ - ТребованиеНакладнойОБЪЕКТ

ТЧМатериалы = ТребованиеНакладнойОБЪЕКТ.Материалы.Выгрузить();

//дальше делаем в цикле что надо с ТЧМатериалы 

ТребованиеНакладнойОБЪЕКТ.Материалы.Очистить();
Для каждого Стр из ТЧМатериалы Цикл
НовСтр = ТребованиеНакладнойОБЪЕКТ.Материалы.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, Стр);

КонецЦикла;

ТребованиеНакладнойОБЪЕКТ.Записать();



Показать
7. el-gamberro 57 07.09.17 18:07 Сейчас в теме
(5) Не дает.
Вот список команд что возможно
Материалы COMОбъект COMОбъект
Add
Count
Find
FindRows
Get
IndexOf
Insert
Total
Unload
UnloadColumn
UnloadColumns
_NewEnum
9. el-gamberro 57 07.09.17 18:13 Сейчас в теме
(5) Получается что добавлять я могу сколько угодно, а вот очистить перед этим табличную часть не могу :)
8. el-gamberro 57 07.09.17 18:12 Сейчас в теме
Мне просто интересно, такое вообще возможно и как с этим работать?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот