取月度会计科目余额等信息(可选年度范围)-月报

来源:互联网 发布:如何看待凤凰卫视知乎 编辑:程序博客网 时间:2024/05/11 12:19

FUNCTION zfi_hkont_get_monat_glt0_i.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(BUKRS) LIKE  GLT0-BUKRS DEFAULT 'S001'
*"     VALUE(YEAR) LIKE  GLT0-RYEAR DEFAULT SY-DATUM+0(4)
*"     VALUE(MONAT) LIKE  BKPF-MONAT DEFAULT SY-DATUM+4(2)
*"     VALUE(YEAR_BEFORE) TYPE  SY-SUBRC DEFAULT 0
*"     VALUE(MONAT_BEFORE) TYPE  SY-SUBRC DEFAULT 0
*"     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:
    glt0_tab TYPE zhkon_glt0_fields_tab,
    glt0_s_tab TYPE zhkon_glt0_s_fields_tab .

  ret_code = 1.
  PERFORM progress_indicator USING '正在提取数据,请稍候...'.

  PERFORM get_data_glt0
     TABLES hkont_range glt0_tab
     USING  bukrs  year  year_before monat .

  PERFORM progress_indicator USING '正在汇总明细数据,请稍候...'.
  PERFORM get_data_glt0_s    "处理将明细数据进行汇总
     TABLES glt0_tab
            glt0_s_tab.

  PERFORM progress_indicator USING '正在生成有效结果,请稍候...'.
  PERFORM get_data_glt0_i    "将明细数据进行汇总成最终结果
     TABLES glt0_s_tab
            result_tab
     USING monat
           monat_before.

  ret_code = 0.


ENDFUNCTION.

*---------------------------------------------------------------------*
*       FORM get_data_glt0                                            *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_RACCT_TAB                                                   *
*  -->  P_GLT0_TAB                                                    *
*  -->  P_BUKRS                                                       *
*  -->  P_YEAR                                                        *
*  -->  P_YEAR_BEFORE                                                 *
*  -->  P_MONAT                                                       *
*---------------------------------------------------------------------*
FORM get_data_glt0
     TABLES p_racct_tab TYPE zhkon_hkont_range_tab
            p_glt0_tab TYPE zhkon_glt0_fields_tab
     USING  p_bukrs LIKE glt0-bukrs
            p_year LIKE glt0-ryear
            p_year_before LIKE sy-subrc
            p_monat LIKE bkpf-monat.
  DATA:
    tmp_wa_glt0 TYPE zhkon_glt0_fields_line,
    v_year_beg LIKE glt0-ryear,
    v_year_end LIKE glt0-ryear.


  CLEAR: p_glt0_tab,p_glt0_tab[].
  v_year_beg = p_year + p_year_before.
  v_year_end = p_year.

  SELECT * INTO CORRESPONDING FIELDS OF  tmp_wa_glt0
    FROM glt0
    WHERE rldnr = '00' AND  rrcty = '0'  AND rvers = '001'
     AND ( ryear <= v_year_end AND ryear >= v_year_beg )
     " AND  rbusa = '1000'  AND rtcur = 'RMB' 已去除本条件
     AND  rpmax = '016'   AND bukrs = p_bukrs
     AND racct IN p_racct_tab.
    tmp_wa_glt0-rtcur = 'RMB'. "处理成本位币
    PERFORM reset_data_monat_glt0 USING p_monat tmp_wa_glt0.
    APPEND tmp_wa_glt0 TO p_glt0_tab .
  ENDSELECT.
ENDFORM.


*---------------------------------------------------------------------*
*       FORM reset_data_monat_glt0                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_MONAT                                                       *
*  -->  P_GLT0                                                        *
*---------------------------------------------------------------------*
FORM reset_data_monat_glt0   "根据月份将明细数据不需月份数据进行清零
     USING p_monat LIKE bkpf-monat
           p_glt0_line TYPE zhkon_glt0_fields_line.
  DATA: li_monat(2) TYPE n,
        ls_fieldname(5).
  FIELD-SYMBOLS: <fs> .
  DO 12 TIMES.
    li_monat = sy-index.
    CHECK li_monat > 1.
    IF p_monat < li_monat.
      CONCATENATE 'HSL' li_monat INTO ls_fieldname.
      ASSIGN COMPONENT ls_fieldname OF STRUCTURE p_glt0_line TO <fs>.
      <fs> = 0.
    ENDIF.
  ENDDO.
ENDFORM.


