|
1. 概述 本文介紹了SAP HR模塊報表開發(fā)的相關經驗,結合本人參與項目所做的開發(fā)工作,匯總整理了一些在HR開發(fā)中需要注意的地方,并介紹了有用的小技巧。相信本文對初級從事HR開發(fā)工作的相關人員有一定幫助。因為筆者相關經驗也在積累過程中,也許本文中會出現一些錯誤,還望見諒指正。 2. HR開發(fā)介紹 HR 報表開發(fā)主要涉及到邏輯數據庫的應用,相關的開發(fā)工作也主要圍繞著邏輯數據庫進行。 2.1 邏輯數據庫介紹 邏輯數據庫則提供另一種選擇數據的方式,可以代替SQL語句在數據庫中提取數據,供程序操作。因而,可以認為邏輯數據庫是一種報表設計程序中的輔助工具,而不能將其誤解為一種可進行數據存儲的數據庫。SAP中提供多種類型的邏輯數據庫,開發(fā)人員也可自行定義數據源。 2.2 HR相關邏輯數據庫 HR報表開發(fā)主要是對邏輯數據庫PNP( PNPCE)和PCH的應用。其中PNPCE是PNP的加強。但是本文所舉例子,皆是PNP的應用,如果將來有機會應用到PNPCE邏輯數據庫,會再進行補充。 程序中使用邏輯數據庫非常方便,只要在程序屬性里選擇關聯到就可以實現,直接在程序里就可以使用。 2.2.1 PNP PNP邏輯數據庫主要針對人事信息的查詢。PNP查詢到的信息是以人為單位的,每次查詢到一個人相關信息。如果報表的信息是關于個人人事信息的內容,首先考慮PNP邏輯數據庫。 邏輯數據使用,首先要在程序里定義TABLES: PERNR。PERNR 是一個結構,每次程序返回一個PERNR的結點,代表員工號為pernr-pernr的這個人,并附帶這個人的相關數據。 如果想讓每次返回的人員附帶信息類型數據,需要在程序里定義INFOTYPES: nnnn,nnnn代表信息類型編號(包括自定義增強的信息類型)。如果聲明了信息類型,則在返回個人信息的時候,也順帶返回這個人的一個Pnnnn的結構,對應相應個信息類型。Pnnnn的內容根據屏幕選擇字段內容確定(PNPCE邏輯數據庫返回的內容與PNP有所不同)。 程序里想使用邏輯數據,在主程序里調用GET PERNR。GET pernr類似于一個循環(huán),每次返回一個pernr結點,就是一個人,我們可以對這個人的信息進行處理。當把所有的人都處理完了,那我們所得到的就是需要的數據了。 所以使用PNP邏輯數據庫,最少得有三行: 2.2.2 PCH PCH邏輯數據庫主要是對應于組織管理(OM)。相對于PNP邏輯數據庫,PCH每次返回的結點是OBJEC類型,代表一個對象。這些對象包括在PP01可以維護的對象(例如:O,S,……等等),隨其一同返回的也是OM的信息類型(例如1000,1001……等)。PCH查找結點,除了標準的選擇條件之外,還可以應用評估路徑,這樣大大增強了PCH的可用性。 同PNP邏輯數據庫一樣,PCH也許要在程序里聲明TABLES: OJBEC才可以使用,返回的也是objec結構。使用方法基本同PNP 邏輯數據庫類似。 所以也必須要添加三行: TABLES: OJBEC INFOTYPES: nnnn GET OBJEC. IDES系統(tǒng)里有例程:ZHSOL010 2.3 邏輯數據庫的選擇屏幕 2.3.1 PNP的選擇屏幕 默認的PNP選擇屏幕如下: 屏幕主要分為兩個部分,期間選擇和條件選擇,最上面一排按鈕還可以進行進一步選擇。同時,我們還可以自定義我們的選擇屏幕。標準選擇屏雖然功能完備,但界面繁瑣,很多時候客戶并不接受,所以我們大多都使用自定義的選擇屏幕。 注意:在下面選擇窗口中的組織結構選擇,只能找尋這個組織部門下面的人員,如果還有子部門,邏輯數據庫并不能返回子部門的人 這里邊選擇的部門,會搜尋到下級子部門。 使用自定義選擇屏幕,可在程序屬性里選擇。當我們關聯到PNP 邏輯數據庫,再進屬性界面,會多出個按鈕HR報告類,這就是我們可以自定義選擇界面的地方。 在HR報告類中,可以創(chuàng)建、選擇系統(tǒng)提供的和我們自定義的選擇屏幕。選擇屏幕也可以在IMG里定義。 我們可以再報表類別中創(chuàng)建我們自定義的報表選擇條件,這樣基本上能滿足客戶的需要。 例如: 注意:報表類是必須選擇現有的字段,如果標準里沒有需要的選擇條件,我們可以在程序里自定義屏幕選擇,但自定義的選擇條件并不會影響PNP邏輯數據庫的選擇,需要我們自己處理。 標準的屏幕選擇定義在程序: DBPNPSEL。如果我們需要在程序的初始屏幕賦值或做一下定制化的內容,可參考程序DBPNPSEL里的定義。 其中最常見的客戶要求可能就是時間期間選擇??蛻敉ǔOM馨醋约旱囊髞碜詣舆x擇期間,我們可以用程序變式的方式來實現,但有時候,客戶的要求我們也可以再程序初始化的實現,尤其是一些按鈕的選擇,讓他們出現在默認狀態(tài)也是客戶經常提出的。 例如,客戶想把期間選擇默認為當前月,其實很簡單,在初始化的時候加入代碼: 這些變量的聲明都可以再DBPNPSEL里找到,我們只要仔細研究這些聲明,很多事情我們都可以再初始化的時候做。 2.3.2 PCH的選擇屏幕 PCH選擇屏幕沒有報告類可以配置,因為他的默認選擇屏幕相對比較簡單。 這個界面只有期間選擇和對象選擇,所以沒有報告類可供我們自由配置。這些在大多時候很難滿足我們的業(yè)務需要,但我們最長用到的評估路徑選擇也是可以很容易加入進去。 在代碼中除了聲明TABLE ojbec之外,我們只要在聲明TABLE gdstr,就可以出現評估路徑的選擇界面 這樣的界面基本上就能滿足我們大部分的需要了,如果還有不夠的,那我們可以還可以再程序里自己定義屏幕選擇條件。同樣,我們自己定義的屏幕選擇條件是不影響邏輯數據庫的返回值,所以要我們根據選擇條件自己再進行后續(xù)處理。 大部分時候,對象類型,評估路徑等內容我們都會根據程序確定好,做成默認輸入,或者干脆隱藏起來,但如果要影響PCH邏輯數據庫的返回值,objec和gdstr是必須要聲明的。 程序DBPCHSEL聲明了PCH選擇屏幕的選擇字段,我們可以仿 照PNP的處理方法對初始屏幕進行定義。 3. HR報表開發(fā) 3.1 HR相關數據庫表 HR報表開發(fā)很肯定會涉及到數據庫表,因為SAP的數據都存放在表里。 PNP邏輯數據最常用的就是PAnnnn的表,人事數據的信息類型數據都存放在這些表中,PNP其實就是從這些表中抓取的數據,所以如果我們需要一些數據,可以直接手動從這些表中抓取。邏輯數據庫返回的結構Pnnnn其實就是表PAnnnn的子結構,所以想詳細了解Pnnnn的結構,只需要仔細研究PAnnnn的定義即可。 PCH邏輯數據庫對應的是表HRPnnnn,一般我們常碰到就是HPR1000、HRP1001,這兩個表分別是對象定義和對象關系。一個對象的自身描述都是定義在HRP1000里包括起始時間、名稱等,而兩個對象的關系則定義在HRP1001,如果想關聯兩個對象,那HRP1001表就是最好的查找對象。 當然還有很多我們常碰到的表,通過F1幫助,我們大多都能找到他們。 3.2 常用函數和宏 HR常用邏輯數據庫,尤其是PNP邏輯數據庫提供很多常用的宏和函數供我們使用。 3.2.1 宏RP_PROVIDE_FROM_FRST和RP_PROVIDE_FROM_LAST 宏RP_PROVIDE_FROM_FRST和RP_PROVIDE_FROM_LAST 是一對相對應的宏,也是我們PNP邏輯數據庫里最常用的一組宏。 這對宏的作用就是在返回個人信息的結構Pnnnn里提取時間最早和時間最晚的記錄。 處理的信息類型,subtype處填寫子信息類型,如果沒有字信息類型,此處傳入SPACE,后面兩個是參數時間,即開始時間和結束時間。這個宏處理過后,會將開始時間和結束時間之間的,時間最早(晚)的一條數據,放入Pnnnn表頭(工作區(qū))。 PNP還有許多有用的宏,可以幫助我們快速處理數據,具體宏的定義,可參見程序DBPNPMAC。 3.2.2 函數RH_STRUC_GET 個人感覺,這個函數是最好用最常用的一個函數之一,無論是PNP 和PCH,這個函數在程序里都是最好補充。 這個函數是根據評估路徑返回一個objec結構的內表,這就相當于在程序里又調用了一次PCH邏輯數據庫的感覺。因為我們每次只 能選擇一個邏輯數據庫,所以在PNP里或是在PCH里,想再次通過評估路徑來查找一些信息,這個函數都提供了很方便的功能。只要給一個入口,然后再loop返回的內表,相當于在成立內嵌了一個小的PCH邏輯應用,十分好用。 有了評估路徑,無論是從O,S,P,我們都可以通過函數找到我們需要的結點。PNP里是以P 為主,如果我們想得到相關O、S的信息;或是在PCH里進行二次的查找,這個函數都是十分管用的。 3.2.3 函數HR_READ_FOREIGN_OBJECT_TEXT 在SAP系統(tǒng)中,大部分對象存在的方式的都是以ID的方式記錄在數據庫表中,HR模塊也不例外,但是HR報表中,絕大部分的可以都希望顯示名稱,這時函數HR_READ_FOREIGN_OBJECT_TEXT 就非常有用。當然你也可以把它寫到公共子例程里隨時調用,我就是這么使用的。 3.2.4 函數PYXX_READ_PAYROLL_RESULT 這個函數主要是獲取員工工資,大部分時間要和函數 CU_READ_RGDIR配合使用,這里不再贅述,由于用法比較簡單可自行揣摩。值得注意的地方就是函數CU_READ_RGDIR函數返回結果中表項srtza的篩選和PYXX_READ_PAYROLL_RESULT返回表工資是放在payroll_result-inter-rt內表中 4. 其他 4.1 PNP和PCH里的變量 其實我們在看PNP和PCH里程序是時常會看到些變量,這些變量是PNP和PCH里固有的變量,在程序里我們可以方便的拿來直接 使用,他們大部分都分別定義在程序DBPNPCOM和DBPCHCOM 里。 PNP里最常用的變量恐怕就是pn-begda和pn-endda,他們是屬于結構pn的,都是在DBPNPCOM里定義的。這兩個值,會在程序程序執(zhí)行的時候賦值成屏幕選擇字段的數據選擇期間,即屏幕字段pnpbegda和pnpendda。在程序里我們就可以直接使用的pn-begda和pn-endda,注意這兩個是數據選擇字段,是數據的有效期,如果想使用人員有效期,請使用pn-begps和pn-endps,我們大部分時候是處理數據,所以經常使用的就是pn-begda和pn-endda。 4.2 時間交叉 HR數據中,最重要的就是時間關系,因為數據都是按時間有效來記錄的,所以我們經常要處理的就是時間的關系。通??蛻魰蟛樵円粋€時間段內的數據,但實際的數據可能會有各種方式經歷這個時間段。一般我們對時間段提取就是使用的時間交叉的方式,即開始時間開始時間,這就保證了我們提取的數據是在所要求的時間段內。 例如: 4.3 權限檢查 邏輯數據庫都會默認進行權限檢查,如果我們外部做過結構化授權等,邏輯數據庫會只提取我們有權限查看的數據。 如果我們想去掉PNP里的權限檢查,在初始化的時候添加: PNP_SW_SKIP_PERNR = 'N'. PCH里對應的初始化變量是$pch$-stru_authy。 有時我們的權限不夠,所以邏輯數據庫程序最后有個反饋信息,提示我們多少數據因為權限問題沒法查看,但基本上客戶都不太關心這個信息。我對此問題的解決方法是在程序的最后加一行:exit,程序停止,跳過那個信息屏,如果誰有什么更好的解決方法希望也能告訴我。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|