SAPABAP开发基础自写留用.docx
学习顺序数据类型域什么什么的字符串结构内表OpenSQL函数子程序报表一、 T-CODESE80 对象浏览器SE38 写程序SE11 建表SE37 函数SM04 查看用户SE91message系统sy-uzeit 系统时间sy-datum 系统日期sy-datum 是 2010.10.10sy-datum+0(2) 是 20sy-datum+2(3) 是 101PSa-comun+29(11). 这也是偏移的操作sy-subrc 正常是0 ,不正常是<>0 或其他二、数据类型完整型d 日期 8 字节 YYYYMMDDt 时间 6 字节i 整型f 浮点型string 可变长的字符型非完整型非完整型c 字符型(若不指定长度默认是1 个字节)n 数字字符型p 小数(常用)(压缩数装载它的空间是(x+1 ) /2x 是原来装载它的长度 )datav1(5)typepdecimals2value123.45.三、各种定义基本格式DATA:XXTYPEYYVALUE ZZ 各种来了* 参照数据字典定义* 参照数据元素定义datav9typezdata_jg_20100325_01.* 参照数据库表的字段定义datav10typescarr-carrid.* 定义常量CONSTANTSc1TYPEiVALUE1.* 定义单值选侧屏幕PARAMETERSp1(8)TYPEndefaultAA.* 参照自定义类型定义变量TYPESt1(10)TYPEc.DATAv9TYPEt1.* 参照自定义变量定义变量DATAv10LIKEv9.* 参照数据字典中的 TYPEGROUP 定义数据类型TYPE-POOLSzjg01.datav20typezjg01_z1.定义结构DATA:BEGINOFwa,carridTYPEspfli-carrid,connidTYPEspfli-connid,cityfromTYPEspfli-cityfrom,citytoTYPEspfli-cityto,distanceTYPEspfli-distance, distidTYPEstring,ENDOFwa.根据结构定义内表DATAitabLIKETABLEOFwa.流程才$制-IFELSEIFa>12.WRITE: 他比 12 大 .ELSE.WRITE: 他比 12 小 .ENDIF.循环DO10TIMES.WRITE:/ 这是第,ie, 次.ie=ie+1.ENDDO.把内表循环到结构中LOOPATitabINTOwa.WRITE:/wa-id.ENDLOOP .内表各种操作 -collect在内表中一定有一个数值型的字段,而且其他字段均为字符型把数值型字段上的数加起来DATA:BEGINOFwa,a(4)TYPEc,b(4)TYPEc,cTYPEi,ENDOFwa.DATAitabLIKETABLEOFwa.wa-a=001.wa-b=0101.wa-c=100.*APPENDwaTOitab.COLLECTwaINTOitab.wa-a=002.wa-b=0201.wa-c=200.*APPENDwaTOitab.COLLECTwaINTOitab.wa-a=002.wa-b=0201.wa-c=100.*APPENDwaTOitab.COLLECTwaINTOitab.LOOPATitabINTOwa.WRITE:/wa-a,wa-b,wa-c.ENDLOOP .内表各种操作 -readLOOPATitab1INTOwa.READTABLE itab2 INTO wa1 WITHKEY carrid=wa-carrid.IFsy-subrc<>0.clearwa1.move-correspondingwatowa1.appendwa1toitab2.ENDIF.ENDLOOP .根据结构修改内表modifyitabfromwa.SQL 操作1 、把 SQL 结果放入内表中SELECTcarridconnidcityfromcitytodistancedistidFROMspfliINTO CORRESPONDINGFIELDSOFTABLE itab. 放到了内表中INTO CORRESPONDINGFIELDSOF wa. 放到了结构中2.1 、多表查询SELECTscarrcarridscarrcarrnamespfliconnidspflicityfrom spflicitytoFROM scarr INNERJOIN spfliON scarrcarrid=spflicarridINTOCORRESPONDINGFIELDSOFTABLEitab.2.2 、更多表查询SELECTspflicarridspfliconnidspflicityfromspflicitytosbookfldatesbookbookidsbookcustomidsbookcusttypescustomname scustomstreetFROMspfli INNERJOIN sbookON spflicarrid=sbookcarrid AND spfliconnid=sbookconnid INNERJOIN scustomON sbookcustomid=scustomidINTOCORRESPONDINGFIELDSOFTABLEitab.各种关键字APPENDwaTOitab. 把结构搞到内表中MOVETO 结构赋值modifyitabfromwa 根据结构修改内表MOVE-CORRESPONDINGstr1TOstr3. 同名字段赋值分支研究data:v1typeivalue1.v2typei.do50times.v2=v1*2.write:v1,v2.v1=v1+1.enddo.函数来了字符串操作CONCATENATE wa-fldatewa-week INTO wa-www SEPARATEDBY / 星期 .子程序 三种类型:值传递,值传递并返回* 1. 值传递 - 实参在传递过程中不发生改变,只是传递一个实参的拷贝,适用于值不能改变的单值,不适合内表参数传递。* 2. 值传递并返回结果-传递一个实参的拷贝,实参的拷贝发生改变,返回给实参,适合于可以改变的单值传递,不适合内表参数传递。* 3. 引用传递 -传递实参,子程序运行结束后,实参根据子程序运行结果,适合单值也适合内表。看看代码就知道怎么用了DATA:aTYPEi,bTYPEi,cTYPEi.PERFORMxUSINGa. 这是值传递PERFORMyCHANGINGb. 这是值传递改变PERFORMzCHANGINGc. 这是引用传递PERFORMxyzUSINGaCHANGINGbc.连起来就是这么用滴* 值传递和值传递引用改变需要写个value, 引用传递不需要FORMxyzUSINGvalue(f1)TYPEi 值传递CHANGINGvalue(f2)TYPEi 值传递改变f3TYPEi. 引用传递ENDFORM.* 如果传入的是内表,子程序中可以这么写FORMxyzCHANGINGp-itablikeitab.* 也可以这么写吧FORMxyzCHANGINGp-itabtypeitab.屏幕START-OF-SELECTION. "主程序开始了!WRITE:/text-001,sy-lsind.ATLINE-SELECTION.CASE sy-lsind.WHEN1.WRITE:/ 第一级详细列表,sy-lsind.WHEN2.WRITE:/ 第二级详细列表,sy-lsind.WHEN3.WRITE:/ 第三级详细列表,sy-lsind.ENDCASE.单值选择屏幕PARAMETERp1TYPEscarr-carridDEFAULTAA.多重选择屏幕TABLESscarr. 相当于 datascarrtypescarr.后面不是类型是变量SELECT-OPTIONSpiFORscarr-carrid.for* 下面是用法SELECTcarridcarrnameFROMscarrINTOCORRESPONDINGFIELDSOFTABLEitabWHEREcarridINpi.LOOPATitabINTOwa.WRITE:/wa-carrid,wa-carrname.ENDLOOP .data:v1typeivalue1.data:v2typeivalue1.data:v3typeivalue2.data:v4typeivalue3.dov1times.write:v1,-,v2.write:v1,-,v2.write:v1,-,v2.data:beginofwa1,ebeln(3)typec,dattyped,mengetypei,endofwa1.dataitabliketableofwa1.wa1-ebeln=001.wa1-dat=20070803.wa1-menge=10.appendwa1toitab.clearwa1.wa1-ebeln=001.wa1-dat=20070903.wa1-menge=20.appendwa1toitab.clearwa1.wa1-ebeln=002.wa1-dat=20080303.wa1-menge=20.appendwa1toitab.clearwa1.wa1-ebeln=003.wa1-dat=20080603.wa1-menge=30.appendwa1toitab.clearwa1.loopatitabintowa1.write:/wa1-ebeln,wa1-dat,wa1-menge.endloop.uline.data:beginofwa2,ebeln(3)typec,mengetypei,endofwa2.dataitab2liketableofwa2.loopatitabintowa1.move-correspondingwa1towa2.collectwa2intoitab2.endloop.loopatitab2intowa2.write:/wa2-ebeln,wa2-menge.endloop.sy-subrc 判断有没有东西condense 字符型 / 去空格forallentriesin 内表DATAwaLIKELINEOFitab./ 参照内表建结构sortitbycarridconnidfldate.deleteadjacentduplicatesfromitcomparingallfields.