*---------------------------------------------------------------------*
*       FORM get_data_glt0_s                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_GLT0_TAB                                                    *
*  -->  P_GLT0_S_TAB                                                  *
*---------------------------------------------------------------------*
FORM get_data_glt0_s    "处理将明细数据进行汇总
     TABLES p_glt0_tab TYPE zhkon_glt0_fields_tab
            p_glt0_s_tab TYPE zhkon_glt0_s_fields_tab .
*  data:
*    tmp_tmp_wa_glt0 like tmp_wa_glt0.
  DATA: li_monat(2) TYPE n,
      ls_fieldname(10).
*  DATA:
*    vf_sum_Hsl LIKE glt0-hslvt.
  DATA: tmp_wa_glt0 TYPE zhkon_glt0_fields_line,
        tmp_wa_glt0_s TYPE zhkon_glt0_s_fields_line.

  FIELD-SYMBOLS: <fs_sum> ,<fs_detail> .


  CLEAR :p_glt0_s_tab ,p_glt0_s_tab[].
  SORT p_glt0_tab BY ryear racct rtcur.
  LOOP AT p_glt0_tab INTO tmp_wa_glt0.
    AT NEW rtcur.
      tmp_wa_glt0_s-ryear = tmp_wa_glt0-ryear .
      tmp_wa_glt0_s-racct = tmp_wa_glt0-racct .
      tmp_wa_glt0_s-rtcur = tmp_wa_glt0-rtcur .
    ENDAT  .
*    move-corresponding it_glt0 to tmp_tmp_wa_glt0.
    tmp_wa_glt0_s-hslvt = tmp_wa_glt0_s-hslvt + tmp_wa_glt0-hslvt.
    DO 12 TIMES.
      li_monat = sy-index.
      CONCATENATE 'HSL' li_monat INTO ls_fieldname.
      ASSIGN COMPONENT ls_fieldname OF
        STRUCTURE tmp_wa_glt0 TO <fs_detail>.
      CONCATENATE 'HSL' li_monat '_' tmp_wa_glt0-drcrk
        INTO ls_fieldname.
      ASSIGN COMPONENT ls_fieldname OF
        STRUCTURE tmp_wa_glt0_s TO <fs_sum>.
      IF  tmp_wa_glt0-drcrk ='S'.
        <fs_sum> =  <fs_sum> + <fs_detail>.
      ELSE.
        <fs_sum> =  <fs_sum> - <fs_detail>.
      ENDIF.
    ENDDO.
    AT END OF rtcur.
      APPEND tmp_wa_glt0_s TO p_glt0_s_tab.
      CLEAR tmp_wa_glt0_s.
    ENDAT.
  ENDLOOP.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM get_data_glt0_i                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_MONAT                                                       *
*  -->  P_NEEDPREMONAT                                                *
*  -->  P_GLT0_S_TAB                                                  *
*  -->  P_GLT0_I_TAB                                                  *
*---------------------------------------------------------------------*
FORM get_data_glt0_i    "将明细数据进行汇总成最终结果
     TABLES p_glt0_s_tab TYPE zhkon_glt0_s_fields_tab
            p_glt0_i_tab TYPE zhkon_glt0_i_fields_tab
     USING p_monat LIKE bkpf-monat
           p_monat_before LIKE sy-subrc.
  DATA:
    li_monat(2) TYPE n,
    v_monat_beg LIKE bkpf-monat,
    v_monat_end LIKE bkpf-monat.

 

  DATA: tmp_wa_glt0_s TYPE zhkon_glt0_s_fields_line.
*        tmp_wa_glt0_i type zhkon_glt0_i_fields_line.
  IF p_monat_before = 1.
    v_monat_beg = 1.
  ELSE .
    v_monat_beg = p_monat + p_monat_before.
  ENDIF.
  v_monat_end = p_monat.
  CLEAR: p_glt0_i_tab ,p_glt0_i_tab[].

  LOOP AT p_glt0_s_tab INTO tmp_wa_glt0_s .
    li_monat = 01.
    DO 12 TIMES.
      li_monat = sy-index.
      CHECK ( li_monat >= v_monat_beg AND li_monat <= v_monat_end ).
      PERFORM process_single_monat_glt0_i
        TABLES p_glt0_i_tab
        USING li_monat  tmp_wa_glt0_s.
    ENDDO.
  ENDLOOP.
  DELETE p_glt0_i_tab WHERE  hslvt = 0
         AND hsl_qc = 0  AND hsl_s = 0  AND hsl_h = 0
         AND hsl_ye = 0  AND hsl_s_lj = 0  AND hsl_h_lj = 0 .
