Исходный код
'Тест методов и свойств колллекции TDMSClassifiers:
'Создать два новых классификатора, переставить их местами и удалить
'=====================================================================
'Получить коллекции классификаторов 1го и 2го уровня
Set Col_1 = ThisApplication.Classifiers
Set Col_2 = Col_1(0).Classifiers
'-------------------- метод Create
'Создать классификатор как дочерний для первого раздела
Set cls1 = Col_1.Create 'Создали классификатор на верхнем уровне
cls1.Parent = ThisApplication.Classifiers(0) 'Переместили его в состав первого раздела
cls1.Description = "Классификатор-тест 1" 'Дали описание
'То же самое можно было сделать так (создать сразу в первом разделе):
Set cls2 = Col_2.Create
cls2.Description = "Классификатор-тест 2"
'-------------------- метод Swap
'Сообщить порядковые номера созданных классификаторов в коллекции
MsgBox Col_2.Index(cls1) & Chr(13) & Col_2.Index(cls2)
'Переставить классификаторы местами (пока в локальной коллекции)
Col_2.Swap cls1, cls2
'Теперь обновить базу данных
Col_2.Update
'Сообщить новые порядковые номера
MsgBox Col_2.Index(cls1) & Chr(13) & Col_2.Index(cls2)
'-------------------- Разбор ошибок
'Как делать нельзя:
'При обращении ThisApplication.Classifiers(0).Classifiers запрашивается
'коллекция классификаторов
ThisApplication.Classifiers(0).Classifiers.Swap cls1, cls2
'Теперь коллекция запрашивается снова и выполняется запрос на обновление информации в базе (Update).
'Все изменения, произведенные методом Swap, потеряны.
With ThisApplication.Classifiers(0).Classifiers
.Update
MsgBox "Старый индекс: " & Col_2.Index(cls1) & " Новый: " & .Index(cls1) _
& Chr(13) & "Старый индекс: " & Col_2.Index(cls2) & " Новый: " & .Index(cls2) 'индексы не изменились
End With
'-------------------- методы Erase, Remove
'Удалить созданные классификаторы.
'Способ 1. Удаление объекта из базы выполняется немедленно,
'однако как бы в обход коллекции: здесь он все еще существует
cls1.Erase
MsgBox "Локальная коллекция, Has(cls1): " & Col_2.Has(cls1)
MsgBox "База данных, Has(cls1): " & ThisApplication.Classifiers(0).Classifiers.Has(cls1)
'Объект все еще можно получить из локальной коллекции
Set LocalCls = Col_2.Item("Классификатор-тест 1")
MsgBox LocalCls.Sysname
'Чтобы "увидеть", что объект уже удален, надо выполнить обновление
Col_2.Update
MsgBox "Локальная коллекция, Has(cls1) (обновление): " & Col_2.Has("Классификатор-тест 1")
'Способ 2. Удаление объекта производится одновременно из коллекции и базы данных
Col_2.Remove cls2
MsgBox "Локальная коллекция, Has(cls2): " & Col_2.Has("Классификатор-тест 2")
MsgBox "База данных, Has(cls2): " & ThisApplication.Classifiers(0).Classifiers.Has("Классификатор-тест 2")
'=====================================================================