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