Прежде всего с праздником форумчане. Помогите разобраться, а то уже голову сломал.
В редакции 2.0 был такой регистр, как "ЗначенияСвойствОбъектов", и через него я вытаскивал нужные мне доп. сведения. В редакции 3.0 все поменялось.
Сначала я создал доп. реквизит "КПП филиала" для справочника "ДоговорыКонтрагентов". Пытался к нему обратиться через :

```1c
    "ВЫБРАТЬ
    | ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка КАК Ссылка,
    | ДоговорыКонтрагентовДополнительныеРеквизиты.Значение,
    | ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство.Наименование КАК Свойство
    |ИЗ
    | Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты
    |ГДЕ
    | ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство.Наименование ПОДОБНО &КПП
    | И ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Договор";
    Результат = Запрос.Выполнить().Выбрать();
```

Договор - это ссылка на договор.
КПП - это "КПП%"
Ничего не вытягивает.

Тогда решил попробовать через доп. сведения, создал доп сведение с таким же названием и попытался вытащить значение так:

```1c
    Запрос.Текст = "ВЫБРАТЬ
    | ДополнительныеСведения.Свойство.Ссылка,
    | ДополнительныеСведения.Свойство.Наименование КАК Наименование,
    | ДополнительныеСведения.Значение КАК Значение
    |ИЗ
    | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    |ГДЕ
    | ДополнительныеСведения.Объект = &Договор
    | И ДополнительныеСведения.Свойство.Наименование ПОДОБНО &Наименование";
```

Но тоже без толку.

Кто-нибудь может помочь мне разобраться, как работать с доп реквизитами и сведениями?
---
```1c
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
    Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство);
```
---
ну так
```1c
    ДополнительныеСведения.Свойство.Наименование ПОДОБНО &Наименование
```
 Открой регистр или в консоли запросов его посмотри. А то не понимаешь походу как это работает!
---
ну так
```1c
    ДополнительныеСведения.Свойство.Наименование ПОДОБНО &Наименование
```
 Открой регистр или в консоли запросов его посмотри. А то не понимаешь походу как это работает!
---
Доброго времени. Никак не могу вытащить на печать реквизит формы.
Добавил дополнительный реквизит в справочник договоры контрагентов под названием КПП Филиала.
Если делаю через консоль запроса, то все видит. А если делаю в коде внешней печатной формы СФ ничего не видит.

ВПФ идентична типовой, единственно только хочу выводить КПП покупателя из этого реквизита.

Поэтому добавил сначала функцию:

```1c
    Функция ПолучитьДопСвойствоРеквизита(Договор) Экспорт

    Запрос = Новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ
    | ДоговорыКонтрагентовДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    | Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты
    |ГДЕ
    | ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство
    | И ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка",Договор); Запрос.УстановитьПараметр("Свойство","КПП филиала");

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

    Возврат Результат.Значение;

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

Затем в функции Функция ПодготовитьДанныеШапкиСчетаФактуры1137(ВыборкаСФ, Реквизиты, ПлатежноРасчетныеДокументы, ДополнитьДаннымиУПД)
добавил код

```1c
    ДоговорКонтр = ВыборкаСФ.ДоговорКонтрагента;
    //ДоговорКонтр = Реквизиты.ДокументОснование.ДоговорКонтрагента;
    КПППокупателя = ПолучитьДопСвойствоРеквизита(ДоговорКонтр);
    ДанныеШапки.Вставить("КППпокупателя", КПППокупателя);
```

И пустое значение, чего уже только не перепробовал, но никак не тянет.

Смотрел отладчиком И ВыборкаСФ.ДоговорКонтрагента и Реквизиты.ДокументОснование.ДоговорКонтрагента тип ссылка.
Но если сделать скажем Сообщить(Тип(ДоговорКонтр)); то в обоих случаях выдает ошибку, что тип не определен.

Помогите разобраться, а то у меня уже идеи кончаются.
---
```1c
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
    Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство);
```
---
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство);

Блин, я уже пару дней голову ломаю, а решение в две строчки.)))
Спасибо огромное!!!
---
Сообщение было скрыто модератором.
---
Еще можно добавить:

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

В комментариях сказано "Требуется для программного обращения к дополнительным реквизитам и сведениям. Аналог имени обычного реквизита."
---
Именно!
---
Зачем изобретать велосипед в конфигурациях построенных на БСП?

ЗначениеМоегоРеквизита = УправлениеСвойствами.ЗначениеСвойства(ДокОбъект, "МойРеквизит");

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

    Результат = ЗначенияСвойств(Объект, ПолучатьРеквизиты, Истина, Свойство);
    Если Результат.Количество() = 1 Тогда
    Возврат Результат[0].Значение;
    КонецЕсли;
    КонецФункции
```
---
лойс
---
спасибо!!!
---
Очевидное и невероятное! Спасибо )
---
УправлениеСвойствамиСлужебный

Спасибо!
---
УправлениеСвойствами.ЗначениеСвойства(ДокОбъект, "МойРеквизит")

Лучшее решение, а раньше приходилось изобретать велосипед.
---
ЗначениеМоегоРеквизита = УправлениеСвойствами.ЗначениеСвойства(ДокОбъект, "МойРеквизит");
Супер решение! Благодарю за эффектную подсказку!
---
Такая функция находит значение ДопРеквизита

```1c
    ЗначениеМоегоРеквизита = УправлениеСвойствами.ЗначениеСвойства(ДокОбъект, "МойРеквизит");
```

Но на Доп.Свойство выдает Неопределено, что не так?

Как найти значение Доп свойства через БСП?

Существование самого доп.свойства так проверил:

```1c
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
```
---
спасибо помогло
только вот строчка

```1c
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизитаСвойства);
```

не отработала
отработало

```1c
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок", ИмяРеквизитаСвойства);
```
---
Там перед сохранением имя нужно было заполнить, а то сгенерится случайное
---
А вот если мне нужно записать значение в доп.сведение? (см. скрин)

```1c
    Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Номер реестра");
    Запись = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
    Запись.Объект = Док.Ссылка;
    Запись.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Номер реестра");
    Запись.Прочитать();
    Запись.Объект = Док.Ссылка;
    Запись.Свойство = Свойство;
    Запись.Значение = НомерРеестра;
    Запись.Записать(Истина);
```

После записи, проверяю в режиме предприятия, Номер реестра пустой в доп.сведениях, что я делаю не так? Подскажите пожалуйста.