В приведенных ниже примерах:
Список сотрудников будет находиться в файле MS Excel (Таблица 1). Пример приведен на языке программирования VBA.
Фамилия | Имя | Отчество | Дата рождения | р.тел | |
---|---|---|---|---|---|
Иванов | Иван | Иванович | 29.09.1969 | 202-19-00 | name@firma.ru |
Петров | Петр | Петрович | 04.05.1978 | 202-19-01 | name2@firma.ru |
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, а также Доступ к службе сервера лицензий).