您的位置:首页 > 其它

从会计凭证中取日余额-日报

2009-03-06 16:24 281 查看
FUNCTION zfi_hkont_get_day_glt0_i.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(BUKRS) LIKE GLT0-BUKRS DEFAULT 'S001'
*" VALUE(DATUM) LIKE SY-DATUM DEFAULT SY-DATUM
*" VALUE(HKONT_RANGE) TYPE ZHKON_HKONT_RANGE_TAB
*" EXPORTING
*" VALUE(RET_CODE) LIKE SY-SUBRC
*" VALUE(RESULT_TAB) TYPE ZHKON_GLT0_I_FIELDS_TAB
*"----------------------------------------------------------------------
DATA: V_hkont LIKE bsis-hkont, "科目
V_waers LIKE bsis-waers, "币别
V_xnegp like bsis-xnegp, "反记帐
V_shkzg like bsis-xnegp, "借贷方
V_dmbtr LIKE bsis-dmbtr. "本月借方
DATA: BEGIN OF glto_curr_month, "当月数据结果
racct LIKE glt0-racct, "科目
rtcur LIKE glt0-rtcur, "币别
hsl_s LIKE glt0-hslvt, "本月借方
hsl_h LIKE glt0-hslvt, "本月贷方
END OF glto_curr_month.
DATA:
it_curr_month LIKE glto_curr_month OCCURS 0 WITH HEADER LINE,
tmp_curr_tab TYPE zhkon_glt0_i_fields_tab WITH HEADER LINE,
tmp_hkont_tab TYPE zhkon_glt0_i_fields_tab WITH HEADER LINE.

ret_code = 1.

DATA:
vs_gjahr LIKE bkpf-gjahr, "会计年度
vs_monat LIKE bkpf-monat, "会计期间
vd_budat_beg LIKE bkpf-budat.

vs_gjahr = datum+0(4).
vs_monat = datum+4(2).

* 从月度中取数据
CALL FUNCTION 'ZFI_HKONT_GET_MONAT_GLT0_I'
EXPORTING
BUKRS = bukrs
YEAR = vs_gjahr
MONAT = vs_monat
* YEAR_BEFORE = 0
* MONAT_BEFORE = 0
hkont_range = hkont_range[]
IMPORTING
ret_code = ret_code
result_tab = tmp_hkont_tab[].

* 修改当月发生数置 零。
LOOP AT tmp_hkont_tab WHERE ryear = vs_gjahr
AND monat = vs_monat .
tmp_hkont_tab-hsl_s_lj = tmp_hkont_tab-hsl_s_lj
- tmp_hkont_tab-hsl_s.
tmp_hkont_tab-hsl_h_lj = tmp_hkont_tab-hsl_h_lj
- tmp_hkont_tab-hsl_h.
tmp_hkont_tab-hsl_s = 0.
tmp_hkont_tab-hsl_h = 0.
tmp_hkont_tab-hsl_ye = tmp_hkont_tab-hsl_qc.
MODIFY tmp_hkont_tab.
ENDLOOP.

* vs_gjahr = DATUM+0(4).
* vs_monat = DATUM+4(2).
CONCATENATE datum+0(6) '01' INTO vd_budat_beg.

* SELECT b~hkont A~waers b~xnegp b~shkzg sum( b~dmbtr )
* INTO (V_hkont,v_waers,v_xnegp,v_shkzg, V_dmbtr )
* FROM bkpf AS A INNER JOIN bsis AS b
* ON A~bukrs = B~bukrs
* AND A~belnr = B~belnr
* AND A~gjahr = B~gjahr
* WHERE A~gjahr = vs_gjahr
* AND A~monat = vs_monat
* AND A~bukrs = bukrs
* AND A~budat >= vd_budat_beg
* AND A~budat <= datum
* AND b~hkont IN hkont_range "科目范围
* group by b~hkont A~waers b~xnegp b~shkzg.
*
SELECT hkont waers xnegp shkzg sum( dmbtr )
INTO (V_hkont,v_waers,v_xnegp,v_shkzg, V_dmbtr )
FROM bsis
WHERE gjahr = vs_gjahr
AND monat = vs_monat
AND bukrs = bukrs
AND budat >= vd_budat_beg
AND budat <= datum
AND hkont IN hkont_range "科目范围
group by hkont waers xnegp shkzg.

it_curr_month-racct = V_hkont.
it_curr_month-rtcur = 'RMB'. "处理本位币

IF V_xnegp = 'X' .
IF V_shkzg = 'S' .
it_curr_month-hsl_h = - V_dmbtr.
ELSE.
it_curr_month-hsl_s = - V_dmbtr.
ENDIF.
ELSE.
IF V_shkzg = 'S' .
it_curr_month-hsl_s = V_dmbtr.
ELSE.
it_curr_month-hsl_h = V_dmbtr.
ENDIF.
ENDIF.
APPEND it_curr_month.
CLEAR it_curr_month.
ENDSELECT.

* SELECT b~hkont A~waers b~xnegp b~shkzg sum( b~dmbtr )
* INTO (V_hkont,v_waers,v_xnegp,v_shkzg, V_dmbtr )
* FROM bkpf AS A INNER JOIN bsas AS b
* ON A~bukrs = B~bukrs
* AND A~belnr = B~belnr
* AND A~gjahr = B~gjahr
* WHERE A~gjahr = vs_gjahr
* AND A~monat = vs_monat
* AND A~bukrs = bukrs
* AND A~budat >= vd_budat_beg
* AND A~budat <= datum
* AND b~hkont IN hkont_range "科目范围
* group by b~hkont A~waers b~xnegp b~shkzg.
SELECT hkont waers xnegp shkzg sum( dmbtr )
INTO (V_hkont,v_waers,v_xnegp,v_shkzg, V_dmbtr )
FROM bsas
WHERE gjahr = vs_gjahr
AND monat = vs_monat
AND bukrs = bukrs
AND budat >= vd_budat_beg
AND budat <= datum
AND hkont IN hkont_range "科目范围
group by hkont waers xnegp shkzg.

it_curr_month-racct = V_hkont.
it_curr_month-rtcur = 'RMB'. "处理本位币
IF V_xnegp = 'X' .
IF V_shkzg = 'S' .
it_curr_month-hsl_h = - V_dmbtr.
ELSE.
it_curr_month-hsl_s = - V_dmbtr.
ENDIF.
ELSE.
IF V_shkzg = 'S' .
it_curr_month-hsl_s = V_dmbtr.
ELSE.
it_curr_month-hsl_h = V_dmbtr.
ENDIF.
ENDIF.
APPEND it_curr_month.
CLEAR it_curr_month.
ENDSELECT.

* 将明细数据加入汇总数。
CLEAR : tmp_curr_tab, tmp_curr_tab[].
SORT it_curr_month BY racct rtcur.
LOOP AT it_curr_month .
AT END OF rtcur .
SUM.
* clear tmp_HKONT_TAB.
tmp_curr_tab-ryear = datum+0(4).
tmp_curr_tab-monat = datum+4(2).
tmp_curr_tab-racct = it_curr_month-racct.
tmp_curr_tab-rtcur = it_curr_month-rtcur.
tmp_curr_tab-hsl_s = it_curr_month-hsl_s.
tmp_curr_tab-hsl_h = it_curr_month-hsl_h.
tmp_curr_tab-hsl_s_lj = it_curr_month-hsl_s.
tmp_curr_tab-hsl_h_lj = it_curr_month-hsl_h.
tmp_curr_tab-hsl_ye = it_curr_month-hsl_s - it_curr_month-hsl_h.
APPEND tmp_curr_tab.
CLEAR tmp_curr_tab.
ENDAT.
ENDLOOP.
* clear: result_tab,result_tab[].
result_tab[] = tmp_hkont_tab[].

CALL FUNCTION 'ZFI_HKONT_UNION_GLT0_I'
EXPORTING
hkont_tab = tmp_curr_tab[]
IMPORTING
ret_code = ret_code
CHANGING
result_tab = result_tab[].

ENDFUNCTION.

++++==============================
将两个会计科目接口信息集进行汇总

++++==============================

FUNCTION ZFI_HKONT_UNION_GLT0_I.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(HKONT_TAB) TYPE ZHKON_GLT0_I_FIELDS_TAB
*" EXPORTING
*" VALUE(RET_CODE) LIKE SY-SUBRC
*" CHANGING
*" REFERENCE(RESULT_TAB) TYPE ZHKON_GLT0_I_FIELDS_TAB
*"----------------------------------------------------------------------

DATA:
tmp_RESULT_TAB TYPE ZHKON_GLT0_I_FIELDS_TAB with header line,
tmp_RESULT_LINE TYPE ZHKON_GLT0_I_FIELDS_LINE.

RET_CODE = 1.

APPEND LINES OF RESULT_TAB TO tmp_RESULT_TAB.
APPEND LINES OF HKONT_TAB TO tmp_RESULT_TAB.
sort tmp_RESULT_TAB by ryear monat racct rtcur.
clear : RESULT_TAB,RESULT_TAB[].
loop at tmp_RESULT_TAB.
at end of rtcur.
sum.
MOVE-CORRESPONDING tmp_RESULT_TAB TO tmp_RESULT_LINE.
APPEND tmp_RESULT_LINE to RESULT_TAB .
endat.
endloop.
RET_CODE = 0.

ENDFUNCTION.

++++==============================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: