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. sublimeformaya

      网上没有找到这样的插件自己造了一个 https://github.com/jonntd/connectionmaya   附件列表

  2. uublog在线测试demo

    http://demo.uublog.me/ 后台 http://demo.uublog.me/admin/ 用户名/密码:admin/admin

  3. Mysql安装过程(linux:2.6.18-194.el5,Mysql:)

    1.安装[root@RAC2 mysql]# rpm -ivh MySQL-server-5.6.12-2.rhel5.x86_64.rpm Preparing... ################ ...

  4. JAVA 时间差距,两个时间相差多少天,时,分,秒

    JAVA 时间差距,两个时间相差多少天,时,分,秒 package io; import java.text.DateFormat; import java.text.ParseException; ...

  5. SET NOCOUNT用法

    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数). 当 SET NOCOUNT 为 OFF 时,返回计数. 如果存储过程中包含的一些语句并不返回 ...

  6. linux网络配置正确,能够ping通内网地址,无法打开外网网页

    在虚拟机里面装了linux后,发现内网能访问,外网访问不了. 首先确定网络配置没有问题,并且能够访问外网,通过以下方法进行确认: [root@localhost ~]# more /etc/sysco ...

  7. Jquery IE 缓存问题

    jQuery IE缓存问题 解决方法: 1.在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数 在javascript发送的URL后加上t=Math.random() 例如这样:URL+”& ...

  8. Android中的Parcel机制 实现Bundle传递对象

    Android中的Parcel机制    实现了Bundle传递对象    使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parc ...

  9. 两个有关Knockout自定义拓展方法fn的小技巧

    Adding custom functions using "fn" 让observable自增/自减 最简单的方法是self.num(self.num() + 1), 但是这个写 ...

  10. Apache benchmark 压力测试工具

    ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求. 安装apa ...