ZPPRP027

*&---------------------------------------------------------------------*
*& Report ZPPRP027
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPPRP027.

INCLUDE ZPPRP027TOP.
INCLUDE ZPPRP027A01.
INCLUDE ZPPRP027ALV.

INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.










START-OF-SELECTION.
  PERFORM FRM_GETDATA.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-STYLEFNAME = 'FIELD_STYLE'.
  PERFORM FIELDS_BUILD CHANGING  IT_FIELDCAT[].
  PERFORM ALV_SHOW. "展示alv"
END-OF-SELECTION.










*======================================================================*
*  List Events
*======================================================================*
*** page header
TOP-OF-PAGE.

*** page header after first list
TOP-OF-PAGE DURING LINE-SELECTION.

*** page footer
END-OF-PAGE.

*** when double click
AT LINE-SELECTION.
*&---------------------------------------------------------------------*
*& 包含               ZPPRP027TOP
*&---------------------------------------------------------------------*

TABLES: plaf,makt,mapl,plpo.
DATA: BEGIN OF wtab,
        check(1),
        pwwrk    LIKE plaf-pwwrk, "工厂"
        plnum    LIKE plaf-plnum, "计划单号"
        kdauf    LIKE plaf-kdauf, "销售订单"
        kdpos    LIKE plaf-kdpos,
        matnr    LIKE plaf-matnr, "物料"
        maktx    LIKE makt-maktx, "物料描述"

        plnnr    LIKE mapl-plnnr, "组"

        vornr    LIKE plpo-vornr, "工序编号"
        ltxa1    LIKE plpo-ltxa1, "工序名字"
        pedtr    LIKE plaf-pedtr, "计划完工日期"
        annam    LIKE plpo-annam, "创建者"
        gsmng    LIKE plaf-gsmng, "数量"
        vgw02    LIKE plpo-vgw02, "工时"
        vge02    LIKE plpo-vge02, "单位"
        vgw03    LIKE plpo-vgw03, "计时工资"
        vge03    LIKE plpo-vge03, "单位"
        vgw04    LIKE plpo-vgw04, "计件工资"
        vge04    LIKE plpo-vge04, "单位"
        vgw06    LIKE plpo-vgw06, "其他间接费用"
        vge06    LIKE plpo-vge06, "单位"
      END OF wtab.

DATA: itab    LIKE TABLE OF wtab WITH HEADER LINE.
DATA: itab001 LIKE TABLE OF wtab WITH HEADER LINE.

DATA: it_fieldcat TYPE TABLE OF lvc_s_fcat WITH HEADER LINE,gs_layout TYPE lvc_s_layo.

SELECTION-SCREEN BEGIN OF BLOCK blk_1 WITH FRAME TITLE TEXT-001.
PARAMETER:
  p_pwwrk LIKE plaf-pwwrk OBLIGATORY MEMORY ID kun.
SELECT-OPTIONS:
  p_matnr FOR plaf-matnr,"物料编号"
  p_plnum FOR plaf-plnum,"计划单号"
  p_kdauf FOR plaf-kdauf,"销售订单"
  p_plnnr FOR mapl-plnnr"组"
  .
SELECTION-SCREEN END OF BLOCK blk_1.
*&---------------------------------------------------------------------*
*& 包含               ZPPRP027A01
*&---------------------------------------------------------------------*

FORM frm_getdata.
  SELECT
  DISTINCT
  plaf~pwwrk"工厂"
  plaf~plnum"计划单号"
  plaf~kdauf"销售订单"
  plaf~kdpos
  plaf~matnr"物料"
  makt~maktx"物料描述"

  mapl~plnnr"组"

*  plpo~vornr"工序编号"
*  plpo~ltxa1"工序名字"
*  plaf~pedtr"计划完工日期"
*  plpo~annam"创建者"
*  plaf~gsmng"数量"
*  plpo~vgw02"工时"
*  plpo~vge02"单位"
*  plpo~vgw03"计时工资"
*  plpo~vge03"单位"
*  plpo~vgw04"计件工资"
*  plpo~vge04"单位"
*  plpo~vgw06"其他间接费用"
*  plpo~vge06"单位"
  INTO CORRESPONDING FIELDS OF TABLE itab

  FROM plaf
  INNER JOIN makt ON plaf~matnr = makt~matnr
  INNER JOIN mapl ON plaf~matnr = mapl~matnr AND plaf~pwwrk = mapl~werks
  INNER JOIN plpo ON mapl~werks = plpo~werks AND mapl~plnnr = plpo~plnnr

  WHERE
          plaf~pwwrk  = p_pwwrk"工厂"
      AND plpo~ltxa1 <> ''
      AND plaf~matnr IN p_matnr"物料编号"
      AND plaf~plnum IN p_plnum"计划单号"
      AND plaf~kdauf IN p_kdauf"销售订单"
      AND mapl~plnnr IN p_plnnr"组"
  ORDER BY  plaf~plnum plaf~kdauf plaf~matnr mapl~plnnr "plpo~vornr
      .
  IF sy-subrc IS NOT INITIAL.
    MESSAGE '没有数据' TYPE 'I'.
    STOP.
  ENDIF.
