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