ABAPLIST以字符串形式插入ECC6(具有前四个字符)

2020-08-25 16:30发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好。

我将从46C转到ECC6,我有更多程序可以读取后台打印文件,有时它们会更改它们。 通常我使用" SUBMIT rspolst2 EXPORTING LIST TO MEMORY",然后调用" LIST_FROM_MEMORY"以获取ABAPLIST。 最后,从这个ABAPLIST中,我从LIST_TO_ASCI中获得一个内部表,直接将ABAPLIST的整个结构放入一个char字段中。 它工作正常。

在46C中,我始终尝试其他两种方法进行最后一步:使用ABPLLIST结构中的SPLIT到分隔符'|'的字符串字段中 并使用FM" LIST_TO_TXT"。 " SPLIT"可以正常工作,而FM" LIST_TO_TXT"可以工作,但是由于所有行都是串联的,因此它不是很有用。

现在,在ECC6中,我必须将unicode标志放在我的Zprogram上,然后,三种方法中的任何一种都不被接受。 我无法从整个结构ABAPLIST传递到字符串字段(或char字段)。

SPLIT仅与RFCRECORD字段一起使用,但是通过这种方式,我丢失了前四个字符。 使用FM HR_KR_XSTRING_TO_STRING的方法相同:我丢失了前四个字符,但是我想得到它们

我该怎么办?

这是一个测试这三种方式的示例程序:" mem_tab"是ABAPLIST,在注释中,我指定了FIRST,SECOND和THIRD METHOD。

在ECC6中,"第一"和"第二"不被接受,我无法激活程序,相反,通过第三种方法,我可以激活它,但是如果我运行它,则会收到" UC_OBJECTS_NOT_CHAR"错误。

------

报告Zmassimiliano NO标准页面标题。


   表格:zmail_spool。


   类型:t_zmspool的开始,
             代理类型为lfa1-lifnr,
             nrspool类型zmail_spool-nrspool,
             rqcretime TYPE zmail_spool-rqcretime,
             rqowner TYPE zmail_spool-rqowner,
             chiave TYPE zmail_spool-chiave,
             note TYPE zmail_spool-note,
             dtultmail类型zmail_spool-dtultmail,
             orultmail TYPE zmail_spool-orultmail,
             utultmail TYPE zmail_spool-utultmail,
          t_zmspool的结尾。


   数据:wa_zmspool TYPE t_zmspool,
         it_zmspool t_zmspool的类型标准表。


 *类型:t_asci的开头,
 *包括abaplist类型,
 * t_asci的结尾。
 类型:tt的开头,
         线(202),
        tt结束。
 数据:abaplist的v_asci类型标准表,
       wa_asci类型abaplist,
       it_xtext tt的标准类型表,
       wa_xtext TYPE tt,
       f_xtext1 TYPE字符串,
       f_xtext2 TYPE字符串。


   数据:abaplist的mem_tab类型标准表,
         wa_tab TYPE线条,
         it_tab类型标准线表,
         尺寸TYPEI。
   数据:f_nrspool类型zmail_spool-nrspool,
         f_numsp(10)TYPE n,
         f_chiave TYPE zmail_spool-chiave,
         wa_tsp01 TYPE tsp01,
         it_tsp01 tsp01的标准类型表,
         f_mt(10)C型,
         f_st(30)C型,
         f_avdipa C型,
         f_agedes(30)C型,
         f_codage(6)C型,
         f_codag(10)N型,
         f_alleg TYPE zmail_def-alleg,
         f_divid(1)C型,
         f_filename TYPE STRING,
         wa_zmail TYPE zmail_spool,
         f_str(200)C型,
         f_x TYPEI。
 * -------------------------------------------------  -------------------
 * SELEZIONI INIZIALI
 * -------------------------------------------------  -------------------


  带有框架标题text-001的块datibase的选择屏幕开始。
    选择屏幕行的开始。
      SELECTION-SCREEN COMMENT(30)文本-usr。
      参数s_user类型zmail_spool-rqowner缺省sy-uname。
    选择屏幕行尾。
    选择屏幕行的开始。
      选择屏幕注释(27)text-dta。
      SELECT_OPTIONS s_data用于zmail_spool-rqcretime。
    选择屏幕行尾。
  SELECT数据库的块结尾。


 * -------------------------------------------------  -------------------
 *选择开始
 * -------------------------------------------------  -------------------


 选择开始。


 * Nella tabella it carico solo gli spool nongiàpresenti
 *在zmail_spool中
   选择* INTO wa_tsp01
     来自tsp01
     rqcretime在s_data中且rqowner = s_user。
 * AND rq0name ='SAP08'。


     f_numsp = wa_tsp01-rqident。
     f_nrspool = f_numsp。
     从zmail_spool中选择单个chiave INTO到f_chiave
       其中nrspool = f_nrspool。
     将wa_tsp01插入表it_tsp01。


 *写:/wa_tsp01-rqident。


     出口。
   ENDSELECT。


   循环到it_tsp01并进入wa_tsp01。
 *写:/'循环',wa_tsp01-rqident。
     提交rspolst2出口清单以存储并返回
       与rqident = wa_tsp01-rqident
       WITH first ='1'。
     通话功能" LIST_FROM_MEMORY"
       桌子
         listobject = mem_tab
       例外情况
         not_found = 1
         其他= 2。
 *写:/'sy-subrc',sy-subrc。
     如果不是mem_tab []是初始的。
       刷新v_asci。
       通话功能" LIST_TO_ASCI"
         桌子
           listasci = v_asci
           listobject = mem_tab
         例外情况
           empty_list = 1
           list_index_invalid = 2
           其他= 3。
       清除f_x。


 */////第一种方法:直接////////////////
       环聊v_asci INTO wa_asci。
         wa_tab-tdline = wa_asci。
         写:/wa_tab-tdline。
         f_x = f_x + 1。
         如果f_x = 15。
           出口。
         万一。
       结局。
       写:/'************************************************'。
 */////第二种方法:通过分割////////////////
       清除f_x。
       环聊v_asci INTO wa_asci。
         分割wa_asci AT'|'
               INTO f_xtext1 f_xtext2。


         写:/f_xtext1。
 *写:/f_xtext2。


         f_x = f_x + 1。
         如果f_x = 15。
           出口。
         万一。
       结局。
       写:/'************************************************'。
 */////第三种方法:LIST_TO_TXT////////////////
       通话功能" LIST_TO_TXT"
 *出口
 * LIST_INDEX ='1'
         桌子
           listtxt = it_xtext
           LISTOBJECT = mem_tab
         例外情况
          EMPTY_LIST = 1
          LIST_INDEX_INVALID = 2
          其他= 3。
       清除f_x。
       循环到it_xtext进入wa_xtext。
         写:/wa_xtext-line。
         写:/'-'。
         f_x = f_x + 1。
         如果f_x = 15。
           出口。
         万一。
       结局。
     万一。


   结局。
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好。

