Thursday, 28 March 2013

Enabling trace for a concurrent program comes during performance tuning.


The main use of enabling trace for a concurrent program comes during performance tuning.
By examining a trace file, we come to know which query/queries is/are taking the longest
time to execute, there by letting us to concentrate on tuning them in order to improve the
overall performance of the program.
The following is an illustration of how to Enable and View a trace file for a Concurrent     Program.
Navigation: Application Developer–>Concurrent–>Program
Check the Enable Trace Check box. After that go to that particular Responsibility and run the Concurrent Program.
 Check that the Concurrent Program has been completed successfully.
The trace file by default is post fixed with oracle Process_id which helps us to identify which trace file belongs to which concurrent request. The below SQL Query returns the process_id of the concurrent request:

Select oracle_process_id from fnd_concurrent_requests where request_id=’2768335′
(This query displays Process Id)


The path to the trace file can be found by using the below query:

SELECT * FROM V$PARAMETER WHERE NAME=’user_dump_dest’
(This Query displays the path of trace file)

The Trace File generated will not be in the readable format. We have to use TKPROF utility to convert the file into a readable format.


·         Run the below tkprof command at the command prompt.
TKPROF < Trace File_Name.trc> <Output_File_Name.out> SORT=fchela

A readable file will be generated from the original trace file which can be further
analyzed to improve the performance. This file has the information about the
parsing, execution and fetch times of various queries used in the program.






Wednesday, 27 March 2013

Error: 'Order currency (USD) does not match ledger currency (INR). Please specify the currency conversion type.

I want to create a new order in Order management by using multi-currency. but at the time of booking the order I get the error 
'Order currency (USD) does not match ledger currency (INR).
Please specify the currency conversion type. '





Before doing this:

I had setup profile : 
QP: Multicurrency Usage = YEs ( Responsibility Level)
QP: Multi Currency Installed = YEs ( SIte level)

After that I had setup Multi-Currency Conversion Setup and define the conversion and daily rates in GL

After that I had setup Price list and define Currency as USD and Multi Currency Conversion also..


Sol.
Check Set up of this order type 





Order Management>Set-up>Transactions>Define







Monday, 25 March 2013

Enable Trace In Oracle Apps


Tracing Self Service Web Applications For A User

You enable trace for all actions that a user takes by setting a profile option for the user. This will function when the user logs into the Oracle Web Applications or forms. This method uses an Event Trace.

Set up Event Trace

