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