SAP MM02主数据维护多语言长文本,丢失空格的解决办法

1.发生原因

  • 官方参考博客:Trailing Blanks in Character String Processing
  • C类型的字符串末尾空格会被SAP处理时丢弃
  • MM02长文本保存时会切成TDLINE,如果切割出来的文本末尾刚好是空格,那么这个空格会被丢弃
  • 关键词:
    • 基本数据文本
    • CONVERT_STREAM_TO_ITF_TEXT
    • LMGD1I7L
    • SAPLMGD1 2031

2.解决思路

  • 自开发程序需要判断切割后的行末尾是否为空格,是则在下一行开头增加一个空格(注:TDLINE切割长度不能用132,否则下一行无法存入空格)
  • mm02标准程序需要增强Function Module:CONVERT_STREAM_TO_ITF_TEXT

3.增强

  • 在源代码末尾处增加自定义文本处理逻辑
    1
  • 新增插入增强,限制Tcode:mm02 mm03缩小增强代码的影响范围
    2
*{   INSERT         ZBDK904950                                        1
  IF sy-tcode = 'MM01' OR sy-tcode = 'MM02' OR sy-tcode = 'MM03'.

  TYPES: BEGIN OF ty_string,
    char_120 TYPE char120,
  END OF ty_string.

DATA: lv_string TYPE string,
      lt_string  TYPE TABLE OF ty_string,
      wa_string  TYPE  ty_string,
      wa_string1 TYPE ty_string,
      lv_length  TYPE I,
      lv_tabix TYPE sy-tabix,
      wa_stream TYPE TDLINE.

CLEAR: itf_text,itf_text[],lv_string,lv_length,lt_string.


  LOOP AT text_stream.
    lv_tabix = sy-tabix.
    IF lv_tabix - 1 > 0.
      READ TABLE text_stream INDEX ( lv_tabix - 1 ) INTO wa_stream.
      IF STRLEN( wa_stream ) = 69.
        CONCATENATE lv_string text_stream INTO lv_string SEPARATED BY space.
      ELSE.
        CONCATENATE lv_string text_stream  INTO lv_string.
      ENDIF.
    ELSE.
      CONCATENATE lv_string text_stream  INTO lv_string.
    ENDIF.
    sy-tabix = lv_tabix.
  ENDLOOP.

CLEAR: lv_tabix,wa_stream.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf in lv_string WITH ''.

  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
  EXPORTING
    TEXT      = lv_string
  IMPORTING
    length    = lv_length
  TABLES
    ftext_tab = lt_string.
  LOOP AT lt_string INTO wa_string.
    CLEAR: ITF_TEXT.
    ITF_TEXT-TDFORMAT = '*'.

    lv_tabix = sy-tabix.
    IF lv_tabix - 1 > 0.
      READ TABLE lt_string INDEX ( lv_tabix - 1 ) INTO wa_string1.
      IF STRLEN( wa_string1 ) < 120.
        ITF_TEXT-TDLINE = | { wa_string-char_120 }|.
      ELSE.
        ITF_TEXT-TDLINE = wa_string-char_120.
      ENDIF.
    ELSE.
      ITF_TEXT-TDLINE = wa_string-char_120.
    ENDIF.

    sy-tabix = lv_tabix.

    APPEND ITF_TEXT.
  ENDLOOP.
  ENDIF.
*}   INSERT

猜你喜欢

转载自blog.csdn.net/qq_30797051/article/details/120904624
SAP