SAP ABAP 反射,动态创建内表、结构、变量

1.14. 反射

CL_ABAP_TYPEDESCR
|–CL_ABAP_DATADESCR
|     |–CL_ABAP_ELEMDESCR
|     |–CL_ABAP_REFDESCR
|     |–CL_ABAP_COMPLEXDESCR
|         |–CL_ABAP_STRUCTDESCR
|         |–CL_ABAP_TABLEDESCR
|–CL_ABAP_OBJECTDESCR
|–CL_ABAP_CLASSDESCR
|–CL_ABAP_INTFDESCR

 

1.14.1.   TYPE HANDLE

handle只能是CL_ABAP_DATADESCR或其子类的引用变量,注:只能用于Data类型,不能用于Object类型,即不能用于CL_ABAP_ OBJECTDESCR,所以没有:

CREATE OBJECT dref TYPE HANDLE objectDescr.

 

1.14.2.  动态创建数据Data或对象Object

1.14.3.  动态创建基本类型变量、结构、内表

1.14.4.  类对象反射

输出:

image033

 

文章来自SAP师太技术博客

SAP BDT业务数据工具集的开发原理及应用实例

业务数据工具集BDT(Business Data Toolset)是一套集成的封装式的开发模型,主要用于维护复杂的主数据或简单的事务型数据。BDT除了包含对话界面的操作,同时还支持直接数据录入和函数操作。BDT集成了SAP的其他技术功能,如变更管理、基于字段组的输出控制、权限控制、存档功能。BDT还集成了与BW的接口程序,BDOC类型的接口程序、XIF类型的接口函数。BDT具有一整套的配置工具和核心控制程序,然后配合具有规范接口的基于事件的函数集合,允许快速规范开发自己的整套应用或者对现有的应用进行不同层次的配置和增强.这些增强不会涉及直接更改系统核心源代码,因而可以高效地利用这套模型的强大功能。BDT是在SAP CRM产品的集成业务伙伴对象和业务伙伴关系对象的实现过程中研制出来的,并完善了VET和EEWB两个工具。可视化配置工具VCTOfisual Configu—ration T001)实现了类似所见及所得的屏幕配置。因为该工具比较简单也有一定的局限性,本文不展开。简易增强工作台EEWB(Easy Enhancement Workbench)有增加新字段和创建新透明表两种模式。通过一个向导,在回答完所有问题后,系统会自动产生一系列的程序代码。可以对产生的程序做一些变更和完善,以满足个性化需要。

BDT代表了SAP规范化开发的一个方向。BDT成型后。在SAP内部被一些行业解决方案和主要合作伙伴积极采用,如银行业、保险业、房地产业、校园管理等领域的解决方案,所以应用BDT的机会越来越多了。但是目前国内的用户还很少,并且大多满足于使用其标准功能,而敢于采用BDT开发整套应用的还没有。

BIY的整套封装式模型包含大量的配置(IMG)、用户出口、程序、函数和工具。本文以核心概念和应用实例为主,具体的细节可以参照SAP手册。

1 基本概念

    1.1 基本概念

一个主数据由一个关键字来惟一地识别它。但是还有一些其他的标准来区分和约束它,这就是差异类型(Differentiation)。差异类型可以理解为一个组织架构或者其他的决定因素。它在创建该主数据的初始屏幕时就要确定,决定了后续的维护界面和内容。

应用对象是一类数据的抽象名,如业务伙伴(BUPA)、业务伙伴关系(BUPR)、银行账号(BKKA)、合同账号(FICA)。它被分配给差异类型。有些具体对象允许有多个差异类型实例,如业务伙伴有多个角色;有些具体对象只允许有一个差异类型实例。应用对象的操作模式如创建、修改、显示等以及其他的控制配置均和应用对象联系起来。需要定义应用对象关系之间允许的差异类型和缺省的差异类型。

    1.2 交互控制

    1.2.1 数据结构

BDT的主数据可以保存在很多个有相似关键字的透明表(数据库表)中。每个表都有相对应的读取和保存函数。同时有一批数据结构用于接口定义和屏幕输出。通过数据字典、检查表和搜索帮助可以方便地实现在线输入帮助和检查。

    1.2.2 屏幕控制

屏幕显示的基本要素是视图(View),实际上就是子屏幕。通过调用函数BUS_PBO和BUS_PAI实现PBO和PAl,并规范PBO和PAI的程序。主要的流程控制、屏幕显示以及各种检查和缺省都在视图的程序中。通常一个视图内的字段是一个字段组.通过基于字段组的输出控制配置功能实现基于不同条件下的屏幕输出控制。

几个视图组成一个块(Section)’块内也可以有流程控制。几个视图组成一个屏幕,如图l所示。

 视图结构

图1 视图结构

    屏幕次序定义了屏幕出现的次序,如图2所示。屏幕次序可以分成主屏幕次序和辅助屏幕次序。屏幕次序可以分给不同种类的对象,如不同角色的业务伙伴。每个屏幕和块都有标题,每个屏幕也对应一个功能码。BDT有标准的菜单,用户也可以增加功能码到菜单中。

屏幕次序

图2 屏幕次序

    1.2.3 程序逻辑

BDT的交互控制程序定义了大量的事件函数,流程图如图3所示,每一个事件对应一个函数,开发人员可以通过更改这些函数来控制交互过程。这些函数有明确的命名规范,为<应用>一<应用对象>_EVENT一<事件名>。这些函数被BDT的核心程序调用。

    1.2.4 其他

数据分割是BDT的一个重要概念。每一个应用对象都包含很多可以维护的数据,但并不是每一个主数据都允许显示和维护所有的字段。数据分割就是进行这样的区分。业务伙伴的角色就是数据分割,不同的角色有不同的主数据,同一个对象允许是多个角色。数据分割的方法是由应用对象决定的。

BDT中数据的保存并不是以屏幕为单位的。而是把数据保存在全局变量中,最后在DSAVE事件中保存。这样的机制甚至允许多个有关系的应用对象按一定的次序共同创建或共同取消。

2 客户项目中BDT的应用实例

某客需要对于业务伙伴的定义进行增强。首先创建角色最终用户,并进行字段增强。业务伙伴字段的增强采用EEWB的工具产生BDT的各种程序和函数,接着做一些简单的修改,然后通过业务伙伴的配置把它们合理地显示在屏幕上。

    2.1 运行EEWB和后续调整

运行事务代码EEWB,进入简易增强工作台。创建针对业务伙伴的增强项目ZFVW—BUPA一01。针对定义的每一个视图创建一个子对象,运行一次向导。每一个视图对应一个字段集合和权限对象等,分得细有利于控制。至于屏幕的显示可以通过配置(IMG)来调整。

流程图

图3 流程图

        在本案例中,针对单选项或简单输入项,采用对表BUT000添加字段的方法。举例客户付款方式。在向导中定义字段名、字段类型、检查表名、抬头名、不需要有效期控制、需要BW集成,完成后系统会自动产生数据字典、数据结构、检查表、子屏幕(视图)、子屏幕的PBO和PAJ、针对于事件DLVEl、DSAVB、ISDST、ISSl.A andXCHNG的函数、直接操作的BAPI函数、现有BDOC自动扩展、在BW的数据源0BPARTNER增加字段。产生的程序属于自开发程序。

EEWB结束后,首先激活检查表的维护,然后使用事务代码SM30维护可选项。例如维护客户付款方式:00一其他;Ol一分期付款;02一全款;03一租赁购买;这样就形成了如图4的单选项。针对复杂的运用,可能需要修改和创建针对特定事件的函数,如扩展性检查等。

 客户付款方式选择界面

图4 客户付款方式选择界面

    在本案例中希望联系方式和方便联系时间是多选项。所以采用创建新透明表的方法。在向导中定义字段名、字段类型、检查表名、抬头名、不需要有效期、需要BW集成、需要BDOC集成,完成后系统会自动产生数据字典、数据结构、检查表、子屏幕(视图)、子屏幕的PBO和PAI、针对于事件DLVEl、DLVE2、DCHK、CHGDl、CHGIM、DSAVC、DSAVE、DTAKE、FCODE、ISDAT、ISSTA和XCHNG的函数,直接操作的BAPI函数、BDOC接口函数,归档函数、变更记录管理函数、在BW的数据源0BPARTNER增加字段。

系统产生的希望联系方式和方便联系时间只有一列,没有文本显示,通常需要修改系统产生的程序以改进显示效果。以希望联系方式为例说明如下。首先在产生的屏幕结构gty—dynpstruc中增加字段TEXT like ZTB0000YQJCXOT—text。

在产生的函数组的屏幕0100中增加输出元素:ZTBOOOOYQJCXOT—text。这样就调整好了子屏幕。接着在PAl中,当用户选择了希望访问方式后读取文本。

最后在函数ZZ06J—BUPA—PBO—Z06J0100中添加类例程序。

对于复杂的应用,需要修改和创建针对特定事件的函数,并且调整会比较多,例如和其他数据库表关联后读取数据和保存数据。如果要使用BW和BDOC,也需要根据SAP的手册傲一些配置和激活。

    2.2 区域菜单BUPT内的配置

区域菜单BUPT包含了所有BDT业务对象中业务伙伴和业务伙伴关系的配置,所以本文的路径都在区域菜单BUPT内。本案例的配置不牵涉到创建新的应用对象、应用和分割,但是所有配置菜单都在BUPT内。首先是配置屏幕的输出效果、参考和复制屏幕次序BUP001及其屏幕,创建自己的屏幕次序,如图5所示,

屏幕配置

图5 屏幕配置

    其中包含系统标准的屏幕和自定义及修改后的屏幕。SAP菜单路径为业务合作伙伴一控制一屏幕布局一部分,业务合作伙伴一控制一屏幕布局一屏幕,业务合作伙伴一控制一屏幕顺序。

定义业务伙伴视图:最终用户。其中定义了数据集和屏幕次序。SAP菜单路径为业务合作伙伴一控制一可分割一业务伙伴视图。

定义角色的基于字段组的输出控制。SAP菜单路径为IMG一交叉应用组件一SAP业务伙伴一业务合作伙伴一基本设置一字段分组一配置每个商业伙伴角色的字段属性。

定义角色最终用户的专用事务代码。这样可以提高最终用户的创建、修改、显示的速度。SAP菜单路径为业务合作伙伴一控制一应用程序事务。

3 校园管理解决方案中BDT应用实例

在校园管理的解决方案中,学生主数据也是一种业务伙伴。采取案例1中的方法产生和配置好业务伙伴学生后,根据行业特点做一些较深入的开发。

    3.1 更改初始化屏幕

业务伙伴创建时需要指定角色、种类、组、类型。但是对于学生主数据来说,这些概念有一定的扩展和转换。需要根据其他的一些要素来自动决定上述关键信息。于是需要定义一些配置表,开发函数PMIQ—BUPA—CREATE—STUDENT_BUF在BDT运行开始时被调用。屏幕次序中的初始化屏幕也需要改变。该函数的定义如下:

输入条件:学生的ID,操作类型(创建、修改、显示),有效期。

程序运行的结果是BDT的实例被创建,开始进入后续界面。

程序流程:

BDT_CLASS_INIT初始化BDT的分类
BDT_INSTANCE—CREATE创建BDT的实例
BDT_INSTANCE_ATTRIBUTES—SET定义操作类型和显示控制参数
BDT—HEADER—CHECK根据自定义的配置表和其他约束条件,推导出业务伙伴的角色、种类、组、类型
BUS—VALDT—SET进行有效期控制。创建时一定是当前日期。修改时可以定义当前日期或未来的日期,显示时任何日期都允许
BDT_DATA—READ读出相关的数据。在创建时作为缺省数据。在修改和显示时,是系统内一致的数据。

    3.2 创建自己的辅助屏幕次序

需要根据一批已经创建完成的屏幕组成一个辅助屏幕次序,这些屏幕采用制表页的形式出现,并增加了一些自己的逻辑,所以采用自编程序调用BDT的程序的方法。函数PMIQ—BUPA—BDT_SCREEN—NAVIGATE用来控制屏幕的切换。这个函数调用了函数BDT_FUNCTION—NAVIGATE:它指定了屏幕号、屏幕类型、光标位置。BDT_SCREEN—ATIRIBUTES—GET:使用它激活了一些按钮等。这个函数用于屏幕的PBO。创建函数PMIQ—BUPA—BDT—SCREEN—PBO来控制PBO,该函数调用了函数BDT_SCREEN—PBO—PROCESS。创建函数PMIQ—BUPA—BDT_SCREEN_SEL_PBO,在PBO中它调用函数BDT_SCKEEN_SELECT_PBO得到BIYI”子屏幕号,然后再调用函数组BUSS中对应屏幕的PBO函数。创建函数PMIQ—BUPA—OK_CODE_SET,由这个函数把OK—CODE传递给BDT。

创建函数PMIQ—BUPA—BDT—SCREEN—SEL_PAI,在PAI中调用函数BDT_SCREEN_S;ELECT_PAl得到BDT子屏幕号,然后再调用函数组BUSS中对应屏幕的PAI函数。

  3.3 函数PMIQ—BUPA—BDT—SUBSCREEN—PAl

这是主要的PAI函数。它首先得到了光标的位置,处理完BDT的PAl函数后处理其他的功能码。用户退出BDT时,停止BDT实例。

    3.4 主数据保存

因为在学生主数据保存的同时。需要创建学生财务账号。所以在BDT事件DSAVB、DSAVC、DSAVE完成后,再调用一个函数去创建学生财务账号。

BDT是一个封装式的应用开发模型。它包含大量的配置(IMG)、用户出口、程序、函数和工具,并且单纯的开发可能看不到效果或者对其他逻辑产生影响,BDT确实是一个有效的、复杂的工具。从SAP正在开发和完善的行业解决方案中大量采用BDT可见一斑。有些企业和SAP合作伙伴采用SAP系统平台开发自己特有的局部解决方案,BDT是一个可以考虑的工具。对于其他应用开发平台供应商而言,它也是一个可以借鉴的开发模型。

HR-infotype增强笔记

