針對查詢「erp」依關聯性排序顯示文章。依日期排序 顯示所有文章
針對查詢「erp」依關聯性排序顯示文章。依日期排序 顯示所有文章

2020年12月28日 星期一

SAP ERP + SAP ME 整合經驗

導入過程中學到的東西很多,原本在整合中覺得理所當然的的事卻不理所當然的,感謝開發 team的同仁的努力與不放棄,自己測試不同情境和提出建議,節省工時和成本是很可觀的 

 在 SAP ERP的每個工作中心報工項目和順序依據 IMG設定的標準值碼進定,不同工作中心可以有不同的報工模式,但在導入時顧問要求全廠的報工項目、順序必需要相同,這樣 ME與 ERP拋轉才不會出現錯誤,但經過同仁的測試與實作證明 ME端也可以依據不同工作中心可以有不同的報工模式,顧問才調整相關程式,後來發現,ME端也有功能在維護標準值碼,也可以由 ERP拋轉過來,所以證明同家公司的產品整合度不那麼差 

 途程因導入過程需要大量調整的部份要儘早測試,因為有可能工序是外包或是廠內自製所要求的參數不同。測試需要花多些時間 因為工單的檢驗要移至 ME上,正式區轉移時需使用 t-code QA08 取消料號的 QM view IPQC/FQC 的選項 

 在導入 ERP 時,SAP自豪的導入手法要求在不同 phase完成相項事項,建議 ME的顧問團隊也比照辦理,這個是有比較才會懂 因為 ME系統與產品品質有絕對關係,有被要求執行軟體確效的公司,請作好確效計劃,和整測時要把測試記錄保存 SAP ERP與 SAP ME在整合時可能需要在 ERP建立新帳號給顧問使用,要小心開立的權限,如因會計師要求在上線後才進行權限限縮,可能造成資料拋轉有問題,所以在測試時就要檢示帳號權限問題。 

 相關 ERP的變動建議都要用 CR方式一步一步更新,不要讓顧問直接有過大權限在正式區調整 請檢示目前 ERP帳號針對外部可以 cal RFC, Web Service的授權數量,如果只有一個,在 ME整合時就要考慮用新帳號作為雙邊系統資料拋轉時是否會被 SAP原廠追加 License

2012年8月27日 星期一

OAuth for Spring Security 應用實作

參考來源:https://github.com/SpringSource/spring-security-oauth/wiki/tutorial
程式下載:https://github.com/SpringSource/spring-security-oauth 網頁下面有文字說明如何使用 maven將 source code下載回來。

目前 tutorial 有實作 OAuth1, OAuth2 的Server 和 Client, Client 可以下載 Server 的圖片。 而我的目的就是可以建立一個公司內部認證網站(OAuth 是用來作授權用的),使用者在連其它公司自製網站時可以連來這個網站使用 Notes or AD, Oracle ERP 的帳號作登入,當帳號、密碼正確時就可以允許 oauth client 存取 登入使用者的工號、部門、 email等。

修改部份:
首先我選擇的是拿 OAuth2的範列來改,Server  的 source code 代號為 Sparklr2,Client 的代號為 Tonr2。

因為要讓使用者可以用Notes or AD, Oracle ERP 的帳號作登入,所以要先改 OAuth2 Server 的部份,目前 spring security 選擇 authentication的方式有兩種,一種是 AuthenticationProvider ,一種是UserService,我選擇的是AuthenticationProvider ,所以要實作一個 class implements org.springframework.security.authentication.AuthenticationProvider 並實作兩個 method

1.public Authentication authenticate(Authentication authentication)   ==>讓我可以用Notes or AD, Oracle ERP 的帳號、宓碼登入後檢查是否正確。

2. public boolean supports(Class authentication) {
         return authentication.equals(UsernamePasswordAuthenticationToken.class);

     }

等這個 provider實作好之後,就要在 WEB-INF\spring-servlet.xml 內加上設定,這樣就可以完成認證的功能了。





再來就是分享員工資訊的程式了, 可以實作自己的 controller,參考原程式分享 photoID的 service : PhotoController, PhotoServiceImpl,PhotoService
記得WEB-INF\spring-servlet.xml 也要將相關的 tag 加上。

而 Client 的程式也請參考原程式如何存取 photoID
等 server , client 的程式都實作好之後就可以放到 tomcat 上了。 目前實作好之後才發現 Client 要先自己認證完成,才可以去 Server再去作認證一次,才可以存取我的員工資訊,但我想的是 Client 本身不用有認證的程序,直接到  server 作認證後存取資料。上網找了一下資訊,發現好像沒有人分享怎麼設定 OAuth2才可以達到我的要求,所以我又拿了 OAuth1的 source code改了一次。

OAuth1 跟 OAuth2 設定上有一點不一樣,除了WEB-INF\spring-servlet.xml之外,又多了一個檔案 applicationContext.xml,也是 spring 標準設定檔。
這邊也是實作我自己的 AuthenticationProvider ,但是在設定上就不是在 spring-servlet.xml新增 的資訊了,而是要放在 applicationContext.xml 而且 bean 要改為 beans:bean 這樣才可以。 其它 controller or  service的程式才在spring-servlet.xml 註冊。
再來就是 oauth:consumer-details-service id="consumerDetails" 的設定 


這邊就可增加自己   oauth:consumer

實作分享員工資訊的程式也跟 OAuth2實作差不多,設定上 OAuth1 OAuth2會有差異,只要參考原程式存取 photoID怎麼寫和怎麼設定應該就沒什麼大問題了。 


最後我想測試用 asp.net 也可以存取我的 OAuth1實作出來的 server員工資訊,這一次我採用

DotNetOpenAuth  http://www.dotnetopenauth.net/ 

實作自己的 service comsumer

