SAP盘点清册及打印


*&---------------------------------------------------------------------*

*& Report ZMMR031
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr031.
TABLES t001l  mard  mslb ,msku ,marc .

INCLUDE zmmf031_top.
INCLUDE zmmf031_scr.
INCLUDE zmmf031_frm.




START-OF-SELECTION .
  "月度 年终
  IF r_1 EQ 'X' OR r_2 EQ 'X' .
    PERFORMfrm_get_data."获取数据
    PERFORMfrm_process_data."处理数据.
    PERFORM  frm_display_data .
  ENDIF .

  "仓管员
  IF r_5 EQ 'X' OR r_5A EQ 'X' " 按仓管员代码
    PERFORMfrm_get_data5."获取数据
    PERFORMfrm_process_data5."处理数据.
    PERFORM  frm_display_data5 .
  ENDIF .


  " 供应商

  IF r_3 EQ 'X' .
    PERFORMfrm_get_data2."获取数据
    PERFORMfrm_process_data2."处理数据.
    PERFORM  frm_display_data2 .
  ENDIF .

  "客户
  IF r_4 EQ 'X' .
    PERFORMfrm_get_data3."获取数据
    PERFORMfrm_process_data3."处理数据.
    PERFORM  frm_display_data3 .

  ENDIF .

*&---------------------------------------------------------------------*
*& 包含               ZMMF031_TOP
*&---------------------------------------------------------------------*



DATABEGIN OF gs_mard ,
        matnr LIKE mard-matnr,
        bismt LIKE mara-bismt,
        zznme LIKE zmmt002-zznme,
        maktx LIKE makt-maktx,
        meins LIKE mara-meins,
        werks LIKE mard-werks,
        lgort LIKE mard-lgort,
        lgobe LIKE t001l-lgobe,
        labst LIKE mard-labst,  " 非限制使用库存
        speme LIKE mard-speme,  "冻结库存
        loggr LIKE marc-loggr,


      END OF gs_mard .





DATAgt_mard LIKE  TABLE OF gs_mard .



DATABEGIN OF gs_mchb ,
        matnr LIKE mchb-matnr,
        bismt LIKE mara-bismt,
        zznme LIKE zmmt002-zznme,
        maktx LIKE makt-maktx,
        meins LIKE mara-meins,
        werks LIKE mchb-werks,
        lgort LIKE mchb-lgort,
        lgobe LIKE t001l-lgobe,
        clabs LIKE mchb-clabs"非限制
        cspem LIKE mchb-cspem" 冻结
        loggr LIKE marc-loggr,
        charg LIKE mchb-charg,

      END OF gs_mchb .

DATAgt_mchb LIKE TABLE OF gs_mchb .



DATABEGIN OF gs_out ,
        matnr LIKE mard-matnr,
        bismt LIKE mara-bismt,
        zznme LIKE zmmt002-zznme,
        maktx LIKE makt-maktx,
        meins LIKE mara-meins,
        werks LIKE mard-werks,
        lgort LIKE mard-lgort,
        lgobe LIKE t001l-lgobe,
        labst LIKE mard-labst,  " 非限制使用库存
        speme LIKE mard-speme,
        loggr LIKE marc-loggr,
        charg LIKE mchb-charg,
        zxh   TYPE i,
        mark ,
      END OF gs_out .

DATAgt_out LIKE  TABLE OF gs_out .







DATABEGIN OF gs_mslb ," 供应商外包库存
        lifnr     LIKE mslb-lifnr,
        matnr     LIKE  mslb-matnr,
        bismt     LIKE mara-bismt " 旧料号
        zznme     LIKE   zmmt002-zznme,
        maktx     LIKE makt-maktx,
        meins     LIKE mara-meins,
        charg     LIKE mslb-charg,
        lblab     LIKE mslb-lblab,
        name_org4 LIKE but000-name_org4,
        zxh       TYPE i,
        mark,
      END OF gs_mslb .



DATAgt_mslb LIKE TABLE OF gs_mslb .


DATABEGIN OF gs_msku ," 客户库存
        kunnr    LIKE msku-kunnr,
        matnr    LIKE  msku-matnr,
        bismt    LIKE mara-bismt,
        zznme    LIKE   zmmt002-zznme,
        maktx    LIKE makt-maktx,
        meins    LIKE mara-meins,
        charg    LIKE msku-charg,
        kulab    LIKE msku-kulab,
        bu_sort1 LIKE but000-bu_sort1,
        zxh      TYPE i,
        mark,
      END OF gs_msku .


DATAgt_msku LIKE TABLE OF gs_msku .



DATAgt_fieldcat TYPE TABLE OF  slis_fieldcat_alv.
DATAgs_fieldcat TYPE slis_fieldcat_alv.
DATAgs_layout TYPE slis_layout_alv .


DATAg_fm_name TYPE rs38l_fnam.
DATAgw_options TYPE ssfcompop,
      gw_control TYPE ssfctrlop.



*&---------------------------------------------------------------------*
*& 包含               ZMMF031_SCR
*&---------------------------------------------------------------------*
SELECT-OPTIONS:  s_werks FOR  t001l-werks OBLIGATORY ,
                 s_lgort FOR  t001l-lgort ,
                 s_matnr FOR  mard-matnr ,
                 s_lifnr FOR mslb-lifnr ,
                 s_kunnr FOR  msku-kunnr ,
                 s_loggr FOR  marc-loggr .



PARAMETERS r_1 RADIOBUTTON GROUP g1 .
PARAMETERS r_5 RADIOBUTTON GROUP g1 .
PARAMETERS r_2 RADIOBUTTON GROUP g1 .
PARAMETERS r_5a RADIOBUTTON GROUP g1 .
PARAMETERS r_3 RADIOBUTTON GROUP g1 .
PARAMETERS r_4 RADIOBUTTON GROUP g1 .



*&---------------------------------------------------------------------*
*& 包含               ZMMF031_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .
  SELECT
 a~matnr
 d~bismt
 e~zznme
 b~maktx
 d~meins
 a~werks
 a~lgort
 c~lgobe
 a~labst   " 非限制使用库存
 a~speme  "冻结
 f~loggr

INTO TABLE gt_mard
FROM mard AS a
INNER JOIN  makt AS b  ON a~matnr b~matnr
INNER JOIN t001l AS c  ON  a~werks c~werks AND  a~lgort c~lgort
INNER JOIN mara  AS d  ON a~matnr d~matnr
INNER JOIN zmmt002 AS ON a~matnr e~matnr
INNER JOIN marc AS ON a~matnr f~matnr AND a~werks f~werks
 WHERE a~lgort IN s_lgort
 AND c~werks EQ  s_werks-low
 AND a~matnr IN s_matnr
 AND f~loggr IN s_loggr .


  IF gt_mard IS NOT INITIAL .
    SELECT
     a~matnr
     d~bismt
      e~zznme
     b~maktx
     d~meins
     a~werks
     a~lgort
     c~lgobe
     a~clabs  "非限制库存
     a~cspem " 冻结
     f~loggr
     a~charg  "评估类


     INTO TABLE gt_mchb
      FROM mchb AS a
      INNER JOIN makt AS b  ON a~matnr b~matnr
      INNER JOIN t001l AS c  ON  a~werks  c~werks  AND a~lgort c~lgort
      INNER JOIN mara  AS ON a~matnr d~matnr
      INNER JOIN zmmt002 AS ON a~matnr e~matnr
      INNER JOIN marc AS ON a~matnr f~matnr
      FOR ALL ENTRIES IN gt_mard
      WHERE a~matnr gt_mard-matnr
      AND a~lgort gt_mard-lgort
      AND f~loggr IN s_loggr
      AND a~werks EQ  s_werks-low  .

  ENDIF.




ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data .

  SORT  gt_mchb BY matnr werks  lgort .


  DATA lv_tabix TYPE sy-tabix .
  LOOP AT gt_mard INTO gs_mard .
    CLEAR lv_tabix .
    lv_tabix =  sy-tabix  .
    " 如果有批次从表中去除
    READ TABLE gt_mchb WITH KEY matnr gs_mard-matnr
                                werks gs_mard-werks
                                lgort gs_mard-lgort
                        BINARY SEARCH
                       TRANSPORTING NO FIELDS .
    IF sy-subrc EQ   .
      DELETE gt_mard INDEX lv_tabix .
    ENDIF .

  ENDLOOP .

  CLEAR gs_mard .


  LOOP AT gt_mard INTO gs_mard  .
    APPEND  gs_mard  TO gt_out .
  ENDLOOP .

  " 把带批次的放入GT_oUT

  LOOP AT gt_mchb INTO gs_mchb.

    APPEND gs_mchb  TO gt_out .
  ENDLOOP .


  " 去0库存
  DELETE gt_out WHERE labst EQ .

  DATAlv_i TYPE .
  DATAlv_lgort LIKE mard-lgort.
  lv_i .
  " 加上序号 转换 小数点
  SORT gt_out BY   lgort matnr .
  LOOP AT gt_out INTO gs_out .
    IF lv_lgort IS INITIAL OR lv_lgort <> gs_out-lgort .
      lv_i =  .
    ENDIF .
    lv_i lv_i + .
    gs_out-zxh lv_i .
    gs_out-labst gs_out-labst + gs_out-speme .
    MODIFY gt_out FROM gs_out .
    lv_lgort gs_out-lgort .
    CLEAR gs_out .
  ENDLOOP .


  SORT gt_out BY lgort zxh.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .
  DEFINE append_field.
    gs_fieldcat-fieldname &1.
    gs_fieldcat-seltext_l &2.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEARgs_fieldcat.
  END-OF-DEFINITION.

  append_field'ZXH' '序号' .
  append_field'MATNR' '物料编号' .
  append_field'ZZNME' '物料名称' .
  append_field'MAKTX' '物料描述' .
  append_field'CHARG' '评估类别' .
  append_field'LABST' '数量'.
  append_field'MEINS' '单位' .
  append_field'LGORT' '仓库代码' .
  append_field'LGOBE' '仓储地点' .
  append_field'LOGGR' '仓管员代码' .


  gs_layout-box_fieldname 'MARK'.
  gs_layout-colwidth_optimize 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      i_callback_pf_status_set 'FRM_STATUS_SET'
      i_callback_user_command  'FRM_USER_COMMAND'