一、create infotype.(pm30,个人相关数据)
1.创建的infotype必须是9开头的,即9xxx,举例:9111.
2.创建ps结构.(TCode se11). ex: ps9111.
3.pm01 创建infotype.
在infotype no.中填入要创建的infotype,这里是9111。点右侧的创建图标。
4.填入infotype号及描述,添加time constraint,添加 single screen.并save.退出。
5。如果想修改相关信息,pm01—infotype号–infotype characteristics–修改相关信息–save.
6.pa30.在最下方填入infotype号,上面填入人员号–创建–进入屏幕可看到刚才创建的infotype屏幕。上面为系统标准屏,下面为自定义的参数。
7。可以在信息类型中创建纪录。
8。se11,在数据库表中填pa9111,执行,可以查看刚刚创建的纪录。

一、create infotype (po10,与组织相关的数据)
1.创建的infotype必须是9开头的,即9xxx,举例:9999.
(1).
2.创建pt结构.(TCode se11). ex: pt9999.
3.ppci 创建infotype.填入信息类型号,点create.
进入下一界面,选字段信息类型,创建即可。
4. 创建完毕后,hrp9999中只存入了一个tabnr号,而真正的数据可以通过tabnr号从hrt9999中获取。
(2).
2.创建hri结构. ex:hri9998.
3.ppci 创建infotype.填入信息类型号,点create.
进入下一界面,选表信息类型,创建即可。
4.数据存储在hrp9999中。
二、 enhance infotype.
1.pm01–选第三个enhance infotype–选ci_include–创建
2。进入了ci_pxxxx. 填入增强的字段.—–activate.(可能需要等几秒钟)
3.提示warning ,不必关注,退出即可.
4.pm01,填入刚才增强的infotype,点创建,不停的enter直到完成即可。
5。pa30.查看增强的字段。
6。如果信息类型已经被增强了,则第一步不用创建,edit即可。后面步骤一样,直到第5步。
7。se11,在数据库表中填paxxxx,执行,可以查看刚刚创建或修改的纪录。

三、增强字段的自定义输入输出属性。
1。sm30–t588m–mod.pool(mpxxxx00)–screen(刚才创建的为2000)–设置相应字段属性

四、生成的程序名为zpxxxx00.
五、查看v_t582a可以查看infotype的属性。
六、增强的字段如果想设置下拉菜单,可以在数据元素的domain中的value里指定。
七、pm01时,选第一个用于雇员信息,即pa.第二个用于招聘,即pb.
以下为组织管理与人事管理增强时相应信息的对照:
tcode structure table screen program maintance table
OM ppci hrixxxx hrpxxxx mpxxxx00 t777i(sm30)
ptxxxx hrtxxxx
PA pm01 psxxxx paxxxx 2000/3000 mpxxxx00 t588m(sm30)

组织管理
八、po10—-组织管理维护
在自己创建的infotype里维护数据,完毕进se11–hrpxxxx–可以查看自己维护的数据。

九、组织管理—-t777i中的维护
类似t588m中的维护,进入后new entries,对time constraint 和 screen 进行维护。

对于9开头的已经被创建的OM infotype,如果想增强,可以修改hrixxxx.但屏幕的属性不知道怎么改,目前比较笨的一种方法是se51直接去屏幕里修改。

对于系统已有的om infotype,增强时填入infotype号,选第三个extend infotype,点all 增强,点edit/change 修改。
增强后的程序名为zpxxxx00,屏幕为200。

表t582c的用法,暂时不知道:include screens for infotypes.
t588m: infotype screen control.
t777i: change view infotypes.

1,infotype是四位数字编码,通常,

4nnn for applicant,
1nnn for OM,
2nnn for time,
0nnn for HR master data, sometimes for applicant data
9nnn reserved for customizing

2,每个infotype nnnn 需要至少两个structure:PSnnnn+Pnnnn, 和一个transparental table: PAnnnn(或PBnnnn for applicant), 这些数据需要在Data Dictionary中定义,PM01没有这功能(看来俺是误入歧途了, developing infotype还是Abaper的事)

3,infotype的module pool组成维护界面的主程序, 主程序为MPnnnn00,主程序还包含四个includes(不懂)

4,infotype有至少三个screen: initial screen, single screen, list screen. 另外可以用alternative screen来代替single或list secreen, 一个infotype可以有多个screen来满足不同需求, 例如, 不同国家.

initial screen用作HR和infotype本身的technical interface, 通过assign给infotype的dialog module进入. screen 1000是所有infotype的initial screen. initial screen只在后台处理,无法显示.

single screen是user和SAP的界面, 通常为screen 2000, 可以自定义single screen, 号码是2900-2999,

list screen用于显示所有的某个personnel在某个infotype的历史记录, 默认为screen 3000

infotype screen control用来调整screen以适应不同的功能(create,change,display,delimit,—)和针对不同的数据内容(某个ESG下的employee不应该有某个field)(—guess: SAP把很多东西都做group, 连delere,display等这样的操作,也定义成constant, 并组成modification group), 同时, modification group的screen control优先级, 低于table T588M

