HR開發(個人總結 有點亂哦)
業務需求:
完成一張員工績效考評的明細表,其樣子大致為:
成本中心 | 成本中心名稱 | 部門名稱 | 崗位描述 | 員工子組 | 員工編號 | 姓名 | 入職日期 | 異動本崗位日期 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | XXXX年XX月份 | 合計 |
C007101410 | 八角北里店 | 服務檯員工 | 6652 | XX | 19981101 | 20130101 | 92 | 93 | 93 | 90 | 99 | 99 | 102 | 90 | 85 | 87 | 93 | 75 | 1098 | ||
C007101410 | 八角北里店 | 長病人員 | 6655 | XX | 19981101 | 90 | 91 | 93 | 78 | 352 |
涉及關鍵技術:
1、動態表的建立
2、HR相關開發技術
3、邏輯資料庫技術
首先從第二點 HR相關開發技術講解:
(HR報告類)新建程式的時候:新增邏輯資料庫 且在程式中引用相關的結構【TABLES : PERNR 】,會出現自動的查詢介面。下面兩個圖中自動展示。此可以成為HR 報告類技術,也是邏輯資料庫的一大優勢。
2. 怎麼獲取動態列和動態表格
a.獲取列數
通過期間之間的差值,可以獲取期間的數量,結合其他的固定列可以算出列數。涉及函式FIMA_DAYS_AND_MONTHS_AND_YEARS
程式碼如下:
CALL FUNCTION
EXPORTING
I_DATE_FROM = PN-BEGPS
* I_KEY_DAY_FROM = I_KEY_DAY_FROM
I_DATE_TO = PN-ENDPS
* I_KEY_DAY_TO = I_KEY_DAY_TO
* I_FLG_SEPARATE = ' '
IMPORTING
* E_DAYS = E_DAYS
E_MONTHS = G_NUMB
* E_YEARS = E_YEARS
B:建立動態內表
大致步驟:1.首先建立一個儲存表列資訊的內表,暫定為A內表,之後給內表賦值。
2、通過內表,創建出一個以此內表的行資料為列資訊的內表,定義為B內表, 那麼此時動態內表已經建立完整
具體程式碼如下:
FORM SUB_DY_TABLE .
DATA: I_FIELDCAT LIKE TABLE OF LVC_S_FCAT, "表字段表
W_FIELDCAT LIKE LINE OF I_FIELDCAT. "表字段工作區 此為 建立A內表和對應的工作區
DATA : NUM1 TYPE I VALUE 0,
NUM2 TYPE I VALUE 0.
DEFINE MARCO_ADDDYitab.
W_FIELDCAT-FIELDNAME = &1.
W_FIELDCAT-DATATYPE = &2.
W_FIELDCAT-INTLEN = &3.
W_FIELDCAT-DECIMALS = &4.
W_FIELDCAT-JUST = &5.
APPEND W_FIELDCAT TO I_FIELDCAT.
END-OF-DEFINITION .
MARCO_ADDDYitab : " 給A內表賦值,作為B內表的列
'KOSTL' 'CHAR' '10' '' 'L', "成本中心
'KTEXT' 'CHAR' '20' '' 'L', "成本中心描述
'STEXT' 'CHAR' '40' '' 'L', "組織單位描述
" 'ORGID' 'NUMC' '8' '' 'L', "單位
" 'PLANS' 'NUMC' '8' '' 'L', "崗位
'PLSTX' 'CHAR' '25' '' 'L', "崗位描述
'PTEXT' 'CHAR' '20' '' 'L', "子組描述
'PERNR' 'NUMC' '8' '' 'L', "員工編號
'ENAME' 'CHAR' '40' '' 'L', "員工姓名
'LZRQ' 'DATS' '8' '' 'L', "入職日期
'DAYPS' 'DATS' '8' '' 'L'. "異動日期
CLEAR : NUM1,NUM2 .
DO G_NUMB TIMES.
NUM2 = NUM1 + ( PN-BEGDA+4(2) ) .
IF NUM1 = 0.
G_WA_PERD-YEAR = PN-BEGDA+0(4).
G_WA_PERD-MONTH = PN-BEGDA+4(2).
APPEND G_WA_PERD TO G_IT_PERD.
ELSEIF NUM1 <> 0 AND NUM2 <= 12 .
G_WA_PERD-YEAR = PN-BEGDA+0(4).
G_WA_PERD-MONTH = PN-BEGDA+4(2) + NUM1 .
APPEND G_WA_PERD TO G_IT_PERD.
ELSE .
G_WA_PERD-YEAR = PN-BEGDA+0(4) + 1.
G_WA_PERD-MONTH = PN-BEGDA+4(2) + NUM1 - 12 .
APPEND G_WA_PERD TO G_IT_PERD.
ENDIF.
CONCATENATE C_NAME G_WA_PERD-YEAR G_WA_PERD-MONTH INTO T_NAME.
MARCO_ADDDYitab : T_NAME 'CURR' '13' '2' 'L'.
NUM1 = NUM1 + 1.
ENDDO.
MARCO_ADDDYitab :'SUM' 'CURR' '13' '2' 'L',
'PJZ' 'CURR' '13' '2' 'L'.
***建立動態表
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE “函式,建立內表 不過此處得到的為一個引用物件,我們必須給這個引用
物件進行解除(就是把它的資料地址分配給另外的數) 才能夠應用
EXPORTING
IT_FIELDCATALOG = I_FIELDCAT
IMPORTING
EP_TABLE = EP_TABLE.
ASSIGN EP_TABLE->* TO <T_DYNTABLE>. ”解除資料物件,到指標<T_DYNTABLE>中,此時<T_DYNTABLE>就是代表一個內表,且為動態的內表
CREATE DATA W_TABLE LIKE LINE OF <T_DYNTABLE>.
ASSIGN W_TABLE->* TO <FS_DYNTABLE>.
“兩個指標的定義
“FIELD-SYMBOLS: <T_DYNTABLE> TYPE STANDARD TABLE,"Dynamic internal table name
” <FS_DYNTABLE> TYPE ANY,
ENDFORM. " SUB_DY_TABLE
3.獲取動態表頭
這個簡單:就是通過最先求得的列數,給fieldcat進行新增行
DATA: G_IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV ,
G_WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV ,
FORM SUB_DY_FIELD .
DEFINE MARCO_ADDFIELD .
G_WA_FIELDCAT-FIELDNAME = &1.
G_WA_FIELDCAT-TABNAME = &2.
G_WA_FIELDCAT-SELTEXT_M = &3.
APPEND G_WA_FIELDCAT TO G_IT_FIELDCAT.
END-OF-DEFINITION .
MARCO_ADDFIELD : 'KOSTL' '<T_DYNTABLE>' TEXT-001 ,
'KTEXT' '<T_DYNTABLE>' TEXT-002 ,
'STEXT' '<T_DYNTABLE>' TEXT-003 ,
'PLSTX' '<T_DYNTABLE>' TEXT-004 ,
'PTEXT' '<T_DYNTABLE>' TEXT-005 ,
'PERNR' '<T_DYNTABLE>' TEXT-006 ,
'ENAME' '<T_DYNTABLE>' TEXT-007 ,
'LZRQ' '<T_DYNTABLE>' TEXT-008
" ,'DAYPS' '<T_DYNTABLE>' TEXT-009
.
SORT G_IT_PERD BY YEAR MONTH ASCENDING.
LOOP AT G_IT_PERD INTO G_WA_PERD.
CONCATENATE G_WA_PERD-YEAR '年' G_WA_PERD-MONTH '月' INTO T_STRING.
CONCATENATE C_NAME G_WA_PERD-YEAR G_WA_PERD-MONTH INTO T_NAME.
MARCO_ADDFIELD : T_NAME '<T_DYNTABLE>' T_STRING.
ENDLOOP.
MARCO_ADDFIELD : 'SUM' '<T_DYNTABLE>' TEXT-011 ,
'PJZ' '<T_DYNTABLE>' TEXT-012 .
ENDFORM.
3:邏輯資料庫技術
START-OF-SELECTION .之後跟GET. 即:迴圈技術
START-OF-SELECTION .
RP-SET-NAME-FORMAT.
PERFORM SUB_SUMCOUNT. "計算期間的個人
PERFORM SUB_DY_table. "建立動態內表
PERFORM SUB_DY_FIELD. "建立動態列
get pernr .
PERFORM GETDATA.
4.下面進行的是 賦值
此處用到的技術是 給 <FS_DYNTABLE>(動態表的工作區) 進行分解到 <I_FIELD>,對分解的部分 <I_FIELD>進行賦值,做到最工作區的賦值
相關程式碼如下:
LOOP AT G_IT_PERD INTO G_WA_PERD.
CONCATENATE C_NAME G_WA_PERD-YEAR G_WA_PERD-MONTH INTO T_NAME.
ASSIGN COMPONENT T_NAME OF STRUCTURE <FS_DYNTABLE> TO <I_FIELD>. "將<FS_DYNTABLE> 的 t_name 元件分配給 <I_FIELD>
CONCATENATE G_WA_PERD-YEAR G_WA_PERD-MONTH INTO L_BEG.
* CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
* EXPORTING
* DAY_IN = L_BEG
* IMPORTING
* LAST_DAY_OF_MONTH = L_END
* EXCEPTIONS
* DAY_IN_NOT_VALID = 1
* OTHERS = 2.
SORT P9011 DESCENDING .
READ TABLE P9011 WITH KEY BEGDA+0(6) = L_BEG .
IF sy-SUBRC = 0 .
<I_FIELD> = P9011-ZZHR_MKHF.
wa_jixiao-col1 = P9011-ZZHR_MKHF.
APPEND wa_jixiao to i_jixiao .
ENDIF.
ENDLOOP.
5.當然還有HR中怎麼取數
此處涉及技術: infotype PXXXX表 等問題,相關具體文件 看看 我上傳的(HR學習資料),大致的程式碼如下:
"員工姓名
SORT P0001 DESCENDING .
SORT p0000 DESCENDING .
clear P0001 .
CLEAR p0000.
" RP_PROVIDE_FROM_last p0000 space pn-begda pn-endda .
LOOP AT p0000 where massn = 'ZD'.
exit .
ENDLOOP.
IF p0000-begda is INITIAL.
LOOP AT P0001 WHERE begda <= pn-endda and endda >= pn-endda .
G_WA_OUTTAB-ENAME = P0001-ENAME.
G_WA_OUTTAB-KOSTL = P0001-KOSTL. "成本中心
G_WA_OUTTAB-ORGEH = P0001-ORGEH. "組織單位
G_WA_OUTTAB-PLANS = P0001-PLANS. "崗位
G_WA_OUTTAB-PERSK = P0001-PERSK. "員工子組
G_WA_OUTTAB-PERNR = P0001-PERNR . "員工編號
G_WA_OUTTAB-DAYPS = P0001-BEGDA.
EXIT .
ENDLOOP.
ELSE.
LOOP AT P0001 WHERE BEGDA = P0000-BEGDA AND ENDDA = p0000-endDA .
G_WA_OUTTAB-ENAME = P0001-ENAME.
G_WA_OUTTAB-KOSTL = P0001-KOSTL. "成本中心
G_WA_OUTTAB-ORGEH = P0001-ORGEH. "組織單位
G_WA_OUTTAB-PLANS = P0001-PLANS. "崗位
G_WA_OUTTAB-PERSK = P0001-PERSK. "員工子組
G_WA_OUTTAB-PERNR = P0001-PERNR . "員工編號
G_WA_OUTTAB-DAYPS = P0001-BEGDA.
EXIT .
ENDLOOP.
ENDIF.
***資訊型別0001組織分配****"
" RP_PROVIDE_FROM_LAST P0001 SPACE PN-BEGDA PN-BEGDA .
" IF PNP-SW-FOUND = '1' .
***員工子組描述***
IF g_wa_outtab-PERSK IS NOT INITIAL.
SELECT SINGLE PTEXT INTO g_wa_outtab-PTEXT FROM T503T
WHERE SPRSL = SY-LANGU
AND PERSK = g_wa_outtab-PERSK .
ENDIF.
***員工組織***
IF g_wa_outtab-orgeh IS NOT INITIAL.
SELECT SINGLE orgtx INTO g_wa_outtab-STEXT
FROM t527x WHERE orgeh = g_wa_outtab-orgeh
AND sprsl = sy-langu
AND begda < pn-BEGDA
AND endda > pn-BEGDA.
ENDIF.
***員工崗位***
IF g_wa_outtab-plans IS NOT INITIAL.
SELECT SINGLE plstx INTO g_wa_outtab-plstx
FROM t528t WHERE plans = g_wa_outtab-plans
AND otype = 'S'
AND sprsl = sy-langu
AND begda <= pn-BEGDA
AND endda >= pn-BEGDA.
ENDIF.
***成本中心***
IF g_wa_outtab-kostl IS NOT INITIAL.
SELECT SINGLE ktext INTO g_wa_outtab-ktext FROM cskt
WHERE spras = sy-langu
AND kokrs = 'COWM'
AND kostl = g_wa_outtab-kostl.
ENDIF.
" ENDIF.
***資訊型別0041
***入司時間***
PROVIDE dar01 dat01 FROM p0041 BETWEEN pn-begda and pn-endda
WHERE p0041-dar01 = 'Z1'.
g_wa_outtab-LZRQ = p0041-dat01.
ENDPROVIDE.
相關推薦
HR開發(個人總結 有點亂哦)
業務需求: 完成一張員工績效考評的明細表,其樣子大致為: 成本中心 成本中心名稱 部門名稱 崗位描述 員工子組 員工編號 姓名 入職日期 異動本崗位日期 XXXX年XX月份 XXXX年XX月份 XXXX年XX月份 XXXX年XX月份 XXXX年XX月份 XXXX年XX月份
演算法複習(個人整理簡亂版)
pca: z = wT*x; x*xT*w = r * w; kpca: fi(x) * fi(x)T *w = r*w svd: Ax = rx -> A W = W *S -> A = W * S * W-1 -> A = W*S*WT =>
iOS 崩潰日誌分析(個人總結,最實用)
要分析奔潰日誌需要三個檔案:crash日誌,symbolicatecrash分析工具,.dSYM符號集 0. 在桌面建立一個crash資料夾 1. 需要Xcode自帶的崩潰分析工具symbolicatecrash,這個檔案的位置參考:/Applications/Xcode.
軟體開發面試個人總結(有工作經驗)
應該如何自我介紹? 各位面試官好,我叫某某某,2015.7畢業於某某某大學某某某專業。2014年就職於某某某公司,擔任軟體開發,主要負責銀行前端交易和報文的轉化轉發,參與過烏商行的交易前端和中間業務翻寫,後期主要負責攀枝花商業銀行的前端維護和優化。我平時比較喜
Git基礎命令使用(個人總結)
down class 一次 onf set .net remote odin -a 個人在開發中整理常用的git命令,相信很多人會需要到的。 全局配置信息: git config --global user.name "Your name"
scrapy詳細資料流走向(個人總結)
直接從資料流的角度來說比較容易理解: ·1、Spider建立一個初識url請求,把這個請求通過Engine轉給Scheduler排程模組。然後Scheduler向Engine提供一個請求(這個請求是一個真實的url請求) 疑問點一:為什麼Engine把請求發給Scheduler模組,然
scrapy詳細數據流走向(個人總結)
emp 這不 inf 處理 download 需要 pipe ddl gin 直接從數據流的角度來說比較容易理解: ·1、Spider創建一個初識url請求,把這個請求通過Engine轉給Scheduler調度模塊。然後Scheduler向Engine提供一個請求(這
java初級面試題(個人總結)
java基礎 1、String、StringBuffer以及StringBuild的區別? 答:這三個類之間的區別主要是在兩個方面,即執行速度和執行緒安全這兩方面 執行速度:StringBuilder > StringBuffer > String
阿里架構設計之初體驗,送給準備進階架構的朋友(個人總結)
1 基本概念和目的 架構設計的目的是為了解決系統複雜度帶來的問題,並不是要面面俱到,不需要每個架構都具備高效能、高可用、高擴充套件等特點,而是要識別出實際業務實際情況的複雜點,然後有有針對性地解決問題,即:有的放矢,而不是貪大求全。 在實際情況中,不一定每個系統都要做架
一個Activity多個Handler時,Message是如何傳遞的(個人總結)
作者:海岸線-haianxian 來源:CSDN 原文:https://blog.csdn.net/u010680097/article/details/52142396 版權宣告:本文為博主原創文章,轉載請附上博文連結! 上面是作者的原文
Doxygen使用教程(個人總結)
簡介Doxygen 一.什麼是Doxygen? Doxygen 是一個程式的檔案產生工具,可將程式中的特定批註轉換成為說明檔案。通常我們在寫程式時,或多或少都會寫上批註,但是對於其它人而言,要直接探索程式裡的批註,與打撈鐵達尼號同樣的辛苦。大部分有用的批註都是屬於針對函式
關於虛擬機器(VMware) 中橋接模式與nat模式的區別(個人總結)
一、橋接模式 1.本人通過網上的的查詢得到的答案是,橋接模式使用的是區域網模式,關聯的同時不會對主機網路產生很大的影響,但是我在配置的時候遇到的問題就是在不同的環境下,每次的ip地址都不一樣,導致每次都需要重新配置,橋接模式試用與在固定的網路下面使用,本人也通過配置靜態ip
Swift學習總結(個人總結,以方便理解為主)
swift總結 一、註冊cell 1.用nib, 向 tableview 註冊 cell 全域性變數 let cellIdentifier = "myCell" myTableView!.registerNib(UINib(nibName: "MyCell", bundle
關於移動端頁面開發(微信內建瀏覽器)總結
上個禮拜,剛入職就接到一個移動端的活動頁面專案,重點還是要相容微信瀏覽器,相容主流機型。在這之前,我所做的都是PC端的,想來兩者差別不大,實際動手時遇到的坑還是蠻多的。時間過去的有點久,我也不能把每個坑都列出來,只能寫些印象深刻的。 1、關於頁面背景
軟體測試需要具備的知識體系(個人總結)
一、軟體的生命週期(SDLC,Systems Development Life Cycle,SDLC) 軟體計劃與可行性研究(問題定義、可行性研究);需求分析;軟體設計(概要設計、詳細設計);編碼;軟體測試;執行與維護 生存週期劃分 各階段的
sql語句合集大全(個人總結)
--查詢emp表 select * from emp; --查詢emp表的sal select a.SAL from emp a; --查詢emp表的ename select a.ename from
Delete出錯分析總結(個人總結很到位) 0x0000007ff64426f87e(ucrtbased.dll)處(處於dataa.exe中)引發的異常:
近日在除錯C++程式中new class 後delete 出現如下錯誤: * 0x0000007ff64426f87e(ucrtbased.dll)處(處於dataa.exe中)引發的異常:0xC0000005:讀取位置(0xffffffffffffff
關於activity工作流常用操作(個人總結)
1、部署流程定義 repositoryService.createDeployment().addClasspathResource(path+filename).deploy(); 2、刪除流程定義 ProcessDefinitionQuery quer
redis常用指令(個人總結)
Redis常用命令集 1)連線操作命令 quit:關閉連線(connection)auth:簡單密碼認證help cmd: 檢視cmd幫助,例如:help quit 2)持久化 save:將資料同步儲存到磁碟bgsave:將資料非同步儲存到磁碟lastsave:返回上次
select-2 外掛使用(個人總結簡易使用)
首先看看index頁面,可通用 {extend name="layout" /} {block name="plugins-css"} <link href="__LIBS__/jquery-nestable/jquery.nestable.css" r