2012年11月19日 星期一

ZCL_IM_SHP_TAB_CUST_ITEM



客製DN new tab

METHOD IF_EX_LE_SHP_TAB_CUST_ITEM~ACTIVATE_TAB_PAGE .
  DATA: CHINAORDERTYPE TYPE EKKO-CHINAORDERTYPE.

  FIELD-SYMBOLS: <LS_XLIPS> TYPE LIPSVB.

  CASE IS_LIKP-LFART.
    WHEN 'NL' OR 'NLR'.
      READ TABLE IT_XLIPS ASSIGNING <LS_XLIPS>
                          WITH KEY VBELN = IS_LIKP-VBELN.
      CHECK SY-SUBRC EQ 0.
      SELECT CHINAORDERTYPE INTO CHINAORDERTYPE FROM EKKO
                                 WHERE EBELN EQ <LS_XLIPS>-VGBEL.
        EXIT.
      ENDSELECT.
      IF SY-SUBRC EQ 0.
        CASE CHINAORDERTYPE.
          WHEN '3'.
            IF IS_LIKP-LFART EQ 'NLR'.
              EF_CAPTION = 'Goods Movement Data'.
              EF_POSITION = 11.
              EF_PROGRAM = 'SAPLZM008'.
              EF_DYNPRO = '2000'.
            ENDIF.
          WHEN 'D'.
            EF_CAPTION = 'Goods Movement Data'.
            EF_POSITION = 11.
            EF_PROGRAM = 'SAPLZM008'.
            EF_DYNPRO = '1000'.
        ENDCASE.
      ENDIF.
  ENDCASE.

  EF_CAPTION = 'LED Specification'.
  EF_POSITION = 12.
  EF_PROGRAM = 'SAPLZM008'.
  EF_DYNPRO = '3000'.
ENDMETHOD.

METHOD IF_EX_LE_SHP_TAB_CUST_ITEM~TRANSFER_DATA_TO_SUBSCREEN .
  CASE IS_LIKP-LFART.
    WHEN 'NL' OR 'NLR'.
      CALL FUNCTION 'Z_SHPTAB_ITEM_GR_PUSH'
        EXPORTING
          IM_LIPS     = IS_LIPS
          IM_TRANTYPE = IF_TRTYP.
  ENDCASE.

  CALL FUNCTION 'Z_SHPTAB_ITEM_GR_PUSH'
    EXPORTING
      IM_LIPS     = IS_LIPS
      IM_TRANTYPE = IF_TRTYP
      IM_LIKP     = IS_LIKP
    TABLES
      IT_XLIPS    = IT_XLIPS.
ENDMETHOD.

FUNCTION Z_SHPTAB_ITEM_GR_PUSH.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IM_LIPS) TYPE  LIPS
*"     REFERENCE(IM_TRANTYPE) TYPE  TRTYP
*"     REFERENCE(IM_LIKP) TYPE  LIKP
*"  TABLES
*"      IT_XLIPS TYPE  SHP_LIPS_T OPTIONAL
*"----------------------------------------------------------------------

  LIPS-REFDOCNR = IM_LIPS-REFDOCNR.
  LIPS-REFDOCITEM = IM_LIPS-REFDOCITEM.

  TRANTYPE = IM_TRANTYPE.

  MOVE-CORRESPONDING IM_LIPS TO LIPS.
  MOVE-CORRESPONDING IM_LIKP TO LIKP.
  IT_LIPS[] = IT_XLIPS[].
  IMPORT IT_ZST046 FROM MEMORY ID 'ZST046'.
  FREE MEMORY ID 'ZST046'.

*20101110 BY SM  IF IT_ZST046[] IS INITIAL.
    LOOP AT IT_LIPS INTO WA_LIPSVB.
*20110119 BY SM 找不到DN及ITEM 的才從ZST045讀取
READ TABLE IT_ZST046 WITH KEY POSNR = WA_LIPSVB-POSNR  "因為VL01N進來時不會有DN NO.
                              MATNR = WA_LIPSVB-MATNR. "若該項次有異動料號時也要能判斷正確
*    READ TABLE IT_ZST046 WITH KEY VBELN = WA_LIPSVB-VBELN
*                                  POSNR = WA_LIPSVB-POSNR.
    IF SY-SUBRC = 4.   "找不到的才從ZST045讀取
*20110119 BY SM 若是找不到,有可能是該項次料號異動,該item在IT_ZST046 & ZST046的資料要刪除
*否則會有Double item資料的情形
      DELETE IT_ZST046 WHERE POSNR = WA_LIPSVB-POSNR.
