Скорректировать строки табличной части по результату запроса

1. user1472622 27.06.23 16:44 Сейчас в теме
Добрый день
Есть результат запроса, например:
Стул Зеленый
Табурет Зеленый

И БОЛЬШАЯ табличная часть, где строки с номенклатурой могут повторяться многократно,
Например :

Стул Красный
Тумбочка Белая
Стул Красный
Стул Красный
Стул Красный
Тумбочка Синяя
Тумбочка черная
Табурет Черный

Можно как-то использовать результат запроса не обходя табличную часть циклом, чтобы исправить второй реквизит у строк нужной мне номенклатуры из выборки ?
По теме из базы знаний
Найденные решения
11. Said-We 27.06.23 18:08 Сейчас в теме
(10)
Всю табличную часть не желательно, а пример с кодом как отрабатывает? Все строки меняет ,если их несколько?
Стандартно - сколько надо столько и меняет. Те что не нужны не трогает.
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Слудующий() Цикл
    ТабличнаяЧасть85[ВыборкаЗапроса.НомерСтрокиТЧ-1].Цвет = ВыборкаЗапроса.Цвет;
КонецЦикла;
user1472622; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vladimir-R 168 27.06.23 16:49 Сейчас в теме
(1) НайтиСтроки() не подойдут?
user1472622; +1 Ответить
3. user1472622 27.06.23 16:51 Сейчас в теме
(2)Думаю, что подойдут. Как только использовать результат запроса в этом методе?
4. aka Любитель XML 27.06.23 17:08 Сейчас в теме
(3) циклом обходишь результат запроса, внутри цикла НайтиСтроки
6. user1472622 27.06.23 17:31 Сейчас в теме
(4)
НайденныеСтроки = Док.Товары.НайтиСтроки(СтруктураПоиска);
На выходе массив строк
С ним что делать, опять циклом обходить что ли или может как-то НайденныеСтроки .добавить а потом после обхода
выборки обойти массив ?
8. Sashares 34 27.06.23 17:48 Сейчас в теме
(6)
С ним что делать, опять циклом обходить что ли

Да
user1472622; +1 Ответить
5. Said-We 27.06.23 17:25 Сейчас в теме
(1) Если речь не о ссылке, а об объекте, то можно одним запросом выгрузить табличную часть и передать параметром в запрос. В запросе заменить значение. Результат запроса обратно загрузить в табличную часть.
Если речь о ссылке, то запросом напрямую брать из табличной части, получать нужный результат. Обратно уже получать объект и там корректировать.

Корректировать тоже два способа. Можно выгружать и загружать всю табличную часть. Но так как она БОЛЬШАЯ, то можно корректировать только нужные строки. Для этого в результат запроса должны попадать только те строки, которые необходимо менять и достаточно знать номер строки.
ТабличнаяЧасть85[РезультатЗапроса.НомерСтрокиТЧ-1].Цвет = РезультатЗапроса.Цвет;
Найти строки в цикле - ОЧЕНЬ медленно....
7. Sashares 34 27.06.23 17:46 Сейчас в теме
(5)
Найти строки в цикле - ОЧЕНЬ медленно....

Зависит от наличия индекса.
9. Said-We 27.06.23 18:04 Сейчас в теме
(7)
Зависит от наличия индекса.
Какого? НайтиСтроки() - фактически тот же запрос. А так как его надо вызывать в цикле, то получится запрос в цикле. Проще сразу для всех найти всё что нужно и заменить за один проход, только по тем строкам, по которым надо менять.
13. Sashares 34 27.06.23 21:18 Сейчас в теме
(9)
Какого?

Для таблицы значений можно добавить индекс по полям, по которым будет выполняться поиск. По таблице с индексом НайтиСтроки будет выполняться почти мгновенно.
10. user1472622 27.06.23 18:04 Сейчас в теме
(5)Всю табличную часть не желательно, а пример с кодом как отрабатывает? Все строки меняет ,если их несколько?
11. Said-We 27.06.23 18:08 Сейчас в теме
(10)
Всю табличную часть не желательно, а пример с кодом как отрабатывает? Все строки меняет ,если их несколько?
Стандартно - сколько надо столько и меняет. Те что не нужны не трогает.
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Слудующий() Цикл
    ТабличнаяЧасть85[ВыборкаЗапроса.НомерСтрокиТЧ-1].Цвет = ВыборкаЗапроса.Цвет;
КонецЦикла;
user1472622; +1 Ответить
12. Said-We 27.06.23 21:07 Сейчас в теме
(10) Сам запрос тоже крайне простой. Пусть в ВТ_Заменить содержит номенклатуру и цвет, на которые надо заменить. Номенклатура в этой ВТ_Заменить НЕ повторяется.
Запрос будет выглядеть примерно так (на коленке писал - проверяйте):
ВЫБРАТЬ
     т1.НомерСтроки как НомерСтрокиТЧ
    ,т1.Номенклатура как Номенклатура
    ,т2.Цвет как Цвет
ИЗ
    Документ.ТабличнаяЧасть85 как т1
    Внутреннее Соединение ВТ_Заменить как т2
    ПО т1.Номенклатура = т2.Номенклатура
     И т1.Цвет <> т2.Цвет
Показать
Если не для ссылки, а для объекта, где-то на форме, то в любом случае табличную часть объекта (не ссылки) в ТЗ и параметром в запрос с созданием внутренней таблицы. А дальше так же.
14. Said-We 27.06.23 21:27 Сейчас в теме
(13) Речь в (1) про табличную часть, а не ТЗ.
Оставьте свое сообщение

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