Данная статья продолжает цикл статей для начинающего разработчика на ISBL.
Предыдущие статьи:
- Общие сведения о разработке на IS-Builder;
- Язык ISBL;
- Типовые варианты использования функций ISBL;
- Основы работы с объектной моделью IS-Builder;
- Разработка на ISBL. Постановка задачи;
- Разработка справочников в Directum;
- Работа с наборами данных справочников;
- Разработка новых типов карточек электронных документов;
- Поиски edms-объектов;
- Разработка сценариев.
- Разработка отчетов.
- Настройка типовых маршрутов.
- Настройка типовых маршрутов. Часть 2.
В этой статье вы узнаете о всех интеграционных возможностях системы DIRECTUM, каким-образом работать с объектной моделью системы DIRECTUM извне и как из ISBL обращаться к внешним COM-объектам.
Теория
Как уже говорилось в статье
Язык ISBL большим преимуществом языка ISBL является возможность работы с внешними COM-объектами. Для этого достаточно вызвать функцию CreateObject() и передать ей имя объекта.
Пример:
// Получить объект "1С: Предприятие 8.1"
V81Application = CreateObject("V81.Application")
После этого с переменной V81Application можно работать как с объектом приложения «1С: Предприятия», вызывая его методы и свойства:
// Параметры подключения к системе «1С: Предприятие 8.1»
ConnectionParams = “File=D:\1c81\DB;Usr=User1;Pwd=12345”
// Выполнить подключение к системе «1С: Предприятие 8.1»
V81Application.Connect(ConnectionParams)
Если же внешняя система не поддерживает технологию COM, то из DIRECTUM можно обращаться к функциям библиотек dll или вызывать внешнее приложение с указанием параметров командной строки.
Пример запуска командной строки:
// Запустить файл в "блокноте"
ExecuteProcess("C:\Windows\notepad.exe C:\Readme.txt")
С объектами IS-Builder тоже можно работать из внешних языков и сред, поддерживающих технологию COM.
Для доступа к DIRECTUM используются 2 библиотеки:
- SBLogon Library. Используется для аутентификации и подключения к DIRECTUM;
- Sbrte Library. Реализует все объекты DIRECTUM.
Общая схема подключения к DIRECTUM извне выглядит так:
- Создаем объект SBlogon.LoginPoint.
- Получаем объект IApplication, вызвав метод GetApplication или GetApplicationEx объекта
SBlogon.LoginPoint.
Пример, как из 1С можно открыть карточку записи справочника DIRECTUM «Программное обеспечение» (данный справочник рассматривался в статье
Разработка справочников в DIRECTUM):
// Создать подключение к системе DIRECTUM
LoginPoint = GetCOMObject("", "SBLogon.LoginPoint");
DirectumApplication = LoginPoint.GetApplication("SystemCode=DIRECTUM");
// Открыть запись справочника «Программное обеспечение» с ИД = 108729 (это запись "1С: Предприятие 8.1")
Software = DirectumApplication.ReferencesFactory.ReferenceFactory("Software").GetObjectByID(108729)
Software.Form.ShowNoModal
Если из внешней системы нельзя работать с COM-объектами, то существует возможность вызова компонент системы DIRECTUM (сценарии, отчеты и т.д.) через командную строку.
Весь этот функционал дает возможность интегрироваться системе DIRECTUM с другими системами.
Возможны следующие виды интеграции:
- синхронизация справочников. Справочники заполняются в одной системе, затем синхронизируются в другую систему. Варианты реализации могут быть следующие:
- периодическая синхронизация;
- синхронизация при сохранении записи (realtime-синхронизация);
- сохранение отчетов в качестве электронных документов DIRECTUM.
- связывание записей справочников/учетных документов и электронных документов DIRECTUM для облегчения поиска.
- отправка записей справочников/учетных документов как вложения в задачи DIRECTUM.
Для реализации этих возможностей можно воспользоваться набором средств интеграции DIRECTUM, который представляет собой инфраструктуру и набор готовых решений для интеграции с определенными системами сторонних производителей, например, с 1С:Предприятие, Dynamics
AX и т.д.
Практика
В статье
Настройка типовых маршрутов. Часть 2 рассматривали типовой маршрут «Согласование запроса на назначение прав доступа», в котором есть блок - задание администратору на создание пользователей в других системах.
Сейчас администратору при получении задания приходится заходить в необходимую систему, создавать там нового пользователя, заполнять его данные и выдавать права.
Этот процесс можно автоматизировать. Например, создавать пользователя в другой системе и заполнять некоторые данные автоматически.
Рассмотрим пример создания пользователя в системе 1С: Предприятие:
Добавим в карточке справочника «Права доступа работников на ПО» кнопку «Создать пользователя в 1С», при нажатии на которую будет создаваться новый пользователь в системе «1С: Предприятие» и открываться его карточка с заполненными полями «Краткое имя» и «Полное
имя».
Тогда, когда администратору приходит задание для создания пользователя в других системах, он открывает из вложения запись справочника «Права доступа работников на ПО» и нажимает кнопку «Создать пользователя в 1С».
Такую кнопку можно сделать для создания пользователя в любой системе.
Итак, чтобы создать кнопку, откроем компоненту «Типы справочников». Найдем тип справочника «Права доступа работников на ПО» и откроем его карточку. В табличной части на закладке «Действия» добавим новую строку. Заполним имя и заголовок:

