&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИнициализироватьДополнительныеРеквизиты();
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьДополнительныеРеквизиты()
ДопРеквизиты = Новый СписокЗначений ;
Реквизит = Новый Структура ;
// Обязательные свойства реквизита
Реквизит.Вставить("Наименование", "ДопКонтрагент") ;
Реквизит.Вставить("ТипЗначения", Новый ОписаниеТипов("СправочникСсылка.Контрагенты")) ; // Новый ОписаниеТипов("Строка")), Новый ОписаниеТипов("Булево")) ...
Реквизит.Вставить("СправочникНаборДопРек", Справочники.НаборыДополнительныхРеквизитовИСведений.Документ_ЗаказПокупателя) ;
// НЕ обязательные свойства реквизита
Реквизит.Вставить("ЭтоДополнительноеСведение", Ложь) ;
Реквизит.Вставить("Заголовок", "Доп. контрагент тест") ;
Реквизит.Вставить("Доступен", Истина) ;
Реквизит.Вставить("ЗаполнятьОбязательно", Ложь) ;
Реквизит.Вставить("МногострочноеПолеВвода", 0) ;
ДопРеквизиты.Добавить(Реквизит) ;
ПроверитьНаличиеДопРекизитов(ДопРеквизиты) ;
КонецПроцедуры
&НаСервере
Процедура ПроверитьНаличиеДопРекизитов(ДопРеквизиты)
ТаблицаРеквизитов = Новый ТаблицаЗначений ;
ТаблицаРеквизитов.Колонки.Добавить("Реквизит", Новый ОписаниеТипов("Строка", ,Новый КвалификаторыСтроки(150))) ;
СоответствиеРеквизитов = Новый Соответствие ;
Для Каждого Стр Из ДопРеквизиты Цикл
НС = ТаблицаРеквизитов.Добавить() ;
НС.Реквизит = Стр.Значение.Наименование ;
СоответствиеРеквизитов.Вставить(НС.Реквизит, Стр.Значение) ;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реквизиты.Реквизит
|ПОМЕСТИТЬ ТМП
|ИЗ
| &Реквизиты КАК Реквизиты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка,
| ТМП.Реквизит
|ИЗ
| ТМП КАК ТМП
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ТМП.Реквизит = ДополнительныеРеквизитыИСведения.Наименование";
Запрос.Параметры.Вставить("Реквизиты", ТаблицаРеквизитов) ;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.Ссылка = NULL Тогда
СтруктураДляНовогоРеквизита = СоответствиеРеквизитов.Получить(ВыборкаДетальныеЗаписи.Реквизит) ;
СоздатьДополнительныйРеквизит(ВыборкаДетальныеЗаписи.Реквизит,
СтруктураДляНовогоРеквизита.ТипЗначения,
СтруктураДляНовогоРеквизита.СправочникНаборДопРек,
?(СтруктураДляНовогоРеквизита.Свойство("ЭтоДополнительноеСведение"), СтруктураДляНовогоРеквизита.ЭтоДополнительноеСведение, Ложь),
?(СтруктураДляНовогоРеквизита.Свойство("Заголовок"), СтруктураДляНовогоРеквизита.Заголовок, ""),
?(СтруктураДляНовогоРеквизита.Свойство("Доступен"), СтруктураДляНовогоРеквизита.Доступен, Истина),
?(СтруктураДляНовогоРеквизита.Свойство("ЗаполнятьОбязательно"), СтруктураДляНовогоРеквизита.ЗаполнятьОбязательно, Ложь),
?(СтруктураДляНовогоРеквизита.Свойство("МногострочноеПолеВвода"), СтруктураДляНовогоРеквизита.МногострочноеПолеВвода, 0)) ;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция СоздатьДополнительныйРеквизит(Наименование, ТипЗначения, СправочникНаборДопРек, ЭтоДополнительноеСведение = Ложь,
Заголовок = "", Доступен = Истина, ЗаполнятьОбязательно = Ложь, МногострочноеПолеВвода = 0)
Если Заголовок = "" Тогда
Заголовок = Наименование ;
КонецЕсли;
Если ТипЗначения = Тип("СправочникСсылка.ЗначенияСвойствОбъектов")
ИЛИ ТипЗначения = Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия") Тогда
ДополнительныеЗначенияИспользуются = Истина ;
Иначе
ДополнительныеЗначенияИспользуются = Ложь ;
КонецЕсли;
НР = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент() ;
НР.Виден = Истина ;
НР.Наименование = Наименование ;
НР.ДополнительныеЗначенияИспользуются = ДополнительныеЗначенияИспользуются ;
НР.ДополнительныеЗначенияСВесом = Ложь ;
НР.Доступен = Истина ;
НР.Заголовок = Заголовок ;
НР.ЗаголовокФормыВыбораЗначения = Заголовок ;
НР.ЗаголовокФормыЗначения = Заголовок ;
НР.ЗаполнятьОбязательно = ЗаполнятьОбязательно ;
НР.МногострочноеПолеВвода = МногострочноеПолеВвода ;
НР.ЭтоДополнительноеСведение = ЭтоДополнительноеСведение ;
НР.НаборСвойств = СправочникНаборДопРек ;
НР.ТипЗначения = ТипЗначения ;
НР.Записать();
ЗаписьНабора = СправочникНаборДопРек.ПолучитьОбъект();
Если ЭтоДополнительноеСведение Тогда
НовСвойство = ЗаписьНабора.ДополнительныеСведения.Добавить();
Иначе
НовСвойство = ЗаписьНабора.ДополнительныеРеквизиты.Добавить();
КонецЕсли;
НовСвойство.Свойство = НР.Ссылка;
ЗаписьНабора.Записать();
Сообщить("Создан доп. реквизит: " + НР.Заголовок) ;
Возврат НР.Ссылка ;
КонецФункции