Ребята с опытом подскажите пожалуйста.
Есть справочник Номенклатура в нем реквизиты (Ед.изм, СтавкаНДС и др.)
Делаю документ "ПоступлениеТовара" в нем табличная часть "Товары"

Как написать общую функцию для подстановки значений в поля ТЧ (Ед.изм, СтавкаНДС) из справочника "Номенклатура"

А то задолбался уже на получение каждого реквизита писать функцию (а их у меня будет много)

```1c
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
    СтрокаТЧ.ЕдиницаИзмерения = ПолучитьЕдиницуИзмерения(СтрокаТЧ.Номенклатура);
    СтрокаТЧ.СтавкаНДС = ПолучитьСтавкуНДС(СтрокаТЧ.Номенклатура);
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьЕдиницуИзмерения(Номенклатура)
    Возврат Номенклатура.ЕдиницаИзмерения;
    КонецФункции

    &НаСервере
    Функция ПолучитьСтавкуНДС(Номенклатура)
    Возврат Номенклатура.СтавкаНДС;
    КонецФункции
```

Как написать общую Функцию или Запрос чтобы вытягивало все значения из справочника и подставляло автоматом в ТЧ? типа ЗаполнениеЗначенияСвойств или что-то подобное
---
qqwweerrttyy160679, лучше делать один серверный вызов:

```1c
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
    СтруктураДанныхНоменклатуры = ПолучитьДанныеНоменклатуры(СтрокаТЧ.Номенклатура);
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтруктураДанныхНоменклатуры )
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция ПолучитьДанныеНоменклатуры(Номенклатура)
    СтруктураДанных = Новый Структура("ЕдиницаИзмерения, СтавкаНДС");
    ЗаполнитьЗначенияСвойств(СтруктураДанных, Номенклатура);
    Возврат СтруктураДанных;
    КонецФункции
```
---
qqwweerrttyy160679, Если типовая то посмотри у поступления товаров медоды НоменклатураПриИзменении у табличной части - там должны быть вызовы типовых процедур которые это уже делают.
---
Все реквизиты, которые можно заполнить однозначно, можно заполнять как раз ЗаполнениеЗначенияСвойств (лишь бы они назывались одинаково)

```1c
    новаяСтрочка = товары.Добавить();
    ЗаполнитьЗначенияСвойств(ЭлементНоменклатура,новаяСтрочка );
```

Все остальное придется расписывать. Посмотрите как это сделано в типовых.
---
Lenten, Как на моем коде применить? а то пока путаюсь &НаСервере &НаКлиенте
---
qqwweerrttyy160679, лучше делать один серверный вызов:

```1c
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
    СтруктураДанныхНоменклатуры = ПолучитьДанныеНоменклатуры(СтрокаТЧ.Номенклатура);
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтруктураДанныхНоменклатуры )
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция ПолучитьДанныеНоменклатуры(Номенклатура)
    СтруктураДанных = Новый Структура("ЕдиницаИзмерения, СтавкаНДС");
    ЗаполнитьЗначенияСвойств(СтруктураДанных, Номенклатура);
    Возврат СтруктураДанных;
    КонецФункции
```
---
Allexe8.1, Спасибо большое помогло :)
---
На управляемых формах давно уже не писал, сейчас даже протестировать негде.

Очень рекомендую посмотреть как заполняются строки в типовых. Там все обычно запутаннее чем кажется.
---
Один раз вызываешь серверную процедуру где заполняешь все данные, или как написали сверху через структуру.
---
можно создать запрос к номенклатуре и в нем отобрать какие реквизиты надо добавить в ТЧ Товары из Номенклатуры или
СтрТЧ.ЕдИзм = СтрТЧ.Номенклатура.ЕдИзм;
---
Подстановка значений в табличную часть документа и также прикреплен dt файл с примером его нужно доделать но если нужно можете допилить его.

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Проверка, что магазин заполнен
    Если ЗначениеЗаполнено(Объект.Магазин) И Не ЗначениеЗаполнено(Объект.Продавец) Тогда

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | ОборотыПродаж.Продавец КАК Продавец
    |ИЗ
    | РегистрНакопления.ОборотыПродаж КАК ОборотыПродаж
    |ГДЕ
    | ОборотыПродаж.Магазин = &Магазин
    |
    |УПОРЯДОЧИТЬ ПО
    | ОборотыПродаж.Период УБЫВ";

    Запрос.УстановитьПараметр("Магазин", Объект.Магазин);

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();

    Если Выборка.Следующий() Тогда
    Объект.Продавец = Выборка.Продавец;
    КонецЕсли;

    КонецЕсли;

    КонецПроцедуры

    &НаСервере
    Процедура ПриОткрытииНаСервере()

    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Для Каждого Строка Из Объект.Товары Цикл

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЦенаТоваров.Цена КАК Цена
    |ИЗ
    | РегистрСведений.ЦенаТоваров КАК ЦенаТоваров,
    | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары";

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Если Выборка.Следующий() Тогда

    Строка.Цена = Выборка.Цена;
    Строка.Сумма = Строка.Количество * Строка.Цена;

    КонецЕсли;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
    КонецПроцедуры
```