COOIS 增强新增生产订单批量打印按钮

整体主要分两个步骤:1.在查询的ALV状态栏新增按钮2.找到增强点实现打印逻辑 

  • 新增按钮到ALV输出界面

     由于我查找COOIS的时候 只发现了一个增强点WORKORDER_INFOSYSTEM,这里里提供的接口我没找到可以添加按钮的方法,所以我是在它的输出alv的类CL_COIS_DISP_LIST的HANDLE_TOOLBAR中做了隐式增强从而添加按钮。

 2.创建增强实施

事务码SE18创建实施ZENH_COOIS_PRINT

 

 ​​​​​

 在AT_OUTPUT_SCREEN_LAY方法中填写按钮打印逻辑

因为要获取输出界面ALV的数据,所以调用了 CL_GUI_ALV_GRID的友元CL_SALV_GUI_GRID_FACADE->if_salv_gui_grid_data_source~get_r_appl_dat获取界面输出数据

 METHOD if_ex_workorder_infosystem~at_output_screen_lay.
    DATA lv_space TYPE char10.
    DATA lt_ioheader TYPE STANDARD TABLE OF ioheader WITH DEFAULT KEY.
    DATA lt_iooper TYPE STANDARD TABLE OF iooper WITH DEFAULT KEY.
    DATA lt_prd_data TYPE STANDARD TABLE OF ioheader WITH DEFAULT KEY.
    DATA lt_coois_prdlist TYPE STANDARD TABLE OF zspp_coois_prdlist WITH DEFAULT KEY.
    DATA lo_logger TYPE REF TO if_salv_logger.
    DATA(lo_salv) = NEW cl_salv_gui_grid_facade(  o_grid = io_alv_grid o_logger = lo_logger ).
    FIELD-SYMBOLS:<ft_data>  TYPE table.

    IF  cv_ucomm EQ 'BPRINT' AND iv_after_ucomm EQ 'X'.
      " IMPORT lt_ioheader = lt_ioheader FROM MEMORY  ID 'COOIS_ALV_OUTPUT'.
      "IMPORT ioheader_tab = lt_ioheader FROM MEMORY  ID 'IOA05'.
      DATA(lt_data) = lo_salv->if_salv_gui_grid_data_source~get_r_appl_data( ).
      ASSIGN lt_data->* TO <ft_data>.
      MOVE-CORRESPONDING <ft_data> TO lt_ioheader.

      io_alv_grid->get_selected_rows( IMPORTING et_index_rows = DATA(lt_index_rows) et_row_no = DATA(lt_row_no) ).
      DESCRIBE TABLE lt_index_rows LINES DATA(lv_lines).
      IF lv_lines EQ 0.
        MESSAGE '请至少选择一条需要打印的订单'(001) TYPE 'S' DISPLAY LIKE 'E'.
      ELSE.
        LOOP AT lt_index_rows INTO DATA(ls_row)..
          READ TABLE lt_ioheader INTO DATA(ls_ioheader) INDEX ls_row-index.
          IF sy-subrc EQ 0.
            APPEND ls_ioheader TO lt_prd_data.
          ENDIF.

          CLEAR ls_ioheader.
        ENDLOOP.
        SELECT DISTINCT afko~aufnr,afvc~steus, afpo~matnr,afko~gamng, afko~gmein,
                        afvc~vornr, afvc~ltxa1,crhd~arbpl,afvv~vgw01,afvv~vge01,
               CASE afvc~steus
                  WHEN 'ZN04' THEN afvc~ltxa1
                  ELSE makt~maktx
               END AS maktx
          FROM afko AS afko
          INNER JOIN afpo AS afpo ON afko~aufnr = afpo~aufnr
          INNER JOIN @lt_prd_data AS prd ON afko~aufnr = prd~aufnr
          LEFT JOIN makt AS makt ON afpo~matnr = makt~matnr AND spras = @sy-langu
          LEFT JOIN afvc AS afvc ON afko~aufpl = afvc~aufpl
          LEFT JOIN afvv AS afvv ON afvc~aufpl = afvv~aufpl AND afvc~aplzl = afvv~aplzl
          LEFT JOIN crhd AS crhd ON afvc~arbid = crhd~objid AND crhd~objty = 'A'
          INTO CORRESPONDING FIELDS OF TABLE @lt_coois_prdlist.

        LOOP AT lt_coois_prdlist ASSIGNING FIELD-SYMBOL(<fs_prd>).
          <fs_prd>-matnr = COND #( WHEN <fs_prd>-steus EQ 'ZN04' THEN '' ELSE <fs_prd>-matnr ).
          <fs_prd>-printdate = |{ sy-datum DATE = ISO }|.
          <fs_prd>-quantity = |{ <fs_prd>-gamng } { <fs_prd>-gmein }|.
          <fs_prd>-worktime = |{ <fs_prd>-vgw01 } { <fs_prd>-vge01 }|.
          <fs_prd>-vornr_int = <fs_prd>-vornr.
          <fs_prd>-vornr =  <fs_prd>-vornr_int.
        ENDLOOP.
        SORT lt_coois_prdlist BY aufnr vornr_int.

        CALL FUNCTION 'ZPP_COOIS_BATCHPRINT'
          EXPORTING
            it_prdinf = lt_coois_prdlist.

      ENDIF.
      " ENDIF.

    ENDIF.
  ENDMETHOD.

