ABAP FAGLL03H增强字段

  1. 增强结构SGLPOS_N_GL_CT,SGLPOS_N_CT:注意两个结构增强的字段名需一致
    在这里插入图片描述
    2.
    2.BADI 实施增强 FAGL_LIB
    在这里插入图片描述
  METHOD if_fagl_lib~select_data.

    TYPES: BEGIN OF ty_data,
             " 前台关联字段
             bukrs   TYPE sglpos_n_ct-bukrs,
             belnr   TYPE sglpos_n_ct-belnr,
             buzei   TYPE sglpos_n_ct-buzei,
             gjahr   TYPE sglpos_n_ct-gjahr,
             ebeln   TYPE sglpos_n_ct-ebeln,
             matnr   TYPE sglpos_n_ct-matnr,

             " 自定义描述字段
             zycxgys TYPE sglpos_n_ct-zycxgys,
             zzgg    TYPE sglpos_n_ct-zzgg,
             zzxh    TYPE sglpos_n_ct-zzxh,
             zzwlms  TYPE sglpos_n_ct-zzwlms,
           END OF ty_data.

    " 容器字段
    FIELD-SYMBOLS: <fs_data>      TYPE any,
                   <fs_cell_data> TYPE any.
    DATA: ls_component LIKE LINE OF it_component.
    DATA: lr_data            TYPE REF TO data,
          lo_descr           TYPE REF TO cl_abap_typedescr,
          lo_str_descr_in    TYPE REF TO cl_abap_structdescr,
          ls_abap_comp_descr TYPE abap_compdescr.

    " 前台关联字段
    DATA: lv_bukrs TYPE sglpos_n_ct-bukrs,
          lv_belnr TYPE sglpos_n_ct-belnr,
          lv_buzei TYPE sglpos_n_ct-buzei,
          lv_gjahr TYPE sglpos_n_ct-gjahr,
          lv_ebeln TYPE sglpos_n_ct-ebeln,
          lv_matnr TYPE sglpos_n_ct-matnr.

    " 自定义描述字段
    DATA: lv_zgysx TYPE c.

    DATA: lt_data TYPE TABLE OF ty_data.

*&--获取ct_data的表结构
    CREATE DATA lr_data LIKE LINE OF ct_data.
    ASSIGN lr_data->* TO <fs_data>.

* Get structure description of data table
    CALL METHOD cl_abap_structdescr=>describe_by_data
      EXPORTING
        p_data      = <fs_data>
      RECEIVING
        p_descr_ref = lo_descr.

    lo_str_descr_in ?= lo_descr.

*    LOOP AT lo_str_descr_in->components INTO ls_abap_comp_descr.
*      CASE ls_abap_comp_descr-name.
*        WHEN 'ZZYCXGYS'.
*          lv_zgysx = 'X'.
*        WHEN OTHERS.
*          CONTINUE.
*      ENDCASE.
*    ENDLOOP.

*&--获取前台关联字段以查询自定义字段
    MOVE-CORRESPONDING ct_data TO lt_data.

    WITH +tab AS ( SELECT DISTINCT bukrs,belnr,buzei,gjahr FROM @lt_data AS h )
    SELECT a~bukrs,a~belnr,a~buzei,a~gjahr,c~name1
      FROM +tab AS a
      JOIN mseg AS b ON a~bukrs = b~bukrs AND a~belnr = b~belnr
                    AND a~buzei = b~buzei AND a~gjahr = b~gjahr
      JOIN lfa1 AS c ON b~lifnr = c~lifnr
      INTO TABLE @DATA(lt_mseg).
    SORT lt_mseg BY bukrs belnr buzei gjahr.

    WITH +tab AS ( SELECT DISTINCT ebeln FROM @lt_data AS h )
    SELECT a~ebeln,c~name1
      FROM +tab AS a
      JOIN ekko AS b ON a~ebeln = b~ebeln
      JOIN lfa1 AS c ON b~lifnr = c~lifnr
      INTO TABLE @DATA(lt_ekko).
    SORT lt_ekko BY ebeln.

    WITH +tab AS ( SELECT DISTINCT ebeln FROM @lt_data AS h )
    SELECT a~ebeln,c~name1
      FROM +tab AS a
      JOIN ekko AS b ON a~ebeln = b~ebeln
      JOIN adrc AS c ON b~adrnr = c~addrnumber
      INTO TABLE @DATA(lt_ekko2).
    SORT lt_ekko2 BY ebeln.

    WITH +tab AS ( SELECT DISTINCT matnr FROM @lt_data AS h )
    SELECT a~matnr,b~zzgg,b~zzxh,b~zzwlms
      FROM +tab AS a
      JOIN ztmara AS b ON a~matnr = b~matnr
      INTO TABLE @DATA(lt_ztmara).
    SORT lt_ztmara BY matnr.

