Работа с СОМ - объектами системы ISpro

Для взаимодействия внешнего приложения со средой ISpro в поставку системы включен ряд СОМ-объектов, предназначенных для создания соединения с системой ISpro и получения экземпляров объектов.
COM-объекты ISpro (Component Object Model - компонентная объектная модель) предназначены для организации внешнего доступа к прикладным функциям и данным системы..
Все СОМ-объекты системы соответствуют требованиям автоматизации и могут использоваться из любых языков, поддерживающих работу с интерфейсами автоматизации.
СОМ-объекты могут содержать набор предметных функций, а так же, могут повторять функциональность набора данных и содержать набор стандартных методов навигации и модификации данных.
Для получения экземпляра определенного объекта внешнее приложение должно выполнить следующие шаги:

Освобождение объектов производится штатными средствами применяемого языка программирования.

Регистрация COM библиотек:

Для получения доступа к COM-объектам ISpro из 32-битного приложения библиотека isstboot.dll должна быть зарегистрирована на всех компьютерах, с которых будет производиться работа с COM. Есть несколько способов зарегистрировать библиотеку:

  1. Установить рабочую станцию из каталога Station_t - библиотека isstboot.dll будет зарегистрирована в процессе установки автоматически.
  2. Зарегистрировать библиотеку isstboot.dll вручную. Для этого нужно запустить командную строку cmd от имени администратора и ввести команду regsvr32.exe <Папка, в которой лежит файл isstboot.dll>\isstboot.dll

Для получения доступа к COM-объектам из 64-битного приложения нужно зарегистрировать библиотеку в COM+

Пример использования:

В Microsoft Office Excel откройте окно редактора Visual Basic (Alt+F11, кнопка  Visual Basic на панели быстрого доступа).

В Microsoft Visual Basic для подключения библиотек COM-объектов выберите пункт меню «Tools/References...» и в окне References - VBAProject нажмите кнопку Browse.


Выберите библиотеку (формат *_c.dll) в зависимости от задачи. Файлы находятся в каталоге \Dll\ серверной части системы ISpro.

SPROTN_C.DLL - Справочник ОТН
TRDCOM_C.DLL - Расходные накладные
SYSSF_C.DLL - Налоговый учет
SYS_C.DLL - Произвольный SQL запрос
SPRPDR_C.DLL - Справочник подразделений
SKLNM_C.DLL - Справочник номенклатур
PRDSPC_C.DLL - Спецификация на продукцию
PRDPRF_C.DLL - Акты выполненных работ
SKL_EI_C.DLL - Справочник ЕИ
SKL_AT_C.DLL - Атрибуты номенклатуры
PTNK_C.DLL - Справочник контрагентов
PRDMRT_C.DLL - Наряд-задания производству
SKLATR_C.DLL - Атрибуты КСУ
TRDACC_C.DLL - Счета к оплате
TRDZKG_C.DLL - Заказы на отпуск
PRDZKZ_C.DLL - Производственный заказ
PAYRL_C.DLL - Расчётная ведомость
PAYLS_C.DLL - Лицевой счёт
SYSWRK_C.DLL - Профиль пользователя

Примечание. Библиотеку SYS_C.DLL (Произвольный SQL запрос) подключать в «Tools/References...» не нужно. Библиотека автоматически загружена с ядром при работе СОМ - объектов ISpro


В Microsoft Visual Basic откройте окно Object Browser (F2, кнопка  Object Browser на панели инструментов).

Для просмотра методов и полей объекта в Object Browser, в поле Project/Library выберите нужную библиотеку из списка. Например, ISSklN - справочник номенклатур.

Пример программы на VBA, выводящей первые две строки реестра контрагентов.

