Сценарии работы с Business Studio через OLE

В приведенных ниже примерах:

  • <Имя_сервера_БД> - имя сервера базы данных,
  • <Имя_базы> - название базы данных,
  • <Редакция_продукта> - Ultimate, Enterprise, Professional или Cockpit. Редакция продукта должна соответствовать имеющейся лицензии, иначе запуск приложения не удастся.

Пример синхронизации справочника сотрудников с внешним хранилищем

Список сотрудников будет находиться в файле MS Excel (Таблица 1). Пример приведен на языке программирования VBA.

Фамилия Имя Отчество Дата рождения р.тел e-mail
Иванов Иван Иванович 29.09.1969 202-19-00 name@firma.ru
Петров Петр Петрович 04.05.1978 202-19-01 name2@firma.ru
Таблица 1. Структура файла Excel со списком сотрудников
Sub СинхронизацияФизЛиц()

    Set appEx = Application

    Dim i As Integer

    Dim Фамилия, Имя, Отчество, ДатаРождения, РабочийТелефон As String

 

    ' Получение объекта приложения

    Set oleapp = CreateObject("ByteEnterprise.OleApplication")

    ' Инициализации приложения, в качестве параметров передаются имя сервера, название базы,  версия продукта

    Set client_app = oleapp.ЗапуститьКлиентскоеПриложение("<Имя_сервера_БД>", "<Имя_базы>", "<Редакция_продукта>")

       

    ' Получение корневой группы класса Физлиц

    Set ОПУ_ФЛ = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.ФизЛица")

    ' Получение корневой группы класса Контактов физлиц

    Set ОПУ_Контакты = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.КонтактыФизЛиц")

   

    ' Получение корневой группы класса Типов контактов

    Set списокТипов = oleapp.ПолучитьОбъекты("БизнесМодель.ТипыКонтактов", "Название", "Рабочий телефон")

    Set типРабочийТелефон = списокТипов.ПолучитьЭлемент(0)

 

    i = 2

    While appEx.Cells(i, 1) <> ""

        Фамилия = CStr(appEx.Cells(i, 1))

        Имя = CStr(appEx.Cells(i, 2))

        Отчество = CStr(appEx.Cells(i, 3))

        ДатаРождения = CStr(appEx.Cells(i, 4))

        РабочийТелефон = CStr(appEx.Cells(i, 5))

        ЭлектроннаяПочта = CStr(appEx.Cells(i, 6))

       

        ' Создание фильтра по классу Физлиц

        Set фильтрФЛ = ОПУ_ФЛ.СоздатьФильтр

        ' настраиваем условия фильтра для поиска по Фамилии, Имени, Отчеству, Дате рождения

        фильтрФЛ.Условия.Параметры.Фамилия.Значение = Фамилия

        фильтрФЛ.Условия.Параметры.Имя.Значение = Имя

        фильтрФЛ.Условия.Параметры.Отчество.Значение = Отчество

        фильтрФЛ.Условия.Параметры.ДатаРождения.Значение = CDate(ДатаРождения)

        ' выполняем фильтр - получаем список физлиц с заданными Фамилией, Именем, Отчеством, Датой рождения

        Set списокФЛ = фильтрФЛ.Выполнить

        ' получаем элемент Физлицо

        If списокФЛ.КоличествоЭлементов = 0 Then

            ' если физлицо не найдено - создаем новое

            Set фл = oleapp.СоздатьОбъект(ОПУ_ФЛ)

            фл.Фамилия = Фамилия

            фл.Имя = Имя

            фл.Отчество = Отчество

            Set пар = фл.НайтиПараметр("ДатаРождения")

            пар.Значение = CDate(ДатаРождения)

        Else

            ' если физлицо найдено - будем обновлять его данные

            Set фл = списокФЛ.ПолучитьЭлемент(0)

        End If

        ' обновляем рабочий телефон физлица - элемент списка контаков

        If РабочийТелефон <> "" Then

            ' Создание фильтра по классу контактов Физлиц

            Set ФильтрКонтакты = ОПУ_Контакты.СоздатьФильтр

            ' настраиваем условия фильтра для поиска контакта физлица

            ФильтрКонтакты.Условия.Параметры.ТипКонтакта.Значение = типРабочийТелефон

            ' настраиваем подфильтр для задания условия по физлицу - владельцу контакта

            ФильтрКонтакты.Условия.Параметры.Владелец.ТипФильтрации = 3 ' подфильтр

            ФильтрКонтакты.Условия.Параметры.Владелец.Подфильтр = фильтрФЛ

            ' выполняем фильтр - получаем список контактов с заданным условием

            Set списокКонтактов = ФильтрКонтакты.Выполнить

            If списокКонтактов.КоличествоЭлементов = 0 Then

                ' если контакт не найден - создаем новый элемент в списке контактов физлица

                Set конт = фл.Контакты.Добавить

                конт.ТипКонтакта = типРабочийТелефон

            Else

                ' если контакт найден - будем обновлять его данные

                Set конт = списокКонтактов.ПолучитьЭлемент(0)

            End If

            ' обновляем данные контакта

            конт.Контакт = РабочийТелефон

        End If

        ' сохраняем изменения физлица

        фл.Сохранить

        i = i + 1

    Wend

