【SAP-ABAP】MIRO--界面增强增加数据导出导入按钮

需求:在MIRO界面当中增加两个按钮,按钮功能为:可以将对应的行项目信息导出和导入,因为实际业务中,可能存在大批量采购订单开票的情况,无法做到数据对账,所以用此功能来解决问题。

效果截图:

此方法用到修改了标准屏幕,一般没啥影响,胆子小或者经常升级的可以酌情考虑是否做这样的需求(要给SAP去魅,再厉害的软件终究是软件,没什么不能做的)

第一步:找到程序及屏幕

Se93->miro:确认程序为SAPLMR1M

第二步:SE80输入程序,确认一下具体的屏幕6310

别问我怎么找到这个屏幕的,你指定到行项目,试试F1瞅瞅

第三步:给标准屏幕增加两个按钮(放心改,领导同意了,怕啥)

点击格式,修改,增加按钮,给按钮命名

第四步:找一下屏幕的增强位置,双击6310屏幕中的MODULE fcode_6310.

第五步:在fcode_6310(LMR1MI30)里面找一下增强点

第六步:找到对应的位置创建增强,大概在这个位置吧

第七步:码上增强代码(天下代码一大抄,抄抄抄)

复制代码
ENHANCEMENT 1  ZTEST_004.    "active version



  TYPES:

* 内容

   BEGIN OF TYP_DRSEG,

    RBLGP TYPE DRSEG-RBLGP,"项目

    WRBTR TYPE DRSEG-WRBTR,"金额

    MENGE TYPE DRSEG-MENGE,"数量

    MEINS TYPE DRSEG-MEINS,"单位

    EBELN TYPE DRSEG-EBELN,"采购订单

    EBELP TYPE DRSEG-EBELP,"采购订单项目

    TXZ01 TYPE DRSEG-TXZ01,"描述

    LFBNR TYPE DRSEG-LFBNR,"参考凭证

    MATNR TYPE DRSEG-MATNR,"物料号

     MWSKZ TYPE DRSEG-MWSKZ,"税码

     BPMNG TYPE DRSEG-BPMNG,"订单单价数量

     BPRME TYPE DRSEG-BPRME,"采购订单价格单位

     BUDAT TYPE MKPF-BUDAT,"过账日期

   END OF TYP_DRSEG,

* 表头行

  BEGIN OF TYP_HEAD,

    NAME(20),

  END OF TYP_HEAD.



* 临时数据

  DATA:

    ls_drsegt TYPE typ_drseg,

    LT_drsegt TYPE TABLE OF typ_drseg,

    LS_HEAD TYPE TYP_HEAD,

    LT_HEAD TYPE TABLE OF TYP_HEAD,

    LS_MKPF TYPE MKPF.



  DATA: WA_OBJDATA     LIKE WWWDATATAB,

        LV_FILENAME    TYPE STRING VALUE 'ZMIR7' ,

        LV_FULLPATH    TYPE STRING,

        LV_PATH        TYPE STRING.

  IF ok-code = 'ZEXPORT'.

    CLEAR ok-code.

    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG

      EXPORTING

        DEFAULT_EXTENSION    = 'XLS'

        DEFAULT_FILE_NAME    = LV_FILENAME

      CHANGING

        FILENAME             = LV_FILENAME

        PATH                 = LV_PATH

        FULLPATH             = LV_FULLPATH

      EXCEPTIONS

        CNTL_ERROR           = 1

        ERROR_NO_GUI         = 2

        NOT_SUPPORTED_BY_GUI = 3

        OTHERS               = 4.

    IF LV_FULLPATH = ''.

      MESSAGE E001(ZMM4001) WITH TEXT-M13.

      "文件路径错误

    ENDIF.

*

    IF SY-SUBRC = 0.

      CLEAR LT_HEAD.



      LS_HEAD-NAME = '项目(不允许修改)'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '金额'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '数量'.

      APPEND LS_HEAD TO LT_HEAD.

      LS_HEAD-NAME = '订单单位'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '采购订单'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '采购订单项目'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '采购订单文本'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '参考凭证'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '物料号'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '税码'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '订单单价数量'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '采购订单价格单位'.

      APPEND LS_HEAD TO LT_HEAD.



      LS_HEAD-NAME = '过账日期'.

      APPEND LS_HEAD TO LT_HEAD.



      REFRESH lt_drsegt.

      LOOP AT ydrseg.

         MOVE-CORRESPONDING ydrseg to ls_drsegt.

         SELECT SINGLE * FROM MKPF INTO LS_MKPF WHERE MBLNR = ydrseg-LFBNR.

         ls_drsegt-BUDAT = LS_MKPF-BUDAT.

         APPEND ls_drsegt TO lt_drsegt.

         CLEAR ls_drsegt.

      ENDLOOP.



      CALL FUNCTION 'GUI_DOWNLOAD'

        EXPORTING

*         BIN_FILESIZE                    =

          FILENAME                        = LV_FULLPATH

*         FILETYPE                        = 'ASC'

*         APPEND                          = ' '

          WRITE_FIELD_SEPARATOR           = 'X'

*         HEADER                          = '00'

*         TRUNC_TRAILING_BLANKS           = ' '

*         WRITE_LF                        = 'X'

*         COL_SELECT                      = ' '

*         COL_SELECT_MASK                 = ' '

*         DAT_MODE                        = ' '

*         CONFIRM_OVERWRITE               = ' '

*         NO_AUTH_CHECK                   = ' '

*         CODEPAGE                        = ' '

*         IGNORE_CERR                     = ABAP_TRUE

*         REPLACEMENT                     = '#'

*         WRITE_BOM                       = ' '

*         TRUNC_TRAILING_BLANKS_EOL       = 'X'

*         WK1_N_FORMAT                    = ' '

*         WK1_N_SIZE                      = ' '

*         WK1_T_FORMAT                    = ' '

*         WK1_T_SIZE                      = ' '

*         WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE

*         SHOW_TRANSFER_STATUS            = ABAP_TRUE

*         VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'

*       IMPORTING

*         FILELENGTH                      =

        TABLES

          DATA_TAB                        = lt_drsegt

          FIELDNAMES                      = LT_HEAD

       EXCEPTIONS

         FILE_WRITE_ERROR                = 1

         NO_BATCH                        = 2

         GUI_REFUSE_FILETRANSFER         = 3

         INVALID_TYPE                    = 4

         NO_AUTHORITY                    = 5

         UNKNOWN_ERROR                   = 6

         HEADER_NOT_ALLOWED              = 7

         SEPARATOR_NOT_ALLOWED           = 8

         FILESIZE_NOT_ALLOWED            = 9

         HEADER_TOO_LONG                 = 10

         DP_ERROR_CREATE                 = 11

         DP_ERROR_SEND                   = 12

         DP_ERROR_WRITE                  = 13

         UNKNOWN_DP_ERROR                = 14

         ACCESS_DENIED                   = 15

         DP_OUT_OF_MEMORY                = 16

         DISK_FULL                       = 17

         DP_TIMEOUT                      = 18

         FILE_NOT_FOUND                  = 19

         DATAPROVIDER_EXCEPTION          = 20

         CONTROL_FLUSH_ERROR             = 21

         OTHERS                          = 22 .

      IF SY-SUBRC <> 0.

*   Implement suitable error handling here

      ENDIF.

    ENDIF.

  ENDIF.



IF ok-code = 'ZIMPORT'.

  CLEAR ok-code.

  DATA: L_FILETAB   TYPE FILETABLE,

        L_RC        TYPE I.

  DATA PC_FILE(80).

  CLEAR L_FILETAB.

  REFRESH L_FILETAB.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG

    EXPORTING

      DEFAULT_FILENAME     = '*.xls'

      INITIAL_DIRECTORY    = 'D:\'

      MULTISELECTION       = ''

    CHANGING

      FILE_TABLE           = L_FILETAB

      RC                   = L_RC

    EXCEPTIONS

      CNTL_ERROR           = 1

      ERROR_NO_GUI         = 2

      NOT_SUPPORTED_BY_GUI = 3

      OTHERS               = 4.

  CHECK L_RC EQ 1.

  READ TABLE L_FILETAB INDEX 1 INTO PC_FILE.



  TYPES:truxs_t_text_data2(4096) type c occurs 0.

* 临时变量

  DATA:lv_index TYPE sy-tabix,

       LIT_RAW TYPE TRUXS_T_TEXT_DATA2,

       LV_FILE TYPE RLGRAP-FILENAME.



  LV_FILE = PC_FILE.

  REFRESH lt_drsegt.

* 读取文件数据

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

    EXPORTING

*     I_FIELD_SEPERATOR          =

      I_LINE_HEADER              = 'X'

      I_TAB_RAW_DATA             = LIT_RAW

      I_FILENAME                 = LV_FILE

    TABLES

      I_TAB_CONVERTED_DATA       = lt_drsegt

   EXCEPTIONS

     CONVERSION_FAILED          = 1

     OTHERS                     = 2

            .

  IF SY-SUBRC <> 0.

     MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO DISPLAY LIKE 'E'

             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

     LEAVE LIST-PROCESSING.

  ENDIF.



  CHECK lt_drsegt[] IS NOT INITIAL.



  LOOP AT  ydrseg.

    lv_index = sy-tabix.

    READ TABLE lt_drsegt INTO lS_drsegt WITH KEY RBLGP = ydrseg-RBLGP.

    IF SY-SUBRC <> 0.

      DELETE ydrseg index lv_index.

    ELSE.

      ydrseg-WRBTR = lS_drsegt-WRBTR."金额

      ydrseg-MENGE = lS_drsegt-MENGE."数量

      MODIFY ydrseg INDEX lv_index

      TRANSPORTING WRBTR

                   MENGE.



    ENDIF.

  ENDLOOP.

ENDIF.

ENDENHANCEMENT.
相关推荐
LilySesy6 小时前
【案例总结】幽灵单据——消失的交货单号
数据库·ai·oracle·编辑器·sap·abap
SAP工博科技14 天前
SAP ERP与微软ERP dynamics对比,两款云ERP产品有什么区别?
microsoft·sap·erp·dynamics
修电脑的猫21 天前
Performance Monitoring on Production Systems in SAP ERP(ABAP性能优化)
性能优化·abap
LilySesy24 天前
ABAP+&SFSY-FORMPAGES&变成星号
经验分享·sap·abap·erp系统·smartforms
一只团子(Lucas Chu)1 个月前
跟着团子学SAP PS:SAP项目型制造方案补充方案-SAP PMMO简介
sap·ps·eppm
小哥来啦1 个月前
SAP 生产订单报工检查报错异常(接口)
sap·co11n·co13
SAP-nkGavin2 个月前
ABAP设计模式之---“童子军法则(The Boy Scout Rule)”
设计模式·sap·abap
SAP-nkGavin2 个月前
简单说一说Modern ABAP这个概念
sap·abap
爱喝水的鱼丶2 个月前
SAP-ABAP:在DEBUG过程中修改内表中的数据的方法详解
运维·开发语言·sap·异常处理·abap·修改内表
爱喝水的鱼丶2 个月前
SAP-ABAP:ABAP异常处理与SAP现代技术融合—— 面向云原生、微服务与低代码场景的创新实践
开发语言·低代码·微服务·云原生·sap·abap