Всем добрый день.
Добавил в список документов на обычной форме дополнительную колонку (Характеристика). В ней просто выводятся характеристики товара, проданного в программе. В документе есть нужный мне реквизит Товары, он ссылочного типа и ссылается на соответствующий справочник, из которого и берет характеристику. Товар весь уникальный.
В обработчике табличной части ПриПолученииДанных задумался, как правильнее сделать.
Там уже есть код:

```1c
    Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    // дальше смысла нет писать
```

Можно написать так:

```1c
    ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика;
```

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

Для оптимизации вашей задачи будет оптимальнее добавить реквизит в шапку и обращаться к нему через одну точку а не через две. Но добавление реквизита не всегда возможно и поэтому возможно и через две точки ))
---
Обращение через точку это тоже запрос, причем с "лишними" полями
---
Я знаю, что это неявный запрос, но все равно спасибо за поправку.
---
Оптимизация работы в списке "ПриПолученииДанных"
---
Я читал эту статью. Читал и другую, где приводили пример как делать неправильно при событии "ПриВыводеСтроки" и как нужно сделать при ПолученииДанных. Ее вариацию как раз и пробовал.
Просто смутило, что уже параметром ОфрмлениеСтроки передают всю нужную информацию. Т.е., отладчиком прохожу, и вижу, что там есть справочник на который ссылается документ и в нем уже заполненное мне поле.
Я и задумался о том, что уже в этот метод переданы данные, а мне нужно просто присвоить их нужной ячейке

```1c
    ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Товар.Хэндмейкер;
```

Или все таки объект не передается туда и я витаю в заблуждениях, делая объектный запрос?
---
в этой статье есть сравнение по времени, можно попробовать самому и сравнить.
---
Смущает, что запрос хоть и быстрее работает, но все равно - сколько будет документов в этом списке, столько раз будет выполняться запрос. Может все же оптимальнее обратиться объектным методом?

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

Список считывает только необходимые данные для отображения, возможно чуть больше, но точно не все разом, если будет 2 млн. строк не будет 2 млн. раз выполнения запроса.
---
Может перейти на управляемую форму?
В ней будет это сделать проще.
Да и работать будет быстрее.
---
Делать в цикле запрос нельзя, при обращении через точку будет получен весь объект - это не соответствует стандартам разработки ИТС.

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

(2) попробуйте свою таблицу загрузить в временную таблицу запроса
Не совсем понял, какую именно таблицу нужно загрузить.
---
в типовых конфигурациях большой давности такое встречается и работает по сей день.

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

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

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

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

При обращении через точку имеете в виду это -ОформлениеСтроки.ДанныеСтроки.Ссылка.Товары.Характеристика?
да
---
Насколько я понимаю, оптимально добавить реквизит и заполнять при выборе товара.
Вычисляемые колонки не должны обращаться к данным базы.
---
но реквизит то будет из справочника. В этом документе есть ссылка на справочник, а нужное мне поле берется из него. Так разве можно сделать?
---
Строка текста, показывающая характеристику товара в текущей строке но не в таблице при перемещении курсора будет дергать данные базы.
Если вы хотите видеть характеристики товара в таблице, но сама характеристика вам не нужна ни для чего больше, включите ее в название товара.
---
Вчера кучу вариантов перепробовал. Вот все равно не могу понять одной вещи. Когда отладчиком прохожу по этом циклу

```1c
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
```

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

```1c
    ОформлениеСтроки.Ячейки.Характеристика.Значение =ОформлениеСтроки.ДанныеСтроки.Товар.Хэндмейкер?
```

Не обращайте внимание на поле хэндмейкер, это решил заменить колонку на более нужную (мастера изделия).
---
если все данные уже есть - можно просто "Еще" - "Изменить форму" - и вывести ваш реквизит
---
это обычные формы
---
Если в документа не много реквизитов то получение кодом через точку будет быстрее чем выполнять запрос в цикле. Сами запросы оптимальны для получение большого количества данных за один раз. Но если документы содержит большое количество реквизитов(к примеру 100 реквизитов и все строка неограниченной длины ) то обращение через точку будет тормозить.

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