public static readonly ServiceProviderDescription ServiceDescription = new ServiceProviderDescription {
            RequestTokenEndpoint = new MessageReceivingEndpoint("http://ip:port/OAuth1Server/oauth/request_token", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
            UserAuthorizationEndpoint = new MessageReceivingEndpoint("http://ip:port/OAuth1Server /oauth/confirm_access", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
            AccessTokenEndpoint = new MessageReceivingEndpoint("http:// ip:port/OAuth1Server /oauth/access_token", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() },
};

/// The URI to get the data on the user's home page.
///
        private static readonly MessageReceivingEndpoint cattonEmpInfoEndpoint = new MessageReceivingEndpoint("http:// ip:port/OAuth1Server/service?format=json", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest);


private static InMemoryTokenManager ShortTermUserSessionTokenManager {
get {
var store = HttpContext.Current.Session;
var tokenManager = (InMemoryTokenManager)store["CattonOAuth1SessionTokenManager"];
if (tokenManager == null) {
                    string consumerKey = ConfigurationManager.AppSettings["CattonOAuthConsumerKey"];
                    string consumerSecret = ConfigurationManager.AppSettings["CattonOAuthConsumerSecret"];
if (IsTwitterConsumerConfigured) {
tokenManager = new InMemoryTokenManager(consumerKey, consumerSecret);
                        store["CattonOAuth1SessionTokenManager"] = tokenManager;
} else {
throw new InvalidOperationException("No Catton OAuth consumer key and secret could be found in web.config AppSettings.");
}
}

return tokenManager;
}
}

public static string GetUserInfo(ConsumerBase cattonOAuthCB, string accessToken) {
            IncomingWebResponse response = cattonOAuthCB.PrepareAuthorizedRequestAndSend(cattonEmpInfoEndpoint, accessToken);
          
            return  response.GetResponseReader().ReadToEnd();

}

實作畫面



2015年9月24日 星期四

我的工作小記事


2002 ~ 2024 在資通電腦使用 J2EE, JSP技術幫台積電開發 EIC(工程師資訊)系統,原本台積已經有這一套系統是用 Delphi開發 ActiveX程式,但要改掉使用當時最流行的 Java EJB, JSP等,我的工作在有限的一星期內要讓系統上有相關圖表顯示製程良率資訊,否則專案將會失敗,後來成功實作 JClass圖表讓專案成功。

2004 ~ 2006 在華聯生技個人開發 Oligo Control System讓使用者管控生物晶片最重要的原料 Oligo(DNA片段),從進料至生產的控管,讓晶片上 DNA探針完全符合生產要求。
晶片說明:Phalanx Human One Array

2009 使用 Asp.Net 2.0技術改版勝華科技官網
         使用 Flex 3+ J2EE技術開發儀器管理系統 儀器管理系統 Demo
         導入 web service應用,讓 Notes可以跟其它系統作資料溝通
2010 協助勝華科技導入 Oracle ERP ( EBS) R12,負責模組 GL, AP, PO, NM, GV
2012 建置實作 OAuth Server讓自己開發的系統作認證、授權用 OAuth實作文章

2015~ 2016 利用 Asp.Net MVC 5技術在兩星期內開發預算系統,
         包含鉅茂 ERP資訊讀取、DB Objects建立、.Net程式碼開發、前端網頁開發等
         Portal建置,使用 bootstrap 3, jquery, fullcalendar等前端 java script程式開發
         Bootstrap實作相關

2017~2018  PLM收尾,完成驗收
 
2018 ~2019 導入 SAP ERP,團隊建罝,使用者端需求管理,Server問題排除等
 
2019 ~2023 改善資安,設備更換,導入 802.1x,資安政策建立等


 
 

 



2011年8月18日 星期四

Oracle ERP R12 Java Concurrent Program


公司正在導入 ERP R12,還是不太習慣 Form, Report 的開發
所以想要看看  java concurrent program 的方法是否有比較好用

這邊有一篇文章可以看看,我自己也在學習中

Oracle Support Knowledge

2014年7月21日 星期一

Oracle EBS R12 PO Line單價異動影響 AP會科費用產生

通常發生在倉管人員有作退料的情況下,採購使用者會來問,為什麼收料是一個單價,退料又是另一個單價,AP Invoice, Debit Memo這時會科就會出現差異,很明顯的就是在這收、退的期間內,使用者去改變 PO Line的單價了,但可能是使用者太忙忘了,還是推責任的因素,往往都不承認有作過這件事,所以可以用 DB Trigger or ERP Alert的方式,如果有針對價格或數量有更動的話,把記錄寫進到一個暫存的 table內,這樣就比較好找出問題了。   雖然 Oracle ERP有很多 bug,尤其是在 AP這一模組,但實在很不想聽到每次使用者都說是系統的問題。

2013年6月20日 星期四

WEB ADI Supplier, Supplier Site Java Component範例

這邊有一個範例可以參考,讓 Supplier Site可以針對所選的 Supplier而透出相對應的 Site,實作後是可行的,不過針對第四點好像只能透過這個指令執行,而不能在 ERP define component的網頁上設定。 而目前我碰到最大的問題是重新compile java code後 (我要加上 org_id的條件),系統還是會執行舊的程式,必需要重新 bounce( reboot) ERP,我有參考 bne cache clear的文件,但還是沒用,所以只好重開。 目前正常 work。

參考文件
Dependent LOV(List of Values) in Oracle Web ADI with steps and source code

BNE Cache clear for Desktop Integrator

2025年4月15日 星期二

2012年8月29日 星期三

Oracle EBS R12 Invoice Validation 客製 (customize)

 在 Oracle ERP AP的標準 Invoice Validation報表中,使用者可以針對如 Batch Name 等條件去作 validate的動作,但以會計人員的角度是以每一張 Invoice 角度來看,不是各別 batch name or supplier,所以我們會在 Invoice Header上增加一個彈性欄位,值為 Y or N,當會計人員經作業流程確認這張 Invoice沒有問題之後,才去維護這一個彈性欄位,把值設為 Y。

接下來就是客製 Invoice Validation 的部份,在 R11來說是會 copy  APXAPRVL.rdf這一隻報表來改,相對來說比較簡單,只要加上 sql where string 將彈性欄位為 Y值作 validate即可。而使用者只能執行客制報表,不可以執行標準的 Invoice Validation。

為什說比較簡單呢,因為公司的政策是,如果需要客製的話,不可以直接改寫原廠的程式,必需是要作 Clone  ,再來改寫,而使用者就執行改寫的那隻報表。

但導入 R12時,原本想說應該也是這麼簡單,但很快地就發現我錯了。  因為在 R12,sql string 不是放在 Report 內,而是放在 AP_APPROVAL_PKG.pck 內,要改只能在這邊修正,可是公司的政策是,如果需要客製的話,不可以直接改寫原廠的程式,必需是要作 Clone  ,再來改寫,而使用者就執行改寫的那隻報表。   所以只能把 AP_APPROVAL_PKG.pck clone後,再拿來改,可是改完再 compile時,客製的 approve 程式出現了一堆錯誤,花了些時間檢查,又發現到 Oracle 原廠在開發這些 package時有用到類似物件導向的方式。pacakge A會使用 package B的變數, package B又會用到 package C 的變數,所以不得已,又去 Clone好幾隻原廠程式來改,總共 Clone  
     AP_ETAX_PKG.pck  
     AP_ETAX_SERVICES_PKG.pck
     AP_APPROVAL_MATCHED_PKG.pck
拿來改,改到 compile 都沒問題,且在測試 invoice validate 時沒有問題就上線。

因為 R12導入方式是全新導入,而非升級,且導入時 AP這邊沒上什麼 patch,所以導入後一大堆問題跑出來,需要上 patch來作 data fix or root cause fix,當初因為 clone出來而改寫的 package可能都有 bug 存在,所以客製  invoice validation 相關的程式就需要重新再改寫,如果有上的 patch有更動到這些 package的話,我又要再改寫一次。      這種方式真是爛透了,而且也不保證就一定正確,最後會陷入一種情境就是 作呷流汗,嫌呷流口水,吃力不討好。   所以就跟 ERP管理者討論是否可以直接修改原廠程式  AP_APPROVAL_PKG.pck 即可,討論之後的結果是 OK,那就著手進行修改。

可是另外一個問題來了,如果下次上 patch 時有更改 AP_APPROVAL_PKG.pck 時, 程式碼會被更新,自己加上的 where 條件就會不見了,造成每一張 Invoice 都會被拿來作 validate,所以要將客製的 APXAPRVL.rdf加上檢查條件,判斷 AP_APPROVAL_PKG.pck 的程式版本是否有更新,如果有的話,就不執行 validate並丟出一個錯誤讓使用者知道。作法如下

1. 建一個 table 記錄 AP_APPROVAL_PKG.pck 程式的版本,代表這個版本是你有修改過的。
2. 客製的 APXAPRVL.rdf加上檢查條件
    在BeforeReport 內讀取  AP_APPROVAL_PKG.pck的版本
    SELECT trim(text) into AP_APPROVAL_PKG_VER_Current
FROM dba_source  WHERE line = 2 AND type LIKE 'PACKAGE%'
and name ='AP_APPROVAL_PKG' AND owner = 'APPS'
and type = 'PACKAGE BODY'
ORDER BY name, type;

       再比對 兩個程式的版本,如果不同,代表可能有上 patch把程式更新了,這時再重新到      AP_APPROVAL_PKG.pck 把 where clause 加上即可 ,沒有問題後,更新  table 記錄 AP_APPROVAL_PKG.pck 程式的版本。

2013年6月20日 星期四

WEB ADI tourial

目前使用者想透過 adi 方式上傳 AP Invoice的資料,但  ERP沒有針對 AP有標準的 ADI, 所以我這邊要客制一個,這邊有一個文件可以參考,對我的幫助很大。

參考文件
How to Define an Importer Returning Error Messages to the Oracle Web Applications Desktop Integrator Document

2020年7月14日 星期二

SAP ERP途程 table串接

參考文件:

會使用到 MAPL (有料號)  串 PLKO , PLAS, PLPO, SQL 如下
 plko AS ko 
 INNER JOIN plas AS ps 
      ON ko~plnty ps~plnty AND ko~plnnr ps~plnnr
     AND ko~plnal ps~plnal

 INNER JOIN plpo AS po 
      ON po~plnty ps~plnty AND po~plnnr ps~plnnr
     AND po~plnkn ps~plnkn 
 

2025年8月6日 星期三

SAP ERP 工單製程工序委外採購單沒有產生檢驗批

在工單享別為工序委外,會有請購單,請購單再轉為採購單滿,收貨時如果沒有產生檢驗批需要確認兩個地方

1.檢查工單委外工序,查看 tab 外部處理檢驗類型要有值

2.查詢工單料號的料號主檔 mm03 的檢驗整備,對應的檢驗類型要啟用


兩個參數沒有設定好就已收料的話,需迴轉並重新收貨,在啟用該設定後,需要將相關的物料文件進行迴轉(取消),然後再重新執行收貨作業,這樣系統就能夠產生檢驗批

 

 

2021年8月9日 星期一

SAP HANA DB 資料庫記憶體用量一直變高

參考文章:

1980196 - Setting Linux Kernel Parameter /proc/sys/vm/max_map_count on SAP HANA Systems

2808956 - Increased Used Memory Size due to Pool/L/llang/Debuggee

HANA Resident memory HEX OOM(out of momery)限制Resident memory无限增长

一般在 SAP HANA ERP 導入時, Basis顧問應該會把相關設定、參數設定好,導入後的半年也沒有問題,直到第一次發生 DB HA fail 進而造成資料 replication也停止,第一次發生時請 Basis顧問和硬體顧問都有進來檢查 log,但兩邊都說不是自己的問題,最後也只能重建replication再把 HA恢復,

2025年8月6日 星期三

SAP ERP 工單最後一站作 CO13報工迴轉 ,但沒有產生對應的物料文件

因為最後一站迴轉報工會去扣庫存 (產生 102的物料文件),沒有產生對應的物料文件最常的原因為當下庫存數不足,有可能使用者 co11n報工跟 co13不同天,這期間有作庫存交易讓數量變少,用 mb51輸入料號可以看到相關的物料文件記錄 

當下 cogi應該會有錯誤訊息,但可能被人員刪除或是月結後清除

解決方式:migo 102迴轉數量 

 

 

2014年5月30日 星期五

如何讓 Procedure的 Concurrent Status可以變成 Warning 或 Error

參考文章:ERRBUF and RETCODE in Concurrent Program

 因為是 Concurrent是呼叫 Procedure的話,第一個、第二個參數為
 errbuf out varchar2  ,retcode out varchar2

所以可以利用 retcode
retcode  := 1 ERP Request Status就會是 Warning,
retcode  := 2 就會是 Error

2020年7月14日 星期二

SAP ERP 在 SQL 使用 for all entries串接 internal table注意事項

使用 for all entries的 sql程式碼前面一定要先檢查對應的 internal table 是否為空 (is initial),如果不為空值才執行 sql,否則會把資料全部捉出來,有可能造成 db dump的出現。

2021年10月25日 星期一

SAP ERP CS07 讓不同工廠分享 BOM

 CS07並非 clone or copy BOM資訊給另一個工廠,而是作分享,假設工廠 1001 使用 CS07把 BOM1分享給 工廠 1002,那 1002修改 BOM的話, 1001所使用的 BOM也是調整過的。

就資料庫 table 而且,MAST可以看到多筆 MATNR (料號) , WERKS (工廠)但有相同的 STLNR(物料表代碼) ,實際 BOM資料利用 STLNR找 table STKO,  STPO

2025年9月12日 星期五

SAP ERP 工單最後一站報工後沒有自動入庫

一般最後一站報工後會自動入庫,這個設定常在控制碼的參數,控製碼用來區別作業站是自製、委外、檢驗,如果要自動入庫會再新增對應的控制碼,但使用者在維護途程如果不是在最後一站設定了自動入庫的控制碼或是最後一站設定了不是自動入庫的控制碼,這樣最後一站報工就不會自動入庫

 

解決方式為迴轉錯誤站的報工,再調整工單作業站的控制碼,最後再補報工 

2012年8月27日 星期一

Oracle EBS R12 Data Fix - undo accounting 注意事項


導入 ERP R12快滿一年了,負責模組 AP/GL/PO/NM/FA/GUIVAT
最多問題且花最多時間就是 AP 模組,當初顧問在幫忙導入的時候並沒有告知或建議那些重要的 patch要先 apply ,導致在上線後,使用者一直在告訴我那些操作或資料有問題,而我就一直到 oracle support 找文章,  create SR,我建立的 SR 跟別人比的話是用倍數計算的。 所以這邊先分享一個關於執行 Data fix 如果會 undo accounting的注意事項。


1.  如果 undo accounting 在不同的月份,在當月會產生一正一負的會科(reverse),也會可能會產生匯兌損益的會科出現,會計人員要在 GL手動調帳。


2.   如果要在當月執行但已關帳的情況下,要打開 GL, AP, PO Period,作完之後再關閉



2012年1月1日 星期日

Oracle ERP receipt accruals - period-end no entries Period LOV找不到的問題

1  確認AP period 是Closed的狀態 (要執行暫估的那個月份)
2  PO and GL period 是 Open 
3  下一期的PO and GL periods 狀態應該是 Future or Open  

2010年7月11日 星期日

自製 Glassfish Realm

目前的需求是想作一個帳號、密碼的登入需求:使用者登入帳號、密碼後檢查的規則如下
1.先檢查ERP的帳號,如果登入失敗則往下檢查
2.檢查 ADD 的帳號,如果失敗覔往下檢查
3.檢查資料庫內某一特定 TABLE的帳號、密碼欄

如果要達到這樣的需求看來好像只能用自製的 Realm and Login Module了

在網路上有找這一篇文章 http://blogs.sun.com/nithya/entry/groups_in_custom_realms
對我來說很有用,應該是符合我的需求,大家可以參考看看,如果有更好建議,希望可以告知我哦