Difference between revisions of "MassLoadObjects"
m (1 revision imported) |
|
(No difference)
| |
Latest revision as of 07:51, 7 February 2021
| MassLoadObjects (Загрузка группы объектов) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция производит загрузку произвольного количества объектов из списка, таблицы или являющихся реквизитами объекта БД, одновременно, что быстрее, чем загрузка этих объектов последовательно один за другим. Дополнительные параметры позволяют настроить загрузку, в т.ч. ограничить ее загрузкой только заголовков. Попадающие в выборку объекты, не являющиеся объектами базы данных, будут пропущены, также будут пропущены уже загруженные объекты. Функции разрешено передавать смешанные объекты, принадлежащие разным базам данных. Функция гарантирует всего один запрос к серверу (сервер может создать множество запросов к базе данных) на один вызов, это может ускорить работу в сетях с низкой скоростью ответа (latency), к примеру в Интернет. См. также статью Объект базы данных.
Синтаксис
MassLoadObjects(<Объект для загрузки>,<Аргумент 1>,<Аргумент 2>,<Также загружать периодические реквизиты (INT)>=0,<Производить загрузку заголовков (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>=""):<Количество объектов, которые были загружены (INT)>
Аргументы
<Объект для загрузки>- Объект, содержащий объекты для загрузки. Данный объект может быть:- список значений -- будут загружены объекты из списка. Последующие два аргумента могут задавать начальный индекс списка (первый объект для загрузки) и конечный индекс списка (последний объект для загрузки) соответственно.
- таблица значений -- будут загружены объекты из таблицы значений. Последующие два аргумента могут иметь следующее значение:
- В случае, если аргументы представляют собой целые числа, они задают индекс начальной строки загрузки и индекс конечной строки загрузки соответственно. В этом режиме объекты будут собираться из всех столбцов таблицы. Для исключения определенных столбцов таблицы из загрузки также смотрите статью ForbidMassLoad.
- В случае, если аргументы представляют собой строки, первый задает наименования столбцов для загрузки через запятую (пустое значение -- все столбцы), второй задает наименования столбцов для пропуска (т.е., список столбцов, которые не нужно загружать) через запятую. В этом режиме объекты будут собираться для всех строк таблицы, но только для определенных ее столбцов. Для исключения определенных столбцов таблицы из загрузки также смотрите статью ForbidMassLoad.
- дерево значений или ветка дерева значений -- будут загружены объекты из дерева/ветки значений. Дополнительные аргументы не требуются.
- объект базы данных -- если объект загружен, будут загружены любые объекты, являющиеся его реквизитами. Также будут загружены любые объекты любой из его загруженных строчных частей. Дополнительные аргументы не требуются.
<Аргумент 1>,<Аргумент 2>- (необязательный аргумент) Значения этих аргументов зависят от типа объекта загрузки (первого аргумента).<Также загружать периодические реквизиты (INT)>=0- (необязательный аргумент) Режим позволяет при загрузке объектов также загружать их периодические реквизиты (см. статью Объект базы данных). Периодические реквизиты будут загружены на дату периодических реквизитов объектов (см. UseDate).<Производить загрузку заголовков (INT)>=0- (необязательный аргумент) Режим загрузки только заголовков (см. статью Объект базы данных). Аргумент может принимать следующие значения:- 0 -- производить полную загрузку объектов
- 1 -- производить загрузку объектов в режиме только заголовки или частичная загрузка (в зависимости от наличия следующего аргумента), объекты, которые не могут быть загружены частично, будут пропущены. К примеру, если при настройке проекта для объекта не задан реквизит сортировки, данный объект не может быть загружен в режиме только заголовков.
- 2 -- производить загрузку объектов в режиме только заголовки или частичная загрузка (в зависимости от наличия следующего аргумента), объекты, которые не могут быть загружены частично, будут загружены полностью. К примеру, если при настройке проекта для объекта не задан реквизит сортировки, данный объект не может быть загружен в режиме только заголовков.
<Доп. реквизиты при загрузке заголовков (STRING)>- (необязательный аргумент) Список наименований реквизитов через запятую, которые будут загружены дополнительно в режиме загрузки только заголовков. В случае, когда этот аргумент задан, объекты будут загружены в режиме "частичная загрузка". Если наименование реквизита в загружаемом объекте отсутствует, оно будет пропущено. Таким образом можно загружать разные объекты одним вызовом функции, указав всю совокупность реквизитов для частичной загрузки.
Возвращаемое значение
Возвращает количество объектов, которые участвовали в загрузке.
Примеры
//Ниже дан кусок кода для события OnBeforeLoadElements, производится заполнение таблицы Tab, в которую загружаются
// подчиненные элементы справочника НаценкиНаГруппы, чтобы ускорить загрузку и уменьшить потребление памяти,
// при этом, для таблицы необходимы не сами элементы, а объекты, помещенные в реквизит ГруппаНоменклатуры, т.е., элементы
// представляют собой строчную часть с одним реквизитом ГруппаНоменклатуры.
// Нам необходимо собрать все объекты из реквизитов ГруппаНоменклатуры и осуществить их загрузку в режиме частичной загрузки.
//
// В таблице выводятся наименование загруженных объектов, реквизит "Code" загруженных объектов и иконка, соответствующая папке,
// если элемент был папкой справочника Номенклатура. Поэтому для частичной загрузки достаточно реквизита "Code", остальные
// перечисленные свойства всегда загружаются в этом режиме.
//
Tab:=Form.Tab.Value;
aEl:=Ref.НаценкиНаГруппы;
//Загрузка нужных элементов (не удаленных) справочника НаценкиНаГруппы в список aList
//Полная загрузка будет осуществлена быстро, так как элементы простые и содержат минимум реквизитов
aList:=aEl.Load(0,"@Parent,@Status",Form.Tab.ParentElement,0);
//Заполняем вспомогательный список bList, для частичной загрузки всех реквизитов ГруппаНоменклатуры
bList:=List.Create();
//Цикл по всем загруженным элементам НаценкиНаГруппы
For i:=1 To aList.Size() Do
Эл:=aList.Get(i);
//Создание списка bList, состоящего из реквизитов ГруппаНоменклатуры загруженных элементов
// каждый из этих реквизитов пока не загружен, реквизиты содержат справочник Номенклатуры, с "тяжелыми" для загрузки элементами.
bList.Add(Эл.ГруппаНоменклатуры);
EndDo;
//Загрузка всех накопленных элементов в режиме частичной загрузки, будут загружены наименования, реквизиты сортировки, свойства типа "удален", "папка" и пр.,
// и реквизит "Code", требуемый для отображения
MassLoadObjects(bList,,,0,1,"Code");
Tab.Lock();
Try
//Заполняем визуальную таблицу Tab из оригинального списка aList
//Важно понимать, что все реквизиты ГруппаНоменклатуры каждого из элементов списка загружены
// в режиме частичной загрузки ранее, для этого мы собирали их в список и вызывали MassLoadObjects
aList.CopyTo(Tab,1,aList.Size(),"@ELEMENT");
Tab.Select();
While Tab.Next() Do
Эл:=Tab.Get(Tab.CurLine,"@ELEMENT");
//Эл.ГруппаНоменклатуры -- загружен в режиме частичной загрузки,
// чтение реквизитов и свойств, типа isFolder, Status не приведет к полной загрузке
Tab.isFolder:=Эл.ГруппаНоменклатуры.isFolder();
//Вывод на экран представления элемента также не приведет к к полной загрузке элемента
Tab.ГруппаНоменклатуры:=Эл.ГруппаНоменклатуры;
//Частичная загрузка также включала реквизит "Code", поэтому его безопасно добавить в выводимую таблицу
Tab.Code:=Эл.ГруппаНоменклатуры.Code;
//При частичной загрузке загруженных свойств достаточно, чтобы показать стандартную иконку (папка, элемент, удаленная папка, удаленный элемент)
//Обратите внимание: стандартная иконка выводится для реквизита ГруппаНоменклатуры, а не для самого элемента Эл
Tab.Icon(i,"Icon",GetStandardIcon(Эл.ГруппаНоменклатуры));
//Остальные свойства берутся из элементов справочника НаценкиНаГруппы, которые подверглись полной загрузке
Tab.Сумма:=Эл.Сумма;
Tab.Процент:=Эл.Процент;
EndDo;
//Сортируем таблицу с учетом текущих визуальных настроек сортировки
Стр:="isFolder-"+?(Form.Tab.SortString="","",","+Form.Tab.SortString);
Tab.Sort(Стр);
Finally
Tab.Unlock();
EndTry;