S4语法整理

news/2024/11/8 16:48:16/

1. VALUE type( ... ),DATA(WA)

临时定义类型并且赋值给构造

  TYPES:BEGIN OF TY_TAB,ZCHAR1 TYPE C LENGTH 10,ZCHAR2 TYPE C LENGTH 10,ZCHAR3 TYPE C LENGTH 10,ZCHAR4 TYPE C LENGTH 10,END OF TY_TAB.DATA(WA) = VALUE TY_TAB( ZCHAR1 = '1' ZCHAR2 = '2' ZCHAR3 = '3' ZCHAR4 = '4' ).CL_DEMO_OUTPUT=>DISPLAY( WA ).

表赋值

  DATA:LT_TAB TYPE TT_TAB.LT_TAB = VALUE #( ( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )ZCHAR1 = '1' ( ZCHAR2 = '2' ZCHAR3 = '6' ZCHAR4 = '6' )( ZCHAR2 = '2' ZCHAR3 = '7' ZCHAR4 = '7' )ZCHAR1 = '1' ZCHAR2 = '3' ( ZCHAR3 = '6' ZCHAR4 = '6' )( ZCHAR3 = '7' ZCHAR4 = '7' )ZCHAR1 = '1' ZCHAR2 = '4' ( ZCHAR3 = '6' ZCHAR4 = '6' )( ZCHAR3 = '7' ZCHAR4 = '7' )).CL_DEMO_OUTPUT=>DISPLAY( LT_TAB ).

测试发现 括号的变量可以变少,但是不能变少之后再变多

内表追加数据

 

内表操作指定行赋值(不会改变系统变量SY-TABIX的值)

DATA(WA1) = LT_TAB[ 5 ].CL_DEMO_OUTPUT=>DISPLAY( WA1 ).

字符拼接

指针:

  ASSIGN COMPONENT L_I OF STRUCTURE WA1 TO FIELD-SYMBOL(<FS_TS>).ASSIGN LT_TAB[ 5 ] TO FIELD-SYMBOL(<FS>).READ TABLE LT_TAB ASSIGNING FIELD-SYMBOL(<FS_READ>) WITH  KEY ZCHAR1 = '3'.

内表数据读取(读取不到会抛异常,所以以下两种方法执行避免一种DUMP)

  TRY .DATA(WA3) = LT_TAB1[ ZCHAR1 = '1'  ].CATCH CX_SY_ITAB_LINE_NOT_FOUND INTO DATA(oref)  .DATA(STR11) = oref->GET_TEXT( ).WRITE:/ STR11.ENDTRY.IF line_exists( LT_TAB1[ ZCHAR1 = '1'  ] ).DATA(WA2) = LT_TAB1[ ZCHAR1 = '1'  ].ENDIF.

1.MOVE-CORRESPONDING

表或者字段之间相同字段赋值

*  MOVE-CORRESPONDING LT_TAB TO LT_TAB1.LT_TAB1 = CORRESPONDING #( LT_TAB ).CL_DEMO_OUTPUT=>DISPLAY( LT_TAB1 ).

2.FOR 写法及相关应用

TYPES:BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,COL3 TYPE I,END OF LINE,ITAB TYPE STANDARD TABLE OF LINE WITH EMPTY KEY.DATA(ITAB) = VALUE ITAB(FOR J = 11 THEN J * 10 UNTIL J > 4000( COL1 = J COL2 = J + 1 COL3 = J + 2 )).*  返回一个值DATA(TOTAL) = REDUCE I( INIT RES = 0 FOR WA IN ITAB WHERE ( COL1 < 1000 ) NEXT  RES = RES + WA-COL1 ).* 返回一个结构DATA(RESULT) = REDUCE LINE( INIT RES1 = VALUE LINE( COL2 = 0 COL3 = 9999999 )FOR WA IN ITAB WHERE ( COL1 IS NOT INITIAL )NEXT RES1-COL1 = RES1-COL1 + 1RES1-COL2 = NMAX( VAL1 = RES1-COL1 VAL2 = WA-COL2  )RES1-COL3 = NMIN( VAL1 = RES1-COL1 VAL2 = WA-COL3  )).CL_DEMO_OUTPUT=>DISPLAY( ITAB ).CL_DEMO_OUTPUT=>DISPLAY( TOTAL ).CL_DEMO_OUTPUT=>DISPLAY( RESULT ).

