FAGLL03行專案報表增強欄位
FAGLL03行專案報表增強欄位
FAGLPOSX增加客戶編碼描述和供應商編碼描述
SE19 實現FAGL_ITEMS_CH_DATA
METHOD if_ex_fagl_items_ch_data~change_items.
*" Enh. Impl. for Line Items, TCODE: FAGLL03
*" 科目
TYPES: BEGIN OF ty_hkont,
hkont TYPE hkont,
txt20 TYPE skat-txt20,
END OF ty_hkont.
*" 利潤中心
TYPES: BEGIN OF ty_prctr,
prctr TYPE prctr,
ktext TYPE cepct-ktext,
END OF ty_prctr.
*" 訂單
TYPES: BEGIN OF ty_aufnr,
aufnr TYPE aufk-aufnr,
ktext TYPE aufk-ktext,
END OF ty_aufnr.
*" 客戶
TYPES: BEGIN OF ty_kunnr,
kunnr TYPE kunnr,
ktokd TYPE ktokd,
name1 TYPE kna1-name1,
txt30 TYPE t077x-txt30,
END OF ty_kunnr.
*" 供應商
TYPES: BEGIN OF ty_lifnr,
lifnr TYPE lifnr,
ktokk TYPE ktokk,
name1 TYPE lfa1-name1,
txt30 TYPE t077y-txt30,
END OF ty_lifnr.
*成本中心
TYPES: BEGIN OF ty_kostl,
kostl TYPE cskt-kostl,
ktext TYPE cskt-ktext,
END OF ty_kostl.
*" 銷售合同資訊, only for customer
-
TYPES: BEGIN OF TY_SALES_CONTR,
-
CONTR TYPE ZTSD005-CVBELN,
-
EXTNR TYPE ZTSD005-EXTVBELN,
-
VKORG TYPE VKORG,
-
SDABW TYPE ZTSD005-SDABW, " 包裝方式
-
END OF TY_SALES_CONTR.
DATA: lt_hkont_temp TYPE STANDARD TABLE OF ty_hkont,
lt_hkont TYPE STANDARD TABLE OF ty_hkont,
ls_hkont TYPE ty_hkont.DATA: lt_prctr_temp TYPE STANDARD TABLE OF ty_prctr,
lt_prctr TYPE STANDARD TABLE OF ty_prctr,
ls_prctr TYPE ty_prctr.DATA: lt_aufnr_temp TYPE STANDARD TABLE OF ty_aufnr,
lt_aufnr TYPE STANDARD TABLE OF ty_aufnr,
ls_aufnr TYPE ty_aufnr.DATA: lt_kunnr_temp TYPE STANDARD TABLE OF ty_kunnr,
lt_kunnr TYPE STANDARD TABLE OF ty_kunnr,
ls_kunnr TYPE ty_kunnr.DATA: lt_lifnr_temp TYPE STANDARD TABLE OF ty_lifnr,
lt_lifnr TYPE STANDARD TABLE OF ty_lifnr,
ls_lifnr TYPE ty_lifnr.DATA: lt_kostl_temp TYPE STANDARD TABLE OF ty_kostl,
lt_kostl TYPE STANDARD TABLE OF ty_kostl,
ls_kostl TYPE ty_kostl. -
DATA: LT_SALES_CONTR_TEMP TYPE STANDARD TABLE OF TY_SALES_CONTR,
-
LT_SALES_CONTR TYPE STANDARD TABLE OF TY_SALES_CONTR,
-
LS_SALES_CONTR TYPE TY_SALES_CONTR.
DATA: lv_gkont TYPE bseg-hkont,
lv_koart TYPE bseg-koart.FIELD-SYMBOLS: <fs_u_field> TYPE any.
DATA l_type TYPE c.
-
邏輯控制
PERFORM frm_get_type IN PROGRAM zzljyfien_0001 IF FOUND
USING ‘FAGL_ACCOUNT_ITEMS_GL’
CHANGING l_type.
CHECK l_type = ‘S’.
*" use field-symbols: improve the performance
FIELD-SYMBOLS: <fs_item> TYPE LINE OF faglposx_t.
LOOP AT ct_items ASSIGNING <fs_item>.
ls_hkont-hkont = <fs_item>-hkont.
APPEND ls_hkont TO lt_hkont_temp.
ls_prctr-prctr = <fs_item>-prctr.
APPEND ls_prctr TO lt_prctr_temp.
ls_aufnr-aufnr = <fs_item>-aufnr.
APPEND ls_aufnr TO lt_aufnr_temp.
ls_kostl-kostl = <fs_item>-kostl.
APPEND ls_kostl TO lt_kostl_temp.
*" U開頭的欄位, 並不是SAP的標準欄位,而是顧問配置出來的,
*" 如果顧問取消了配置, 這裡就會報錯
*" 欄位U_KUNNR、U_LIFNR
-
ls_kunnr-kunnr = <fs_item>-kunnr. " G/L Account Line Item 中,KUNNR和LIFNR只沒有值的 IF <fs_item>-kunnr IS INITIAL. ASSIGN COMPONENT 'U_KUNNR' OF STRUCTURE <fs_item> TO <fs_u_field>. IF sy-subrc = 0. ls_kunnr-kunnr = <fs_u_field>. IF ls_kunnr-kunnr IS INITIAL. ASSIGN COMPONENT 'ZZ_ITEM14' OF STRUCTURE <fs_item> TO <fs_u_field>. IF sy-subrc = 0. ls_kunnr-kunnr = <fs_u_field>. IF NOT ls_kunnr-kunnr IS INITIAL. APPEND ls_kunnr TO lt_kunnr_temp. ENDIF. ENDIF. ELSE. APPEND ls_kunnr TO lt_kunnr_temp. ENDIF. ENDIF. ELSE. ls_kunnr-kunnr = <fs_item>-kunnr. APPEND ls_kunnr TO lt_kunnr_temp. ENDIF.
-
ENDLOOP.ls_lifnr-lifnr = <fs_item>-lifnr. " G/L Account Line Item 中,KUNNR和LIFNR只沒有值的 IF <fs_item>-lifnr IS INITIAL. ASSIGN COMPONENT 'U_LIFNR' OF STRUCTURE <fs_item> TO <fs_u_field>. IF sy-subrc = 0. ls_lifnr-lifnr = <fs_u_field>. " <fs_item>-u_lifnr. IF ls_lifnr-lifnr IS INITIAL. ASSIGN COMPONENT 'ZZ_ITEM13' OF STRUCTURE <fs_item> TO <fs_u_field>. IF sy-subrc = 0. ls_lifnr-lifnr = <fs_u_field>. IF NOT ls_lifnr-lifnr IS INITIAL. APPEND ls_lifnr-lifnr TO lt_lifnr_temp. ENDIF. ENDIF. ELSE. APPEND ls_lifnr TO lt_lifnr_temp. ENDIF. ENDIF. ELSE. ls_lifnr-lifnr = <fs_item>-lifnr. APPEND ls_lifnr TO lt_lifnr_temp. ENDIF.
UNASSIGN <fs_item>.
*" get text description
SORT lt_hkont_temp ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_hkont_temp.
SORT lt_prctr_temp ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_prctr_temp.
SORT lt_aufnr_temp ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_aufnr_temp.
SORT lt_kostl_temp ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_kostl_temp.
DELETE lt_kostl_temp WHERE kostl IS INITIAL.
IF lines( lt_hkont_temp ) > 0.
SELECT
saknr AS hkont
txt20
INTO TABLE lt_hkont
FROM skat
FOR ALL ENTRIES IN lt_hkont_temp
WHERE spras = sy-langu
AND ktopl = 'COFT'
AND saknr = lt_hkont_temp-hkont.
SORT lt_hkont ASCENDING BY hkont.
ENDIF.
IF lines( lt_prctr_temp ) > 0.
SELECT
prctr
ktext
INTO TABLE lt_prctr
FROM cepct
FOR ALL ENTRIES IN lt_prctr_temp
WHERE spras = sy-langu
AND prctr = lt_prctr_temp-prctr
AND datbi >= sy-datum
AND kokrs = 'COFT'.
SORT lt_prctr ASCENDING BY prctr.
ENDIF.
IF lines( lt_aufnr_temp ) > 0.
SELECT
aufnr
ktext
INTO TABLE lt_aufnr
FROM aufk
FOR ALL ENTRIES IN lt_aufnr_temp
WHERE aufnr = lt_aufnr_temp-aufnr.
SORT lt_aufnr ASCENDING BY aufnr.
ENDIF.
*成本中心
IF lines( lt_kostl_temp ) > 0.
SELECT kostl
ktext
INTO TABLE lt_kostl
FROM cskt
FOR ALL ENTRIES IN lt_kostl_temp
WHERE cskt~kostl = lt_kostl_temp-kostl
AND cskt~spras = sy-langu
AND cskt~kokrs = ‘COFT’
AND cskt~datbi >= sy-datum.
IF sy-subrc = 0.
SORT lt_kostl BY kostl.
ENDIF.
ENDIF.
SORT lt_kunnr_temp ASCENDING BY kunnr.
DELETE ADJACENT DUPLICATES FROM lt_kunnr_temp COMPARING kunnr.
IF lines( lt_kunnr_temp ) > 0.
SELECT
kna1~kunnr
kna1~ktokd
kna1~name1
t077x~txt30
INTO TABLE lt_kunnr
FROM kna1
INNER JOIN t077x ON t077x~ktokd = kna1~ktokd
AND t077x~spras = sy-langu
FOR ALL ENTRIES IN lt_kunnr_temp
WHERE kunnr = lt_kunnr_temp-kunnr.
SORT lt_kunnr ASCENDING BY kunnr.
ENDIF.
SORT lt_lifnr_temp ASCENDING BY lifnr.
DELETE ADJACENT DUPLICATES FROM lt_lifnr_temp COMPARING lifnr.
IF lines( lt_lifnr_temp ) > 0.
SELECT
lfa1~lifnr
lfa1~ktokk
lfa1~name1
t077y~txt30
INTO TABLE lt_lifnr
FROM lfa1
INNER JOIN t077y ON t077y~ktokk = lfa1~ktokk
AND t077y~spras = sy-langu
FOR ALL ENTRIES IN lt_lifnr_temp
WHERE lifnr = lt_lifnr_temp-lifnr.
SORT lt_lifnr ASCENDING BY lifnr.
ENDIF.
*" fill additional fields
LOOP AT ct_items ASSIGNING <fs_item>.
*" 科目
READ TABLE lt_hkont INTO ls_hkont WITH KEY hkont = <fs_item>-hkont BINARY SEARCH.
IF sy-subrc = 0.
<fs_item>-zz_hkont_text = ls_hkont-txt20.
ENDIF.
*" 利潤中心
READ TABLE lt_prctr INTO ls_prctr WITH KEY prctr = <fs_item>-prctr BINARY SEARCH.
IF sy-subrc = 0.
<fs_item>-zz_prctr_text = ls_prctr-ktext.
ENDIF.
*" 訂單
READ TABLE lt_aufnr INTO ls_aufnr WITH KEY aufnr = <fs_item>-aufnr BINARY SEARCH.
IF sy-subrc = 0.
<fs_item>-zz_aufnr_text = ls_aufnr-ktext.
ENDIF.
*" 客戶
READ TABLE lt_kunnr INTO ls_kunnr WITH KEY kunnr = <fs_item>-kunnr BINARY SEARCH.
IF sy-subrc = 0.
<fs_item>-zz_kunnr_text = ls_kunnr-name1.
<fs_item>-zz_ktokd = ls_kunnr-ktokd.
<fs_item>-zz_ktokd_text = ls_kunnr-txt30.
ENDIF.
" 供應商
READ TABLE lt_lifnr INTO ls_lifnr WITH KEY lifnr = <fs_item>-lifnr BINARY SEARCH.
IF sy-subrc = 0.
<fs_item>-zz_lifnr_text = ls_lifnr-name1.
<fs_item>-zz_ktokk = ls_lifnr-ktokk.
<fs_item>-zz_ktokk_text = ls_lifnr-txt30.
ENDIF.
*成本中心
IF NOT <fs_item>-kostl IS INITIAL.
READ TABLE lt_kostl INTO ls_kostl
WITH KEY kostl = <fs_item>-kostl BINARY SEARCH.
IF sy-subrc = 0.
<fs_item>-zz_kostl_text = ls_kostl-ktext.
ENDIF.
ENDIF.
"*@TO-DO 待確認 總賬行專案是否需要客戶/供應商,
*"以及原<FS_ITEM>-kunnr, <fs_item>-lifnr是否有值, 若沒有值,則 get_gkont
CALL FUNCTION ‘GET_GKONT’
EXPORTING
belnr = <fs_item>-belnr
bukrs = <fs_item>-bukrs
buzei = <fs_item>-buzei
gjahr = <fs_item>-gjahr
gknkz = ‘3’
IMPORTING
gkont = lv_gkont
koart = lv_koart
-
GHKON = EXCEPTIONS belnr_not_found = 1 buzei_not_found = 2 gknkz_not_found = 3 OTHERS = 4. IF sy-subrc <> 0.
-
Implement suitable error handling here
ELSE.
IF lv_koart EQ ‘D’ AND <fs_item>-kunnr IS INITIAL. " Customer
<fs_item>-gkont = lv_gkont.
<fs_item>-gkart = lv_koart.
<fs_item>-kunnr = lv_gkont.
me->get_customer_name(
EXPORTING
i_kunnr = <fs_item>-kunnr
IMPORTING
e_name1 = <fs_item>-zz_kunnr_text
e_ktokd = <fs_item>-zz_ktokd
e_ktokd_text = <fs_item>-zz_ktokd_text ).
ENDIF.IF lv_koart EQ 'K' AND <fs_item>-kunnr IS INITIAL. " Vendor <fs_item>-gkont = lv_gkont. <fs_item>-gkart = lv_koart. <fs_item>-lifnr = lv_gkont. me->get_vendor_name( EXPORTING i_lifnr = <fs_item>-lifnr IMPORTING e_name1 = <fs_item>-zz_lifnr_text e_ktokk = <fs_item>-zz_ktokk e_ktokk_text = <fs_item>-zz_ktokk_text ). ENDIF. ENDIF.
*" 銷售合同 ZTABLE
CLEAR: lv_gkont, lv_koart.
ENDLOOP.
UNASSIGN <fs_item>.
FREE:
lt_hkont_temp,
lt_hkont ,
lt_prctr_temp,
lt_prctr ,
lt_aufnr_temp,
lt_aufnr ,
lt_kunnr_temp,
lt_kunnr ,
lt_lifnr_temp,
lt_lifnr .
-
LT_SALES_CONTR_TEMP,
-
ENDMETHOD.LT_SALES_CONTR .