Что отработается быстрее в выводе на форме списка документов на ОФ? Запрос или обращение к реквизиту объекта
Всем добрый день.
Добавил в список документов на обычной форме дополнительную колонку (Характеристика). В ней просто выводятся характеристики товара, проданного в программе. В документе есть нужный мне реквизит Товары, он ссылочного типа и ссылается на соответствующий справочник, из которого и берет характеристику. Товар весь уникальный.
В обработчике табличной части ПриПолученииДанных задумался, как правильнее сделать.
Там уже есть код:
Можно написать так:
Или же в цикле делать запрос к этому справочнику и выводить его результат в коде.
Смущает, что запрос хоть и быстрее работает, но все равно - сколько будет документов в этом списке, столько раз будет выполняться запрос. Может все же оптимальнее обратиться объектным методом?
Добавил в список документов на обычной форме дополнительную колонку (Характеристика). В ней просто выводятся характеристики товара, проданного в программе. В документе есть нужный мне реквизит Товары, он ссылочного типа и ссылается на соответствующий справочник, из которого и берет характеристику. Товар весь уникальный.
В обработчике табличной части ПриПолученииДанных задумался, как правильнее сделать.
Там уже есть код:
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
// дальше смысла нет писать
Можно написать так:
ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика;
Или же в цикле делать запрос к этому справочнику и выводить его результат в коде.
Смущает, что запрос хоть и быстрее работает, но все равно - сколько будет документов в этом списке, столько раз будет выполняться запрос. Может все же оптимальнее обратиться объектным методом?
По теме из базы знаний
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Интеграция сценарного тестирования в процесс разработки
- Консультация для сдачи экзамена "1С:Специалист" по конфигурированию платформы
- Краткое руководство по внесению изменений в конфигурацию
- Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория
Найденные решения
(12) Если в документа не много реквизитов то получение кодом через точку будет быстрее чем выполнять запрос в цикле. Сами запросы оптимальны для получение большого количества данных за один раз. Но если документы содержит большое количество реквизитов(к примеру 100 реквизитов и все строка неограниченной длины ) то обращение через точку будет тормозить.
Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(13)Я читал эту статью. Читал и другую, где приводили пример как делать неправильно при событии "ПриВыводеСтроки" и как нужно сделать при ПолученииДанных. Ее вариацию как раз и пробовал.
Просто смутило, что уже параметром ОфрмлениеСтроки передают всю нужную информацию. Т.е., отладчиком прохожу, и вижу, что там есть справочник на который ссылается документ и в нем уже заполненное мне поле.
Я и задумался о том, что уже в этот метод переданы данные, а мне нужно просто присвоить их нужной ячейке
Или все таки объект не передается туда и я витаю в заблуждениях, делая объектный запрос?
Просто смутило, что уже параметром ОфрмлениеСтроки передают всю нужную информацию. Т.е., отладчиком прохожу, и вижу, что там есть справочник на который ссылается документ и в нем уже заполненное мне поле.
Я и задумался о том, что уже в этот метод переданы данные, а мне нужно просто присвоить их нужной ячейке
ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Товар.Хэндмейкер;
Или все таки объект не передается туда и я витаю в заблуждениях, делая объектный запрос?
(1)
Странно что запрос смущает, который получает только один нужный реквизит. А обращение к реквизиту через точку не смущает, тоже в итоге будут запросы к базе, только объект будет считан полностью а не отдельный реквизит.
Список считывает только необходимые данные для отображения, возможно чуть больше, но точно не все разом, если будет 2 млн. строк не будет 2 млн. раз выполнения запроса.
Смущает, что запрос хоть и быстрее работает, но все равно - сколько будет документов в этом списке, столько раз будет выполняться запрос. Может все же оптимальнее обратиться объектным методом?
Странно что запрос смущает, который получает только один нужный реквизит. А обращение к реквизиту через точку не смущает, тоже в итоге будут запросы к базе, только объект будет считан полностью а не отдельный реквизит.
Список считывает только необходимые данные для отображения, возможно чуть больше, но точно не все разом, если будет 2 млн. строк не будет 2 млн. раз выполнения запроса.
Делать в цикле запрос нельзя, при обращении через точку будет получен весь объект - это не соответствует стандартам разработки ИТС.
Решение: попробуйте свою таблицу загрузить в временную таблицу запроса, и соединив её с справочником Номенклатура за 1 запрос получите все данные
Решение: попробуйте свою таблицу загрузить в временную таблицу запроса, и соединив её с справочником Номенклатура за 1 запрос получите все данные
(2)простите за глупый вопрос, пока только изучаю 1с. При обращении через точку имеете в виду это -ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика? Просто в коде для этого обработчика есть подобное присвоение (типовая конфигурация)
(2)
Не совсем понял, какую именно таблицу нужно загрузить.
(2)
попробуйте свою таблицу загрузить в временную таблицу запроса
Не совсем понял, какую именно таблицу нужно загрузить.
(3) в типовых конфигурациях большой давности такое встречается и работает по сей день.
да
Запрос = Новый Запрос;
Запрос.Текст = "
// Формируем временную таблицу ТаблицаТоваров.
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| ...
| // все реквизиты ТЧ Товары
| ...
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ &ТоварыДокумента КАК Товары
|
|;
|//////////////////////////////////////////////////////////// ///////////////
|// Выбираем данные.
|ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
|
| ...
| // Все поля из временной таблицы ТаблицаТоваров
| ...
|
| ЕСТЬNULL(Спр.Номенклатура.Характеристика, "") КАК Характеристика
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СпрНоменклатура.Ссылка";
Запрос.УстановитьПараметр("ТоварыДокумента ", Товары.Выгрузить());
НоваяТаблица = Запрос.Выполнить().Выгрузить();
Товары.Загрузить(НоваяТаблица);
ПоказатьПри обращении через точку имеете в виду это -ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика?
да
Строка текста, показывающая характеристику товара в текущей строке но не в таблице при перемещении курсора будет дергать данные базы.
Если вы хотите видеть характеристики товара в таблице, но сама характеристика вам не нужна ни для чего больше, включите ее в название товара.
Если вы хотите видеть характеристики товара в таблице, но сама характеристика вам не нужна ни для чего больше, включите ее в название товара.
Вчера кучу вариантов перепробовал. Вот все равно не могу понять одной вещи. Когда отладчиком прохожу по этом циклу
, то вижу, что в ОформленииСтроки уже помещен нужный мне справочник (просто в документе это отдельный реквизит) и в нем есть нужное мне поле с нужным мне значением.
Получается, что все же уже объектный запрос к нему сделан и просто уже из него и можно получить данные, как я писал? Например,
Не обращайте внимание на поле хэндмейкер, это решил заменить колонку на более нужную (мастера изделия).
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
, то вижу, что в ОформленииСтроки уже помещен нужный мне справочник (просто в документе это отдельный реквизит) и в нем есть нужное мне поле с нужным мне значением.
Получается, что все же уже объектный запрос к нему сделан и просто уже из него и можно получить данные, как я писал? Например,
ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Товар.Хэндмейкер?
Не обращайте внимание на поле хэндмейкер, это решил заменить колонку на более нужную (мастера изделия).
(12) Если в документа не много реквизитов то получение кодом через точку будет быстрее чем выполнять запрос в цикле. Сами запросы оптимальны для получение большого количества данных за один раз. Но если документы содержит большое количество реквизитов(к примеру 100 реквизитов и все строка неограниченной длины ) то обращение через точку будет тормозить.
Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот