专家例程

CUBE ZBPC_C01 -> CUBE ZBPC_C031 —— 专家程序

    DATA:
      RESULT_FIELDS      
TYPE _ty_s_TG_1.

*$*$ begin of routine - insert your code only below this line        *-*
    ... 
"insert your code here
    
DATA:
          it_gl_acct 
TYPE STANDARD TABLE OF /bic/pzgl_acct1,
          wa_gl_acct 
TYPE /bic/pzgl_acct1,

          it_gl_group 
TYPE STANDARD TABLE OF /bic/pzbpc_gro,
          wa_gl_group 
TYPE /bic/pzbpc_gro,

          it_xj_acct 
TYPE STANDARD TABLE OF /bic/pzbpc_map,
          wa_xj_acct 
TYPE /bic/pzbpc_map,

          it_gl_flow 
TYPE STANDARD TABLE OF /bic/pz_flow,
          wa_gl_flow 
TYPE /bic/pz_flow,

          period 
TYPE n LENGTH 3,

          it_gro_acct 
type STANDARD TABLE OF /BIC/PZ_KMLB,
          wa_gro_acct 
type /BIC/PZ_KMLB,
*-------------------------------------现金流量求期初
          e_s_result1 
TYPE _ty_t_tg_1,
*-------------------------------------现金流量求期初
          e_s_result 
TYPE _ty_t_tg_1,
          STR 
TYPE /BIC/PZBPC_GRO-/bic/z_group.
    
FIELD-SYMBOLS:
      <result_fields>    
TYPE _ty_s_tg_1,
      <wa_gl_group>  
TYPE /bic/pzbpc_gro,
      <WA_GL_FLOW> 
TYPE /bic/pz_flow,
      <it_gro_acct> 
type /BIC/PZ_KMLB.
     
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gl_group FROM
    /bic/pzbpc_gro 
WHERE objvers = 'A' AND /BIC/Z_PLGL = 'N'.
    
LOOP AT it_gl_group ASSIGNING <wa_gl_group>.
        
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = <wa_gl_group>-company
        
IMPORTING
          
output = <wa_gl_group>-company.
    
ENDLOOP.

    
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gl_acct FROM
    /bic/pzgl_acct1 
WHERE objvers = 'A'.
    
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gl_flow FROM
    /bic/pz_flow 
WHERE objvers = 'A'.
     
LOOP AT it_gl_flow ASSIGNING <WA_GL_FLOW>.
        
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = <WA_GL_FLOW>-/BIC/ZGL_ACCT
        
IMPORTING
          
output = <WA_GL_FLOW>-/BIC/ZGL_ACCT.
    
ENDLOOP.

    
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gro_acct FROM
    /BIC/PZ_KMLB 
WHERE objvers = 'A' AND /BIC/Z_PLGL = 'N'.

    
LOOP AT it_gro_acct ASSIGNING <it_gro_acct>.
        
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = <it_gro_acct>-/bic/zgl_acct
        
IMPORTING
          
output = <it_gro_acct>-/bic/zgl_acct.
    
ENDLOOP.
    
SORT it_gro_acct DESCENDING.


    
LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>.
      
CLEAR WA_GRO_ACCT.
      
CLEAR wa_gl_acct.
      
CLEAR wa_gl_group.
      
READ TABLE it_gl_acct INTO wa_gl_acct WITH KEY /bic/zgl_acct1 =
      <source_fields>-gl_account
                                                         chrt_accts =
                                                         
'1000'
                                                         objvers = 
'A'.
      
IF wa_gl_acct-/bic/zgl_acct IS INITIAL.
        
CONTINUE.
      
ENDIF.
*-----------------------------------------------------截取字符串前‘0’
      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = wa_gl_acct-/bic/zgl_acct
        
IMPORTING
          
output = wa_gl_acct-/bic/zgl_acct.
      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = <source_fields>-comp_code
        
IMPORTING
          
output = <source_fields>-comp_code.
      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = <source_fields>-pcompany
        
IMPORTING
          
output = <source_fields>-pcompany.
      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        
EXPORTING
          
input  = <source_fields>-func_area
        
IMPORTING
          
output = <source_fields>-func_area.

*-----------------------------------------------------判断group
IF <source_fields>-PCOMPANY = '9999'.
  <source_fields>-PCOMPANY = 
''.
ENDIF.
      
READ TABLE it_gro_acct INTO WA_GRO_ACCT WITH KEY /BIC/ZGL_ACCT =
      wa_gl_acct-/bic/zgl_acct OBJVERS = 
'A' /BIC/Z_PLGL = 'N'.
      
CLEAR STR.
      
