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;