*&-- 循环ct_data给自定义字段赋值
    LOOP AT ct_data ASSIGNING <fs_data>.

      " 获取前台关键字段
      LOOP AT lo_str_descr_in->components INTO ls_abap_comp_descr.

        " 根据字段名找到字段
        ASSIGN COMPONENT ls_abap_comp_descr-name OF STRUCTURE <fs_data> TO <fs_cell_data>.
        CASE ls_abap_comp_descr-name.
          WHEN 'BUKRS'.
            lv_bukrs = <fs_cell_data>.
          WHEN 'BELNR'.
            lv_belnr = <fs_cell_data>.
          WHEN 'BUZEI'.
            lv_buzei = <fs_cell_data>.
          WHEN 'GJAHR'.
            lv_gjahr = <fs_cell_data>.
          WHEN 'EBELN'.
            lv_ebeln = <fs_cell_data>.
          WHEN 'MATNR'.
            lv_matnr = <fs_cell_data>.
          WHEN OTHERS.
            CONTINUE.
        ENDCASE.

      ENDLOOP.

      "实际供应商名称
      READ TABLE lt_mseg INTO DATA(ls_mseg) WITH KEY bukrs = lv_bukrs belnr = lv_belnr
                                                     buzei = lv_buzei gjahr = lv_gjahr BINARY SEARCH.
      IF sy-subrc = 0.

        ASSIGN COMPONENT 'ZZYCXGYS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
        IF <fs_cell_data> IS ASSIGNED.
          <fs_cell_data> = ls_mseg-name1.
        ENDIF.

      ELSE.

        READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = lv_ebeln BINARY SEARCH.
        IF sy-subrc = 0.

          ASSIGN COMPONENT 'ZZYCXGYS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
          IF <fs_cell_data> IS ASSIGNED.
            <fs_cell_data> = ls_ekko-name1.
            UNASSIGN <fs_cell_data>.
          ENDIF.

        ELSE.

          READ TABLE lt_ekko2 INTO DATA(ls_ekko2) WITH KEY ebeln = lv_ebeln BINARY SEARCH.
          IF sy-subrc = 0.
            ASSIGN COMPONENT 'ZZYCXGYS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
            IF <fs_cell_data> IS ASSIGNED.
              <fs_cell_data> = ls_ekko2-name1.
              UNASSIGN <fs_cell_data>.
            ENDIF.
          ENDIF.

        ENDIF.
      ENDIF.

      "物料相关增强字段
      READ TABLE lt_ztmara INTO DATA(ls_ztmara) WITH KEY matnr = lv_matnr BINARY SEARCH.
      IF sy-subrc = 0.
        ASSIGN COMPONENT 'ZZXH' OF STRUCTURE <fs_data> TO <fs_cell_data>.
        IF <fs_cell_data> IS ASSIGNED.
          <fs_cell_data> = ls_ztmara-zzxh.
          UNASSIGN <fs_cell_data>.
        ENDIF.

        ASSIGN COMPONENT 'ZZGG' OF STRUCTURE <fs_data> TO <fs_cell_data>.
        IF <fs_cell_data> IS ASSIGNED.
          <fs_cell_data> = ls_ztmara-zzgg.
          UNASSIGN <fs_cell_data>.
        ENDIF.

        ASSIGN COMPONENT 'ZZWLMS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
        IF <fs_cell_data> IS ASSIGNED.
          <fs_cell_data> = ls_ztmara-zzwlms.
          UNASSIGN <fs_cell_data>.
        ENDIF.
      ENDIF.

    ENDLOOP.

  ENDMETHOD.

3.上面增强做完之后需要执行事务码 HDBVIEWS 重新激活视图,每个CLIENT都需要重新激活
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值