Проблема

Заключается сделка на Московской Бирже. В терминале заполняется поле "Комментарий" (TRADE_REF в SEC_BROKER_DEALS), по которому должен определиться "Брокер" (В сделках покупки/продажи ценных бумаг и РЕПО – таблица "SEC_DEAL" поле "BROKER_ID". В конверсионных сделках – таблица "FX" поле "BROKERID1"). По какой-либо причине поле "Брокер" в сделку не передается.

Решение

Пример заполнения поля, где 76 – тэг брокера:

TRADE_REF = #76:CHASE#

Для реализации функционала необходимо соблюдение требований:

  • Используется тег брокера – "76"  
  • Код "CHASE" необходимо привязать в справочнике Коды (cущность – контрагенты).
  • В Администраторе указаны соответствующие символы и разделители.

    Для настройки запустите resadm.exe, выберите вкладку "Система" – "Общие настройки" – "Настройки RN" –  "Загрузка сделок, платежей" и настройте параметры:

     

    Разделитель заголовка и значения параметра FIX протоколаSEC_LOAD_FIX_HEAD_DELIMITER':'
    Разделитель параметров FIX протокола в референсеSEC_LOAD_FIX_PARAM_DELIMITER';'
    Символ начала и окончания строки FIX протокола в референсеSEC_LOAD_FIX_PROT_BEGIN_END'#'



После приведения всех настроек в соответствие, при загрузке сделки будет корректно определяться брокер. 
 

Проверка настроек

DECLARE
  vTradeRef VARCHAR2 (128);
  VFIXSTR   VARCHAR2 (128);
  VRESULT   VARCHAR2 (128);
  VBROKSTR  VARCHAR2 (128);
  vBrokerId number;
  VSYSTEM_ALIASE number;
  vBOURSE_ALIASE VARCHAR2(100);
BEGIN
  select trade_ref,BOURSE_ALIASE 
    into vTradeRef,vBOURSE_ALIASE
  from SEC_BROKER_DEALS where id = :YourIdDealFromSBD;
  --vTradeRef := '#76:BDOT#50833';
  select max (SYSTEM_ALIASE)
      into VSYSTEM_ALIASE
      from EXT_SYSTEMS
     where SYSTEM_ALIASE  = vBOURSE_ALIASE;
  --VSYSTEM_ALIASE := 3; -- Change to your extSystemId from ext_systems
  --RESMAN.PKG_SEC_BROKER_DEALS.ANALYZETRADEREF (vTradeRef);
  PKG_COMMON.TRIMSUBSTR (vTRADEREF                      --
  ,F_PARAMETER_STR ('SEC_LOAD_FIX_PROT_BEGIN_END', '#') --
  ,F_PARAMETER_STR ('SEC_LOAD_FIX_PROT_BEGIN_END', '#') --
  ,VFIXSTR                                              --
  ,VRESULT);
  IF VFIXSTR IS NOT NULL THEN
    -- брокер - параметр 76 (задача 9816)
    VBROKSTR := PKG_COMMON.FUNC_GETSTRPARAMETER ( VFIXSTR         --
    ,'76' || F_PARAMETER_STR ('SEC_LOAD_FIX_HEAD_DELIMITER', ':') --
    ,F_PARAMETER_STR ('SEC_LOAD_FIX_PARAM_DELIMITER', ';')        --
    ,'True'                                                       --
    ,'True'                                                       --
    );
    IF VBROKSTR IS NOT NULL THEN
      vBrokerId := PKG_CODES.F_CODE_RN_FROM_EXT_SYSTEM (VSYSTEM_ALIASE, 4, VBROKSTR);
    END IF;
  ELSE
    zzz_Ex(' VFIXSTR =  '||NVL (VFIXSTR,' Empty '));
  END IF;
  IF vBrokerId is null then
    zzz_ex ('Code not Found. Check your next settings.
                SEC_LOAD_FIX_PROT_BEGIN_END = '|| F_PARAMETER_STR ('SEC_LOAD_FIX_PROT_BEGIN_END', '#')|| ' 
                SEC_LOAD_FIX_PARAM_DELIMITER = '||F_PARAMETER_STR ('SEC_LOAD_FIX_PARAM_DELIMITER', ';')|| '
                VBROKSTR = '||VBROKSTR
            );
  end if;
  zzz_Ex(' VBROKSTR = '||VBROKSTR || ' vBrokerId = '||NVL (vBrokerId,'-1'));
END;
/