设为首页 收藏本站
查看: 908|回复: 0

[经验分享] SAP学习笔记(HR Develepment学习笔记1)

[复制链接]

尚未签到

发表于 2015-9-19 12:22:30 | 显示全部楼层 |阅读模式
SAP HR一般会有很多开发。而这个模块数据的特点也让它的开发和其它模块有些不同。HR的所有数据都是以信息类型来保存的,每个信息类型的数据都和时间段紧密相连。HR开发一般使用sap提供的Logic database pnp.用起来也非常简单。只需要在新建程序时,加上pnp。然后在程序里加上Tables: PERNR.需要用到哪些信息类型加上就可以了。   比如我需要用到个人数据(2)这个信息类型的数据。那么程序就这样写:
  
  view plaincopy to clipboardprint?
  

  • TABLES: PERNR.
  • INFOTYPES: 0002.

  • GET PERNR.
  •   PROVIDE * FROM P0001
  •     BETWEEN PN-BEGDA AND PN-ENDDA.
  •     WRITE...
  •   ENDPROVIDE.
  
  TABLES: PERNR.INFOTYPES: 0002.GET PERNR. PROVIDE * FROM P0001 BETWEEN PN-BEGDA AND PN-ENDDA. WRITE... ENDPROVIDE.
  Join
  上面这是一个最简单的HR报表了。它的语法确实很简单。但是刚开始必须要把HR数据的结构弄明白,否则复杂一些就晕了。HR的数据有一个共同点,所有的记录都有一个起始日期和结束日期。可以用Join的语法来把多个信息类型放在一起来取数。但是必须注意数据的时间段的用法,如下图1:
DSC0000.jpg
  第一种,该信息类型的数据不允许日期存在间隔或重叠。
  第二种,信息类型的数据允许存在间隔,但是不允许重叠。
  第三种,信息类型的数据即允许有间隔也允许有重叠。
  对于取数的时候,某个特定的时间段如果有重复的数据实际是没有意义的,所以用join的时候只允许针对前两种情况来。
  Join的语法也很简单,比如需要同时取组织分配(1)和个人数据(2)的数,那么程序可以这样写:
  
  view plaincopy to clipboardprint?
  

  • TABLES: PERNR.
  • INFOTYPES: 0001,0002.

  • GET PERNR.
  •   PROVIDE * FROM P0001
  •           * FROM P0002
  •     BETWEEN PN-BEGDA AND PN-ENDDA.
  •     WRITE...
  •   ENDPROVIDE.
  
  TABLES: PERNR.INFOTYPES: 0001,0002.GET PERNR. PROVIDE * FROM P0001 * FROM P0002 BETWEEN PN-BEGDA AND PN-ENDDA. WRITE... ENDPROVIDE.
  那么如果两个信息记录的数据如果时间段不是严格匹配的,这也是非常正常的情况,那么程序会如何输出呢?如下图2所示:
DSC0001.jpg
  员工名字叫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?
  

  • 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.
  
  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号以后都没有地址。这样输出是正确的。
DSC0002.jpg
  继续将这个例子复杂化,该员工在2008.2.10以后改名叫Jacky Wang,而不同时间段的地址也不一样,那么程序会如何输出呢。如下图4所示:
DSC0003.jpg
  对于该员工,假设选择条件是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字段的时候,还是会分为两个时间段。
DSC0004.jpg
  但是在用position只取position字段的时候,由于postion并没有发生变化,所以系统会自动将它们合并,如下图6所示:
DSC0005.jpg
  如果掌握了HR的基本概念以及它的数据结构组成,就可以使用Join和Projection来做简单的HR开发了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115808-1-1.html 上篇帖子: ABAP笔记:SAP Table 的类型 下篇帖子: SAP 解锁Lock Table
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表