批导模板2

*&---------------------------------------------------------------------*
*& Report ZRMM044
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrmm044 MESSAGE-ID 00 NO STANDARD PAGE HEADING..

INCLUDE zrmm044_top.
INCLUDE zrmm044_sel.
INCLUDE zrmm044_f01.

INITIALIZATION .
  CLEAR lth_functxt.
  lth_functxt-icon_id   = icon_export.
  lth_functxt-icon_text = '下载模板'.
  lth_functxt-quickinfo = '下载模板'.
  sscrfields-functxt_01 = lth_functxt.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_download_temp.
    WHEN OTHERS.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
      field_name    = ' '
    IMPORTING
      file_name     = p_file.

START-OF-SELECTION.
  PERFORM frm_upload_data.
  PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*& 包含               ZRMM044_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS:slis.
TABLES:sscrfields,icon.
DATA:gt_fieldcat TYPE lvc_t_fcat,
     gw_fieldcat TYPE lvc_s_fcat,
     gv_repid    TYPE sy-repid,
     gs_layout   TYPE lvc_s_layo.

TYPES:BEGIN OF tty_out,
        status     TYPE  char10,
        ebeln      TYPE  ekko-ebeln, "新采购订单号
        bednr	     TYPE  ekpo-bednr, "跟踪编号
        ebelp	     TYPE  ekpo-ebelp, "订单行项目
        bsart	     TYPE  ekko-bsart, "订单类型
        lifnr	     TYPE  ekko-lifnr,  "供应商
        bedat	     TYPE  ekko-bedat,  "凭证日期
        ekorg	     TYPE  ekko-ekorg,  "采购组织
        ekgrp	     TYPE  ekko-ekgrp,  "采购组
        bukrs	     TYPE  ekko-bukrs,  "公司代码
        creat_date TYPE  datum, "记录的创建日期
        created_by TYPE  uname, "创建对象的人员名称
        zterm	     TYPE  ekko-zterm,  "付款条款
        inco1	     TYPE  ekko-inco1,  "国际贸易条款
        inco2_l    TYPE  ekko-inco2, "国际贸易条款位置 1
        waers	     TYPE  ekko-waers, "币别
        kufix	     TYPE  ekko-kufix,  "固定汇率
        wkurs	     TYPE  ekko-wkurs,  "汇率
        loekz	     TYPE  ekko-loekz,  "删除标识
        knttp	     TYPE  ekpo-knttp,  "科目分配类别
        pstyp	     TYPE  ekpo-pstyp,  "项目类别
        werks	     TYPE  ekpo-werks,  "工厂
        matnr	     TYPE  ekpo-matnr,  "物料号码
        txz01	     TYPE  ekpo-txz01,  "物料描述
        matkl	     TYPE  ekpo-matkl,  "物料组
        menge	     TYPE  ekpo-menge, "数量
        meins	     TYPE  ekpo-meins,  "订单计量单位
        bprme	     TYPE  ekpo-bprme,   "订单价格单位(采购)
        eindt	     TYPE  eket-eindt, "交货日期
        netpr	     TYPE  ekpo-netpr,   "净价
        peinh	     TYPE  ekpo-peinh, "价格单位
        brtwr	     TYPE  ekpo-brtwr,    "总金额
        retpo	     TYPE  ekpo-retpo, "退货项目
        umson	     TYPE  mepo1211-umson, "免费项目
        webre	     TYPE  ekpo-webre, "发票基于收货
        mwskz	     TYPE  ekpo-mwskz, "税码
        sakto	     TYPE  ekpo-sakto, "总账科目
        kostl	     TYPE  ekpo-kostl, "成本中心
        aufnr1     TYPE  char50, "ztmm005-aufnr1, "原CLOUD订单
        aufnr	     TYPE  aufnr, "订单
        bapi_mtype TYPE bapi_mtype,
        bapi_msg   TYPE bapi_msg,
        sel(1),
      END OF tty_out.
