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