Привет. Получаю ед. измерения, СтавкуНДС при изменении Наименования товара следующим образом :

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

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

Но нужно это сделать с помощью одной функции в виде ПолучитьРеквизитОбъекта(Объект, "ИмяРеквизита").
Подскажите, пожалуйста, как это реализовать...
---
Ну обрезать-то дело не хитрое...
Как-то так...
```1c
    Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПсевдонимЗаданнойТаблицы."+ИмяРеквизита+"
    |ИЗ
    | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
    |ГДЕ
    | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
    |";
    Выборка = Запрос.Выполнить().Выбрать();

    Результат = Неопределено;
    Пока Выборка.Следующий() Цикл
    Результат = Выборка[ИмяРеквизита];
    КонецЦикла;

    Возврат Результат;
    КонецФункции
```
  Показать
---
В БСП есть ОбщегоНазначения.ЗначениеРеквизитаОбъекта, описанный метод более правильный, чем Ваш, потому что при получении реквизита через точку происходит объектное чтение - то есть чтение всех реквизитов и табличных частей, а Вам это не надо.
Код
```1c
    // Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
    // по ссылке на объект.
    //
    // Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
    // Если необходимо зачитать реквизит независимо от прав текущего пользователя,
    // то следует использовать предварительный переход в привилегированный режим.
    //
    // Функция не предназначена для получения значений реквизитов пустых ссылок.
    //
    // Параметры:
    // Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
    //
    // Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате
    // требований к свойствам структуры.
    // Например, "Код, Наименование, Родитель".
    // - Структура, ФиксированнаяСтруктура - в качестве ключа передается
    // псевдоним поля для возвращаемой структуры с результатом, а в качестве
    // значения (опционально) фактическое имя поля в таблице.
    // Если значение не определено, то имя поля берется из ключа.
    // - Массив, ФиксированныйМассив - имена реквизитов в формате требований
    // к свойствам структуры.
    //
    // Возвращаемое значение:
    // Структура - содержит имена (ключи) и значения затребованных реквизитов.
    // Если строка затребованных реквизитов пуста, то возвращается пустая структура.
    // Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено.
    //
    Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты) Экспорт

    Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
    Если ПустаяСтрока(Реквизиты) Тогда
    Возврат Новый Структура;
    КонецЕсли;
    Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизиты, ",", Истина);
    КонецЕсли;

    СтруктураРеквизитов = Новый Структура;
    Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
    СтруктураРеквизитов = Реквизиты;
    ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
    Для Каждого Реквизит Из Реквизиты Цикл
    СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", "), Реквизит);
    КонецЦикла;
    Иначе
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"),
    Строка(ТипЗнч(Реквизиты)));
    КонецЕсли;

    ТекстПолей = ";
    Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
    ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
    СокрЛП(КлючИЗначение.Значение),
    СокрЛП(КлючИЗначение.Ключ));

    Псевдоним = СокрЛП(КлючИЗначение.Ключ);

    ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), ", ",") + "
    | " + ИмяПоля + " КАК " + Псевдоним;
    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |" + ТекстПолей + "
    |ИЗ
    | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
    |ГДЕ
    | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
    |";
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Результат = Новый Структура;
    Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
    Результат.Вставить(КлючИЗначение.Ключ);
    КонецЦикла;
    ЗаполнитьЗначенияСвойств(Результат, Выборка);

    Возврат Результат;

    КонецФункции

    // Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект.
    //
    // Если доступа к реквизиту нет, возникнет исключение прав доступа.
    // Если необходимо зачитать реквизит независимо от прав текущего пользователя,
    // то следует использовать предварительный переход в привилегированный режим.
    //
    // Функция не предназначена для получения значений реквизитов пустых ссылок.
    //
    // Параметры:
    // Ссылка - ссылка на объект, - элемент справочника, документ, ...
    // ИмяРеквизита - Строка, например, "Код".
    //
    // Возвращаемое значение:
    // Произвольный - зависит от типа значения прочитанного реквизита.
    //
    Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт

    Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита);
    Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", ")];

    КонецФункции
```

P.S. И не надо называть переменную Наименование или Заголовок или ещё какими именами общих элементов. Вы однажды пересечетесь с переменной в модуле объекта или на форме в случае с заголовком и будете гадать где ошибка и почему тип не подходит.
---
Спасибо, но мне нужно сделать именно так, как я и написал (одной функцией). Или так сделать не получится?
---
Ну обрезать-то дело не хитрое...
Как-то так...
```1c
    Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПсевдонимЗаданнойТаблицы."+ИмяРеквизита+"
    |ИЗ
    | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
    |ГДЕ
    | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
    |";
    Выборка = Запрос.Выполнить().Выбрать();

    Результат = Неопределено;
    Пока Выборка.Следующий() Цикл
    Результат = Выборка[ИмяРеквизита];
    КонецЦикла;

    Возврат Результат;
    КонецФункции
```
  Показать
---
спасибо большое, буду пробовать)