TYPES:ty_basic TYPE TABLE OF tty_out.
DATA:gt_out TYPE ty_basic,
     gw_out LIKE LINE OF gt_out.

DATA:lth_functxt TYPE smp_dyntxt.
DATA:g_filepath TYPE string.
DATA:t_xlstmp TYPE zsalsmex_tabline OCCURS 0 WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& 包含               ZRMM044_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:p_file LIKE rlgrap-filename MODIF ID p1.
SELECTION-SCREEN:END OF BLOCK b1.

SELECTION-SCREEN:BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
  PARAMETERS:p1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND UEX,
             P2 RADIOBUTTON GROUP G1.

  SELECTION-SCREEN SKIP 1 .
  PARAMETERS:p_test AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN:END OF BLOCK b2.
SELECTION-SCREEN:FUNCTION KEY 1.
*&---------------------------------------------------------------------*
*& 包含               ZRMM044_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
  DATA:BEGIN OF i_upload OCCURS 10,
         value001 TYPE string,
         value002 TYPE string,
         value003 TYPE string,
         value004 TYPE string,
         value005 TYPE string,
         value006 TYPE string,
         value007 TYPE string,
         value008 TYPE string,
         value009 TYPE string,
         value010 TYPE string,
         value011 TYPE string,
         value012 TYPE string,
         value013 TYPE string,
         value014 TYPE string,
         value015 TYPE string,
         value016 TYPE string,
         value017 TYPE string,
         value018 TYPE string,
         value019 TYPE string,
         value020 TYPE string,
         value021 TYPE string,
         value022 TYPE string,
         value023 TYPE string,
         value024 TYPE string,
         value025 TYPE string,
         value026 TYPE string,
         value027 TYPE string,
         value028 TYPE string,
         value029 TYPE string,
         value030 TYPE string,
         value031 TYPE string,
         value032 TYPE string,
         value033 TYPE string,
         value034 TYPE string,
         value035 TYPE string,
         value036 TYPE string,
         value037 TYPE string,
         value038 TYPE string,
         value039 TYPE string,
       END OF i_upload.
  DATA:lv_num   TYPE i,
       lv_matnr TYPE matnr.
  DATA:v_gt_data_row TYPE int2,
       v_gt_data_col TYPE int2.
  DATA:v_indet(3)  TYPE n,
       v_field(20) TYPE c.
  FIELD-SYMBOLS: <fs> TYPE any,<gs>.

  REFRESH t_xlstmp.
  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 6
      i_end_col               = 39
      i_end_row               = 65536
    TABLES
      intern                  = t_xlstmp
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc NE 0 .
    MESSAGE s003(msgnr) WITH '读取文件失败,请检查Excel数据文件!'.
    STOP.
  ENDIF.

  LOOP AT t_xlstmp.
    TRANSLATE t_xlstmp-value TO UPPER CASE.
    AT NEW row.
      CLEAR:t_xlstmp.
    ENDAT.

    ASSIGN COMPONENT t_xlstmp-col OF STRUCTURE i_upload TO <fs>.
    <fs> = t_xlstmp-value.

    AT END OF row.
      APPEND i_upload.
      CLEAR:i_upload.
    ENDAT .
  ENDLOOP.

