ZPPRP024

*&---------------------------------------------------------------------*
*& Report ZTEST001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

REPORT zpprp024.

INCLUDE zpprp024top.
INCLUDE zpprp024a01.
INCLUDE zpprp024alv.

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.
*&---------------------------------------------------------------------*
*& Include ZTEST001TOP
*&---------------------------------------------------------------------*

TABLES: marc,plaf,makt,afko,afpo,eban.
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,      "物料描述"
        gsmng        LIKE plaf-gsmng,      "数量(单位)"
        psttr        LIKE plaf-psttr,      "计划订单创建日期"
        pedtr        LIKE plaf-pedtr,
        paart        LIKE plaf-paart,
        aufnr        LIKE afko-aufnr,      "生产订单号"

        menge_cg     LIKE afko-gamng,      "创建采购申请数量"
        waers        TYPE string,          "货币码"
        ekgrp        TYPE string,          "采购组"
        vdatu        LIKE vbak-vdatu,      "交货日期"
        charg        LIKE ztmm014_01-band, "品牌"
        banfn        LIKE eban-banfn,      "采购申请号"

        field_style  TYPE lvc_t_styl, "-------------------------------------为内表添加设置编辑状态所需的字段-------------------------------------
      END OF wtab.

DATA: itab 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 marc-werks OBLIGATORY DEFAULT '1001' MEMORY ID kun.
SELECT-OPTIONS:
  p_kdauf FOR plaf-kdauf,"销售订单号"
  p_kdpos FOR plaf-kdpos,"销售订单行项目"
  p_matnr FOR marc-matnr,"物料编号"
  p_plnum FOR plaf-plnum,"计划订单号	"
  p_dispo FOR marc-dispo."MRP控制者"
SELECTION-SCREEN END OF BLOCK blk_1.
*&---------------------------------------------------------------------*
*& Include ZTEST001A01
*&---------------------------------------------------------------------*

FORM frm_getdata.
  SELECT
  DISTINCT
  pl~pwwrk"工厂"
  pl~plnum"计划单号"
  pl~kdauf"销售订单"
  pl~kdpos"行项目 "
  pl~matnr"物料"
  mak~maktx"物料描述"
  pl~gsmng"数量(单位)"
  pl~psttr
  pl~pedtr
  pl~paart

  INTO CORRESPONDING FIELDS OF TABLE itab

  FROM plaf AS pl
  INNER JOIN marc AS mar  ON pl~pwwrk = mar~werks
  INNER JOIN makt AS mak  ON pl~matnr = mak~matnr
  WHERE
        pl~pwwrk   = p_pwwrk"工厂"
    AND pl~kdauf  IN p_kdauf"销售订单号"
    AND pl~kdpos  IN p_kdpos"销售订单行项目"
    AND pl~matnr  IN p_matnr"物料编号"
    AND pl~plnum  IN p_plnum"计划订单号"
    AND mar~dispo IN p_dispo"MRP控制者"
    .

*  修改内表
  LOOP AT itab.
*    评估价格
*    货币码
*    价格单位
*    采购组
*    交货日期
*    创建采购申请数量
*    itab-preis = '1'.
    itab-waers = 'CNY'.
*    itab-peinh = '100'.
*    itab-ekgrp = 'A04'.
*    itab-vdatu = '20180120'.
    itab-menge_cg = itab-gsmng.