IF sy-subrc <> 0.
        WA_GRO_ACCT-/BIC/Z_KMLB = 
'X'.
      
ENDIF.
      
IF WA_GRO_ACCT-/BIC/Z_KMLB <> 'A' AND <source_fields>-pcompany IS
      
INITIAL.
        WA_GRO_ACCT-/BIC/Z_KMLB = 
'X'.
      
ENDIF.
      
READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB =
      WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code
      objvers = 
'A'.
IF <source_fields>-comp_code = '2100' and WA_GRO_ACCT-/BIC/ZGL_ACCT =
'152401' AND
      <source_fields>-FISCPER =
      
'2011009'.
        BREAK-POINT.
ENDIF.
      
IF sy-subrc <> 0.
      WA_GRO_ACCT-/BIC/Z_KMLB = 
'X'.
      
READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB =
      WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code
      objvers = 
'A'.
      
ENDIF.
      
IF WA_GRO_ACCT-/BIC/Z_KMLB = 'B'.
      
READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB =
      WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-pcompany
      objvers = 
'A' /BIC/ZBPC_GRO = 2.
      
IF sy-subrc = 0.
      STR = wa_gl_group-/bic/z_group.
      
ELSE.
        STR = 
'NONE'.
      
ENDIF.
*读取合并组代号为2
      
READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB =
      WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code
      objvers = 
'A' /BIC/ZBPC_GRO = 2.
      
IF sy-subrc = 0 AND STR = wa_gl_group-/bic/z_group.
        RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group.
        
ELSE.
      
READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB =
      WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code
      objvers = 
'A' /BIC/ZBPC_GRO = 1.
       RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group.
       
ENDIF.
      
ELSE.
        RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group.
      
ENDIF.

*-----------------------------------------------------FLOWF_999的统一处理

      
CONCATENATE 'A' wa_gl_acct-/bic/zgl_acct INTO
      RESULT_FIELDS-/BIC/ZBPCACCT.
*      IF RESULT_FIELDS-/BIC/ZBPCACCT = 'A100010'.
*       BREAK-POINT.
*      ENDIF.
      
CONCATENATE 'CC' <source_fields>-comp_code INTO
      RESULT_FIELDS-/BIC/ZENTITY.
      RESULT_FIELDS-/BIC/ZFLOW = 
'F_999'.
      
IF <source_fields>-pcompany = '' OR <source_fields>-pcompany =
      
'9999' OR <source_fields>-pcompany = '2099' OR
      <source_fields>-pcompany = 
'2199' OR <source_fields>-pcompany =
      
'2299'
        
OR <source_fields>-pcompany+0(1) = '9' OR
        <source_fields>-pcompany = 
'D220'.
        RESULT_FIELDS-/BIC/ZINTCO = 
'I_NONE'.
      
ELSE.
        
CONCATENATE 'I_CC' <source_fields>-pcompany INTO
        RESULT_FIELDS-/BIC/ZINTCO.
      
ENDIF.
      
IF <source_fields>-func_area = '1000' OR <source_fields>-func_area
      = 
'2000'.
        
CONCATENATE 'C' <source_fields>-func_area INTO
        RESULT_FIELDS-/BIC/ZITEM.
      
ELSE.
        RESULT_FIELDS-/BIC/ZITEM = 
'DUMMY'.
      
ENDIF.
      RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-deb_cre_lc.
      RESULT_FIELDS-/BIC/ZCATEGORY = 
'C_100'.
      RESULT_FIELDS-/BIC/ZDATASRC = 
'INPUT'.
      RESULT_FIELDS-/BIC/ZBPCRCR = 
'LC'.
      RESULT_FIELDS-/BIC/ZBPCTIM = <source_fields>-fiscper.
      
COLLECT RESULT_FIELDS INTO RESULT_PACKAGE.
*-----------------------------------------------------现金科目  期初期末特殊处理
    
IF RESULT_FIELDS-/BIC/ZBPCACCT = 'A101010'.
*      BREAK-POINT.
      
READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB =
      
'X' company = <source_fields>-comp_code
      objvers = 
'A'.
      RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group.
      period = RESULT_FIELDS-/BIC/ZBPCTIM+
4(3).
      
if period = 1.
      RESULT_FIELDS-/BIC/ZBPCACCT = 
'A81050100'.
         RESULT_FIELDS-/BIC/ZSIGNDATA  = <source_fields>-deb_cre_lc +
         <source_fields>-credit - <source_fields>-debit.
       
COLLECT RESULT_FIELDS INTO e_s_result1.
       
else.
       RESULT_FIELDS-/BIC/ZBPCACCT = 
