Это старая версия документа.
Список сотрудников будет находиться в файле 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
Здесь <Имя_сервера_БД> - имя сервера базы данных, <Имя_базы> - название базы данных, <Редакция_продукта> - Enterprise, Professional или Cockpit. Редакция продукта должна соответствовать имеющейся лицензии, иначе запуск приложения не удастся.
Одна из возможных причин, по которой может появиться сообщение вида "Ошибка при обращении к службе брокера: Невозможно соединиться с удаленным сервером", это отсутствие запущенной службы BS_PingHost на локальной машине (см. Работа с Business Studio через OLE, а также Доступ к службе сервера лицензий).