*    itab-charg = 'ABB'.
*    itab-meins_cg = 'PC'.
    MODIFY itab.
  ENDLOOP.





  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'.
    RETURN.
  ENDIF.

  DATA:
    msg001(5000)     TYPE c VALUE '',
    production_order LIKE  bapi_order_copy-order_number,
    prod_order_type  LIKE  bapi_order_copy-order_type,
    return           LIKE  bapiret2 OCCURS 0 WITH HEADER LINE
    .

  LOOP AT itab WHERE check NE ''.
    IF itab[] IS NOT INITIAL.


      CLEAR: production_order,prod_order_type,return.

      CALL FUNCTION 'BAPI_PRODORD_CREATE_FROM_PLORD'
        EXPORTING
          planned_order    = itab-plnum
        IMPORTING
          production_order = production_order
          prod_order_type  = prod_order_type
          return           = return
        EXCEPTIONS
          error_message    = 1.

      IF production_order = ''.
        CONCATENATE msg001 cl_abap_char_utilities=>cr_lf'失败:计划单号:' itab-plnum ' 原因是:'          return-message INTO msg001.
      ELSE.
        CONCATENATE msg001 cl_abap_char_utilities=>cr_lf '成功:计划单号:' itab-plnum ' >>>生产订单号:' production_order INTO msg001."成功的计划订单"

*        itab-aufnr = production_order."生成生产订单后, 对应的计划订单会没有了"

*        修改内表
        LOOP AT itab WHERE
                pwwrk        = itab-pwwrk      "工厂"
            AND plnum        = itab-plnum      "计划单号"
            AND kdauf        = itab-kdauf      "销售订单"
            AND kdpos        = itab-kdpos      "行项目"
            AND matnr        = itab-matnr      "物料".
          .
          itab-aufnr = production_order.
          MODIFY itab.
        ENDLOOP.


      ENDIF.
    ENDIF.
  ENDLOOP.

  IF msg001 <> ''.
    MESSAGE msg001 TYPE 'I'.
  ENDIF.
ENDFORM.

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

  LOOP AT itab WHERE check = 'X'.
*    评估价格
*    货币码
*    价格单位
*    采购组
*    交货日期
*    创建采购申请数量
    IF
      "itab-preis = '' OR"
      itab-waers = '' OR
      "itab-peinh = '' OR"
      itab-ekgrp = '' OR
      itab-vdatu = '' OR
      itab-menge_cg <= 0.
      MESSAGE '请填写必填数据' TYPE 'S'.
      RETURN.
    ENDIF.
  ENDLOOP.

  IF sy-subrc <> 0 .
    MESSAGE '请选择创建数据' TYPE 'S'.
    RETURN.
  ENDIF.







  DATA:name         TYPE ad_namelas,
       bnfpo        TYPE bnfpo,
       pr_no        TYPE bapiebanc-preq_no,
       pr_item      LIKE TABLE OF bapiebanc  WITH HEADER LINE,
       pr_account   LIKE TABLE OF bapiebkn   WITH HEADER LINE,
       pr_item_id   LIKE TABLE OF bapiebantx WITH HEADER LINE,
       pr_return    LIKE TABLE OF bapireturn WITH HEADER LINE,
       msg001(5000) TYPE c VALUE '',
       l_pr_return  LIKE pr_return
       .

  LOOP AT itab WHERE check NE ''.
    IF itab[] IS NOT INITIAL.
      CLEAR: bnfpo, pr_no, pr_item, pr_account, pr_item_id, pr_return.



      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = bnfpo
        IMPORTING
          output = bnfpo.
      pr_item-doc_type     = '11'.          "凭证类型
      pr_item-preq_item    = bnfpo.         "项目
      pr_item-material     = itab-matnr.
      pr_item-quantity     = itab-menge_cg. "数量
      pr_item-deliv_date   = itab-vdatu.    "交货日期
      pr_item-plant        = itab-pwwrk.    "工厂
      pr_item-pur_group    = itab-ekgrp.    "采购组
      pr_item-preq_name    = name.          "申请者
      pr_item-currency     = itab-waers.    "货币码
      pr_item-batch        = itab-charg.    "品牌"
      APPEND pr_item.
      CLEAR pr_item.
      pr_item_id-preq_item = bnfpo.         "项目
      pr_item_id-text_id   = 'B01'.
      APPEND pr_item_id.
      CLEAR pr_item_id.

      CALL FUNCTION 'BAPI_REQUISITION_CREATE'
*    EXPORTING
*      skip_items_with_error         =
*      automatic_source              = 'X'
        IMPORTING
          number                         = pr_no
        TABLES
          requisition_items              = pr_item
          requisition_account_assignment = pr_account
          requisition_item_text          = pr_item_id
*         requisition_limits             =
*         requisition_contract_limits    =
*         requisition_services           =
*         requisition_srv_accass_values  =
          return                         = pr_return
*         requisition_services_text      =
*         requisition_addrdelivery       =
*         extensionin                    =
        .

      LOOP AT pr_return WHERE type = 'E' OR type = 'A'.
      ENDLOOP.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        LOOP AT pr_return INTO l_pr_return WHERE type = 'E' .
          CONCATENATE msg001 cl_abap_char_utilities=>cr_lf '失败:计划单号:' itab-plnum ' 原因是:'          l_pr_return-message INTO msg001.
        ENDLOOP.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        CONCATENATE msg001 cl_abap_char_utilities=>cr_lf '成功:计划单号:' itab-plnum ' >>>采购订单号:' pr_no INTO msg001."成功的计划订单"

*        修改内表
        LOOP AT itab WHERE
                pwwrk        = itab-pwwrk      "工厂"
            AND plnum        = itab-plnum      "计划单号"
            AND kdauf        = itab-kdauf      "销售订单"
            AND kdpos        = itab-kdpos      "行项目"
            AND matnr        = itab-matnr      "物料".
          .
          itab-banfn = pr_no.
          MODIFY itab.
        ENDLOOP.

      ENDIF.
      FREE pr_item.
      FREE pr_account.
      FREE pr_item_id.
      FREE pr_return.
    ENDIF.
  ENDLOOP.

  IF msg001 <> ''.
    MESSAGE msg001 TYPE 'I'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Include ZTEST001ALV
*&---------------------------------------------------------------------*

FORM set_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZTEST001STATUS' 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.
    WHEN '&FUNC004'.
      PERFORM func004.
  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' '计划单号' '' '' '' '' '' '' '' 'X' .
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'KDAUF' '销售订单' '' '' '' '' '' '' '' 'X' .
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'KDPOS' '行项目' '' '' '' '' '' '' '' 'X' .
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'MATNR' '物料' '' '' '' '' '' '' '' 'X' .
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'MAKTX' '物料描述' '' '' '' '' '' '' ''  ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'GSMNG' '数量(单位)' '' '' '' '' '' '' '' '' .
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'PSTTR' '计划订单开始日期' '' '' '' '' '' '' ''  ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'PEDTR' '计划订单结束日期' '' '' '' '' '' '' ''  ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'AUFNR' '生产订单号' '' '' '' '' '' '' ''  ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'MENGE_CG'  '创建采购申请数量'  '' '' '' '' '' '' '' ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'WAERS'  '货币码'  '' '' '' '' '' 'X' '' ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'EKGRP'  '采购组'  '' '' '' '' '' 'X' '' ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'VDATU'  '交货日期'  '' '20' '' '' '' 'X' '' ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'CHARG'  '品牌'  '' '20' '' '' '' 'X' '' ''.
  PERFORM frm_fieldcat_init TABLES m_fieldcat USING  'BANFN'  '采购申请号'  '' '' '' '' '' '' '' ''.
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 .

  IF  ls_fieldcat-fieldname EQ 'VDATU'.
    ls_fieldcat-ref_field = 'VDATU'.
    ls_fieldcat-ref_table = 'VBAK'.
    ls_fieldcat-coltext   = '交货日期'.
  ENDIF.

  IF  ls_fieldcat-fieldname EQ 'EKGRP'.
    ls_fieldcat-ref_field = 'EKGRP'.
    ls_fieldcat-ref_table = 'EBAN'.
    ls_fieldcat-coltext   = '采购组'.
  ENDIF.

  IF  ls_fieldcat-fieldname EQ 'CHARG'.
    ls_fieldcat-ref_field  = 'BAND'.
    ls_fieldcat-ref_table  = 'ZTMM014_01'.
    ls_fieldcat-f4availabl = 'X'.
    ls_fieldcat-coltext    = '品牌'.
  ENDIF.

  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'
      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.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值