"  APPEND i_upload.
  CLEAR: i_upload,t_xlstmp,t_xlstmp[].

  DELETE i_upload WHERE ( value001 IS INITIAL AND value002 IS INITIAL ).

  SELECT * INTO TABLE @DATA(lt_ztmm017) FROM ztmm017.
  SELECT * INTO TABLE @DATA(lt_t001) FROM t001 .
  SELECT * INTO TABLE @DATA(lt_t024e) FROM t024e.
  SELECT * INTO TABLE @DATA(lt_t024) FROM t024.
  SELECT * INTO TABLE @DATA(lt_t001w) FROM t001w.
  SORT lt_t024e BY ekorg.
  SORT lt_t024 BY ekgrp.
  SORT lt_t001 BY bukrs.
  SORT lt_t001w BY werks.

  DEFINE def_append_msg.
    IF gw_out-&1 IS INITIAL.
      gw_out-status =  icon_red_light.
      gw_out-bapi_mtype = 'E'.
      gw_out-bapi_msg = &2 && '不能为空'.
    ENDIF.
  END-OF-DEFINITION.

  DEFINE def_append_error.
    gw_out-status =  icon_red_light.
    gw_out-bapi_mtype = 'E'.
    gw_out-bapi_msg = &1 .
  END-OF-DEFINITION.

  SELECT o~aufnr , o~cy_seqnr , f~werks INTO TABLE @DATA(lt_afko) FROM afko AS o INNER JOIN aufk AS f ON o~aufnr = f~aufnr.
  SPLIT 'NB、DB、ZN、ZNJ、ZNK、ZSTO、ZT、ZU' AT '、' INTO TABLE DATA(lt_bsart) .

  LOOP AT i_upload INTO DATA(lw_upload).
    gw_out = VALUE #( ebeln = lw_upload-value001
                      bednr = lw_upload-value002
                      ebelp = lw_upload-value003
                      bsart = lw_upload-value004
                      lifnr = lw_upload-value005
                      bedat = lw_upload-value006"+0(4) && lw_upload-value006+5(2) && lw_upload-value006+8(2)
                      ekorg = lw_upload-value007
                      ekgrp = lw_upload-value008
                      bukrs = lw_upload-value009
                      creat_date = lw_upload-value010
                      created_by = lw_upload-value011
                      zterm = lw_upload-value012
                      inco1 = lw_upload-value013
                      inco2_l = lw_upload-value014
                      waers =   lw_upload-value015
                      kufix =   lw_upload-value016
                      wkurs =   lw_upload-value017
                      loekz =   lw_upload-value018
                      knttp =   lw_upload-value019
                      pstyp =   lw_upload-value020
                      werks =   lw_upload-value021
                      matnr =   lw_upload-value022
                      txz01 =   lw_upload-value023
                      matkl =   lw_upload-value024
                      menge =   lw_upload-value025"+0(4) && lw_upload-value025+5(2) && lw_upload-value025+8(2)
                      meins =   lw_upload-value026
                      bprme =   lw_upload-value027
                      eindt =   lw_upload-value028
                      netpr =   lw_upload-value029
                      peinh =   lw_upload-value030
                      brtwr =   lw_upload-value031
                      retpo =   lw_upload-value032
                      umson =   lw_upload-value033
                      webre =   lw_upload-value034
                      mwskz =   lw_upload-value035
                      sakto =   lw_upload-value036
                      kostl =   lw_upload-value037
                      aufnr1 =  lw_upload-value038
                      aufnr =   lw_upload-value039
     ).
    IF p1 = 'X'.
      IF gw_out-bednr IS INITIAL.
        def_append_error '创建订单原订单号不能为空'.
      ENDIF.
    ELSEIF p2 = 'X'.
      IF gw_out-ebeln IS INITIAL.
        def_append_error '修改订单SAP订单号不能为空'.
      ENDIF.
    ENDIF.

    def_append_msg ebelp '订单行项目'.
    def_append_msg bsart '订单类型'.
    def_append_msg lifnr '供应商'.
    def_append_msg bedat '凭证日期'.
    def_append_msg ekorg '采购组织'.
    def_append_msg ekgrp '采购组'.
    def_append_msg bukrs '公司代码'.
    def_append_msg zterm '付款条款'.


    def_append_msg waers '币别'.
    def_append_msg wkurs '汇率'.
    def_append_msg knttp '科目分配类别'.
    def_append_msg werks '工厂'.
    "def_append_msg matnr '物料号码'.
    def_append_msg txz01 '物料描述'.
    def_append_msg matkl '物料组'.
    def_append_msg menge '数量'.
    IF p1 = 'X'.
      def_append_msg creat_date '记录的创建日期 '.
      def_append_msg created_by '创建对象的人员 '.
    ENDIF.

    def_append_msg meins '订单计量单位'.
    def_append_msg bprme '订单价格单位(采购)'.

    def_append_msg eindt '交货日期'.
    def_append_msg netpr '净价'.
    def_append_msg peinh '价格单位'.
    def_append_msg brtwr '总金额'.
    def_append_msg webre '发票基于收货'.
    def_append_msg mwskz '税码'.

    def_append_msg sakto '总账科目'.
    def_append_msg aufnr1 '原cloud订单'.

    IF gw_out-meins IS NOT INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
        EXPORTING
          input          = gw_out-meins