内表中满足条件的数据放到另一内表

  DATA(ITAB2) = VALUE ITAB( FOR WA IN ITAB WHERE ( COL1 < 1000 )(  COL1 = WA-COL1   COL2 = WA-COL2  COL3 = WA-COL3 )).CL_DEMO_OUTPUT=>DISPLAY( ITAB2 ).

LOOP GROUP BY

  TYPES:BEGIN OF TY_LINE,C1 TYPE C LENGTH 20,C2 TYPE C LENGTH 20,C3 TYPE C LENGTH 20,C4 TYPE I ,END OF TY_LINE,ITAB TYPE STANDARD TABLE OF TY_LINE WITH EMPTY KEY.DATA(ITAB) = VALUE ITAB(C1 = 'A' ( C2 = 'A' C3 = 'A' C4 = 1 )( C2 = 'B' C3 = 'B' C4 = 2 )( C2 = 'C' C3 = 'C' C4 = 3 )C1 = 'B' ( C2 = 'A' C3 = 'A' C4 = 1 )( C2 = 'B' C3 = 'B' C4 = 2 )( C2 = 'C' C3 = 'C' C4 = 3 )C1 = 'C' ( C2 = 'A' C3 = 'A' C4 = 1 )( C2 = 'B' C3 = 'B' C4 = 2 )( C2 = 'C' C3 = 'C' C4 = 3 )) .DATA(ITAB3) = VALUE ITAB( ).LOOP AT ITAB INTO DATA(WA) GROUP BY WA-C1.DATA(ITAB1) = VALUE ITAB( ).LOOP AT GROUP WA INTO DATA(WA1).  "遍历分组后得结果机ITAB1  = VALUE ITAB( BASE ITAB1 ( WA1 ) ).  "将结果集追加进表 BASE得用法ENDLOOP.*   对分组后得数据进行累加DATA(SUM) = REDUCE I( INIT RES = 0 FOR WA2 IN ITAB1NEXT RES = RES + WA2-C4) .IF ITAB1 IS NOT INITIAL.DATA(LS_ITAB) = ITAB1[ 1 ].LS_ITAB-C4 = SUM.ITAB3 = VALUE ITAB( BASE ITAB3 ( LS_ITAB ) ).ENDIF.ENDLOOP.CL_DEMO_OUTPUT=>DISPLAY( ITAB3 ).

自定义分组

  DATA(MEMBERS) = VALUE ITAB( ).LOOP AT ITAB ASSIGNING FIELD-SYMBOL(<FS_AB>)GROUP BY COND  STRING(WHEN <FS_AB>-C1 = 'A' THEN |START|WHEN <FS_AB>-C1 = 'B' THEN |MIDDLE|ELSE |END|)INTO DATA(GROUP).IF GROUP = 'START'.MEMBERS = VALUE #( FOR G1 IN GROUP GROUP ( G1 ) ).ENDIF.ENDLOOP.CL_DEMO_OUTPUT=>DISPLAY( MEMBERS ).

FILTER过滤器的试用(需要排序表或者哈希表)

EXCEPT如果不指定则表示满足条件的找出来,如果指定则表示不满足条件的找出来

  DATA(ITAB5) = FILTER ITAB1( ITBA4 IN MEMBERS1WHERE C1 = C1).CL_DEMO_OUTPUT=>DISPLAY( ITAB5 ).DATA(ITAB6) = FILTER ITAB1( ITBA4WHERE C1 = CONV #( 'C' )).CL_DEMO_OUTPUT=>DISPLAY( ITAB6 ).

 

S/4对象创建

    DATA(OREF) = NEW  CL_TOOLS_LOCAL( ).OREF->H_TOOLS_BT_DATES_001(EXPORTING U_BEGDA = '20181011' U_ENDDA = '20181101'IMPORTING E_DAY = DATA(L_DAY1)).

 


http://www.ppmy.cn/news/477314.html

相关文章

S4 MIGO屏幕增强

1.创建结构和表 结构&#xff1a;ZSMIGO_ITEM 表类型&#xff1a; 表 &#xff1a;ZTMIGO_ITEM&#xff08;用来保存增强字段的值&#xff09; 2.创建函数组 TOP里的代码&#xff1a; FUNCTION-POOL zfg_migo. "MESSAGE-ID ..* INCLUDE LZFG_MIGOD..…

三星性能测试软件,13款软件压力测试 Galaxy S4性能体验

第1页:前言 第2页:第一轮测试&#xff1a;检阅综合性能 第3页:第二轮测试&#xff1a;考验CPU单元 第4页:第三轮测试&#xff1a;考验GPU单元(一) 第5页:第四轮测试&#xff1a;考验GPU单元(二) 第四轮测试&#xff1a;考验GPU单元(二) 除了这些国内用户耳熟能详的工具外&#…

S4 BP详解

ECC中客户和供应商是分开管理的&#xff0c;这种模式具有部分局限性&#xff1a; 客户和供应商不能是同一实体关系&#xff0c;建两个主数据会造成数据的冗余 客户/供应商只能有一个地址 属性无时间相关性 S4中使用BP业务伙伴模型解决这个问题(代替了传统的FD01/VD01/FK01/…

AntV G6 的坑之——从卡掉渣到满帧需要几步

AntV G6 是一款图可视化与分析开源引擎。《AntV G6 的坑之——XXX》系列文章持续更新中&#xff0c;总结常见问题及神坑解决方案。任何问题可在 GitHub Issue 中提问&#xff0c;求 GitHub Star ⭐️https://github.com/antvis/g6 原文链接&#xff1a;https://g6.antv.antgrou…

Android studio虚拟机联网

Android studio虚拟机联网 背景 最近由于需要调试老是使用真机每次都要链接太麻烦,我的大致思路是功能慢慢完善使用虚拟机调试,一个功能开发的差不多了再到真机上试一下,但是虚拟网络不同很是不爽,网上搜了一大堆要么不详细,要么不兼容,所以观者需要先看一下开发环境的版本和s…

AndroidStudio中虚拟机的联网问题

最近使用云数据库进行移动开发遇到了一些网络问题 报错1&#xff1a;在虚拟机页面的报错 尚未失败: Unable to resolve host “open.cctvcloud.cn” No address associated with hostname 解决&#xff1a;把校园网换成流量就好了…无语 关于虚拟机版本选择的联网 在遇到虚…

vmware虚拟机联网问题

linux虚拟机联网问题&#xff0c;首先你要确认你的网卡是不是支持虚拟化&#xff0c;很多联想的无线网卡&#xff0c;在使用vm虚拟网卡通信时都会出现问题&#xff0c;解决办法网上买块无限网卡&#xff0c;或者直接用有线网卡。 1、vm虚拟化网卡&#xff0c;虚拟机访问外网的…

win10系统VMware虚拟机联网问题解决及配置

1.右键“我的电脑”&#xff0c;选择“管理”&#xff0c;双击进入 2.找到“”服务“”这个选项&#xff0c;双击进入服务 3.找到如下两个服务&#xff0c;将这两个服务启动 4.打开VMware软件&#xff0c;打开虚拟机的编辑>虚拟网络配置器 5.点击更改配置 6.配置如…