*  sort it_result  by ryear rmonat  racct  rtcur.
ENDFORM.                    " PROCESS_SUM

*---------------------------------------------------------------------*
*       FORM process_single_monat_result                              *
*---------------------------------------------------------------------*
*      处理单个月数据从汇总生成至最终结果                             *
*---------------------------------------------------------------------*
*  -->  P_monat                                                       *
*---------------------------------------------------------------------*
FORM process_single_monat_glt0_i  "单个月数据从汇总生成至最终结果
     TABLES
           p_glt0_i_tab TYPE zhkon_glt0_i_fields_tab
     USING p_monat LIKE bkpf-monat
           p_glt0_s_line TYPE zhkon_glt0_s_fields_line.
  DATA: li_monat(2) TYPE n,
        ls_fieldname(10).
  FIELD-SYMBOLS: <fs_s> ,<fs_h> .
  DATA: tmp_wa_glt0_i TYPE zhkon_glt0_i_fields_line.

  tmp_wa_glt0_i-ryear = p_glt0_s_line-ryear.
  tmp_wa_glt0_i-monat = p_monat.
  tmp_wa_glt0_i-racct = p_glt0_s_line-racct.
  tmp_wa_glt0_i-rtcur = p_glt0_s_line-rtcur.
  tmp_wa_glt0_i-hslvt = p_glt0_s_line-hslvt.

  DO 12 TIMES.
    li_monat = sy-index.
    IF p_monat >= li_monat.
      CONCATENATE 'HSL' li_monat '_S' INTO ls_fieldname.
      ASSIGN COMPONENT ls_fieldname OF STRUCTURE
          p_glt0_s_line TO <fs_s>.
      CONCATENATE 'HSL' li_monat '_H' INTO ls_fieldname.
      ASSIGN COMPONENT ls_fieldname OF STRUCTURE
          p_glt0_s_line TO <fs_h>.
      ADD <fs_s>  TO  tmp_wa_glt0_i-hsl_s_lj.
      ADD <fs_h>  TO  tmp_wa_glt0_i-hsl_h_lj.
    ENDIF.
  ENDDO.
*  IF p_monat >='01'.
*    it_result-hsl_s_lj = it_result-hsl_s_lj + it_sum-hsl01_s.
*    it_result-hsl_h_lj = it_result-hsl_h_lj + it_sum-hsl01_h.
*  ENDIF.
  CONCATENATE 'HSL' p_monat '_S' INTO ls_fieldname.
  ASSIGN COMPONENT ls_fieldname OF STRUCTURE
       p_glt0_s_line TO <fs_s>.
  CONCATENATE 'HSL' p_monat '_H' INTO ls_fieldname.
  ASSIGN COMPONENT ls_fieldname OF STRUCTURE
       p_glt0_s_line TO <fs_h>.
  tmp_wa_glt0_i-hsl_s = <fs_s>.
  tmp_wa_glt0_i-hsl_h = <fs_h>.
*  CASE p_monat.
*    WHEN '01'.
*      it_result-tsl_s = it_sum-tsl01_s.
*      it_result-tsl_h = it_sum-tsl01_h.
*  ENDCASE.
  tmp_wa_glt0_i-hsl_ye = tmp_wa_glt0_i-hslvt
     + tmp_wa_glt0_i-hsl_s_lj - tmp_wa_glt0_i-hsl_h_lj.
  tmp_wa_glt0_i-hsl_qc = tmp_wa_glt0_i-hsl_ye
     + tmp_wa_glt0_i-hsl_h - tmp_wa_glt0_i-hsl_s.
  IF  tmp_wa_glt0_i-hslvt <> 0
    OR tmp_wa_glt0_i-hsl_qc <> 0
    OR tmp_wa_glt0_i-hsl_s <> 0
    OR tmp_wa_glt0_i-hsl_h <> 0
    OR tmp_wa_glt0_i-hsl_ye <> 0
    OR tmp_wa_glt0_i-hsl_s_lj <> 0
    OR tmp_wa_glt0_i-hsl_h_lj <> 0 .
    APPEND tmp_wa_glt0_i TO p_glt0_i_tab.
  ENDIF.
  CLEAR tmp_wa_glt0_i.
ENDFORM.

*---------------------------------------------------------------------*
*      progress_indicator                                                       *
*---------------------------------------------------------------------*
form progress_indicator using p_text.  "显示进度文本
  call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
*         PERCENTAGE = 0
           text       = p_text.
endform.                    " PROGRESS_INDICATOR


 

原创粉丝点击