*         LANGUAGE       = SY-LANGU
        IMPORTING
          output         = gw_out-meins
        EXCEPTIONS
          unit_not_found = 1
          OTHERS         = 2.
    ENDIF.

    IF gw_out-bprme IS NOT INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
        EXPORTING
          input          = gw_out-bprme
*         LANGUAGE       = SY-LANGU
        IMPORTING
          output         = gw_out-bprme
        EXCEPTIONS
          unit_not_found = 1
          OTHERS         = 2.
    ENDIF.

    gw_out-sakto = |{ gw_out-sakto ALPHA = IN }|.

    IF gw_out-sakto = '0050010501' OR gw_out-sakto = '0050010701'.
    ELSE.
      def_append_error '总账科目只能是0050010501或0050010701'.
    ENDIF.

    READ TABLE lt_t001w INTO DATA(lw_t001w) WITH KEY werks = gw_out-werks BINARY SEARCH.
    IF sy-subrc NE 0.
      def_append_error '工厂不存在'.
    ENDIF.

    READ TABLE lt_t024e INTO DATA(lw_t024e) WITH KEY ekorg = gw_out-ekorg BINARY SEARCH.
    IF sy-subrc NE 0.
      def_append_error '采购组织不存在'.
    ENDIF.

    READ TABLE lt_t024 INTO DATA(lw_t024) WITH KEY ekgrp = gw_out-ekgrp BINARY SEARCH.
    IF sy-subrc NE 0.
      def_append_error '采购组不存在'.
    ENDIF.

    READ TABLE lt_t001 INTO DATA(lw_t001) WITH KEY bukrs = gw_out-bukrs BINARY SEARCH.
    IF sy-subrc NE 0.
      def_append_error '公司代码不存在'.
    ENDIF.

    READ TABLE lt_bsart INTO DATA(lw_bsart) WITH KEY table_line = gw_out-bsart.
    IF sy-subrc NE 0.
      def_append_error '订单类型不存在'.
    ENDIF.

    IF gw_out-menge IS INITIAL.
      def_append_error '数量不能为空'.
    ENDIF.

    READ TABLE lt_afko INTO DATA(lw_afko) WITH KEY cy_seqnr = gw_out-aufnr1.
    IF sy-subrc NE 0.
      def_append_error '旧工单信息不存在'.
    ELSE.
      gw_out-aufnr = lw_afko-aufnr .

      IF lw_afko-werks <> gw_out-werks.
        def_append_error '旧工单与批导工厂不一致'.
      ENDIF.
    ENDIF.

    IF p1 = 'X' AND gw_out-bednr IS NOT INITIAL.
      READ TABLE lt_ztmm017 INTO DATA(lw_ztmm017) WITH KEY bednr = gw_out-bednr..
      IF sy-subrc EQ 0  .
        gw_out-status =  icon_red_light.
        gw_out-bapi_mtype = 'E'.
        gw_out-bapi_msg = '旧订单已产生采购订单号码为:' && lw_ztmm017-ebeln.
      ENDIF.
    ENDIF.

    gw_out-retpo = COND #( WHEN gw_out-retpo = '√' THEN 'X' ELSE '').
    gw_out-umson = COND #( WHEN gw_out-umson = '√' THEN 'X' ELSE '').

    APPEND gw_out TO gt_out.
    CLEAR:gw_out.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  DATA:g_repid TYPE sy-repid.
  g_repid = sy-repid.
  "g_layout-zebra             = 'X' .
  gs_layout-zebra = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-box_fname = 'SEL'.
  CLEAR  gt_fieldcat[].
  PERFORM frm_generate_field_catalogu.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF'
      i_callback_user_command  = 'USER_COM'
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
    TABLES
      t_outtab                 = gt_out
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SET_PF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_pf USING  extab TYPE slis_t_extab.
  IF p1 = 'X'.
    SET TITLEBAR 'TITLE_CREATE'.
  ELSE.
    SET TITLEBAR 'TITLE_MODFIY'.
  ENDIF.

  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.                    "SET_PF