End Sub

Пример создание оргединицы и работа с ним

Sub ДругиеПримеры()

    Set oleapp = CreateObject("ByteEnterprise.OleApplication")

    ' Инициализации клиентского приложения, в качестве параметров передаются имя сервера, название базы,  версия продукта

    Set Client_app = oleapp.ЗапуститьКлиентскоеПриложение("<Имя_сервера_БД>", "<Имя_базы>", "<Редакция_продукта>")

 

    ' Пример создания Оргединицы и работы с ней

   Set СубъектКорень = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.Субъекты")

   Set ВыбранныйСубъект = oleapp.ВыбратьОбъект(СубъектКорень)

   Set НовыйСубъект = oleapp.СоздатьОбъект(ВыбранныйСубъект)

    ' Параметры "Название" и "ТипСубъекта" являются обязательными для субъектов

   НовыйСубъект.Название = "НазваниеНовогоСубъекта"

   НовыйСубъект.ТипСубъекта = 1    '1 - Подразделение; 2 - Должность (см. Объектную модель)

   НовыйСубъект.Сохранить

 

  ‘Если названия субъектов повторяются - используем для идентификации guid

    а = НовыйСубъект.GUID

    Set ФильтрСубъектПоGUID = СубъектКорень.СоздатьФильтр

    ФильтрСубъектПоGUID.Условия.Параметры.GUID.Значение = а

    ФильтрСубъектПоGUID.ВключатьПодгруппы = True

    Set РезультатФильтра = ФильтрСубъектПоGUID.Выполнить

    If (РезультатФильтра.КоличествоЭлементов > 0) Then

        Set СубъектПоGUID = РезультатФильтра.ПолучитьЭлемент(0)

    Else

     MsgBox "Субъект с guid='" + a + "' не найден."

    End If

 

'Пример получения константы

   Set конст = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.Константы")

   Руководитель = конст.РуководительОрганизации

 

'Добавить Оргединицу в группу; для этого создать группу и связь

    Set ГруппаПУ = oleapp.ПолучитьКорневуюГруппуКласса ("БизнесМодель.Группы")

    Set Группа = oleapp.СоздатьОбъект(ГруппаПУ)

    Группа.Название = "Группа_1"

    Группа.Сохранить

   Set СвязиГруппыАнализаПУ = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.СвязиГруппАнализа")

    Set ОбъектСвязь = oleapp.СоздатьОбъект(СвязиГруппыАнализаПУ)

    ОбъектСвязь.ГруппаАнализа = Группа

    ОбъектСвязь.Справочник = ВыбранныйСубъект

    ОбъектСвязь.Сохранить

 

'Обращение к пользовательскому параметру. Допустим пользовательский справочник  "БизнесМодель.usr_Класс" содержит несколько записей.

    Set Объект = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.usr_Класс")

    Set Фильтр = Объект.СоздатьФильтр 

    Set Объекты = Фильтр.Выполнить   ' Получаю весь справочник

    col = Объекты.Count   ' - количество элементов в этом справочнике

    Set Элемент = Объекты.Item(0) 'Или так: Set Элемент = Объекты.ПолучитьЭлемент(0)

   ' Класс содержит стандартный параметр "Название"

    'Парам1 = Элемент.Название - так можно только для системых параметров

    Парам1 = Элемент.Параметры.Item("Название").Значение

    'Или так: Парам1 = Элемент.Параметры.ПолучитьЭлемент("Название").Значение

   ' Класс содержит пользовательский параметр "usr_полеКласса" простого типа (вещественный)

    Парам2 = Элемент.Параметры.Item("usr_полеКласса").Значение

    'Или так: Парам2 = Элемент.Параметры.ПолучитьЭлемент("usr_полеКласса").Значение

   ' Класс содержит параметр - список "usr_полеСпск" - для списка используем Set

    Set Парам3 = Элемент.Параметры.Item("usr_полеСпск").Значение

    'Или так: Set Парам3 = Элемент.Параметры.ПолучитьЭлемент("usr_полеСпск").Значение

   ' Элементы списка объектного типа, чтобы получить элемент используем Set

    Set ЭлСписка = Парам3.Item(0)

   ' Элемент списка содержит параметр "usr_поле1" простого типа (строка)

    ПЭС1 = ЭлСписка.Параметры.Item("usr_поле1").Значение

 

