1С-Предприятие 8.0. Практическое пособие разработчика


Особенности использования ссылочных данных - часть 2


Например, если взять наш документ "ОказаниеУслуги", то в поле, хранящем реквизит табличной части "Номенклатура" на самом деле находится внутренний идентификатор, указывающий на элемент справочника "Номенклатура":

Когда в обработчике события "ОбработкаПроведения" документа "ОказаниеУслуги" мы присваиваем значение реквизита "Номенклатура" табличной части какой-либо переменной, мы имеем дело с объектом ДокументОбъект.ОказаниеУслуги. Этот объект содержит в себе значения всех реквизитов документа и реквизитов его табличных частей. Поэтому обращение:

Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

приводит к тому, что мы просто читаем данные, хранящиеся в оперативной памяти:

Однако когда мы обращаемся к виду номенклатуры как к реквизиту того элемента справочника, ссылка на который указана в табличной части документа:

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Материал Toгда[235]

 

произойдет буквально следующее:

Поскольку в объекте ДокументОбъект.ОказаниеУслуги есть только ссылка на элемент справочника "Номенклатура" и больше никаких данных об этом элементе нет, система возьмет эту ссылку и обратится по ней в кэш объектов, в надежде найти там данные того объекта, ссылка на который у нее есть. Если кэш объектов не будет иметь нужных данных, он обратится к базе данных с тем, чтобы прочитать все данные объекта, ссылкой на который он обладает. После того, как все данные, хранящиеся в реквизитах нужного элемента справочника и в реквизитах его табличных частей, будут считаны в кэш объектов, кэш объектов вернет запрашиваемую ссылку, хранящуюся в реквизите "ВидНоменклатуры" справочника "Номенклатура".[236]

Как несложно догадаться, подобное обращение к базе данных требует гораздо большего количества времени, нежели просто чтение из оперативной памяти. При интерактивном заполнении документа, подобные задержки ничтожно малы, по сравнению со скоростью работы пользователя. Однако при выполнении большого количества расчетов (например, при проведении больших документов, содержащих несколько тысяч строк), разница во времени может быть довольно заметной.




Начало  Назад  Вперед