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