*&---------------------------------------------------------------------*
*&      Form  user_com
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM user_com USING r_ucomm LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA: gd_repid LIKE sy-repid,
        ref_grid TYPE REF TO cl_gui_alv_grid.

  IF ref_grid IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        e_grid = ref_grid.
  ENDIF.
  IF NOT ref_grid IS INITIAL.
    CALL METHOD ref_grid->check_changed_data .
  ENDIF.

  CASE r_ucomm.
    WHEN '&BACK' OR '&EXIT' OR '&EXIT'.
      LEAVE TO SCREEN 0.
    WHEN '&IC1'.
    WHEN '&OPER'.
      PERFORM frm_oper_purchase.
    WHEN OTHERS.
  ENDCASE.
  rs_selfield-refresh = 'X'.
ENDFORM.                    "USER_COM
*&---------------------------------------------------------------------*
*&      Form  FRM_GENERATE_FIELD_CATALOGU
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_generate_field_catalogu.
  DEFINE def_modify_fieldcat.
    &1-scrtext_l = &2.
    &1-scrtext_m = &2.
    &1-reptext =   &2.
    &1-scrtext_s = &2.
  END-OF-DEFINITION.

  TRY.
      cl_salv_table=>factory( IMPORTING
                                r_salv_table   = DATA(salv_table)
                              CHANGING
                                t_table        = gt_out  ).

      gt_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
          r_columns      = salv_table->get_columns( )
          r_aggregations = salv_table->get_aggregations( ) ).
    CATCH cx_root.
  ENDTRY.

  LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_filedcat>).
    CASE <fs_filedcat>-fieldname.
      WHEN 'STATUS'.
        def_modify_fieldcat <fs_filedcat> '状态'.
        <fs_filedcat>-icon = 'X'.
      WHEN 'SEL'.
        <fs_filedcat>-no_out = 'X'.
      WHEN 'BAPI_MTYPE'.
        def_modify_fieldcat <fs_filedcat> '消息'.
      WHEN 'BAPI_MSG'.
        def_modify_fieldcat <fs_filedcat> '消息文本'.
      WHEN 'AUFNR1'.
        def_modify_fieldcat <fs_filedcat> '原CLOUD订单'.
      WHEN 'CREAT_DATE'.
        def_modify_fieldcat <fs_filedcat> '记录的创建日期 '.
      WHEN 'CREATED_BY'.
        def_modify_fieldcat <fs_filedcat> '创建对象的人员'.
      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_temp
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download_temp .
  DATA:lwk_object LIKE wwwdatatab,
       lwk_rc     TYPE sy-subrc,
       ltd_ft     TYPE filetable,
       lth_ft     TYPE file_table,
       lwk_ua     TYPE i.

  DATA:lwk_fn TYPE rlgrap-filename.

****查询模板
  SELECT SINGLE relid objid
    FROM wwwdata
      INTO CORRESPONDING FIELDS OF lwk_object
      WHERE srtf2 = 0 AND
            objid = 'ZRMM044'.

  IF sy-subrc <> 0 OR lwk_object-objid = space .
    MESSAGE i007 WITH 'ZRMM044'.
    STOP.
  ENDIF.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      file_filter             = cl_gui_frontend_services=>filetype_excel
    CHANGING
      file_table              = ltd_ft
      rc                      = lwk_rc
      user_action             = lwk_ua
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 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.
  ELSE.

    CHECK lwk_ua = 0.
    READ TABLE ltd_ft INTO lth_ft INDEX 1.
    lwk_fn  = lth_ft-filename.
