子程序

2020-08-16 20:59发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨,下面提到的所有代码都是由我派...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,下面提到的所有代码都是由我派生的,它们用于连接两个内部表并基于选择选项获取输出表的数据。 有人可以让我知道用SUB-ROUTINES进行相同的编码。

表格:zekko,zekpo。



类型:ty_outp的开始,
ebeln TYPE zekko-ebeln,
ebelp TYPE zekpo-ebelp,
matnr TYPE zekpo-matnr,
arktx TYPE zekpo-arktx ,
zqnty TYPE zekpo-zqnty,
zunit TYPE zekpo-zunit,
zamnt TYPE zekpo-zamnt,
zcurr TYPE zekko-zcurr,
erdat TYPE zekko-erdat,
ename TYPE zekko-ename,
ty_outp的结尾。

TYPES:tt_outp ty_outp的类型表。

DATA:gt_outp TYPE tt_outp,
wt_outp TYPE ty_outp。


>数据:gt_ekko zekko类型表,
gt_ekpo zekpo类型表,
wt_ekko TYPE zekko,
wt_ekpo类型zekpo。

选择选项:s_ebeln FOR zekko-ebeln,
s_erdat for zekko-erdat,
s_matnr for zekpo-matnr。

选择屏幕跳过2。

带有框架标题文本001的b2块的选择屏幕开始。 >参数:r1 RADIOBUTTON GROUP grp1默认'X'用户命令已激活,
r2 RADIOBUTTON GROUP grp1,
r3 RADIOBUTTON GROUP grp1。
b2块的选择屏幕末端。

< br>
开始选择。



SELECT * FROM zekko进入表gt_ekko。


如果gt_ekko不初始。

SELECT * FROM zekpo进入表gt_ekpo
对于gt_ekko中的所有条目WHERE ebeln = gt_ekko-ebeln 。

ENDIF。

在gt_ekko上进入wt_ekko。

读取表gt_ekpo到带有键ebeln = wt_ekko-ebeln的wt_ekpo中。

wt_outp-ebeln = wt_ekko-ebeln。
wt_outp-zcurr = wt_ekko-zcurr。
wt_outp-ename = wt_ekko-ename。
wt_outp-erdat = wt_ekko-erdat。
wt_outp-arktx = wt_ekpo-arktx。
> wt_outp-zqnty = wt_ekpo-zqnty。
wt_outp-zamnt = wt_ekpo-zamnt。
wt_outp-zunit = wt_ekpo-zunit。
wt_outp-matnr = wt_ekpo-matnr。
wt_outp-ebelp = wt_ekpo-zbeln = -ebelp。


追加wt_outp到gt_outp。


ENDLOOP。

CASE'X'。

当r1。

将gt_outp循环到wt_outp
中的ebeln在s_ebeln
和matnr在s_matnr
在erdat在s_erdat中。

WRITE:/wt_outp-ebeln,wt_outp-ebelp,wt_out matnr,wt_outp-arktx,wt_outp-zqnty,wt_outp-zunit,wt_outp-z curr,wt_outp-erdat,wt_outp-ename。

ENDLOOP。
ENDCASE。

TOP-OF-PAGE。 '商品编号',19'材料编号',35'物料描述',77'数量',
84'单位',88'货币',95'填写日期',106'填写人'。

页尾。

3条回答
d56caomao
2020-08-16 21:45 .采纳回答

您好 Karon Christydoss

将报告划分为过程时,最好摆脱所有 不需要的全局变量。 为此,您将需要为过程定义参数。 为此,如果尚未在ABAP词典中定义这些参数,则可能需要定义这些参数的类型。

 tt_zekko TYPE TABLE OF zekko,
 tt_zekpo zekpo的类型表。

在我的示例中,我创建了一个主要过程来执行报告的逻辑,并将其命名为RUN_REPORT。 在此过程中,我声明了将在整个程序中使用的局部变量。

 FORM run_report。
  数据:
    lt_outp类型tt_outp,
    lt_ekko TYPE tt_zekko,
    lt_ekpo类型tt_zekpo。

稍后,这些变量在程序的不同部分中用作参数。

进行read_data更改lt_ekko lt_ekpo。
  使用lt_ekko lt_ekpo更改lt_outp来执行join_data。
  使用lt_outp来执行print_data。

以下是 SAP帮助。 您绝对应该阅读它。 对您来说,阅读有关面向对象的编程也可能是一个好主意,因为这确实是当今的正确方法。 网上有很多信息(从简单到复杂)。

下面是您的完整代码。

表:zekko,zekpo。

 类型:
   开始ty_outp,
     ebeln TYPE zekko-ebeln,
     ebelp TYPE zekpo-ebelp,
     matnr TYPE zekpo-matnr,
     arktx TYPE zekpo-arktx,
     zqnty TYPE zekpo-zqnty,
     zunit TYPE zekpo-zunit,
     zamnt TYPE zekpo-zamnt,
     zcurr类型zekko-zcurr,
     erdat TYPE zekko-erdat,
     ename TYPE zekko-ename,
   结束于ty_outp,
   tt_outp ty_outp类型表,

   tt_zekko zekko的类型表,
   tt_zekpo zekpo的类型表。

 选择选项:s_ebeln FOR zekko-ebeln,
 s_erdat FOR zekko-erdat,
 s_matnr FOR zekpo-matnr。

 选择屏幕跳过2。

 带有标题标题文本001的b2块的选择屏幕开始。
 参数:r1 RADIOBUTTON GROUP grp1默认的'X'用户命令已激活,
              r2 RADIOBUTTON GROUP grp1,
              r3 RADIOBUTTON GROUP grp1。
 b2块的选择屏幕结束。

 选择开始。
   执行run_report。

 页面顶部。
   写:/'采购订单编号',11'物料编号',19'物料编号',35'物料描述',77'数量,
   84'unit',88'Curncy',95'Crtd date',106'crtd By'。

 页末。

 FORM run_report。
   数据:
     lt_outp类型tt_outp,
     lt_ekko TYPE tt_zekko,
     lt_ekpo类型tt_zekpo。

   执行read_data更改lt_ekko lt_ekpo。
   使用lt_ekko lt_ekpo更改lt_outp来执行join_data。
   使用lt_outp执行print_data。
 ENDFORM。

 表格read_data
   改变
     ct_ekko类型tt_zekko
     ct_ekpo类型tt_zekpo。

   选择*从zekko到表ct_ekko。

   如果gt_ekko不是INITIAL。
     选择*从zekpo到表ct_ekpo
     对于ct_ekko中的所有条目ebeln = ct_ekko-ebeln。
   万一。
 ENDFORM。

 表格join_data
   使用方式
     it_ekko TYPE tt_zekko
     it_ekpo TYPE tt_zekpo
   改变
     ct_outp类型tt_outp。

   数据:
     ls_outp TYPE ty_outp,
     ls_ekko TYPE zekko,
     ls_ekpo TYPE zekpo。

   循环到it_ekko INTO ls_ekko。
     将表it_ekpo读入带有密钥ebeln = ls_ekko-ebeln的ls_ekpo中。
     ls_outp-ebeln = ls_ekko-ebeln。
     ls_outp-zcurr = ls_ekko-zcurr。
     ls_outp-ename = ls_ekko-ename。
     ls_outp-erdat = ls_ekko-erdat。
     ls_outp-arktx = ls_ekpo-arktx。
     ls_outp-zqnty = ls_ekpo-zqnty。
     ls_outp-zamnt = ls_ekpo-zamnt。
     ls_outp-zunit = ls_ekpo-zunit。
     ls_outp-matnr = ls_ekpo-matnr。
     ls_outp-ebelp = ls_ekpo-ebelp。

     追加ls_outp至ct_outp。
   结局。
 ENDFORM。

 使用it_outp类型tt_outp来形成print_data。
   数据:
     ls_outp TYPE ty_outp。

   案例abap_true。
     当r1。
       循环到it_outp INTO ls_outp
         s_ebeln中的ebeln
           和s_matnr中的matnr
           AND sder中的erdat。

         写:/ls_outp-ebeln,ls_outp-ebelp,ls_outp-matnr,ls_outp-arktx,ls_outp-zqnty,ls_outp-zunit,ls_outp-zcurr,ls_outp-erdat,ls_outp-ename。
       结局。
   结束。
 ENDFORM。
亲切的问候,
Mateusz

一周热门 更多>