Работа с табличной частью через COMConnector (Загрузить(тзCOMConnector), Очистить())
Через Внешнее соединение (из БП к УТ 10.3) работаю с табличной частью ТребованиеНакладной.Материалы.
Есть задача преобразовать табличную часть.
Но странно, что доступен узкий спектр команд.
Иными словами читать могу, трансформировать никак не могу.
Кто встречался с таким и как поступить в такой ситуации?
Есть задача преобразовать табличную часть.
Но странно, что доступен узкий спектр команд.
Иными словами читать могу, трансформировать никак не могу.
Кто встречался с таким и как поступить в такой ситуации?
Найденные решения
(1) Вы же в своем вопросе сами ответ дали.
Суть в том, что каждый элемент COMObject - тоже COMObject.
Я не совсем понимаю, что Вы имели ввиду под словом "преобразовать", но обычно поступаю так:
Имеем табличную часть "Материалы" документа "Требование-Накладная".
В изменяемый COM-объект нужно подставлять данные, которые являются COM-объектами.
Суть в том, что каждый элемент COMObject - тоже COMObject.
Я не совсем понимаю, что Вы имели ввиду под словом "преобразовать", но обычно поступаю так:
Имеем табличную часть "Материалы" документа "Требование-Накладная".
Ссылка_ДокументУдаленнойБазы = COM_объект_Удаленной_Базы.Документы.ТребованиеНакладная.НайтиПоНомеру("УТ000000345", ТекущаяДата());
Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять
СтрокаТоваров = Объект_ДокументУдаленнойБазы.Товары.Получить(0);
НоменклатураНаЗамену = COM_объект_Удаленной_Базы.Справочники.Номенклатура.НайтиПоКоду("УТ000000001");
СтрокаТоваров.Номенклатура = НоменклатураНаЗамену;
Объект_ДокументУдаленнойБазы.Записать(COM_объект_Удаленной_Базы.РежимЗаписиДокумента.Запись);
ПоказатьВ изменяемый COM-объект нужно подставлять данные, которые являются COM-объектами.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(17) Табличная часть является реквизитом экземпляра класса "Документ" или "Справочник", например. Ссылка лишь указывает на экземпляр, через ссылку можно читать его реквизиты, коим и является табличная часть. Объект это и есть этот самый экземпляр класса и предоставляет возможности для изменения реквизитов экземпляра и записи их в БД. Посмотрите СП методы и свойства для типов ДокументСсылка и ДокументОбъект, полагаю, всё станет очевидным.
(18) Действительно Табличная часть Объекта позволяет Загрузить, а тч из Ссылки не позволяет.
Видимо синтаксис-помощник меня ввел в заблуждение, т.к. идет описание универсального объекта Табличная часть.
Плюс работал поздно вечером и видимо что-то напутал при проверке (пытался получить объект и загрузить в его табличную часть).
Всем спасибо.
Видимо синтаксис-помощник меня ввел в заблуждение, т.к. идет описание универсального объекта Табличная часть.
Плюс работал поздно вечером и видимо что-то напутал при проверке (пытался получить объект и загрузить в его табличную часть).
Всем спасибо.
(1) Вы же в своем вопросе сами ответ дали.
Суть в том, что каждый элемент COMObject - тоже COMObject.
Я не совсем понимаю, что Вы имели ввиду под словом "преобразовать", но обычно поступаю так:
Имеем табличную часть "Материалы" документа "Требование-Накладная".
В изменяемый COM-объект нужно подставлять данные, которые являются COM-объектами.
Суть в том, что каждый элемент COMObject - тоже COMObject.
Я не совсем понимаю, что Вы имели ввиду под словом "преобразовать", но обычно поступаю так:
Имеем табличную часть "Материалы" документа "Требование-Накладная".
Ссылка_ДокументУдаленнойБазы = COM_объект_Удаленной_Базы.Документы.ТребованиеНакладная.НайтиПоНомеру("УТ000000345", ТекущаяДата());
Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять
СтрокаТоваров = Объект_ДокументУдаленнойБазы.Товары.Получить(0);
НоменклатураНаЗамену = COM_объект_Удаленной_Базы.Справочники.Номенклатура.НайтиПоКоду("УТ000000001");
СтрокаТоваров.Номенклатура = НоменклатураНаЗамену;
Объект_ДокументУдаленнойБазы.Записать(COM_объект_Удаленной_Базы.РежимЗаписиДокумента.Запись);
ПоказатьВ изменяемый COM-объект нужно подставлять данные, которые являются COM-объектами.
(11)
В тот то и дело, что возможность изменений очень ограничена.
например не дает в тчКомОбъекта загрузить измененную таблицу значений (которая тоже КомОбъект удаленной базы)
Более того для "Объект_ДокументУдаленнойБазы" нет возможность очистить табличную часть.
Вот это у меня и вызывает удивление и непонимание.
Объект_ДокументУдаленнойБазы
В тот то и дело, что возможность изменений очень ограничена.
например не дает в тчКомОбъекта загрузить измененную таблицу значений (которая тоже КомОбъект удаленной базы)
Более того для "Объект_ДокументУдаленнойБазы" нет возможность очистить табличную часть.
Вот это у меня и вызывает удивление и непонимание.
(12)
Объект_ДокументУдаленнойБазы.Товары.Очистить();
ЗапросВУдаленнойБазе = СоединениеСБазой.NewObject("Запрос");
ЗапросВУдаленнойБазе = "ВЫБРАТЬ ....";
ЗапросВУдаленнойБазе.УстановитьПараметр("...", ...);
Объект_ДокументУдаленнойБазы.Товары.Загрузить(ЗапросВУдаленнойБазе.Выполнить().Выгрузить());
Показать
(11)
Из СП:
Возвращаемое значение:
Тип: ДокументСсылка.<Имя документа>; Неопределено.
Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.
А если
Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять
Из СП:
Возвращаемое значение:
Тип: ДокументСсылка.<Имя документа>; Неопределено.
Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.
А если
Если НЕ Ссылка_ДокументУдаленнойБазы.Пустая() Тогда
Объект_ДокументУдаленнойБазы = Ссылка_ДокументУдаленнойБазы.ПолучитьОбъект(); // Это уже можно менять
КонецЕсли;
а если как-нибудь так:
//получаем объект документа в базе УТ - ТребованиеНакладнойОБЪЕКТ
ТЧМатериалы = ТребованиеНакладнойОБЪЕКТ.Материалы.Выгрузить();
//дальше делаем в цикле что надо с ТЧМатериалы
ТребованиеНакладнойОБЪЕКТ.Материалы.Очистить();
Для каждого Стр из ТЧМатериалы Цикл
НовСтр = ТребованиеНакладнойОБЪЕКТ.Материалы.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, Стр);
КонецЦикла;
ТребованиеНакладнойОБЪЕКТ.Записать();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот