type-POOLs
:slis
.
TABLES :bkpf ,bseg ,faglflext .
DATA : BEGIN OF get_tab_result OCCURS 0 ,
bukrs like bseg -bukrs , "公司代码
hkont LIKE bseg -hkont , "总账科目
txt20 LIKE skat -txt20 , "总账科目文本
kunnr LIKE bseg -kunnr , "客户编号
lifnr LIKE bseg -lifnr , "供应商编号
matnr LIKE bseg -matnr , "物料
anln1 LIKE bseg -anln1 , "资产
kostl LIKE bseg -kostl , "成本中心
name1 TYPE c LENGTH 100 , "对应的项目文本
dmbtr LIKE bseg -dmbtr , "金额
dmbtr1 LIKE bseg -dmbtr ,
dmbtr2 LIKE bseg -dmbtr ,
dmbtr3 LIKE bseg -dmbtr ,
dmbtr4 LIKE bseg -dmbtr ,
dmbtr5 LIKE bseg -dmbtr ,
dmbtr6 LIKE bseg -dmbtr ,
dmbtr7 LIKE bseg -dmbtr ,
END OF get_tab_result .
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE tt1 .
SELECT-OPTIONS :s_bukrs FOR bkpf -bukrs no -EXTENSION no INTERVALS OBLIGATORY ,
s_gjahr FOR bkpf -gjahr NO -EXTENSION NO INTERVALS OBLIGATORY ,
s_rpmax FOR faglflext -rpmax no -EXTENSION OBLIGATORY ,
s_hkont FOR bseg -hkont .
SELECTION-SCREEN END OF BLOCK blk1 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hkont -low .
PERFORM frm_onf4_hkont USING 'S_HKONT-LOW' .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hkont -high .
PERFORM frm_onf4_hkont USING 'S_HKONT-HIGH' .
AT SELECTION-SCREEN .
PERFORM frm_auth_check .
START-OF-SELECTION .
*获取数据
PERFORM frm_get_data .
end-OF-SELECTION .
PERFORM frm_output_data .
*&---------------------------------------------------------------------*
*& Form FRM_ONF4_HKONT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0150 text
*----------------------------------------------------------------------*
FORM FRM_ONF4_HKONT USING p_field .
TYPES : BEGIN OF ty_skat ,
saknr TYPE skat -saknr ,
txt20 TYPE skat -txt20 ,
END OF ty_skat .
DATA :lt_skat TYPE TABLE OF ty_skat WITH HEADER LINE .
SELECT
saknr
txt20
FROM skat
INTO TABLE lt_skat
WHERE spras = sy -langu AND ktopl = '1000' .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'SAKNR'
* PVALKEY = ' '
DYNPPROG = SY -REPID
DYNPROFIELD = P_FIELD
DYNPNR = SY -DYNNR
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
CALLBACK_PROGRAM = SY -REPID
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
VALUE_TAB = lt_skat[]
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY -SUBRC <> 0 .
* Implement suitable error handling here
ENDIF .
ENDFORM . " FRM_ONF4_HKONT
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
DATA : BEGIN OF L_T_BSEG OCCURS 0 ,
BUKRS LIKE BSEG -BUKRS , "公司号
BELNR LIKE BSEG -BELNR , "凭证号
GJAHR LIKE BSEG -GJAHR , "年度
BUZEI LIKE BSEG -BUZEI , "行项目
SHKZG LIKE BSEG -SHKZG , "借贷
HKONT LIKE BSEG -HKONT , "总账
KUNNR LIKE BSEG -KUNNR , "客户
LIFNR LIKE BSEG -LIFNR , "供应商
MATNR LIKE BSEG -MATNR , "物料
ANLN1 LIKE bseg -ANLN1 , "成本中心
KOSTL LIKE BSEG -KOSTL ,
DMBTR LIKE BSEG -DMBTR ,
BUDAT LIKE BKPF -BUDAT ,
XNEGP LIKE BSEG -XNEGP , "标识:反记账
XREVERSAL LIKE BKPF -XREVERSAL , "指定是否凭证被冲销或已被冲销
STGRD LIKE BKPF -STGRD , "冲销原因
EBELN LIKE BSEG -EBELN , "采购凭证号
END OF L_T_BSEG .
TYPES : BEGIN OF L_S_BKPF ,
BUKRS LIKE BKPF -BUKRS ,
BELNR LIKE BKPF -BELNR ,
GJAHR LIKE BKPF -GJAHR ,
BUDAT LIKE BKPF -BUDAT ,
STGRD LIKE BKPF -STGRD ,
XREVERSAL LIKE BKPF -XREVERSAL ,
END OF L_S_BKPF .
DATA L_T_BKPF TYPE HASHED TABLE OF L_S_BKPF WITH UNIQUE KEY BUKRS BELNR GJAHR WITH HEADER LINE .
SELECT
BUKRS
BELNR
GJAHR
BUZEI
SHKZG
HKONT
KUNNR
LIFNR
MATNR
ANLN1
KOSTL
dmbtr
XNEGP
EBELN
INTO CORRESPONDING FIELDS OF TABLE L_T_BSEG
FROM BSEG
WHERE BUKRS IN S_BUKRS
AND GJAHR IN S_GJAHR
AND hkont IN s_hkont .
IF L_T_BSEG[] IS NOT INITIAL .
SELECT
BUKRS
BELNR
GJAHR
BUDAT
STGRD
XREVERSAL
INTO CORRESPONDING FIELDS OF TABLE L_T_BKPF
FROM BKPF
FOR ALL ENTRIES IN L_T_BSEG
WHERE bukrs = L_T_BSEG -BUKRS
AND BELNR = L_T_BSEG -BELNR
AND GJAHR = L_T_BSEG -GJAHR .
ENDIF .
LOOP AT L_T_BSEG .
READ TABLE L_T_Bkpf WITH TABLE KEY BUKRS = L_T_BSEG -BUKRS
BELNR = L_T_BSEG -BELNR
GJAHR = L_T_BSEG -GJAHR .
IF SY -SUBRC = 0 .
L_T_BSEG -BUDAT = L_T_BKPF -BUDAT .
L_T_BSEG -XREVERSAL = L_T_BKPF -XREVERSAL .
L_T_BSEG -STGRD = L_T_BKPF -STGRD .
MODIFY L_T_BSEG TRANSPORTING BUDAT XREVERSAL STGRD .
ELSE .
DELETE L_T_BSEG .
ENDIF .
ENDLOOP .
***************************************************处理反记账
LOOP AT L_T_BSEG WHERE HKONT BETWEEN '100100000' AND '100900000' AND XREVERSAL NE '' AND XNEGP = 'X' .
IF L_T_BSEG -SHKZG = 'H' .
L_T_BSEG -SHKZG = 'S' .
ELSEIF L_T_BSEG -SHKZG = 'S' .
L_T_BSEG -SHKZG = 'H' .
ENDIF .
L_T_BSEG -DMBTR = 0 - L_T_BSEG -dmbtr .
MODIFY L_T_BSEG TRANSPORTING SHKZG dmbtR .
ENDLOOP .
*处理同时出现的供应商编码和物料编码的情况
LOOP AT L_T_BSEG WHERE hkont BETWEEN 141 AND 147 .
CLEAR : L_T_BSEG -LIFNR , L_T_BSEG -KUNNR .
MODIFY L_T_BSEG TRANSPORTING lifnr KUNNR .
ENDLOOP .
LOOP AT L_T_BSEG WHERE HKONT EQ 222 .
SELECT SINGLE LIFNR INTO L_T_BSEG -lifnr FROM EKKO WHERE EBELN = L_T_BSEG -EBELN .
IF SY -SUBRC = 0 .
MODIFY L_T_BSEG TRANSPORTING LIFNR .
ENDIF .
ENDLOOP .
DATA :L_F_DATE TYPE SY -DATUM ,
L_T_DATE TYPE SY -DATUM .
DATA :L_MONTH ( 3 ) TYPE C .
L_MONTH = s_rpmax -LOW .
SHIFT L_MONTH LEFT DELETING LEADING '0' .
IF L_MONTH < 10 .
CONCATENATE '0' L_MONTH INTO L_MONTH .
ENDIF .
CONCATENATE S_GJAHR -LOW L_MONTH '01' INTO L_F_DATE .
CLEAR L_MONTH .
L_MONTH = s_rpmax -HIGH .
IF L_MONTH EQ '000' .
L_MONTH = s_rpmax -LOW .
ENDIF .
SHIFT L_MONTH LEFT DELETING LEADING '0' .
IF L_MONTH < 10 .
CONCATENATE '0' L_MONTH INTO L_MONTH .
ENDIF .
CONCATENATE S_GJAHR -LOW L_MONTH '01' INTO L_T_DATE .
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = L_T_DATE
I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
* I_MONTHS = 0
* I_DAYS = 0
I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = L_T_DATE
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
DATA L_T_BSEG_BEG LIKE TABLE OF L_T_BSEG WITH HEADER LINE .
DATA L_T_BSEG_END LIKE TABLE OF L_T_BSEG WITH HEADER LINE .
APPEND LINES OF L_T_BSEG TO L_T_BSEG_BEG .
APPEND LINES OF L_T_BSEG TO L_T_BSEG_END .
DELETE L_T_BSEG WHERE BUDAT > L_T_DATE .
DELETE L_T_BSEG WHERE BUDAT < L_F_DATE .
DELETE L_T_BSEG WHERE BUDAT >= L_F_DATE .
DELETE L_T_BSEG WHERE BUDAT > L_T_DATE .
LOOP AT L_T_BSEG .
get_tab_result -BUKRS = L_T_BSEG -BUKRS .
get_tab_result -HKONT = L_T_BSEG -HKONT .
get_tab_result -KUNNR = L_T_BSEG -KUNNR .
get_tab_result -LIFNR = L_T_BSEG -LIFNR .
get_tab_result -MATNR = L_T_BSEG -MATNR .
get_tab_result -ANLN1 = L_T_BSEG -ANLN1 .
get_tab_result -KOSTL = L_T_BSEG -KOSTL .
IF L_T_BSEG -SHKZG = 'H' .
get_tab_result -dmbtr3 = L_T_BSEG -dmbtr .
get_tab_result -dmbtr5 = L_T_BSEG -dmbtr .
ELSE .
get_tab_result -dmbtr2 = L_T_BSEG -dmbtr .
get_tab_result -dmbtr4 = L_T_BSEG -dmbtr .
ENDIF .
COLLECT get_tab_result .
CLEAR get_tab_result .
ENDLOOP .
LOOP AT L_T_BSEG_BEG .
get_tab_result -bukrs = L_T_BSEG_BEG -bukrs .
get_tab_result -HKONT = L_T_BSEG_BEG -HKONT .
get_tab_result -KUNNR = L_T_BSEG_BEG -KUNNR .
get_tab_result -LIFNR = L_T_BSEG_BEG -LIFNR .
get_tab_result -MATNR = L_T_BSEG_BEG -MATNR .
get_tab_result -ANLN1 = L_T_BSEG_BEG -ANLN1 .
get_tab_result -KOSTL = L_T_BSEG_BEG -KOSTL .
IF L_T_BSEG_BEG -SHKZG = 'H' .
get_tab_result -dmbtr1 = L_T_BSEG_BEG -dmbtr .
ELSE .
get_tab_result -dmbtr = L_T_BSEG_BEG -dmbtr .
ENDIF .
COLLECT get_tab_result .
CLEAR get_tab_result .
ENDLOOP .
LOOP AT L_T_BSEG_END .
get_tab_result -BUKRS = L_T_BSEG_END -BUKRS .
get_tab_result -HKONT = L_T_BSEG_END -HKONT .
get_tab_result -KUNNR = L_T_BSEG_END -KUNNR .
get_tab_result -LIFNR = L_T_BSEG_END -LIFNR .
get_tab_result -MATNR = L_T_BSEG_END -MATNR .
get_tab_result -ANLN1 = L_T_BSEG_END -ANLN1 .
get_tab_result -KOSTL = L_T_BSEG_END -KOSTL .
IF L_T_BSEG_END -SHKZG = 'H' .
get_tab_result -dmbtr7 = L_T_BSEG_END -dmbtr .
ELSE .
get_tab_result -dmbtr6 = L_T_BSEG_END -dmbtr .
ENDIF .
COLLECT get_tab_result .
CLEAR get_tab_result .
ENDLOOP .
LOOP AT get_tab_result .
IF get_tab_result -KUNNR IS NOT INITIAL .
SELECT SINGLE NAME1 INTO get_tab_result -NAME1 FROM KNA1 WHERE kunnr = get_tab_result -KUNNR .
ENDIF .
IF get_tab_result -LIFNR IS NOT INITIAL .
SELECT SINGLE NAME1 INTO get_tab_result -NAME1 FROM LFA1 WHERE LIFNR = get_tab_result -LIFNR .
ENDIF .
IF get_tab_result -matnr IS NOT INITIAL .
SELECT SINGLE MAKTX INTO get_tab_result -NAME1 FROM MAKT WHERE MATNR = get_tab_result -MATNR .
ENDIF .
IF get_tab_result -ANLN1 IS NOT INITIAL .
SELECT SINGLE ANLHTXT INTO get_tab_result -NAME1 FROM ANLH WHERE ANLN1 = get_tab_result -ANLN1 .
ENDIF .
IF get_tab_result -KOSTL IS NOT INITIAL .
SELECT SINGLE KTEXT INTO get_tab_result -NAME1 FROM CSKT WHERE spras = '1'
AND KOSTL = get_tab_result -KOSTL .
ENDIF .
SELECT SINGLE TXT20 INTO get_tab_result -TXT20 FROM skat WHERE spras = '1'
AND saknr = get_tab_result -HKONT .
IF get_tab_result -dmbtr - get_tab_result -dmbtr1 >= 0 .
get_tab_result -dmbtr = get_tab_result -dmbtr - get_tab_result -dmbtr1 .
get_tab_result -dmbtr1 = 0 .
ELSE .
get_tab_result -dmbtr1 = get_tab_result -dmbtr1 - get_tab_result -dmbtr .
get_tab_result -dmbtr = 0 .
ENDIF .
IF get_tab_result -dmbtr6 - get_tab_result -dmbtr7 >= 0 .
get_tab_result -dmbtr6 = get_tab_result -dmbtr6 - get_tab_result -dmbtr7 .
get_tab_result -dmbtr7 = 0 .
ELSE .
get_tab_result -dmbtr7 = get_tab_result -dmbtr7 - get_tab_result -dmbtr6 .
get_tab_result -dmbtr6 = 0 .
ENDIF .
IF get_tab_result -LIFNR <> '' .
get_tab_result -matnr = get_tab_result -LIFNR .
ELSEIF get_tab_result -kunnr <> '' .
get_tab_result -matnr = get_tab_result -KUNNR .
ELSEIF get_tab_result -ANLN1 <> '' .
get_tab_result -matnr = get_tab_result -anln1 .
ELSEIF get_tab_result -kostL <> '' .
get_tab_result -matnr = get_tab_result -kostl .
ENDIF .
MODIFY get_tab_result TRANSPORTING NAME1 TXT20 MATNR DMBTR DMBTR1 DMBTR6 DMBTR7 .
ENDLOOP .
SORT get_tab_result BY BUKRS HKONT MATNR .
ENDFORM . " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_AUTH_CHECK .
DATA LT_T001 LIKE TABLE OF T001 WITH HEADER LINE .
SELECT
bukrs
INTO CORRESPONDING FIELDS OF TABLE LT_T001
FROM T001
WHERE BUKRS IN S_BUKRS .
LOOP AT LT_T001 .
CALL FUNCTION 'ZZ_CHECK_REPAUTH'
EXPORTING
I_MODULE = 'FC'
I_BUKRS = LT_T001 -BUKRS
EXCEPTIONS
NO_AUTHORIZED = 1
NO_MODULE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
ENDIF .
ENDLOOP .
ENDFORM . " FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_OUTPUT_DATA .
DATA :PROGNAME LIKE SY -REPID ,
TITLE TYPE LVC_TITLE .
PROGNAME = SY -REPID .
TITLE = '总账科目余额辅助表' .
DATA :gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE ,
gs_layout TYPE slis_layout_alv ,
gt_sort TYPE slis_t_sortinfo_alv .
DATA :gt_events TYPE slis_t_event WITH HEADER LINE . "ALV事件
gs_layout -zebra = 'X' .
gs_layout -colwidth_optimize = 'X' .
gs_layout -detail_popup = 'X' .
gt_fieldcat -fieldname = 'BUKRS' .
gt_fieldcat -seltext_m = '公司代码' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'HKONT' .
gt_fieldcat -seltext_m = '总账科目' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'txt20' .
gt_fieldcat -seltext_m = '总账科目描述' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'MATNR' .
gt_fieldcat -seltext_m = '辅助核算编码' .
gt_fieldcat -no_zero = 'X' .
gt_fieldcat - hotspot = 'X' .
Append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'NAME1' .
gt_fieldcat -seltext_m = '辅助核算名称' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR' .
gt_fieldcat -seltext_m = '期初借方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR1' .
gt_fieldcat -seltext_m = '期初贷方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR2' .
gt_fieldcat -seltext_m = '本期借方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR3' .
gt_fieldcat -seltext_m = '本期贷方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR4' .
gt_fieldcat -seltext_m = '借方累计' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR5' .
gt_fieldcat -seltext_m = '贷方累计' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR6' .
gt_fieldcat -seltext_m = '期末借方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR7' .
gt_fieldcat -seltext_m = '期末贷方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = progname
* I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' "处理用户双击事件
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = TITLE
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = gt_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = GT_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = get_tab_result
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY -SUBRC <> 0 .
* Implement suitable error handling here
ENDIF .
ENDFORM . " FRM_OUTPUT_DATA
FORM FRM_USER_COMMAND USING r_ucomm LIKE sy -ucomm
rs_selfield TYPE slis_selfield .
rs_selfield -col_stable = 'X' .
rs_selfield -row_stable = 'X' .
rs_selfield - refresh = 'X' . "自动刷新
******参考标准报表QA33之后,发现只要这3行就可以实现自动刷新,并且返回时鼠标回到原来的位置
DATA :bdcdata_wa TYPE bdcdata ,
bdcdata_tab TYPE TABLE OF bdcdata .
DATA :opt TYPE ctu_params .
CASE r_ucomm .
WHEN '&IC1' .
READ TABLE get_tab_result INDEX rs_selfield -tabindex .
IF sy -subrc = 0 .
IF get_tab_result -hkont eq 222 .
CLEAR bdcdata_wa .
bdcdata_wa - program = 'FAGL_ACCOUNT_ITEMS_GL' .
bdcdata_wa - dYNPRO = '1000' .
bdcdata_wa -DYNBEGIN = 'X' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'BDC_CURSOR' .
bdcdata_wa -FVAL = 'SD_BUKRS-LOW' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'BDC_OKCODE' .
bdcdata_wa -FVAL = '=ONLI' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'SD_SAKNR-LOW' .
bdcdata_wa -FVAL = get_tab_result -HKONT .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'SD_BUKRS-LOW' .
bdcdata_wa -FVAL = get_tab_result -BUKRS .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'X_OPSEL' .
bdcdata_wa -FVAL = '' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'X_AISEL' .
bdcdata_wa -FVAL = 'X' .
APPEND bdcdata_wa TO bdcdata_TAB .
OPT -DISMODE = 'E' .
call TRANSACTION 'FAGLL03' USING bdcdata_tab OPTIONS FROM opt .
elseif get_tab_result -kunnr IS NOT INITIAL .
set PARAMETER ID 'KUN' FIELD get_tab_result -kunnr .
set PARAMETER ID 'BUK' FIELD get_tab_result -bukrs .
call TRANSACTION 'FD10N' AND SKIP FIRST SCREEN .
ELSEIF get_tab_result -lifnr IS NOT INITIAL .
SET PARAMETER ID 'LIF' FIELD get_tab_result -lifnr .
SET PARAMETER ID 'BUK' FIELD get_tab_result -BUKRS .
CALL TRANSACTION 'FK10N' AND SKIP FIRST SCREEN .
ELSEIF get_tab_result -matnr IS NOT INITIAL .
CLEAR bdcdata_wa .
bdcdata_wa - program = 'FAGL_ACCOUNT_ITEMS_GL' .
bdcdata_wa - dynpro = '1000' .
bdcdata_wa -dynbegin = 'X' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'BDC_CURSOR' .
bdcdata_wa -fval = 'SD_BUKRS-LOW' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'BDC_OKCODE' .
bdcdata_wa -fval = '=ONLI' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'SD_SAKNR-LOW' .
bdcdata_wa -fval = GET_TAB_RESULT -HKONT .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'SD_BUKRS-LOW' .
bdcdata_wa -fval = GET_TAB_RESULT -BUKRS .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'X_OPSEL' .
bdcdata_wa -fval = '' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'X_AISEL' .
bdcdata_wa -fval = 'X' .
APPEND bdcdata_wa TO bdcdata_tab .
opt -DISMODE = 'E' .
call TRANSACTION 'FAGLL03' USING bdcdata_tab OPTIONS FROM opt .
ELSE .
set PARAMETER ID 'SAK' FIELD get_tab_result -hkont .
set PARAMETER ID 'BUK' FIELD get_tab_result -bukrs .
call TRANSACTION 'FS10N' AND SKIP FIRST SCREEN .
ENDIF .
ENDIF .
ENDCASE .
ENDFORM .
TABLES :bkpf ,bseg ,faglflext .
DATA : BEGIN OF get_tab_result OCCURS 0 ,
bukrs like bseg -bukrs , "公司代码
hkont LIKE bseg -hkont , "总账科目
txt20 LIKE skat -txt20 , "总账科目文本
kunnr LIKE bseg -kunnr , "客户编号
lifnr LIKE bseg -lifnr , "供应商编号
matnr LIKE bseg -matnr , "物料
anln1 LIKE bseg -anln1 , "资产
kostl LIKE bseg -kostl , "成本中心
name1 TYPE c LENGTH 100 , "对应的项目文本
dmbtr LIKE bseg -dmbtr , "金额
dmbtr1 LIKE bseg -dmbtr ,
dmbtr2 LIKE bseg -dmbtr ,
dmbtr3 LIKE bseg -dmbtr ,
dmbtr4 LIKE bseg -dmbtr ,
dmbtr5 LIKE bseg -dmbtr ,
dmbtr6 LIKE bseg -dmbtr ,
dmbtr7 LIKE bseg -dmbtr ,
END OF get_tab_result .
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE tt1 .
SELECT-OPTIONS :s_bukrs FOR bkpf -bukrs no -EXTENSION no INTERVALS OBLIGATORY ,
s_gjahr FOR bkpf -gjahr NO -EXTENSION NO INTERVALS OBLIGATORY ,
s_rpmax FOR faglflext -rpmax no -EXTENSION OBLIGATORY ,
s_hkont FOR bseg -hkont .
SELECTION-SCREEN END OF BLOCK blk1 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hkont -low .
PERFORM frm_onf4_hkont USING 'S_HKONT-LOW' .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hkont -high .
PERFORM frm_onf4_hkont USING 'S_HKONT-HIGH' .
AT SELECTION-SCREEN .
PERFORM frm_auth_check .
START-OF-SELECTION .
*获取数据
PERFORM frm_get_data .
end-OF-SELECTION .
PERFORM frm_output_data .
*&---------------------------------------------------------------------*
*& Form FRM_ONF4_HKONT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0150 text
*----------------------------------------------------------------------*
FORM FRM_ONF4_HKONT USING p_field .
TYPES : BEGIN OF ty_skat ,
saknr TYPE skat -saknr ,
txt20 TYPE skat -txt20 ,
END OF ty_skat .
DATA :lt_skat TYPE TABLE OF ty_skat WITH HEADER LINE .
SELECT
saknr
txt20
FROM skat
INTO TABLE lt_skat
WHERE spras = sy -langu AND ktopl = '1000' .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'SAKNR'
* PVALKEY = ' '
DYNPPROG = SY -REPID
DYNPROFIELD = P_FIELD
DYNPNR = SY -DYNNR
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
CALLBACK_PROGRAM = SY -REPID
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
VALUE_TAB = lt_skat[]
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY -SUBRC <> 0 .
* Implement suitable error handling here
ENDIF .
ENDFORM . " FRM_ONF4_HKONT
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
DATA : BEGIN OF L_T_BSEG OCCURS 0 ,
BUKRS LIKE BSEG -BUKRS , "公司号
BELNR LIKE BSEG -BELNR , "凭证号
GJAHR LIKE BSEG -GJAHR , "年度
BUZEI LIKE BSEG -BUZEI , "行项目
SHKZG LIKE BSEG -SHKZG , "借贷
HKONT LIKE BSEG -HKONT , "总账
KUNNR LIKE BSEG -KUNNR , "客户
LIFNR LIKE BSEG -LIFNR , "供应商
MATNR LIKE BSEG -MATNR , "物料
ANLN1 LIKE bseg -ANLN1 , "成本中心
KOSTL LIKE BSEG -KOSTL ,
DMBTR LIKE BSEG -DMBTR ,
BUDAT LIKE BKPF -BUDAT ,
XNEGP LIKE BSEG -XNEGP , "标识:反记账
XREVERSAL LIKE BKPF -XREVERSAL , "指定是否凭证被冲销或已被冲销
STGRD LIKE BKPF -STGRD , "冲销原因
EBELN LIKE BSEG -EBELN , "采购凭证号
END OF L_T_BSEG .
TYPES : BEGIN OF L_S_BKPF ,
BUKRS LIKE BKPF -BUKRS ,
BELNR LIKE BKPF -BELNR ,
GJAHR LIKE BKPF -GJAHR ,
BUDAT LIKE BKPF -BUDAT ,
STGRD LIKE BKPF -STGRD ,
XREVERSAL LIKE BKPF -XREVERSAL ,
END OF L_S_BKPF .
DATA L_T_BKPF TYPE HASHED TABLE OF L_S_BKPF WITH UNIQUE KEY BUKRS BELNR GJAHR WITH HEADER LINE .
SELECT
BUKRS
BELNR
GJAHR
BUZEI
SHKZG
HKONT
KUNNR
LIFNR
MATNR
ANLN1
KOSTL
dmbtr
XNEGP
EBELN
INTO CORRESPONDING FIELDS OF TABLE L_T_BSEG
FROM BSEG
WHERE BUKRS IN S_BUKRS
AND GJAHR IN S_GJAHR
AND hkont IN s_hkont .
IF L_T_BSEG[] IS NOT INITIAL .
SELECT
BUKRS
BELNR
GJAHR
BUDAT
STGRD
XREVERSAL
INTO CORRESPONDING FIELDS OF TABLE L_T_BKPF
FROM BKPF
FOR ALL ENTRIES IN L_T_BSEG
WHERE bukrs = L_T_BSEG -BUKRS
AND BELNR = L_T_BSEG -BELNR
AND GJAHR = L_T_BSEG -GJAHR .
ENDIF .
LOOP AT L_T_BSEG .
READ TABLE L_T_Bkpf WITH TABLE KEY BUKRS = L_T_BSEG -BUKRS
BELNR = L_T_BSEG -BELNR
GJAHR = L_T_BSEG -GJAHR .
IF SY -SUBRC = 0 .
L_T_BSEG -BUDAT = L_T_BKPF -BUDAT .
L_T_BSEG -XREVERSAL = L_T_BKPF -XREVERSAL .
L_T_BSEG -STGRD = L_T_BKPF -STGRD .
MODIFY L_T_BSEG TRANSPORTING BUDAT XREVERSAL STGRD .
ELSE .
DELETE L_T_BSEG .
ENDIF .
ENDLOOP .
***************************************************处理反记账
LOOP AT L_T_BSEG WHERE HKONT BETWEEN '100100000' AND '100900000' AND XREVERSAL NE '' AND XNEGP = 'X' .
IF L_T_BSEG -SHKZG = 'H' .
L_T_BSEG -SHKZG = 'S' .
ELSEIF L_T_BSEG -SHKZG = 'S' .
L_T_BSEG -SHKZG = 'H' .
ENDIF .
L_T_BSEG -DMBTR = 0 - L_T_BSEG -dmbtr .
MODIFY L_T_BSEG TRANSPORTING SHKZG dmbtR .
ENDLOOP .
*处理同时出现的供应商编码和物料编码的情况
LOOP AT L_T_BSEG WHERE hkont BETWEEN 141 AND 147 .
CLEAR : L_T_BSEG -LIFNR , L_T_BSEG -KUNNR .
MODIFY L_T_BSEG TRANSPORTING lifnr KUNNR .
ENDLOOP .
LOOP AT L_T_BSEG WHERE HKONT EQ 222 .
SELECT SINGLE LIFNR INTO L_T_BSEG -lifnr FROM EKKO WHERE EBELN = L_T_BSEG -EBELN .
IF SY -SUBRC = 0 .
MODIFY L_T_BSEG TRANSPORTING LIFNR .
ENDIF .
ENDLOOP .
DATA :L_F_DATE TYPE SY -DATUM ,
L_T_DATE TYPE SY -DATUM .
DATA :L_MONTH ( 3 ) TYPE C .
L_MONTH = s_rpmax -LOW .
SHIFT L_MONTH LEFT DELETING LEADING '0' .
IF L_MONTH < 10 .
CONCATENATE '0' L_MONTH INTO L_MONTH .
ENDIF .
CONCATENATE S_GJAHR -LOW L_MONTH '01' INTO L_F_DATE .
CLEAR L_MONTH .
L_MONTH = s_rpmax -HIGH .
IF L_MONTH EQ '000' .
L_MONTH = s_rpmax -LOW .
ENDIF .
SHIFT L_MONTH LEFT DELETING LEADING '0' .
IF L_MONTH < 10 .
CONCATENATE '0' L_MONTH INTO L_MONTH .
ENDIF .
CONCATENATE S_GJAHR -LOW L_MONTH '01' INTO L_T_DATE .
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = L_T_DATE
I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
* I_MONTHS = 0
* I_DAYS = 0
I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = L_T_DATE
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
DATA L_T_BSEG_BEG LIKE TABLE OF L_T_BSEG WITH HEADER LINE .
DATA L_T_BSEG_END LIKE TABLE OF L_T_BSEG WITH HEADER LINE .
APPEND LINES OF L_T_BSEG TO L_T_BSEG_BEG .
APPEND LINES OF L_T_BSEG TO L_T_BSEG_END .
DELETE L_T_BSEG WHERE BUDAT > L_T_DATE .
DELETE L_T_BSEG WHERE BUDAT < L_F_DATE .
DELETE L_T_BSEG WHERE BUDAT >= L_F_DATE .
DELETE L_T_BSEG WHERE BUDAT > L_T_DATE .
LOOP AT L_T_BSEG .
get_tab_result -BUKRS = L_T_BSEG -BUKRS .
get_tab_result -HKONT = L_T_BSEG -HKONT .
get_tab_result -KUNNR = L_T_BSEG -KUNNR .
get_tab_result -LIFNR = L_T_BSEG -LIFNR .
get_tab_result -MATNR = L_T_BSEG -MATNR .
get_tab_result -ANLN1 = L_T_BSEG -ANLN1 .
get_tab_result -KOSTL = L_T_BSEG -KOSTL .
IF L_T_BSEG -SHKZG = 'H' .
get_tab_result -dmbtr3 = L_T_BSEG -dmbtr .
get_tab_result -dmbtr5 = L_T_BSEG -dmbtr .
ELSE .
get_tab_result -dmbtr2 = L_T_BSEG -dmbtr .
get_tab_result -dmbtr4 = L_T_BSEG -dmbtr .
ENDIF .
COLLECT get_tab_result .
CLEAR get_tab_result .
ENDLOOP .
LOOP AT L_T_BSEG_BEG .
get_tab_result -bukrs = L_T_BSEG_BEG -bukrs .
get_tab_result -HKONT = L_T_BSEG_BEG -HKONT .
get_tab_result -KUNNR = L_T_BSEG_BEG -KUNNR .
get_tab_result -LIFNR = L_T_BSEG_BEG -LIFNR .
get_tab_result -MATNR = L_T_BSEG_BEG -MATNR .
get_tab_result -ANLN1 = L_T_BSEG_BEG -ANLN1 .
get_tab_result -KOSTL = L_T_BSEG_BEG -KOSTL .
IF L_T_BSEG_BEG -SHKZG = 'H' .
get_tab_result -dmbtr1 = L_T_BSEG_BEG -dmbtr .
ELSE .
get_tab_result -dmbtr = L_T_BSEG_BEG -dmbtr .
ENDIF .
COLLECT get_tab_result .
CLEAR get_tab_result .
ENDLOOP .
LOOP AT L_T_BSEG_END .
get_tab_result -BUKRS = L_T_BSEG_END -BUKRS .
get_tab_result -HKONT = L_T_BSEG_END -HKONT .
get_tab_result -KUNNR = L_T_BSEG_END -KUNNR .
get_tab_result -LIFNR = L_T_BSEG_END -LIFNR .
get_tab_result -MATNR = L_T_BSEG_END -MATNR .
get_tab_result -ANLN1 = L_T_BSEG_END -ANLN1 .
get_tab_result -KOSTL = L_T_BSEG_END -KOSTL .
IF L_T_BSEG_END -SHKZG = 'H' .
get_tab_result -dmbtr7 = L_T_BSEG_END -dmbtr .
ELSE .
get_tab_result -dmbtr6 = L_T_BSEG_END -dmbtr .
ENDIF .
COLLECT get_tab_result .
CLEAR get_tab_result .
ENDLOOP .
LOOP AT get_tab_result .
IF get_tab_result -KUNNR IS NOT INITIAL .
SELECT SINGLE NAME1 INTO get_tab_result -NAME1 FROM KNA1 WHERE kunnr = get_tab_result -KUNNR .
ENDIF .
IF get_tab_result -LIFNR IS NOT INITIAL .
SELECT SINGLE NAME1 INTO get_tab_result -NAME1 FROM LFA1 WHERE LIFNR = get_tab_result -LIFNR .
ENDIF .
IF get_tab_result -matnr IS NOT INITIAL .
SELECT SINGLE MAKTX INTO get_tab_result -NAME1 FROM MAKT WHERE MATNR = get_tab_result -MATNR .
ENDIF .
IF get_tab_result -ANLN1 IS NOT INITIAL .
SELECT SINGLE ANLHTXT INTO get_tab_result -NAME1 FROM ANLH WHERE ANLN1 = get_tab_result -ANLN1 .
ENDIF .
IF get_tab_result -KOSTL IS NOT INITIAL .
SELECT SINGLE KTEXT INTO get_tab_result -NAME1 FROM CSKT WHERE spras = '1'
AND KOSTL = get_tab_result -KOSTL .
ENDIF .
SELECT SINGLE TXT20 INTO get_tab_result -TXT20 FROM skat WHERE spras = '1'
AND saknr = get_tab_result -HKONT .
IF get_tab_result -dmbtr - get_tab_result -dmbtr1 >= 0 .
get_tab_result -dmbtr = get_tab_result -dmbtr - get_tab_result -dmbtr1 .
get_tab_result -dmbtr1 = 0 .
ELSE .
get_tab_result -dmbtr1 = get_tab_result -dmbtr1 - get_tab_result -dmbtr .
get_tab_result -dmbtr = 0 .
ENDIF .
IF get_tab_result -dmbtr6 - get_tab_result -dmbtr7 >= 0 .
get_tab_result -dmbtr6 = get_tab_result -dmbtr6 - get_tab_result -dmbtr7 .
get_tab_result -dmbtr7 = 0 .
ELSE .
get_tab_result -dmbtr7 = get_tab_result -dmbtr7 - get_tab_result -dmbtr6 .
get_tab_result -dmbtr6 = 0 .
ENDIF .
IF get_tab_result -LIFNR <> '' .
get_tab_result -matnr = get_tab_result -LIFNR .
ELSEIF get_tab_result -kunnr <> '' .
get_tab_result -matnr = get_tab_result -KUNNR .
ELSEIF get_tab_result -ANLN1 <> '' .
get_tab_result -matnr = get_tab_result -anln1 .
ELSEIF get_tab_result -kostL <> '' .
get_tab_result -matnr = get_tab_result -kostl .
ENDIF .
MODIFY get_tab_result TRANSPORTING NAME1 TXT20 MATNR DMBTR DMBTR1 DMBTR6 DMBTR7 .
ENDLOOP .
SORT get_tab_result BY BUKRS HKONT MATNR .
ENDFORM . " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_AUTH_CHECK .
DATA LT_T001 LIKE TABLE OF T001 WITH HEADER LINE .
SELECT
bukrs
INTO CORRESPONDING FIELDS OF TABLE LT_T001
FROM T001
WHERE BUKRS IN S_BUKRS .
LOOP AT LT_T001 .
CALL FUNCTION 'ZZ_CHECK_REPAUTH'
EXPORTING
I_MODULE = 'FC'
I_BUKRS = LT_T001 -BUKRS
EXCEPTIONS
NO_AUTHORIZED = 1
NO_MODULE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
ENDIF .
ENDLOOP .
ENDFORM . " FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_OUTPUT_DATA .
DATA :PROGNAME LIKE SY -REPID ,
TITLE TYPE LVC_TITLE .
PROGNAME = SY -REPID .
TITLE = '总账科目余额辅助表' .
DATA :gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE ,
gs_layout TYPE slis_layout_alv ,
gt_sort TYPE slis_t_sortinfo_alv .
DATA :gt_events TYPE slis_t_event WITH HEADER LINE . "ALV事件
gs_layout -zebra = 'X' .
gs_layout -colwidth_optimize = 'X' .
gs_layout -detail_popup = 'X' .
gt_fieldcat -fieldname = 'BUKRS' .
gt_fieldcat -seltext_m = '公司代码' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'HKONT' .
gt_fieldcat -seltext_m = '总账科目' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'txt20' .
gt_fieldcat -seltext_m = '总账科目描述' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'MATNR' .
gt_fieldcat -seltext_m = '辅助核算编码' .
gt_fieldcat -no_zero = 'X' .
gt_fieldcat - hotspot = 'X' .
Append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'NAME1' .
gt_fieldcat -seltext_m = '辅助核算名称' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR' .
gt_fieldcat -seltext_m = '期初借方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR1' .
gt_fieldcat -seltext_m = '期初贷方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR2' .
gt_fieldcat -seltext_m = '本期借方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR3' .
gt_fieldcat -seltext_m = '本期贷方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR4' .
gt_fieldcat -seltext_m = '借方累计' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR5' .
gt_fieldcat -seltext_m = '贷方累计' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR6' .
gt_fieldcat -seltext_m = '期末借方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
gt_fieldcat -fieldname = 'DMBTR7' .
gt_fieldcat -seltext_m = '期末贷方' .
gt_fieldcat -no_zero = 'X' .
append gt_fieldcat .
CLEAR gt_fieldcat .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = progname
* I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' "处理用户双击事件
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = TITLE
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = gt_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = GT_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = get_tab_result
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY -SUBRC <> 0 .
* Implement suitable error handling here
ENDIF .
ENDFORM . " FRM_OUTPUT_DATA
FORM FRM_USER_COMMAND USING r_ucomm LIKE sy -ucomm
rs_selfield TYPE slis_selfield .
rs_selfield -col_stable = 'X' .
rs_selfield -row_stable = 'X' .
rs_selfield - refresh = 'X' . "自动刷新
******参考标准报表QA33之后,发现只要这3行就可以实现自动刷新,并且返回时鼠标回到原来的位置
DATA :bdcdata_wa TYPE bdcdata ,
bdcdata_tab TYPE TABLE OF bdcdata .
DATA :opt TYPE ctu_params .
CASE r_ucomm .
WHEN '&IC1' .
READ TABLE get_tab_result INDEX rs_selfield -tabindex .
IF sy -subrc = 0 .
IF get_tab_result -hkont eq 222 .
CLEAR bdcdata_wa .
bdcdata_wa - program = 'FAGL_ACCOUNT_ITEMS_GL' .
bdcdata_wa - dYNPRO = '1000' .
bdcdata_wa -DYNBEGIN = 'X' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'BDC_CURSOR' .
bdcdata_wa -FVAL = 'SD_BUKRS-LOW' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'BDC_OKCODE' .
bdcdata_wa -FVAL = '=ONLI' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'SD_SAKNR-LOW' .
bdcdata_wa -FVAL = get_tab_result -HKONT .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'SD_BUKRS-LOW' .
bdcdata_wa -FVAL = get_tab_result -BUKRS .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'X_OPSEL' .
bdcdata_wa -FVAL = '' .
APPEND bdcdata_wa TO bdcdata_TAB .
CLEAR bdcdata_wa .
bdcdata_wa -FNAM = 'X_AISEL' .
bdcdata_wa -FVAL = 'X' .
APPEND bdcdata_wa TO bdcdata_TAB .
OPT -DISMODE = 'E' .
call TRANSACTION 'FAGLL03' USING bdcdata_tab OPTIONS FROM opt .
elseif get_tab_result -kunnr IS NOT INITIAL .
set PARAMETER ID 'KUN' FIELD get_tab_result -kunnr .
set PARAMETER ID 'BUK' FIELD get_tab_result -bukrs .
call TRANSACTION 'FD10N' AND SKIP FIRST SCREEN .
ELSEIF get_tab_result -lifnr IS NOT INITIAL .
SET PARAMETER ID 'LIF' FIELD get_tab_result -lifnr .
SET PARAMETER ID 'BUK' FIELD get_tab_result -BUKRS .
CALL TRANSACTION 'FK10N' AND SKIP FIRST SCREEN .
ELSEIF get_tab_result -matnr IS NOT INITIAL .
CLEAR bdcdata_wa .
bdcdata_wa - program = 'FAGL_ACCOUNT_ITEMS_GL' .
bdcdata_wa - dynpro = '1000' .
bdcdata_wa -dynbegin = 'X' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'BDC_CURSOR' .
bdcdata_wa -fval = 'SD_BUKRS-LOW' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'BDC_OKCODE' .
bdcdata_wa -fval = '=ONLI' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'SD_SAKNR-LOW' .
bdcdata_wa -fval = GET_TAB_RESULT -HKONT .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'SD_BUKRS-LOW' .
bdcdata_wa -fval = GET_TAB_RESULT -BUKRS .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'X_OPSEL' .
bdcdata_wa -fval = '' .
APPEND bdcdata_wa TO bdcdata_tab .
CLEAR bdcdata_wa .
bdcdata_wa -fnam = 'X_AISEL' .
bdcdata_wa -fval = 'X' .
APPEND bdcdata_wa TO bdcdata_tab .
opt -DISMODE = 'E' .
call TRANSACTION 'FAGLL03' USING bdcdata_tab OPTIONS FROM opt .
ELSE .
set PARAMETER ID 'SAK' FIELD get_tab_result -hkont .
set PARAMETER ID 'BUK' FIELD get_tab_result -bukrs .
call TRANSACTION 'FS10N' AND SKIP FIRST SCREEN .
ENDIF .
ENDIF .
ENDCASE .
ENDFORM .