*
*     I_GRID_SETTINGS          =
      is_layout                gs_layout
      it_fieldcat              gt_fieldcat
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 gt_out
    EXCEPTIONS
      program_error            1
      OTHERS                   2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM .


FORM frm_status_set USING ut_extab TYPE slis_t_extab.
  SET PF-STATUS 'PF_001'.
ENDFORM.



FORM frm_user_command USING uv_ucomm LIKE sy-ucomm
                          us_selfield TYPE slis_selfield.



  IF  sy-ucomm EQ 'PRINT' .

    IF r_1 EQ 'X' .
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           'ZMMF031'
        IMPORTING
          fm_name            g_fm_name
        EXCEPTIONS
          no_form            1
          no_function_module 2
          OTHERS             3.
    ENDIF .

    IF r_2 EQ 'X' .
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           'ZMMF031A'
        IMPORTING
          fm_name            g_fm_name
        EXCEPTIONS
          no_form            1
          no_function_module 2
          OTHERS             3.
    ENDIF .

    gw_options-tdnewid 'X'.    "New Spool
    gw_options-tdimmed 'X'.
    gw_options-tddelete 'X'.    "Delete Spool After Print
    gw_options-tdfinal 'X'.
    gw_options-tdiexit 'X'.    "Exit after printing in print preview
    gw_options-tddest 'LP01'.

*    gw_control-no_dialog = 'X'.
    gw_control-preview   'X'.
    gw_control-no_open   'X'.
    gw_control-no_close  'X'.
    CALL FUNCTION 'SSF_OPEN'    "打开打印窗口
      EXPORTING
        control_parameters gw_control
        output_options     gw_options
        user_settings      ''
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.


    DATAlt_out LIKE TABLE OF gs_out .
    DATAls_out LIKE gs_out .
    DATAlt_out2 LIKE TABLE OF gs_out .
    lt_out gt_out .
    DELETE lt_out WHERE mark <> 'X'.
    SORT lt_out BY lgort .
    DELETE ADJACENT DUPLICATES FROM  lt_out COMPARING lgort.


    LOOP  AT  lt_out  INTO ls_out  .
      LOOP AT gt_out INTO gs_out WHERE mark EQ 'X'.
        IF gs_out-lgort EQ ls_out-lgort.
          APPEND gs_out TO lt_out2 .
        ENDIF .
      ENDLOOP .


      CALL FUNCTION g_fm_name
        EXPORTING
          control_parameters gw_control
          output_options     gw_options
*         is_bkpf            = gs_bkpf
*    IMPORTING
*         job_output_info    = l_end
*         job_output_options = l_start
        TABLES
          it_out             lt_out2
*         it_bkpf            = lt_bkpf
        EXCEPTIONS
          formatting_error   1
          internal_error     2
          send_error         3
          user_canceled      4
          OTHERS             5.
      CLEARlt_out2[] .

    ENDLOOP .

    CALL FUNCTION 'SSF_CLOSE'
      EXCEPTIONS
        formatting_error 1
        internal_error   2
        send_error       3
        OTHERS           4.


  ENDIF.


ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data2 .



  " 供应商外包库存
  SELECT
    a~lifnr
    a~matnr
    d~bismt
    b~zznme
    c~maktx
    d~meins
    a~charg
    a~lblab  " 数量
    e~name_org4
    INTO TABLE gt_mslb
    FROM mslb AS a
    JOIN zmmt002 AS ON a~matnr b~matnr
    JOIN makt AS ON a~matnr c~matnr
    JOIN mara AS ON a~matnr d~matnr
    JOIN but000  AS ON a~lifnr e~partner
    WHERE lifnr IN s_lifnr .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data2 .

  SORT   gt_mslb BY lifnr .
  DATAlv_i TYPE .
  lv_i .
  DELETE gt_mslb WHERE lblab EQ  .

  LOOP  AT gt_mslb INTO gs_mslb .
    lv_i lv_i + .
    gs_mslb-zxh lv_i .
    MODIFY gt_mslb FROM gs_mslb .
    AT END OF lifnr .
      lv_i .
    ENDAT.
  ENDLOOP .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data2 .

  DEFINE append_field.
    gs_fieldcat-fieldname &1.
    gs_fieldcat-seltext_l &2.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEARgs_fieldcat.
  END-OF-DEFINITION.

  append_field'ZXH' '序号' .
  append_field'MATNR' '物料编号' .
  append_field'BISMT' '旧料号' .
  append_field'ZZNME' '物料名称' .
  append_field'MAKTX' '物料描述' .
  append_field'CHARG' '评估类别' .
  append_field'LBLAB' '数量'.
  append_field'MEINS' '单位' .
  append_field'LIFNR' '供应商代码' .
  append_field'NAME_ORG4' '供应商简称' .

  gs_layout-box_fieldname 'MARK'.
  gs_layout-colwidth_optimize 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      i_callback_pf_status_set 'FRM_STATUS_SET2'
      i_callback_user_command  'FRM_USER_COMMAND2'
*
*     I_GRID_SETTINGS          =
      is_layout                gs_layout
      it_fieldcat              gt_fieldcat
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 gt_mslb
    EXCEPTIONS
      program_error            1
      OTHERS                   2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM .

FORM frm_status_set2 USING ut_extab TYPE slis_t_extab.
  SET PF-STATUS 'PF_001'.
ENDFORM.


FORM frm_user_command2 USING uv_ucomm LIKE sy-ucomm
                          us_selfield TYPE slis_selfield.



  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           'ZMMF031B'
    IMPORTING
      fm_name            g_fm_name
    EXCEPTIONS
      no_form            1
      no_function_module 2
      OTHERS             3.


  gw_options-tdnewid 'X'.    "New Spool
  gw_options-tdimmed 'X'.
  gw_options-tddelete 'X'.    "Delete Spool After Print
  gw_options-tdfinal 'X'.
  gw_options-tdiexit 'X'.    "Exit after printing in print preview
  gw_options-tddest 'LP01'.

*    gw_control-no_dialog = 'X'.
  gw_control-preview   'X'.
  gw_control-no_open   'X'.
  gw_control-no_close  'X'.
  CALL FUNCTION 'SSF_OPEN'    "打开打印窗口
    EXPORTING
      control_parameters gw_control
      output_options     gw_options
      user_settings      ''
    EXCEPTIONS
      formatting_error   1
      internal_error     2
      send_error         3
      user_canceled      4
      OTHERS             5.


  DATAlt_mslb LIKE TABLE OF gs_mslb .
  DATAls_mslb LIKE gs_mslb .
  DATAlt_mslb2 LIKE TABLE OF gs_mslb .
  lt_mslb gt_mslb .
  DELETE lt_mslb WHERE mark <> 'X'.
  SORT lt_mslb BY lifnr .
  DELETE ADJACENT DUPLICATES FROM  lt_mslb COMPARING lifnr.


  LOOP  AT  lt_mslb  INTO ls_mslb .
    LOOP AT gt_mslb INTO gs_mslb WHERE mark EQ 'X'.
      IF gs_mslb-lifnr EQ ls_mslb-lifnr.
        APPEND gs_mslb TO lt_mslb2  .
      ENDIF .
    ENDLOOP .


    CALL FUNCTION g_fm_name
      EXPORTING
        control_parameters gw_control
        output_options     gw_options
