04數(shù)據(jù)輸出,A3-物料基本信息及在訂單中的銷售統(tǒng)計(jì)

圖4-A3 物料基本信息及在訂單中的銷售統(tǒng)計(jì)

需求分析:

1、具體需求

本《物料基本信息及在訂單中的銷售統(tǒng)計(jì)》有如下需求:

  1. 除輸出物料基本信息(物料、物料名稱、物料類型)外,還需要獲得此物料在多少個(gè)訂單中有銷售,在不同訂單中銷售的情況(總計(jì)銷售數(shù)量、最大銷售數(shù)量、最小銷售數(shù)量、平均銷售數(shù)量),因此,本實(shí)踐所需數(shù)據(jù)除了物料表,還需要用到訂單明細(xì)表;
  2. 物料列表按物料編號(hào)升序排序,同時(shí)輸出序號(hào);
  3. 對(duì)于銷售總數(shù)量為0的物料,不需要顯示。
2、開發(fā)分析

要達(dá)成本實(shí)踐目標(biāo),需要通過Open SQL,實(shí)現(xiàn)對(duì)多表的連接和聚合處理,以對(duì)數(shù)據(jù)進(jìn)行合計(jì)、取最小最大值等。

實(shí)踐步驟:

本實(shí)踐通過程序編輯器(SE38)即可完成,編寫的代碼將有如下幾部分組成,按開發(fā)人員風(fēng)格不同,其組成部分并非強(qiáng)制一致。

No 部分 說明
1 程序聲明 聲明本程序執(zhí)行后是否包含標(biāo)準(zhǔn)標(biāo)題,數(shù)據(jù)輸出寬度和每頁的行數(shù)量為多少,另需考慮頁腳輸出
2 對(duì)象定義 通過定義類型池以在程序中使用相應(yīng)的圖標(biāo),通過定義要使用的以變量或常量或要使用的表結(jié)構(gòu)等,以在程序執(zhí)行過程中計(jì)算和存儲(chǔ)臨時(shí)值
3 頁眉頁腳 通過代碼設(shè)置輸出頁眉頁腳
4 獲取數(shù)據(jù) 從表中獲得要輸出的數(shù)據(jù)數(shù)據(jù)并存儲(chǔ)到內(nèi)表中以待后續(xù)輸出
5 輸出數(shù)據(jù) 將內(nèi)表中的數(shù)據(jù)按要求輸出,本代碼可有2種方式實(shí)現(xiàn):條件、AT NEW事件。
1、程序聲明

程序聲明部分的代碼如下:

REPORT zu0403_mat_aggregate NO STANDARD PAGE HEADING
       LINE-SIZE 100 LINE-COUNT 80.

通過如上代碼定義,程序輸出時(shí),頁面寬度為100(能容納100個(gè)數(shù)字或英文字符),每頁輸出區(qū)域?yàn)?0行。

2、對(duì)象定義

對(duì)象定義部分的代碼如下:

*****對(duì)象定義
TYPES: BEGIN OF mat_ag_type,                              " mat_ag_type-類型名稱
         materialid   TYPE ztmaterial-materialid,
         materialname TYPE ztmaterial-materialname,
         materialtype TYPE ztmaterial-materialtype,
         count        TYPE i,
         total        TYPE ztorders_i-oquantity,
         max          TYPE ztorders_i-oquantity,
         min          TYPE ztorders_i-oquantity,
         average      TYPE ztorders_i-oquantity,
       END OF mat_ag_type.

DATA:mat_ag_itab TYPE STANDARD TABLE OF mat_ag_type     " 含工作區(qū)的內(nèi)表
                 WITH HEADER LINE.

如上代碼,使用類型MAT_AG_TYPE定義了一個(gè)含工作區(qū)的標(biāo)準(zhǔn)內(nèi)表,如此,在輸出時(shí),可以將內(nèi)表數(shù)據(jù)遍歷后放到內(nèi)表自己的工作區(qū)中,而不需要另外一個(gè)結(jié)構(gòu)存儲(chǔ)。在實(shí)際開發(fā)中,偏向于使用不含工作區(qū)的內(nèi)表,如此增加代碼的可讀性。

3、頁眉輸出

頁眉輸出部分的代碼如下:

*&----------------------------------------------------------------------*
*& 輸出頁眉
*&----------------------------------------------------------------------*
TOP-OF-PAGE.                                            "頁眉事件
  FORMAT RESET.
  WRITE:/5(95) sy-uline,
        /5 '序號(hào)', 10(5) '物料', 15(20) '物料名稱',
         35(12) '物料類型', 48(6) '項(xiàng)目數(shù)',
         55(10) '總計(jì)' , 65(10) '最大',
         75(10) '最小', 85(10) '平均值',
        /5(95) sy-uline.

如上代碼定義了頁眉的輸出。

4、獲取數(shù)據(jù)

獲取數(shù)據(jù)部分的代碼如下:

*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.                                    "數(shù)據(jù)處理事件
*****獲得客戶信息
  SELECT
    mt~materialid mt~materialname mt~materialtype
       COUNT( * )          AS count
       SUM( oi~oquantity ) AS total
       MAX( oi~oquantity ) AS max
       MIN( oi~oquantity ) AS min
       AVG( oi~oquantity ) AS average
    INTO TABLE mat_ag_itab
    FROM ( ztmaterial AS mt
           INNER JOIN ztorders_i AS oi
           ON oi~materialid = mt~materialid )
    GROUP BY mt~materialid mt~materialname mt~materialtype
    HAVING SUM( oi~oquantity ) <> 0.
  SORT mat_ag_itab BY materialid.

如上代碼通過select語句,將多個(gè)表(ztmaterial、ztorders_i)的數(shù)據(jù)獲取后存儲(chǔ)到內(nèi)表,此select語句需符合Open SQL的語法,而其與傳統(tǒng)的SQL類似也有差異;同時(shí)在語句中用到了聚合函數(shù)用來統(tǒng)計(jì)物料的銷售數(shù)量;并因?yàn)镸AT_AG_ITAB不是排序內(nèi)表,因此為了在數(shù)據(jù)輸出時(shí)按物料編號(hào)排序,通過SORT語句對(duì)內(nèi)表的數(shù)據(jù)進(jìn)行相應(yīng)排序處理。

5、輸出數(shù)據(jù)

輸出數(shù)據(jù)部分的代碼如下:

  LOOP AT mat_ag_itab.
    WRITE:
        /5(5) sy-tabix, 10(5) mat_ag_itab-materialid, 15(20) mat_ag_itab-materialname,
         35(15) mat_ag_itab-materialtype, 48(6) mat_ag_itab-count,
         55(10) mat_ag_itab-total, 65(10) mat_ag_itab-max,
         75(10) mat_ag_itab-min,85(10) mat_ag_itab-average.
  ENDLOOP.

因?yàn)閮?nèi)表含工作區(qū),因此LOOP AT后不需帶INTO,所遍歷的數(shù)據(jù)將逐行存儲(chǔ)到內(nèi)表MAT_AG_ITAB相同名稱的結(jié)構(gòu)中,并可按要求進(jìn)行輸出。

本實(shí)踐小結(jié):

內(nèi)表是我們?cè)跀?shù)據(jù)處理中經(jīng)常使用的ABAP對(duì)象,其主要用于臨時(shí)存儲(chǔ)從表或數(shù)據(jù)中讀取的數(shù)據(jù)并進(jìn)行后續(xù)的處理,本小結(jié)將對(duì)內(nèi)表的定義和處理進(jìn)行說明。

1、內(nèi)表的類型及定義方式
內(nèi)表類型及定義
不同類型內(nèi)表的差異
2、內(nèi)表的管理和操作

(實(shí)踐A3 End)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容