'Перебрать все параметры:

    Параметры = "Параметры: "

     For Each парам In Объект.Параметры

        Параметры = Параметры + парам.Наименование + ", "

     Next

 

'Назначить физическое лицо оргединице:

    Set ФизЛица = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.ФизЛица")

    Set ФизЛицаФильтр = ФизЛица.СоздатьФильтр

    ФизЛицаФильтр.Условия.Параметры.Фамилия.Значение = "Гаврилова"

    ФизЛицаФильтр.Условия.Параметры.Имя.Значение = "Анна"

    ФизЛицаФильтр.Условия.Параметры.Отчество.Значение = "Петровна"

    Set СписокФЛ = ФизЛицаФильтр.Выполнить

   If (СписокФЛ.КоличествоЭлементов > 0) Then

      Set ФЛ = СписокФЛ.ПолучитьЭлемент(0)

      Set ФизлицаСубъектов = _

      oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.Физлица_Субъектов")

      Set ФизЛицоСубъекта = oleapp.СоздатьОбъект(ФизлицаСубъектов)

      ФизЛицоСубъекта.Субъект = ВыбранныйСубъект

      ФизЛицоСубъекта.Физлицо = ФЛ

      ФизЛицоСубъекта.Сохранить

   Else

     MsgBox "Запрашиваемое лицо не найдено"

   End If

 

'Удалить физлицо из оргединицы:

    Set ФильтрФизлицСубъектов = ФизлицаСубъектов.СоздатьФильтр

    ФильтрФизлицСубъектов.Условия.Параметры.Физлицо.Значение = ФЛ

    ФильтрФизлицСубъектов.Условия.Параметры.Субъект.Значение = ВыбранныйСубъект

    Set СписокФизлицСубъектов = ФильтрФизлицСубъектов.Выполнить

     For Each ФизЛицоСубъекта In СписокФизлицСубъектов

         ФизЛицоСубъекта.Удалить

     Next

 

'Получить правильное название класса, воспользовавшись окном выбора:

    ИмяКласса = oleapp.ВыбратьКласс

 

End Sub

Пример вывода сообщением всех потомков папок с первого уровня справочника Направления Деятельности

Sub ВыводПотомковПапок()

    ' Получение объекта приложения
    
    Set oleapp = CreateObject("ByteEnterprise.OleApplication")

    ' Инициализации приложения, в качестве параметров передаются имя сервера, название базы,  версия продукта
    
    Set client_app = oleapp.ЗапуститьКлиентскоеПриложение("<Имя_сервера_БД>", "<Имя_базы>", "<Редакция_продукта>")

    ' Получаем только папки в корне
    
    Set Корень = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.НаправленияДеятельности")
    
    Set Фильтр = Корень.СоздатьФильтр
    
    Фильтр.ВключатьПодгруппы = False
    
    Фильтр.РезультатВключает = 9
    
    Set Папки = Фильтр.Выполнить

    'Для каждой папки строим свой подфильтр
    
    For Счётчик = 1to Папки.КоличествоЭлементов
    
      Set Папка = Потомки.ПолучитьЭлемент(Счётчик)
      
      Set Фильтр2 = Папка.СоздатьФильтр
      
      Фильтр2.ВключатьПодгруппы = False
      
      Set Потомки = Фильтр2.Выполнить
      
      For Счётчик2 = 1 to Потомки
      
    ' И выводим на экран
    
                Set Потомок = Потомки.ПолучитьЭлемент(Счётчик)
                
               MsgBox Потомок
               
     Next Счётчик2
     
Next Счётчик

End Sub

Возможные сообщения об ошибках

Невозможность соединения с удаленным сервером

Одна из возможных причин, по которой может появиться сообщение вида "Ошибка при обращении к службе брокера: Невозможно соединиться с удаленным сервером", это отсутствие запущенной службы BS_PingHost на локальной машине (см. Работа с Business Studio через OLE, а также Доступ к службе сервера лицензий).

« ПредыдущаяНа уровень вышеСледующая »
Driven by DokuWiki