我将从46C转到ECC6,我有更多程序可以读取后台打印文件,有时它们会更改它们。 通常我使用" SUBMIT rspolst2 EXPORTING LIST TO MEMORY",然后调用" LIST_FROM_MEMORY"以获取ABAPLIST。 最后,从这个ABAPLIST中,我从LIST_TO_ASCI中获得一个内部表,直接将ABAPLIST的整个结构放入一个char字段中。 它工作正常。

在46C中,我始终尝试其他两种方法进行最后一步:使用ABPLLIST结构中的SPLIT到分隔符'|'的字符串字段中 并使用FM" LIST_TO_TXT"。 " SPLIT"可以正常工作,而FM" LIST_TO_TXT"可以工作,但是由于所有行都是串联的,因此它不是很有用。

现在,在ECC6中,我必须将unicode标志放在我的Zprogram上,然后,三种方法中的任何一种都不被接受。 我无法从整个结构ABAPLIST传递到字符串字段(或char字段)。

SPLIT仅与RFCRECORD字段一起使用,但是通过这种方式,我丢失了前四个字符。 使用FM HR_KR_XSTRING_TO_STRING的方法相同:我丢失了前四个字符,但是我想得到它们

我该怎么办?

这是一个测试这三种方式的示例程序:" mem_tab"是ABAPLIST,在注释中,我指定了FIRST,SECOND和THIRD METHOD。

在ECC6中,"第一"和"第二"不被接受,我无法激活程序,相反,通过第三种方法,我可以激活它,但是如果我运行它,则会收到" UC_OBJECTS_NOT_CHAR"错误。

------

报告Zmassimiliano NO标准页面标题。


   表格:zmail_spool。


   类型:t_zmspool的开始,
             代理类型为lfa1-lifnr,
             nrspool类型zmail_spool-nrspool,
             rqcretime TYPE zmail_spool-rqcretime,
             rqowner TYPE zmail_spool-rqowner,
             chiave TYPE zmail_spool-chiave,
             note TYPE zmail_spool-note,
             dtultmail类型zmail_spool-dtultmail,
             orultmail TYPE zmail_spool-orultmail,
             utultmail TYPE zmail_spool-utultmail,
          t_zmspool的结尾。


   数据:wa_zmspool TYPE t_zmspool,
         it_zmspool t_zmspool的类型标准表。


 *类型:t_asci的开头,
 *包括abaplist类型,
 * t_asci的结尾。
 类型:tt的开头,
         线(202),
        tt结束。
 数据:abaplist的v_asci类型标准表,
       wa_asci类型abaplist,
       it_xtext tt的标准类型表,
       wa_xtext TYPE tt,
       f_xtext1 TYPE字符串,
       f_xtext2 TYPE字符串。


   数据:abaplist的mem_tab类型标准表,
         wa_tab TYPE线条,
         it_tab类型标准线表,
         尺寸TYPEI。
   数据:f_nrspool类型zmail_spool-nrspool,
         f_numsp(10)TYPE n,
         f_chiave TYPE zmail_spool-chiave,
         wa_tsp01 TYPE tsp01,
         it_tsp01 tsp01的标准类型表,
         f_mt(10)C型,
         f_st(30)C型,
         f_avdipa C型,
         f_agedes(30)C型,
         f_codage(6)C型,
         f_codag(10)N型,
         f_alleg TYPE zmail_def-alleg,
         f_divid(1)C型,
         f_filename TYPE STRING,
         wa_zmail TYPE zmail_spool,
         f_str(200)C型,
         f_x TYPEI。
 * -------------------------------------------------  -------------------
 * SELEZIONI INIZIALI
 * -------------------------------------------------  -------------------


  带有框架标题text-001的块datibase的选择屏幕开始。
    选择屏幕行的开始。
      SELECTION-SCREEN COMMENT(30)文本-usr。
      参数s_user类型zmail_spool-rqowner缺省sy-uname。
    选择屏幕行尾。
    选择屏幕行的开始。
      选择屏幕注释(27)text-dta。
      SELECT_OPTIONS s_data用于zmail_spool-rqcretime。
    选择屏幕行尾。
  SELECT数据库的块结尾。


 * -------------------------------------------------  -------------------
 *选择开始
 * -------------------------------------------------  -------------------


 选择开始。


 * Nella tabella it carico solo gli spool nongiàpresenti
 *在zmail_spool中
   选择* INTO wa_tsp01
     来自tsp01
     rqcretime在s_data中且rqowner = s_user。
 * AND rq0name ='SAP08'。


     f_numsp = wa_tsp01-rqident。
     f_nrspool = f_numsp。
     从zmail_spool中选择单个chiave INTO到f_chiave
       其中nrspool = f_nrspool。
     将wa_tsp01插入表it_tsp01。


 *写:/wa_tsp01-rqident。


     出口。
   ENDSELECT。


   循环到it_tsp01并进入wa_tsp01。
 *写:/'循环',wa_tsp01-rqident。
     提交rspolst2出口清单以存储并返回
       与rqident = wa_tsp01-rqident
       WITH first ='1'。
     通话功能" LIST_FROM_MEMORY"
       桌子
         listobject = mem_tab
       例外情况
         not_found = 1
         其他= 2。
 *写:/'sy-subrc',sy-subrc。
     如果不是mem_tab []是初始的。
       刷新v_asci。
       通话功能" LIST_TO_ASCI"
         桌子
           listasci = v_asci
           listobject = mem_tab
         例外情况
           empty_list = 1
           list_index_invalid = 2
           其他= 3。
       清除f_x。


 */////第一种方法:直接////////////////
       环聊v_asci INTO wa_asci。
         wa_tab-tdline = wa_asci。
         写:/wa_tab-tdline。
         f_x = f_x + 1。
         如果f_x = 15。
           出口。
         万一。
       结局。
       写:/'************************************************'。
 */////第二种方法:通过分割////////////////
       清除f_x。
       环聊v_asci INTO wa_asci。
         分割wa_asci AT'|'
               INTO f_xtext1 f_xtext2。


         写:/f_xtext1。
 *写:/f_xtext2。


         f_x = f_x + 1。
         如果f_x = 15。
           出口。
         万一。
       结局。
       写:/'************************************************'。
 */////第三种方法:LIST_TO_TXT////////////////
       通话功能" LIST_TO_TXT"
 *出口
 * LIST_INDEX ='1'
         桌子
           listtxt = it_xtext
           LISTOBJECT = mem_tab
         例外情况
          EMPTY_LIST = 1
          LIST_INDEX_INVALID = 2
          其他= 3。
       清除f_x。
       循环到it_xtext进入wa_xtext。
         写:/wa_xtext-line。
         写:/'-'。
         f_x = f_x + 1。
         如果f_x = 15。
           出口。
         万一。
       结局。
     万一。


   结局。
 
付费偷看设置
发送
3条回答
SKY徐
1楼-- · 2020-08-25 17:10

对于Unicode,必须将C类型(字符)的变量与X类型(字节)的变量区分开,因为一个" SAP Unicode字符"为2个字节(在Unicode之前没有问题,因为一个字符存储在一个字符中) 字节)。

在您的代码中,使用变量V_ASCI调用LIST_TO_ASCI,变量V_ASCI是ABAPLIST表,其中包含X类型。 您只能使用C类型。

它与LIST_TO_TXT一起使用,因为IT_XTEXT的类型为C。

您应该发布完整的简短转储文件(将TXT压缩),以便我们能够准确了解错误的位置和原因。

hengyuye
2楼-- · 2020-08-25 17:17

+1代表耶琳娜。

我不明白这个问题了。 看起来很复杂。 您能否提出一个包含所有细节的新问题? (和图片,如果可能的话)

代楠1984
3楼-- · 2020-08-25 17:34

为了使其他通过Internet搜索引擎到达此处的人受益,以下函数调用会将ABAP列表从内部格式直接转换为字符串表:

数据mem_tab abaplist的类型标准表。
 DATA list_as_strings TYPE list_string_table。

 通话功能" LIST_TO_ASCI"
   输入
     list_string_ascii = list_as_strings
   桌子
     listobject = mem_tab
   例外情况
     empty_list = 1
     list_index_invalid = 2。
 

因此,最初的发布者已经非常接近已经有了正确的解决方案(假设从那以后SAP尚未更改功能模块的参数)。

一周热门 更多>