HR-部门内部调动报表



*&---------------------------------------------------------------------*
*& Report ZHRPA038
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZHRPA038.
TABLES:PERNR.
INFOTYPES:0000,0001,0002.
INFOTYPES:0008.
TYPES:BEGIN OF TY_RESULT,
CHANGE_TYPE TYPE C LENGTH 30, "异动类型
DTEXT TYPE UTEXT, "变动范围 Add by xpf 20160506
SITE_YN TYPE C LENGTH 6, "SITE是否变更 Add by cx 20160106
GO_OR_NOT TYPE C LENGTH 6, "是否需要改签合同
BEGDA TYPE PA0001-BEGDA, "生效日期
SAP_NUMBER TYPE PA0001-PERNR, "SAP编号
NUMBER TYPE C LENGTH 20, "工号 “根据SAP编号从IT0002取出调动后原工号
ENAME TYPE PA0001-ENAME, "姓名
FIRST_NAME TYPE C LENGTH 10, "姓拼音
LAST_NAME TYPE C LENGTH 30, "名拼音
NEW_SITE TYPE C LENGTH 40, "现SITE Add by cx 20160106 (根据调动后人事范围对应调动后SITE)
NEW_HETONG TYPE C LENGTH 40, "现劳动合同
NEW_OBJID_1 TYPE C LENGTH 40, "现一级部门
NEW_OBJID_2 TYPE C LENGTH 40, "现二级部门
NEW_OBJID_3 TYPE C LENGTH 40, "现三级部门
NEW_OBJID_4 TYPE C LENGTH 40, "现四级部门
NEW_OBJID_5 TYPE C LENGTH 40, "现部门编码
NEW_PLANS TYPE C LENGTH 80, "现职位
ZZ_BZ TYPE C LENGTH 40, "备注 Add by cx 20160106 (P0008-ZZ_BZ)
ZZ_ORI_NO TYPE C LENGTH 40, "原工号 Add by cx 20160106 (P0002-ZZ_ORI_NO)
OLD_SITE TYPE C LENGTH 40, "原SITE Add by cx 20160106 (Site划分配置表:Z02_T_DEPTSITE)[???]
OLD_HETONG TYPE C LENGTH 40, "原劳动合同公司
OLD_OBJID_1 TYPE C LENGTH 40, "原一级部门
OLD_OBJID_2 TYPE C LENGTH 40, "原二级部门
OLD_OBJID_3 TYPE C LENGTH 40, "原三级部门
OLD_OBJID_4 TYPE C LENGTH 40, "原四级部门
OLD_PLANS TYPE C LENGTH 80, "原职位
END OF TY_RESULT.
DATA:G_O1 TYPE HRP1000-SHORT,
G_O2 TYPE HRP1000-SHORT,
G_O3 TYPE HRP1000-SHORT,
G_O4 TYPE HRP1000-SHORT.
DATA:GT_RESULT TYPE STANDARD TABLE OF TY_RESULT,
GW_RESULT TYPE TY_RESULT.
DATA:GT_T530T TYPE STANDARD TABLE OF T530T,
GW_T530T TYPE T530T,
GT_T588T TYPE STANDARD TABLE OF T588T, "Add by xpf 20160506
GW_T588T TYPE T588T, "Add by xpf 20160506
GT_T500P TYPE STANDARD TABLE OF T500P,
GW_T500P TYPE T500P.
DATA:G_DAT LIKE SY-DATUM.
DATA:GW_P0001 TYPE P0001.
DATA:GDF_PATH TYPE STRING, "add by shikai.liao
GDF_FILENAME TYPE STRING,
GDF_FULLPATH TYPE STRING.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
SELECT *
FROM T500P
INTO CORRESPONDING FIELDS OF TABLE GT_T500P.
IF SY-LANGU = '1'.
SELECT *
FROM T530T
INTO CORRESPONDING FIELDS OF TABLE GT_T530T
WHERE ( MASSN = 'ZC' OR MASSN = 'ZS' OR MASSN = 'ZT' ) "Add by xpf 20160318增加跨薪资范围调动
AND SPRSL = SY-LANGU.
*&->add by cx 20170106 增加“ZA员工雇用”且操作原因为“A1 TCL内调”的员工
SELECT *
FROM T530T
APPENDING CORRESPONDING FIELDS OF TABLE GT_T530T
WHERE MASSN = 'ZA'
AND MASSG = 'A1'
AND SPRSL = SY-LANGU.
*&->end add.
ELSE.
SELECT *
FROM T530T
INTO CORRESPONDING FIELDS OF TABLE GT_T530T
WHERE ( MASSN = 'ZC' OR MASSN = 'ZS' OR MASSN = 'ZT' ) "Add by xpf 20160318增加跨薪资范围调动
AND SPRSL = 'E'.
*&->add by cx 20170106 增加“ZA员工雇用”且操作原因为“A1 TCL内调”的员工
SELECT *
FROM T530T
APPENDING CORRESPONDING FIELDS OF TABLE GT_T530T
WHERE MASSN = 'ZA'
AND MASSG = 'A1'
AND SPRSL = 'E'.
*&->end add.
*&+get SITE.
ENDIF.
*-------------Add by xpf 20160506取变动范围文本----------------*Begin
CLEAR GT_T588T.
IF SY-LANGU = '1'.
SELECT *
FROM T588T
INTO CORRESPONDING FIELDS OF TABLE GT_T588T
WHERE SPRSL = SY-LANGU
AND MNTYP = 'G'
AND ( MENUE = 'ZC' OR MENUE = 'ZS' OR MENUE = 'ZT' OR MENUE = 'ZA')."add by cx on 20160107 add员工雇用操作取值
ELSE.
SELECT *
FROM T588T
INTO CORRESPONDING FIELDS OF TABLE GT_T588T
WHERE SPRSL = 'E'
AND MNTYP = 'G'
AND ( MENUE = 'ZC' OR MENUE = 'ZS' OR MENUE = 'ZT' OR MENUE = 'ZA')."add by cx on 20160107 add员工雇用操作取值
ENDIF.
*-------------Add by xpf 20160506取变动范围文本----------------*End
GET PERNR.
SORT P0000[] BY BEGDA.
*--------Modified by xpf 20160318---------*Begin
DELETE P0000[] WHERE MASSN NE 'ZC' AND MASSN NE 'ZS' AND MASSN NE 'ZT' AND MASSN NE 'ZA'."AND MASSG NE 'A1' ).
*&->add
DELETE P0000[] WHERE MASSN = 'ZA' AND MASSG NE 'A1' .
DELETE P0000[] WHERE BEGDA < PN-BEGDA OR BEGDA > PN-ENDDA .
* DELETE p0000[] WHERE massn <> 'ZC' OR ( begda < pn-begda OR begda > pn-endda ).
*--------Modified by xpf 20160318---------*End
LOOP AT P0000.
READ TABLE GT_T530T INTO GW_T530T WITH KEY MASSG = P0000-MASSG.
IF SY-SUBRC EQ 0.
GW_RESULT-CHANGE_TYPE = GW_T530T-MGTXT.
ENDIF.
*-------------Add by xpf 20160506取变动范围文本----------------*Begin
CLEAR GW_T588T.
READ TABLE GT_T588T INTO GW_T588T WITH KEY MENUE = P0000-MASSN.
IF SY-SUBRC EQ 0.
GW_RESULT-DTEXT = GW_T588T-DTEXT.
ENDIF.
*-------------Add by xpf 20160506取变动范围文本----------------*End
GW_RESULT-BEGDA = P0000-BEGDA.
G_DAT = P0000-BEGDA - 1.
GW_RESULT-GO_OR_NOT = 'N'.
*&->Add cx xpf 20170106 SITE是否变更
GW_RESULT-SITE_YN = 'N'.
*&->end add
READ TABLE P0001 INTO GW_P0001 WITH KEY ENDDA = G_DAT.
IF SY-SUBRC EQ 0."之前的组织信息
CLEAR:G_O4,G_O3,G_O2,G_O1.
CALL FUNCTION 'ZHR_GET_STRUC'
EXPORTING
ORGEH
= GW_P0001-ORGEH
BEGDA
= GW_P0001-ENDDA
ENDDA
= GW_P0001-ENDDA
IMPORTING
SHORT1
= G_O1
SHORT2
= G_O2
SHORT3
= G_O3
SHORT4
= G_O4.
GW_RESULT
-OLD_OBJID_1 = G_O1.
GW_RESULT
-OLD_OBJID_2 = G_O2.
GW_RESULT
-OLD_OBJID_3 = G_O3.
GW_RESULT
-OLD_OBJID_4 = G_O4.
"取得长文本(职位)
SELECT SINGLE STEXT
INTO GW_RESULT-OLD_PLANS
FROM HRP1000
WHERE PLVAR = '01'
AND OTYPE = 'S'
AND OBJID = GW_P0001-PLANS
AND BEGDA <= G_DAT
AND ENDDA >= G_DAT
AND LANGU = '1'.
*&->add by cx on 20170106 +取得原SITE
*PERSA 人事范围
*BTRTL 人事子范围
SELECT SINGLE SITE
INTO GW_RESULT-OLD_SITE
FROM Z02_T_DEPTSITE
WHERE PERSA = GW_P0001-WERKS
AND BTRTL = GW_P0001-BTRTL
AND BEGDA <= G_DAT
AND ENDDA >= G_DAT.
READ TABLE GT_T500P INTO GW_T500P WITH KEY PERSA = GW_P0001-WERKS.
IF SY-SUBRC EQ 0.
GW_RESULT
-OLD_HETONG = GW_T500P-NAME1.
ENDIF.
READ TABLE P0001 WITH KEY BEGDA = P0000-BEGDA."目前的信息
IF SY-SUBRC EQ 0.
CLEAR:G_O4,G_O3,G_O2,G_O1.
CALL FUNCTION 'ZHR_GET_STRUC'
EXPORTING
ORGEH
= P0001-ORGEH
BEGDA
= P0001-BEGDA
ENDDA
= P0001-BEGDA
IMPORTING
SHORT1
= G_O1
SHORT2
= G_O2
SHORT3
= G_O3
SHORT4
= G_O4.
GW_RESULT
-NEW_OBJID_1 = G_O1.
GW_RESULT
-NEW_OBJID_2 = G_O2.
GW_RESULT
-NEW_OBJID_3 = G_O3.
GW_RESULT
-NEW_OBJID_4 = G_O4.
GW_RESULT
-NEW_OBJID_5 = P0001-ORGEH.
*& 现职位
SELECT SINGLE STEXT
INTO GW_RESULT-NEW_PLANS
FROM HRP1000
WHERE PLVAR = '01'
AND OTYPE = 'S'
AND OBJID = P0001-PLANS
AND BEGDA <= P0001-BEGDA
AND ENDDA >= P0001-BEGDA
AND LANGU = '1'.
*&add by cx on 20160106 +现SITE
SELECT SINGLE SITE
INTO GW_RESULT-NEW_SITE
FROM Z02_T_DEPTSITE
WHERE PERSA = P0001-WERKS
AND BTRTL = P0001-BTRTL
AND BEGDA <= P0001-BEGDA
AND ENDDA >= P0001-BEGDA.
* if GW_RESULT-SITE_NOW NE SPAEC.
IF GW_RESULT-NEW_SITE NE GW_RESULT-OLD_SITE.
GW_RESULT
-SITE_YN = 'Y'.
ELSE.
GW_RESULT
-SITE_YN = 'N'.
ENDIF.
READ TABLE GT_T500P INTO GW_T500P WITH KEY PERSA = P0001-WERKS.
IF SY-SUBRC EQ 0.
GW_RESULT
-NEW_HETONG = GW_T500P-NAME1.
IF GW_P0001-WERKS <> P0001-WERKS.
GW_RESULT
-GO_OR_NOT = 'Y'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
LOOP AT P0002 WHERE BEGDA <= P0000-BEGDA AND ENDDA >= P0000-BEGDA.
GW_RESULT
-SAP_NUMBER = P0000-PERNR.
GW_RESULT
-ENAME = P0002-NACHN.
GW_RESULT
-FIRST_NAME = P0002-INITS.
GW_RESULT
-LAST_NAME = P0002-VORNA.
GW_RESULT
-NUMBER = P0002-ZZ_ORI_NO.
EXIT.
ENDLOOP.
*&->add by cx on 20170106 原工号
* GW_RESULT-ZZ_ORI_NO = P0002-ZZ_ORI_NO.
LOOP AT P0002 WHERE ENDDA <= P0000-BEGDA.
GW_RESULT
-ZZ_ORI_NO = P0002-ZZ_ORI_NO.
EXIT.
ENDLOOP.
* SELECT SINGLE
*&->end add.
*&->add by cx on 20170106 find 备注
LOOP AT P0008 WHERE BEGDA <= P0000-BEGDA AND ENDDA >= P0000-BEGDA.
GW_RESULT
-ZZ_BZ = P0008-ZZ_BZ.
EXIT.
ENDLOOP.
APPEND GW_RESULT TO GT_RESULT.
CLEAR GW_RESULT.
ENDLOOP.
END-OF-SELECTION.
PERFORM FRM_EXPORT_DATA.
FORM FRM_EXPORT_DATA .
DATA:LDF_PATH TYPE LOCALFILE.
.
"弹出路径框
CLEAR: GDF_PATH,
GDF_FILENAME
,
GDF_FULLPATH
.
PERFORM FRM_GET_PATH_038 CHANGING GDF_PATH GDF_FILENAME GDF_FULLPATH .
IF GDF_FULLPATH IS INITIAL .
MESSAGE '请选择要保存的文件夹和输入文件名' TYPE 'I'.
ELSE.
CLEAR LDF_PATH.
MOVE GDF_FULLPATH TO LDF_PATH.
PERFORM FRM_OUTPUT_EXCEL_38 TABLES GT_RESULT USING 'ZHRPA038' LDF_PATH .
* PERFORM FRM_OUTPUT_EXCEL_38 TABLES GT_RESULT USING 'zhrpa038_C1' LDF_PATH .
ENDIF.
ENDFORM. " FRM_EXPORT_DATA
FORM FRM_GET_PATH_038 CHANGING:FU_PATH
FU_FILENAME
FU_FULLPATH
.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE
= 'Select Folder and Enter Filename to Save File'
DEFAULT_EXTENSION
= 'xls' "'xlsx'
* DEFAULT_FILE_NAME =
* WITH_ENCODING =
FILE_FILTER
= '*.xls' "'*.xlsx'
* INITIAL_DIRECTORY =
* PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME
= FU_FILENAME
PATH
= FU_PATH
FULLPATH
= FU_FULLPATH
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR
= 1
ERROR_NO_GUI
= 2
NOT_SUPPORTED_BY_GUI
= 3
INVALID_DEFAULT_FILE_NAME
= 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
* CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
* EXPORTING
* WINDOW_TITLE = 'Select Folder to Save File'
* CHANGING
* SELECTED_FOLDER = gdf_path
* EXCEPTIONS
* CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
* OTHERS = 4.
* IF SY-SUBRC <> 0.
*
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
ENDFORM. " FRM_GET_PATH
FORM FRM_OUTPUT_EXCEL_38 TABLES PT_EXCEL TYPE STANDARD TABLE
USING PV_TEMPLATE TYPE BDS_PROPVA
PV_FILE
TYPE LOCALFILE.
DATA:L_IREF_TEMPLATE TYPE REF TO CL_BDS_DOCUMENT_SET,
L_OREF_CONTAINER
TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
L_IREF_CONTROL
TYPE REF TO I_OI_CONTAINER_CONTROL,
L_IREF_ERROR
TYPE REF TO I_OI_ERROR,
L_IREF_DOCUMENT
TYPE REF TO I_OI_DOCUMENT_PROXY,
L_IREF_SPREADSHEET
TYPE REF TO I_OI_SPREADSHEET,
L_RETCODE
TYPE SOI_RET_STRING.
DATA: LT_SIGNATURE TYPE SBDST_SIGNATURE,
LW_SIGNATURE
TYPE BAPISIGNAT,
LT_URI
TYPE SBDST_URI,
LW_URI
TYPE BAPIURI,
LT_SHEET
TYPE SOI_SHEETS_TABLE,
L_DOC
TYPE CNTL_HANDLE ,
L_APL
TYPE OBJ_RECORD ,
LW_SHEET
TYPE SOI_SHEETS.
DATA: LT_FIELDS TYPE STANDARD TABLE OF RFC_FIELDS,
LS_FIELDS
TYPE RFC_FIELDS,
LV_LAST_ROW
TYPE I,
LV_LAST_COL
TYPE I.
DATA: GDF_ERROR TYPE REF TO I_OI_ERROR,
GDS_ERRORS
TYPE REF TO I_OI_ERROR OCCURS 0 WITH HEADER LINE.
DATA:LDF_OBJECTKEY TYPE BAPIBDS01-OBJKEY.
CALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
IMPORTING
CONTROL = L_IREF_CONTROL
RETCODE
= L_RETCODE.
CHECK L_RETCODE = C_OI_ERRORS=>RET_OK.
CALL METHOD L_IREF_CONTROL->INIT_CONTROL
EXPORTING
R3_APPLICATION_NAME
= PV_TEMPLATE
INPLACE_ENABLED
= 'X'
INPLACE_SCROLL_DOCUMENTS
= 'X'
PARENT
= L_OREF_CONTAINER
IMPORTING
RETCODE
= L_RETCODE.
IF L_RETCODE <> C_OI_ERRORS=>RET_OK.
MESSAGE '保存Excel文件出错' TYPE 'E'.
ENDIF.
CHECK L_RETCODE = C_OI_ERRORS=>RET_OK.
CREATE OBJECT L_IREF_TEMPLATE.
LW_SIGNATURE
-PROP_NAME = 'BDS_KEYWORD'.
LW_SIGNATURE
-PROP_VALUE = PV_TEMPLATE.
APPEND LW_SIGNATURE TO LT_SIGNATURE.
REFRESH LT_URI.
CLEAR LDF_OBJECTKEY.
MOVE PV_TEMPLATE TO LDF_OBJECTKEY.
CALL METHOD L_IREF_TEMPLATE->GET_WITH_URL
EXPORTING
CLASSNAME
= 'SOFFICEINTEGRATION'
CLASSTYPE
= 'OT'
OBJECT_KEY
= LDF_OBJECTKEY
CHANGING
URIS
= LT_URI
SIGNATURE
= LT_SIGNATURE
EXCEPTIONS
NOTHING_FOUND
= 1
ERROR_KPRO
= 2
INTERNAL_ERROR
= 3
PARAMETER_ERROR
= 4
NOT_AUTHORIZED
= 5
NOT_ALLOWED
= 6.
CLEAR LW_URI.
READ TABLE LT_URI INTO LW_URI INDEX 1.
IF SY-SUBRC <> 0.
MESSAGE '请检查EXCEL模板不存在或者设置不正确' TYPE 'E'.
ENDIF.
CHECK SY-SUBRC = 0.
CALL METHOD L_IREF_CONTROL->GET_DOCUMENT_PROXY
EXPORTING
DOCUMENT_TYPE
= 'Excel.Sheet'
IMPORTING
DOCUMENT_PROXY
= L_IREF_DOCUMENT
RETCODE
= L_RETCODE.
IF L_RETCODE <> C_OI_ERRORS=>RET_OK.
MESSAGE '保存Excel文件出错' TYPE 'E'.
ENDIF.
CHECK L_RETCODE = C_OI_ERRORS=>RET_OK.
CALL METHOD L_IREF_DOCUMENT->OPEN_DOCUMENT
EXPORTING
DOCUMENT_URL
= LW_URI-URI
OPEN_INPLACE
= 'X'
IMPORTING
RETCODE
= L_RETCODE.
IF L_RETCODE <> C_OI_ERRORS=>RET_OK.
MESSAGE '保存Excel文件出错' TYPE 'E'.
ENDIF.
CHECK L_RETCODE = C_OI_ERRORS=>RET_OK.
FREE L_IREF_ERROR.
CALL METHOD L_IREF_DOCUMENT->GET_SPREADSHEET_INTERFACE
IMPORTING
ERROR
= L_IREF_ERROR
SHEET_INTERFACE
= L_IREF_SPREADSHEET.
CALL METHOD L_IREF_SPREADSHEET->GET_SHEETS
IMPORTING
SHEETS
= LT_SHEET
ERROR
= L_IREF_ERROR.
CHECK L_IREF_ERROR->ERROR_CODE = C_OI_ERRORS=>RET_OK.
CLEAR LW_SHEET.
LV_LAST_ROW
= LINES( PT_EXCEL ).
READ TABLE LT_SHEET INTO LW_SHEET INDEX 1.
CHECK SY-SUBRC = 0.
CALL METHOD L_IREF_SPREADSHEET->SELECT_SHEET
EXPORTING
NAME
= LW_SHEET-SHEET_NAME
IMPORTING
ERROR
= L_IREF_ERROR.
CHECK L_IREF_ERROR->ERROR_CODE = C_OI_ERRORS=>RET_OK.
"calculate The columns of Data
REFRESH LT_FIELDS.
CALL FUNCTION 'DP_GET_FIELDS_FROM_TABLE'
TABLES
DATA = PT_EXCEL
FIELDS = LT_FIELDS.
LV_LAST_COL
= LINES( LT_FIELDS ).
CALL METHOD L_IREF_SPREADSHEET->SET_SELECTION
EXPORTING
LEFT = 1
TOP
= 2
ROWS = LV_LAST_ROW
COLUMNS
= LV_LAST_COL.
CALL METHOD L_IREF_SPREADSHEET->INSERT_RANGE
EXPORTING
COLUMNS
= LV_LAST_COL
ROWS = LV_LAST_ROW
NAME
= PV_TEMPLATE.
CALL METHOD L_IREF_SPREADSHEET->INSERT_ONE_TABLE
EXPORTING
DATA_TABLE
= PT_EXCEL[]
FIELDS_TABLE
= LT_FIELDS
RANGENAME
= PV_TEMPLATE.
CALL METHOD L_IREF_DOCUMENT->SAVE_AS
EXPORTING
FILE_NAME
= PV_FILE.
CALL METHOD L_IREF_DOCUMENT->RELEASE_DOCUMENT
IMPORTING
RETCODE
= L_RETCODE.
IF L_RETCODE <> C_OI_ERRORS=>RET_OK.
MESSAGE '保存Excel文件出错' TYPE 'E'.
ELSE.
MESSAGE 'Excel文件已保存' TYPE 'S'.
ENDIF.
FREE: L_IREF_SPREADSHEET,
L_IREF_DOCUMENT
.
CALL METHOD L_IREF_CONTROL->RELEASE_ALL_DOCUMENTS.
CALL METHOD L_IREF_CONTROL->DESTROY_CONTROL.
ENDFORM. " FRM_OUTPUT_EXCEL
HR-部门内部调动报表的更多相关文章
- Java Web项目_部门内部留言板
t_user用户登录数据表 用户登录界面 JSP开发 通过post请求提交给Servlet处理 Servlet处理连接数据库的处理 登陆成功服务器跳转RequestDispatcher到main.js ...
- 评点SAP HR功能及人力资源管理软件
评点SAP HR功能及人力资源管理软件 本文导航 第1页:my SAP 人力资源软件 第2页:my SAP HR协同功能 第3页:组织结构管理 第4页:mySAPTM HR的战略功能 第5页:集成 ...
- openerp经典收藏 深入理解报表运行机制(转载)
深入理解报表运行机制 原文:http://blog.sina.com.cn/s/blog_57ded94e01014ppd.html 1) OpenERP报表的基本运行机制 OpenERP报表的 ...
- 只用最适合的!全面对比主流 .NET 报表控件
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 随着 .NET 平台的出现,报表相关的开发控件随着而来,已经有 ...
- 我练就数据分析技能从HR转型为产品经理
本文转自知乎 作者:空白白白白 ----------------------------------------------------- 空白白白白写在前面:当我在奥兰多的时候,一位漂亮的女学员(看 ...
- 只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft
前言 随着 .NET 平台的出现,报表相关的开发控件随之出现,目前已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件,给所有报表开发人员在做产品选型时一 ...
- 张小龙最新内部演讲:KPI 是副产品,警惕复杂流程
张小龙最新内部演讲:KPI 是副产品,警惕复杂流程 各位 WXG(微信事业群)的同事们,大家早上好!又到我们一年一度的领导力大会. 大家都看到,我们微信团队膨胀还是比较快的,有 1500 多人了.对此 ...
- 国内专业web报表工具,完美解决中国式报表难题
近几年报表工具的热度不断上升,很多企业都用上了全新的报表工具,主要是企业数据化转型已经成为趋势.在进行选型的时候,很多企业最好都选择国内的报表工具,相信一些人不知道为什么国内的报表工具表现比国外的好. ...
- 领导满意,客户喜欢的数据报表怎么做,交给Smartbi!
财务分析是以会计核算和报表资料及其他相关资料为依据,采用一系列专门的分析技术和方法,对企业等经济组织过去和现在有关筹资活动.投资活动.经营活动.分配活动的盈利能力.营运能力.偿债能力和增长能力状况等进 ...
随机推荐
- 前端开发利器webStorm 3.0配置使用
安装了phpstorm之后,想配置svn,结果在file->settings->Version Contorl->subversion->with conmand line ...
- XV6锁
锁 xv6 运行在多处理器上,即计算机上有多个单独执行代码的 CPU.这些 CPU 操作同一片地址空间并分享其中的数据结构:xv6 必须建立一种合作机制防止它们互相干扰.即使是在单个处理器上,xv6 ...
- Leetcode 264.丑数II
丑数II 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10 ...
- Cake(凸包+区间DP)
You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut the cake into ...
- html5的新通讯技术socket.io,实现一个聊天室
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDU 6070 (线段树)(统计颜色)
HDU 6070 Partition Problem : 给一段长度为n的序列,要求找出一段区间,使得这段区间的数字种类除以区间长度最小.输出最后的答案即可.(n <= 60000)(9s时限) ...
- HDU 4651 (生成函数)
HDU 4651 Partition Problem : n的整数划分方案数.(n <= 100008) Solution : 参考资料: 五角数 欧拉函数 五边形数定理 整数划分 一份详细的题 ...
- poj3905 2sat!
这次已经不是2sat的问题了,相信2sat已经不是问题了,最后一题2sat,竟然跪在输入上! 千万注意scanf(%c)!读入!!!!有空格也读啊!!!读入+ -一定要用字符读啊??笨死算了!被人水死 ...
- python学习之-- redis模块操作 集合和有序集合
redis 模块操作之 集合set和有序集合zset Set 集合操作,不允许重复的列表sadd(name,value):name对应的集合中添加元素scard(name):获取name对应的集合中元 ...
- Java日志框架使用技巧收集(slf4j、jcl、jul、log4j1、log4j2、logback)
乒乓狂魔-教程: jdk-logging.log4j.logback日志介绍及原理 commons-logging与jdk-logging.log4j1.log4j2.logback的集成原理 slf ...