Набор функций для работы со свойствами
Для работы со свойствами я как правило добавляю общий модуль, который содержит всего 4 процедуры, способные без проблем обеспечить процесс записи или чтения свойств номенклатуры или любых других объектов в базе данных 1С:Предприятие.
Функция поиска свойства по его названию.
1 2 3 4 5 6 7 8 9 10 |
Функция ВернутьСвойствоПоНаименованию(Наименование, Создавать = Истина) Экспорт Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(СокрЛП(Наименование)); Если НЕ ЗначениеЗаполнено(Свойство) И Создавать Тогда Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент(); Свойство.Наименование = Наименование; Свойство.Записать(); Свойство = Свойство.Ссылка; КонецЕсли; Возврат Свойство; КонецФункции |
Функция чтения значения свойства, если мы имеем объект свойства. В запросе символы «&» заменить на знак амперсанда. Это отображение кода на сайте подменяет символы их кодированным значением. Короче, баг этого сайта. Уж, извините…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Функция ПрочитатьЗначениеСвойства(Объект, Свойство) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЗначениеСвойств.Значение |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначениеСвойств |ГДЕ | ЗначениеСвойств.Объект = &Объект | И ЗначениеСвойств.Свойство = &Свойство"; Запрос.УстановитьПараметр("Объект", Объект); Запрос.УстановитьПараметр("Свойство", Свойство); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() Тогда Выборка.Следующий(); Возврат Выборка.Значение; КонецЕсли; Возврат Неопределено; КонецФункции |
Функция чтения значения свойства по его названию. По факту сначала ищем объект свойства по названию, а потом уже значение этого свойства.
1 2 3 4 |
Функция ПрочитатьЗначениеСвойстваПоНаименованию(Объект, Наименование) Экспорт Свойство = ВернутьСвойствоПоНаименованию(Наименование); Возврат ПрочитатьЗначениеСвойства(Объект, Свойство); КонецФункции |
Функция записи значения свойства, если знаем свойство и его значение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Процедура ЗаписатьЗначениеСвойства(Объект, Свойство, Значение) Экспорт ПустоеСвойство = Ложь; Если ТипЗнч(Значение) = Тип("Строка") Тогда ПустоеСвойство = СтрДлина(СокрЛП(Значение)) = 0; ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда Иначе ПустоеСвойство = НЕ ЗначениеЗаполнено(Значение); КонецЕсли; Рег = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); Рег.Объект = Объект; Рег.Свойство = Свойство; Если ПустоеСвойство Тогда Попытка Рег.Прочитать(); Если ЗначениеЗаполнено(Рег.Объект) Тогда Рег.Удалить(); КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Иначе Рег.Значение = Значение; Рег.Записать(Истина); КонецЕсли; КонецПроцедуры |
Функция записи поиска свойства по наименованию и записи его значения. Используется в том случае, если мы не имеем ссылки или объекта свойства и его ещё надо найти перед записью значения.
1 2 3 4 5 |
Процедура ЗаписатьЗначениеСвойстваПоНаименованию(Объект, Наименование, Значение) Экспорт Свойство = ВернутьСвойствоПоНаименованию(Наименование); ЗаписатьЗначениеСвойства(Объект, Свойство, Значение); КонецПроцедуры |
Для работы с этими функциями, вы должны поместить их в один модуль и более детально рассмотреть принцип их работы. Этих пяти функций вполне достаточно для работы со свойствами в любых их проявлениях. Сам ими пользуюсь уже более 3 лет, потому могу с уверенностью сказать, что хватает. 🙂