不知道大家有沒有這方面的經驗?
雖然公司已經有準備導入超大型BPM的專案,但是對於我個人而言,Notes永遠是我職場的秘密武器,雖然SAP ERP 非常龐大與穩定,但是周邊工具的整合我還是覺得Notes最讚!
因為SAP的物料主檔是整個R/3的最基本設定單位,沒有物料主檔就不用玩SAP ERP,物料主檔有很多頁籤需要鍵入,但是多多少少資料在多的狀況下,總是會有漏鍵,所以類似的SAP需要檢核的地方,最需要像Notes般的工具來做輔助!
要如何輔助呢? 當然透過IBM 7.02提供的免費軟體做溝通,大家只要去Google Search "SAP AND Notes AND RFC AND 7.02"就可以,IBM來提供完整的PDF來讓使用者使用,而且7.02的元件可以放在其他7的版本使用喔!
一般來說SAP RFC 並不難學,只要上四個小時的課程,基本上都會寫RFC,RFC與R/3 的ABAP Report 不同在哪? 只是差在多了Input的參數而已,還有RFC Function Group 需要設定,透過官方的PDF來參照,並不難!
Notes端只要用一般的Web or Client 設計好簽核流程,最後一關簽完後就可以觸發Agent Call Http 的SAP RFC,非常容易。
以上希望大家有興趣繼續討論下去^_^.
2008年11月30日 星期日
2008年11月29日 星期六
心得]Lotus Notes 與 SAP ABAP相似之處
[心得]Lotus Notes 與 SAP ABAP相似之處。
Hi 大家好
因為最近開始學習SAP的開發,而SAP的開發工具就是ABAP,SAP ERP整套也是ABAP開發出來
,ABAP跟Notes一樣都有自己的IDE開發介面,而且相似之處還有AP & DB的地方,好比說兩個資料庫
的存取標準都異於一般的RDB,雖然SAP ERP也是架構在Oracle DB之上。
ABAP與Notes最大的特點是所有的開發資源都是線上可以取得,包含Example 與 Step By Step 操作,
而且ABAP在這部分承襲COBOL早期的影子,所以再搭配SQL就成為比Notes IDE更單純的單一開發程序,
Notes雖然在開發程序給予太多的選擇,但是哪一位Notes Designer可以用盡所有的Notes IDE tools?
我想好的產品僅需要好的思維加上單純的開發程序即可,就好比ABAP的單純開發程序竟然比Oracle的
D2K更是單純,這也難怪一堆印度人在SAP這個領域上特別領先其他國家,因為ABAP的開發程序真的很單純
,大概跟開發團隊是從IBM出來的工程師有關,因為IBM早期的COBOL與AS400就是SAP ERP的前身。
ABAP在學習的過程與Notes非常大的不同,Notes非常重視呈現的功能,包含設計的技巧與設計的整體感,
如果加上流程更是需要大量的技術觀念,但是ABAP的學習必須先經過基礎的ERP訓練,從最基本的物料主檔
開始建構,換句話說ABAP的修習必須先經過一段ERP的訓練。
一般Notes人員最重視技術,如果可以從商業邏輯擷取精華往SAP ABAP前進,必然可以整合Notes & SAP,
讓國際上商業軟體最棒的前端流程Notes與最佳的後端商業處理SAP ERP結合。
很多論壇不是再談論Notes Designer的未來?未來就等大家一起來分享討論!
隨手筆 Sap-Bruce
Notes-Sap讀書會推動者
Hi 大家好
因為最近開始學習SAP的開發,而SAP的開發工具就是ABAP,SAP ERP整套也是ABAP開發出來
,ABAP跟Notes一樣都有自己的IDE開發介面,而且相似之處還有AP & DB的地方,好比說兩個資料庫
的存取標準都異於一般的RDB,雖然SAP ERP也是架構在Oracle DB之上。
ABAP與Notes最大的特點是所有的開發資源都是線上可以取得,包含Example 與 Step By Step 操作,
而且ABAP在這部分承襲COBOL早期的影子,所以再搭配SQL就成為比Notes IDE更單純的單一開發程序,
Notes雖然在開發程序給予太多的選擇,但是哪一位Notes Designer可以用盡所有的Notes IDE tools?
我想好的產品僅需要好的思維加上單純的開發程序即可,就好比ABAP的單純開發程序竟然比Oracle的
D2K更是單純,這也難怪一堆印度人在SAP這個領域上特別領先其他國家,因為ABAP的開發程序真的很單純
,大概跟開發團隊是從IBM出來的工程師有關,因為IBM早期的COBOL與AS400就是SAP ERP的前身。
ABAP在學習的過程與Notes非常大的不同,Notes非常重視呈現的功能,包含設計的技巧與設計的整體感,
如果加上流程更是需要大量的技術觀念,但是ABAP的學習必須先經過基礎的ERP訓練,從最基本的物料主檔
開始建構,換句話說ABAP的修習必須先經過一段ERP的訓練。
一般Notes人員最重視技術,如果可以從商業邏輯擷取精華往SAP ABAP前進,必然可以整合Notes & SAP,
讓國際上商業軟體最棒的前端流程Notes與最佳的後端商業處理SAP ERP結合。
很多論壇不是再談論Notes Designer的未來?未來就等大家一起來分享討論!
隨手筆 Sap-Bruce
Notes-Sap讀書會推動者
Notes與SAP ERP於企業不得不用的感言
由於最近工作的關係讓我重新評估企業OA是否還得繼續用Lotus Notes,原因無他,版權貴,原廠行銷管道萎縮等等,但是要判它有罪時還是需要聽聽它的告白啊,這陣子除了錢錢的問題更把一些人多年對它的不滿也一起雪上加霜的表現出來,好比八國聯軍個個都要訂中國的罪證而加以瓜分似的,經過我非常無奈的分析,從Java, JSP, ASP.NET 這三大主流來比較,我可是花了錢與時間在書本與網路上作分析,總結當然還是Lotus Notes好,因為架構的關係,不管Java有多麼好的MVC架構,.NET不管有多好的CLR平台都無法打敗Notes其二十年的市場商業應用的地位,畢竟架構才是企業的需求,工具在好也是需要大團隊或是時間才可以享用,Java只能說太好以致於各種開發規格與平台無法一致,.NET就更不用說,一般人總是被微軟的華麗行銷給迷住,從業務訪談的禮物與動人的版權計算模式,永遠都是擄獲中老年主管的心,大家想想哪家原廠的業務不是伶牙俐齒粉裝上場呢?這點IBM倒是滿務實…哈哈哈,因為我也順便在學SAP所以才會聯想到Notes,他們的關係很相似,有自己特有的架構與開發語言,而且深入商業流程的領域都非常有歷史與經驗,SAP那麼老的架構都可以存活,且活的還比Oracle更新一代的N-Tier還好,SAP的架構與開發語言甚至比Notes還久遠,且還是單一模式,Notes已經提供那麼多整合工具於一身,如果還沒辦法與SAP一起凌駕於企業,那我只能說IBM自己要把Notes冰凍,有如微軟購入FoxPro冰凍一樣,但是我還是寄望一絲絲的希望在Notes,因為他讓我論文得以第一名完成與畢業,因為他讓讀書會持續發展,因為他讓Notes讀書會佔滿整個Google查詢的首頁,有太多太多的理由無法把他換掉,希望大家一起努力發揚他,因為產品的開發來自於市場的需求,市場的運作操控在MIS手裡,大家加油,IBM亦同。
20080215 Wokflow如何入門
如果你想了解工作流程在企業的意義而不是技術的話,那我建議你去參考一般ERP的書,因為企業會用到的工作流程都跟ERP有關,等你理解流程分為哪些類型,你就會知道如何找廠商導入適當的產品,比如說:人事相關的表單流程就跟公司組織有關,PDM 的工作流程就跟虛擬的專案組織有關;工作流程產品與技術已經太多,目前業界缺乏的是實際企業內部各種異質系統整合的經驗,基於以上論點,希望你先了解ERP的工作流程。
If you want to find out about the meaning of workflow in enterprises instead of technology, then I advise you to consult the book of general ERP, because the workflow that enterprises will use relates to ERP, wait for you to understand for which types procedure is assigned, you will know how to implement it with a product from vendor, for example: The Human Resource Request are correlated with relates to company's organization, the workflow of PDM relates to fictitious special project organization; There have been already too much workflow products and technology, what the industry lacked is the experience of different heterogeneous system combination inside real enterprises at present, because of the above argument, maybe you find out about the workflow of ERP first.
If you want to find out about the meaning of workflow in enterprises instead of technology, then I advise you to consult the book of general ERP, because the workflow that enterprises will use relates to ERP, wait for you to understand for which types procedure is assigned, you will know how to implement it with a product from vendor, for example: The Human Resource Request are correlated with relates to company's organization, the workflow of PDM relates to fictitious special project organization; There have been already too much workflow products and technology, what the industry lacked is the experience of different heterogeneous system combination inside real enterprises at present, because of the above argument, maybe you find out about the workflow of ERP first.
SAP ABAP Debug 心得 F5, F6, F7, F8
ABAP Debug 技巧
一般來說在一般企業會遇到很多使用者提出的各種問題,一般來說標準程式比較沒有這方面的問題,而客製的部份就比較困難處理,因為畢竟職務會有異動,所有的客製程式一定有兩三年前的前輩遺留。
一般來說不管是舊程式改新程式,或是舊程式除錯,都可以利用ABAP Debug 的工具來處理,而ABAP Debug 最常用的偵錯功能有F5, F6, F7, F8, 一般來說F5 是最細部的程序執行單位,換句話說你有一個迴圈需要跑十次,那你當你用F5把游標一步一步跑入此回圈時,那你可能要按十次才能跑完整個程式,所以一般如果你到了Perform 或是 IF 你覺得不是你要除錯的地方,你可以用F6直接走過去,完全不需要進入IF 或是跳到 Perform去執行Sub Function,那如果你想要除錯的程式範圍在一千行,而你目前僅在第十行,那你就可以利用座標輸入1000到達定位後,使用滑鼠兩下或是下中斷點旗標定位,接著按F8就可以讓程式執行到這個位置,如果到這個位置還想繼續完成這位置之前的迴圈程式,那就可以用F7 ,邊按F7邊看你的Table 數值變化,另外如果你要偵錯的範圍假設落在800~1000行中間,你可以設定兩個中斷點旗標,接著按F7就可以持續觀察TABLE的變化。
最後在使用Debug之前,還是建議先從資料比對上著手,確定是程式導致使用者的困擾才去Debug比較好,不然花了很多時間Debug,最後才發現根本不是程式問題那就浪費許多時間。
一般來說在一般企業會遇到很多使用者提出的各種問題,一般來說標準程式比較沒有這方面的問題,而客製的部份就比較困難處理,因為畢竟職務會有異動,所有的客製程式一定有兩三年前的前輩遺留。
一般來說不管是舊程式改新程式,或是舊程式除錯,都可以利用ABAP Debug 的工具來處理,而ABAP Debug 最常用的偵錯功能有F5, F6, F7, F8, 一般來說F5 是最細部的程序執行單位,換句話說你有一個迴圈需要跑十次,那你當你用F5把游標一步一步跑入此回圈時,那你可能要按十次才能跑完整個程式,所以一般如果你到了Perform 或是 IF 你覺得不是你要除錯的地方,你可以用F6直接走過去,完全不需要進入IF 或是跳到 Perform去執行Sub Function,那如果你想要除錯的程式範圍在一千行,而你目前僅在第十行,那你就可以利用座標輸入1000到達定位後,使用滑鼠兩下或是下中斷點旗標定位,接著按F8就可以讓程式執行到這個位置,如果到這個位置還想繼續完成這位置之前的迴圈程式,那就可以用F7 ,邊按F7邊看你的Table 數值變化,另外如果你要偵錯的範圍假設落在800~1000行中間,你可以設定兩個中斷點旗標,接著按F7就可以持續觀察TABLE的變化。
最後在使用Debug之前,還是建議先從資料比對上著手,確定是程式導致使用者的困擾才去Debug比較好,不然花了很多時間Debug,最後才發現根本不是程式問題那就浪費許多時間。
SAP ERP 呆滯庫存報表設計心得分享
大家早
又一陣子沒有寫文章,這次來發表幾篇SAP ERP Logistic 會遇到的ABAP需求設計分享。
何謂”呆滯庫存”呢? 就是長期呆在公司庫存無法轉換成現金的物料、成品、半成品、組件等等。一般來說透過SAP T-Code MB5B 其實就可以查出呆滯庫存,但如果使用者要加上一些客製需求,那我們就另外寫ABAP程式。
呆滯庫存也有人用”呆滯庫位”來表示,但是我覺得那是”人為”的管理方式,都已經使用 SAP 系統為何還要用”人為”的管理模式??
呆滯庫存主要以”物料過帳日期”為查詢區間,以物料各種異動類型作為關鍵值,例如:異動類型261 就是一個生產領料的異動類型,如果物料在某個過帳記錄區間完全沒有作領料的動作,我們也可以稱為呆滯庫存,因為無法消耗公司的庫存金額!!
常見應用於呆滯的異動類型有幾下幾種,'261' '311''309' '901' '903' '913'
'915' '917' '919' '101'.在SQL 中進行過濾就可以。
需要應用到的Table 如下參考:
TABLES: MARD,MSEG,MARA,MDKP,MBEW,MSLB,LFA1,MKPF,MAKT.
常用的輸入查詢欄位有以下幾種:
儲存地點,工廠,物料號碼,MRP類型,物料群組,採購群組,MRP範圍,檢核期間。
而關鍵的查詢欄位有”儲存地點”、”工廠”、”檢核期間”。
常用輸出查詢欄位有以下幾種:
物料號碼' '未限制庫存數量' '物料說明' '工廠' '儲位' '圖號' '前置期' '物料群組' '異動平均價' '庫存總值' '供應商代號' '供應商名稱' '最小批量' '安全庫存' '呆滯天數(年/月/日)'。
有興趣大家在討論。
SAP-Bruce 2008/11/7
又一陣子沒有寫文章,這次來發表幾篇SAP ERP Logistic 會遇到的ABAP需求設計分享。
何謂”呆滯庫存”呢? 就是長期呆在公司庫存無法轉換成現金的物料、成品、半成品、組件等等。一般來說透過SAP T-Code MB5B 其實就可以查出呆滯庫存,但如果使用者要加上一些客製需求,那我們就另外寫ABAP程式。
呆滯庫存也有人用”呆滯庫位”來表示,但是我覺得那是”人為”的管理方式,都已經使用 SAP 系統為何還要用”人為”的管理模式??
呆滯庫存主要以”物料過帳日期”為查詢區間,以物料各種異動類型作為關鍵值,例如:異動類型261 就是一個生產領料的異動類型,如果物料在某個過帳記錄區間完全沒有作領料的動作,我們也可以稱為呆滯庫存,因為無法消耗公司的庫存金額!!
常見應用於呆滯的異動類型有幾下幾種,'261' '311''309' '901' '903' '913'
'915' '917' '919' '101'.在SQL 中進行過濾就可以。
需要應用到的Table 如下參考:
TABLES: MARD,MSEG,MARA,MDKP,MBEW,MSLB,LFA1,MKPF,MAKT.
常用的輸入查詢欄位有以下幾種:
儲存地點,工廠,物料號碼,MRP類型,物料群組,採購群組,MRP範圍,檢核期間。
而關鍵的查詢欄位有”儲存地點”、”工廠”、”檢核期間”。
常用輸出查詢欄位有以下幾種:
物料號碼' '未限制庫存數量' '物料說明' '工廠' '儲位' '圖號' '前置期' '物料群組' '異動平均價' '庫存總值' '供應商代號' '供應商名稱' '最小批量' '安全庫存' '呆滯天數(年/月/日)'。
有興趣大家在討論。
SAP-Bruce 2008/11/7
SAP_庫存週轉率_設計的心得分享
大家好
SAP 中的標準程式裡面雖然也有庫存週轉率的項目
,但是大家都知道很多使用者的需求都是需要客製
,以下我就針對客製一個庫存週轉率的報表需要注
意哪些觀念、項目。
所謂的"週轉率"也可以說是"某個過帳區間的出貨次
數",也可以應用在"週轉天數"。
週轉率的公式為"某個過帳區間的出貨總金額除以平
均庫存總值",而出貨總金額可以透過MSEG與物料異
動類型261來抓取,一般來說以物料的角度看出貨行
為,261生產領料就是最佳的參考指標;
另外"平均庫存總值"的原由,因為大部分的報表統
計都集中在月底,但是偏偏月底的庫存通常都是比
較低,因為月底出貨領料比較多,所以平均庫存總
值大家可以抓每日庫存再除以天數的平均再乘以異
動平均價就可以。
一般會在庫存週轉率的輸入與輸出欄位各需要哪些
?輸入的主要部分有"過帳區間"、"物料號碼"、"工
廠"、"儲位",而輸出的部分主要有"物料號碼"、
"品名"、"工廠"、"儲位"、"庫存"、"平均價"、"
庫存總值"、"出貨總數量"、"出貨總金額"、"庫存
週轉率"、"庫存週轉天數"。
一般來說週轉率可以讓庫存管理者知道目前哪些物
料的使用率比較高,以便物料基本檔的MRP安全庫
存設定。
以上如果相關心得經驗也請跟我分享
Skype : LotusNotes
MSN : brucesap@hotmail.com
SAP 中的標準程式裡面雖然也有庫存週轉率的項目
,但是大家都知道很多使用者的需求都是需要客製
,以下我就針對客製一個庫存週轉率的報表需要注
意哪些觀念、項目。
所謂的"週轉率"也可以說是"某個過帳區間的出貨次
數",也可以應用在"週轉天數"。
週轉率的公式為"某個過帳區間的出貨總金額除以平
均庫存總值",而出貨總金額可以透過MSEG與物料異
動類型261來抓取,一般來說以物料的角度看出貨行
為,261生產領料就是最佳的參考指標;
另外"平均庫存總值"的原由,因為大部分的報表統
計都集中在月底,但是偏偏月底的庫存通常都是比
較低,因為月底出貨領料比較多,所以平均庫存總
值大家可以抓每日庫存再除以天數的平均再乘以異
動平均價就可以。
一般會在庫存週轉率的輸入與輸出欄位各需要哪些
?輸入的主要部分有"過帳區間"、"物料號碼"、"工
廠"、"儲位",而輸出的部分主要有"物料號碼"、
"品名"、"工廠"、"儲位"、"庫存"、"平均價"、"
庫存總值"、"出貨總數量"、"出貨總金額"、"庫存
週轉率"、"庫存週轉天數"。
一般來說週轉率可以讓庫存管理者知道目前哪些物
料的使用率比較高,以便物料基本檔的MRP安全庫
存設定。
以上如果相關心得經驗也請跟我分享
Skype : LotusNotes
MSN : brucesap@hotmail.com
SAP 財務成本跨月回帳的檢核報表開發的心得分享
1.報表開發的目的:
雖然SAP標準系統有提供MB51供相關物料文件異動類型查詢,但是財務每月做成本的稽核時,就會發現一堆迴轉異動類型不知道頭尾,這時候財務成本人員要忙著對帳,於是如果有一個報表可以提供所有”跨月”異動的帳作呈現,是不是就可以大大降低檢核人員的負擔,同時也可以提供各單位有需要的人員作襙做異常管理用,如倉管主管可以依據此報表查看收貨、發料人員是否有異常回帳,船務主管也可以檢核出貨的VL02N是否正常運行。
整個設計主要以EKBE為主,其中物料文件的過帳與迴轉的關連性並非”出貨單號”,因為很多業務角度的ABAP會抓出貨單號,很多異動類型跟出貨沒關係。
例如101 與 102 的物料文件關係為何? 101 的物料文件號碼(BELNR)與參考文件號碼(LFBNR)一定是相同,只要不是迴轉的這兩個欄位都會相同。
只要是迴轉的交易,物料文件的參考文件號碼(LFBNR)就是他回帳對象的文件號碼(BELNR),例如102的文件參考號碼(LFBNR)就是101的文件號碼(BELNR)。
抓到相關資料後,我們可以針對過帳文件與迴轉文件的日期月份做比較,如果不是一樣,就表示過帳與迴轉是跨月。
要注意的是庫位,庫位必須抓EKPO採購單身的,必須用採購單號與項目與物料與工廠去關連出來。
2.報表設計需要的Table:
EKBE 主要
MARD, MARA, MAKT
3.報表輸入的參數部份:
EKBE-WERKS 工廠
EKBE-BWART 異動類型
EKBE-MATNR 物料號碼
EKBE-BELNR 物料文件號碼
EKBE-BUDAT 過帳日期
4.輸出的部份:
BELNR 文件號碼
BWART 異動號碼
BUDAT 過帳日期
BUDAT_Month 過帳月份
LFBNR 參考號碼
BUDAT_Reference 參考文件的過帳日期
BUDAT_Reference_Month 參考文件的過帳月份
WERKS 工廠
LGORT 庫位
MAKTX 物料說明
EBELN 採購單
EBELP 採購單項目
MENGE 過帳數量
5.核心的SQL部分
SELECT EKBE~BELNR EKBE~EBELN EKBE~EBELP EKBE~BWART EKBE~BUDAT EKBE~LFBNR EKBE~MATNR EKBE~WERKS EKBE~MENGE
FROM EKBE
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE EKBE~BELNR NE EKBE~LFBNR
AND EKBE~WERKS IN P_WERKS
AND EKBE~MATNR IN P_MATNR
AND EKBE~BWART IN P_BWART
AND EKBE~BELNR IN P_BELNR
*AND EKBE~XBLNR IN P_XBLNR
AND EKBE~BUDAT IN P_BUDAT
AND EKBE~BELNR NE ''
AND EKBE~LFBNR NE ''
AND EKBE~BWART NE ''.
6. 庫位部份需要利用採購單號與項次關連到EKPO單身找出庫位
LOOP AT ITAB3. "抓庫位
SELECT LGORT INTO EKPO-LGORT
FROM EKPO WHERE MATNR = ITAB3-MATNR AND WERKS = ITAB3-WERKS AND EBELN = ITAB3-EBELN AND EBELP = ITAB3-EBELP.
IF SY-SUBRC = 0.
MOVE EKPO-LGORT TO ITAB3-LGORT.
MODIFY ITAB3.
ENDIF.
ENDSELECT.
ENDLOOP.
7. 回帳月份的抓取,透過字串切割
LOOP AT ITAB3. "回帳月份
IF SY-SUBRC = 0.
* WRITE / ITAB3-BUDAT.
STRING = ITAB3-BUDAT .
* WRITE / STRING.
V_YMD = STRING.
V_OFFSET_START = 4 .
V_OFFSET_LENGTH = 2.
V_MONTH = V_YMD+V_OFFSET_START(V_OFFSET_LENGTH).
*WRITE / L_C.
MOVE V_MONTH TO ITAB3-BUDAT_M.
MODIFY ITAB3.
ENDIF.
ENDLOOP.
8. 參考文件的過帳月份抓取,如果是102為物料參考文件,那此段的月份就是101的過帳月份
LOOP AT ITAB3. "抓參考文件號碼的月份
SELECT SINGLE * FROM EKBE
WHERE MATNR = ITAB3-MATNR
AND BELNR = ITAB3-LFBNR.
IF SY-SUBRC = 0.
MOVE EKBE-BUDAT TO ITAB3-RBUDAT.
STRING = ITAB3-RBUDAT .
* 轉換日期到字串月
V_YMD = STRING.
V_OFFSET_START = 4 .
V_OFFSET_LENGTH = 2.
V_MONTH = V_YMD+V_OFFSET_START(V_OFFSET_LENGTH).
*WRITE / L_C.
MOVE V_MONTH TO ITAB3-RBUDAT_M.
9. 我們只要過帳與迴轉不同月份的資料,所以相同就刪除
*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
ENDIF.
MODIFY ITAB3.
ENDLOOP.
10. ITAB3 異動後,再把重複的刪除列移除,重新寫入。
SORT ITAB3 BY BELNR. "依據文件號碼排序
DELETE ADJACENT DUPLICATES FROM ITAB3.
雖然SAP標準系統有提供MB51供相關物料文件異動類型查詢,但是財務每月做成本的稽核時,就會發現一堆迴轉異動類型不知道頭尾,這時候財務成本人員要忙著對帳,於是如果有一個報表可以提供所有”跨月”異動的帳作呈現,是不是就可以大大降低檢核人員的負擔,同時也可以提供各單位有需要的人員作襙做異常管理用,如倉管主管可以依據此報表查看收貨、發料人員是否有異常回帳,船務主管也可以檢核出貨的VL02N是否正常運行。
整個設計主要以EKBE為主,其中物料文件的過帳與迴轉的關連性並非”出貨單號”,因為很多業務角度的ABAP會抓出貨單號,很多異動類型跟出貨沒關係。
例如101 與 102 的物料文件關係為何? 101 的物料文件號碼(BELNR)與參考文件號碼(LFBNR)一定是相同,只要不是迴轉的這兩個欄位都會相同。
只要是迴轉的交易,物料文件的參考文件號碼(LFBNR)就是他回帳對象的文件號碼(BELNR),例如102的文件參考號碼(LFBNR)就是101的文件號碼(BELNR)。
抓到相關資料後,我們可以針對過帳文件與迴轉文件的日期月份做比較,如果不是一樣,就表示過帳與迴轉是跨月。
要注意的是庫位,庫位必須抓EKPO採購單身的,必須用採購單號與項目與物料與工廠去關連出來。
2.報表設計需要的Table:
EKBE 主要
MARD, MARA, MAKT
3.報表輸入的參數部份:
EKBE-WERKS 工廠
EKBE-BWART 異動類型
EKBE-MATNR 物料號碼
EKBE-BELNR 物料文件號碼
EKBE-BUDAT 過帳日期
4.輸出的部份:
BELNR 文件號碼
BWART 異動號碼
BUDAT 過帳日期
BUDAT_Month 過帳月份
LFBNR 參考號碼
BUDAT_Reference 參考文件的過帳日期
BUDAT_Reference_Month 參考文件的過帳月份
WERKS 工廠
LGORT 庫位
MAKTX 物料說明
EBELN 採購單
EBELP 採購單項目
MENGE 過帳數量
5.核心的SQL部分
SELECT EKBE~BELNR EKBE~EBELN EKBE~EBELP EKBE~BWART EKBE~BUDAT EKBE~LFBNR EKBE~MATNR EKBE~WERKS EKBE~MENGE
FROM EKBE
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE EKBE~BELNR NE EKBE~LFBNR
AND EKBE~WERKS IN P_WERKS
AND EKBE~MATNR IN P_MATNR
AND EKBE~BWART IN P_BWART
AND EKBE~BELNR IN P_BELNR
*AND EKBE~XBLNR IN P_XBLNR
AND EKBE~BUDAT IN P_BUDAT
AND EKBE~BELNR NE ''
AND EKBE~LFBNR NE ''
AND EKBE~BWART NE ''.
6. 庫位部份需要利用採購單號與項次關連到EKPO單身找出庫位
LOOP AT ITAB3. "抓庫位
SELECT LGORT INTO EKPO-LGORT
FROM EKPO WHERE MATNR = ITAB3-MATNR AND WERKS = ITAB3-WERKS AND EBELN = ITAB3-EBELN AND EBELP = ITAB3-EBELP.
IF SY-SUBRC = 0.
MOVE EKPO-LGORT TO ITAB3-LGORT.
MODIFY ITAB3.
ENDIF.
ENDSELECT.
ENDLOOP.
7. 回帳月份的抓取,透過字串切割
LOOP AT ITAB3. "回帳月份
IF SY-SUBRC = 0.
* WRITE / ITAB3-BUDAT.
STRING = ITAB3-BUDAT .
* WRITE / STRING.
V_YMD = STRING.
V_OFFSET_START = 4 .
V_OFFSET_LENGTH = 2.
V_MONTH = V_YMD+V_OFFSET_START(V_OFFSET_LENGTH).
*WRITE / L_C.
MOVE V_MONTH TO ITAB3-BUDAT_M.
MODIFY ITAB3.
ENDIF.
ENDLOOP.
8. 參考文件的過帳月份抓取,如果是102為物料參考文件,那此段的月份就是101的過帳月份
LOOP AT ITAB3. "抓參考文件號碼的月份
SELECT SINGLE * FROM EKBE
WHERE MATNR = ITAB3-MATNR
AND BELNR = ITAB3-LFBNR.
IF SY-SUBRC = 0.
MOVE EKBE-BUDAT TO ITAB3-RBUDAT.
STRING = ITAB3-RBUDAT .
* 轉換日期到字串月
V_YMD = STRING.
V_OFFSET_START = 4 .
V_OFFSET_LENGTH = 2.
V_MONTH = V_YMD+V_OFFSET_START(V_OFFSET_LENGTH).
*WRITE / L_C.
MOVE V_MONTH TO ITAB3-RBUDAT_M.
9. 我們只要過帳與迴轉不同月份的資料,所以相同就刪除
*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
ENDIF.
MODIFY ITAB3.
ENDLOOP.
10. ITAB3 異動後,再把重複的刪除列移除,重新寫入。
SORT ITAB3 BY BELNR. "依據文件號碼排序
DELETE ADJACENT DUPLICATES FROM ITAB3.
如何在MSEG的範圍中,抓取物料的最新進貨供應商資訊
如何在MSEG的範圍中,抓取物料的最新進貨供應商資訊。
一般來說供應商的最新資訊會常常異動,以101 收貨之進貨供應商資訊來說,一般報表在查詢關聯時要如何帶出呢?
一般來說如果使用MSEG在處理過帳或是保稅相關的報表時,MSEG紀錄的供應商為當筆異動類型的供應商,換句話說,如果你的當筆MSEG紀錄沒有101異動類型的狀態,那你要的供應商欄位可能會是空白或是外包供應商。
我們必須在ITAB LOOP時,利用MSEG的MJAHR的年度欄位等於當下查詢的最新日期的年YYYY數值,這樣就可以撈出最新的供應商資訊。
以下簡短的重點SQL,請參閱:
欄位定義
MJAHR_Y LIKE MSEG-MJAHR,"最新年度
MJAHR LIKE MSEG-MJAHR,"文件年度
* 定義日期的字串月份擷取,T_YEAR 為輸入條件查詢年月日的YYYY
DATA: STRING(10),
V_OFFSET_START TYPE I,
V_OFFSET_LENGTH TYPE I,
V_YMD(10) TYPE C,
T_YEAR(4) TYPE C,
V_YEAR(4) TYPE C.
*今年年度,將輸入的YYYYMMDD擷取YYYY
V_OFFSET_START = 0.
V_OFFSET_LENGTH = 4.
T_YEAR = SY-DATUM+V_OFFSET_START(V_OFFSET_LENGTH).
LOOP AT ITAB3.
*透過101 與最新年度,抓取最新供應商代號, 供應商名稱
SELECT SINGLE * FROM MSEG WHERE MATNR = ITAB3-MATNR AND
WERKS = ITAB3-WERKS AND
LGORT = ITAB3-LGORT AND
MJAHR = T_YEAR AND
BWART = '101'.
一般來說供應商的最新資訊會常常異動,以101 收貨之進貨供應商資訊來說,一般報表在查詢關聯時要如何帶出呢?
一般來說如果使用MSEG在處理過帳或是保稅相關的報表時,MSEG紀錄的供應商為當筆異動類型的供應商,換句話說,如果你的當筆MSEG紀錄沒有101異動類型的狀態,那你要的供應商欄位可能會是空白或是外包供應商。
我們必須在ITAB LOOP時,利用MSEG的MJAHR的年度欄位等於當下查詢的最新日期的年YYYY數值,這樣就可以撈出最新的供應商資訊。
以下簡短的重點SQL,請參閱:
欄位定義
MJAHR_Y LIKE MSEG-MJAHR,"最新年度
MJAHR LIKE MSEG-MJAHR,"文件年度
* 定義日期的字串月份擷取,T_YEAR 為輸入條件查詢年月日的YYYY
DATA: STRING(10),
V_OFFSET_START TYPE I,
V_OFFSET_LENGTH TYPE I,
V_YMD(10) TYPE C,
T_YEAR(4) TYPE C,
V_YEAR(4) TYPE C.
*今年年度,將輸入的YYYYMMDD擷取YYYY
V_OFFSET_START = 0.
V_OFFSET_LENGTH = 4.
T_YEAR = SY-DATUM+V_OFFSET_START(V_OFFSET_LENGTH).
LOOP AT ITAB3.
*透過101 與最新年度,抓取最新供應商代號, 供應商名稱
SELECT SINGLE * FROM MSEG WHERE MATNR = ITAB3-MATNR AND
WERKS = ITAB3-WERKS AND
LGORT = ITAB3-LGORT AND
MJAHR = T_YEAR AND
BWART = '101'.
呆滯庫存的關鍵技術分享
SAP讀書會:呆滯庫存的關鍵技術分享
呆滯庫存的報表原由:
呆滯庫存報表一般可以由MB5B依據過帳資訊來產生呆滯物料的資訊,但是如果遇到需要客製報表的需求,我們可以自己設計。
關鍵Table:
呆滯庫存的設計需要運用到過帳相關紀錄資訊,如 MSEG & MKPF,兩者透過文件號碼做關聯(MBLNR);另外其他的物料資訊可以由MARD 取得。
邏輯關鍵SQL:
首先要以物料主檔(MARD)為主要的Table並JOIN 物料異動紀錄(MSEG) & 過帳資訊紀錄(MKPF),其中物料主檔(MARD)與物料異動紀錄(MSEG)以物料號碼做為關聯(KEY),另外物料異動紀錄(MSEG)與過帳記錄資訊(MKPF)用物料文件號碼(MBLNR)做關聯。
輸入的主要參數有(Input):
P_WERKS FOR MARD-WERKS DEFAULT 'TW11', "工廠
P_MATNR FOR MARD-MATNR,"物料號碼
P_SDATE FOR MARD-ERSDA. "開始與結束日期
輸出的主要參數有(Output):
LIKE MARD-MATNR,"物料號碼
LIKE MARD-LABST,"未使用庫存數量
LIKE MARD-WERKS,"工廠
LIKE MARD-LGORT,"庫位
LIKE MBEW-VERPR,"異動平均價
LIKE MBEW-LBKUM,"庫存總值
主要的宣告:
DATA: I_SA TYPE P DECIMALS 4. "庫存總值
* 定義日期的字串月份擷取
DATA: STRING(10),
V_OFFSET_START TYPE I,
V_OFFSET_LENGTH TYPE I,
V_YMD(10) TYPE C,
T_YEAR(4) TYPE C,
V_YEAR(4) TYPE C.
主要SQL 有兩個ITAB,分別是ITAB3 & ITAB4:
ITAB3 主要是抓出所有的資訊,而ITAB4 主要抓出跟相關呆滯有關的關鍵異動類型,最後再用LOOP AT ITAB的方式,ITAB4就是把不符合呆滯的物料都抓出來放到ITAB4,這樣ITAB3 去比對ITAB4 就可以排出MSEG 跟非符合呆滯的物料。
不然單一一個SQL去排除,通常只會排除當筆的MSEG紀錄,其他的相同物料一樣會在列出來。
以下是ITAB3 主要SQL
SELECT
MARD~MATNR MARD~LABST MARD~WERKS MARD~LGORT
MSEG~BWART MKPF~BUDAT
FROM MARD
INNER JOIN MSEG ON MARD~MATNR = MSEG~MATNR
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE MARD~MATNR = MSEG~MATNR
AND MARD~WERKS = MSEG~WERKS
AND MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR
AND MSEG~BWART NE '261'
AND MSEG~BWART NE '311'
AND MSEG~BWART NE '309'
AND MSEG~BWART NE '901'
AND MSEG~BWART NE '903'
AND MSEG~BWART NE '913'
AND MSEG~BWART NE '915'
AND MSEG~BWART NE '917'
AND MSEG~BWART NE '919'
AND MSEG~BWART NE '101'
AND MARD~MATNR IN P_MATNR
AND MARD~WERKS IN P_WERKS
AND MARD~LGORT IN P_LGORT
AND MKPF~BUDAT IN P_SDATE.
以下是主要的ITAB4 SQL
*ITAB4
SELECT
MSEG~MBLNR "Number of Material Document
MSEG~MJAHR "Material Document Year
MSEG~BWART "Moving Type
MSEG~MATNR "Material Number
MSEG~WERKS "Plant
MSEG~LGORT "Storage Location
MSEG~LIFNR "Vendor Number
MKPF~BUDAT
FROM MSEG
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB4
WHERE MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR
AND ( MSEG~BWART = '101'
OR MSEG~BWART = '261'
OR MSEG~BWART = '311'
OR MSEG~BWART = '309'
OR MSEG~BWART = '901'
OR MSEG~BWART = '903'
OR MSEG~BWART = '913'
OR MSEG~BWART = '915'
OR MSEG~BWART = '917'
OR MSEG~BWART = '919' )
AND MSEG~MATNR IN P_MATNR
AND MSEG~WERKS IN P_WERKS
AND MSEG~LGORT IN P_LGORT
AND MKPF~BUDAT IN P_SDATE.
*將ITAB3 有涉及到的異動類型都Clear
SORT ITAB3 BY MATNR.
SORT ITAB4 BY MATNR.
DELETE ADJACENT DUPLICATES FROM ITAB4 COMPARING MATNR.
LOOP AT ITAB3.
LOOP AT ITAB4.
IF ITAB3-MATNR = ITAB4-MATNR.
CLEAR ITAB3.
MODIFY ITAB3.
ENDIF.
ENDLOOP.
ENDLOOP.
呆滯庫存的報表原由:
呆滯庫存報表一般可以由MB5B依據過帳資訊來產生呆滯物料的資訊,但是如果遇到需要客製報表的需求,我們可以自己設計。
關鍵Table:
呆滯庫存的設計需要運用到過帳相關紀錄資訊,如 MSEG & MKPF,兩者透過文件號碼做關聯(MBLNR);另外其他的物料資訊可以由MARD 取得。
邏輯關鍵SQL:
首先要以物料主檔(MARD)為主要的Table並JOIN 物料異動紀錄(MSEG) & 過帳資訊紀錄(MKPF),其中物料主檔(MARD)與物料異動紀錄(MSEG)以物料號碼做為關聯(KEY),另外物料異動紀錄(MSEG)與過帳記錄資訊(MKPF)用物料文件號碼(MBLNR)做關聯。
輸入的主要參數有(Input):
P_WERKS FOR MARD-WERKS DEFAULT 'TW11', "工廠
P_MATNR FOR MARD-MATNR,"物料號碼
P_SDATE FOR MARD-ERSDA. "開始與結束日期
輸出的主要參數有(Output):
LIKE MARD-MATNR,"物料號碼
LIKE MARD-LABST,"未使用庫存數量
LIKE MARD-WERKS,"工廠
LIKE MARD-LGORT,"庫位
LIKE MBEW-VERPR,"異動平均價
LIKE MBEW-LBKUM,"庫存總值
主要的宣告:
DATA: I_SA TYPE P DECIMALS 4. "庫存總值
* 定義日期的字串月份擷取
DATA: STRING(10),
V_OFFSET_START TYPE I,
V_OFFSET_LENGTH TYPE I,
V_YMD(10) TYPE C,
T_YEAR(4) TYPE C,
V_YEAR(4) TYPE C.
主要SQL 有兩個ITAB,分別是ITAB3 & ITAB4:
ITAB3 主要是抓出所有的資訊,而ITAB4 主要抓出跟相關呆滯有關的關鍵異動類型,最後再用LOOP AT ITAB的方式,ITAB4就是把不符合呆滯的物料都抓出來放到ITAB4,這樣ITAB3 去比對ITAB4 就可以排出MSEG 跟非符合呆滯的物料。
不然單一一個SQL去排除,通常只會排除當筆的MSEG紀錄,其他的相同物料一樣會在列出來。
以下是ITAB3 主要SQL
SELECT
MARD~MATNR MARD~LABST MARD~WERKS MARD~LGORT
MSEG~BWART MKPF~BUDAT
FROM MARD
INNER JOIN MSEG ON MARD~MATNR = MSEG~MATNR
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE MARD~MATNR = MSEG~MATNR
AND MARD~WERKS = MSEG~WERKS
AND MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR
AND MSEG~BWART NE '261'
AND MSEG~BWART NE '311'
AND MSEG~BWART NE '309'
AND MSEG~BWART NE '901'
AND MSEG~BWART NE '903'
AND MSEG~BWART NE '913'
AND MSEG~BWART NE '915'
AND MSEG~BWART NE '917'
AND MSEG~BWART NE '919'
AND MSEG~BWART NE '101'
AND MARD~MATNR IN P_MATNR
AND MARD~WERKS IN P_WERKS
AND MARD~LGORT IN P_LGORT
AND MKPF~BUDAT IN P_SDATE.
以下是主要的ITAB4 SQL
*ITAB4
SELECT
MSEG~MBLNR "Number of Material Document
MSEG~MJAHR "Material Document Year
MSEG~BWART "Moving Type
MSEG~MATNR "Material Number
MSEG~WERKS "Plant
MSEG~LGORT "Storage Location
MSEG~LIFNR "Vendor Number
MKPF~BUDAT
FROM MSEG
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB4
WHERE MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR
AND ( MSEG~BWART = '101'
OR MSEG~BWART = '261'
OR MSEG~BWART = '311'
OR MSEG~BWART = '309'
OR MSEG~BWART = '901'
OR MSEG~BWART = '903'
OR MSEG~BWART = '913'
OR MSEG~BWART = '915'
OR MSEG~BWART = '917'
OR MSEG~BWART = '919' )
AND MSEG~MATNR IN P_MATNR
AND MSEG~WERKS IN P_WERKS
AND MSEG~LGORT IN P_LGORT
AND MKPF~BUDAT IN P_SDATE.
*將ITAB3 有涉及到的異動類型都Clear
SORT ITAB3 BY MATNR.
SORT ITAB4 BY MATNR.
DELETE ADJACENT DUPLICATES FROM ITAB4 COMPARING MATNR.
LOOP AT ITAB3.
LOOP AT ITAB4.
IF ITAB3-MATNR = ITAB4-MATNR.
CLEAR ITAB3.
MODIFY ITAB3.
ENDIF.
ENDLOOP.
ENDLOOP.
訂閱:
文章 (Atom)