*       is_bkpf            = gs_bkpf
*    IMPORTING
*       job_output_info    = l_end
*       job_output_options = l_start
      TABLES
        it_out             lt_mslb2
*       it_bkpf            = lt_bkpf
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.
    CLEARlt_mslb2[] .

  ENDLOOP .

  CALL FUNCTION 'SSF_CLOSE'
    EXCEPTIONS
      formatting_error 1
      internal_error   2
      send_error       3
      OTHERS           4.




ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA3
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data3 .



  " 供应商外包库存
  SELECT
    a~kunnr
    a~matnr
    d~bismt
    b~zznme
    c~maktx
    d~meins
    a~charg
    a~kulab   " 数量
    e~bu_sort1
    INTO TABLE gt_msku
    FROM msku AS a
    JOIN zmmt002 AS ON a~matnr b~matnr
    JOIN makt AS ON a~matnr c~matnr
    JOIN mara AS ON a~matnr d~matnr
    JOIN but000  AS ON a~kunnr e~partner
    WHERE a~kunnr IN s_kunnr .





ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA3
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data3 .



  SORT   gt_msku  BY  kunnr .
  DATAlv_i TYPE .
  lv_i .
  "删除0库存
  DELETE gt_msku WHERE kulab EQ .

  " 加序号
  LOOP  AT  gt_msku INTO  gs_msku .
    lv_i lv_i + .
    gs_msku-zxh lv_i .
    MODIFY gt_msku FROM gs_msku .
    AT END OF  kunnr .
      lv_i .
    ENDAT.
  ENDLOOP .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA3
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data3 .




  DEFINE append_field.
    gs_fieldcat-fieldname &1.
    gs_fieldcat-seltext_l &2.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEARgs_fieldcat.
  END-OF-DEFINITION.

  append_field'ZXH' '序号' .
  append_field'MATNR' '物料编号' .
  append_field'ZZNME' '物料名称' .
  append_field'MAKTX' '物料描述' .
  append_field'CHARG' '评估类别' .
  append_field'KULAB' '数量'.
  append_field'MEINS' '单位' .
  append_field'KUNNR' '客户代码' .
  append_field'BU_SORT1' '客户简称' .

  gs_layout-box_fieldname 'MARK'.
  gs_layout-colwidth_optimize 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      i_callback_pf_status_set 'FRM_STATUS_SET3'
      i_callback_user_command  'FRM_USER_COMMAND3'
*
*     I_GRID_SETTINGS          =
      is_layout                gs_layout
      it_fieldcat              gt_fieldcat
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 gt_msku
    EXCEPTIONS
      program_error            1
      OTHERS                   2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM .

FORM frm_status_set3 USING ut_extab TYPE slis_t_extab.
  SET PF-STATUS 'PF_001'.
ENDFORM.


FORM frm_user_command3 USING uv_ucomm LIKE sy-ucomm
                          us_selfield TYPE slis_selfield.



  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           'ZMMF031C'
    IMPORTING
      fm_name            g_fm_name
    EXCEPTIONS
      no_form            1
      no_function_module 2
      OTHERS             3.


  gw_options-tdnewid 'X'.    "New Spool
  gw_options-tdimmed 'X'.
  gw_options-tddelete 'X'.    "Delete Spool After Print
  gw_options-tdfinal 'X'.
  gw_options-tdiexit 'X'.    "Exit after printing in print preview
  gw_options-tddest 'LP01'.

