Hi, I've a simple requirement to replace some text symbols in a standard text with actual data. The std text is like this:

My Code is in a BAdI implementation class, is like this:
DATA: lv_textsym TYPE string,
ekko TYPE ekko.
CALL FUNCTION 'ME_EKKO_SINGLE_READ'
EXPORTING
pi_ebeln = CONV ebeln( is_nast-objky ) " Purchasing Document Number
IMPORTING
po_ekko = ekko " Purchasing Document Header
EXCEPTIONS
no_records_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
RETURN.
ENDIF.
CHECK sy-subrc EQ 0.
SELECT SINGLE name1 FROM adrc AS a
INNER JOIN t001 AS t
ON t~adrnr = a~addrnumber
AND t~bukrs = @ekko-bukrs
INTO @DATA(x_t001_name1).
CALL FUNCTION 'INIT_TEXTSYMBOL'.
LOOP AT lt_tlines INTO DATA(ls_line).
FIND ALL OCCURRENCES OF '&' IN ls_line-tdline RESULTS DATA(lt_result).
LOOP AT lt_result INTO DATA(ls_result).
CHECK sy-tabix MOD 2 = 1.
CALL FUNCTION 'GET_TEXTSYMBOL'
EXPORTING
line = ls_line-tdline
start_offset = ls_result-offset
IMPORTING
name = lv_textsym.
IF lv_textsym IS NOT INITIAL.
ASSIGN (lv_textsym) TO FIELD-SYMBOL(<fs_textsym>).
lv_textsym := |&{ lv_textsym }&|.
IF <fs_textsym> IS ASSIGNED.
CALL FUNCTION 'SET_TEXTSYMBOL'
EXPORTING
header = ls_thead
name = lv_textsym
value = <fs_textsym>.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'TEXT_SYMBOL_REPLACE'
EXPORTING
header = ls_thead
TABLES
lines = lt_tlines.
CALL FUNCTION 'FORMAT_TEXTLINES'
EXPORTING
formatwidth = 128
TABLES
lines = lt_tlines
EXCEPTIONS
bound_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LT_TLINES and LS_THEAD are filled with READ_TEXT as usual.
In debugging, I see the values correctly available:

But after the TEXT_SYMBOL_REPLACE, it comes out blank:

Any ideas, what could be going wrong here?