ENDFORM.

FORM func001.
  itab-check = 'X'.
  MODIFY itab FROM itab
  TRANSPORTING check WHERE check = ''.
  CLEAR itab.
ENDFORM.

FORM func002.
  itab-check = ''.
  MODIFY itab FROM itab
  TRANSPORTING check WHERE check = 'X'.
  CLEAR itab.
ENDFORM.

FORM func003.
  READ TABLE itab WITH KEY check = 'X'. "是否有选中的记录
  IF sy-subrc <> 0.
    MESSAGE '请选择' TYPE 'S'.
  ENDIF.

  SELECT
  DISTINCT
  plaf~pwwrk"工厂"
  plaf~plnum"计划单号"
  plaf~kdauf"销售订单"
  plaf~kdpos
  plaf~matnr"物料"
  makt~maktx"物料描述"

  mapl~plnnr"组"

  plpo~vornr"工序编号"
  plpo~ltxa1"工序名字"
  plaf~pedtr"计划完工日期"
  plpo~annam"创建者"
  plaf~gsmng"数量"
  plpo~vgw02"工时"
  plpo~vge02"单位"
  plpo~vgw03"计时工资"
  plpo~vge03"单位"
  plpo~vgw04"计件工资"
  plpo~vge04"单位"
  plpo~vgw06"其他间接费用"
  plpo~vge06"单位"
  INTO CORRESPONDING FIELDS OF TABLE itab001


  FROM plaf
  INNER JOIN makt ON plaf~matnr = makt~matnr
  INNER JOIN mapl ON plaf~matnr = mapl~matnr AND plaf~pwwrk = mapl~werks
  INNER JOIN plpo ON mapl~werks = plpo~werks AND mapl~plnnr = plpo~plnnr

  WHERE
          plaf~pwwrk  = p_pwwrk"工厂"
      AND plpo~ltxa1 <> ''
      AND plaf~matnr IN p_matnr"物料编号"
      AND plaf~plnum IN p_plnum"计划单号"
      AND plaf~kdauf IN p_kdauf"销售订单"
      AND mapl~plnnr IN p_plnnr"组"
  ORDER BY  plaf~plnum plaf~kdauf plaf~matnr mapl~plnnr plpo~vornr
      .





















  DATA: printab LIKE TABLE OF itab          WITH HEADER LINE.
  DATA: it_head LIKE TABLE OF zspp001head   WITH HEADER LINE,
        it_item LIKE TABLE OF zspp001detail WITH HEADER LINE.

  "获取选中的数据"
  LOOP AT itab WHERE check <> ''.
    INSERT itab INTO TABLE printab.
  ENDLOOP.

  "调用打印
  DATA:ls_ssfcompop TYPE ssfcompop,
       ls_ssfctrlop TYPE ssfctrlop.
       ls_ssfctrlop-no_open    = 'X'.
       ls_ssfctrlop-no_close   = 'X'.
       ls_ssfctrlop-preview    = 'X'.
       ls_ssfctrlop-no_dialog  = 'X'.
  CLEAR:it_head,it_item.
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      control_parameters = ls_ssfctrlop
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.

*  DELETE ADJACENT DUPLICATES FROM printab COMPARING pwwrk  kdauf kdpos matnr plnum plnnr."去重复


  LOOP AT printab.
    MOVE-CORRESPONDING printab TO it_head.
    APPEND: it_head.

    LOOP AT itab001 WHERE  pwwrk  = printab-pwwrk
                    AND  kdauf = printab-kdauf
                    AND  kdpos  = printab-kdpos
                    AND  matnr = printab-matnr
                    AND  plnum = printab-plnum
                    AND  plnnr = printab-plnnr.
      MOVE-CORRESPONDING itab001 TO it_item.
      APPEND: it_item.
    ENDLOOP.












    DATA fm_name TYPE rs38l_fnam.
    fm_name = 'ZLHFR001'.

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           = fm_name
        variant            = ' '
        direct_call        = ' '
      IMPORTING
        fm_name            = fm_name
      EXCEPTIONS
        no_form            = 1
        no_function_module = 2
        OTHERS             = 3.
    IF sy-subrc <> 0.
    ENDIF.

    CALL FUNCTION fm_name
      EXPORTING
        control_parameters = ls_ssfctrlop
      TABLES
        tb_detail          = it_item
        tb_head            = it_head.
    IF sy-subrc <> 0.

    ENDIF.
    CLEAR:it_item,it_item[],it_head,it_head[].




  ENDLOOP.

  CLEAR:it_head,it_item,it_head[],it_item[],itab.
  CALL FUNCTION 'SSF_CLOSE'.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含               ZPPRP027ALV
*&---------------------------------------------------------------------*

FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'ZPPRP027STATUS' EXCLUDING RT_EXTAB .
ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
  RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA: L_VALID TYPE C.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LR_GRID.
  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
  RS_SELFIELD-REFRESH = 'X'.
  READ TABLE  ITAB  INDEX rs_selfield-tabindex.

    CASE R_UCOMM.
    WHEN '&FUNC001'.
      PERFORM FUNC001.
    WHEN '&FUNC002'.
      PERFORM FUNC002.
    WHEN '&FUNC003'.
      PERFORM FUNC003.
  ENDCASE.
ENDFORM.


FORM FIELDS_BUILD CHANGING  M_FIELDCAT TYPE LVC_T_FCAT.
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'CHECK' '选择' '' '' '' '' 'X' 'X' '' ''  .
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PWWRK' '工厂' '' '' '' '' '' '' '' ''  .
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PLNUM' '计划单号' '' '' '' '' '' '' '' ''  .
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'KDAUF' '销售订单' '' '' '' '' '' '' '' ''  .
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'MATNR' '物料' '' '' '' '' '' '' '' ''  .
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'MAKTX' '物料描述' '' '' '' '' '' '' '' ''  .
    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PLNNR' '组' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VORNR' '工序编号' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'LTXA1' '工序名字' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PEDTR' '计划完工日期' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'ANNAM' '创建者' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'GSMNG' '数量' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW02' '工时' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE02' '单位' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW03' '计时工资' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE03' '单位' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW04' '计件工资' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE04' '单位' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW06' '其他间接费用' '' '' '' '' '' '' '' ''  .
*    PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE06' '单位' '' '' '' '' '' '' '' ''  .
ENDFORM.



FORM FRM_FIELDCAT_INIT TABLES T_FIELDCAT TYPE LVC_T_FCAT
                       USING FIELDNAME TYPE C           " 字段名
                             SCRTEXT_M TYPE C           " 标题
                             COL_POS   TYPE I           " 所在列
                             OUTPUTLEN TYPE I           " 输出长度
                             EMPHASIZE TYPE C           " 高亮显示
                             KEY       TYPE C           " 主键
                             CHECKBOX  TYPE C
                             EDIT      TYPE C
                             FIX_COLUMN TYPE C          " 固定列
                             NO_ZERO   TYPE C.
  DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
  LS_FIELDCAT-FIELDNAME   = FIELDNAME.
  LS_FIELDCAT-SCRTEXT_M   = SCRTEXT_M.
  LS_FIELDCAT-COL_POS     = COL_POS.
  LS_FIELDCAT-OUTPUTLEN   = OUTPUTLEN.
  LS_FIELDCAT-EMPHASIZE   = EMPHASIZE.
  LS_FIELDCAT-KEY         = KEY.
  LS_FIELDCAT-CHECKBOX    = CHECKBOX.
  LS_FIELDCAT-EDIT        = EDIT.
  LS_FIELDCAT-FIX_COLUMN  = FIX_COLUMN.
  LS_FIELDCAT-NO_ZERO     = NO_ZERO.
  APPEND LS_FIELDCAT TO T_FIELDCAT.
  CLEAR  LS_FIELDCAT.
ENDFORM.



FORM ALV_SHOW.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-CPROG        " /SY-REPID  " 程式名称
      I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'    "GUI状态
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'  " 自定义工具栏的事件
      IT_FIELDCAT_LVC          = IT_FIELDCAT[]   " 必须要设置的参数 , 设定输出目录
      IS_LAYOUT_LVC            = GS_LAYOUT       " 对输出样式的设定
    TABLES
      T_OUTTAB                 = ITAB            "ALV 输出的内表
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS.
ENDFORM.




猜你喜欢

转载自blog.csdn.net/low584710047/article/details/79250924