CreateChildrenIterator(Parent: IRdsDictionaryElement;
FirstElement:
Integer;
[CopyFilter:
Boolean = True]): IRdsElementsIterator;
CreateChildrenIterator(Parent: Prognoz.Platform.Interop.Rds.IRdsDictionaryElement;
FirstElement:
integer;
CopyFilter:
boolean): Prognoz.Platform.Interop.Rds.IRdsElementsIterator;
Parent. Элемент, для которого создается итератор.
FirstElement. Индекс первого элемента.
CopyFilter. Признак копирования фильтра родительского итератора.
Метод CreateChildrenIterator создает для указанного элемента справочника итератор, предназначенный для навигации по дочерним элементам.
В языке Fore параметр CopyFilter необязательный и по умолчанию имеет значение True, т.е. в дочернем итераторе используется тот же фильтр элементов, что и в родительском итераторе.
Для выполнения примера в репозитории предполагается наличие репозитория НСИ с идентификатором «RDS». Данный репозиторий должен содержать табличный справочник НСИ с идентификатором «DIC».
Добавьте ссылки на системные сборки «Metabase», «Rds».
Sub UserProc;
Var
mb: IMetabase;
rdsKey: Integer;
RdsInst: IRdsDictionaryInstance;
elSearch: IRdsDictionaryElementsSearch;
Dict: IRdsDictionary;
Iter: IRdsElementsIterator;
IterCh: IRdsElementsIterator;
Begin
mb := MetabaseClass.Active;
rdsKey := mb.GetObjectKeyById("RDS");
// Получаем справочник, в котором будет выполняться поиск
RdsInst := mb.ItemByIdNamespace("DIC", rdsKey).Open(Null) As IRdsDictionaryInstance;
Dict := RdsInst.Dictionary;
// Создаем объект для поиска по справочнику
elSearch := RdsInst.CreateSearch;
// Проверяем: выполняется ли поиск среди объектов, полученных из итератора
If Not elSearch.IsIterator Then
// Создаем итератор
Iter := RdsInst.BigElements.CreateIterator(1, 100, Null, Null);
// Устанавливаем созданный итератор для объекта, выполняющего поиск
elSearch.SetIterator(Iter);
// Выводим элементы итератора в окно консоли
Debug.WriteLine("Элементы итератора:");
Iter.First; Iter.Next;
Debug.WriteLine(Iter.Element.Name);
IterCh := Iter.CreateChildrenIterator(Iter.Element, 0, True);
IterCh.First;
While IterCh.Next Do
Debug.WriteLine(" " + IterCh.Element.Name);
End While;
End If;
End Sub UserProc;
После выполнения примера в окно консоли будет выведен первый элемент справочника и его дочерние элементы.
Для выполнения примера в репозитории предполагается наличие репозитория НСИ с идентификатором «RDS». Данный репозиторий должен содержать табличный справочник НСИ с идентификатором «DIC».
Imports Prognoz.Platform.Interop.Rds;
…
[STAThread]
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
rdsKey: uinteger;
RdsInst: IRdsDictionaryInstance;
elSearch: IRdsDictionaryElementsSearch;
Dict: IRdsDictionary;
Iter: IRdsElementsIterator;
IterCh: IRdsElementsIterator;
Begin
mb := Params.Metabase;
rdsKey := mb.GetObjectKeyById("RDS");
// Получаем справочник, в котором будет выполняться поиск
RdsInst := mb.ItemByIdNamespace["DIC", rdsKey].Open(Null) As IRdsDictionaryInstance;
Dict := RdsInst.Dictionary;
// Создаем объект для поиска по справочнику
elSearch := RdsInst.CreateSearch();
// Проверяем: выполняется ли поиск среди объектов, полученных из итератора
If Not elSearch.IsIterator Then
// Создаем итератор
Iter := RdsInst.BigElements.CreateIterator(1, 100, Null, Null);
// Устанавливаем созданный итератор для объекта, выполняющего поиск
elSearch.SetIterator(Iter);
// Выводим элементы итератора в окно консоли
System.Diagnostics.Debug.WriteLine("Элементы итератора:");
Iter.First(); Iter.Next();
System.Diagnostics.Debug.WriteLine(Iter.Element.Name);
IterCh := Iter.CreateChildrenIterator(Iter.Element, 0, True);
IterCh.First();
While IterCh.Next() Do
System.Diagnostics.Debug.WriteLine(" " + IterCh.Element.Name);
End While;
End If;
End Sub;
После выполнения примера в окно консоли будет выведен первый элемент справочника и его дочерние элементы.
См. также: