如何在ABAP中编写结构?

时间:2015-03-31 11:19:25

标签: data-structures sap abap

如何执行以下操作:

data: ls_header type BAPIMEPOHEADER.
" fill it
write ls_header.

目前我收到错误,因为write无法将复杂类型解析为字符串。是否有一种简单的方法可以让这个代码在abap中运行?

5 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

DATA: g_struct TYPE bapimepoheader.

DO.
  ASSIGN COMPONENT sy-index OF STRUCTURE g_struct TO FIELD-SYMBOL(<f>).
  IF sy-subrc NE 0.
    EXIT.
  ENDIF.
  WRITE: / <f>.
ENDDO.

答案 1 :(得分:1)

也许并不是您所期望的答案:如果您列出每个字段。

这可以通过SE38中的图案遮罩很容易地完成:

  1. 选择写模式: enter image description here
  2. 输入所需的结构: enter image description here
  3. 选择字段 enter image description here 单击“复制”确认

确认并获得

WRITE: bapimepoheader-po_number,
       bapimepoheader-comp_code,
       bapimepoheader-doc_type,
       bapimepoheader-delete_ind,
       bapimepoheader-status,
       bapimepoheader-creat_date,
       bapimepoheader-created_by,
       bapimepoheader-item_intvl,
       bapimepoheader-vendor,
       bapimepoheader-langu,
       bapimepoheader-langu_iso,
       bapimepoheader-pmnttrms,
       bapimepoheader-dscnt1_to,
       bapimepoheader-dscnt2_to,
       bapimepoheader-dscnt3_to,
       bapimepoheader-dsct_pct1,
       bapimepoheader-dsct_pct2,
       bapimepoheader-purch_org,
       bapimepoheader-pur_group,
       bapimepoheader-currency,
       bapimepoheader-currency_iso,
       bapimepoheader-exch_rate,
       bapimepoheader-ex_rate_fx,
       bapimepoheader-doc_date,
       bapimepoheader-vper_start,
       bapimepoheader-vper_end,
       bapimepoheader-warranty,
       bapimepoheader-quotation,
       bapimepoheader-quot_date,
       bapimepoheader-ref_1,
       bapimepoheader-sales_pers,
       bapimepoheader-telephone,
       bapimepoheader-suppl_vend,
       bapimepoheader-customer,
       bapimepoheader-agreement,
       bapimepoheader-gr_message,
       bapimepoheader-suppl_plnt,
       bapimepoheader-incoterms1,
       bapimepoheader-incoterms2,
       bapimepoheader-collect_no,
       bapimepoheader-diff_inv,
       bapimepoheader-our_ref,
       bapimepoheader-logsystem,
       bapimepoheader-subitemint,
       bapimepoheader-po_rel_ind,
       bapimepoheader-rel_status,
       bapimepoheader-vat_cntry,
       bapimepoheader-vat_cntry_iso,
       bapimepoheader-reason_cancel,
       bapimepoheader-reason_code,
       bapimepoheader-retention_type,
       bapimepoheader-retention_percentage,
       bapimepoheader-downpay_type,
       bapimepoheader-downpay_amount,
       bapimepoheader-downpay_percent,
       bapimepoheader-downpay_duedate,
       bapimepoheader-memory,
       bapimepoheader-memorytype,
       bapimepoheader-shiptype,
       bapimepoheader-handoverloc,
       bapimepoheader-shipcond,
       bapimepoheader-incotermsv,
       bapimepoheader-incoterms2l,
       bapimepoheader-incoterms3l.

现在,您可以将bapimepoheader替换为ls_header,并获得该结构所有字段的输出。

也许这不是很优雅,如果结构发生变化,则必须调整报告。但是我喜欢这种方式,因为通常我不需要所有字段,并且可以轻松地选择字段。

答案 2 :(得分:0)

我知道两种方式,一种是程序性的,另一种是oop。 这是程序方法。

  1. 从数据字典表DD03L中选择结构的字段(或者您可能需要的任何其他字段)到本地内部表中。
  2. 将表格循环到工作区域
  3. 检查当前字段是否为单一数据类型,如果是,
  4. 将结构ls_header的组件workarea-fieldname分配给anyfieldsymbol
  5. 写下anyfieldsymbol
  6. 您需要代码吗?

答案 3 :(得分:0)

CL_ABAP_CONTAINER_UTILITIES 类是SAP专门为此引入的。

使用FILL_CONTAINER_C方法以WRITE的方式输出结构:

DATA: ls_header type BAPIMEPOHEADER.

CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
 EXPORTING
  IM_VALUE                = ls_header
 IMPORTING
  EX_CONTAINER            = DATA(container)
 EXCEPTIONS
  ILLEGAL_PARAMETER_TYPE = 1
  others                 = 2.

WRITE container.

答案 4 :(得分:-1)

您可以将结构写入字符串,然后输出字符串。创建相同的方法idoc段。