生产领料打印(含修改数量)

生产领料打印(含修改数量)

生产领料打印(含修改数量)

*&---------------------------------------------------------------------*
*& Report ZMMF002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmf005.


INCLUDE zmmf005_top.

INCLUDE zmmf005_scr.

INCLUDE zmmf005_frm.


START-OF-SELECTION .


 if r_1 eq 'X'.
  PERFORM  frm_get_data.
 ENDIF .

  IF r_2 EQ 'X'.
    PERFORM  frm_get_data2.
  ENDIF .



IF R_1 EQ 'X'.
  PERFORM  frm_process_data.
  ENDIF .

IF R_2 EQ 'X'.
    PERFORM  frm_process_data2.
ENDIF.


  PERFORM  frm_display_alv .


*&---------------------------------------------------------------------*
*& 包含               ZMMF002_TOP
*&---------------------------------------------------------------------*

TABLES rkpf ,resb .





DATABEGIN OF gs_out ,

        "     smartform - ZMMS005

        bwart     LIKE rkpf-bwart " 移动类型
        " 移动类型文本
        " 领料部门
        rsnum     LIKE rkpf-rsnum "预留单号
        rspos     LIKE resb-rspos "项号
        aufnr     LIKE rkpf-aufnr ,  "订单单号
        bdter     LIKE resb-bdter  "日期
        matnr     LIKE  resb-matnr ,  "物料编码
        maktx     TYPE  makt-maktx  " 物料描述
        charg     TYPE  resb-charg  "评估类别
        meins     LIKE resb-meins " 单位
        bdmng     LIKE resb-bdmng ,  "需求数量
        lgort     LIKE resb-lgort ,  "仓库代码
        lgobe     LIKE t001l-lgobe ,  "仓库名称
        mark ,
        ktext     LIKE crtx-ktext ,    " 工作中心名称
        zprt_cnt  LIKE  zmmt001q-zprt_cnt " 打印次数
        zgldd     LIKE aufk-zgldd,
        zzrbl(50TYPE c,
      END OF gs_out .

DATAgt_out LIKE TABLE OF gs_out .

DATA:BEGIN OF gs_zppt010,
       vbeln    LIKE zppt010-vbeln,
       zzrbl_01 LIKE zppt010-zzrbl_01,
       zzrbl_02 LIKE zppt010-zzrbl_02,
       zzrbl_03 LIKE zppt010-zzrbl_03,
       zzrbl_04 LIKE zppt010-zzrbl_04,
       zzrbl_05 LIKE zppt010-zzrbl_05,
       zzrbl_06 LIKE zppt010-zzrbl_06,
       zzrbl_07 LIKE zppt010-zzrbl_07,
     END OF gs_zppt010.
DATA gt_zppt010 LIKE TABLE OF gs_zppt010.

DATABEGIN OF gs_rkpf ,

        bwart LIKE rkpf-bwart " 移动类型
        " 移动类型文本
        " 领料部门
        rsnum LIKE rkpf-rsnum "预留单号
      END OF gs_rkpf .

DATAgt_rkpf LIKE TABLE OF gs_rkpf .


DATABEGIN OF gs_resb ,
        aufnr LIKE resb-aufnr ,  "订单单号
        rsnum LIKE resb-rsnum "预留单号
        rspos LIKE resb-rspos "项号
        bdter LIKE resb-bdter  "日期
        matnr LIKE resb-matnr ,  "物料编码
        charg LIKE resb-charg  "评估类别
        meins LIKE resb-meins " 单位
        bdmng LIKE resb-bdmng ,  "需求数量 BDMNG
        enmng LIKE resb-enmng ,  "提货数量
        lgort LIKE resb-lgort ,  "仓库代码
        zgldd LIKE aufk-zgldd,
      END OF gs_resb .

DATAgt_resb LIKE TABLE OF gs_resb .

DATABEGIN OF gs_makt ,
        matnr LIKE makt-matnr,
        maktx LIKE makt-maktx,
      END OF gs_makt .

DATAgt_makt LIKE TABLE OF gs_makt .



DATABEGIN OF gs_marc,
        matnr LIKE marc-matnr,
        lgfsb LIKE marc-lgfsb,
      END OF gs_marc .

DATAgt_marc LIKE TABLE OF gs_marc .


" 获取打印次数
DATAgs_zmmt001q LIKE zmmt001q .
DATAgt_zmmt001q LIKE TABLE OF gs_zmmt001q .

DATABEGIN OF gs_t001l ,
        lgort LIKE resb-lgort ,  "仓库代码
        lgobe LIKE t001l-lgobe ,  "仓库名称
      END OF gs_t001l .

DATAgt_t001l LIKE TABLE OF gs_t001l.

DATABEGIN OF gs_stxl,
        tdobject LIKE stxl-tdobject " 文本对象  EKPO
        tdname   LIKE  stxl-tdname"文本名 编号加5位序号 430000000500010
        tdid     LIKE stxl-tdid,
        clustd   LIKE stxl-clustd "项目文本数据
      END OF gs_stxl .



DATA BEGIN OF gs_zmmt004_ll ,
         zlldj LIKE zmmt004_ll-zlldj "领料单据号
         ztype LIKE zmmt004_ll-ztype,  "类型
         aufnr LIKE zmmt004_ll-aufnr ,  "工单号
         matnr LIKE zmmt004_ll-matnr ,  " 物料
         maktx LIKE zmmt004_ll-maktx " 物料描述
         meins LIKE zmmt004_ll-meins "单位
         zllsl LIKE zmmt004_ll-zllsl "领料数量
         zpglx LIKE  zmmt004_ll-zpglx "评估类型
*         lgort LIKE  zmmt004_ll-lgort , " 仓库
         zxqrq LIKE zmmt004_ll-zxqrq ,  " 需求日期
       END OF  gs_zmmt004_ll  .


DATA gt_zmmt004_ll LIKE TABLE OF gs_zmmt004_ll .




DATABEGIN OF gs_afko ,
        aufnr LIKE  afko-aufnr " 工单号
        aufpl LIKE afko-aufpl,  "工序任务清单叼
      END OF gs_afko .

DATAgt_afko LIKE TABLE OF gs_afko .

DATABEGIN OF gs_afvc ,
        aufpl LIKE afvc-aufpl "工序任务清单号
        aplzl LIKE afvc-aplzl "  序号
        arbid LIKE afvc-arbid "对象表枳
      END OF gs_afvc.

DATAgt_afvc LIKE TABLE OF gs_afvc.

DATABEGIN OF gs_crtx ,
        objid LIKE crtx-objid"对象标识
        ktext LIKE crtx-ktext " 工作中心名称
      END OF gs_crtx .

DATAgt_crtx LIKE TABLE OF gs_crtx .

DATABEGIN OF gs_aufnr_ktext  ,
        aufnr LIKE afko-aufnr" 工单号
        ktext LIKE crtx-ktext,  " 工作中心名称
      END OF gs_aufnr_ktext .

DATAgt_aufnr_ktext  LIKE TABLE OF gs_aufnr_ktext.


DATAgv_zxh  LIKE zmmt005h-zxh .








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.


*&---------------------------------------------------------------------*
*& 包含               ZMMF002_SCR
*&---------------------------------------------------------------------*


SELECT-OPTIONS:  s_werks for resb-werks OBLIGATORY ,
                 s_rsnum FOR  rkpf-rsnum "预留单号
                 s_aufnr FOR  rkpf-aufnr ,  "订单单号
                 s_bdter FOR  resb-bdter "日期



*
**PARAMETERS :     P_USNAM TYPE  MSEG-USNAM_MKPF  OBLIGATORY DEFAULT 'LXF' . "用户名
*PARAMETERS :      P_USNAM TYPE  RKPF-USNAM_MKPF . "用户名



PARAMETERS r_1 RADIOBUTTON GROUP g1 .
PARAMETERS r_2 RADIOBUTTON GROUP g1 .

*PARAMETERS: cb_1 AS CHECKBOX  .



*&---------------------------------------------------------------------*
*& 包含               ZMMF002_FRM
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .



  SELECT
       a~aufnr   "订单单号
       a~rsnum  "预留单号
       rspos  "项号
       bdter  "日期
       matnr   "物料编码
       charg   "评估类别
       meins  " 单位
       bdmng  "需求数量
       enmng  "提货数量
       lgort   "仓库代码
       zgldd
     INTO TABLE gt_resb
      FROM resb AS  JOIN rkpf AS  ON a~rsnum b~rsnum AND b~bwart IN ('261')
      JOIN aufk ON a~aufnr aufk~aufnr
      WHERE  a~rsnum IN s_rsnum
       AND   a~aufnr IN s_aufnr
       AND   bdter IN s_bdter
       AND  a~xloek  space
       AND  a~werks IN s_werks
       AND a~bwart '261'
       AND a~bdmng <> .
  SORT gt_resb BY rsnum .

  IF gt_resb IS NOT INITIAL.
    SELECT INTO CORRESPONDING FIELDS OF TABLE gt_zppt010 FROM zppt010.
    LOOP AT gt_zppt010 INTO gs_zppt010.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  gs_zppt010-vbeln
        IMPORTING
          output gs_zppt010-vbeln.
      MODIFY gt_zppt010 FROM gs_zppt010 TRANSPORTING vbeln.
    ENDLOOP.
  ENDIF.

  IF gt_resb IS NOT INITIAL .
    SELECT
        bwart " 移动类型
        rsnum  "预留单号
        INTO TABLE gt_rkpf
       FROM  rkpf
      FOR ALL ENTRIES IN gt_resb
      WHERE rsnum gt_resb-rsnum .
  ENDIF .

  SORT gt_resb BY matnr .
  IF gt_resb IS NOT INITIAL .
    SELECT matnr maktx
      INTO TABLE gt_makt
      FROM makt
      FOR ALL ENTRIES IN gt_resb
      WHERE matnr gt_resb-matnr .
  ENDIF .

  IF gt_resb IS NOT INITIAL .
    SELECT matnr   lgfsb
      INTO TABLE  gt_marc
      FROM marc
      FOR ALL ENTRIES IN gt_resb
      WHERE matnr gt_resb-matnr
       AND werks EQ s_werks-low .

  ENDIF .

  SELECT
   lgort   "仓库代码
   lgobe  "仓库名称
   INTO  TABLE gt_t001l
   FROM t001l
   WHERE werks s_werks-low .

  " 获取打印次数
  IF gt_resb IS NOT INITIAL .
    SELECT *
      INTO TABLE  gt_zmmt001q
      FROM zmmt001q
      FOR ALL ENTRIES IN gt_resb
      WHERE   zdh gt_resb-rsnum
       AND    zcxm EQ  'ZMMF005' .

  ENDIF .




  "得到工单号和工作中心名称
  IF  gt_resb IS NOT INITIAL  .
    SELECT
       aufnr
       aufpl
      INTO TABLE  gt_afko
      FROM afko
      FOR ALL ENTRIES IN gt_resb
      WHERE aufnr gt_resb-aufnr.

  ENDIF .

  SORT gt_afko BY aufpl.
  IF gt_afko IS NOT INITIAL .
    SELECT
      aufpl
      aplzl " 序号
      arbid

      INTO TABLE gt_afvc
      FROM afvc
      FOR ALL ENTRIES IN gt_afko
      WHERE aufpl gt_afko-aufpl.

  ENDIF .

  SORT gt_afvc BY arbid .
  IF  gt_afvc IS NOT INITIAL .
    SELECT
       objid
      ktext
      INTO TABLE  gt_crtx
      FROM crtx
      FOR ALL ENTRIES IN gt_afvc
      WHERE objid gt_afvc-arbid .

  ENDIF .

  SORT gt_afvc BY arbid .

  IF gt_afvc IS NOT INITIAL  .
    SELECT objid ktext
      INTO TABLE gt_crtx
      FROM crtx
      FOR ALL ENTRIES IN gt_afvc
      WHERE objid gt_afvc-arbid .

  ENDIF .


  SORT gt_crtx BY objid .
  SORT gt_afvc BY aufpl aplzl .

  LOOP AT gt_afko INTO gs_afko .
    gs_aufnr_ktext-aufnr gs_afko-aufnr .
    CLEAR gs_afvc .
    READ TABLE gt_afvc INTO gs_afvc WITH KEY aufpl gs_afko-aufpl  .
    IF sy-subrc EQ .
      CLEAR gs_crtx .
      READ TABLE gt_crtx INTO gs_crtx WITH  KEY objid gs_afvc-arbid.
      IF sy-subrc EQ 0  .
        gs_aufnr_ktext-ktext gs_crtx-ktext .
      ENDIF .

    ENDIF .
    APPEND gs_aufnr_ktext TO gt_aufnr_ktext .
    CLEAR gs_aufnr_ktext .
  ENDLOOP .
  "得到工单号和工作中心名称 结束

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data .
  SORT gt_resb BY rsnum rspos .
  SORT gt_rkpf BY rsnum  .
  SORT gt_makt BY matnr .
  SORT gt_marc BY matnr .
  SORT gt_aufnr_ktext BY aufnr .
  SORT gt_zppt010 BY vbeln.
  SORT gt_zmmt001q BY zdh .

  LOOP AT gt_resb INTO gs_resb.
    gs_out-rsnum gs_resb-rsnum "预留单号
    gs_out-rspos gs_resb-rspos " 项号
    gs_out-aufnr gs_resb-aufnr "订单号
    gs_out-bdter gs_resb-bdter ."日期
    gs_out-matnr gs_resb-matnr ."物料编码
    gs_out-charg gs_resb-charg "评估类别
    gs_out-meins gs_resb-meins " 单位
    gs_out-bdmng gs_resb-bdmng gs_resb-enmng "需求数量-提货数量
    gs_out-lgort gs_resb-lgort "仓库代码
    gs_out-zgldd gs_resb-zgldd.
    "计划内为空
*    READ TABLE  gt_rkpf INTO gs_rkpf WITH KEY rsnum = gs_resb-rsnum
*                                     BINARY SEARCH .
*    gs_out-bwart = gs_rkpf-bwart .  "凭证类型
*    CLEAR gs_rkpf .

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  gs_out-zgldd
      IMPORTING
        output gs_out-zgldd.
    CLEAR gs_zppt010.
    READ TABLE gt_zppt010 INTO gs_zppt010 WITH KEY vbeln gs_out-zgldd+2(10BINARY SEARCH .
    IF  sy-subrc EQ 0.
      gs_out-zzrbl '市场' && gs_zppt010-zzrbl_01 &&'/南城研发'&& gs_zppt010-zzrbl_02 &&'/工厂研发'&& gs_zppt010-zzrbl_03 &&'/工程'&& gs_zppt010-zzrbl_04
                     &&'/生产'&& gs_zppt010-zzrbl_05 &&'/品质'&& gs_zppt010-zzrbl_06 &&'/其他'&& gs_zppt010-zzrbl_07.
    ENDIF.

    READ TABLE gt_makt INTO gs_makt WITH KEY matnr gs_resb-matnr
                                    BINARY SEARCH .
    gs_out-maktx gs_makt-maktx .  "物料描述

    CLEAR gs_makt .
    IF gs_resb-lgort IS INITIAL .
      READ TABLE gt_marc INTO gs_marc WITH KEY matnr gs_resb-matnr
                                    BINARY SEARCH  .
      IF sy-subrc EQ .
        READ TABLE gt_t001l INTO gs_t001l WITH KEY lgort gs_marc-lgfsb .
        IF sy-subrc EQ  0.
          gs_out-lgobe gs_t001l-lgobe .   "仓库名称
        ENDIF .
        CLEAR gs_t001l.
      ENDIF .
      CLEAR gs_marc .

    ELSE .
      READ TABLE gt_t001l INTO  gs_t001l WITH KEY  lgort gs_resb-lgort.
      gs_out-lgobe gs_t001l-lgobe .   "仓库名称
      CLEAR gs_t001l.
    ENDIF .

    CLEAR gs_aufnr_ktext.
    READ TABLE gt_aufnr_ktext INTO gs_aufnr_ktext WITH KEY aufnr gs_resb-aufnr
                                      BINARY SEARCH .
    IF sy-subrc EQ .
      gs_out-ktext gs_aufnr_ktext-ktext .
    ENDIF .


    " 获取打印次数
    CLEAR gs_zmmt001q  .
    READ TABLE gt_zmmt001q INTO  gs_zmmt001q WITH KEY zdh gs_out-rsnum
                                             BINARY SEARCH .
    IF sy-subrc EQ .
      gs_out-zprt_cnt gs_zmmt001q-zprt_cnt .

    ENDIF .


    APPEND gs_out TO gt_out .

    CLEAR gs_out .

  ENDLOOP .

  DELETE gt_out WHERE  bdmng  EQ .
  SORT gt_out BY aufnr.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .



  DEFINE append_field.
    gs_fieldcat-fieldname &1.
    gs_fieldcat-seltext_l &2.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEARgs_fieldcat.
  END-OF-DEFINITION.
  IF r_1 EQ 'X' .
    append_field'RSNUM' '预留单号' .
  ENDIF .
  IF r_2 EQ 'X'.
    append_field'RSNUM' '领料单号' .
  ENDIF .

  append_field'RSPOS' '项号' .
  append_field'AUFNR' '订单单号' .
  append_field'BDTER' '日期' .
*  append_field: 'MATNR' '物料编号' .
  gs_fieldcat-fieldname 'MATNR'.
  gs_fieldcat-seltext_l '物料编号' .
  gs_fieldcat-ref_fieldname 'MATNR'.
  gs_fieldcat-ref_tabname 'MARA' .
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEARgs_fieldcat.

  append_field'MAKTX' '物料描述' .
  append_field'CHARG' '评估类别' .

*  append_field: 'BDMNG' '数量'.
*  gs_fieldcat-decimals_out = '0'.
  gs_fieldcat-fieldname 'BDMNG '.
  gs_fieldcat-edit =  'X'.
  gs_fieldcat-ref_tabname 'RESB'.
  gs_fieldcat-ref_fieldname 'BDMNG' .
  gs_fieldcat-seltext_l =  '数量' .
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEARgs_fieldcat.

  append_field'MEINS' '单位' .
  append_field'LGORT' '仓库代码' .
  append_field'LGOBE' '仓储地点' .
  append_field'BWART' '移动类型' .
  append_field'ZPRT_CNT ' '打印次数'.
  IF r_1 EQ 'X' .
    append_field'ZGLDD' '退货单号' .
    append_field'ZZRBL' '退货责任比例' .
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEARgs_fieldcat.
  ENDIF.



  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.



  DATAlr_grid TYPE REF TO cl_gui_alv_grid.

  "alv 修改后传给GT_OUT
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid lr_grid.

  CALL METHOD lr_grid->check_changed_data .
  CALL METHOD lr_grid->refresh_table_display .

  " 不合并打印

  IF  sy-ucomm EQ 'PRINT' OR sy-ucomm EQ 'PRINT2'  .

    IF s_werks-low EQ '1000'.
      IF sy-ucomm EQ 'PRINT' .
        IF r_1 EQ 'X'.
          CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
            EXPORTING
              formname           'ZMMF005IN'
            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           'ZMMF005'
            IMPORTING
              fm_name            g_fm_name
            EXCEPTIONS
              no_form            1
              no_function_module 2
                                   endif.
        ENDIF .
      ENDIF.


      IF sy-ucomm EQ 'PRINT2' .
        IF r_1 EQ 'X'.
          CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
            EXPORTING
              formname           'ZMMF005AIN'
            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           'ZMMF005A'
            IMPORTING
              fm_name            g_fm_name
            EXCEPTIONS
              no_form            1
              no_function_module 2
              OTHERS             3.
        ENDIF .

      ENDIF .

    ELSE .

      IF sy-ucomm EQ 'PRINT' .
        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname           'ZMMF005D'
          IMPORTING
            fm_name            g_fm_name
          EXCEPTIONS
            no_form            1
            no_function_module 2
            OTHERS             3.
      ENDIF .


      IF sy-ucomm EQ 'PRINT2' .
        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname           'ZMMF005AD'
          IMPORTING
            fm_name            g_fm_name
          EXCEPTIONS
            no_form            1
            no_function_module 2
            OTHERS             3.
      ENDIF .

    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 rsnum .
    DELETE ADJACENT DUPLICATES FROM  lt_out COMPARING rsnum .


    PERFORM get_xh .  " 得到本月最大序号

    DATAlv_djbh  TYPE string .
    DATAgs_zmmt005h LIKE zmmt005h .
    DATA:lv_y TYPE LENGTH 2.
    DATA:lv_m TYPE LENGTH .
    lv_y sy-datum+2(2.
    lv_m sy-datum+4(2.

    LOOP  AT  lt_out  INTO ls_out  .
      " 取得打印次数并保存
      gs_zmmt001q-zcxm 'ZMMF005' .
      gs_zmmt001q-zdh ls_out-rsnum  .
      gs_zmmt001q-zprt_cnt ls_out-zprt_cnt + .
*      MODIFY gt_out from gs_out .
      MODIFY zmmt001q FROM gs_zmmt001q .
      " 只有计划内才编号
      IF r_1 EQ 'X'.
        "本月最大序号并加1
        gv_zxh gv_zxh + .
        gs_zmmt005h-zxh gv_zxh .
        gs_zmmt005h-phdat sy-datum .
        MODIFY zmmt005h FROM gs_zmmt005h .

        CONCATENATE 'ST' lv_y lv_m  gv_zxh INTO lv_djbh .
      ELSE .
        lv_djbh '计划外' .

      ENDIF .




      LOOP AT gt_out INTO gs_out WHERE mark EQ 'X'.
        IF gs_out-rsnum EQ ls_out-rsnum .
          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
          iv_djbh            lv_djbh
        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.



  " 合并打印
  PERFORM frm_print34 .





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

  SELECT
    zlldj  "领料单据号
    ztype  " 类型
    aufnr  "工单号
    matnr  " 物料
    maktx  " 物料描述
    meins  "单位
    zllsl  "领料数量
    zpglx   "评估类型
*       LGORT   " 仓库
    zxqrq   " 需求日期
    INTO TABLE gt_zmmt004_ll
    FROM zmmt004_ll
    WHERE aufnr IN s_aufnr
    AND zxqrq IN s_bdter
    AND ztype EQ 'Z2'
    AND loekz space
    AND werks IN s_werks  .


  IF gt_zmmt004_ll IS NOT  INITIAL .
    SELECT
      matnr
      lgfsb  "外部仓储地点
      INTO TABLE gt_marc
      FROM marc
       WHERE werks EQ s_werks-low.
*      FOR ALL ENTRIES IN gt_zmmt004_ll
*      WHERE matnr =  gt_zmmt004_ll-matnr .

  ENDIF .

  SELECT
   lgort   "仓库代码
   lgobe  "仓库名称
   INTO  TABLE gt_t001l
   FROM t001l
    WHERE werks EQ s_werks-low.

  " 打印次数

  IF gt_zmmt004_ll IS NOT INITIAL .
    SELECT *
      INTO TABLE  gt_zmmt001q
      FROM zmmt001q
      FOR ALL ENTRIES IN gt_zmmt004_ll
      WHERE   zdh gt_zmmt004_ll-zlldj
       AND     zcxm EQ  'ZMMF005' .

  ENDIF .




  "得到工单号和工作中心名称
  IF  gt_zmmt004_ll IS NOT INITIAL  .
    SELECT
       aufnr
       aufpl
      INTO TABLE  gt_afko
      FROM afko
      FOR ALL ENTRIES IN gt_zmmt004_ll
      WHERE aufnr gt_zmmt004_ll-aufnr.

  ENDIF .

  SORT gt_afko BY aufpl.
  IF gt_afko IS NOT INITIAL .
    SELECT
      aufpl
      aplzl " 序号
      arbid

      INTO TABLE gt_afvc
      FROM afvc
      FOR ALL ENTRIES IN gt_afko
      WHERE aufpl gt_afko-aufpl.

  ENDIF .

  SORT gt_afvc BY arbid .
  IF  gt_afvc IS NOT INITIAL .
    SELECT
       objid
      ktext
      INTO TABLE  gt_crtx
      FROM crtx
      FOR ALL ENTRIES IN gt_afvc
      WHERE objid gt_afvc-arbid .

  ENDIF .

  SORT gt_afvc BY arbid .

  IF gt_afvc IS NOT INITIAL  .
    SELECT objid ktext
      INTO TABLE gt_crtx
      FROM crtx
      FOR ALL ENTRIES IN gt_afvc
      WHERE objid gt_afvc-arbid .

  ENDIF .


  SORT gt_crtx BY objid .
  SORT gt_afvc BY aufpl aplzl .

  LOOP AT gt_afko INTO gs_afko .
    gs_aufnr_ktext-aufnr gs_afko-aufnr .
    CLEAR gs_afvc .
    READ TABLE gt_afvc INTO gs_afvc WITH KEY aufpl gs_afko-aufpl  .
    IF sy-subrc EQ .
      CLEAR gs_crtx .
      READ TABLE gt_crtx INTO gs_crtx WITH  KEY objid gs_afvc-arbid.
      IF sy-subrc EQ 0  .
        gs_aufnr_ktext-ktext gs_crtx-ktext .
      ENDIF .

    ENDIF .
    APPEND gs_aufnr_ktext TO gt_aufnr_ktext .
    CLEAR gs_aufnr_ktext .
  ENDLOOP .
  "得到工单号和工作中心名称 结束






ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data2 .
  SORT gt_aufnr_ktext BY aufnr .
  SORT gt_zmmt001q BY zdh .
  SORT gt_marc BY matnr .
  LOOP AT gt_zmmt004_ll INTO gs_zmmt004_ll .
    gs_out-rsnum gs_zmmt004_ll-zlldj "领料单号
    gs_out-bwart gs_zmmt004_ll-ztype .
    gs_out-aufnr gs_zmmt004_ll-aufnr .  "订单号
    gs_out-matnr gs_zmmt004_ll-matnr .  "物料编码
    gs_out-maktx gs_zmmt004_ll-maktx .
    gs_out-meins gs_zmmt004_ll-meins .  " 单位
    gs_out-bdmng gs_zmmt004_ll-zllsl.     "需求数量
    gs_out-charg gs_zmmt004_ll-zpglx.   "评估类别
    gs_out-bdter gs_zmmt004_ll-zxqrq .   "日期

    CLEAR gs_aufnr_ktext.
    READ TABLE gt_aufnr_ktext INTO gs_aufnr_ktext WITH KEY aufnr gs_zmmt004_ll-aufnr
                                      BINARY SEARCH .
    IF sy-subrc EQ .
      gs_out-ktext gs_aufnr_ktext-ktext .
    ENDIF .

    "得到外部仓库代码
    CLEAR gs_marc .
    READ TABLE gt_marc INTO gs_marc  WITH KEY matnr gs_zmmt004_ll-matnr
                                     BINARY SEARCH .

    IF sy-subrc EQ .
      "得到仓库名称
      CLEAR gs_t001l.
      READ TABLE gt_t001l INTO gs_t001l WITH KEY lgort gs_marc-lgfsb.
      IF sy-subrc EQ .
        gs_out-lgobe gs_t001l-lgobe .
      ENDIF .

    ENDIF .


    " 获取打印次数
    CLEAR gs_zmmt001q  .
    READ TABLE gt_zmmt001q INTO  gs_zmmt001q WITH KEY zdh gs_out-rsnum
                                             BINARY SEARCH .
    IF sy-subrc EQ .
      gs_out-zprt_cnt gs_zmmt001q-zprt_cnt .

    ENDIF .

    APPEND gs_out TO gt_out .
    CLEAR gs_out.
  ENDLOOP .




ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_XH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_xh .

  DATAlv_xh TYPE .
  DATA:lv_year TYPE LENGTH 4.
  DATA:lv_month TYPE LENGTH .
  DATA:lv_where TYPE c  LENGTH 7.
  DATAlv_str TYPE string .
  DATAphdat TYPE sy-datum.
  phdat sy-datum.
  lv_where phdat(6).
  lv_year  =  phdat+2(2.
  lv_month =  phdat+4(2).

  CONCATENATE  lv_where  '%' INTO lv_where .
  SELECT  COUNT(*)
    FROM zmmt005h
    WHERE phdat  LIKE lv_where.

  gv_zxh sy-dbcnt .






ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT34
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_print34 .


  IF  sy-ucomm EQ 'PRINT3' OR sy-ucomm EQ 'PRINT4' OR sy-ucomm EQ 'PRINT6' OR sy-ucomm EQ 'PRINT7' .

    IF s_werks-low EQ '1000'.
      IF sy-ucomm EQ 'PRINT3' .
        IF r_1 EQ 'X' .
          CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
            EXPORTING
              formname           'ZMMF005IN'
            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           'ZMMF005'
            IMPORTING
              fm_name            g_fm_name
            EXCEPTIONS
              no_form            1
              no_function_module 2
              OTHERS             3.
        ENDIF .
      ENDIF .


      IF sy-ucomm EQ 'PRINT4' .
        IF r_1 EQ 'X'.
          CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
            EXPORTING
              formname           'ZMMF005AIN'
            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           'ZMMF005A'
            IMPORTING
              fm_name            g_fm_name
            EXCEPTIONS
              no_form            1
              no_function_module 2
              OTHERS             3.
        ENDIF .
      ENDIF .

      IF sy-ucomm EQ 'PRINT6' .
        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname           'ZMMF005F'
          IMPORTING
            fm_name            g_fm_name
          EXCEPTIONS
            no_form            1
            no_function_module 2
            OTHERS             3.
      ENDIF .

      IF sy-ucomm EQ 'PRINT7' .
        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname           'ZMMF005G'
          IMPORTING
            fm_name            g_fm_name
          EXCEPTIONS
            no_form            1
            no_function_module 2
            OTHERS             3.
      ENDIF .
    ELSE .

      IF sy-ucomm EQ 'PRINT3' .
        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname           'ZMMF005D'
          IMPORTING
            fm_name            g_fm_name
          EXCEPTIONS
            no_form            1
            no_function_module 2
            OTHERS             3.
      ENDIF .


      IF sy-ucomm EQ 'PRINT4' .
        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname           'ZMMF005AD'
          IMPORTING
            fm_name            g_fm_name
          EXCEPTIONS
            no_form            1
            no_function_module 2
            OTHERS             3.
      ENDIF .


    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'.
    " 数据传给smartforms
    lt_out2  lt_out .



    " 每个预留保存打印一次
    SORT lt_out BY rsnum .
    DELETE ADJACENT DUPLICATES FROM  lt_out COMPARING rsnum .

    LOOP  AT  lt_out  INTO ls_out  .
      " 取得打印次数并保存
      gs_zmmt001q-zcxm 'ZMMF005' .
      gs_zmmt001q-zdh ls_out-rsnum  .
      gs_zmmt001q-zprt_cnt ls_out-zprt_cnt + .
*      MODIFY gt_out from gs_out .
      MODIFY zmmt001q FROM gs_zmmt001q .
    ENDLOOP .


    "单据编号

    PERFORM get_xh .  " 得到本月最大序号
    DATAlv_djbh  TYPE string .
    DATAgs_zmmt005h LIKE zmmt005h .
    DATA:lv_y TYPE LENGTH 2.
    DATA:lv_m TYPE LENGTH .
    lv_y sy-datum+2(2.
    lv_m sy-datum+4(2.

    "取打单据打印编号
    IF r_1 EQ 'X'.
      "本月最大序号并加1
      gv_zxh gv_zxh + .
      gs_zmmt005h-zxh gv_zxh .
      gs_zmmt005h-phdat sy-datum .
      MODIFY zmmt005h FROM gs_zmmt005h .

      CONCATENATE 'ST' lv_y lv_m  gv_zxh INTO lv_djbh .
    ELSE .
      lv_djbh '计划外' .

    ENDIF .




    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
        iv_djbh            lv_djbh
      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[] .



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


  ENDIF.


ENDFORM.


生产领料打印(含修改数量)