Теперь нужно задать вычисление этого действия.
Создание пользователя в 1С будет состоять из следующих этапов:
- Запрос параметров подключения к базе данных системы 1С.
- Подключение к базе данных системы 1С.
- Создание нового пользователя и заполнение необходимых реквизитов.
- Открытие карточки этого пользователя.
Рассмотрим каждый из этих этапов.
Запрос параметров подключения к базе данных системы 1С.
Для запроса параметров подключения используется функция InputDialogEx(), которая позволяет выдать диалог пользователю для ввода необходимых параметров:
BASE_PATH_AUTH_INDEX = 1
WINDOWS_AUTH_INDEX = 2
USER_NAME_INDEX = 3
PASSWORD_INDEX = 4
BUTTON_INDEX = 5
AUTHORIZATION_DELIMITER = "|"
// Запросить пользователя 1С
CaptionStr = LoadString('DIR6BFA9D8B_292B_4826_BEBE_57F956E92098'; 'COMMON') // Авторизация в системе 1С:Предприятие
BasePathStr = "Каталог информационной базы 1С"
WindowsAuthenticationStr = LoadString('DIRCCF42975_585F_4367_A20E_1B7764A7BD43'; 'COMMON') // Использовать windows-аутентификацию
UserNameStr = LoadString('DIRF9F460C1_F1BC_4ACC_8D6B_9B4A9028EE5F'; 'COMMON') // Имя пользователя
PasswordStr = LoadString('DIRC6964660_1084_4E06_AEA9_A380EA12F84A'; 'COMMON') // Пароль
OKButtonStr = LoadString('DIRSTR_OK'; 'COMMON') // ОК
CancelButtonStr = LoadString('DIRSTR_CANCEL_1'; 'COMMON') // Отмена
// Запрос имени пользователя и пароля
Buttons = Format("%s|%s"; ArrayOf(OKButtonStr; CancelButtonStr))
Labels = Format("*%s|%s|%s|%s"; ArrayOf(BasePathStr; WindowsAuthenticationStr; UserNameStr; PasswordStr))
Types = "Строка:100|Признак:Да,Нет:Ч|Строка:35|Строка:35"
DefaultValues = Format("|%s||";
IfThen(Application.Connection.OSAuthentification; YES_VALUE; NO_VALUE))
AuthorizationResult = InputDialogEx(Labels; DefaultValues; Types; CaptionStr; ; ; ; Buttons; OKButtonStr; CancelButtonStr)
BasePath = SubString(AuthorizationResult; AUTHORIZATION_DELIMITER; BASE_PATH_AUTH_INDEX)
WindowsAuth = SubString(AuthorizationResult; AUTHORIZATION_DELIMITER; WINDOWS_AUTH_INDEX)
UserName = SubString(AuthorizationResult; AUTHORIZATION_DELIMITER; USER_NAME_INDEX)
Password = SubString(AuthorizationResult; AUTHORIZATION_DELIMITER; PASSWORD_INDEX)
ButtonResult = SubString(AuthorizationResult; AUTHORIZATION_DELIMITER; BUTTON_INDEX)
Диалог будет выглядеть следующим образом:

Подключение к базе данных системы 1С.
Для подключения к 1С создается соответствующий COM-объект:
CONNECTION_PARAMS_DELIMITER = ";"
ConnectionParams = Format("File=%s"; BasePath)
if WindowsAuth == NO_VALUE
ConnectionParams = AddSubString(Format("Usr=%s;Pwd=%s"; ArrayOf(UserName; Password)); ConnectionParams; CONNECTION_PARAMS_DELIMITER)
endif
// Подключиться к системе 1С: Предприятие
V81App = CreateObject("V81.Application")
V81App.Connect(ConnectionParams)
Создание нового пользователя и заполнение необходимых реквизитов.
// Создать нового пользователя
UsersRef = V81App.Catalogs.Пользователи
NewUser = UsersRef.CreateItem()
// Заполнить поле "Краткое имя" значением поля "Логин" записи справочника Права доступа работников на ПО
NewUser.Код = Object.Реквизит
// Заполнить поле "Полное имя" значением поля "Фамилия И.О." работника
NewUser.Наименование = GetRequisiteValueAsString("РАБ"; Object.Работник; "Дополнение")
Открытие карточки созданного пользователя.
NewUser.GetForm().DoModal()
После этого добавляем новую кнопку на форму:

Теперь при нажатии на кнопку «Создать пользователя в 1С» будет создаваться пользователь в системе 1С и открываться его карточка, чтобы администратор мог назначить ему необходимые права в системе:

Пакет разработки для Directum версии 4.7 прилагается:
Dev.zip (18,49 Кб)