Что отработается быстрее в выводе на форме списка документов на ОФ? Запрос или обращение к реквизиту объекта

1. studius 16.03.19 14:15 Сейчас в теме +0.5 $m
Всем добрый день.
Добавил в список документов на обычной форме дополнительную колонку (Характеристика). В ней просто выводятся характеристики товара, проданного в программе. В документе есть нужный мне реквизит Товары, он ссылочного типа и ссылается на соответствующий справочник, из которого и берет характеристику. Товар весь уникальный.
В обработчике табличной части ПриПолученииДанных задумался, как правильнее сделать.
Там уже есть код:
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
// дальше смысла нет писать

Можно написать так:
ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика;

Или же в цикле делать запрос к этому справочнику и выводить его результат в коде.
Смущает, что запрос хоть и быстрее работает, но все равно - сколько будет документов в этом списке, столько раз будет выполняться запрос. Может все же оптимальнее обратиться объектным методом?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
16. ligsht 12 18.03.19 11:44 Сейчас в теме
(12) Если в документа не много реквизитов то получение кодом через точку будет быстрее чем выполнять запрос в цикле. Сами запросы оптимальны для получение большого количества данных за один раз. Но если документы содержит большое количество реквизитов(к примеру 100 реквизитов и все строка неограниченной длины ) то обращение через точку будет тормозить.

Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. Dmitrij-2 45 16.03.19 16:58 Сейчас в теме
(1) Обращение через точку это тоже запрос, причем с "лишними" полями
9. studius 17.03.19 10:12 Сейчас в теме
Я знаю, что это неявный запрос, но все равно спасибо за поправку.
14. studius 17.03.19 13:03 Сейчас в теме
(13)Я читал эту статью. Читал и другую, где приводили пример как делать неправильно при событии "ПриВыводеСтроки" и как нужно сделать при ПолученииДанных. Ее вариацию как раз и пробовал.
Просто смутило, что уже параметром ОфрмлениеСтроки передают всю нужную информацию. Т.е., отладчиком прохожу, и вижу, что там есть справочник на который ссылается документ и в нем уже заполненное мне поле.
Я и задумался о том, что уже в этот метод переданы данные, а мне нужно просто присвоить их нужной ячейке
ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Товар.Хэндмейкер;

Или все таки объект не передается туда и я витаю в заблуждениях, делая объектный запрос?
15. independ 1520 17.03.19 13:05 Сейчас в теме
(14) в этой статье есть сравнение по времени, можно попробовать самому и сравнить.
17. HAMMER_59 245 18.03.19 14:11 Сейчас в теме
(1)
Смущает, что запрос хоть и быстрее работает, но все равно - сколько будет документов в этом списке, столько раз будет выполняться запрос. Может все же оптимальнее обратиться объектным методом?


Странно что запрос смущает, который получает только один нужный реквизит. А обращение к реквизиту через точку не смущает, тоже в итоге будут запросы к базе, только объект будет считан полностью а не отдельный реквизит.

Список считывает только необходимые данные для отображения, возможно чуть больше, но точно не все разом, если будет 2 млн. строк не будет 2 млн. раз выполнения запроса.
18. Sashares 34 18.03.19 14:38 Сейчас в теме
(1)Может перейти на управляемую форму?
В ней будет это сделать проще.
Да и работать будет быстрее.
2. yaroslavkravets 24 16.03.19 16:14 Сейчас в теме
Делать в цикле запрос нельзя, при обращении через точку будет получен весь объект - это не соответствует стандартам разработки ИТС.

Решение: попробуйте свою таблицу загрузить в временную таблицу запроса, и соединив её с справочником Номенклатура за 1 запрос получите все данные
3. studius 16.03.19 16:21 Сейчас в теме
(2)простите за глупый вопрос, пока только изучаю 1с. При обращении через точку имеете в виду это -ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика? Просто в коде для этого обработчика есть подобное присвоение (типовая конфигурация)

(2)
попробуйте свою таблицу загрузить в временную таблицу запроса

Не совсем понял, какую именно таблицу нужно загрузить.
4. yaroslavkravets 24 16.03.19 16:37 Сейчас в теме
(3) в типовых конфигурациях большой давности такое встречается и работает по сей день.

Запрос = Новый Запрос;
Запрос.Текст = "
// Формируем временную таблицу ТаблицаТоваров.
|ВЫБРАТЬ
|    Товары.Номенклатура КАК Номенклатура,
|    ...
|    // все реквизиты ТЧ Товары
|    ...
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ &ТоварыДокумента КАК Товары
|
|;
|////////////////////////////////////////////////////////////­///////////////
|// Выбираем данные.
|ВЫБРАТЬ 
|    ТаблицаТоваров.Номенклатура КАК Номенклатура,
|   
|    ...
|    // Все поля из временной таблицы ТаблицаТоваров
|    ...
|
|    ЕСТЬNULL(Спр.Номенклатура.Характеристика, "") КАК Характеристика 
|ИЗ
|    ТаблицаТоваров КАК ТаблицаТоваров
|    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
|    ПО ТаблицаТоваров.Номенклатура = СпрНоменклатура.Ссылка";

Запрос.УстановитьПараметр("ТоварыДокумента ", Товары.Выгрузить());

НоваяТаблица = Запрос.Выполнить().Выгрузить();

Товары.Загрузить(НоваяТаблица);
Показать


При обращении через точку имеете в виду это -ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика?

да
6. acanta 16.03.19 17:17 Сейчас в теме
Насколько я понимаю, оптимально добавить реквизит и заполнять при выборе товара.
Вычисляемые колонки не должны обращаться к данным базы.
7. studius 16.03.19 17:24 Сейчас в теме
(6) но реквизит то будет из справочника. В этом документе есть ссылка на справочник, а нужное мне поле берется из него. Так разве можно сделать?
8. acanta 16.03.19 18:10 Сейчас в теме
Строка текста, показывающая характеристику товара в текущей строке но не в таблице при перемещении курсора будет дергать данные базы.
Если вы хотите видеть характеристики товара в таблице, но сама характеристика вам не нужна ни для чего больше, включите ее в название товара.
10. studius 17.03.19 10:15 Сейчас в теме
Вчера кучу вариантов перепробовал. Вот все равно не могу понять одной вещи. Когда отладчиком прохожу по этом циклу
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл

, то вижу, что в ОформленииСтроки уже помещен нужный мне справочник (просто в документе это отдельный реквизит) и в нем есть нужное мне поле с нужным мне значением.
Получается, что все же уже объектный запрос к нему сделан и просто уже из него и можно получить данные, как я писал? Например,
ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Товар.Хэндмейкер?

Не обращайте внимание на поле хэндмейкер, это решил заменить колонку на более нужную (мастера изделия).
11. user_2010 902 17.03.19 12:19 Сейчас в теме
(10) если все данные уже есть - можно просто "Еще" - "Изменить форму" - и вывести ваш реквизит
12. studius 17.03.19 12:27 Сейчас в теме
16. ligsht 12 18.03.19 11:44 Сейчас в теме
(12) Если в документа не много реквизитов то получение кодом через точку будет быстрее чем выполнять запрос в цикле. Сами запросы оптимальны для получение большого количества данных за один раз. Но если документы содержит большое количество реквизитов(к примеру 100 реквизитов и все строка неограниченной длины ) то обращение через точку будет тормозить.

Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
Оставьте свое сообщение

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