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!
财务分析是以会计核算和报表资料及其他相关资料为依据,采用一系列专门的分析技术和方法,对企业等经济组织过去和现在有关筹资活动.投资活动.经营活动.分配活动的盈利能力.营运能力.偿债能力和增长能力状况等进 ...
随机推荐
- Spring入门(1)——搭建简单的环境
步骤: 1.下载spring框架开发包. 2.创建web项目并引入开发包. 3.创建java接口和相应的实现类. 4.编写spring的配置文件. 5.编写 测试类,并进行测试. 1.下载spring ...
- [Noip2004][Day ?][T?]合并果子(?.cpp)
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)
1. 何为Accessibility机制 许多Android使用者因为各种情况导致他们要以不同的方式与手机交互.对于那些由于视力.听力或其它身体原因导致不能方便使用Android智能手机的用户,And ...
- 大数据学习——sqoop入门
下载地址 https://pan.baidu.com/s/1qWDl29L9I_KVU54c0ioNfQ fvfh 3.1 概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传 ...
- NLS_LANG在客户端不能确定,字符集转变将造成不可预期的后果
原因:1,没有客服端配置字符集2,客户端字符集跟服务端字符集不一致 解决:1,打开plsql 帮助-支持信息看看uls_lang是否设置 2,查看服务器端字符集 Select *from V$NLS_ ...
- Kubernetes网络设计原则
在配置集群网络插件或者实践K8S 应用/服务部署请时刻想到这些原则: 1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间 2.集群内所有Pod都在一个直接连通的扁平网络中,可通 ...
- 调用BOS服务保存一个单据的简化示例
IMetaDataService metadataService = ServiceHelper.GetService<IMetaDataService>(); // 加载元数据 Form ...
- 约分差束 例题 ZOJ 2770 火烧连营
题目来源:ZOJ Monthly, October 2006, ZOJ2770题目描述:大家都知道,三国时期,蜀国刘备被吴国大都督陆逊打败了.刘备失败的原因是刘备的错误决策.他把军队分成几十个大营,每 ...
- Android菜单
Android菜单概述 菜单是Activity的一个重要组成部分,它为用户操作提供了快捷的途径.Android提供了一个简单的框架来向程序中添加标准菜单 . 一.创建一个菜单资源 你需要在一个XML ...
- Java实现简单的图片浏览器
第一次写博客,不喜勿喷. 最近一个小师弟问我怎么用Java做图片浏览器,感觉好久没玩Java了,就自己动手做了一下. 学校的教程是用Swing来做界面的,所以这里也用这个来讲. 首先要做个大概的界面出 ...