Подскажите как с помощью бсп работать с доп реквизитами
Найти доп реквизит по "для разработчика" (Имя)
Или Заполнить доп реквизит
Или проверить существование реквизита и создать его
просто хочется какие то использовать универсальный механизмы а не как я сейчас делаю например
ДопРеквизитыХарактеристики = ПолучитьДопРеквизитыХарактеристики(Выборка.Характеристика);
или
Проверить существование я делаю так :
или так я создавал доп реквизит если его нет
Найти доп реквизит по "для разработчика" (Имя)
Или Заполнить доп реквизит
Или проверить существование реквизита и создать его
просто хочется какие то использовать универсальный механизмы а не как я сейчас делаю например
ДопРеквизитыХарактеристики = ПолучитьДопРеквизитыХарактеристики(Выборка.Характеристика);
Функция ПолучитьДопРеквизитыХарактеристики(Характеристика)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХарактеристикиНоменклатурыДополнительныеРеквизиты.Ссылка КАК Характеристика,
| ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство КАК ДопРеквизит,
| ХарактеристикиНоменклатурыДополнительныеРеквизиты.Значение КАК Значение,
| ДополнительныеРеквизитыИСведения.Имя КАК Идентификатор
|ИЗ
| Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатурыДополнительныеРеквизиты
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
|ГДЕ
| ХарактеристикиНоменклатурыДополнительныеРеквизиты.Ссылка = &Характеристика";
Запрос.УстановитьПараметр("Характеристика", Характеристика);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат
КонецФункции
Показатьили
Проверить существование я делаю так :
стрОснование = ДопРеквизитыХарактеристики.Найти("Основание_АМ", "Идентификатор");
Если НЕ стрОснование = Неопределено Тогда
Основание = СокрЛП(стрОснование.Значение);
КонецЕсли;
или так я создавал доп реквизит если его нет
СвойствоGUID = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок",ЗаголовокСвойства);
Если НЕ ЗначениеЗаполнено(СвойствоGUID) Тогда
СвойствоGUID = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
СвойствоGUID.Наименование = НаименованиеСвойства;
СвойствоGUID.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Склады;
СвойствоGUID.Заголовок = ЗаголовокСвойства;
СвойствоGUID.ТипЗначения = Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(36));
СвойствоGUID.Записать();
СвойствоGUID = СвойствоGUID.Ссылка;
НаборСвойствСклады= Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Склады.ПолучитьОбъект();
НовоеСвойство = НаборСвойствСклады.ДополнительныеРеквизиты.Добавить();
НовоеСвойство.Свойство = СвойствоGUID;
НаборСвойствСклады.Записать();
КонецЕсли;
Возврат СвойствоGUID;
ПоказатьПо теме из базы знаний
- Дополнительные отчеты и обработки для конфигураций, основанных на БСП. Часть 1. Заполнение объектов.
- Автоматическое добавление новых реквизитов на форму (УФ)
- "Прелести" БСП. Часть 1 - Дополнительные реквизиты / сведения
- Подключение нового справочника к подсистемам БСП (дополнительные реквизиты, файлы, запрет редактирования)
- [БДРС] работа с дополнительными реквизитами и сведениями в 2024 году
Найденные решения
Получить конкретное свойство конкретного объекта. В том же модуле УправлениеСвойствами.
// Возвращает значение дополнительного свойства объекта.
//
// Параметры:
// Объект - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
// ДокументСсылка.ЗаказПокупателя, ...
// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
// дополнительный реквизит, значение которого нужно получить.
// - Строка - имя дополнительного свойства.
//
// Возвращаемое значение:
// Произвольный - любое значение, допустимое для свойства.
//
Функция ЗначениеСвойства(Объект, Свойство) Экспорт
Показать
Для работы с доп. реквизитами/свойствами - есть общий модуль "УправлениеСвойствами"
Найти доп реквизит/Свойство :
Создать доп реквизит/свойство:
Найти доп реквизит/Свойство :
СвойствоGUID = УправлениеСвойствами.СвойстваОбъекта(Подразделение,Истина,Истина);
// Параметры функции
// ВладелецСвойств - Ссылка - например: СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ...
// - Объект - например: СправочникОбъект.Номенклатура, ДокументОбъект.ЗаказПокупателя, ...
// - ДанныеФормыСтруктура - коллекция по типу объекта владельца свойств.
// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты.
// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения.
ПоказатьСоздать доп реквизит/свойство:
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ВладелецСвойств, ТаблицаСвойствИЗначений);
// Параметры:
// ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя и т.д.
// ТаблицаСвойствИЗначений - ТаблицаЗначений:
// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца.
// * Значение - Произвольный - любое значение, допустимое для свойства (указано в элементе свойства).
//
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для работы с доп. реквизитами/свойствами - есть общий модуль "УправлениеСвойствами"
Найти доп реквизит/Свойство :
Создать доп реквизит/свойство:
Найти доп реквизит/Свойство :
СвойствоGUID = УправлениеСвойствами.СвойстваОбъекта(Подразделение,Истина,Истина);
// Параметры функции
// ВладелецСвойств - Ссылка - например: СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ...
// - Объект - например: СправочникОбъект.Номенклатура, ДокументОбъект.ЗаказПокупателя, ...
// - ДанныеФормыСтруктура - коллекция по типу объекта владельца свойств.
// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты.
// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения.
ПоказатьСоздать доп реквизит/свойство:
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ВладелецСвойств, ТаблицаСвойствИЗначений);
// Параметры:
// ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя и т.д.
// ТаблицаСвойствИЗначений - ТаблицаЗначений:
// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца.
// * Значение - Произвольный - любое значение, допустимое для свойства (указано в элементе свойства).
//
Показать
(2) у меня такая штука НЕ сработала при использовании в расширении.
пробовал на самом последнем релизе движка 8.3.20 в последнем релизе УНФ 1.6.
при вызове УправлениеСвойствами.ЗаписатьСвойстваУОбъекта()
выполнение кода как-будто бы прерывалось.
т.е. и ошибка не вылетала, но и ничего не происходило.
вызов я пытался использовать в _ПриЗаписиНаСервереВместо.
пробовал на самом последнем релизе движка 8.3.20 в последнем релизе УНФ 1.6.
при вызове УправлениеСвойствами.ЗаписатьСвойстваУОбъекта()
выполнение кода как-будто бы прерывалось.
т.е. и ошибка не вылетала, но и ничего не происходило.
вызов я пытался использовать в _ПриЗаписиНаСервереВместо.
Получить конкретное свойство конкретного объекта. В том же модуле УправлениеСвойствами.
// Возвращает значение дополнительного свойства объекта.
//
// Параметры:
// Объект - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
// ДокументСсылка.ЗаказПокупателя, ...
// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
// дополнительный реквизит, значение которого нужно получить.
// - Строка - имя дополнительного свойства.
//
// Возвращаемое значение:
// Произвольный - любое значение, допустимое для свойства.
//
Функция ЗначениеСвойства(Объект, Свойство) Экспорт
Показать
(5)Если мы говорим о доп. реквизите то в нем есть поле для разработчиков и там можно указать имя, по которому к нему можно обращаться
Далее я делаю так:
Сегмент = УправлениеСвойствами.ЗначениеСвойства(ЗаказОбъект.Соглашение,"_O_Model")
Где ЗаказОбъект.Соглашение - владелец доп реквизита, а "_O_Model" имя заданное в форме настройки доп реквизита в области для разработчиков, в поле имя.
Канонически можно получать свойство по имени: ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","_O_Model"),
либо иными методами ПланВидовХарактеристикМенеджер.<Имя плана видов характеристик> : найти по коду или найти по наименованию
Далее я делаю так:
Сегмент = УправлениеСвойствами.ЗначениеСвойства(ЗаказОбъект.Соглашение,"_O_Model")
Где ЗаказОбъект.Соглашение - владелец доп реквизита, а "_O_Model" имя заданное в форме настройки доп реквизита в области для разработчиков, в поле имя.
Канонически можно получать свойство по имени: ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","_O_Model"),
либо иными методами ПланВидовХарактеристикМенеджер.<Имя плана видов характеристик> : найти по коду или найти по наименованию
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот