HR學習筆記1

2021-06-28 03:05:54 字數 3232 閱讀 9358



sap hr一般會有很多開發。而這個模組資料的特點也讓它的開發和其它模組有些不同。hr的所有資料都是以資訊型別來儲存的,每個資訊型別的資料都和時間段緊密相連。hr開發一般使用sap提供的logic database pnp.用起來也非常簡單。只需要在新建程式時,加上pnp。然後在程式裡加上tables: pernr.需要用到哪些資訊型別加上就可以了。

比如我需要用到個人資料(2)這個資訊型別的資料。那麼程式就這樣寫:

[c-sharp]view plain

copy

print?

tables: pernr.  

infotypes: 0002.  

get pernr.  

provide * from p0001  

between pn-begda and pn-endda.  

write...  

endprovide.  

join

上面這是乙個最簡單的hr報表了。它的語法確實很簡單。但是剛開始必須要把hr資料的結構弄明白,否則複雜一些就暈了。hr的資料有乙個共同點,所有的記錄都有乙個起始日期和結束日期。可以用join的語法來把多個資訊型別放在一起來取數。但是必須注意資料的時間段的用法,如下圖1:

第一種,該資訊型別的資料不允許日期存在間隔或重疊。

第二種,資訊型別的資料允許存在間隔,但是不允許重疊。

第三種,資訊型別的資料即允許有間隔也允許有重疊。

對於取數的時候,某個特定的時間段如果有重複的資料實際是沒有意義的,所以用join的時候只允許針對前兩種情況來。

join的語法也很簡單,比如需要同時取組織分配(1)和個人資料(2)的數,那麼程式可以這樣寫:

[c-sharp]view plain

copy

print?

tables: pernr.  

infotypes: 0001,0002.  

get pernr.  

provide * from p0001  

* from p0002  

between pn-begda and pn-endda.  

write...  

endprovide.  

那麼如果兩個資訊記錄的資料如果時間段不是嚴格匹配的,這也是非常正常的情況,那麼程式會如何輸出呢?如下圖2所示:

員工名字叫andy wang,他在2008.1.1被僱傭,位址是shanghai,在2008.1.10才錄入系統。報表需要輸出員工的姓名和位址。那麼必須取兩個資訊型別:個人資訊和位址資訊。在join兩個資訊型別的時候,系統會自動按照每個時間點分為多條記錄。這個例子的話,會自動分成兩段:2008.1.1 - 2008.1.9, 2008.1.10 - 9999.12.31。然後如果某個資訊記錄在某個時間段有數的話,自動生成的變數p***_valid就會被賦值'x'。那麼如果使用者螢幕上輸入查詢日期:2008.1.5 - 2008.1.31。程式輸出就是:2008.1.10 - 2008.1.31 andy wang, shanghai。之所以這樣輸出,是由於2008.1.10之前是沒有位址的。所以在2008.1.1-2008.10這個時間段p0006_valid為空值。

所有程式**:

[c-sharp]view plain

copy

print?

tables: pernr.  

infotypes: 0002,0006.  

get pernr.  

provide * from p0002  

* from p0006  

between pn-begda and pn-endda.  

if p0006_valid = 'x'.  

write:p0002-begda, p0002-endda, p0002-nachn, p0002-vorna, p0006-ort01.  

endif.  

endprovide.  

再看另外乙個例子,如下圖3所示,假設該員工位址只在時間段2008.1.10 - 2008.1.31有值。那麼如果使用者在輸入選擇條件2008.1.5 - 2008.2.15,輸出應該是2008.1.10 - 2008.1.31 andy wang, shanghai。之所以這樣輸出,是由於在1.10號以前和1.31號以後都沒有位址。這樣輸出是正確的。

對於該員工,假設選擇條件是2007.12.1 - 2008.2.31,那麼系統會分成以下時間段:

2008.1.1  - 2008.1.9 (無位址資訊,p0006_valid為空)

2008.1.10 - 2008.1.31 (andy wang, shanghai)

2008.2.1  - 2008.2.10 (andy wang, beijing)

2008.2.11 - 2008.2.31 (jacky wang, beijing)

projection

除了join,另外乙個重要的語法就是projection了。在將資訊型別的所有欄位都取出來叫join,如果只取個別欄位就叫projection。而系統會自動將根據該字段來做時間合併。比如如下圖5所示:乙個使用者的組織分配資訊型別有2條記錄。分別是1.1-1.31 和 2.1 - 9999.12.31。這兩條記錄只有job發生了變化,而該員工的position並沒有改變。那麼如果根據projection來只取job和只取postion是不同的。取job欄位的時候,還是會分為兩個時間段。

但是在用position只取position欄位的時候,由於postion並沒有發生變化,所以系統會自動將它們合併,如下圖6所示:

如果掌握了hr的基本概念以及它的資料結構組成,就可以使用join和projection來做簡單的hr開發了。

HR學習筆記2

在hr開發中,一般都會涉及到一些常用的巨集和函式,繼續學習。1.macros and function modules 常用的巨集和函式總結 由於hr的資料對時間的特殊性,經常需要對資料對基於時間段的一些處理。sap提供了一些巨集來極大的簡化了問題。一般資料的處理上,常用到的巨集有下面幾個 1 在滿...

SAP學習筆記 HR模組學習筆記

什麼都略懂一點,生活會更多彩一些。所以,最近研究了一下sap的hr模組。structure in human resource 首先要搞清楚sap hr的結構 最重要的三個概念分別是企業結構 人員結構 組織結構。enterprise structure,personal structure,orga...

學習筆記1

struct test test int x void fun class test1 test1 int x void fun int main void test1 a 行1 a.fun 行2 test1 b 行3 b.fun 行4 test c 行5 c.fun 行6 test d 行7 d....