***下载模板
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lwk_object
        destination = lwk_fn
      IMPORTING
        rc          = lwk_rc.

    IF lwk_rc <> 0.
      MESSAGE i009 WITH 'ZRMM044'..
      STOP.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_oper_purchase
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_oper_purchase .
  DATA:lt_return      LIKE TABLE OF bapiret2,
       po_item        LIKE TABLE OF bapimepoitem,
       po_itemx       LIKE TABLE OF bapimepoitemx,
       po_account     LIKE TABLE OF bapimepoaccount,
       po_accountx    LIKE TABLE OF bapimepoaccountx,
       po_schedule    LIKE TABLE OF bapimeposchedule,
       po_schedulex   LIKE TABLE OF bapimeposchedulx,
       po_extensionin LIKE  TABLE OF bapiparex WITH HEADER LINE,
       po_hdr         LIKE bapimepoheader,
       po_hdrx        LIKE bapimepoheaderx.
  DATA:lv_ebeln TYPE ebeln,
       lv_ebelp TYPE ekpo-ebelp,
       lv_msg   TYPE bapi_msg,
       lv_type  TYPE bapi_mtype.
  DATA:where_tab TYPE string.
  DATA:lt_out TYPE ty_basic.
  DATA:lt_ztmm017 TYPE TABLE OF ztmm017  .
  REFRESH:lt_out.
  BREAK sapabap.
  lt_out[] = gt_out[].
  DELETE lt_out WHERE bapi_mtype = 'S'.
  DELETE lt_out WHERE bapi_mtype = 'E'.

  IF p1 = 'X'.
    where_tab = 'BEDNR = GS_OUT-BEDNR'  .
  ELSEIF p2 = 'X'.
    where_tab = 'EBELN = GS_OUT-EBELN' ..
  ENDIF.

  LOOP AT lt_out INTO DATA(gs_out) GROUP BY ( bednr = gs_out-bednr  ebeln = gs_out-ebeln ) .
    LOOP AT GROUP gs_out INTO DATA(lw_wa).

      IF  po_hdr IS INITIAL.
        po_hdr = VALUE #( po_number = lw_wa-ebeln
                          doc_type = lw_wa-bsart
                          doc_date = lw_wa-bedat
                          vendor =  |{  lw_wa-lifnr ALPHA = IN }|
                          purch_org = lw_wa-ekorg
                          pur_group = lw_wa-ekgrp
                          comp_code = lw_wa-bukrs
                          pmnttrms = lw_wa-zterm
                          currency  = lw_wa-waers
                          ex_rate_fx  = lw_wa-kufix
                          "exch_rate  = lw_wa-wkurs
                          "incoterms1 = lw_wa-inco1
                          "incoterms2 = lw_wa-inco2_l
                          creat_date = COND #( WHEN p1  = 'X' THEN lw_wa-creat_date ELSE '' )
                          created_by = COND #( WHEN p1  = 'X' THEN lw_wa-created_by ELSE '' ) ).

        po_hdrx = VALUE #( po_number = COND #( WHEN p2 = 'X' THEN 'X' ELSE '' )
                           doc_type = 'X'
                           doc_date = 'X'
                           vendor = 'X'
                           purch_org = 'X'
                           pur_group = 'X'
                           comp_code = 'X'
                           pmnttrms = 'X'
                           currency  = 'X'
                           ex_rate_fx = 'X'
                           "exch_rate  = 'X'
                           "incoterms1 = 'X'
                           "incoterms2 = 'X'
                           creat_date = COND #( WHEN p1  = 'X' THEN 'X' ELSE '' )
                           created_by = COND #( WHEN p1  = 'X' THEN 'X' ELSE '' ) ).
      ENDIF.

      lv_ebelp = lw_wa-ebelp.
      po_item = VALUE #( BASE po_item (  po_item = lv_ebelp
                              plant = lw_wa-werks
                              acctasscat = lw_wa-knttp
                              material = lw_wa-matnr
                              material_long = lw_wa-matnr
                              short_text = lw_wa-txz01
                              matl_group = lw_wa-matkl
                              quantity = lw_wa-menge
                              po_unit  = lw_wa-meins
                              orderpr_un = lw_wa-bprme
                              net_price = lw_wa-netpr
                              price_unit = lw_wa-peinh
                              ret_item = lw_wa-retpo
                              free_item  = lw_wa-umson
                              gr_basediv  = lw_wa-webre
                              tax_code  = lw_wa-mwskz
                              incoterms1 = lw_wa-inco1
                              incoterms2 = lw_wa-inco2_l
                              trackingno = lw_wa-bednr
                              delete_ind = COND #( WHEN lw_wa-loekz IS INITIAL THEN '' ELSE 'L' )
                              ) ) .
      po_itemx = VALUE #( BASE po_itemx (  po_item = lv_ebelp
                                           plant = 'X'
                                           acctasscat = 'X'
                                           material = COND #( WHEN lw_wa-matnr IS NOT INITIAL THEN  'X' ELSE '' )
                                           material_long = COND #( WHEN lw_wa-matnr IS NOT INITIAL THEN  'X' ELSE '' )
                                           short_text = 'X'
                                           matl_group = 'X'
                                           quantity = 'X'
                                           po_unit  = 'X'
                                           orderpr_un = 'X'
                                           net_price = 'X'
                                           price_unit = 'X'
                                           ret_item = COND #( WHEN lw_wa-retpo IS NOT INITIAL THEN  'X' ELSE '' )
                                           free_item  = COND #( WHEN lw_wa-umson IS NOT INITIAL THEN  'X' ELSE '' )
                                           gr_basediv  = COND #( WHEN lw_wa-webre IS NOT INITIAL THEN  'X' ELSE '' )
                                           tax_code  = 'X'
                                           incoterms1 = COND #( WHEN lw_wa-inco1 IS NOT INITIAL THEN  'X' ELSE '' )
                                           incoterms2 = COND #( WHEN lw_wa-inco2_l IS NOT INITIAL THEN  'X' ELSE '' )
                                           trackingno = 'X'
                                           delete_ind = COND #( WHEN lw_wa-loekz IS NOT INITIAL THEN  'X' ELSE '' )
                                              ) ) .
      po_schedule = VALUE #( BASE po_schedule (  po_item = lv_ebelp
                                                 sched_line = 1
                                                 del_datcat_ext = 'D'
                                                 delivery_date = lw_wa-eindt ) ) .

      po_schedulex = VALUE #( BASE po_schedulex (  po_item = lv_ebelp
                                                   sched_line = 1
                                                   po_itemx = 'X'
                                                   sched_linex = 'X'
                                                   del_datcat_ext = 'X'
                                                   delivery_date = 'X' ) ) .

      po_account = VALUE #( BASE po_account (  po_item = lv_ebelp
                                               serial_no = 1
                                               orderid = |{ lw_wa-aufnr ALPHA = IN WIDTH = 10 }|
                                               gl_account = |{ lw_wa-sakto ALPHA = IN WIDTH = 10 }|
                                               costcenter = |{ lw_wa-kostl ALPHA = IN WIDTH = 10 }|  ) ) .
      po_accountx = VALUE #( BASE po_accountx (  po_item = lv_ebelp
                                                 serial_no = 1
                                                 po_itemx = 'X'
                                                 serial_nox = 'X'
                                                 orderid = 'X'
                                                 gl_account = 'X'
                                                 costcenter = 'X' ) ) .

    ENDLOOP.

    IF p1 = 'X' .
      CALL FUNCTION 'BAPI_PO_CREATE1'
        EXPORTING
          poheader         = po_hdr
          poheaderx        = po_hdrx
          testrun          = p_test
        IMPORTING
          exppurchaseorder = lv_ebeln
        TABLES
          return           = lt_return
          poitem           = po_item
          poitemx          = po_itemx
          poaccount        = po_account
          poaccountx       = po_accountx
          poschedule       = po_schedule
          poschedulex      = po_schedulex
          extensionin      = po_extensionin.
    ELSEIF p2 = 'X' .
      CALL FUNCTION 'BAPI_PO_CHANGE'
        EXPORTING
          purchaseorder = lw_wa-ebeln
          poheader      = po_hdr
          poheaderx     = po_hdrx
          testrun       = p_test
