Довідковий матеріал

Читання окремих реквізитів об'єкта з бази даних

Під час читання окремих реквізитів об'єкта з бази даних слід мати на увазі, що виклик методу ПолучитьОбъект або звернення до реквізитів об'єкта через крапку від посилання призводить до завантаження об'єкта з бази цілком, разом із його табличними частинами.

Абстрактна база даних і картка об’єкта: вузький запит отримує лише два реквізити, не завантажуючи весь об’єкт із табличними даними.

Під час читання окремих реквізитів об'єкта з бази даних слід мати на увазі, що виклик методу ПолучитьОбъект або звернення до реквізитів об'єкта через крапку від посилання призводить до завантаження об'єкта з бази цілком, разом із його табличними частинами.

Тому для читання значень окремих реквізитів із бази даних слід використовувати запит. Наприклад, неправильно:

Процедура ЗаполнитьКодИНаименованиеСтраны()
	
	СтранаСсылка =// отримуємо посилання на елемент довідника 
	КодСтраны = СтранаСсылка.Код; // перше звернення завантажує об'єкт цілком
	НаименованиеСтраны = СтранаСсылка.Наименование;
	
КонецПроцедуры

правильно:

Процедура ЗаполнитьКодИНаименованиеСтраны()
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	| СтраныМира.Код,
	| СтраныМира.Наименование
	|ИЗ
	| Справочник.СтраныМира КАК СтраныМира
	|ГДЕ
	| СтраныМира.Ссылка = &Ссылка");
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	КодСтраны = Выборка.Код;
	НаименованиеСтраны = Выборка.Наименование;
	
КонецПроцедуры

Для спрощення синтаксису також рекомендується використовувати спеціальні функції ПолучитьЗначенияРеквизитов або ПолучитьЗначениеРеквизита (входять до складу Бібліотеки стандартних підсистем):

Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	| " + ИменаРеквизитов + "
	|ИЗ
	| " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица
	|ГДЕ
	| Таблица.Ссылка = &Ссылка";
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	Результат = Новый Структура(ИменаРеквизитов);
	ЗаполнитьЗначенияСвойств(Результат, Выборка);
	
	Возврат Результат;
	
КонецФункции
Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт
	
	Результат = ПолучитьЗначенияРеквизитов(Ссылка, ИмяРеквизита);
	Возврат Результат[ИмяРеквизита];
	
КонецФункции

У цьому разі вихідний приклад матиме такий вигляд:

Процедура ЗаполнитьКодИНаименованиеСтраны()
	
	ЗначенияРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(СтранаСсылка, "Код, Наименование");
	КодСтраны = ЗначенияРеквизитов.Код;
	НаименованиеСтраны = ЗначенияРеквизитов.Наименование;
	
КонецПроцедуры
Записатися телефоном