*      MODIFY IT_ZST046.
      DELETE FROM ZST046 WHERE VBELN = WA_LIPSVB-VBELN AND POSNR = WA_LIPSVB-POSNR.
      SELECT *
        INTO CORRESPONDING FIELDS OF IT_ZST046
        FROM ZST045
       WHERE VBELN = WA_LIPSVB-VGBEL
         AND POSNR = WA_LIPSVB-VGPOS
*20101022 BY SM 增加客戶及料號判斷,才可以抓到正確的資料
         AND KUNNR = IM_LIKP-KUNAG
         AND MATNR = WA_LIPSVB-MATNR.
        IT_ZST046-VBELN = WA_LIPSVB-VBELN.
        IT_ZST046-POSNR = WA_LIPSVB-POSNR.
        APPEND IT_ZST046.
      ENDSELECT.
    ENDIF.           " END OF 找不到的才從ZST045讀取
    ENDLOOP.

*20101110  ENDIF.
ENDFUNCTION.

FUNCTION Z_SHPTAB_ITEM_GR_PUSH.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IM_LIPS) TYPE  LIPS
*"     REFERENCE(IM_TRANTYPE) TYPE  TRTYP
*"     REFERENCE(IM_LIKP) TYPE  LIKP
*"  TABLES
*"      IT_XLIPS TYPE  SHP_LIPS_T OPTIONAL
*"----------------------------------------------------------------------

  LIPS-REFDOCNR = IM_LIPS-REFDOCNR.
  LIPS-REFDOCITEM = IM_LIPS-REFDOCITEM.

  TRANTYPE = IM_TRANTYPE.

  MOVE-CORRESPONDING IM_LIPS TO LIPS.
  MOVE-CORRESPONDING IM_LIKP TO LIKP.
  IT_LIPS[] = IT_XLIPS[].
  IMPORT IT_ZST046 FROM MEMORY ID 'ZST046'.
  FREE MEMORY ID 'ZST046'.

*20101110 BY SM  IF IT_ZST046[] IS INITIAL.
    LOOP AT IT_LIPS INTO WA_LIPSVB.
*20110119 BY SM 找不到DN及ITEM 的才從ZST045讀取
READ TABLE IT_ZST046 WITH KEY POSNR = WA_LIPSVB-POSNR  "因為VL01N進來時不會有DN NO.
                              MATNR = WA_LIPSVB-MATNR. "若該項次有異動料號時也要能判斷正確
*    READ TABLE IT_ZST046 WITH KEY VBELN = WA_LIPSVB-VBELN
*                                  POSNR = WA_LIPSVB-POSNR.
    IF SY-SUBRC = 4.   "找不到的才從ZST045讀取
*20110119 BY SM 若是找不到,有可能是該項次料號異動,該item在IT_ZST046 & ZST046的資料要刪除
*否則會有Double item資料的情形
      DELETE IT_ZST046 WHERE POSNR = WA_LIPSVB-POSNR.
*      MODIFY IT_ZST046.
      DELETE FROM ZST046 WHERE VBELN = WA_LIPSVB-VBELN AND POSNR = WA_LIPSVB-POSNR.
      SELECT *
        INTO CORRESPONDING FIELDS OF IT_ZST046
        FROM ZST045
       WHERE VBELN = WA_LIPSVB-VGBEL
         AND POSNR = WA_LIPSVB-VGPOS
*20101022 BY SM 增加客戶及料號判斷,才可以抓到正確的資料
         AND KUNNR = IM_LIKP-KUNAG
         AND MATNR = WA_LIPSVB-MATNR.
        IT_ZST046-VBELN = WA_LIPSVB-VBELN.
        IT_ZST046-POSNR = WA_LIPSVB-POSNR.
        APPEND IT_ZST046.
      ENDSELECT.
    ENDIF.           " END OF 找不到的才從ZST045讀取
    ENDLOOP.

*20101110  ENDIF.
ENDFUNCTION.

method if_ex_le_shp_tab_cust_item~transfer_data_from_subscreen .
*  case cs_likp-lfart.
*  when 'NL' or 'NLR'.
  call function 'Z_SHPTAB_ITEM_GR_POP'
    IMPORTING
      ex_lips = cs_lips.
*  endcase.
endmethod.

function z_shptab_item_gr_pop.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     REFERENCE(EX_LIPS) TYPE  LIPS
*"----------------------------------------------------------------------

*ex_lips-refdocnr = lips-refdocnr.
*ex_lips-refdocitem = lips-refdocitem.
  free memory id 'ZST046'.
  export it_zst046 to memory id 'ZST046'.

endfunction.

 

沒有留言:

張貼留言