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

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

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

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

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

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

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

Телепатия, конечно, есть - но не до такой степени.
---
самописная конфа, в общем модуле своя функция, которая получает элемент, с помощью структуры должна вернуть его родителя и численный реквизит родителя. Может это неверный подход, такой подход реализовывал когда брал из регистра сведений и использовал метод получитьпоследнее. Можно использовать менеджер объектов, наверное, но хотелось бы знать что использовать ПРАВИЛЬНО. В общем скоро будет код, спасибо за желание помочь !
---
Пришёл, подумал - сделал. Однако, раз уж тема создана, спрошу о правильности моего способа(не в смысле полученного ответа, а в смысле оптимизации и логики 1с)

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

В Общем модуле:

```1c
    Функция ПолучаемРеквизиты(Принтер);
    Ресурсы = Новый Структура;
    Ресурсы.Вставить("Принтер", Принтер);
    Ресурсы.Вставить("Катридж", Принтер.Владелец);
    Ресурсы.Вставить("СрокЭксплуатации", Принтер.Владелец.СрокЭксплуатации);
    Возврат Ресурсы;
    КонецФункции
```
---
Лучше сделать универсальную функцию, вроде типовой ПолучитьЗначенияРеквизитов, куда передавать ссылку и список реквизитов и возвращать структуру.
---
Типовая - потому что она присутствует в типовых решениях ? Или потому что её принято использовать для получения реквизитов? Или потому что она есть в 1с на уровне платформы?) Можно узнать как она выглядит ?
---
Да, в типовых присутствует. Выглядит элементарно

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

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

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

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

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

Единственное - имена вроде "Владелец.СрокЭксплуатации" тут не проканают, но можно ведь соответствие возвращать.
---
А разве не проканают ? Ведь передаётся ссылка на реквизит, а она содержит и ссылку на владельца => ссылку на реквизит владельца ? Или не ?))
---
В структуре имена ключей вроде "Владелец.СрокЭксплуатации" не проканают, в запросе-то все ок будет.