Лично я делаю так.
Все поля, в каких есть текст, я гружу в текст признака. В основные данные признака я гружу хэш от этого текста, одновременно с этим модуль генерации хэша создаёт запись в текстовой таблице. Из этой таблице потом текст экстрактором грузится в текст признака.
Никаких проблем с решетками, русским текстом, спецсимволами, вообще чем угодно. Загрузили треш? Получаете треш в отчётах. Всё.
Code:
FUNCTION ZTEXT_MD5.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(STRING) TYPE  CHAR255
*"  EXPORTING
*"     REFERENCE(HASH) TYPE  CHAR32
*"----------------------------------------------------------------------
  DATA: it_hashtext TYPE ZHASHTEXT.
  DATA: i_stringlen TYPE I.
  DATA: hash160     TYPE HASH160.
  DATA: ch_hash     TYPE CHAR32.
  DATA: xstr        TYPE XSTRING.
  DATA  v_varkey    LIKE rstable-varkey.
  i_stringlen = STRLEN( STRING ).
  IF i_stringlen = 0.
    HASH = ''.
  ELSE.
    DATA str TYPE STRING.
    str = string.
    CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
      EXPORTING
        text           = str
*       MIMETYPE       = ' '
*       ENCODING       =
      IMPORTING
        buffer         = xstr
      EXCEPTIONS
        failed         = 1
        OTHERS         = 2.
    CALL FUNCTION 'CALCULATE_HASH_FOR_RAW'
      EXPORTING
        ALG                  = 'MD5'
        DATA                 = xstr
      IMPORTING
        HASH                 = HASH160
      EXCEPTIONS
        UNKNOWN_ALG          = 1
        PARAM_ERROR          = 2
        INTERNAL_ERROR       = 3
        OTHERS               = 4.
      ch_hash = HASH160.
    DO.
      v_varkey = ch_hash.
      call function 'ENQUEUE_E_TABLE'
        exporting MODE_RSTABLE = 'E'
        tabname = 'ZHASHTEXT'
        varkey  = v_varkey
      exceptions
        foreign_lock = 1
        system_failure = 2
        others = 3.
      SELECT SINGLE *
        FROM ZHASHTEXT
        INTO it_hashtext
        WHERE HASH = ch_hash.
      IF sy-subrc = 0.
        IF it_hashtext-STRING = STRING.
          HASH  = ch_hash.
          call function 'DEQUEUE_E_TABLE'
            exporting
              tabname        = 'ZHASHTEXT'
              varkey         = v_varkey
            exceptions
              foreign_lock   = 1
              system_failure = 2
              others         = 3.
          EXIT.
        ENDIF.
      ELSE.
        HASH               = ch_hash.
        it_hashtext-HASH   = ch_hash.
        it_hashtext-STRING = STRING.
        CONCATENATE sy-datum sy-uzeit INTO it_hashtext-TIMESTAMP.
        INSERT ZHASHTEXT FROM it_hashtext.
        COMMIT WORK AND WAIT.
        call function 'DEQUEUE_E_TABLE'
          exporting
            tabname = 'ZHASHTEXT'
            varkey  = v_varkey
          exceptions
            foreign_lock = 1
            system_failure = 2
            others = 3.
        EXIT.
      ENDIF.
*   Hash collision! Wow!
      DATA            i_index    TYPE i.
      FIELD-SYMBOLS   <fs_char>  TYPE c.
      WHILE i_index < 32.
        ASSIGN ch_hash+i_index(1) TO <fs_char>.
        CASE <fs_char>.
          WHEN '0'.
            <fs_char> = '1'.
            i_index   = 32.
          WHEN '1'.
            <fs_char> = '2'.
            i_index   = 32.
          WHEN '2'.
            <fs_char> = '3'.
            i_index   = 32.
          WHEN '3'.
            <fs_char> = '4'.
            i_index   = 32.
          WHEN '4'.
            <fs_char> = '5'.
            i_index   = 32.
          WHEN '6'.
            <fs_char> = '7'.
            i_index   = 32.
          WHEN '7'.
            <fs_char> = '8'.
            i_index   = 32.
          WHEN '8'.
            <fs_char> = '9'.
            i_index   = 32.
          WHEN '9'.
            <fs_char> = 'A'.
            i_index   = 32.
          WHEN 'A'.
            <fs_char> = 'B'.
            i_index   = 32.
          WHEN 'B'.
            <fs_char> = 'C'.
            i_index   = 32.
          WHEN 'C'.
            <fs_char> = 'D'.
            i_index   = 32.
          WHEN 'D'.
            <fs_char> = 'E'.
            i_index   = 32.
          WHEN 'E'.
            <fs_char> = 'F'.
            i_index   = 32.
          WHEN 'F'.
            <fs_char> = '0'.
            i_index = i_index + 1.
        ENDCASE.
      ENDWHILE.
      call function 'DEQUEUE_E_TABLE'
        exporting
          MODE_RSTABLE = 'E'
          tabname = 'ZHASHTEXT'
          varkey  = v_varkey
        exceptions
          foreign_lock = 1
          system_failure = 2
          others = 3.
    ENDDO.
  ENDIF.
ENDFUNCTION.