A. Ensure permissions are set for the FND_INIT_SQL profile option
1.    Log onto the Applications Forms with the Application Developer Responsibility
2.    Navigate to the Profile menu
3.    Query up the profile name "FND_INIT_SQL"
4.    In the bottom block of the form, make sure that ALL checkboxes are checked typically, you will have to enable the checkboxes under "User Access" to make it "Visible" and "Updatable".
B. Enable Trace for Specific User
1.    Log onto System Administrator Responsibility
2.    Navigate: Profile > System
3.    Search for the profile option Initialization SQL Statement - Custom at     USER level.
Make sure you enter the Username for the user you want to turn on trace for.
4.    Enter the following sql statement into the User Level profile option.
This must be one complete line of text. Ensure you change USERID to the actual username of the user.
BEGIN FND_CTL.FND_SESS_CTL('','', '', 'TRUE','','ALTER SESSION SET TRACEFILE_IDENTIFIER='||''''||'USERID' ||''''||' EVENTS ='||''''||' 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 '||''''); END;

Ensure that the user has logged out and has no session open.

SELECT user_name, count(*) How_many_sessions
FROM icx_sessions icx, fnd_user u
WHERE icx.user_id = u.user_id
AND last_connect > sysdate - (4/24)
AND disabled_flag != 'Y'
AND PSEUDO_FLAG = 'N'
GROUP BY user_name
ORDER BY 2 desc
C. Reproduce the Problem
1.    Log onto the Application as the User that has trace set on.
2.    Reproduce the problem.
IMPORTANT  : if you save and blank the profile immediate before and after the test you have only the trace in this window time
D. Turn OFF Tracing
1.    Log back onto System Administrator
2.    Query the profile option Initialization SQL Statement - Custom at USER level.
3.    Set the profile option back to blank
E. Find Raw Trace File
1.    Obtain the Trace File Location
2.    Go to that directory on the Database server
3.    Search for the file with the current date/time that has the value you entered as USERID in the profile option string in the filename
To locate the Trace File Location run the following SQL in SQL*Plus:
select name, value from v$parameter where name like 'user_dump_dest';

Name and path of trace file:

SELECT s.sid,
       s.serial#,
       pa.value || '/' || LOWER(SYS_CONTEXT('userenv','instance_name')) ||    
       '_ora_' || p.spid || '.trc' AS trace_file
FROM   v$session s,
       v$process p,
       v$parameter pa
WHERE  pa.name = 'user_dump_dest'
AND    s.paddr = p.addr
AND    s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');


F. TKPROF Raw Trace File
A trace file can be reviewed using TKPROF.  TKPROF reformats the raw data so that it is easier to review. The TKPROF commands are normally run at the operating system command prompt. This will be signified with a $ as this is a common prompt in UNIX.
1.    Retrieve the trace file.
2.    Issue a command like the following to create a TKPROF version of the trace file. The explain option will look to see how each query is handled by the database in terms of what tables and indexes are referenced.
$tkprof raw_trace_file.trc output_file explain=apps/apps sort=(exeela,fchela) sys=no

Where:

raw_trace_file.trc: Name of trace file
output_file:        tkprof out file
explain:            This option provides the explain plan for the sql                         statements
sort:               This provides the sort criteria in which all sql 
                    statements will be sorted. This will bring the bad sql at 
                    the top of the outputfile.
sys=no:             Disables sql statements issued by user SYS
A handy technique when trouble shooting performance issues is to use TKPROF to look at the longest running queries. Since trace files related to performance can be huge, one might spend hours looking through the results to find the queries causing the issue. If you sort the file by the longest running queries first, it makes it much easier to investigate. The following example sorts by longest running queries first with the sort options selected as "sort='(prsela,exeela,fchela)'" and limits the results to the "Top 10" long running queries with the "print=10" command:
$ tkprof <filename.trc> <output_filename> sys=no explain=apps/<password>
sort='(prsela,exeela,fchela)' print=10

Before running tkprof, remember to have the DBA check the version of tkprof that is being used by your environment with the command "which tkprof". If the tkprof version does not match the database version, you must change your environment to use the database server version of tkprof. Using the wrong version can produce wildly skewed and incorrect data in the output. Before uploading the tkprof to Support, open the file and check that the database version in the tkprof header is the same as that of your server. If it says 8.0.6.3.0 and you are on 9.2.0.4.0, it is not going to give accurate information.

Debug Log Information For Self Service Web Applications

To get debug for OAF , you need to do the following A or B:

A. Set the following profile options for login at User Level:

1.    Set the Profile Option FND: Debug Log Enabled to Yes
2.    Set the Profile Option FND: Debug Log Level at user level to STATEMENT (the most detailed level) and FND: Message Level Threshold to low level [If FND: Message Level Threshold has value High , only high severity messages will be inserted in log table]
3.    Set the Profil Option FND: Debug Log Filename
o    Leave blank if you want log messages to go to the database.
o    If you want middle tier log messages to go to a file directly, then set the profile at user level to something like "/tmp/ASN_Debug.txt".
4.    Set profile FND: Debug Log Module at user level to a value of "%" or "asn.%".
o    It specifies the modules you want to log the message for. Multiple filters can also be specified, for example "fnd.%, jtf.%, asn.%". If you want to log all modules enter "%". 
o    Note: Logging at STATEMENT level will have a bad impact on performance. The Page will show a warning "Low-level logging is currently enabled. Your application will not perform as well while Low_logging is on." If % is specified in FND: Debug Log Module, then logging will perform less optimally than if specific modules like asn.% are specified.
5.    Run the flows that you want to generate a log for

B. Viewing Log Messages

If you specified a filename in the profile FND: Debug Log Filename (e.g. "/tmp/ASN_Debug.txt"), you can get the log message for the middle tier log messages from the appropriate middle tier.

If you left the profile FND: Debug Log Filename as blank, you can get the log message as follows:

1.    At User Level set the profile FND: Diagnostics to Yes for a user which has System Administrator Responsibility.
2.    Using the System Administrator Responsibility click on the Diagnostics Link and choose the 'Show Log' option.
3.    Enter the appropriate date range in Post Before and Post After. In module enter % or asn.% depending upon the issue that you are investigating. Select Any for level. You can also do an advanced search whee you have the ability to view log messages for a particular user.
4.    Click on download all to export the Log.
In additional to viewing all logged messages using the show log option, you can also view the middle tier log messages on individual pages. To do this you need to click on the Diagnostics link for any user that has the profile FND: Diagnostics set to yes. Select 'Show Log on Screen', select 'Statement; and click Go.
The log is archived in FND_LOG_MESSAGES table. You can run a concurrent program called Purge Debug Log (FNDLGPRG) to purge the table.

Tracing a Concurrent Program

To trace a concurrent program you need to:
1.    Check the enable trace checkbox on the Concurrent Program definition in System Administrator
2.    Set the profile option Concurrent: Allow Debugging to Yes in System Administrator
3.    Click Debug Options (B) when running the concurrent program
4.    Select the SQL trace checkbox
5.    Run the Concurrent Program 

Enable Trace for Specific User


Oracle has provided an option to execute custom code for every session opened in the database through a system profile. This profile called “Initialization SQL Statement - Custom” (the short name is 'FND_INIT_SQL') and allows customize sql/pl*sql code.
Once setting this profile in user level, each session opened for this user will first execute the code within the profile. No matter which type of activity the user does – Forms, CRM, Concurrent request, or anything else that opens a database session – the content of this profile will be executed.
So, clearly we can use this capability to enable Trace for users sessions.
Steps to enable trace for specific user:
  1. Login with “Application Developer” responsibility
  2. Open the “Create Profile” form –> Query the profile “FND_INIT_SQL”
  3. Make sure that “visible” and “updateable” are checked in user level.

     


1.    Log onto System Administrator Responsibility
2.    Navigate: Profile > System




3.    Search for the profile option Initialization SQL Statement - Custom at     USER level.
Make sure you enter the Username for the user you want to turn on trace for.


4.    Enter the following sql statement into the User Level profile option.
This must be one complete line of text. Ensure you change USERID to the actual username of the user.
BEGIN FND_CTL.FND_SESS_CTL('','', '', 'TRUE','','ALTER SESSION SET TRACEFILE_IDENTIFIER='||''''||'USERID' ||''''||' EVENTS ='||''''||' 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 '||''''); END; 

  
Ensure that the user has logged out and has no session open.

SELECT user_name, count(*) How_many_sessions
FROM icx_sessions icx, fnd_user u
WHERE icx.user_id = u.user_id
AND last_connect > sysdate - (4/24)
AND disabled_flag != 'Y'
AND PSEUDO_FLAG = 'N'
GROUP BY user_name
ORDER BY 2 desc


  1. Now, after the user logout from the application (the user you enabled trace for), the user can login and reproduce the issue.
     
  2. When finish to reproduce the issue, you should disable the trace by clearing the profile option value and update it to NULL. (profile “Initialization SQL Statement – Custom” of course..) 
  3. The trace file/s will wait for you in your udump (user_dump_dest init’ parameter) directory.

Since I enabled and disabled the trace quite a few times while investigating my performance issue, I wrote these handy simple programs which enable and disable the trace for a user in a quick and easy manner.
Execute this program to enable trace for a specific user: (substitute step 6 above)
DECLARE
  l_ret     boolean;
  l_user_id number;
BEGIN

  select user_id
    into l_user_id
    from fnd_user
   where user_name = '&&USER_NAME';

  l_ret := fnd_profile.SAVE(X_NAME        => 'FND_INIT_SQL',
                            X_VALUE       => 'BEGIN FND_CTL.FND_SESS_CTL('''','''','''', ''TRUE'','''',''ALTER SESSION SET TRACEFILE_IDENTIFIER=''||''''''''||''&&USER_NAME'' ||''''''''||'' EVENTS =''||''''''''||'' 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 ''||''''''''); END;',
                            X_LEVEL_NAME  => 'USER',
                            X_LEVEL_VALUE => l_user_id);
  commit;

  dbms_output.put_line('Profile has updated successfully');
EXCEPTION
  when others then
    dbms_output.put_line('Failed to update the profile: '||sqlerrm);
END;

Execute this program to disable trace for a specific user: (substitute step 8 above)
DECLARE
  l_ret     boolean;
  l_user_id number;
BEGIN

  select user_id
    into l_user_id
    from fnd_user
   where user_name = '&USER_NAME';

  l_ret := fnd_profile.DELETE(X_NAME        => 'FND_INIT_SQL',
                              X_LEVEL_NAME  => 'USER',
                              X_LEVEL_VALUE => l_user_id);
  commit;

  dbms_output.put_line('Profile has erased successfully');
EXCEPTION
  when others then
    dbms_output.put_line('Failed to erase the profile: '||sqlerrm);
END;


Friday, 22 March 2013

How To Find The List Of Responsibilities Assigned To User


This quary will help us out.

SELECT frt.RESPONSIBILITY_NAME, furg.START_DATE
FROM
fnd_user_resp_groups furg,
FND_RESPONSIBILITY fr,
fnd_responsibility_tl frt,
fnd_user fu
WHERE fu.user_name = :username
AND fu.user_id = furg.user_id
AND furg.responsibility_id = fr.RESPONSIBILITY_ID
AND frt.responsibility_id = fr.RESPONSIBILITY_ID
ORDER BY 1

Tuesday, 19 March 2013

How To Delete A Concurrent Program And Executable From Back End In Oracle Apps


Script to delete the concurrent program and executable from Oracle Apps:


Begin
fnd_program.delete_program('program short name','schema');
fnd_program.delete_executable('program short name','schema');
commit;
End; 

Example: If you have a concurrent Progam called "Employee Details Report" with the short name EMPDTLSREP and an Executable EMPDTLSEXE is associated with the concurrentprogram Employee Details Report in apps schema then use the script below to delete both the concurrent program and executable.

Begin
fnd_program.delete_program('EMPDTLSREP', 'apps' );
fnd_program.delete_executable('EMPDTLSEXE', 'apps' );
commit;
End; 

Note: The same concurrent program can be disable through from end if a user decides not to use it.

Script for deleting the datadefinition
------------------------------------------------>
BEGIN
XDO_DS_DEFINITIONS_PKG.DELETE_ROW('INV','NRGINTR');
END;
--------------------------------------------------------
--------------------------------------------------------
script for deleting the template 
------------------------------------------------------>
BEGIN
XDO_TEMPLATES_PKG.DELETE_ROW('INV','NRGINTR');
END;

EXCISE TAX” and “INDIA LOCALIZATION in Oracle



“Excise Tax” and “India Localization” – A simpler explanation.

Objective of this article:-
Explain “Excise” and related taxes in a simple way...
OR
The Fundamental concept behind how excise works…

Intended audience of this article:-
·              People who wish to get a generic idea on what “Excise” Tax and related topics are all about.
·              Oracle, SAP and other ERP consultants who wish to implement modules generally referred to as “India Localization” – and these are mostly software modules which involve recording and calculating taxes that a manufacturing organization has got to pay to the concerned authorities.

Now, one problem which tends to happen in the IT service sector, at least in India is this – the chap hired by the IT company would be either an engineering graduate or an MBA, and he/she never had “Taxes” as an academic topic
 (engg. grads, at least.. ). Consequently, their domain knowledge related to taxes ranges from very little to nothing at all. The next logical thing they’d do is search on the internet for any material which explains with simplicity as to how they work.

From how much I’ve tried, I’ve always ended up getting too much info!! The only problem was, the explanation invariably always seemed too complicated for me to grasp!!

However, I was fortunate.  I finally found a few people who did just that for me – they finally made me understand the topic!! A big thank you to them!! J

Just thought that I shall try and explain Excise Tax and related stuff in a generic way….. probably just try and explain the fundamental concept involved in it….. and that’s what I intend to do so here below….

So to Start :-

Let’s consider that there’s a manufacturing plant located close to your home, and they’re manufacturing a discrete product called “Finished Good”, or “FG” in short.

This FG that they manufacture is made using an item called “Raw Material”, or “RM” in short.

They perform a few operations on RM, and these operations convert this RM into FG. A simple representation of the same is as in this figure below:-


The obvious first step will be to buy RM…….

Let’s say that exactly 1 unit of FG needs to be manufactured. So, for doing this, the first activity that the manufacturing plant needs to do is buy exactly 1 unit of RM .

To be able to easily convert numbers into percentages, I’ll assume that the “assessable cost” of 1 unit of RM is Rs 100/-.

What do I mean by assessable cost? It can be described as the price that the supplier of RM wants to receive and keep for himself end of the day. The assessable price is the price which is absolutely free from any form of tax. Whatever tax needs to be calculated and paid, will be done so by considering this Rs 100/- as the base price.

Now, these two items that I’ve defined as RM and FG are “Excisable Items”. This means that a government authority called “Excise Authority.. “ already have a rule defined in their rule book which states that items RM and FG are standard items, and they would charge a tax on these two items called “Excise Duty”.

(Kindly note that all the numbers I’ve considered here are generic and are used only to explain a concept. The actual percentage of the tax could be different.)

Coming back to buying/ procuring of RM from the supplier, here below is a list of taxes that will be charged on it’s assessable cost of Rs 100/- per unit:-
1.        Basic Excise Duty (B.E.D) = 10% of Assessable Cost.
2.        Higher Education Cess (H.E.C) = 2% of Basic Excise Duty.
3.        Secondary Higher Education Cess (S.H.E.C) = 1% of Basic Excise Duty.
All three above taxes that I’ve defined are “Excise Taxes”. It’s just that they’re split into 3 components. Apart from this, generally there are about one or two more taxes which are known as VAT and CST.


VAT and CST are not “Excise” taxes. In general, VAT is a tax charged by the State Government and CST is a tax charged by the central government. . For simplicity purpose, we’ll forget them for now. As of now, I’ll consider all other taxes like VAT, CST, etc as non -existent. We’ll consider that, only the three taxes that I’ve mentioned above, are there.

When the Manufacturing Plant purchases 1 unit of RM from their supplier, they would receive a Bill which looks similar to this:-
ABC Supplier Ltd.
Sl No.
Item Name
Qty
Cost
Currency
1
RM
1
100
INR
10% Basic Excise Duty
10
INR
2% Higher Edu. Cess
0.2
INR
1% Sec. Higher Edu. Cess
0.1
INR
Total Bill Amount
110.3
INR


I believe the view of this bill is self explanatory. However, to prevent any sort of confusion, here's an explanation of the same:-
Cost of RM ("assessable value") = Rs 100/-
10% Basic Excise Duty is applied on Assessable vaue = 10% of Rs 100/- = Rs 10/-
2% Higher Edu. Cess is applied on the Basic Excise Duty = 2% of Rs 10/- = Rs 0.2/-
1% Sec. Higher Edu. Cess is applied, again on the Basic Excise Duty = 1% of Rs 10/- = Rs 0.1/-
So, the Total amount that the manufacturing plant is paying = Rs ( 100 + 10 + 0.2 + 0.1) = Rs 110.3/-

As you can see, out of Rs 110.3/-, Rs 10.3 is “excise tax” and Rs 100/- is the price of RM. But here, when the manufacturing plant is paying the above bill, they’d pay the full amount of Rs 110.3/- to the supplier. The point I’am trying to drive is, the manufacturing plant cannot tell the supplier that they’ll pay them Rs 100/- and pay up the remaining amount of Rs 10.3/- directly to the Excise Department. The manufacturing plant has got to trust the supplier that the Rs 10.3/- which he is paying to the supplier will inturn be paid to the “Excise Authority… “ by the supplier.

Now, considering that the purchase of RM by the manufacturing plant is completed, let’s assume that they take about 3 days to perform the required operations to convert  RM into a FG.

So, 3 days later, the FG is ready. Again, the process repeats. The manufacturing plant does their mathematics and decides that their “assessable cost” of FG is Rs 200/-
 (let’s assume for calculation purposes… ).

They’ve also found a customer who has found this “assessable” price of Rs 200/- to be competitive in the market and has decided to purchase it for this price.

As I said, the process repeats. The manufacturer sells the FG to their customer and gives them a bill which looks similar to the figure below:-
FG Manufacturer Ltd.
Sl No.
Item Name
Qty
Cost
Currency
1
FG
1
200
INR
10% Basic Excise Duty
20
INR
2% Higher Edu. Cess
0.4
INR
1% Sec. Higher Edu. Cess
0.2
INR
Total Bill Amount
220.6
INR


Now, the price that the customer pays to “FG Manufacturer Ltd.” is Rs 220.6/-. And out of this, Rs 20.6/- is the “Excise Tax”.

All apologies for being repetitive, but again, as you can see, this Rs 20.6/- is collected from the customer by the manufacturing plant. The end customer has just got to trust that the manufacturing plant pays up this money to the “Excise Authority.. “.

Whenever such buying of RM and selling of FG happens, it gets recorded as “transactions” by the accounts department of the manufacturing plant. Here, in this above example of a purchase of RM and a sale of FG, a total of two transactions have happened. To simplify things, I’ll assume that these two transactions are the only transactions that have happened in a duration of 1 month.(assume… )

In this case, the accounts department of the manufacturing plant will have recorded all the tax related transactions as shown in the tables below:-
Records of “Basic Excise Duty”:-
Basic Excise Duty
Paid (while purchasing items)
Received (while selling items)
Date
Item Name
Qty
Amount
Currency
Date
Item Name
Qty
Amount
Currency
dd/mm/yy
RM
1
10
INR
dd/mm/yy
FG
1
20
INR
Total Paid Amount
10
INR
Total Recieved Amount
20
INR

Records of “Higher Education Cess”:-
Higher Education cess
Paid (while purchasing items)
Received (while selling items)
Date
Item Name
Qty
Amount
Currency
Date
Item Name
Qty
Amount
Currency
dd/mm/yy
RM
1
0.2
INR
dd/mm/yy
FG
1
0.4
INR
Total Paid Amount
0.2
INR
Total Recieved Amount
0.4
INR


Records of “secondary Higher Education Cess”:-
Secondary Higher Education cess
Paid (while purchasing items)
Received (while selling items)
Date
Item Name
Qty
Amount
Currency
Date
Item Name
Qty
Amount
Currency
dd/mm/yy
RM
1
0.1
INR
dd/mm/yy
FG
1
0.2
INR
Total Paid Amount
0.1
INR
Total Received Amount
0.2
INR

Consider the “Basic Excise Duty” Table:-
Transactions like these keep getting recorded as and when they take place. At the end of a fixed period, lets say, 1 month, the manufacturing company has a record of “Total Paid Amount” and “Total Received Amount” in each category. This is the time when they decide to pay up the money they’ve collected as “taxes” from their customers.


“Excise Duty” = (Basic Excise Duty) + (Higher Education Cess) + (Secondary Higher Education Cess);   

Now, whatever I’m going to explain from here on is what this article is really all about. I shall use “Example Scenarios”  to explain the concept:-

EXAMPLE SCENARIO 1 :-

If we look at the “Basic Excise Duty” table, the “Total Received Amount” here is Rs 20/-. The “Total Received Amount” is essentially the amount received as tax by the manufacturing plant from the customer whenever they made a sale.

The next activity that the manufacturing company does, at the end of the month is send a cheque of Rs 20.6/- to the “Excise Authority.. “ .  The amount is Rs 20.6/- since, out of Rs 220.6/- , this amount of Rs 20.6/- was collected as “Excise Duty” to pay to the “Excise Authority.. “. And so, they’re sincerely sending a cheque of Rs 20.6/- to the “Excise Authority..” .


But if you notice, there is something wrong with this numerical value of Rs 20.6/-. 


What exactly is wrong? Let me explain. According to me, if the manufacturing plant sends a cheque amount of Rs 20.6/- to the “Excise Authority.. “ , then in my view, the “Excise Authority.. “ has acted very smart and has actually collected a total of Rs 30.9/- as “Excise Duty” for this particular product called “FG”.  And Rs 30/- as “Excise Duty”  for a product (FG) with an “assessable cost” of Rs 200/-, essentially makes the “Excise Duty” equal to 15%  of the “Assessable Cost”.


Q. What makes me think that “Excise Authority.. “ acted smart and has actually collected 15% instead of 10% as “Excise Duty”?
Answer: FG contains an item called RM, and the manufacturing plant has already paid a tax called “Excise Duty” for this item called RM.
To elaborate, When the manufacturing plant purchased the item called “RM” for the purpose of manufacturing FG, the manufacturing plant paid Rs 10.3/- there itself as “Excise Duty”. Even though they made the payment to “ABC Supplier”, they paid it with a belief that Rs 10.3/- out of the Rs 110.3/- will inturn be paid by “ABC Supplier” as “Excise Duty” to the “Excise Authory.. “. This form of payment of tax is generally referred to as “Indirect Tax”. Now, how sincerely “ABC Supplier” goes ahead and pays this Rs 10.3/- to “Excise Authority.. “ is not really something that the manufacturing plant is interested in knowing.

There is an error in Example Scenario 1.

EXAMPLE SCENARIO 2:-

At the end of 1 month, the manufacturing plant sends a cheque of Rs 10.3/- to “Excise authority.. “ to clear the total amount  remaining to be paid as “Excise Duty”.


If you see and are able to automatically give the reason why sending Rs 10.3/- as “Excise Duty” to the “Excise Authority.. “ solves this tax problem, then Congratulations!!
 J You’ve understood the concept!! J


However, I’ll still go ahead and explain Example Scenario 2.

“If any Finished Good that is manufactured, contains Raw Materials within it for which excise tax was paid during the purchase of Raw Materials, then those values of tax paid during the purchase of Raw Materials, can be subtracted from the total amount received as tax during sale of Finished Goods, and the value obtained on this subtraction, is the balance excise tax that the manufacturing plant has got to pay.” ( in my own words and NOT any textbook definition… )


I’ll admit that the above statement is slightly confusing. I looked at every possible way to simplify it, but I couldn’t.


So I’ll come back to my FG and RM example to explain the above statement:-
In my above example, the customer who is buying 1 unit of FG is paid a total of Rs 220.6/- to buy it.


This FG purchased contains 1 unit of RM in it. The Manufacturing Plant paid a total of Rs 110.3/- to buy 1 unit of RM. When the manufacturing plant paid Rs 110.3/-, they took a bill which clearly stated that a total of Rs 10.3/-  out of Rs 110.3/-  was tax. So, the accounts department of the manufacturing plant concluded that they’ve already paid a tax of Rs 10.3/- .
 (and yes, they have… indirectly though… ).  The accounts department records it in their books and their computer.
Next, the manufacturing plant sold 1 unit of FG for a price of Rs 220.6/-. While doing this, the manufacturing plant gave a bill stating that Rs 20.6/- out of Rs 220.6/- is tax.  So, the accounts department concludes that they now need to give a total of Rs 20.6/- as tax to concerned authorities. But then, they’ve already paid a tax of Rs 10.3/- while buying RM. So, the total amount remaining to be paid as tax, according to them, now is the value obtained when Rs 10.3/- is subtracted from Rs 20.6/-. That is:-

Manufacturing Plant:-
Sl No.
Description
Amount
(1)
Tax to be paid due to sale of FG
Rs 20.6/-
(2)
(minus) Tax already paid during purchase of RM
Rs 10.3/-
(3)
Balance Tax to be paid
Rs 10.3/-

So, now if the manufacturing plant pays Rs 10.3/- to the concerned authorities, they’re done with paying up all their taxes!! J

And that’s it!! 

CREATING A SUPPLIER IN R12 (Functional and SUPPLIERS IN TCA)

Who is a Supplier? Let us now understand who is a Supplier with the help of a simple example: We consider us as a business, who sell...