How to insert record in report at run time

Scenario Description:-

          In general ledger data remains in transaction currency, local currency etc. If we want to display trial balance in local currency (company code currency) i.e. reporting currency is local currency then for some GL accounts we have to display data in local currency that is already existing with currency type = 10 (converted into local currency at transaction date) but for other GL account we have to convert into local currency on the day of reporting. Thus there will come some difference in trial balance and that will go to profit and loss account.

Now this difference of amount that will go to profit and loss account should also display in trial balances. So in short our problem can be described as in report there are 2 columns credit and debit. In row there is field GL account. So trial balance will look like as follows

G/L account

Debit

Credit

1000000000

100

 

2000000000

 

200

3000000000

150

 

Result

250

200

 

Now as trial balance should show Debit = Credit. The difference of above 2 i.e. 50 should go profit and loss account and that should also show in above trial balance. So overall report should look as follows

G/L account

Debit

Credit

1000000000

100

 

2000000000

 

200

3000000000

150

 

4000000000

 

50

Result

250

250

 

So at run time we came to know the difference coming in trial balance is 50 and that should go to profit and loss account and that should also be visible in trial balance as above.

We will solve above mentioned problem by following example. Let us assume following data is there in final data provider (cube /DSO).

G/L account

Comp code

Currency

Currency Type

Debit

Credit

1000000000

1000

INR

10

100

 

1000000000

1000

USD

00

2

 

2000000000

1000

INR

10

 

100

2000000000

1000

USD

00

 

2

 

Now for above data if user runs trial balance report on particular date then for account 1000000000 amount should display in local currency(INR) on transaction date and that is present in info provider with currency type = 10. But for account 2000000000 as account type (monitory, non-monitory etc.) is like that it should display amount in local currency by converting transaction currency amount into local currency on reporting date. That is for above example 2$ converted into INR at reporting date. And if ex. rate is 49 for reporting date then it will be 98 INR. So this 2 Rs difference should go to P&L account.

Step 1:- Create direct update type DSO and move all data of final data provider into direct update DSO. Report should be based on this DSO. To move data from DSO or Cube to direct update DSO is very easy by writing a program in se38 and including that into process chain. Program is simply to transfer data from 1 table to other table (in case of standard DSO to direct update DSO) by select and insert SQL statements. And for cube to direct update DSO 1st you will have to read data from cube by FM (RSDRI_INFOPROV_READ) and inserting into direct update DSO by insert statement.

Step 2:-In the report create a variable of processing type ‘customer exit’ that is for no purpose other than bringing the control in user exit. For example we create a variable Var1 under 0GL_ACCOUNT object of processing by ‘customer exit’. This will not return any value but will carry control in user exit where we can insert record in direct update DSO of that profit & loss account. As of now let us assume we created variable Var1 under 0GL_ACCOUNT of processing type ‘customer exit’.

Step3:-Now we will write following code in user exit. (In include ZXRSRU01)

 

 

ZGL_ACCOUNT is a variable created on 0GL_ACCOUNT of processing type customer exit. This is only for the purpose to send control to user exit so that our code can execute.

    WHEN 'ZGL_ACCOUNT'.
      
IF i_step = 2.
        
tables: /BIC/azdso00.
        
DATABEGIN OF itab_gl_account OCCURS 0,
                gl_account(
10),
                account_type(
1),
              
END OF itab_gl_account,
              
BEGIN OF itab_dso OCCURS 0,
                gl_account(
10),
                
currency TYPE /bi0/oicurrency,
                curtype 
TYPE /bi0/oicurtype,
                debit 
TYPE /bi0/oidebit,
                credit 
TYPE /bi0/oicredit,
                
END OF itab_dso,
              wa 
LIKE /BIC/AZDSO00,
              amount 
LIKE   itab_dso-debit,"or /bic/aDSO00-credit
              debit 
LIKE   itab_dso-debit,
              credit 
LIKE itab_dso-credit.
        
FIELD-SYMBOLS : <wa> LIKE itab_dso.
        
SELECT gl_account /BIC/ZIND_ACT FROM /bi0/mgl_account INTO TABLEitab_gl_account."/BIC/ZIND_ACT = account type
        
SELECT gl_account currency curtype debit credit FROM /bic/azdso00 INTOTABLE itab_dso.*above is preparation of data. we are assuming company code entered by user is '1000' in selection screen*else we will have to pick company code value from i_t_var_range and restrict above select statement with*          that company code
        
LOOP AT itab_dso ASSIGNING <wa>.
          
READ TABLE itab_gl_account WITH KEY gl_account = <wa>-gl_account.
          
IF itab_gl_account-account_type = 'M' AND <wa>-curtype = '00'.*here we are assuming for account type M we need to convert amount into local currency at reporting date
            amount = <wa>-debit + <wa>-credit.
"either debit or credit field will be non zero
            
CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'
              
EXPORTING*               CLIENT                  = SY-MANDT
                
date                    = sy-datum
                foreign_currency        = 
'INR'
                local_amount            = amount
                local_currency          = <wa>-
currency*               RATE                    = 0*               TYPE_OF_RATE            = 'M'*               READ_TCURR              = 'X'
             
IMPORTING*               EXCHANGE_RATE           =
               foreign_amount          = amount*               FOREIGN_FACTOR          =*               LOCAL_FACTOR            =*               EXCHANGE_RATEX          =*               DERIVED_RATE_TYPE       =*               FIXED_RATE              =
             
EXCEPTIONS
               no_rate_found           = 
1
               overflow                = 
2
               no_factors_found        = 
3
               no_spread_found         = 
4
               derived_2_times         = 
5
               
OTHERS                  = 6
                      .
            
IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
            
ENDIF.
            
IF <wa>-debit > 0.
              <wa>-debit = amount.
            
ELSE.
              <wa>-credit = amount.
            
ENDIF.
          
ELSEIF itab_gl_account-account_type = 'M' AND <wa>-curtype = '10'.
            <wa>-debit = 
0.
            <wa>-credit = 
0"for account type M only records with currency type = 00(transaction curr) will be used
          
ELSEIF itab_gl_account-account_type <> 'M' AND <wa>-curtype = '00'.
            <wa>-debit = <wa>-credit = 
0."for these accounts record with curr type = 10(local curr) will be used
          
ENDIF.*to calculate difference of debit and credit to put into P&L account we need to calcualte total debit and credit amount
          debit = <wa>-debit + debit.
          credit = <wa>-credit + credit.

        
ENDLOOP.
        amount = debit - credit.

        wa-gl_account = 
'3000000000'."let us assume P&L account is 3000000000
        wa-
currency = 'INR'.
        wa-curtype = 
'10'.
        
IF amount > 0.
          wa-debit = amount.
        
ELSE.
          wa-credit = amount * -
1.
        
ENDIF.

        
INSERT into /bic/aZDSO00 values wa.*Above is key statement.It will add record in direct update DSO at run time and here that will be display*amount in P&L account i.e. difference amount
      
ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值