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