'A81050200'.
       RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-deb_cre_lc.
       
COLLECT RESULT_FIELDS INTO RESULT_PACKAGE.
       RESULT_FIELDS-/BIC/ZBPCACCT = 
'A100010'.
       
endif.
    
ENDIF.


*-----------------------------------------------------对于期初余额的获取F_600
      
READ TABLE it_gl_flow INTO wa_gl_flow WITH KEY /bic/zgl_acct =
      wa_gl_acct-/bic/zgl_acct /bic/zf_600 = 
'F_600'
      objvers = 
'A'.
      
IF sy-subrc = 0.
        
IF <source_fields>-FISCPER+4(3) = '001'.
        RESULT_FIELDS-/BIC/ZFLOW = 
'F_600'.
          RESULT_FIELDS-/BIC/ZSIGNDATA  = <source_fields>-deb_cre_lc +
          <source_fields>-credit - <source_fields>-debit.
        
COLLECT RESULT_FIELDS INTO e_s_result1.
        
ENDIF.
        
ENDIF.


*-----------------------------------------------------对于年度累计发生额的数据收集F_12
*0
      
READ TABLE it_gl_flow INTO wa_gl_flow WITH KEY /bic/zgl_acct =
      wa_gl_acct-/bic/zgl_acct /bic/zf_120 = 
'F_120'
  objvers = 
'A'.
      
IF sy-subrc = 0.
        RESULT_FIELDS-/BIC/ZFLOW = 
'F_120'.
       
IF wa_gl_acct-/bic/zgl_acct <> '124101' AND
       wa_gl_acct-/bic/zgl_acct <> 
'124102'.
          RESULT_FIELDS-/BIC/ZSIGNDATA  = <source_fields>-debit -
          <source_fields>-credit.
       
ELSE.
         RESULT_FIELDS-/BIC/ZSIGNDATA  = <source_fields>-credit.
       
ENDIF.
              
COLLECT RESULT_FIELDS INTO e_s_result.
        
ENDIF.


*-----------------------------------------------------对于当月发生额的获取F_620
      
READ TABLE it_gl_flow INTO wa_gl_flow WITH KEY /bic/zgl_acct =
      wa_gl_acct-/bic/zgl_acct /bic/zf_620 = 
'F_620'
  objvers = 
'A'.
      
IF sy-subrc = 0.
        RESULT_FIELDS-/BIC/ZFLOW = 
'F_620'.
        RESULT_FIELDS-/BIC/ZSIGNDATA  = <source_fields>-debit -
        <source_fields>-credit.
        
COLLECT RESULT_FIELDS INTO RESULT_PACKAGE.
      
ENDIF.
      
CLEAR RESULT_FIELDS.
    
ENDLOOP.
*-----------------------------------------------------对于年度累计发生额的数据计算
    BREAK-POINT.
        
LOOP AT e_s_result INTO RESULT_FIELDS.
         
IF RESULT_FIELDS-/BIC/ZFLOW = 'F_120'.
        
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          
EXPORTING
            
input  = RESULT_FIELDS-/BIC/ZBPCTIM
          
IMPORTING
            
output = RESULT_FIELDS-/BIC/ZBPCTIM.
        period = RESULT_FIELDS-/BIC/ZBPCTIM+
4(3).
        
DO.
          
CONCATENATE RESULT_FIELDS-/BIC/ZBPCTIM+0(4) period INTO
          RESULT_FIELDS-/BIC/ZBPCTIM.
          
COLLECT RESULT_FIELDS INTO RESULT_PACKAGE.
          period = period + 
1.
          
IF period > 12.
            
EXIT.
          
ENDIF.
        
ENDDO.
       
ENDIF.
      
ENDLOOP.

       
LOOP AT e_s_result1 INTO RESULT_FIELDS.
        
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          
EXPORTING
            
input  = RESULT_FIELDS-/BIC/ZBPCTIM
          
IMPORTING
            
output = RESULT_FIELDS-/BIC/ZBPCTIM.
        
CLEAR period.
        period = RESULT_FIELDS-/BIC/ZBPCTIM+
4(3).
        
DO.
          
CONCATENATE RESULT_FIELDS-/BIC/ZBPCTIM+0(4) period INTO
          RESULT_FIELDS-/BIC/ZBPCTIM.
          
COLLECT RESULT_FIELDS INTO RESULT_PACKAGE.
          period = period + 
1.
          
IF period > 12.
            
EXIT.
          
ENDIF.
        
ENDDO.
      
ENDLOOP.

 

转载于:https://www.cnblogs.com/weichuo/archive/2012/09/18/2690747.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值