‘Менеджер СОМ объектов
Dim ComManagerObj As Object
‘Соединение с ИС-ПРО
Dim ConnectObj As Object
‘Запрос для чтения записей картотеки
Dim QueryObj As Object
On Error GoTo ErrorHandler
‘Создание объекта для соединения с системой
Set ConnectObj = CreateObject("ISStBoot.SysStartup.1")
‘Запуск создания соединения
‘ – путь к серверной части
‘ – пользователь adm
‘ – пароль master
Set ComManagerObj = ConnectObj.Connect("c:\ispro ", "adm", "password")
‘Соединение установлено
‘Вход в предприятие №1
Call ConnectObj.SelectFirm(1)
‘Все этапы соединения завершены, можно работать с системой
‘Запросить объект для выполнения произвольного SQL запроса
‘Модуль объекта – Sys
‘Наименование объекта - ISysSqlQuery
Set QueryObj = ComManagerObj.GetObjByName("Sys", "ISysSqlQuery")
‘Выполнить запрос чтения картотеки контрагентов
QueryObj.Text = “select ptn_nm from ptnrk”
QueryObj.OpenObj
‘прочитать первую запись
QueryObj.First
MsgBox( QueryObj.GetFieldValue("ptn_nm")
‘прочитать вторую запись
QueryObj.Next
MsgBox( QueryObj.GetFieldValue("ptn_nm")
‘Освободить объект
QueryObj.CloseObj
Set QueryObj = Nothing
ErrorHandler:
MsgBox ("Error:" & Chr(13) & Err.Description)

СОМ - объект для выполнения SQL запросов
Объект предназначен для выполнения произвольных SQL запросов в схеме данных текущего предприятия и схеме общесистемных данных. Учет расположения таблицы в общей схеме данных или схеме предприятия, выполняется автоматически.
Описание системного СОМ - объекта ISpro:
Имя объекта: ISysSqlQuery
Модуль: SYS
Библиотека типов: SYS_C.DLL

Состав объекта:

BSTR Text
Чтение/запись текста SQL запроса.
SetParamValue( BSTR ParamName, VARIANT Val )
Установка значения параметра запроса.
ParamName – наименование параметра, без символа “:"
Val – значение параметра

VARIANT GetFieldValue( BSTR FieldName )
Возвращает значение поля запроса.
FieldName – наименование поля
VARIANT_BOOL OpenObj
Открыть набор
VARIANT_BOOL HRESULT CloseObj
Закрыть набор
VARIANT_BOOL First
Стать на первую запись
VARIANT_BOOL Last
Стать на последнюю запись
VARIANT_BOOL Prior
Стать на предыдущую запись
VARIANT_BOOL Next
Стать на следующую запись

Примечание. В случае необходимости использования параметров в запросе, параметры необходимо именовать в соответствии с правилами именования полей и предварять параметр в тексте запроса символом “:", например where rcd=:new_rcd - сравнение значения поля “rcd” со значением параметра “new_rcd”.

Пример использования объекта:

Private ConnectObj As Object
Private ManagerObj As Object
Private QryObj As Object
Private Sub DoWork()
On Error GoTo ErrorHandler
Set ConnectObj = CreateObject("ISStBoot.SysStartup.1")
Set ManagerObj = ConnectObj.Connect("D:\bpw", "pva", "")
Call ConnectObj.SelectFirm(1)
Set QryObj = ManagerObj.GetObjByName("Sys", "ISysSqlQuery")
QryObj.Text = "select spr_nm from sspr where spr_rcd=:rcd"
Call QryObj.SetParamValue("rcd", 1)
QryObj.OpenObj
QryObj.First
While QryObj.Next
If Not IsNull(QryObj.GetFieldValue("Spr_Nm")) Then
MsgBox (QryObj.GetFieldValue("Spr_Nm"))
End If
Wend
QryObj.CloseObj
Exit Sub
ErrorHandler:
MsgBox ("Error:" & Chr(13) & Err.Description)
End Sub

Запуск ресурсных модулей из программ BASIC:
В отчетах Word и Excel для обращения к функциям среды ИС-ПРО следует использовать следующие вызовы:
RES_ADD_MODULE( )
Добавить модуль в список запускаемых
RES_DEL_MODULES
Очистить список запускаемых модулей
RES_LOAD_MODULES
Загрузить все модули из списка
RES_UNLOAD_MODULES
Завершить работы с модулями из списка

Пример обращения к ресурсам системы из отчета:
Sub ReportMain(Mgr As Object)
Set ComManager = Mgr
' Запросить интерфейс связи со средой ИС-ПРО
Set Env = ComManager.GetObjByName( "Sys", "ISysEnvironment" )
' Загрузить модуль
' Общесистемные ресурсы (SYS_R)
Env.RES_ADD_MODULE( "SYS_R" )
Env.RES_LOAD_MODULES
' Считать информацию о контрагенте
Env.PTN_READ_CD ( "001" )
' Завершить работу с модулем
Env.RES_UNLOAD_MODULES
End Sub