| 
 
  
	| Ибанк - ЦФТ, загрузка свифт документов.... 
 
 |  
	
		| Предыдущая тема :: Следующая тема |  
		| Автор | Сообщение |  
		| 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='.,'
 |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |