Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Декабрь 05, 2007, 02:36:33 pm

Название: REPLACE - замена по маске
Отправлено: Uukrul от Декабрь 05, 2007, 02:36:33 pm
В общем-то иногда возникает задача когда есть документ которые требуется отправить получателю, а хотя бы и например той же функцией SO_NEW_DOCUMENT_SEND_API1. При этом в документе есть специальные шаблоны которые к моменту отправки требуется заполнить на вполне реальные значения. Ну например есть строка текста бюджетного платежа вида:

my_string = '*;101;;*23070600*<OKPO>*<EXTNUM>*<DATEDOC>*21625786*1*;'.

И нужно вот эти вот тексты заменить в момент формирования на код ОКПО клиента, внешний номер и т.д. Вариантов может быть много как это сделать, но я использую следующий макрос:

Код: You are not allowed to view links. Register or Login
DEFINE replace_mask.
  l_pattern = &2.
  l_repl_string = &3.
  l_string = &1.
  call function 'C147_REPLACE'
       exporting
            i_pattern     = l_pattern
            i_repl_string = l_repl_string
       changing
            x_string      = l_string.
  &1 = l_string.
END-OF-DEFINITION.

Пример вызова следующий: replace_mask: my_string '<OKPO>' '34567890'.

Этот вызов найдет в строке my_string, текст <OKPO> и заменит его на '34567890'.
Название: Re: REPLACE - замена по маске
Отправлено: Олег от Январь 27, 2008, 11:09:15 am
В чем разница между стандартной replace?

REPLACE '<OKPO>' IN my_string WITH '34567890'.
Название: Re: REPLACE - замена по маске
Отправлено: Uukrul от Январь 27, 2008, 10:29:44 pm
Да вроде как уже ни в чем похоже, а с нового синтаксиса REPLACE вроде как и нафиг оно надо. Я этими фм-ками давно просто пользуюсь, но ранее вроде как были какие-то ограничения на REPLACE, опять же уже и не помню с чем связанные грабли. Если вспомню напишу, так на вскидку не вспомнилось... опять же я не абапер, так что не отслеживаю что там в синтаксисе меняется, а типа так работает и ладненько  ::)

PS:  Чего-то у меня мысли с 4.0 связаны, но может и ошибаюсь.