1.excel表格上传

*&---------------------------------------------------------------------*
** 程序名称:ZSDR0076
** 程序描述:
** 创建人 :ZHAIMING
** 创建日期:
*&---------------------------------------------------------------------*
** 修改记录:
** 序号:1 日期: 修改人:
** 描述:
*&---------------------------------------------------------------------*
REPORT ZSDR0076. *----------------------------------------------------------------------*
* SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-.
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 <> .
MESSAGE '读取EXCEL文件出错!' TYPE 'S'.
STOP.
ELSE.
READ TABLE IT_FILETABLE INTO WA_FILETABLE INDEX .
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 .
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 , "Beginning row of excel file
C_BEGIN_COL TYPE I VALUE , "Beginning column of excel file
C_END_ROW TYPE I VALUE , "Ending row of excel file
C_END_COL TYPE I VALUE . "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 =
UPLOAD_OLE =
OTHERS = .
IF SY-SUBRC <> .
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 .
ELSE.
DELETE I_EXCEL WHERE ROW = ''.
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的余数。
 
 

ABAP(笔记)的更多相关文章

  1. ABAP笔记

    ABAP程序开发,经常会遇到报表开发需求.使用ABAP的Report类型程序开发报表十分便利,用很少的代码就可以快速开发出一个报表.这种报表需求,抛开各种细枝末节,都可以归结为“三步走”:1.选择屏幕 ...

  2. ABAP知识点笔记

    1,获取光标所在行 READ TABLE TD_ALV_DATA INTO TH_ALV_DATA INDEX RS_SELFIELD-TABINDEX. 2,获取alv可编辑单元格内容 DATA: ...

  3. SAP CRM 项目笔记(一) SOW(工作说明书)讨论

    前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...

  4. Jerry的ABAP原创技术文章合集

    我之前发过三篇和ABAP相关的文章: 1. Jerry的ABAP, Java和JavaScript乱炖 这篇文章包含我多年来在SAP成都研究院使用ABAP, Java和JavaScript工作过程中的 ...

  5. 使用ABAP批量下载有道云笔记中的图片

    Jerry喜欢用有道云笔记这款软件做自己的知识管理和知识体系的构建. 当您看到一篇好的有道云笔记分享时,可能会想将其精美的图片下载到本地.作为程序猿,我们不会去手动一张张下载.写个程序帮我们自动下载吧 ...

  6. N个小时学SAP ABAP

    接触SAP已将近3年了,期间ABAP资料也看了不少,都是东看一点.西看一点的,也没做个笔记之类的,很明显效果不是很好.今天突然间领悟到了一点:不能再这样漫无目的的学习了,应该一本书一本书的看,否则就太 ...

  7. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

随机推荐

  1. AndroidStudio Gradle版本不匹配问题

    报错信息: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } Error:(1, 1) A problem occurr ...

  2. 几MB的大图片变成几百KB

    使用windows自带的“画图”工具就可以. 1.用“画图”打开图片. 2.点击“重新调整大小” 弹出如下窗口 修改这里的“水平”和“垂直”,如都从100改为30.改完之后,点击确定,最后再“保存”或 ...

  3. asp.net viewstate的模拟登陆

    其实 VIEWSTATE 不用太在意,倒是 JTCookieID 需要注意,这个才应该是服务器上用来维护 Session 的那个 Cookie.所以,你用 httpclient 的时候,不能上来就直接 ...

  4. SQL 维护用得到的监控语句

    使用DMV来分析SQL Server启动以来累计使用CPU资源最多的语句.例如下面的语句就可以列出前50名 s2.dbid, ( , ( ( ) )) AS sql_statement, execut ...

  5. QT类库与Delphi类库的体系结构对比——两者十分类似!

    今天在看QT对象内存管理的一篇文章时:http://blog.csdn.net/dbzhang800/article/details/6300025想到了一个问题:就是QT类库体系结构与Delphi类 ...

  6. USACO3.35A Game(记忆化)

    刚开始理解有点误,想成每步都是最优的 ,结果卡在第六组数据上,, 无奈瞧了下别人的 发现自己理解错了,,我看的还是中文翻译.. 简单的记忆化 /* ID: shangca2 LANG: C++ TAS ...

  7. DevExpress之lookupedit

    DevExpress中的lookupedit的使用方法. 绑定数据源:     lookupedit.properties.valuemember = 实际要用的字段;   //相当于editvalu ...

  8. 在Code First中使用Migrations对实体类和数据库做出变更

    在Code First中使用Migrations对实体类和数据库做出变更,Mirgration包含一系列命令. 工具--库程序包管理器--程序包管理器控制台 运行命令:Enable-Migration ...

  9. objective-c中点语法的使用

    点语法的作用:提供一种访问属性的setter和getter的机制. 用法举例: 1.创建一个Person类,并声明属性.在person.h中. 2.实现一个init方法,并使用点语法等.在pers.m ...

  10. Web---session技术代码演示(request,session,servletContext)

    Session会话简介与基本知识点 当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户. 会话是指在一段 ...