Проблема
Счета по умолчанию определяются не по правилам
Решение
1. Ознакомьтесь с документацией Счета по умолчанию
2. Выполните скрипты для отладки
Протокол работы фильтров
Для включения логирования необходимо настроить PUB_SETUP:
- PUBLIC_DEBUG_TRACE_DEFAULT_ACC = TRUE
- LOGGER_LOG_LEVEL = 0
Протокол работы фильтров находится в общем протоколе. Посмотреть его можно в Kibana или непосредственно SQL-запросом.
Информация о сделке пишется в протокол в любом случае, вне зависимости от того, была ли она зарегистрирована.
В протоколе идет указание на каждый фильтр, каждый счет фильтра и на каждую обработанную сущность. Как только сущность не подпадает под условия фильтра, счет считается не подошедшим, и в протокол добавляется соответствующая запись. Если у тредейра нет прав на соответствующий счет, он не попадает в фильтр поиска и в протоколе не отображается.
- ENTITY_ID - сущность которая проверяется.
- VALUE - переданное значение сущности.
- FILTERVALUE - значение сущности указанное в фильтре.
Пример протокола из SQL-запроса:
Пример SQL запроса
Запрос протокола в SQL
SELECT d.xmldata.getclobval(), d.event_time, XT.VLEVEL, xt.vcategory , d.id , XT.VRECORD_ID , NVL(NVL( ( SELECT username FROM t_users u WHERE id=XT.USER_ID AND rownum=1 ), XT.VUSER), XT.DBUSER) AS username , XT.USER_ID USER_ID , XT.IP IP , XT.APP_NAME , XT.DBUSER , XT.MESS FROM resman.tbl_log_data d, XMLTABLE('/root' passing d.xmldata columns VLEVEL VARCHAR2(32) path 'level' ,VRECORD_ID VARCHAR2(32) path 'fields/record_id' ,VCATEGORY VARCHAR2(32) path 'fields/category' ,VUSER VARCHAR2(128) path 'fields/user' ,APP_NAME VARCHAR2(128) path 'app_name' ,USER_ID VARCHAR2(128) path 'user_id' ,IP VARCHAR2(128) path 'app_ip' ,DBUSER VARCHAR2(128) path 'fields/db/user' ,MESS VARCHAR2(2000) path 'message' ) xt WHERE VCATEGORY = 'ACCOUNTS_DEFAULT' and trunc(event_time) = trunc(sysdate) order by id desc;
Запрос сущности указанной в ENTITY_ID
SELECT a.id, a.aliase, a.name, a.vsql, a.isbitmask, a.columntype, a.description FROM accnts_default_ent a where id=1
Параметры PUB_SETUP
select * from pub_setup where parameter_code in ('PUBLIC_DEBUG_TRACE_DEFAULT_ACC','LOGGER_LOG_LEVEL');
Глубокая отладка
После отработки запроса счета в пакетные переменные будут записаны указанные параметры.
-- последний сработавший фильтр -- (можно использовать это значение где-то для своих протоколов) pkg_def_accnt_lastfilter number; -- последняя сработавшая запись фильтра pkg_def_accnt_lasthead_id number;
В привычной для разработчика среде можно выполнить запрос, который выведет номер фильтра, запись внутри фильтра и найденный счёт.
Например, предположим, что нас интересует
- сделка Reuters FxSpot,
- на филиале с идентификатором 1,
- трейдер с идентификатором 1.
Чтобы узнать, из какого фильтра взялся расчётный счёт для платежа в российских рублях, следует выполнить следующий код:
DECLARE v_account_id INTEGER; BEGIN pkg_accnt_default.def_acc_get_clear; pkg_accnt_default.def_acc_get_set_value ('product_id', pkg_products.fx_id); pkg_accnt_default.def_acc_get_set_value ('filial_id', 1); pkg_accnt_default.def_acc_get_set_value ('trader_id', 1); pkg_accnt_default.def_acc_get_set_value ('ext_system_id', 1); v_account_id := pkg_accnt_default.def_acc_get_get_accnt (2, f_ccy_instrument ('RUB'), 'True', 1); zzz_ex ('account id = ' || v_account_id ,'filter_id = ' || pkg_accnt_default.pkg_def_accnt_lastfilter ,'head_id = ' || pkg_accnt_default.pkg_def_accnt_lasthead_id); END; /
Похожие статьи