Как программно обращаться к дополнительным реквизитам и сведениям

1. D_e_X_T_e_R 573 23.02.17 08:27 Сейчас в теме
Прежде всего с праздником форумчане. Помогите разобраться, а то уже голову сломал.
В редакции 2.0 был такой регистр, как "ЗначенияСвойствОбъектов", и через него я вытаскивал нужные мне доп. сведения. В редакции 3.0 все поменялось.
Сначала я создал доп. реквизит "КПП филиала" для справочника "ДоговорыКонтрагентов". Пытался к нему обратиться через :
"ВЫБРАТЬ
	|	ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка КАК Ссылка,
	|	ДоговорыКонтрагентовДополнительныеРеквизиты.Значение,
	|	ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство.Наименование КАК Свойство
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты
	|ГДЕ
	|	ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство.Наименование ПОДОБНО &КПП
	|	И ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Договор";
	Результат = Запрос.Выполнить().Выбрать();
Показать

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


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

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


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

Кто-нибудь может помочь мне разобраться, как работать с доп реквизитами и сведениями?
По теме из базы знаний
Найденные решения
4. independ 1520 08.03.17 18:17 Сейчас в теме
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство);
Max0n57; AirPlayDed1C; 3gf; user1681949; wwwshka; Android1234; Bob_Sid; lostcay; EvgeniyOlxovskiy; wolder; ResAndDev; GonziK_KIV; DimonPT; user1273391; Konyaz; Programmer-1C; _Vovik; Xomka; ybatiaev; Serg243; user892609; criptid; user1471177; Olga_Mil; avert; Михаська; user1225706; Barok; user1296291; Gendelf; jobkostya1c_ERP; Геннадьевич; terran_1C; graforlow; insurgut; lenastep; D_e_X_T_e_R; +37 Ответить
2. Xershi 1479 23.02.17 09:01 Сейчас в теме
(1) ну так
ДополнительныеСведения.Свойство.Наименование ПОДОБНО &Наименование
Открой регистр или в консоли запросов его посмотри. А то не понимаешь походу как это работает!
Konyaz; Olga_Mil; D_e_X_T_e_R; +3 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1479 23.02.17 09:01 Сейчас в теме
(1) ну так
ДополнительныеСведения.Свойство.Наименование ПОДОБНО &Наименование
Открой регистр или в консоли запросов его посмотри. А то не понимаешь походу как это работает!
Konyaz; Olga_Mil; D_e_X_T_e_R; +3 Ответить
3. D_e_X_T_e_R 573 08.03.17 18:01 Сейчас в теме
Доброго времени. Никак не могу вытащить на печать реквизит формы.
Добавил дополнительный реквизит в справочник договоры контрагентов под названием КПП Филиала.
Если делаю через консоль запроса, то все видит. А если делаю в коде внешней печатной формы СФ ничего не видит.

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

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

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

КонецФункции
Показать


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


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

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

Помогите разобраться, а то у меня уже идеи кончаются.
4. independ 1520 08.03.17 18:17 Сейчас в теме
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство);
Max0n57; AirPlayDed1C; 3gf; user1681949; wwwshka; Android1234; Bob_Sid; lostcay; EvgeniyOlxovskiy; wolder; ResAndDev; GonziK_KIV; DimonPT; user1273391; Konyaz; Programmer-1C; _Vovik; Xomka; ybatiaev; Serg243; user892609; criptid; user1471177; Olga_Mil; avert; Михаська; user1225706; Barok; user1296291; Gendelf; jobkostya1c_ERP; Геннадьевич; terran_1C; graforlow; insurgut; lenastep; D_e_X_T_e_R; +37 Ответить
5. D_e_X_T_e_R 573 08.03.17 18:38 Сейчас в теме
(4)
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство);


Блин, я уже пару дней голову ломаю, а решение в две строчки.)))
Спасибо огромное!!!
16. пользователь 11.05.22 09:28
Сообщение было скрыто модератором.
...
17. Programmer-1C 143 07.09.22 15:41 Сейчас в теме
(4) Еще можно добавить:

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

