如何合并两个内表


Backgroud
If there are two internal table. We need assign value for same. The different we will
add it in the other internal table.

1 Demo1

SORT ITAB  BY  COL4  COL7  COL3.

  CLEAR:WA_ITAB.

  LOOP AT  LT_ZTMM132_NEW ASSIGNING <LFS_ZTMM132_NEW>.
     G1_INDEX = sy-tabix .

    READ TABLE  ITAB  INTO WA_ITAB   WITH KEY  COL4 = <LFS_ZTMM132_NEW>-MATNR
                                                   COL7 =  <LFS_ZTMM132_NEW>-LIFNR

                                                      COL3 =  <LFS_ZTMM132_NEW>-WERKS  BINARY SEARCH.



    IF  SY-SUBRC = 0.
      G2_INDEX = sy-tabix .

      IF <LFS_ZTMM132_NEW>-PEINH IS NOT INITIAL.
        WA_ITAB-COL13 =  <LFS_ZTMM132_NEW>-NETPR / <LFS_ZTMM132_NEW>-PEINH.

      ELSE.

        WA_ITAB-COL13 = <LFS_ZTMM132_NEW>-NETPR .

      ENDIF.


            MODIFY   ITAB  INDEX g2_index FROM  WA_ITAB  TRANSPORTING   COL13    .

            DELETE  LT_ZTMM132_NEW INDEX g1_index .



      ENDIF.

      CLEAR: WA_ITAB.


    ENDLOOP.

     loop at itab  ASSIGNING <fs_itab>.


       IF  <fs_itab>-COL13  IS   INITIAL.

        IF <fs_itab>-COL12 IS NOT INITIAL.
          <fs_itab>-COL13 = <fs_itab>-COL12  .
        ELSE.
          IF <fs_itab>-COL11 IS NOT INITIAL.
            <fs_itab>-COL13 = <fs_itab>-COL11  .
          ELSE.

            <fs_itab>-COL13 = <fs_itab>-COL10.
          ENDIF.
        ENDIF.

        endif.


     ENDLOOP.

2 Demo2

sort lt_b by f1.
loop at  lt_a into lw_A.
read table lt_b  transporting no fields 
 with key f1 = lw_a-f1 binnary search.
if sy-subrc = 0.
loop at lt_a into lw_b from sy-tabix.
if lw_b-f1 <> lw_a-f1.
exit.
endif.
lw_c-f1 = lw_a-f1.
lw_c-f2 = lw_a-f2.
lw_c-f3 = lw_b-f3.
append lw_c to lt_c.
endloop.
endif.
endloop.

3 Demo3

  SORT lt_sta BY vbeln.
*描述
  LOOP AT it_vbap.
    w_loop1 = sy-tabix.
    CLEAR: l_flag.
    CLEAR it_alv.
    IF it_vbap-pstyv = 'TAP' OR  it_vbap-pstyv ='ZTP1'.
      CONTINUE.
    ENDIF.
    MOVE-CORRESPONDING it_vbap TO it_alv.
    IF it_vbap-upmat IS INITIAL.
      it_alv-upmat = it_vbap-matnr.
    ENDIF.
*    "取审批状态
*    CALL FUNCTION 'STATUS_TEXT_EDIT'
*      EXPORTING
*        client                  = sy-mandt
*        flg_user_stat           = 'X'
*        objnr                   = it_vbap-objnr
*        only_active             = 'X'
*        spras                   = '1'
*        bypass_buffer           = 'X'
*      IMPORTING
**       ANW_STAT_EXISTING       =
*        e_stsma                 = stsma
**       LINE                    =
*        user_line               = status
**       STONR                   =
*      EXCEPTIONS
*        object_not_found        = 1
*        OTHERS                  = 2.
*    CLEAR:LT_STA,STATUS.
    READ TABLE lt_sta WITH KEY vbeln = it_vbap-vbeln BINARY SEARCH.
    IF sy-subrc = 0.
      status = lt_sta-status.
    ENDIF.
    IF status = 'Z2'.
      it_alv-statu = '已审批'.
    ELSEIF status = 'Z1'.
      it_alv-statu = '未审批'.
    ELSE.
      it_alv-statu = '不批准'.
    ENDIF.

*    过滤审批状态
    IF s_status IS NOT INITIAL.
      IF status <> s_status-low.
        CONTINUE.
      ENDIF.
    ENDIF.

*  审批日期
    IF status EQ 'Z1' OR status EQ 'Z3'.
      it_alv-date  = ''.
    ELSEIF status EQ 'Z2'.
      SELECT objnr stat chgnr udate chind
       INTO TABLE it_jcds
       FROM jcds
       WHERE objnr = it_vbap-objnr
         AND stat  = 'E0002'.
      SORT it_jcds BY chgnr.
      READ TABLE it_jcds  WITH KEY objnr = it_vbap-objnr BINARY SEARCH.
      it_alv-date  = it_jcds-udate.
    ENDIF.

*    过滤审批状态
    IF s_date IS NOT INITIAL.
      IF it_alv-date NOT IN s_date.
        CONTINUE.
      ENDIF.
    ENDIF.


*   取送达方
    READ TABLE it_vbpa WITH KEY  vbeln = it_vbap-vbeln BINARY SEARCH.
    IF sy-subrc = 0.
      it_alv-kunnr2 = it_vbpa-kunnr.
    ENDIF.

    READ TABLE it_vbkd WITH KEY vbeln = it_vbap-vbeln
                                posnr = it_vbap-posnr BINARY SEARCH.

    IF sy-subrc = 0.
      it_alv-sdabw = it_vbkd-sdabw.
      it_alv-bstnk = it_vbkd-bstkd.
    ELSE.
      READ TABLE it_vbkd WITH KEY vbeln = it_vbap-vbeln
                                  posnr = '000000' BINARY SEARCH.
      IF sy-subrc = 0.
        it_alv-sdabw = it_vbkd-sdabw.
        it_alv-bstnk = it_vbkd-bstkd.
      ENDIF.
    ENDIF.


*  begin by zhangg 20151118 获取销售订单表头状态
    READ TABLE it_vbuk WITH KEY  vbeln = it_vbap-vbeln BINARY SEARCH.
    IF sy-subrc = 0.
      it_alv-lfgsk = it_vbuk-lfgsk.
    ENDIF.

*  end by zhangg 20151118 获取销售订单表头状态


*   处理拒绝和确认数量
    IF it_vbap-abgru IS INITIAL.
      READ TABLE it_vbep_col WITH KEY vbeln = it_vbap-vbeln
                                      posnr = it_vbap-posnr BINARY SEARCH.
      IF sy-subrc = 0 .
        it_alv-bmeng = it_vbep_col-bmeng.
      ENDIF.
    ELSE.
      READ TABLE it_lips_col WITH KEY vgbel = it_vbap-vbeln
                                      vgpos = it_vbap-posnr BINARY SEARCH.

      IF sy-subrc = 0.
        it_alv-bmeng = it_lips_col-lfimg."发货量
        it_alv-jjsl = it_vbap-kwmeng - it_lips_col-lfimg."总量-发货量
      ELSE.
        it_alv-jjsl = it_vbap-kwmeng.
      ENDIF.

    ENDIF.

    IF it_alv-kwmeng IS NOT INITIAL .
      it_alv-kzwi1 = it_vbap-kzwi1 / it_alv-kwmeng.
    ENDIF.

*  begin by zhanggh 订单类型为ZMF2时,实际价取成本价
    IF it_alv-auart = 'ZMF2' AND it_alv-kwmeng IS NOT INITIAL .
      it_alv-kzwi1 = it_vbap-wavwr / it_alv-kwmeng.
    ENDIF.
*  end by zhanggh 订单类型为ZMF2时,实际价取成本价


    READ TABLE it_lips WITH KEY vgbel = it_vbap-vbeln
                                vgpos = it_vbap-posnr BINARY SEARCH.
*
    w_loop2 = sy-tabix.
    DO.
      IF sy-subrc <> 0
           OR it_lips-vgbel <> it_vbap-vbeln
           OR  it_lips-vgpos <> it_vbap-posnr .

        EXIT.

      ENDIF.

      it_alv-bolnr = it_lips-bolnr.
      it_alv-vbeln_1 = it_lips-vbeln.
      it_alv-lfimg = it_lips-lfimg.
      it_alv-wadat = it_lips-wadat_ist.
      it_alv-wbsta = it_lips-wbsta.


      READ TABLE it_vbrk WITH KEY vgbel = it_lips-vbeln
                                  vgpos = it_lips-posnr BINARY SEARCH.

      IF sy-subrc = 0.
        it_alv-vbeln_2 = it_vbrk-vbeln."发票号
      ELSE.
        it_alv-vbeln_2 = ''.
      ENDIF.

      READ TABLE it_likp WITH KEY vbeln = it_lips-vbeln BINARY SEARCH.

      IF sy-subrc = 0.
        it_alv-mytxt = it_likp-mytxt."合同号
      ELSE.
        it_alv-mytxt = ''.
      ENDIF.

      l_flag = 'X'.
      APPEND it_alv.
      w_loop2 = w_loop2 + 1.

      READ TABLE it_lips INDEX w_loop2.

    ENDDO.

    IF l_flag = ''.
      APPEND it_alv.
    ENDIF.

    sy-tabix = w_loop1.
  ENDLOOP.

4 Demo4

  LOOP AT  LT_ZTMM132  ASSIGNING  <LFS_ZTMM132>.



    WA_ITAB-COL4 = <LFS_ZTMM132>-MATNR.
    WA_ITAB-COL7 = <LFS_ZTMM132>-LIFNR.
    WA_ITAB-COL3 = <LFS_ZTMM132>-WERKS.


*    WA_ITAB-COL2 = <LFS_ZTMM132>-ZDGJG.
    WA_ITAB-COL6 = <LFS_ZTMM132>-PEINH.

    L_GJAHR = P_GJAHR - <LFS_ZTMM132>-GJAHR .

    IF L_GJAHR  = 3.
      WA_ITAB-COL10 =  <LFS_ZTMM132>-ZDGJG.
    ELSEIF L_GJAHR = 2.
      WA_ITAB-COL11 =  <LFS_ZTMM132>-ZDGJG.
    ELSEIF  L_GJAHR = 1.
      WA_ITAB-COL12 =  <LFS_ZTMM132>-ZDGJG.

    ENDIF.

    AT END OF WERKS.

      APPEND   WA_ITAB TO ITAB.
      CLEAR :WA_ITAB.
    ENDAT.


  ENDLOOP  .
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值