Использование дополнительных реквизитов и сведений¶
Использование дополнительных реквизитов и сведений в БП 2.0¶
- Справочник ЗначенияСвойствОбъектов
- План видов характеристик НазначенияСвойствКатегорийОбъектов
- План видов характеристик СвойстваОбъектов
- Регистр сведений ЗначенияСвойствОбъектов
Использование дополнительных реквизитов и сведений в БП 3.0, УТ11,..¶
- План видов характеристик ДополнительныеРеквизитыИСведения
- Справочник ЗначенияСвойствОбъектов (Дополнительные значения)
- Справочник ЗначенияСвойствОбъектовИерархия (Дополнительные значения (иерархия))
- Справочник НаборыДополнительныхРеквизитовИСведений
- Регистр сведений ДополнительныеСведения
- Табличная часть "Дополнительные реквизиты" справочников и документов
Использование для разных доп.реквизитов единого набора Значений дополнительных реквизитов.
Для этого для дополнительного реквизита (ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения) установить реквизит ВладелецДополнительныхЗначений = [ПВХ.ДРС владелец Значениий доп.реквизитов]
Примеры работы¶
//Получение доп.реквизита при выгрузке ЗначениеДопРеквизита = УправлениеСвойствами.ЗначениеСвойства(ДанныеИБ.Ссылка, "ДокументПолучен_1571e91ee3854e3e93c31762011f3a4d"); AdditionalInfoВставить(ДанныеXDTO, "ОригиналПолучен", ЗначениеЗаполнено(ЗначениеДопРеквизита));
//получение доп.реквизита для объекта "Источник" ЭлементПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Серия", Истина); НайденнаяСтрока = Источник.ДополнительныеРеквизиты.Найти(ЭлементПВХ, "Свойство");
//УТ11 //Доп.сведение ЭлементПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Тип", Истина); МассивСвойств = новый массив; МассивСвойств.Добавить(ЭлементПВХ); ТаблицаСвойств = УправлениеСвойствами.ПолучитьЗначенияСвойств(Источник, ложь, истина, МассивСвойств); НайденнаяСтрока = ТаблицаСвойств.Найти(ЭлементПВХ, "Свойство"); Если не НайденнаяСтрока = Неопределено Тогда Значение = НайденнаяСтрока.Значение; КонецЕсли;
//Проверим и создадим строковый доп. реквизит к справочнику Номенклатура &НаСервере функция ПроверитьДобавитьСтроковыйДопРеквизитДляНоменклатуры(ИмяРеквизита, ДлинаСтроки=0) //ищем доп. реквизит по заголовку ЭлПВХ_Ссылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок",ИмяРеквизита); Если ЭлПВХ_Ссылка.Пустая() Тогда //если не найдено, то создадим новый ЭлПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент(); ЭлПВХ.Заголовок = ИмяРеквизита; ЭлПВХ.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура; ЭлПВХ.Наименование = ЭлПВХ.Заголовок+" ("+ЭлПВХ.НаборСвойств+")"; ЭлПВХ.ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(ДлинаСтроки)); ЭлПВХ.Записать(); ЭлПВХ_Ссылка = ЭлПВХ.Ссылка; КонецЕсли; //проверим, что реквизит указан в наборе доп. реквизитов заказа покупателя НаборОб = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура.ПолучитьОбъект(); Если НаборОб.ДополнительныеРеквизиты.Найти(ЭлПВХ_Ссылка, "Свойство") = Неопределено Тогда //добавим реквизит в набор СтрНаборОб = НаборОб.ДополнительныеРеквизиты.Добавить(); СтрНаборОб.Свойство = ЭлПВХ_Ссылка; КонецЕсли; Если НаборОб.Модифицированность() Тогда //запишем при необходимости НаборОб.Записать(); КонецЕсли; Возврат ЭлПВХ_Ссылка; КонецФункции
//Установка доп.реквизита Объекта &НаСервере Процедура УстановитьДополнительныйРеквизитОбъекта(Объект, ИмяРеквизита, ЗначениеРеквизита) ЭлПВХ_Ссылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок",ИмяРеквизита); Если ЭлПВХ_Ссылка.Пустая() Тогда Сообщить("Не найден доп. реквизит "+ИмяРеквизита+", значение не установлено!"); Возврат; КонецЕсли; СтрДопРеквизиты = Объект.ДополнительныеРеквизиты.Найти(ЭлПВХ_Ссылка, "Свойство"); Если СтрДопРеквизиты = Неопределено Тогда СтрДопРеквизиты = Объект.ДополнительныеРеквизиты.Добавить(); КонецЕсли; СтрДопРеквизиты.Свойство = ЭлПВХ_Ссылка; СтрДопРеквизиты.Значение = ЗначениеРеквизита; КонецПроцедуры
Установка доп.сведения Объекта¶
&НаСервереБезКонтекста Функция ЗаписатьЗначениеДополнительногоСведения(Объект, Свойство, Значение) Попытка УстановитьПривилегированныйРежим(Истина); НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Объект); НаборЗаписей.Отбор.Свойство.Установить(Свойство); НоваяСтрокаНабора = НаборЗаписей.Добавить(); НоваяСтрокаНабора.Объект = Объект; НоваяСтрокаНабора.Свойство = Свойство; НоваяСтрокаНабора.Значение = Значение; НаборЗаписей.Записать(); Возврат Истина; Исключение Возврат Ложь; КонецПопытки; КонецФункции
Поиск Объекта по значению доп.сведения¶
&НаСервереБезКонтекста Функция НайтиОбъектПоДопСведениюСервере(Свойство, Значение) Рез = неопределено; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДополнительныеСведения.Объект КАК Объект |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Свойство = &Свойство | И ДополнительныеСведения.Значение = &Значение"; Запрос.УстановитьПараметр("Значение", Значение); Запрос.УстановитьПараметр("Свойство", Свойство); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Рез = ВыборкаДетальныеЗаписи.Объект; КонецЕсли; Возврат Рез; КонецФункции
Снятие ограничения в 150 символов на длину наименования для дополнительных значений (Справочник.ЗначенияСвойствОбъектов)¶
https://its.1c.ru/db/v8std#content:746:hdoc
#Область ОбработчикиСобытий Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) Поля.Добавить("Наименование"); Поля.Добавить("ПолноеНаименование"); СтандартнаяОбработка = Ложь; КонецПроцедуры Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) //ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); // 1cmanager.ru Снимаем ограничение на длину наименования в 150 символов Представление = ?(ПустаяСтрока(Данные.ПолноеНаименование), Данные.Наименование, Данные.ПолноеНаименование); СтандартнаяОбработка = Ложь; КонецПроцедуры #КонецОбласти
Запись дополнительных реквизитов (БСП)¶
ТаблицаСвойств = Новый ТаблицаЗначений; ТаблицаСвойств.Колонки.Добавить("Свойство"); ТаблицаСвойств.Колонки.Добавить("Значение"); НоваяСтрока = ТаблицаСвойств.Добавить(); НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "СерияДатаУтилизацииОбразца"); НоваяСтрока.Значение = ТекущаяДатаСеанса(); НоваяСтрока = ТаблицаСвойств.Добавить(); НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "СерияОтветственныйЗаУтилизацию"); НоваяСтрока.Значение = ПараметрыСеанса.ТекущийПользователь; Для каждого СерияСсылка из МассивСерий Цикл УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СерияСсылка, ТаблицаСвойств); КонецЦикла;