*        IMPORTING
*         exppurchaseorder = lv_ebeln
        TABLES
          return        = lt_return
          poitem        = po_item
          poitemx       = po_itemx
          poaccount     = po_account
          poaccountx    = po_accountx
          poschedule    = po_schedule
          poschedulex   = po_schedulex
          extensionin   = po_extensionin.
    ENDIF.

    PERFORM frm_collect_message TABLES lt_return CHANGING lv_msg lv_type.


    IF p1 = 'X'.
      IF lv_type = 'S' AND lv_ebeln IS NOT INITIAL.
        lt_ztmm017[] = VALUE #( BASE lt_ztmm017 ( bednr = lw_wa-bednr
                                                ebeln = lv_ebeln ) ).
        IF lt_ztmm017[] IS NOT INITIAL.
          MODIFY ztmm017 FROM TABLE lt_ztmm017[].
          IF sy-subrc EQ 0.
            COMMIT WORK AND WAIT.
          ENDIF.
        ENDIF.
      ENDIF.
      LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE bednr = lw_wa-bednr .
        <fs_out>-ebeln = lv_ebeln.
        <fs_out>-bapi_mtype = lv_type.
        IF lv_type = 'S'.
          <fs_out>-status = icon_green_light.
          <fs_out>-bapi_msg = '订单' && lv_ebeln  && '创建成功' && lv_msg.
        ELSE.
          <fs_out>-status = icon_red_light.
          <fs_out>-bapi_msg =  lv_msg.
        ENDIF.
      ENDLOOP.
    ELSE.
      LOOP AT gt_out ASSIGNING <fs_out> WHERE ebeln = lw_wa-ebeln .
        <fs_out>-bapi_mtype = lv_type.

        IF lv_type = 'S'.
          <fs_out>-status = icon_green_light.
          <fs_out>-bapi_msg = '订单' && lv_ebeln  &&  '修改成功' .
        ELSE.
          <fs_out>-status = icon_red_light.
          <fs_out>-bapi_msg =  lv_msg.
        ENDIF.
      ENDLOOP.
    ENDIF.

    CLEAR:po_hdr,po_hdrx,lv_ebeln,lv_msg,lv_type,lv_ebelp.
    REFRESH:po_item,po_itemx,po_account,po_accountx,lt_return,po_schedule,po_schedulex,po_extensionin,po_account,po_accountx,lt_ztmm017.
  ENDLOOP.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_collect_message
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LT_RETURN
*&      <-- O_RETURN
*&      <-- LV_TYPE
*&---------------------------------------------------------------------*
FORM frm_collect_message  TABLES   pt_ret STRUCTURE bapiret2
                          CHANGING pv_msg TYPE bapi_msg
                                   pv_flag TYPE bapi_mtype.


  DATA:lv_string TYPE string.

  IF line_exists( pt_ret[ type = 'E' ] ) OR
     line_exists( pt_ret[ type = 'A' ] ).

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    LOOP AT pt_ret INTO DATA(pw_ret) .
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = pw_ret-id
          msgnr               = pw_ret-number
          msgv1               = pw_ret-message_v1
          msgv2               = pw_ret-message_v2
          msgv3               = pw_ret-message_v3
          msgv4               = pw_ret-message_v4
        IMPORTING
          message_text_output = lv_string.
      CONCATENATE pv_msg lv_string INTO pv_msg.
    ENDLOOP.
    pv_flag = 'E'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    pv_flag = 'S'.

  ENDIF.

ENDFORM.

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值