ArmAnn написал:
Не, это несколько другое.
И, по данной ссылке выложена несколько устаревшая версия.
Более полная версия есть на
http://zstandards.narod.ru . Только они несколько для другого (BDC, списковый ALV и SAPScript). Писалось давно, для версии 4.0В.
А здесь речь, наверное, идет о ФМ
==========================
Code:
FUNCTION /A111/ANY_TO_STRING.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(P_SOURCE)
*" EXPORTING
*" REFERENCE(P_RESULT) TYPE STRING
*"----------------------------------------------------------------------
DATA: l_FTYPE TYPE C,
l_buffer(50) type c,
l_OUTPLEN TYPE I,
l_DESTLEN TYPE I.
DESCRIBE FIELD p_SOURCE TYPE l_FTYPE .
IF l_FTYPE EQ 'I' OR l_FTYPE EQ 'P' OR l_FTYPE EQ 'F'.
WRITE p_SOURCE TO l_buffer LEFT-JUSTIFIED.
DESCRIBE FIELD p_SOURCE OUTPUT-LENGTH l_OUTPLEN .
l_DESTLEN = STRLEN( l_buffer ) .
WHILE l_DESTLEN < l_OUTPLEN .
SHIFT p_result RIGHT .
l_DESTLEN = STRLEN( P_RESULT ) .
ENDWHILE.
ELSE.
p_result = p_SOURCE .
ENDIF.
ENDFUNCTION.
=========================
Но он предназначен, главным образом, для записи цифровых значений в строчный вид для BDC (чтобы цифровые значения правильно ложились в экранные поля).
Еще есть такой ФМ
=========================
Code:
FUNCTION /A111/format_text .
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(P_TEMPLATE) TYPE STRING
*" REFERENCE(P_VALUES_RIGHT_JUST) TYPE FLAG DEFAULT ' '
*" EXPORTING
*" REFERENCE(P_RESULT_TEXT)
*" EXCEPTIONS
*" VARIABLE_NOT_FOUND
*" CALLER_UNKNOWN
*"----------------------------------------------------------------------
DATA:
l_lc_stack TYPE i,
l_t_callstack TYPE sys_callst,
l_wa_callstack TYPE sys_calls,
l_buftxt(256) TYPE c,
l_varname TYPE string,
l_svarname TYPE string,
l_source_name TYPE string,
l_buftxt_tmp TYPE string,
l_startpos TYPE i, l_endpos TYPE i, l_findpos TYPE i,
l_shift_delta TYPE i,
l_shift_delta_empty TYPE i,
l_varlen TYPE i, l_bufval(100) TYPE c,
l_caller LIKE sy-repid.
FIELD-SYMBOLS: <e_fld>.
l_buftxt = p_template .
DO .
* Поиск имен переменных в скобках "< >"
SEARCH l_buftxt FOR '<' .
IF NOT sy-subrc IS INITIAL .
p_result_text = p_template.
EXIT.
ENDIF.
l_findpos = l_startpos = sy-fdpos .
SEARCH l_buftxt FOR '>' .
IF NOT sy-subrc IS INITIAL .
p_result_text = p_template.
EXIT.
ENDIF.
l_endpos = sy-fdpos .
l_varlen = l_endpos - l_startpos + 1.
CHECK l_varlen > 0.
l_source_name = l_buftxt+l_startpos(l_varlen).
l_varlen = l_varlen - 2.
ADD 1 TO l_startpos .
l_varname = l_buftxt+l_startpos(l_varlen) .
IF l_caller IS INITIAL.
* Определение вызывающей программы
CALL FUNCTION 'SYSTEM_CALLSTACK'
IMPORTING
et_callstack = l_t_callstack.
READ TABLE l_t_callstack INTO l_wa_callstack INDEX 2.
IF sy-subrc IS INITIAL.
l_caller = l_wa_callstack-progname.
ELSE.
RAISE caller_unknown.
ENDIF.
ENDIF.
* Присвоение FIELD-SYMBOL
l_svarname = l_varname .
CONCATENATE '(' l_caller ')' l_varname INTO l_varname .
TRANSLATE l_varname TO UPPER CASE.
ASSIGN (l_varname) TO <e_fld>.
IF NOT sy-subrc IS INITIAL.
CONCATENATE '?' l_svarname '?' INTO l_svarname .
ASSIGN l_svarname TO <e_fld> .
* RAISE VARIABLE_NOT_FOUND .
ENDIF.
* Подстановка вместо имени переменной ее значения
IF p_values_right_just IS INITIAL .
WRITE <e_fld> TO l_bufval LEFT-JUSTIFIED .
ELSE.
WRITE <e_fld> TO l_bufval RIGHT-JUSTIFIED .
ENDIF.
l_varlen = STRLEN( l_source_name ).
REPLACE l_source_name LENGTH l_varlen
WITH l_bufval INTO l_buftxt.
l_varlen = STRLEN( l_bufval ).
l_shift_delta = l_findpos + l_varlen .
CHECK l_shift_delta > 0.
l_buftxt_tmp = l_buftxt(l_shift_delta) .
l_shift_delta_empty = 64 - l_varlen.
SHIFT l_buftxt LEFT BY l_shift_delta_empty PLACES .
l_buftxt(l_shift_delta) = l_buftxt_tmp(l_shift_delta) .
ENDDO.
CONDENSE l_buftxt .
p_result_text = l_buftxt.
ENDFUNCTION.
================================
Входной параметр - строка вида
"Результатом выполнения ФМ будет строка, где вот здесь <G_MYVAR> будет подставлено значение переменной G_MYVAR"
Писалось тоже давно - сейчас я бы сделал парсер на основе использования конечного автомата.