5,dialog module作为HR transaction和infotype之间的界面,名称必须为RP_nnnn,

infotype nnnn 通过 dialog module RP_nnnn 进入 module pool MPnnnn00 的 screen 1000

6,infotype characteristics,(table T582A,View V_T582A), 保存关于time constraint, start date, screen, dialog module等基本信息

相关table,
T582S: further infotype text,
T777D: infotype dialog/database assginment,
T591A: subtype characteristics
T591S: subtype text

Master Data 员工主数据
PA10 Personnel File
PA20 Display HR Master Data
PA30 Maintain HR Master Data
PA40 Personnel Events
PA41 Change Hiring Data
PA42 Fast Data Entry for Events
PRMD Maintain HR Master Data
PRMF Travel Expenses: Feature TRVFD
PRML Set Country Grouping via Popup
PRMM Personnel Events
PRMO Travel Expenses: Feature TRVCO
PRMP Travel Expenses: Feature TRVPA
PRMS Display HR Master Data
PRMT Update Matchcode
PSO3 Infotype overview
PSO4 Individual maintenance of infotypes

Time Management 时间管理
PA51 Display Time Data
PA53 Display Time Data
PA61 Maintain Time Data
PA62 List Entry of Additional Data
PA63 Maintain Time Data
PA64 Calendar Entry
PA70 Fast Data Entry
PA71 Fast Entry of Time Data
PBAB Maintain vacancy assignments
PT01 Create Work Schedule
PT02 Change Work Schedule
PT03 Display Work Schedules

Payroll 薪酬管理
PC00 Run Payroll
PC10 Payroll menu USA
PE00 Starts Transactions PE01,PE02,PE03
PE01 Schemas
PE02 Calculation Rules
PE03 Features
PE04 Create functions and operations
PE51 HR form editor
PRCA Payroll calendar
PRCT Current Settings
PRCU Printing Checks USA
PRD1 Create DME
SM31 Maintain Tables
SM12 Locked Secessions
TSTC Table lookup
SPR0 IMG
SE16 Data Browser (Table reports)
PP03 PD Tables
PP0M Change Org Unit
P013 Maintain Positions
PO03 Maintain Jobs

Benefits 福利计划
PA85 Benefits – Call RPLBEN11
PA86 Benefits – Call RPLBEN07
PA87 Benefits – Call RPLBEN09
PA89 COBRA Administration
PA90 Benefits Enrollment – Individual
PA91 Benefits – Forms
PA92 Benefits Tables – Maintain
PA93 Benefits Tables – Display
PA94 Benefits – Access Reporting Tree
PA95 Benefits IMG – Jump to Views
PA96 Benefits reporting
PA97 Salary Administration – Matrix
PA98 Salary Administration
PA99 Compensation Admin. – rel.changes
PACP HR-CH: Pension fund, interface

General/Reporting 报表
PM00 Menu for HR Reports
PM01 Dialogs in HR – Create custom infotypes
PRF0 Standard Form
PSVT Dynamic Tools Menu
PAR1 Flexible employee data
PAR2 Employee list

PD – Organizational Management 组织管理和个人发展
PP0M Change Org Unit
PO03 Maintain Jobs
PO13 Maintain Position
PO10 Maintain Organizational Unit
PP01 Maintain Plan Data (menu-guided)
PP02 Maintain Plan Data (Open)
PP03 Maintain Plan Data (event-guided)
PP05 Number Ranges
PP06 Number Range Maintenance: HRADATA
PP07 Tasks/Descrīptions
PP69 Choose Text for Organizational Unit
PP90 Set Up Organization
PPO1 Change Cost Center Assignment
PPO2 Display Cost Center Assignment
PPO3 Change Reporting Structure
PPO4 Display Reporting Structure
PPO5 Change Object Indicators (O/S)
PPO6 Change Object Indicators O/S
PPOA Display Menu Interface (with dyn.)
PPOC Create Organizational Unit
PPOM Maintain Organizational Plan
PPOS Display Organizational Plan
PQ01 Events for Work Center
PQ02 Events for Training Program
PQ03 Events for Job
PQ04 Events for Business Event Type
PQ06 Location Events
PQ07 Resource Events
PQ08 Events for External Person
PQ09 Events for Business Event Group
PQ10 Events for Organizational Unit
PQ11 Events for Qualification
PQ12 Resource Type Events
PQ13 Events for Position
PQ14 Events for Task
PQ15 Events for Company
PSO5 PD: Administration Tools
PSOA Work Center Reporting
PSOC Job Reporting
PSOG OrgManagement General Reporting
PSOI Tools Integration PA-PD
PSOO Organizational Unit Reporting
PSOS Position Reporting
PSOT Task Reporting

Recruitment 招募
PB10 Init.entry of applicant master data
PB20 Display applicant master data
PB30 Maintain applicant master data
PB40 Applicant events
PB50 Display applicant actions
PB60 Maintain applicant actions
PB80 Evaluate vacancies
PBA0 Evaluate advertisements
PBA1 Applicant index
PBA2 List of applications
PBA3 Applicant vacancy assignment list
PBA4 Receipt of application

HR模块的一些概念以及常用的函数

HR模块的一些概念以及常用的函数

一 HR Components
1. PA-Personnel Management (Master data :0000-0999)
Personnel Administration
Time Management
Payroll
Benefits
Recruitment
Business Trip Management
Table :PAnnnn
Structure:Pnnnn
pannnn:pa master data
pbnnnn: pa applicant data
人事管理主数据:人事管理:入职,分配部门,个人基本信息。。。
(针对员工) 工资管理
福利待遇
出差管理
。。。
时间管理(针对项目)
招聘管理 (针对应聘者)
2.PD-Personnel Development & Planning(Master data:1000-1999)
Organisational Management
Training & Event Management
Personnel Development
Shift Planning
Qualifications / Skills Catalogue
Personnel Costs
Table:HRPnnnn
Stucture:PHInnnn
针对组织部门:认识发展以及计划
组织管理
培训及活动管理:计划
人事发展 :对部门等的要求
shift计划 :串休
技术证书等:级别要求
人事花费:培训,活动等
3.Maintain Object(T-code:pp01)
Main Object Type : Organisational Plan Organisation Unit (O)
Position (S)
Job(C)
Task(T)
Person(P)
Other Object Types Work Centers
Cost Centers
Qualifications
4.Logical Database
PNP: Personnel Administration
PNPCE: Enhance for personnel administration
PCH: Personnel Planning
PAP: Recruitment
pnp 很多时候都替换成了pnpce, 但是使用 Get payroll 的时候 要用pnp 。提到Get Payroll 要注意的是时间不在用pn-begda pn- endda 了 而是要用 pybegda pyendda 或者 pn-begps pn-endps ,前者比较多,这两个的区别有在研究中,用的时候可以 debug一下 看看有没有数据 (*^__^*) 嘻嘻…… 。还有个小技巧,在screen中,不知道field的名称 可以F1查询哦~~

PNP—Table: pernr
Get pernr
PNPCE—-Table:pernr
Nodes:peras
Get peras
PCH—- Table:objec
Get objec.
PAP暂时没用过,以后如果用到在补充。。。待续中。。。。

T-code:se36 see the logical database

顺序:tables: pernr.
nodes:peras.
infotypes:0001.
start-of-selection.
select data. “select要写在get之前,因为get相当于loop,写在里面效率低
Get peras.
read or loop .
end-of-selection.
5.Report Category
change screening
Create a report category and assign it to report
二 Reading Infotypes
1. MACRO(T-code:se11->trmac)
常用 rp_provide_from_last Pnnnn space pn-begda pn-endda(取最新一条数据)
次常用 rp_set_data_interval Pnnnn pn-begda pn-endda
rp_read_all_time_ity
rp_get_hire_date
rp-read-<table>
space or subtype
begda <pn-endda
endda >pn-begda.
pnp-sw-found = 1. 取到数据
2.Function
HR_READ_INFOTYPE
HR_READ_SUBTYPE
HR_INFOTYPE_OPERATION updating infotype records.
operation:MOD(change),COPY,DEL,INS (insert),LIS9(delimit)
3.provide * from p0001
* from p0002
between pn-begda and pn-endda
where……
比较常用的是前两个 尤其第一个 第三个很少用到
三 Time Data
1.Importing Time Data into an Internal Table

INFOTYPES : 0001,
2001 MODE N. ” when mode n,infotype 2001 can’t be got into p2001 using get pernr or peras.
DATA : BEGIN OF ITAB OCCURS 0,
BUKRS LIKE P0001-BUKRS, ” company code
WERKS LIKE P0001-WERKS, ” personnel area
AWART LIKE P2001-AWART, ” 出勤/缺勤的类型
ABWTG LIKE P2001-ABWTG, ” 出勤/缺勤的天数
END OF ITAB.

GET PERNR.

RP_PROVIDE_FROM_LAST P0001 SPACE PN-BEGDA PN-ENDDA.
MOVE-CORRESPONDING P0001 TO ITAB.

RP-READ-ALL-TIME-ITY PN-BEGDA PN-ENDDA. “use this macro to get 2001 time data into p2001

LOOP AT P2001.
MOVE-CORRESPONDING P2001 TO ITAB.
ENDLOOP.

2.Processing Repeat Strictures

* Define Work Area.
DATA: BEGIN OF WAGETYPES,
LGA LIKE P0008-LGA01,
BET LIKE P0008-BET01,
ANZ LIKE P0008-ANZ01,
EIN LIKE P0008-EIN01,
OPK LIKE P0008-OPK01,
END OF WAGETYPES.

GET PERNR.
RP_PROVIDE_FROM_LAST P0008 SPACE PN-BEGDA PN-ENDDA.

DO 20 TIMES VARYING WAGETYPES FROM P0008-LGA01
NEXT P0008-LGA02.
IF not WAGETYPES-LGA IS INITIAL.
WRITE: / WAGETYPES-LGA, WAGETYPES-BET.
ENDIF.
ENDDO.

HR有几个表很特别 就目前知道的是 0008 和0041 都是要do ** times
TABLES:pernr,t548t. ” Date Types
INFOTYPES:0001, ” org.assignment
0041. ” data specification
DATA:BEGIN OF dtype, ” useful in p0014 (Date Specifications)
dar LIKE p0041-dar01, ” Date type
dat LIKE p0041-dat01, ” Date for date type
END OF dtype.
GET pernr.
DO 12 TIMES VARYING dtype-dar FROM p0041-dar01
NEXT p0041-dar02.
IF dtype-dar IS INITIAL.
EXIT.
ELSE.
IF dtype-dar IN datetype. “eq 01
CLEAR data_tab_wa.
endif.

四 Cluster Database Table
1. RPCnxyz:
n=1,2 pcl1 or 2.
xy= cluster eg.RX (pcln-relid) : 不同的pcl是不一样的
z=0 international or country indicater ,always 0.
Macros are used to access the data via the buffer.
2. PCL1 DB for HR work areas
PCL2 Accounting results(time, payroll…)
PCL3 Recruitment data
PCL4 Documents
PCL5 Cost planning

compile payroll results
3.Importing / exporting cluster data
TABLES: PCLn.
INCLUDE RPCnxyz. “Cluster definition
xy-KEY-FIELD = <Value>.
RP-IMP-Cn-xy. / RP-EXP-Cn-xy. ” macro
*display
IF SY-SUBRC NE 0.
WRITE: / ‘Export Failed’.
ENDIF.
4. Display last payroll results use function
RGDIR:Stored payroll results
read cluster directory : CU_READ_RGDIR.
process cluster directory : CU_READ_last
read payroll results: PYXX_READ_PAYROLL_RESULTS
Function module CD_EVALUATION_PERIODS enables you to process table RGDIR.
display the wage types from the results table RT

payroll driver RPCALCn0,use hr data (pannnn) and last payroll results (pcl2)

SAP模块常用增强总结

MM模块:
采购订单增强:
BADI :ME_GUI_PO_CUST

ME_PROCESS_PO_CUST

物料凭证增强:
BADI:MB_DOCUMENT_BADI

USER-EXIT:MBCF0002

实现功能1、当参照预留过帐时,检查填入数量是否小于预留数量

2、移动类型是***的时候,查看RSNUM是否为空

3、检查原始单据工厂和库存地点与物料凭证的工厂和库存地点一致

MBCF0009

实现功能1、当移动类型是***的时候,库存地点只能是****

2、工单下达日期+时间小于预留需求日期+时间,警告

ENHANCEMENT SPOT

1、标准程序MM07MFB0 实现功能:如果移动类型是***,特殊库存标识必须是*,工厂必须是****

2、标准程序MM07MFK0_KONTIERUNG_INIT

SPOT是ENHANCEMENT-POINT KONTIERUNG_INIT_01 SPOTS ES_SAPMM07M.实现功能:如果移动类型是***,特殊库存标识变成灰,工厂变成灰

3、标准程序FM07MED0_DYNPRO_MODIFIZIEREN

SPOT是ENHANCEMENT-POINT DYNPRO_MODIFIZIEREN_06

SPOTS ES_FM07MED0_DYNPRO_MODIFIZIEREINCLUDE BOUND

实现功能:移动类型是***,则根据采购订单找到库存地点,讲库存地点描述替代到物料凭证的收货方WEMPF字段

4、标准程序MM07MFF0_FUSSZEILE_WE

SPOT是ENHANCEMENT-POINT FUSSZEILE_WE_01 SPOTS ES_SAPMM07M.实现功能:如果移动类型是***,且特殊库存标志是*,库存地点只能是****

物料主数据检查:
BADI:BADI_MATERIAL_CHECK

预留增强:
BADI:MB_RESERVATION_BADI

采购申请增强:
BADI:ME_PROCESS_REQ_CUST

预制发票增强:
BADI:INVOICE_UPDATE 实现功能:检查预制发票中采购订单对应的采购组、采购类型和采购组织的权限

供应商增强:
BADI:VENDOR_ADD_DATA

VENDOR_ADD_DATA_CS 供应商主数据屏幕增强

PM模块:
工单增强:
工单——工序——外部

BADI:MRO_CONTRACT 实现功能:外部中填入的物料组和维护的物料组是否一致,不一致则报错

BADI:WORKORDER_UPDATE 工单的很多判断都在这个里面来实现

工单——组件增强

USER-EXIT:CNEX0026 FUNCTION:EXIT_SAPLCOMK_005

工单

BADI:IWO1_ORDER_BADI INST_AUTHORITY_CHECK 实现功能:IW31和IW32的时候检查是否有权限创建和修改工单

IWO1_SCREEN_MODIFY 实现功能:修改工单的屏幕字段是否显示

设备增强:
USER-EXIT:IEQM0003 FUNCTION:EXIT_SAPMIEQ0_001

功能位置增强:
USER-EXIT:ILOM0001 FUNCTION:EXIT_SAPMILO0_001

通知单增强:
USER-EXIT:IWOC0001FUNCTION:EXIT_SAPLIWO1_001 创建的时候检查

QQMA0014 FUNCTION:EXIT_SAPMIWO0_020 保存的时候检查

BADI:NOTIF_EVENT_SAVE 保存时检查

维护计划增强:

IP41/IP42/IP43

USER-EXIT:IPRM0004 FUNCTION:EXIT_SAPLIWP3_004 保存时候检查

计量点增强:

USER-EXIT:IMRC0001, FUNCTION:EXIT_SAPLIMR0_001 检查权限

IMRC0005, FUNCTION:EXIT_SAPLIMR1_005 检查权限

FI增强
会计凭证替代增强:

BADI:AC_DOCUMENT

ACC_DOCUMENT

SD模块
发票增强:
USER-EXIT:SDVFX004 FUNCTION:EXIT_SAPLV60B_004 传递发票的一些字段到会计凭证上

客户增强:
BADI:CUSTOMER_ADD_DATA_CS 客户主数据屏幕增强

CUSTOMER_ADD_DATA

USER-EXIT:SAPMF02D FUNCTION:EXIT_SAPMF02D_001 客户主数据的销售数据增强

SDVFX008 FUNCTION:EXIT_SAPLV60B_008 用销售发票的一些字段替代会计凭证

交货单屏幕增强:
BADI:LE_SHP_TAB_CUST_ITEM 增强屏幕

LE_SHP_DELIVERY_PROC 逻辑编写

PS模块
BADI:WBS_USER_FIELDS_F4 实现功能:CJ20N创建WBS的时候为特定字段做SEACH HELP

BADI:WORKBREAKDOWN_UPDATE 实现功能:CJ20N 保存WBS检查

USER-EXIT:CNEX0002 FUNCTION:EXIT_SAPLCNAU_001 PS的权限检查 注意sap_x_actvt这个参数要打X

抓取报表ALV GRID上的数据

在项目开发过程中需要从标准报表MB5B中获取数据,以下是本人实例中的相关部分,程序同样适用于获取其他标准报表的数据。

image

另外,当首次使用的时候,无法确定内表定义字段时,可以在这断点,然后查看<LT_DATA>的字段,以下是我MB5B中出现的字段。

 

image

image

 

SAP供应商和客户的创建

由于在系统中关于供应商和客户的创建比较特殊,且没有相关函数进行创建,

找到一个类和方法来创建,类名:VMD_EI_API  方法名:MAINTAIN_DIRECT_INPUT,类似的:

 

ABAP生成二维码,smartforms生成二维码

How to create a QR code and show it in a Smartform.
Before running the code given below what should we do?

1. Create a smartform. Follow the steps given below.

Capture.PNG

2. Goto Form Interface and add a new variable under the import tab which holds the name
of the qrcode that we are passing from the driver program[W_NAME type char20]

Capture1.PNG
3. Create a new graphics and as shown below give the name as &W_NAME&. [Dynamic
variable]

Capture2.PNG

4. Done.
5. Copy the code below.
6. Enjoy the emerging technology of qrcode in SAP.

Note : In the program given below I have used a screen 9000. Please do create it before running and also create acustom control in the screen layout and give the name ‘PICTURECONTROL’ to it.

源码:

输出:

Capture3.PNG

Capture4.PNG

Capture6.PNG

Vultr Centos6 部署 PPTP + L2TP/IPSec 一键包教程

翻阅了N个一键包教程了,终于找到可以互相兼容的PPTP + L2TP/IPSec 一键包了。

一、安装 PPTP 一键包

首先,安装 PPTP 一键包

会有三个选择:

输入1,全自动安装

二、安装 L2TP/IPSec 一键包

然后,安装 L2TP/IPSec 一键包

全默认回车就行,全自动安装

安装完以后应该有错误如下

很明显的错误

然后谷歌一下解决办法:

紧接着再次验证ipsec(L2TP)

三、设置 PPTP + L2TP/IPSec 通用帐号

然后就是修改:/etc/ppp/chap-secrets里面的账号密码
结构为:

这样,不管是L2TP还是PPTP都可以通用上面的帐号密码
但是注意的是L2TP要多填一个密钥就是了(默认密钥是vpn)

跳转至事务码XK03默认勾选视图复选框

/110/120/130/380/210/215/220/310/320/610 对应初始屏幕各复选框