动态内表

复制代码
DATA: l_table TYPE REF TO data.
  data: lv_tab  TYPE DDOBJNAME.
  DATA: l_wa    TYPE REF TO data.
  data: lt_STRUCTURE TYPE STANDARD TABLE OF DFIES,
        LS_VALUE     TYPE TY_VALUE,
        LT_VALUE     TYPE STANDARD TABLE OF TY_VALUE,
        LT_VALUE_GET TYPE STANDARD TABLE OF ZTYHRS_XML2T WITH HEADER LINE,
        LV_STATUS    TYPE STRING,
        ls_STRUCTURE TYPE DFIES.

  FIELD-SYMBOLS: <l_table> TYPE table,
                 <L_VALUE> TYPE ANY,
                 <l_wa>    TYPE any,
                 <l_pernr>   TYPE any,
                 <l_begda>   TYPE any.
  data: lv_tabname TYPE char20,
        LV_NUM TYPE NUMC3,
        lv_hs  TYPE numc5,
        LV_STRING TYPE STRING,
         LV_FIELDVALUE TYPE CHAR50.
  CONCATENATE 'P' IV_INFTY INTO lv_tabname.
  CONCATENATE 'PA' IV_INFTY INTO lv_tab.

  CREATE DATA l_table TYPE TABLE OF (lv_tabname).
*  创建动态内表
  ASSIGN l_table->* TO <l_table>.

*  创建动态工作区结构
  CREATE DATA l_wa LIKE LINE OF <l_table>.

*  创建动态工作区
  ASSIGN l_wa->* TO <l_wa>.

  IF IV_INFTY = '0022'.
    SELECT * INTO TABLE IT_Q3529
      FROM PA3529 WHERE PERNR = iv_pernr.
  ENDIF.

*--信息类型0016中的 3211需要单独取出
  IF IV_INFTY = '0016'.
    SELECT * INTO TABLE IT_p3211
      FROM PA3211 WHERE PERNR = iv_pernr.
  ENDIF.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE <l_table>
    FROM  (lv_tab)  WHERE pernr = iv_pernr.

  CHECK <l_table> IS NOT INITIAL.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      TABNAME              = lv_tab
    TABLES
      DFIES_TAB            = lt_STRUCTURE
    EXCEPTIONS
      NOT_FOUND            = 1
      INTERNAL_ERROR       = 2
      OTHERS               = 3.

  DELETE lt_STRUCTURE INDEX 1.
  LOOP AT <l_table> ASSIGNING <l_wa>.
   lv_hs = lv_hs + 1.
   LOOP AT lt_STRUCTURE INTO ls_STRUCTURE.
       LV_NUM = LV_NUM + 1.
       CONCATENATE '<l_WA>-'  ls_STRUCTURE-FIELDNAME INTO LV_FIELDVALUE.
       ASSIGN (LV_FIELDVALUE) TO <L_VALUE>.
       IF <L_VALUE> IS ASSIGNED.
         LS_VALUE-HS       = lv_hs.
         LS_VALUE-VALUE    = <L_VALUE>.
         LS_VALUE-FIELDNUM = LV_NUM.
         CONDENSE LS_VALUE-VALUE NO-GAPS.
         APPEND LS_VALUE TO LT_VALUE.
         CLEAR LS_VALUE.
         UNASSIGN <l_value>.
       ENDIF.
   ENDLOOP.
   CLEAR LV_NUM.
  ENDLOOP.
复制代码

 

posted @   年轻的小菜鸟  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示