FUNCTION zpp_coois_batchprint.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IT_PRDINF) TYPE  ZTPP_COOIS_PRDLIST
*"----------------------------------------------------------------------

  DATA ls_cont TYPE ssfctrlop.
  DATA lc_output_options TYPE ssfcompop.
  DATA fm_name      TYPE rs38l_fnam.
  DATA lt_prdtemp TYPE STANDARD TABLE OF zspp_coois_prdlist WITH DEFAULT KEY.
  DATA lv_index TYPE int4.


  ls_cont-no_open  = 'X'.
  ls_cont-no_close = 'X'.
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      output_options     = lc_output_options
      control_parameters = ls_cont
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'ZCOOIS_PRINT'
      variant            = ''
      direct_call        = ''
    IMPORTING
      fm_name            = fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  DATA(lt_prdinf) = it_prdinf.
  LOOP AT lt_prdinf INTO DATA(ls_prd).

    LOOP AT lt_prdinf INTO DATA(ls_prd1).
      lv_index = sy-tabix.
      IF ls_prd1-aufnr NE ls_prd-aufnr OR ls_prd1-steus EQ 'ZN04'.
        EXIT.
      ENDIF.
      APPEND ls_prd1 TO lt_prdtemp.
      DELETE lt_prdinf INDEX lv_index.
      CLEAR ls_prd1.
    ENDLOOP.

    CALL FUNCTION fm_name
      EXPORTING
        control_parameters = ls_cont
        user_settings      = 'X'
        it_prd             = lt_prdtemp
        is_prd             = ls_prd
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    CLEAR: lt_prdtemp[],ls_prd1,ls_prd.
  ENDLOOP.

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


ENDFUNCTION.

打印结果如下:

  • COOIS 生产订单系统报表选择工序时新增物料及物料描述显示

  1、显示结构添加新增字段CI_IOOPER

 2、上述增强实施中TABLES_MODIFY_LAY方法中新增取数逻辑

    IF is_tcoa-oper_sel EQ 'X'."当选择工序时
      SELECT DISTINCT afko~aufnr,afko~stlbez AS zzmatnr,makt~maktx AS zzmatxt,makt~spras
        FROM afko AS afko
        INNER JOIN @ct_iooper AS iooper ON afko~aufnr = iooper~aufnrd
        LEFT JOIN makt AS makt ON afko~plnbez = makt~matnr
        INTO TABLE @DATA(lt_afko).
      SORT  lt_afko BY aufnr spras.
      SELECT afpo~aufnr,afpo~matnr,makt~maktx,makt~spras
        FROM afpo AS afpo
        INNER JOIN @lt_afko AS afko ON afpo~aufnr = afko~aufnr
        LEFT JOIN makt AS makt ON afpo~matnr = makt~matnr
        INTO TABLE @DATA(lt_afpo).
      SORT lt_afpo BY aufnr spras.
    ENDIF.
    LOOP AT ct_iooper ASSIGNING FIELD-SYMBOL(<fs_iooper>).
      READ TABLE lt_afko INTO DATA(ls_afko) WITH KEY aufnr = <fs_iooper>-aufnrd spras = sy-langu BINARY SEARCH.
      IF sy-subrc NE 0.
        READ TABLE lt_afko INTO ls_afko WITH KEY aufnr = <fs_iooper>-aufnrd  BINARY SEARCH.
      ENDIF.
      IF ls_afko-zzmatnr IS NOT INITIAL.
        <fs_iooper>-zzmatnr = ls_afko-zzmatnr.
        <fs_iooper>-zzmatxt = ls_afko-zzmatxt.
      ELSE.
        READ TABLE lt_afpo INTO DATA(ls_afpo) WITH KEY aufnr = <fs_iooper>-aufnrd spras = sy-langu BINARY SEARCH.
        IF sy-subrc EQ 0.
        ELSE.
          READ TABLE lt_afpo INTO ls_afpo WITH KEY aufnr = <fs_iooper>-aufnrd  BINARY SEARCH.
        ENDIF.
        <fs_iooper>-zzmatnr = ls_afpo-matnr.
        <fs_iooper>-zzmatxt = ls_afpo-maktx.
      ENDIF.
      CLEAR:ls_afko,ls_afpo.
    ENDLOOP.

 3、更改显示布局添加显示字段

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值