*    gw_control-no_dialog = 'X'.
  gw_control-preview   'X'.
  gw_control-no_open   'X'.
  gw_control-no_close  'X'.
  CALL FUNCTION 'SSF_OPEN'    "打开打印窗口
    EXPORTING
      control_parameters gw_control
      output_options     gw_options
      user_settings      ''
    EXCEPTIONS
      formatting_error   1
      internal_error     2
      send_error         3
      user_canceled      4
      OTHERS             5.

  DATAlt_msku LIKE TABLE OF gs_msku .
  DATAls_msku LIKE gs_msku .
  DATAlt_msku2 LIKE TABLE OF gs_msku .
  lt_msku gt_msku .
  DELETE lt_msku WHERE mark <> 'X'.
  SORT lt_msku BY kunnr.
  DELETE ADJACENT DUPLICATES FROM  lt_msku COMPARING kunnr.


  LOOP  AT  lt_msku  INTO ls_msku .
    LOOP AT gt_msku INTO gs_msku WHERE mark EQ 'X'.
      IF gs_msku-kunnr EQ ls_msku-kunnr.
        APPEND gs_msku TO lt_msku2  .
      ENDIF .
    ENDLOOP .


    CALL FUNCTION g_fm_name
      EXPORTING
        control_parameters gw_control
        output_options     gw_options
*       is_bkpf            = gs_bkpf
*    IMPORTING
*       job_output_info    = l_end
*       job_output_options = l_start
      TABLES
        it_out             lt_msku2
*       it_bkpf            = lt_bkpf
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.
    CLEARlt_msku2[] .

  ENDLOOP .

  CALL FUNCTION 'SSF_CLOSE'
    EXCEPTIONS
      formatting_error 1
      internal_error   2
      send_error       3
      OTHERS           4.




ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data5 .
  SELECT
 a~matnr
 d~bismt
 e~zznme
 b~maktx
 d~meins
 a~werks
 a~lgort
 c~lgobe
 a~labst   " 非限制使用库存
 a~speme
 f~loggr " 仓管员代码

INTO TABLE gt_mard
FROM mard AS a
INNER JOIN  makt AS b  ON a~matnr b~matnr
INNER JOIN t001l AS c  ON a~werks c~werks AND  a~lgort c~lgort
INNER JOIN mara  AS d  ON a~matnr d~matnr
INNER JOIN zmmt002 AS ON a~matnr e~matnr
INNER JOIN marc    AS ON a~matnr f~matnr AND a~werks f~werks
 WHERE a~lgort IN s_lgort
 AND c~werks EQ  s_werks-low
 AND a~matnr IN s_matnr
 AND f~loggr IN s_loggr  .


  IF gt_mard IS NOT INITIAL .
    SELECT
     a~matnr
     d~bismt
      e~zznme
     b~maktx
     d~meins
     a~werks
     a~lgort
     c~lgobe
     a~clabs  "非限制库存
     a~cspem
     f~loggr  " 仓管员代码
     a~charg  "评估类

     INTO TABLE gt_mchb
      FROM mchb AS a
      INNER JOIN makt AS b  ON a~matnr b~matnr
      INNER JOIN t001l AS c  ON  a~werks c~werks AND  a~lgort c~lgort
      INNER JOIN mara  AS ON a~matnr d~matnr
      INNER JOIN zmmt002 AS ON a~matnr e~matnr
      INNER JOIN marc AS ON a~matnr f~matnr
      FOR ALL ENTRIES IN gt_mard
      WHERE a~matnr gt_mard-matnr
      AND a~werks  gt_mard-werks
      AND a~lgort gt_mard-lgort
      AND f~loggr IN s_loggr .

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data5 .


  SORT  gt_mchb BY matnr lgort .


  DATA lv_tabix TYPE sy-tabix .
  LOOP AT gt_mard INTO gs_mard .
    CLEAR lv_tabix .
    lv_tabix =  sy-tabix  .
    " 如果有批次从表中去除
    READ TABLE gt_mchb WITH KEY matnr gs_mard-matnr
                                lgort gs_mard-lgort
                        BINARY SEARCH
                       TRANSPORTING NO FIELDS .
    IF sy-subrc EQ   .
      DELETE gt_mard INDEX lv_tabix .
    ENDIF .

  ENDLOOP .

  CLEAR gs_mard .


  LOOP AT gt_mard INTO gs_mard  .
    APPEND  gs_mard  TO gt_out .
  ENDLOOP .

  " 把带批次的放入GT_oUT

  LOOP AT gt_mchb INTO gs_mchb.

    APPEND gs_mchb  TO gt_out .
  ENDLOOP .


  " 去0库存
  DELETE gt_out WHERE labst EQ .

  DATAlv_i TYPE .
  DATAlv_loggr LIKE marc-loggr.
  lv_i .
  " 加上序号 转换 小数点
  SORT gt_out BY loggr matnr .
  LOOP AT gt_out INTO gs_out .
    IF lv_loggr IS INITIAL OR lv_loggr <> gs_out-loggr .
      lv_i =  .
    ENDIF .
    lv_i lv_i + .
    gs_out-zxh lv_i .
    gs_out-labst gs_out-labst + gs_out-speme .
    MODIFY gt_out FROM gs_out .
    lv_loggr gs_out-loggr .
    CLEAR gs_out .
  ENDLOOP .


  SORT gt_out BY  loggr zxh.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data5 .
  DEFINE append_field.
    gs_fieldcat-fieldname &1.
    gs_fieldcat-seltext_l &2.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEARgs_fieldcat.
  END-OF-DEFINITION.

  append_field'LOGGR' '仓管员代码' .
  append_field'ZXH' '序号' .
  append_field'MATNR' '物料编号' .
  append_field'ZZNME' '物料名称' .
  append_field'MAKTX' '物料描述' .
  append_field'CHARG' '评估类别' .
  append_field'LABST' '数量'.
  append_field'MEINS' '单位' .
  append_field'LGORT' '仓库代码' .
  append_field'LGOBE' '仓储地点' .

  gs_layout-box_fieldname 'MARK'.
  gs_layout-colwidth_optimize 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      i_callback_pf_status_set 'FRM_STATUS_SET'
      i_callback_user_command  'FRM_USER_COMMAND5'
