MM 模組中abap程式設計,統計入庫金額和訂單金額

2021-07-09 12:23:01 字數 3979 閱讀 1377

1.要求

做乙個報表,用螢幕顯示,統計所有採購組--dispo中,按照dispo來統計,統計每乙個dispo下,選定時間範圍內,入庫了多少錢,訂單有多少錢

然後雙擊統計出來的結果的表中的總額,可以彈出乙個窗體,列出該總額對應的明細。

2.知識點

在mm中,此要求涉及三方面內容,入庫,訂單,md04  。入庫指的是已經確定發生的,貨物不但已經訂購,簽了合同,而且已經送到了公司,發生了入庫,相關人員已經維護了資料的。

入庫 mseg  憑證段:物料      物料號   bwart   移動型別   sobkz 特殊庫存標識    ebeln採購憑證號  mblnr物料憑證號  menge入庫的數量  menge入庫金額

mkpf 抬頭:物料憑證  budat 憑證中的過賬日期

marc  物料的工廠資料  dispo  mrp控制者

在上述表中,對本問題有影響的主要是  bwart移動型別

訂單eket  計畫協議 計畫行    此表用於記錄  某物料的每乙個 交貨計畫行

ekpo 採購憑證專案  乙個物料matnr對應多個採購憑證ebeln,乙個採購憑證ebeln對應多個計畫行eket

訂單部分,我們需要獲取,交貨日期在指定時間範圍內,的所有交貨計畫,得到數目,然後用物料號 獲取 商業**1 計算出 預計訂單金額的總額。

**金額

相當於執行md04 檢視某乙個物料的  需求與訂貨情況

比如 在這乙個月中

po專案(已經變成訂單的) 中 有100個

需求200個

那麼你雖然沒有下訂單,但是你必須要買的就有200 - 100個  這部分錢是必須要花的,所以,雖然你還沒有花,也視作你已經花了

計算這部分數量和金額  需要使用方法  call 

function 

'md_stock_requirements_list_api'

上述內容,就是本次計算的描述

本質就是  商業**1 *  數量 = 標準**金額   ,在入庫中可以計算出  實際入庫金額  ,用 入庫實際金額 -  入庫標準價金額 = 節約的金額

我們稱之為 合理化金額

下面上**看看 

call function 'md_stock_requirements_list_api'

exporting

plscn = '000'

matnr = itab_fengx-matnr

werks = '1000'

tables

* mdpsx = itab_mdpsx "mrp憑證中的專案

mdezx = itab_mdezx "mrp要素的個別行

* mdsux = itab_mdsux "mrp元素全部的行

exceptions

mrp_list_not_found = 1

material_plant_not_found = 2

error = 3

others = 4.

上述**用來開md04  ,開某乙個物料的md04還好,如果loop循壞開所有物料,乙個乙個開md04,真的會很慢,估計5分鐘左右

下述**用來獲取訂單的資訊

select  eket~ebeln       

eket~menge

eket~eindt

eket~ebelp

eket~etenr

ekpo~matnr

marc~dispo

*

*

mbew~peinh

mbew~bwprh

*

from eket

inner join ekpo

on ekpo~ebeln eq eket~ebeln and ekpo~ebelp eq eket~ebelp

inner join marc

on ekpo~matnr eq marc~matnr

inner join mbew

on mbew~matnr eq marc~matnr

into corresponding fields of table itab_marc

where ************

and marc~dispo in p_dispo.

下述**用於獲取入庫的資訊

select   mseg~matnr       

mseg~bwart

mseg~sobkz

mseg~ebeln

mseg~dmbtr

mseg~menge

marc~dispo

mkpf~budat

mseg~lgort

mkpf~mblnr

from mseg

inner join mkpf on

mkpf~mblnr = mseg~mblnr

inner join marc on

marc~matnr = mseg~matnr

into corresponding fields of table itab_mseg

where mkpf~budat ge ymstr2

order by mseg~matnr.

下面**用於獲取商業**1

select  mbew~matnr       

mbew~bwprh

mbew~peinh

from mbew

into corresponding fields of table itab_mbew

where *******************

4.**的結構

這是乙個report,用se80建立**部分,用se38建立其中的文字(中文內容與字串名的對應)

report 

執行過程是這樣的,report的入口是 start-of-selection 程式一執行,馬上執行這個部分

start-of-selection.

perform frm_getdata.

end-of-selection.

perform frm_print.

上述**中就是 乙個**塊 名為 frm_getdata

這個**塊 主要的工作有兩個

1是使用select語句從透明表(硬碟)獲取資料 整理到預先定義好的內錶(記憶體)中

2是call screen ****    也就是呼喚之前定義的「普通螢幕」 

在abap**中,螢幕被呼喚call  意味著三件事:1執行該螢幕的pbo 2.顯示該螢幕  3.執行該螢幕的pai

先看一下如何定義乙個螢幕

在se80中 在你的程式中,在程式名上右鍵  create  螢幕 

每乙個螢幕的維護視窗上,都可以通過乙個按鈕layout進入該螢幕的 視覺直觀設計器   我們這個程式  使用且只使用乙個控制項   「定製控制」

下圖就是乙個螢幕的主要內容  邏輯流  和 格式   

邏輯流 就是pbo和pai

格式,就是設計這個普通螢幕 長什麼樣子

ABAP程式中的統計求和

在abap開發中,如何在程式中實現統計求和呢?其實在loop endloop 中間,有個at endat迴圈.其中的包括 frist,last,new end of.這些可以用來進行內錶中按某個字段進行分組統計.first 內 表的第一行 last 內 表的最後一 行 new 行組 的開頭,與 字段...

ABAP中的Table Control程式設計 2

上篇講了table control的基本功能,現在繼續討論它在其他方面的一些設定。4,滾動到某行某列 如果我們希望,螢幕顯示後展示在使用者面前的最上端或者左端是表內容中的某行某列,則應該修改變數top line和left col的值。一般可在pbo的tc 0100 change tc attr裡設定...

SciPy中的統計模組

numpy 替我們搞定了向量和矩陣的相關操作,基本上算是乙個高階的科學計算器。scipy 基於 numpy 提供了更為豐富和高階的功能擴充套件,在統計 優化 插值 數值積分 時頻轉換等方面提供了大量的可用函式,接下來我們就學習一下 scipy 中的統計和優化模組。import numpy as np...