SAP學習筆記(HR Develepment學習筆記1)

來源:互聯網
上載者:User
SAP HR一般會有很多開發。而這個模組資料的特點也讓它的開發和其它模組有些不同。HR的所有資料都是以資訊類型來儲存的,每個資訊類型的資料都和時間段緊密相連。HR開發一般使用sap提供的Logic database pnp.用起來也非常簡單。只需要在建立程式時,加上pnp。然後在程式裡加上Tables: PERNR.需要用到哪些資訊類型加上就可以了。

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

view plaincopy to clipboardprint?

  1. TABLES: PERNR.   
  2. INFOTYPES: 0002.   
  3.   
  4. GET PERNR.   
  5.   PROVIDE * FROM P0001   
  6.     BETWEEN PN-BEGDA AND PN-ENDDA.   
  7.     WRITE...   
  8.   ENDPROVIDE.  

 

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)的數,那麼程式可以這樣寫:

view plaincopy to clipboardprint?

  1. TABLES: PERNR.   
  2. INFOTYPES: 0001,0002.   
  3.   
  4. GET PERNR.   
  5.   PROVIDE * FROM P0001   
  6.           * FROM P0002   
  7.     BETWEEN PN-BEGDA AND PN-ENDDA.   
  8.     WRITE...   
  9.   ENDPROVIDE.  

 

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。然後如果某個資訊記錄在某個時間段有數的話,自動產生的變數PXXX_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為空白值。

所有程式碼:

view plaincopy to clipboardprint?

  1. TABLES: PERNR.   
  2. INFOTYPES: 0002,0006.   
  3.   
  4. GET PERNR.   
  5.   PROVIDE * FROM P0002   
  6.           * FROM P0006   
  7.     BETWEEN PN-BEGDA AND PN-ENDDA.   
  8.     IF P0006_VALID = 'X'.   
  9.       WRITE:P0002-BEGDA, P0002-ENDDA, P0002-NACHN, P0002-VORNA, P0006-ORT01.   
  10.     ENDIF.   
  11.   ENDPROVIDE.  

 

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號以後都沒有地址。這樣輸出是正確的。

        繼續將這個例子複雜化,該員工在2008.2.10以後改名叫Jacky Wang,而不同時間段的地址也不一樣,那麼程式會如何輸出呢。如4所示:

        對於該員工,假設選擇條件是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開發了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.