Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
ru:technical_manual:work_via_ole:list [2017/04/21 15:31] |
ru:technical_manual:work_via_ole:list [2023/03/16 12:20] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Класс "Система.Список" ====== | ||
+ | Данный класс используется для работы со списками элементов. | ||
+ | == == | ||
+ | **Внимание!** При работе со списком используйте циклы **for** и **while**, а не **foreach**. | ||
+ | ====== ====== | ||
+ | |||
+ | ===== Свойство КоличествоЭлементов ===== | ||
+ | |||
+ | **Свойство**: КоличествоЭлементов | ||
+ | |||
+ | **Тип параметра**: Int (целое число). | ||
+ | |||
+ | Свойство содержит число, показывающее количество элементов списка. | ||
+ | |||
+ | **Пример кода**. | ||
+ | |||
+ | __Задача__: определить количество в справочнике физических лиц, определить ФИО первого и третьего элемента, удалить и добавить физлицо. | ||
+ | |||
+ | <code> | ||
+ | Sub ПримерOLE_РаботаСоСписком() | ||
+ | |||
+ | |||
+ | |||
+ | 'БД и редакция Business Studio, с которыми будем работать | ||
+ | |||
+ | СерверБД = "ИмяСервера" | ||
+ | |||
+ | База = "ИмяБазы" | ||
+ | |||
+ | Редакция = "РедакцияПрограммы" | ||
+ | |||
+ | |||
+ | |||
+ | 'Получение объекта приложения | ||
+ | |||
+ | Set oleapp = CreateObject("ByteEnterprise.OleApplication") | ||
+ | |||
+ | |||
+ | |||
+ | 'Запустить Business Studio в той редакции и с выбором того сервера и базы, какие указаны ранее. | ||
+ | |||
+ | 'В Диспетчере задач появится Business Studio. В панели задач приложения не будет видно. | ||
+ | |||
+ | Set client_app = oleapp.ЗапуститьКлиентскоеПриложение(СерверБД, База, Редакция) | ||
+ | |||
+ | oleapp.ПоказатьКлиентскоеПриложение 'В панели задач появится приложение | ||
+ | |||
+ | |||
+ | |||
+ | '***************************************************************** | ||
+ | |||
+ | 'Начало работы с данными, сортировка списка и удаление по индексу | ||
+ | |||
+ | '***************************************************************** | ||
+ | |||
+ | |||
+ | |||
+ | 'Получаем список всех физ.лиц | ||
+ | |||
+ | Set ФизЛицаОПУ = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.ФизЛица") | ||
+ | |||
+ | Set ФизЛицаФильтр = ФизЛицаОПУ.СоздатьФильтр | ||
+ | |||
+ | Set ФизЛицаСписок = ФизЛицаФильтр.Выполнить | ||
+ | |||
+ | |||
+ | |||
+ | 'Количество физ.лиц в списке | ||
+ | |||
+ | КолвоФизЛицДоУдаления = ФизЛицаСписок.КоличествоЭлементов | ||
+ | |||
+ | |||
+ | |||
+ | 'Запоминаем первое физ.лицо полученного списка | ||
+ | |||
+ | ПервоеФизЛицоДоСортировки = ФизЛицаСписок.ПолучитьЭлемент(0) | ||
+ | |||
+ | |||
+ | |||
+ | 'Сортируем список физ.лиц по дате рождения | ||
+ | |||
+ | ФизЛицаСписок.Сортировать ("ДатаРождения") | ||
+ | |||
+ | |||
+ | |||
+ | 'Запоминаем 1 и 3-е физ.лицо отсортированного списка | ||
+ | |||
+ | ПервоеФизЛицоПослеСортировки = ФизЛицаСписок.ПолучитьЭлемент(0) | ||
+ | |||
+ | ТретьеФизЛицоПослеСортировки = ФизЛицаСписок.ПолучитьЭлемент(2) | ||
+ | |||
+ | |||
+ | |||
+ | 'Удаляем третье физ.лицо списка. При этом в справочнике физ.лиц оно не будет удалено. | ||
+ | |||
+ | ФизЛицаСписок.УдалитьИзСпискаПоИндексу (2) | ||
+ | |||
+ | |||
+ | |||
+ | 'Количество физ.лиц в списке | ||
+ | |||
+ | КолвоФизЛицПослеУдаленияПоИдексу = ФизЛицаСписок.КоличествоЭлементов | ||
+ | |||
+ | |||
+ | |||
+ | '***************************************************************** | ||
+ | |||
+ | 'Добавление физ.лиц, удаление по объекту | ||
+ | |||
+ | '***************************************************************** | ||
+ | |||
+ | |||
+ | |||
+ | 'Добавляем новое физ.лицо с фамилией "Пушкин" | ||
+ | |||
+ | Set НовоеФизЛицо1 = ФизЛицаСписок.Добавить | ||
+ | |||
+ | НовоеФизЛицо1.Фамилия = "Пушкин" | ||
+ | |||
+ | НовоеФизЛицо1.Имя = "Александр" | ||
+ | |||
+ | НовоеФизЛицо1.Отчество = "Сергеевич" | ||
+ | |||
+ | НовоеФизЛицо1.Сохранить 'Физлицом сохраниться в справочнике физ.лиц | ||
+ | |||
+ | |||
+ | |||
+ | 'Добавляем новое физ.лицо с фамилией "Дантес". | ||
+ | |||
+ | Set НовоеФизЛицо2 = ФизЛицаСписок.Добавить | ||
+ | |||
+ | НовоеФизЛицо2.Фамилия = "Дантес" | ||
+ | |||
+ | НовоеФизЛицо2.Имя = "Жорж" | ||
+ | |||
+ | НовоеФизЛицо2.Отчество = "Шарль" | ||
+ | |||
+ | НовоеФизЛицо2.Сохранить 'Физлицом сохраниться в справочнике физ.лиц | ||
+ | |||
+ | |||
+ | |||
+ | 'Количество физ.лиц в списке после добавления | ||
+ | |||
+ | КолвоФизЛицПослеДобавления = ФизЛицаСписок.КоличествоЭлементов | ||
+ | |||
+ | |||
+ | |||
+ | 'Последнее физ.лицо в списке после добавления | ||
+ | |||
+ | ПослФизЛицоСпискаПослеДобавления = _ | ||
+ | |||
+ | ФизЛицаСписок.ПолучитьЭлемент(КолвоФизЛицПослеДобавления - 1) | ||
+ | |||
+ | |||
+ | |||
+ | 'Удаляем второе добавленное физ.лицо. При этом в справочнике физ.лиц оно не будет удалено. | ||
+ | |||
+ | Set ФизЛицоУдаления = НовоеФизЛицо2 | ||
+ | |||
+ | ФизЛицаСписок.УдалитьИзСпискаОбъект (ФизЛицоУдаления) | ||
+ | |||
+ | |||
+ | |||
+ | 'Количество физ.лиц в списке после удаления | ||
+ | |||
+ | КолвоФизЛицПослеУдаленияПоОбъекту = ФизЛицаСписок.КоличествоЭлементов | ||
+ | |||
+ | |||
+ | |||
+ | 'Последнее физ.лицо в списке после удаления | ||
+ | |||
+ | ПослФизЛицоСпискаПослеУдалПоОбъекту = _ | ||
+ | |||
+ | ФизЛицаСписок.ПолучитьЭлемент(КолвоФизЛицПослеУдаленияПоОбъекту - 1) | ||
+ | |||
+ | |||
+ | |||
+ | 'Выводим сообщение о проделанной работе | ||
+ | |||
+ | MsgBox "Физические лица" + Chr(13) + Chr(13) + _ | ||
+ | |||
+ | "Исходный список физ.лиц" + Chr(13) + _ | ||
+ | |||
+ | " Кол-во физ.лиц =" + CStr(КолвоФизЛицДоУдаления) + Chr(13) + _ | ||
+ | |||
+ | " Первое физ.лицо: " + ПервоеФизЛицоДоСортировки + Chr(13) + Chr(13) + _ | ||
+ | |||
+ | "Список после сортировки по Дате рождения" + Chr(13) + _ | ||
+ | |||
+ | " Первое физ.лицо: " + ПервоеФизЛицоПослеСортировки + Chr(13) + Chr(13) + _ | ||
+ | |||
+ | "Список после удаления 3-го физ.лица (по индексу)" + Chr(13) + _ | ||
+ | |||
+ | " Кол-во физ.лиц = " + CStr(КолвоФизЛицПослеУдаленияПоИдексу) + Chr(13) + _ | ||
+ | |||
+ | " Третье физ.лицо '" + ТретьеФизЛицоПослеСортировки + "' было удалено" + Chr(13) + _ | ||
+ | |||
+ | Chr(13) + _ | ||
+ | |||
+ | "Список после добавления физ.лиц" + Chr(13) + _ | ||
+ | |||
+ | " Кол-во физ.лиц = " + CStr(КолвоФизЛицПослеДобавления) + Chr(13) + _ | ||
+ | |||
+ | " Добавлены: " + НовоеФизЛицо1.Фамилия + " и " + НовоеФизЛицо2.Фамилия + Chr(13) + _ | ||
+ | |||
+ | " Последнее Физ.лицо списка: " + ПослФизЛицоСпискаПослеДобавления + Chr(13) + Chr(13) + _ | ||
+ | |||
+ | "Список после удаления физ.лица" + Chr(13) + _ | ||
+ | |||
+ | " Кол-во физ.лиц = " + CStr(КолвоФизЛицПослеУдаленияПоОбъекту) + Chr(13) + _ | ||
+ | |||
+ | " Удалено физ.лицо: " + ФизЛицоУдаления + Chr(13) + _ | ||
+ | |||
+ | " Последнее Физ.лицо списка: " + ПослФизЛицоСпискаПослеУдалПоОбъекту | ||
+ | |||
+ | |||
+ | |||
+ | End Sub | ||
+ | </code> | ||
+ | |||
+ | ===== Метод Добавить ===== | ||
+ | |||
+ | **Синтаксис**: Добавить() | ||
+ | |||
+ | **Возвращаемый результат**: Система.МетаКласс (см. [[ru/technical_manual/work_via_ole/metaclass]]) | ||
+ | |||
+ | Метод создает объект и добавляет его в качестве элемента в конец списка. | ||
+ | |||
+ | Чтобы добавленный элемент появился в справочнике модели, необходимо выполнить сохранение объекта-владельца списка. (см. [[ru/technical_manual/work_via_ole/metaclass#метод_сохранить|Mетод Сохранить]]). | ||
+ | |||
+ | **Пример кода**. См. код в свойстве "КоличествоЭлементов" ([[ru/technical_manual/work_via_ole/list#свойство_количествоэлементов|Cвойство КоличествоЭлементов]]). | ||
+ | |||
+ | ===== Метод ДобавитьОбъект ===== | ||
+ | |||
+ | **Синтаксис**: ДобавитьОбъект(object <Объект>) | ||
+ | |||
+ | **Возвращаемый результат**: не возвращает. | ||
+ | |||
+ | Метод добавляет к списку элемент на основе уже существующего в базе объекта, в отличие от метода "Добавить" ([[ru/technical_manual/work_via_ole/list#метод_добавить|Mетод Добавить]]), который добавляет полностью новый объект. Может использоваться для формирования вспомогательных временных списков в памяти, не имеющих владельца. | ||
+ | |||
+ | **Пример кода**. | ||
+ | |||
+ | __Задача__: получить список, состоящий из всех ролей организации и подразделения-организации (субъект "ИнТехПроект"). | ||
+ | |||
+ | <code> | ||
+ | Sub ПримерOLE_РаботаСоСписком() | ||
+ | |||
+ | |||
+ | |||
+ | ' БД и редакция Business Studio, с которыми будем работать | ||
+ | |||
+ | СерверБД = "ИмяСервера" | ||
+ | |||
+ | База = "ИмяБазы" | ||
+ | |||
+ | Редакция = "РедакцияПрограммы" | ||
+ | |||
+ | |||
+ | |||
+ | 'Получение объекта приложения | ||
+ | |||
+ | Set oleapp = CreateObject("ByteEnterprise.OleApplication") | ||
+ | |||
+ | |||
+ | |||
+ | 'Запустить Business Studio в той редакции и с выбором того сервера и базы, какие указаны ранее. | ||
+ | |||
+ | 'В Диспетчере задач появится Business Studio. В панели задач приложения не будет видно. | ||
+ | |||
+ | Set client_app = oleapp.ЗапуститьКлиентскоеПриложение(СерверБД, База, Редакция) | ||
+ | |||
+ | oleapp.ПоказатьКлиентскоеПриложение 'В панели задач появится приложение | ||
+ | |||
+ | |||
+ | |||
+ | 'Сначала создаем список, состоящий из Ролей | ||
+ | |||
+ | Set ПолныйСписок = oleapp.ПолучитьОбъекты("БизнесМодель.Субъекты", "ТипСубъекта", "Роль") | ||
+ | |||
+ | КолвоТолькоРолей = ПолныйСписок.КоличествоЭлементов | ||
+ | |||
+ | |||
+ | |||
+ | 'Добавляем в список объект подразделение-организация | ||
+ | |||
+ | 'Определяем конкретный объект | ||
+ | |||
+ | Set СписокОрганизация = oleapp.ПолучитьОбъекты("БизнесМодель.Субъекты", "Название", "ИнТехПроект") | ||
+ | |||
+ | Set НужныйСубъект = СписокОрганизация.ПолучитьЭлемент(0) ' Первый элемент из списка | ||
+ | |||
+ | |||
+ | |||
+ | 'Добавляем объект к списку | ||
+ | |||
+ | 'Данная операция возможна потому, что класс добавляемого в список элемента тот же, | ||
+ | |||
+ | 'что и у прочих элементов списка. Если требуется добавить в список объекты разных классов, | ||
+ | |||
+ | 'то тип для элементов списка нужно выбирать базовый для всех классов | ||
+ | |||
+ | 'добавляемых объектов. См. объектную модель Business Studio. | ||
+ | |||
+ | ПолныйСписок.ДобавитьОбъект (НужныйСубъект) | ||
+ | |||
+ | |||
+ | |||
+ | КолвоЭлементовСписка = ПолныйСписок.КоличествоЭлементов | ||
+ | |||
+ | |||
+ | |||
+ | 'Выводим сообщение о проделанной работе | ||
+ | |||
+ | MsgBox "Список из Ролей. Кол-во: " + CStr(КолвоТолькоРолей) + Chr(13) + _ | ||
+ | |||
+ | "Полный список. Кол-во: " + CStr(КолвоЭлементовСписка) | ||
+ | |||
+ | |||
+ | |||
+ | End Sub | ||
+ | </code> | ||
+ | |||
+ | ===== Метод ПолучитьЭлемент ===== | ||
+ | |||
+ | **Синтаксис**: ПолучитьЭлемент(int <Номер>) | ||
+ | |||
+ | **Возвращаемый результат**: Система.МетаКласс (см. [[ru/technical_manual/work_via_ole/metaclass]]) | ||
+ | |||
+ | Метод позволяет получить элемент списка по указанному номеру. //Первый элемент списка имеет номер 0. В// //VBA можно использовать вместо ПолучитьЭлемент// //Item и выбирать элемент не только по номеру, но и по имени.// | ||
+ | |||
+ | **Пример кода**. См. код в свойстве "КоличествоЭлементов" ([[ru/technical_manual/work_via_ole/list#свойство_количествоэлементов|Cвойство КоличествоЭлементов]]). | ||
+ | |||
+ | ===== Метод УдалитьИзСпискаПоИндексу ===== | ||
+ | |||
+ | **Синтаксис**: УдалитьИзСпискаПоИндексу(int <Номер>) | ||
+ | |||
+ | **Возвращаемый результат**: не возвращает. | ||
+ | |||
+ | Метод удаляет элемент списка по указанному номеру. | ||
+ | |||
+ | **Пример кода**. См. код в свойстве "КоличествоЭлементов" ([[ru/technical_manual/work_via_ole/list#свойство_количествоэлементов|Cвойство КоличествоЭлементов]]). | ||
+ | |||
+ | ===== Метод УдалитьИзСпискаОбъект ===== | ||
+ | |||
+ | **Синтаксис**: УдалитьИзСпискаОбъект(object <Объект>) | ||
+ | |||
+ | **Возвращаемый результат**: не возвращает. | ||
+ | |||
+ | Метод удаляет из списка указанный объект. | ||
+ | |||
+ | **Пример кода**. См. код в свойстве "КоличествоЭлементов" ([[ru/technical_manual/work_via_ole/list#свойство_количествоэлементов|Cвойство КоличествоЭлементов]]). | ||
+ | |||
+ | ===== Метод Сортировать ===== | ||
+ | |||
+ | **Синтаксис**: Сортировать(string "<НаборПолей>") | ||
+ | |||
+ | **Возвращаемый результат**: не возвращает. | ||
+ | |||
+ | Сортирует список по указанному набору полей. | ||
+ | |||
+ | Например: "Поле1,-Поле2", где префикс '-' задает сортировку по убыванию. | ||
+ | |||
+ | **Пример кода**. См. код в свойстве "КоличествоЭлементов" ([[ru/technical_manual/work_via_ole/list#свойство_количествоэлементов|Cвойство КоличествоЭлементов]]). | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | [<contextnavigator>] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | {(rater>id=ru_technical_manual_work_via_ole_list|name=Класс "Система.Список"|type=vote|trace=ip|headline=off)} |