2008年12月8日 星期一

[更新20081208]跨月回帳檢核報表最新ABAP邏輯

原始文章
http://www.domino.club.tw/bbs/bbs2002.nsf/($All)/405816716959408A4825750D000E4424?OpenDocument
2008/12/8 更新
http://www.domino.club.tw/bbs/bbs2002.nsf/($All)/E3499F04F80F4D5B482575190042B999?OpenDocument

核心程式如下:
*共通欄位
*1. MSEG~MBLNR 物料文件
*2. MSEG~MJAHR 物料年度
*3. MSEG~ZEILE 項目
*4. MSEG~LGORT 儲位
*5. MSEG~WERKS 工廠
*6. MKPF~BUDAT 過帳日期
*
*共通SQL
*1. MSEG~SMBLN NE '空白'
*2. MSEG~LFBNR NE '空白'
*
*無採購單的SQL & Outpout
*SQL
*1. MSEG~EBELN 採購單="空白"
*2. MSEG~SJAHR = MSEG~MJAHR 迴轉年度相等
*3. MSEG~SMBLN = MSEG~MBLNR 迴轉物料文件相等
*4. MSEG~SMBLP = MSEG~ZEILE 迴轉物料項目
*
*有採購單的SQL
*SQL
*1. MSEG~EBELN 採購單="非空白"
*2. MSEG~SJAHR = MSEG~LFBJA 迴轉年度相等
*3. MSEG~SMBLN = MSEG~LFBNR 迴轉物料文件相等
*4. MSEG~SMBLP = MSEG~LFPOS 迴轉物料項目

*ITAB特別定義有採購單與無採購單的欄位
LFBNR LIKE MSEG-LFBNR,"參考文件號碼 (採購)
LFBJA LIKE MSEG-MJAHR,"文件號碼年度 (採購)
LFPOS LIKE MSEG-ZEILE,"文件號碼項次 (採購)
SMBLN LIKE MSEG-SMBLN,"物料文件號碼 (無採購)
SJAHR LIKE MSEG-MJAHR,"文件號碼年度 (無採購)
SMBLP LIKE MSEG-ZEILE,"文件號碼項次 (無採購)

SELECT MSEG~WERKS MSEG~LGORT MSEG~MENGE MSEG~BWART
MSEG~EBELN MSEG~EBELP
MSEG~MBLNR MSEG~MJAHR MSEG~ZEILE
MSEG~SJAHR MSEG~SMBLN MSEG~SMBLP
MSEG~LFBJA MSEG~LFBNR MSEG~LFPOS
MKPF~MBLNR MKPF~BUDAT MKPF~MJAHR
FROM MSEG
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE ( MSEG~MBLNR NE MSEG~LFBNR AND MSEG~ZEILE NE MSEG~LFPOS )
AND ( MSEG~SMBLN NE '' OR MSEG~LFBNR NE '' )
AND MSEG~BWART NE ''
AND MSEG~WERKS IN P_WERKS
AND MSEG~MATNR IN P_MATNR
AND MSEG~BWART IN P_BWART
AND MSEG~MBLNR IN P_MBLNR
AND MKPF~BUDAT IN P_BUDAT.

*有採購單的部份
LOOP AT ITAB3. "抓參考文件號碼的月份
IF ITAB3-EBELN NE ''.
SELECT SINGLE * FROM MSEG
WHERE MBLNR = ITAB3-LFBNR
AND MJAHR = ITAB3-LFBJA
AND ZEILE = ITAB3-LFPOS.
MOVE MSEG-MBLNR TO ITAB3-LFBNR.
MOVE MSEG-MATNR TO ITAB3-MATNR.

SELECT SINGLE * FROM MKPF
WHERE MBLNR = ITAB3-LFBNR
AND MJAHR = ITAB3-LFBJA.
MOVE MKPF-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).
MOVE V_MONTH TO ITAB3-RBUDAT_M.

*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
MODIFY ITAB3.

*ENDIF.
ENDIF.
ENDLOOP.

LOOP AT ITAB3. "抓參考文件號碼的月份
*無採購單的部份
IF ITAB3-EBELN = ''.
SELECT SINGLE * FROM MSEG
WHERE MBLNR = ITAB3-SMBLN
AND MJAHR = ITAB3-SJAHR
AND ZEILE = ITAB3-SMBLP.
MOVE MSEG-MBLNR TO ITAB3-LFBNR.
MOVE MSEG-MATNR TO ITAB3-MATNR.

SELECT SINGLE * FROM MKPF
WHERE MBLNR = ITAB3-LFBNR
AND MJAHR = ITAB3-SJAHR.
MOVE MKPF-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.

*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
MODIFY ITAB3.
ENDIF.
ENDLOOP.

2008年12月6日 星期六

SAP 讀書會分享: 資料批次上傳前的NotesFlow簽核卡關的方法

前提:
因為SAP ERP 很多公司都會客製很多批次上傳更改Table資料,而這樣的程序往往會因為使用者的失誤而造成很大的困擾;又因為很多公司礙於SAP帳號貴,無法一次買足而使用共用帳號的方式,所以如果在程式執行前可以有個行為作卡關,這樣就可以減少一些錯誤發生。

方法:
程式執行前端可以增設一個欄位,內容是Notes電子表單的單號,那這個單號可以透過Notes 簽核流程完成後,透過代理程式把單號寫入到SAP 的Add On Table,每次SAP程式執行前就去檢核此Add On Table 的單號紀錄,執行後再把此單號給記錄取消,後續在執行都需要在跑簽核流程才可以執行。

影響面:
目前僅能針對客製的程式做檢核的控管,標準程式就無法修改;另外很多大批程式上傳不見得要層層控管,也可以透過其他方式來管理,例如:大批程式執行前可以請使用者輸入你的姓名或是工號之類,執行後系統就會通知相關承辦的窗口這些異動資訊與紀錄,當然也可以自動記錄在Notes Mail In 收件資料庫中,畢竟Notes屬於OA 管理層面,會比SAP ERP 資料庫層面更容易管理行政電子資料應用。

以上

2008年11月30日 星期日

SAP 物料主檔透過Notes呼叫RFC來自動建立

不知道大家有沒有這方面的經驗?

雖然公司已經有準備導入超大型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月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讀書會推動者

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.

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,最後才發現根本不是程式問題那就浪費許多時間。