*
*     I_GRID_SETTINGS          =
      is_layout                gs_layout
      it_fieldcat              gt_fieldcat
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 gt_out
    EXCEPTIONS
      program_error            1
      OTHERS                   2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.



FORM frm_user_command5 USING uv_ucomm LIKE sy-ucomm
                          us_selfield TYPE slis_selfield.



  IF  sy-ucomm EQ 'PRINT' .

    IF  r_5 EQ 'X' "OR r_5A EQ 'X'
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           'ZMMF031D'
        IMPORTING
          fm_name            g_fm_name
        EXCEPTIONS
          no_form            1
          no_function_module 2
          OTHERS             3.
    ELSE .
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           'ZMMF031D_02'
        IMPORTING
          fm_name            g_fm_name
        EXCEPTIONS
          no_form            1
          no_function_module 2
          OTHERS             3.
    ENDIF .


    gw_options-tdnewid 'X'.    "New Spool
    gw_options-tdimmed 'X'.
    gw_options-tddelete 'X'.    "Delete Spool After Print
    gw_options-tdfinal 'X'.
    gw_options-tdiexit 'X'.    "Exit after printing in print preview
    gw_options-tddest 'LP01'.

*    gw_control-no_dialog = 'X'.
    gw_control-preview   'X'.
    gw_control-no_open   'X'.
    gw_control-no_close  'X'.
    CALL FUNCTION 'SSF_OPEN'    "打开打印窗口
      EXPORTING
        control_parameters gw_control
        output_options     gw_options
        user_settings      ''
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.


    DATAlt_out LIKE TABLE OF gs_out .
    DATAls_out LIKE gs_out .
    DATAlt_out2 LIKE TABLE OF gs_out .
    lt_out gt_out .
    DELETE lt_out WHERE mark <> 'X'.
    SORT lt_out BY loggr .
    DELETE ADJACENT DUPLICATES FROM  lt_out COMPARING loggr.


    LOOP  AT  lt_out  INTO ls_out  .
      LOOP AT gt_out INTO gs_out WHERE mark EQ 'X'.
        IF gs_out-loggr EQ ls_out-loggr.
          APPEND gs_out TO lt_out2 .
        ENDIF .
      ENDLOOP .


      CALL FUNCTION g_fm_name
        EXPORTING
          control_parameters gw_control
          output_options     gw_options
*         is_bkpf            = gs_bkpf
*    IMPORTING
*         job_output_info    = l_end
*         job_output_options = l_start
        TABLES
          it_out             lt_out2
*         it_bkpf            = lt_bkpf
        EXCEPTIONS
          formatting_error   1
          internal_error     2
          send_error         3
          user_canceled      4
          OTHERS             5.
      CLEARlt_out2[] .

    ENDLOOP .

    CALL FUNCTION 'SSF_CLOSE'
      EXCEPTIONS
        formatting_error 1
        internal_error   2
        send_error       3
        OTHERS           4.


  ENDIF.


ENDFORM .

SAP盘点清册及打印



相关文章: