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...