В комментариях сказано "Требуется для программного обращения к дополнительным реквизитам и сведениям. Аналог имени обычного реквизита."
Kazaams; silly; Programmer-1C; VAAngelov; Android1234; ДмитрийС; Izumov; Danil174; cheburashka; POWone; evktlt; evg_m; Areal; Tangram; kimskiysanya; acanta; SagittariusA; terran_1C; +18 Ответить
9. SagittariusA 07.11.18 10:08 Сейчас в теме
7. shriogonyok 27.03.18 11:13 Сейчас в теме
Зачем изобретать велосипед в конфигурациях построенных на БСП?

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

 Общий модуль УправлениеСвойствами
// Возвращает значение дополнительного свойства объекта.
//
// Параметры:
//  Объект   - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
//                           ДокументСсылка.ЗаказПокупателя, ...
//  Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
//                           дополнительный реквизит, значение которого нужно получить.
//           - Строка - Имя дополнительного свойства.
//
// Возвращаемое значение:
//  Произвольный - любое значение, допустимое для свойства.
//
Функция ЗначениеСвойства(Объект, Свойство) Экспорт
	ПолучатьРеквизиты = УправлениеСвойствамиСлужебный.ЭтоОбъектМетаданныхСДополнительнымиРеквизитами(Объект.Метаданные());
	
	Результат = ЗначенияСвойств(Объект, ПолучатьРеквизиты, Истина, Свойство);
	Если Результат.Количество() = 1 Тогда
		Возврат Результат[0].Значение;
	КонецЕсли;
КонецФункции 
Показать
inf012; Mishnov; A1nur1ch; lenastep; Farhat95; Dimok2010; Xershi; basil_m; romulanin; windsurf; vsm-dev; G_111782056622184344775; sabob; user988448; GinGitsune; Santilla; vladimir-89; adamst; RibD; Programmer-1C; user594888_bagrat.otyrba; mlv84; greenfest; sergey_s_; vv2; KolBbl4; user892609; Duren_91; user1206750; hectordempf; DenisMedvedev; Rokky78; it124; johnyb2002; Izumov; Мах; owo; buy_sale; alen-s; Goggy; shapoval; myoker; ReDvAlL; avert; user833363; tani6e4ka; Vladimir-R; Matveev_VS; jk107; rpgshnik; user970646; Gendelf; EvgeniyNP; Den_D; rmIvanT; tsatsur; evktlt; vashkostya; akita; farraf; karagiosis; slige; bogdan_sukonnov; ltfriend; Klinofong; makarovy; Andrekaa; Tangram; HameleonA; kimskiysanya; Dilovar9; acanta; SagittariusA; krylovim; Леонов Александр; Delf; i.c.h; tricolor; terran_1C; ZeroSumGame; rendalina; MAYKOR; independ; baracuda; +84 Ответить
8. baracuda 2 07.04.18 11:25 Сейчас в теме
10. favia 03.06.19 18:33 Сейчас в теме
11. user970646 20.11.19 10:53 Сейчас в теме
(7) Очевидное и невероятное! Спасибо )
13. Matveev_VS 160 27.01.20 11:38 Сейчас в теме
(7)
УправлениеСвойствамиСлужебный


Спасибо!
15. sergey_s_ 11.03.22 12:54 Сейчас в теме
(7)
УправлениеСвойствами.ЗначениеСвойства(ДокОбъект, "МойРеквизит")


Лучшее решение, а раньше приходилось изобретать велосипед.
18. Santilla 4 04.12.22 18:32 Сейчас в теме
(7)
ЗначениеМоегоРеквизита = УправлениеСвойствами.ЗначениеСвойства(ДокОбъект, "МойРеквизит");

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

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

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

Существование самого доп.свойства так проверил:
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство");
12. German_Tagil 42 12.12.19 09:55 Сейчас в теме
спасибо помогло
только вот строчка
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизитаСвойства); 

не отработала
отработало
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок", ИмяРеквизитаСвойства);
14. VitaliyTokarev 221 26.11.21 11:28 Сейчас в теме
(12) Там перед сохранением имя нужно было заполнить, а то сгенерится случайное
19. Cheid 12.07.23 14:40 Сейчас в теме
А вот если мне нужно записать значение в доп.сведение? (см. скрин)

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


После записи, проверяю в режиме предприятия, Номер реестра пустой в доп.сведениях, что я делаю не так? Подскажите пожалуйста.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот