一、系统中提供了标准的报表
某些报表无法通过菜单路径或常规报告选择来访问。而是必须通过选择菜单:系统 → 服务 → 报告 来进行访问。
在初始屏幕中,您可以输入 RP* 并使用后续报告来显示所有报表的概览。可通过使用以下命名约定来输入更多特定的通用搜索标准:
EXAMPLE_PNP_GET_PAYROLL , 如果没有写过Payroll resport的人,参考这个Report。 PAY99_RESULT: Structure for payroll result,其中的EVP在设计工资单的Rule时可能就用到。
二、 PHF、SI、TAX相关的报表,可以在 pc28 中找到
PC28 – SAP menu – Subsequent Activities – Per payroll period –Reporting
通过 中国的TAX 报表,看看如何处理payroll result.
(1) LDB
(2) Report catalog ,使用后可以自动带出选择屏幕的一部分
(3) Unicode checks active ,要激活
(4) 使用了get pernr,这样的event.,get pernr 是一个循环操作,界面上选择
的所有员工,都会依次循环。每一次的循环,都会找到当前员工的infotype数据,找哪些infotype 中的数据,是在infotypes中的声明中决定的。
(5) 取得payroll result的 function : CU_READ_RGDIR,将payroll result
从cluster表中取出来。
(6) 对于Cluster 表,可以如下使用
TABLES: PERNR, PCL1, PCL2, PC260.
(7)
三、标准报表举例
(1) HTWLINF0
可以看到员工的所有维护过的信息类型,包括几条记录,分别的起止时间,最后修改的时间、修改人等,如果有子类型,还会按照子类型来区分;更方便的是,双击每条记录,都可以跳到PA20中查看详细的信息。
(2) EXAMPLE_PNP_GET_PAYROLL
如果没有写过Payroll resport的人,参考这个Report
REPORT ZEXAMPLE_PNP_GET_PAYROLL.
tables : pernr , pyorgscreen , pytimescreen.
nodes : payroll type pay99_result.
tables : t512t.
data : wa_rt like line of payroll-inter-rt.
data : wa_crt like line of payroll-inter-crt.
data : wa_wpbp like line of payroll-inter-wpbp.
data : g_result_counter type i .
data : mylist like pc261 OCCURS 0 .
data : wa_mylist like line of mylist.
data : pay type ref to cl_pay. "这个类有两个方法READ_RESULT,和WRITE_RESULT initialization.
get pernr.
write : / '正在处理的人员编号为 : ' ,pernr-pernr.
g_result_counter = 0 .
create object pay.
call method pay->read_result importing list = mylist. "将结果输出到pc261结构中。Cluster directory
"CALL METHOD pay->write_result EXPORTING list = mylist.
"感觉这一句可有可无?
loop at mylist into wa_mylist . "循环访问获得的结果。
write : / wa_mylist.
endloop.
get payroll .
g_result_counter = g_result_counter + 1 .
write : / 'sequence number = ' , payroll-evp-seqnr.
write : 'In period = ' , payroll-inter-versc-inper.
write : 'for period = ' , payroll-inter-versc-fpper.
write : 'Pay date = ' , payroll-inter-versc-paydt.
write : / 'WBPB 拆分 ---begin '.
loop at payroll-inter-wpbp into wa_wpbp.
write : / 'Personel Area = ' , wa_wpbp-werks,
'Sub area = ' , wa_wpbp-btrtl.
endloop.
write : / 'WBPB 拆分 ---end'.
skip 1.
write : / 'RT表中的数据--begin'.
loop at payroll-inter-rt into wa_rt.
select single * from t512t where sprsl = sy-langu and molga = payroll-inter-versc-molga and lgart = wa_rt-lgart.
write : / wa_rt-lgart , t512t-lgtxt , wa_rt-betrg currency payroll-inter-versc-waers, payroll-inter-versc-waers.
endloop.
write : / 'RT表中的数据--end'.
write : / 'CRT表中的数据--begin'.
loop at payroll-inter-crt into wa_crt.
select single * from t512t where sprsl = sy-langu and molga = payroll-inter-versc-molga and lgart = wa_crt-lgart.
write : / wa_crt-lgart , t512t-lgtxt , wa_crt-betrg currency payroll-inter-versc-waers, payroll-inter-versc-waers.
endloop.
write : / 'CRT表中的数据--end'.
get pernr late.
skip .
if g_result_counter = 0 .
write : / '未找到结果 for ' ,pernr-pernr.
else.
write : / '共找到:', g_result_counter ,'条结果for ', pernr-pernr.
endif.
(3) PAY99_RESULT 结构
Structure for payroll result,其中的EVP在设计工资单的Rule时可能就用到。
(4) 2
四、自定义报表举例
五、获得员工的雇佣日期
data : hire_date like p0001-ENDDA.
CALL FUNCTION 'RP_GET_HIRE_DATE' EXPORTING
PERSNR = '28000021' CHECK_INFOTYPES = '0000'
IMPORTING HIREDATE = hire_date .
write : / hire_date.
http://kemiya.net/thread-4556-1-1.html
HR信息类型创建
锁定人员编号
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
NUMBER =
IMPORTING
RETURN =
EXCEPTIONS
OTHERS = 01.
创建信息类型
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY =
SUBTYPE =
NUMBER =
VALIDITYBEGIN =
RECORD =
OPERATION = 'INS'
NOCOMMIT = 'X'
DIALOG_MODE = '0'
IMPORTING
RETURN =
KEY =
EXCEPTIONS
OTHERS = 0.
IF L_RETURN IS INITIAL.
P_TYPE = 'S'.
S_MSG = '信息类型创建成功'.
COMMIT WORK.
解除锁定
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
NUMBER =
IMPORTING
RETURN =
EXCEPTIONS
OTHERS = 01.
第二篇:JAVASCRIPT弹出窗口大总结
//关闭,父窗口弹出对话框,子窗口直接关闭
this.Response.Write("<script
language=javascript>window.close();</script>");
//关闭,父窗口和子窗口都不弹出对话框,直接关闭
this.Response.Write("<script>");
this.Response.Write("{top.opener =null;top.close();}");
this.Response.Write("</script>");
//弹出窗口刷新当前页面width=200 height=200菜单。菜单栏,工具条,地址栏,状态栏全没有
this.Response.Write("<script
language=Javascript>window.open('rows.aspx','newwindow','width=200,height=200')</script>");
//弹出窗口刷新当前页面
this.Response.Write("<script
language=javascript>window.open('rows.aspx')</script>");
this.Response.Write("<script>window.open('WebForm2.aspx','_blank');</script>");
//弹出提示窗口跳到webform2.aspx页(在一个IE窗口中)
this.Response.Write(" <script language=javascript>alert('注册成功');window.window.location.href='WebForm2.aspx';</script> ");
//关闭当前子窗口,刷新父窗口
this.Response.Write("<script>window.opener.location.href=window.opener.location.href;window.close();</script>");
this.Response.Write("<script>window.opener.location.replace(window.opener.document.referrer);window.close();</script>");
//子窗口刷新父窗口
this.Response.Write("<script>window.opener.location.href=window.opener.location.href;</script>");
this.Response.Write("<script>window.opener.location.href='WebForm1.aspx';</script>");
//弹出提示窗口.确定后弹出子窗口(WebForm2.aspx)
this.Response.Write("<script language='javascript'>alert('发表成功!');window.open('WebForm2.aspx')</script>");
//弹出提示窗口,确定后,刷新父窗口
this.Response.Write("<script>alert('发表成功!');window.opener.location.href=window.opener.location.href;</script>"
);
//弹出相同的一页
<INPUT type="button" value="Button" onclick="javascript:window.open(window.location.href)">
//
Response.Write("parent.mainFrameBottom.location.href='yourwebform.aspx?temp=" +str+"';");
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no') //这句要写成一行
-->
</SCRIPT>
参数解释:
<SCRIPT LANGUAGE="javascript"> js脚本开始;
window.open 弹出新窗口的命令;
'page.html' 弹出窗口的文件名;
'newwindow' 弹出窗口的名字(不是文件名),非必须,可用空''代替; height=100 窗口高度;
width=400 窗口宽度;
top=0 窗口距离屏幕上方的象素值;
left=0 窗口距离屏幕左侧的象素值;
toolbar=no 是否显示工具栏,yes为显示;
menubar,scrollbars 表示菜单栏和滚动栏。
resizable=no 是否允许改变窗口大小,yes为允许;
location=no 是否显示地址栏,yes为允许;
status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许; </SCRIPT> js脚本结束
'newwin':隐藏菜单栏地址栏工具条
width=50:宽度
height=50:高度
scrollbars=yes/n滚动条
top=50:窗口距离屏幕上方
left=50:窗口距离屏幕左侧
例:window.open('detail.aspx?ID="+e.Item.Cells[1].Text+"','newwin','width=750,height=600,scrollbars=yes,top=50,left=50');");
this.Response.Write("<Script>window.open('WebForm2.aspx','','toolbar=
no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=750,height=470,left=80,top=40');</script>");
例:
this.Response.Write("<script>alert('发表成功!');window.opener.location.href=window.opener.location.href;</script>");
this.Response.Write("<script>");
this.Response.Write("{top.opener =null;top.close();}");
this.Response.Write("</script>");
例: linkcolumn1.DataNavigateUrlFormatString="javascript:varwin=window.open('edit_usr.aspx?actid={0}','newwin','width=750,height=600,scrollbars=yes,top=50,left=50');window.close()";
window.open
<a href="#" onClick="javascrpt:window.open('adminlove_edituser.asp?user_id=<%=rs("user_id")%>','','toolbar=no,location=no,width=540,height=360')">编审</a>
window.open 的各个属性参数
具体总结 window.open 的各个属性参数如下:
windowobj = window.open([URL ][, name ][, features ][, replace]]]]) URL:新窗口的URL地址
name:新窗口的名称,可以为空
featurse:属性控制字符串,在此控制窗口的各种属性,属性之间以逗号隔开。 fullscreen= { yes/no/1/0 } 是否全屏,默认no
channelmode= { yes/no/1/0 } 是否显示频道栏,默认no
toolbar= { yes/no/1/0 } 是否显示工具条,默认no
location= { yes/no/1/0 } 是否显示地址栏,默认no
directories = { yes/no/1/0 } 是否显示转向按钮,默认no
status= { yes/no/1/0 } 是否显示窗口状态条,默认no
menubar= { yes/no/1/0 } 是否显示菜单,默认no
scrollbars= { yes/no/1/0 } 是否显示滚动条,默认yes
resizable= { yes/no/1/0 } 是否窗口可调整大小,默认no
width=number 窗口宽度(像素单位)
height=number 窗口高度(像素单位)
top=number 窗口离屏幕顶部距离(像素单位)
left=number 窗口离屏幕左边距离(像素单位)