Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

ru:technical_manual:work_via_ole:list [2018/01/12 13:58]
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)}
Driven by DokuWiki