Назначение
Плагин db в hid предназначен для удаленной работы с ядром АСР "Гидра". Он позволяет выполнять хранимые процедуры и делать SQL-выборки из БД без установки непосредственного соединения с ней.
Принцип работы
Для работы с hid используется протокол XML-RPC или SOAP.
Все хранимые процедуры СУБД отображаются в названия методов напрямую (например, для процедуры SI_USERS_PKG.SI_USERS_PUT используется соответствующий метод плагина SI_USERS_PKG.SI_USERS_PUT). В качестве аргумента методов хранимых процедур следует передавать структуру (хэш, словарь) с параметрами ее вызова. Методы хранимых процедур возвращают структуры переданных параметров, но с измененными во время выполнения значениями (например, если передавать в процедуру SI_USERS_PKG.SI_USERS_PUT в качестве значения num_N_USER_ID NULL, то на "выходе" процедуры в качестве значения num_N_USER_ID будет идентификатор созданного абонента).
Для получения выборок из БД следует использовать специальный метод SELECT(query, page_num), где query — SQL-запрос данных из БД, page_num — номер страницы результата (по умолчанию — 1). Для снижения нагрузки на БД выборки делаются постранично, т.е. весь результат запроса разбивается на страницы определенного размера (размер задается в конфиге hid). Если в качестве page_num передан 0, делается выборка без разбиения на страницы (при условии, что это разрешено в конфиге hid).
Метод SELECT возвращает структуру (хэш, словарь) следущего содержания:
{ 'RecordsNumber' => RecordsNumber, 'PagesNumber' => PagesNumber, 'SelectResult' => SelectResult, }
RecordsNumber
— количество записей результата выборки;PagesNumber
— количество страниц результата выборки;SelectResult
— список (массив) записей. Каждая запись представляется еще одним списком, элементы которого соответствуют выбираемым полям таблицы. Все числовые поля таблиц из БД представляются в виде строк.
Параметры конфига hid
db select page size
— размер страницы выборки. По умолчанию — 20.db allow unlimited select
— флаг разрешения выборок без ограничения (on
илиoff
). По умолчанию —off
.
Примеры
Физические лица
Получение списка физических лиц
SELECT("SELECT * FROM SI_V_PERSONS_JR")
Получение информации о физическом лице
SELECT("SELECT * FROM SI_V_PERSONS_JR WHERE N_PERSON_ID = <num_N_PERSON_ID>")
num_N_PERSON_ID
— идентификатор физ. лица.
Редактирование (создание) физического лица
SI_PERSONS_PKG.SI_PERSONS_PUT({ 'num_N_PERSON_ID' => num_N_PERSON_ID, 'vch_VC_SURNAME' => 'Шварценгольд', 'vch_VC_SECOND_NAME' => 'Викторович', 'ch_C_SEX' => 'M', 'num_N_SUBJ_GROUP_ID' => 49001, 'vch_VC_INN' => '1234567891', 'num_N_DOC_AUTH_TYPE_ID' => 2015, 'vch_VC_DOC_SERIAL' => '01 06', 'vch_VC_DOC_NO' => '489635', 'dt_D_DOC' => DATE('24.01.2009', 'DD.MM.YYYY'), 'vch_VC_DOCUMENT' => 'Отделением по району Царицыно ОУФМС России по г. Москве в ЮАО', 'dt_D_BIRTH' => DATE('20.03.1955', 'DD.MM.YYYY'), 'vch_VC_BIRTH_PLACE' => 'г. Москва', 'num_N_SUBJ_STATE_ID' => 2011, 'num_N_CITIZENSHIP_ID' => 21101, })
num_N_PERSON_ID
— идентификатор физ. лица. Если равенNULL
— производится создание, иначе — редактированиеnum_N_SUBJ_GROUP_ID
— идентификатор группы физ. лиц (представлениеSI_V_SUBJ_GROUPS
)num_N_DOC_AUTH_TYPE_ID
— идентификатор типа документа, удостоверяющего личность (справочникREF_TYPE_Document
)num_N_SUBJ_STATE_ID
— идентификатор состояния СУ (справочникREF_TYPE_Subject_State
, SYS_CONTEXT('CONST', 'SUBJ_STATE_On') == 2011)num_N_CITIZENSHIP_ID
— идентификатор региона гражданства
Удаление физического лица
SI_PERSONS_PKG.SI_PERSONS_DEL({ 'num_N_PERSON_ID' => num_N_PERSON_ID, })
num_N_PERSON_ID
— идентификатор физ. лица.
Юридические лица
Получение списка юридических лиц
SELECT("SELECT * FROM SI_V_COMPANIES_JR")
Получение информации о юридическом лице
SELECT("SELECT * FROM SI_V_COMPANIES_JR WHERE N_COMPANY_ID = <num_N_COMPANY_ID>")
num_N_COMPANY_ID
— идентификатор юр. лица.
Редактирование (создание) юридического лица
SI_COMPANIES_PKG.SI_COMPANIES_PUT({ 'num_N_COMPANY_ID' => num_N_COMPANY_ID, 'num_N_OPF_ID' => 1041, 'num_N_REGION_ID' => 21301, 'vch_VC_CODE' => 'Вектор', 'vch_VC_INN' => '1234567891', 'vch_VC_OGRN' => '12345', 'num_N_SUBJ_STATE_ID' => 2011, 'num_N_SUBJ_GROUP_ID' => 196401, })
num_N_COMPANY_ID
— идентификатор юр. лица. Если равенNULL
— производится создание, иначе — редактированиеnum_N_OPF_ID
— идентификатор ОПФ (справочникREF_TYPE_OPF
)num_N_REGION_ID
— идентификатор регионаnum_N_SUBJ_STATE_ID
— идентификатор состояния СУ (справочникREF_TYPE_Subject_State
, SYS_CONTEXT('CONST', 'SUBJ_STATE_On') == 2011)num_N_SUBJ_GROUP_ID
— идентификатор группы юр. лиц (представлениеSI_V_SUBJ_GROUPS
)
Удаление юридического лица
SI_COMPANIES_PKG.SI_COMPANIES_DEL({ 'num_N_COMPANY_ID' => num_N_COMPANY_ID, })
num_N_COMPANY_ID
— идентификатор юр. лица.
Абоненты
Получение списка абонентов
SELECT("SELECT * FROM SI_V_USERS_JR")
Получение информации об абоненте
SELECT("SELECT * FROM SI_V_USERS_JR WHERE N_SUBJECT_ID = <num_N_SUBJECT_ID>")
num_N_SUBJECT_ID
— идентификатор абонента
Редактирование (создание) абонента
SI_USERS_PKG.SI_USERS_PUT({ 'num_N_USER_ID' => num_N_USER_ID, 'num_N_BASE_SUBJECT_ID' => 712282701, 'num_N_SUBJ_GROUP_ID' => 255664501, 'vch_VC_CODE' => 'uralsky', 'num_N_SUBJ_STATE_ID' => 2011, })
num_N_USER_ID
— идентификатор абонента. Если равенNULL
— производится создание, иначе — редактированиеnum_N_BASE_SUBJECT_ID
— идентификатор физ. или юр. лица, к которому добавляется абонентnum_N_SUBJ_GROUP_ID
— идентификатор группы абонентов (представлениеSI_V_SUBJ_GROUPS
)num_N_SUBJ_STATE_ID
— идентификатор состояния СУ (справочникREF_TYPE_Subject_State
, SYS_CONTEXT('CONST', 'SUBJ_STATE_On') == 2011)
Удаление абонента
SI_USERS_PKG.SI_USERS_DEL({ 'num_N_USER_ID' => num_N_USER_ID, })
num_N_USER_ID
— идентификатор абонента
Договоры
Получение информации о договорах
SELECT("SELECT * FROM SI_V_USER_CONTRACTS")
Получение информации о договоре
SELECT("SELECT * FROM SI_V_USER_CONTRACTS WHERE N_DOC_ID = <num_N_DOC_ID>")
num_N_DOC_ID
— идентификатор договора
Добавление договора с абонентом
SI_USERS_PKG.CREATE_CONTRACT({ 'num_N_USER_ID' => 49979801, 'num_N_BASE_CONTRACT_ID' => 40174101, 'num_N_CONTRACT_ID' => NULL, })
num_N_USER_ID
— идентификатор абонентаnum_N_BASE_CONTRACT_ID
— идентификатор базового договора (представлениеSD_V_DOCUMENTS_JR
)num_N_CONTRACT_ID
— идентификатор созданного договора
Редактирование договора
SD_CONTRACTS_PKG.SD_CONTRACTS_PUT({ 'num_N_DOC_ID' => 52481301, 'num_N_DOC_TYPE_ID' => 1002, 'dt_D_DOC' => DATE('11.06.2010', 'DD.MM.YYYY'), 'vch_VC_DOC_NO' => 'T0100001', 'vch_VC_REM' => 'Тестовый', 'dt_D_BEGIN' => DATE('11.06.2010', 'DD.MM.YYYY'), 'dt_D_END' => NULL, })
num_N_DOC_TYPE_ID
— идентификатор типа договора (справочникREF_TYPE_Document_Type
, договор на оказание услуг — SYS_CONTEXT('CONST', 'DOC_TYPE_SubscriberContract') == 1002)
Удаление договора
SD_DOCUMENTS_PKG.SD_DOCUMENTS_DEL({ 'num_N_DOC_ID' => num_N_DOC_ID, })
num_N_DOC_ID
— идентификатор договора с абонентом
Редактирование (создание) подписки на услуги
SI_USERS_PKG.SI_USER_GOODS_PUT({ 'num_N_SUBJ_GOOD_ID' => num_N_SUBJ_GOOD_ID, 'num_N_GOOD_ID' => 22165301, 'num_N_SUBJ_GOOD_TYPE_ID' => 1031, 'num_N_SUBJECT_ID' => 712282901, 'num_N_ACCOUNT_ID' => 712283801, 'num_N_OBJECT_ID' => 712284401, 'num_N_PAY_DAY' => 1, 'num_N_LINE_NO' => 1000000, 'num_N_QUANT' => 1, 'num_N_UNIT_ID' => 1009, 'num_N_DOC_ID' => 712283101, 'num_N_PAR_SUBJ_GOOD_ID' => NULL, 'dt_D_BEGIN' => DATE('11.06.2010', 'DD.MM.YYYY'), 'dt_D_END' => NULL, })
num_N_SUBJ_GOOD_ID
— идентификатор подписки на услуги. Если равенNULL
— производится создание, иначе — редактированиеnum_N_GOOD_ID
— идентификатор тарифного плана или услуги из номенклатуры (представлениеSR_V_GOODS
)num_N_SUBJ_GOOD_TYPE_ID
— идентификатор типа подписки (справочникREF_TYPE_Subj_Good_Type
, тарифный план — SYS_CONTEXT('CONST', 'GOOD_SUBJ_Tariff') == 1031, услуга — SYS_CONTEXT('CONST', 'GOOD_SUBJ_Periodic') == 2031)num_N_SUBJECT_ID
— идентификатор абонентаnum_N_ACCOUNT_ID
— идентификатор лицевого счетаnum_N_OBJECT_ID
— идентификатор оборудованияnum_N_PAY_DAY
— расчетный день месяцаnum_N_LINE_NO
— номер строки по порядку при отображении таблицы. Для первой родительской записи — 1000000, для второй родительской — 2000000 и т.д. Для первой дочерней записи первой родительской записи — 1000001, для второй дочерней записи третьей родительской строки — 3000002.num_N_QUANT
— количествоnum_N_UNIT_ID
— идентификатор единицы измерения (представлениеSI_V_UNITS
, неопределенно — SYS_CONTEXT('CONST', 'UNIT_Piece') == 2009)num_N_DOC_ID
— идентификатор договораnum_N_PAR_SUBJ_GOOD_ID
— идентификатор родительской подписки (указывается в случае, если добавляется дочерняя строка)
Удаление подписки на услуги
SI_USERS_PKG.SI_USER_GOODS_PUT({ 'num_N_SUBJ_GOOD_ID' => num_N_SUBJ_GOOD_ID, })
num_N_SUBJ_GOOD_ID
— идентификатор подписки на услуги
Лицевые счета
Добавление лицевого счета для абонента
SI_USERS_PKG.CREATE_ACCOUNT({ 'num_N_USER_ID' => 49979801, 'num_N_ACCOUNT_ID' => NULL, })
num_N_USER_ID
— идентификатор абонентаnum_N_ACCOUNT_ID
— идентификатор созданного лицевого счета
Редактирование (добавление) счета
SI_SUBJECTS_PKG.SI_SUBJ_ACCOUNTS_PUT({ 'num_N_ACCOUNT_ID' => num_N_ACCOUNT_ID, 'num_N_SUBJECT_ID' => 52480701, 'num_N_ACCOUNT_TYPE_ID' => 2042, 'num_N_BANK_ID' => 100, 'num_N_CURRENCY_ID' => 1044, 'vch_VC_ACCOUNT' => 'T0100001', 'num_N_OVERDRAFT' => 100, 'dt_D_OVERDRAFT_END' => DATE('15.06.2010', 'DD.MM.YYYY'), })
num_N_ACCOUNT_ID
— идентификатор счета. Если равенNULL
— производится создание, иначе — редактированиеnum_N_SUBJECT_ID
— идентификатор СУ (абонента)num_N_ACCOUNT_TYPE_ID
— идентификатор типа счета (справочникREF_TYPE_Account_Type
, лицевой счет — SYS_CONTEXT('CONST', 'ACC_TYPE_Personal') == 2042)num_N_BANK_ID
— идентификатор банка (для реальных счетов) или оператора связи (для лицевых)num_N_CURRENCY_ID
— идентификатор валюты (справочникREF_TYPE_Currency
, лицевой счет — SYS_CONTEXT('CONST', 'CURR_Ruble') == 1044)vch_VC_ACCOUNT
— номер счетаnum_N_OVERDRAFT
— кредитный лимитdt_D_OVERDRAFT_END
— дата окончания срока действия кредитного лимита
Удаление счета
SI_SUBJECTS_PKG.SI_SUBJ_ACCOUNTS_DEL({ num_N_ACCOUNT_ID => 52481101, })
num_N_ACCOUNT_ID
— идентификатор счета