选择屏幕 modif ID

REPORT zmmr0085.
TABLES:
  ekko,ekpo,mkpf,mseg.
TYPES:BEGIN OF ty_po,
        ebeln TYPE ekpo-ebeln,
        ebelp TYPE ekpo-ebelp,
        bsart TYPE ekko-bsart,
        matnr TYPE ekpo-matnr,
        txz01 TYPE ekpo-txz01,
        bednr TYPE ekpo-bednr,
        werks TYPE ekpo-werks,
        lgort TYPE ekpo-lgort,
      END OF ty_po.
DATA:gt_po TYPE STANDARD TABLE OF ty_po.
DATA:gt_mkpf TYPE TABLE OF mkpf,
     gt_mseg TYPE TABLE OF mseg.
DATA:gt_zmmt0060 TYPE STANDARD TABLE OF zmmt0060.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME .
PARAMETERS: p_cbox TYPE AS CHECKBOX USER-COMMAND uc.
SELECT-OPTIONS:s_budat1 FOR mkpf-budat MODIF ID b1 .
SELECT-OPTIONS:s_cpudt FOR mkpf-cpudt MODIF ID b2 OBLIGATORY DEFAULT sy-datum,
               s_cputm FOR mkpf-cputm MODIF ID b2,
               s_ebeln FOR mseg-ebeln MODIF ID b2,
               s_ebelp FOR mseg-ebelp MODIF ID b2,
               s_mblnr FOR mkpf-mblnr MODIF ID b2,
               s_zeile FOR mseg-zeile MODIF ID b2.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    IF p_cbox IS NOT INITIAL.
      IF screen-group1 EQ 'B2'.
        screen-active '0'.
      ENDIF.
      IF screen-group1 EQ 'B1'.
        screen-active '1'.
      ENDIF.
    ELSE.
      IF screen-group1 EQ 'B2'.
        screen-active '1'.
      ENDIF.
      IF screen-group1 EQ 'B1'.
        screen-active '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

START-OF-SELECTION.
  IF p_cbox  IS INITIAL.
    PERFORM frm_get_matdoc.
    PERFORM frm_send_out.
  ELSE.
    PERFORM frm_delete_log.
  ENDIF.

FORM  frm_get_matdoc.
  DATA:lt_zmmt0060 TYPE STANDARD TABLE OF zmmt0060.
  DATA:lt_mseg TYPE STANDARD TABLE OF mseg.

  SELECT * FROM zmmt0060 INTO TABLE lt_zmmt0060
  WHERE cpudt IN s_cpudt
    AND cputm IN s_cputm
    AND mblnr IN s_mblnr
    AND ebeln IN s_ebeln
    AND ebelp IN s_ebelp
    AND zeile IN s_zeile.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_mseg
   FROM mseg INNER JOIN mkpf
   ON mseg~mblnr  = mkpf~mblnr
   WHERE mkpf~cpudt IN s_cpudt
     AND mkpf~cputm IN s_cputm
     AND mkpf~mblnr IN s_mblnr
     AND mseg~ebeln IN s_ebeln
     AND mseg~ebelp IN s_ebelp
     AND mseg~zeile IN s_zeile
     AND mseg~ebeln NE ''
     AND mseg~ebelp NE ''.

*" 前台模式不检查日志表,允许重复下发
  IF sy-batch 'X'.
    SORT  lt_zmmt0060[] BY mblnr zeile.
    LOOP AT gt_mseg[] INTO DATA(ls_mseg).
      READ TABLE lt_zmmt0060 TRANSPORTING NO FIELDS WITH KEY
      mblnr = ls_mseg-mblnr zeile = ls_mseg-zeile BINARY SEARCH.
      IF sy-subrc 0.
        DELETE gt_mseg FROM ls_mseg.
      ENDIF.
    ENDLOOP.
  ENDIF.

  IF gt_mseg[] IS NOT INITIAL.
    REFRESH  lt_mseg.
    lt_mseg[] =  gt_mseg[].
    SORT lt_mseg BY mblnr .
    DELETE ADJACENT DUPLICATES FROM lt_mseg COMPARING   mblnr .
    SELECT * FROM mkpf
    INTO CORRESPONDING FIELDS OF TABLE gt_mkpf
    FOR ALL ENTRIES IN lt_mseg
    WHERE mblnr = lt_mseg-mblnr.

    REFRESH  lt_mseg.
    lt_mseg[] = gt_mseg[].
    SORT lt_mseg BY ebeln ebelp .
    DELETE ADJACENT DUPLICATES FROM lt_mseg COMPARING  ebeln ebelp.
    SELECT b~ebeln  b~ebelp a~bsart  b~matnr  b~txz01  b~bednr b~werks b~lgort
      FROM ekko AS a INNER JOIN ekpo AS b
      ON a~ebeln = b~ebeln
      INTO CORRESPONDING FIELDS OF TABLE gt_po
      FOR ALL ENTRIES IN lt_mseg
      WHERE b~ebeln = lt_mseg-ebeln
        AND b~ebelp = lt_mseg-ebelp
    AND b~loekz = space.
    SORT gt_po BY ebeln ebelp.
  ENDIF.
ENDFORM.

FORM  frm_send_out.
  DATA:lt_mkpf TYPE STANDARD TABLE OF mkpf,
       lt_mseg TYPE STANDARD TABLE OF mseg.
  DATA:ls_po TYPE ty_po.
  DATA:  ls_zwms02 TYPE zwms02.
  LOOP AT gt_mkpf INTO DATA(ls_mkpf).
    REFRESH: lt_mkpf,lt_mseg.
    LOOP AT gt_mseg INTO DATA(ls_msegWHERE  mblnr = ls_mkpf-mblnr.

      CLEAR ls_po.
      READ TABLE gt_po INTO ls_po WITH KEY
        ebeln = ls_mseg-ebeln ebelp = ls_mseg-ebelp BINARY SEARCH.
      CLEAR ls_zwms02.
      CALL FUNCTION 'ZMM_GET_ZWMS02'
        EXPORTING
          iv_werks  = ls_po-werks
          iv_lgort  = ls_po-lgort
*         IV_WMSNO  =
*         IV_OWNER  =
*         IV_ZSTATUS2       =
*         IV_ZZLMS  =
        IMPORTING
          os_zwms02 = ls_zwms02
        EXCEPTIONS
          not_find  1
          OTHERS    2.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      CHECK ( ls_zwms02 IS INITIAL OR ls_po-bednr '一键货权转移'AND ls_po-bsart <> 'Z011'         
AND ls_po-bsart <> 'Z003' AND ls_po-bsart <> 'Z005'        
AND (  ls_mseg-bwart '101'         
OR ls_mseg-bwart '102' OR ls_mseg-bwart '161' ).       

APPEND ls_mseg TO lt_mseg.     
ENDLOOP.     
IF  lt_mseg[] IS NOT INITIAL.       
APPEND ls_mkpf TO lt_mkpf.       

CALL FUNCTION 'ZMM_SEND_MATDOC2VC'         
TABLES           xmkpf 
= lt_mkpf           xmseg 
= lt_mseg.     
ENDIF.     
CLEAR ls_mkpf.   

ENDLOOP.

ENDFORM.

 

posted @ 2019-04-10 11:51  Leath.Shi  阅读(342)  评论(0编辑  收藏  举报