РЦ. SWIFT. Грабельки (подлянка) от ЦФТ
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ГлСП Профи
Вступление в Клуб: 20.09.2007
|
Чт Май 06, 2010 13:29  РЦ. SWIFT. Грабельки (подлянка) от ЦФТ |
|
Полезность: Нет оценки
|
Прислал клиент по клинт-банку переводик. Его подтвердили, и потом вдруг пришел возврат из РЦ с таким текстом "Недопустимые символы "-" в поле 59"
На первый взгляд вроде все правильно. Пытаемся отправить, возврат.
Начал разбираться, оказалось , что этот символ стоит в начале поля, что запрещено по законам SWIFTa
Всех запутала общая диагностика, т.к. вместо того, что незапрещенный, в принципе ,символ стоит в начале строки, что запрещено, выдает в принципе о недопустимости символа, без уточнения.
В общем, частично решил проблему так. При обработке документа просто будет выдаваться сообщение о символе в начале строки, чтобы хоть как то было понятно.
В библиотеке [DOCUM_RC].[SCHK_NEW] функция
Код: |
-- Проверка на допустимые символы, перевызывается из VCHK
function CHK_SYMB(P_STR in string(2000), -- Проверяемая строка
P_FIELDS in string, -- Номер проверяемого поля
P_FLAG string(1), -- Выбор набора символов (S-TRUE или N-FALSE)
P_SIZE in integer default NULL,-- Размер подстрок поля
P_SYMBOLS in out string(1000) -- Недопустимый символ
) return string(10) is
SYMBOLS string(200);
tmpSymbol string(1);
v_wrong_symbol string(1);
begin
if P_FLAG = 'S' then
SYMBOLS := ::[ DOCUM_RC ].[ VCHK ].SYMBOLS_S;
else
SYMBOLS := ::[ DOCUM_RC ].[ VCHK ].SYMBOLS_N;
end if;
for i in 1..nvl(length(P_STR), 0) loop
tmpSymbol := substr(P_STR, i, 1);
v_wrong_symbol := null;
if instr(SYMBOLS, tmpSymbol) = 0 then
v_wrong_symbol := tmpSymbol;
end if;
-- проверка на наличие в первой позиции подстроки символов ':' и '-'
if P_SIZE is not NULL and mod(i, P_SIZE) = 1 and tmpSymbol in (':', '-') then
--ksa begin 06.05.10
debug('Поле '||P_FIELDS||'. Сивол "'||tmpSymbol|| '" запрещен в начале строки', 0) ;
--ksa end 06.05.10
v_wrong_symbol := tmpSymbol;
end if;
if v_wrong_symbol is not null then
if P_SYMBOLS is not null then
P_SYMBOLS := P_SYMBOLS || ' ' || v_wrong_symbol;
else
P_SYMBOLS := v_wrong_symbol;
end if;
end if;
end loop;
if P_SYMBOLS is not null then
return rtrim(P_FIELDS, ',');
end if;
return NULL;
-- return ::[ DOCUM_RC] .[VCHK].CHK_SYMBOLS(P_STR, P_FIELDS, P_FLAG, P_SIZE, P_SYMBOL);
end;
|
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|