[ABAP]开发常用组件

文件对话框选择文件


DATA P_FILE  TYPE RLGRAP-FILENAME."设置为全局变量

DATA:"局部变量
          L_RC       TYPE I,
          L_FILETABLE  TYPE FILETABLE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE              = '选择文件'
      DEFAULT_EXTENSION  = 'xls'
      FILE_FILTER                    = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
      MULTISELECTION           = ''
    CHANGING
      FILE_TABLE                     = L_FILETABLE  " 文件名(全路径)
      RC                                      = L_RC.
  IF SY-SUBRC = 0 AND L_RC = 1.
    READ TABLE L_FILETABLE INTO P_FILE INDEX 1."读取一个文件
  ENDIF.

进度 和 将excel数据传输到内表

DATA:   IT_RAW   TYPE TRUXS_T_TEXT_DATA.
  CLEAR   IT_RAW.
  REFRESH IT_RAW[].
  REFRESH IT_EXCEL.


  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' "进度条
     EXPORTING
       PERCENTAGE = 0
       TEXT       = '正在上载Excel文件并检查数据,请等待......'.


  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      I_LINE_HEADER        = 'X'    "X表示带抬头行的EXCEL的抬头行不传进内表,否则EXCEL不要带抬头
      I_TAB_RAW_DATA       = IT_RAW " WORK TABLE
      I_FILENAME           = P_FILE
    TABLES
      I_TAB_CONVERTED_DATA = IT_EXCEL "EXCEL表格内容上传到IT
    EXCEPTIONS
      CONVERSION_FAILED    = 1 "转化失败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.

重画alv

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IS_LAYOUT                = LAYOUT
      IT_FIELDCAT              = FIELDCAT[]
    TABLES
      T_OUTTAB                 = IT_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.
FORM USER_COMMAND USING R_UCOMM     LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
*------------ 刷新ALV--------------------
  DATA: LV_ANSWER TYPE C,
       LV_QUESTION(200) TYPE C.

  DATA REF1 TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = REF1.
  CALL METHOD REF1->CHECK_CHANGED_DATA.
  RS_SELFIELD-REFRESH = 'X'.

  CASE R_UCOMM.
    WHEN '&IC1'. "双击物料号,跳转进入VA02的详细信息
      CASE RS_SELFIELD-FIELDNAME.
        WHEN 'VBELN'.
          SET PARAMETER ID 'AUN' FIELD RS_SELFIELD-VALUE.     "将订单号传递给 VA02中要输入的选项
          CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.      "调用T-CODE MM02 并跳过第一个需要输入的屏幕,直接进入物料显示界面
      ENDCASE.
    WHEN 'EXE'.
      LV_QUESTION = '确认要更新交货日期?'. "是否修改交货日期确认对话框

      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          TEXT_QUESTION         = LV_QUESTION
          DISPLAY_CANCEL_BUTTON = ''
          DEFAULT_BUTTON        = '2'
        IMPORTING
          ANSWER                = LV_ANSWER
        EXCEPTIONS
          TEXT_NOT_FOUND        = 1
          OTHERS                = 2.
      CHECK LV_ANSWER = 1.
      PERFORM PROCESS_DATA."处理数据
    WHEN 'BACK'.
      LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0 .
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN  'ALL'.
      CLEAR WA_OUT.
        LOOP AT IT_OUT INTO WA_OUT .
        IF  WA_OUT-CHECK = ' '.
         WA_OUT-CHECK = 'X'.
         MODIFY IT_OUT FROM WA_OUT.
        ENDIF.
          ENDLOOP.
    WHEN 'SAL'.
      CLEAR WA_OUT.
        LOOP AT IT_OUT INTO WA_OUT .
        IF  WA_OUT-CHECK = 'X'.
         WA_OUT-CHECK = ' '.
         MODIFY IT_OUT FROM WA_OUT.
        ENDIF.
          ENDLOOP.
  ENDCASE.

ENDFORM.                    "USER_COMMAND

需要重新设置两个form 一个叫 SET_PF_STATUS 另一个叫USER_COMMAND 这是用来设置gui的状态栏和按键事件 因为此时不是开始的屏幕

确认对话框

CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          TEXT_QUESTION         = LV_QUESTION
          DISPLAY_CANCEL_BUTTON = ''
          DEFAULT_BUTTON        = '2'
        IMPORTING
          ANSWER                = LV_ANSWER
        EXCEPTIONS
          TEXT_NOT_FOUND        = 1
          OTHERS                = 2.
      CHECK LV_ANSWER = 1.
      PERFORM PROCESS_DATA."处理数据

创建或者修改物料主数据


  DATA:FLAG TYPE C,
       MESSAGE TYPE MAKTX.
  CLEAR WA_OUT.
  DATA: HEADDATA LIKE BAPIMATHEAD,
        STORAGELOCATIONDATA LIKE BAPI_MARD,
        STORAGELOCATIONDATAX LIKE BAPI_MARDX.

  DATA RETURN LIKE BAPIRET2.


  LOOP AT IT_OUT INTO WA_OUT .
    IF WA_OUT-CHECK <> 'X' .
      WA_OUT-FLAG = 'E'.
      WA_OUT-MESSAGE = '未被选中'.
      MODIFY IT_OUT FROM WA_OUT.
    ELSE.

      HEADDATA-MATERIAL = WA_OUT-MATNR.
      HEADDATA-WAREHOUSE_VIEW = 'X'.
      STORAGELOCATIONDATA-PLANT = WA_OUT-WERKS.
      STORAGELOCATIONDATA-STGE_LOC = WA_OUT-LGORT.
      STORAGELOCATIONDATA-STGE_BIN = WA_OUT-LGPBE.
      STORAGELOCATIONDATAX-PLANT =  WA_OUT-WERKS.
      STORAGELOCATIONDATAX-STGE_LOC =  WA_OUT-LGORT.
      STORAGELOCATIONDATAX-STGE_BIN =  'X'.
      CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
        EXPORTING
          HEADDATA                    = HEADDATA
         STORAGELOCATIONDATA         = STORAGELOCATIONDATA
         STORAGELOCATIONDATAX        = STORAGELOCATIONDATAX
       IMPORTING
         RETURN                      = RETURN
                .
      IF RETURN-TYPE = 'E'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        WA_OUT-FLAG ='失败'.
        MODIFY IT_OUT FROM WA_OUT.
      ELSEIF RETURN-TYPE = 'S'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        WA_OUT-FLAG ='成功'.
        MODIFY IT_OUT FROM WA_OUT.
      ENDIF.

    ENDIF.
  ENDLOOP.

猜你喜欢

转载自www.cnblogs.com/tailiang/p/11797308.html