zoukankan      html  css  js  c++  java
  • ABAP(笔记)

    1.excel表格上传

    *&---------------------------------------------------------------------*
    ** 程序名称:ZSDR0076
    ** 程序描述:
    ** 创建人  :ZHAIMING
    ** 创建日期:
    *&---------------------------------------------------------------------*
    ** 修改记录:
    ** 序号:1  日期:   修改人:
    ** 描述:
    *&---------------------------------------------------------------------*
    REPORT ZSDR0076.
    
    
    
    *----------------------------------------------------------------------*
    * SCREEN
    *----------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
      PARAMETERS: P_FILE  LIKE RLGRAP-FILENAME.
    SELECTION-SCREEN END OF BLOCK BL1.
    
    *----------------------------------------------------------------------*
    * AT SELECTION-SCREEN
    *----------------------------------------------------------------------*
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      PERFORM FRM_VALUE_REQUEST.
    
    *----------------------------------------------------------------------*
    * START-OF-SELECTION.                                                  *
    *----------------------------------------------------------------------*
    START-OF-SELECTION.
    
      PERFORM FRM_UPLOAD_DATA.
      PERFORM FRM_CALL_BAPI.
    
    
    *&---------------------------------------------------------------------*
    *&      Form  FRM_VALUE_REQUEST
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM FRM_VALUE_REQUEST .
      DATA: WA_FILETABLE TYPE FILE_TABLE,
            IT_FILETABLE TYPE FILETABLE,
            V_RC         TYPE SY-SUBRC.
    
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
          WINDOW_TITLE      = '请选择导入文件'
          DEFAULT_EXTENSION = 'XLS'
        CHANGING
          FILE_TABLE        = IT_FILETABLE
          RC                = V_RC
          .
      IF SY-SUBRC <> 0.
        MESSAGE '读取EXCEL文件出错!' TYPE 'S'.
        STOP.
      ELSE.
        READ TABLE IT_FILETABLE INTO WA_FILETABLE INDEX 1.
        P_FILE = WA_FILETABLE-FILENAME.
      ENDIF.
        
      IF P_FILE IS INITIAL.
        MESSAGE '请选择导入的文件' TYPE 'S'.
        STOP.
      ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_UPLOAD_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM FRM_UPLOAD_DATA .
      DATA: BEGIN OF I_EXCEL OCCURS 0.
              INCLUDE STRUCTURE ALSMEX_TABLINE.
      DATA: END OF I_EXCEL.
      DATA: L_ANSWER TYPE CHAR1.
      DATA: L_COLUMN TYPE I.
      DATA: L_PATHNAME LIKE RLGRAP-FILENAME.
      DATA: C_BEGIN_ROW TYPE I VALUE 1,       "Beginning row of excel file
            C_BEGIN_COL TYPE I VALUE 1,       "Beginning column of excel file
            C_END_ROW   TYPE I VALUE 1000,   "Ending row of excel file
            C_END_COL   TYPE I VALUE 9.      "Ending column of excel file
      FIELD-SYMBOLS: <FS>.
    
      MOVE P_FILE TO L_PATHNAME.
    
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          FILENAME                = L_PATHNAME
          I_BEGIN_COL             = C_BEGIN_COL
          I_BEGIN_ROW             = C_BEGIN_ROW
          I_END_COL               = C_END_COL
          I_END_ROW               = C_END_ROW
        TABLES
          INTERN                  = I_EXCEL
        EXCEPTIONS
          INCONSISTENT_PARAMETERS = 1
          UPLOAD_OLE              = 2
          OTHERS                  = 3.
      IF SY-SUBRC <> 0.
        MESSAGE '读取EXCEL文件出错!' TYPE 'E'.
      ELSE.
        IF I_EXCEL[] IS INITIAL.
          CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
            EXPORTING
              DIAGNOSETEXT1 = '数据为空!'
              TEXTLINE1     = '请检查文件是否正确'
              TITEL         = '警告'
            IMPORTING
              ANSWER        = L_ANSWER
              .
          LEAVE TO SCREEN 0.
        ELSE.
          DELETE I_EXCEL WHERE ROW = '0001'.
          SORT I_EXCEL BY ROW COL.
          LOOP AT I_EXCEL.
            MOVE I_EXCEL-COL TO L_COLUMN.
            ASSIGN COMPONENT L_COLUMN OF STRUCTURE  TO <FS>.
            MOVE I_EXCEL-VALUE TO <FS>.
            AT END OF ROW.
              APPEND .
              CLEAR .
            ENDAT.
          ENDLOOP.
        ENDIF.
      ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_CALL_BAPI
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM FRM_CALL_BAPI .
    
    ENDFORM.

    1.DESCRIBE TABLE itab LINES wrk_n.  

            将内表的行数赋值给wrk_n。

    2.wrk_n = LINES( itab ).

            内表作为函数LINES的参数,返回itab的行数给wrk_n。

            注意,itab的前后各有一个空格,否则会提示LINES未定义的错误信息。

    3.使用AT new f 是  f 必须为内表的第一个字段  ,AT NEW f   会判断 f 字段左边的字段是否为新值。

    4. BDC更新模式

    "A" 显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。 
    "E" 只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。 
    "N" 不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为 1001,sy-msgty 为 "S"、sy-msgid 为 "00"、sy-msgno 为 "344"、sy-msgv1 为 "SAPMSSY3"、sy-msgv2 为 "0131"。 
    "P" 不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。 
     
    更新模式,有下列可选值(更新模式常用的是S) 
     
    "A" 异步更新。被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。 
    "S" 同步更新。被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。 
    "L" 本地更新。被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。
     
    5. sy-repid 与 sy-cprog 的区别
     
    1. sy-repid is the name of the current program.
        sy-cprog is the name of the calling program.

       比如在一个Function里面设置断点,sy-repid的这个FM所在FunctionPool的名字,sy-cprog是调用这个FM的Report的程序名。

    2. sy-repid 不可以人为更改,sy-cprog可以
     
    6. div / mod
     
    1、div
    div是用于取两数相除的商的,c = a div b,得到的c的值就是a除b的商。
    2、/
    / 是用于取两数相除的结果的。c = a / b,如果c是i数据类型的,这个语法会进行四舍五入的。
    3、mod
    mod 是用于取两数相除的余数,c = a mod b,得到的c的值的就是a除b的余数。
     
     
  • 相关阅读:
    Arduino-串口函数Serial
    声之翼——超声波模块
    Arduino入门教程--课前准备--Arduino驱动安装及1.0 IDE菜单介绍
    光之触角——光敏电阻、光敏二极管、光敏三极管与光照发生器
    reactjs--父组件调用子组件的内部方法(转载)
    React怎么创建.babelrc文件
    第一课 矩阵的行图像与列图像(麻省理工公开课:线性代数)【转载】
    单片机引脚间状态传递(非转载)
    sublime text2卸载和重新安装(转载)
    C语言头文件怎么写?(转载)
  • 原文地址:https://www.cnblogs.com/mingdashu/p/4536473.html
Copyright © 2011-2022 走看看