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.