CftClub.ru
Клуб специалистов ЦФТ-Банк

Ибанк - ЦФТ, загрузка свифт документов....

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Интеграция с внешними подсистемами
Предыдущая тема :: Следующая тема  
Автор Сообщение
e.kha
Участник со стажем


Вступление в Клуб: 26.04.2012
СообщениеСр Дек 19, 2012 10:06   Ибанк - ЦФТ, загрузка свифт документов.... Ответить с цитатой
Полезность: Нет оценки
Добрый день
Дано ибанк - банк клиент, ЦФТ.
На данный момент реализована загрузка рублевых документов... Принцип след. ибанк шлюз грузит данные документа в транзитную таблицу in_query в схеме ibs и вызывает хранимую процедуру , которая вызывает библиотечную процедуру из схемы ibs для обработки документа.

Делаю загрузку свифт документа, чтобы не дергать постоянно банк клиент, в in_query закинул один документ, написал операцию которая вызывает библиотечную процедуру и в общем что то написал. Через операцию работает, документы создается плюс комиссия.
Тестируем по схеме, ибанк шлюз загрузка в транзитную таблицу вызов хранимки, вываливается ошибка на очень простом действии

Код:
doc_rc_ref.[SUMMA] := to_number(trim(trs_doc.AMOUNT));


где doc_rc _ref ссылка на документ рц
trs_doc.AMOUNT char(2048), выглядит например вот так - 20.2

смотрю как сделана загрузка на рублях
и вижу что вызывается функция которая делает след. преобразование
Код:
function ToOraNumber(N varchar2) return number is
  tmp_num number;
begin
  tmp_num := to_number(replace(trim(N), '.', ','));
  return tmp_num;
exception when others then
  tmp_num := to_number(replace(trim(N), ',', '.'));
  return tmp_num;
end;


причем тот же самый результат возвращает
Код:
to_number(trim(trs_doc.AMOUNT), '999999999999.99');


теперь присвоение к сумме проходит нормально но
при создании документов происходит обратное преобразование
из суммы в строку и тут возникает другая ошибка

ORA-20300: APP-PATTERN_DOC.LIB: Произошла ошибка при вычислении выражения расчета суммы!
Выражение: 20,2
Исходное выражение: [СУММА_ДОКУМЕНТА]
Ошибка: ORA-06550: Строка 1, столбец 19:
PLS-00103: Встретился символ "," в то время как ожидалось одно из следующих:
* & = - + ; < / > в in is mod remainder not rem
<показатель (**)> <> или != или ~= >= <= <> и or like like2
likec между || multiset member submultiset
Символ "* был вставлен перед "," для продолжения.

Проверяю обратное преобразование в строку - действительно выглядит
20,2, т.е. разделитель запятая...

Не могу понять что делать в этой ситуации. когда вызываю загрузку из
операции в навигаторе все нормально, когда загрузка вызывается из хранимки почему то появляются другие разделители...
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеСр Дек 19, 2012 12:15    Ответить с цитатой
Полезность: Нет оценки
Передавайте в нужном формате, чтобы ошибка не вылетала и всё.
e.kha
Участник со стажем


Вступление в Клуб: 26.04.2012
СообщениеЧт Дек 20, 2012 01:14    Ответить с цитатой
Полезность: Нет оценки
что значит передавайте в нужном формате? пример можно показать?
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Дек 20, 2012 10:07    Ответить с цитатой
Полезность: Нет оценки
Напиши
Код:
to_number(trim(trs_doc.AMOUNT), '9999999999990D00');

Используй разделитель установленный в системе
_________________
всегда есть как минимум 2 выхода
e.kha
Участник со стажем


Вступление в Клуб: 26.04.2012
СообщениеЧт Дек 20, 2012 10:15    Ответить с цитатой
Полезность: Нет оценки
проблема в обратной конвертации.... видимо в бизнесс процессе происходит обратная конвертация из суммы в строку, и разделитель вставляется с запятой, когда требуется с точкой....
e.kha
Участник со стажем


Вступление в Клуб: 26.04.2012
СообщениеВт Дек 25, 2012 02:12    Ответить с цитатой
Полезность: Нет оценки
проблема решается очень просто.
в хранимой процедуре в самом начале надо вставить

Код:
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=''.,''';
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Дек 26, 2012 07:31    Ответить с цитатой
Полезность: Нет оценки
e.kha пишет:
проблема решается очень просто.
в хранимой процедуре в самом начале надо вставить

Код:
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=''.,''';


Только вчера узнал.

Не надо в хранимой процедуре.

Открываете АРМ Администратор доступа.
Дальше Меню->Системные справочники->Профили, выбираем DEFAULT
Находим параметр ALTER_SESSION, через пробел добавляем опцию NLS_NUMERIC_CHARACTERS='.,'
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Интеграция с внешними подсистемами Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru