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的余数。
 
 
posted @ 2015-05-28 17:25  明大叔  阅读(1110)  评论(0编辑  收藏  举报