You are on page 1of 19

Excel Reporting through PLSQL

07-Jun-2013

Raj Kumar Vishwakarma


Oracle Apps R12 –IR SMART Transformation Team

rajkumar.vishwakarma@tcs.com
Table of Content

1. Background - Excel Report through PLSQL ............................................................................................................... 3


2. Steps to Develop Excel Report .................................................................................................................................. 4
2.1 Analyze the Requirement and Prepare the Layout ........................................................................................... 4
2.2 Prepare PLSQL Package ......................................................................................................................................... 10
2.3 AOL Registration ................................................................................................................................................... 12
2.3 Setup for Excel Reporting...................................................................................................................................... 13
2.4 Test the Report ..................................................................................................................................................... 16
2.4 Debug .................................................................................................................................................................... 16
2.5 For Reference: Code............................................................................................................................................. 17
3. Summary ................................................................................................................................................................. 18

2
1. Background - Excel Report through PLSQL
There are various tools and technique to develop for Report in Oracle Apps. Like Oracle Report, XML Publisher
Report, Discoverer Report etc...

In this approach we will use Microsoft excel for layout preparation, and saving excel as XML spreadsheet. And use
the xml code in PLSQL to generate the report.

Advantages of Using Excel Reports

Microsoft Excel is the most widely used Spreadsheet application in the world. Some of the advantages of using Excel
reports over other alternatives [like HTML, PDF etc.] are:
 The report generated can contain rich formats like Multiple Worksheets, Formulas, and so on.
 Quickly, intuitively filter large amounts of information. You can apply Freeze Panes, color formatting and
other utility provided by excel.
 The end-user can use the Data Visualization power of MS Excel to manipulate the generated reports.
For example, the end-user can generate several charts to analyze and understand the sales numbers in a
product Sales report.
 The popularity of MS Excel guarantees that the end-user is already familiar with using MS Excel.

3
2. Steps to Develop Excel Report

2.1 Analyze the Requirement and Prepare the Layout


I am taking example of “Move Orders Aging Report”. Suppose we need below layout report.

The next step is to develop the same layout in Microsoft Excel

And save the file as XML Spread Sheet.

Now Layout is ready.


Open the created file in text pad/edit plus or any other text editor.

4
For understanding purpose, we divided the xml file into three different sections Header Section, Data Section and
Footer Section
Note: Set the attribute in xml ExpandedColumnCount="66000" and ExpandedRowCount="66000" (Max Limit of
Row and Columns)
Header Section
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>485410</Author>
<LastAuthor>485410</LastAuthor>
<Created>2012-10-05T08:59:15Z</Created>
<Company>TCSL</Company>
<Version>12.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>4560</WindowHeight>
<WindowWidth>15135</WindowWidth>
<WindowTopX>120</WindowTopX>
<WindowTopY>45</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s80">
<Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="16" ss:Color="#000000"

5
ss:Bold="1"/>
<Interior ss:Color="#92D050" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s98">
<Alignment ss:Vertical="Top"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
<Interior ss:Color="#E6B9B8" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s99">
<Alignment ss:Vertical="Top" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
<Interior ss:Color="#E6B9B8" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s100">
<Alignment ss:Vertical="Top" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Color="#000000"/>
<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s101">
<Alignment ss:Vertical="Top" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"

6
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Color="#000000"/>
<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s102">
<Alignment ss:Vertical="Top" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Color="#000000"/>
<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
<NumberFormat ss:Format="General Date"/>
</Style>
<Style ss:ID="s105">
<Alignment ss:Vertical="Top" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Color="#000000"/>
<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Names>
<NamedRange ss:Name="_FilterDatabase" ss:RefersTo="=Sheet1!R2C1:R2C12"
ss:Hidden="1"/>
</Names>
<Table ss:ExpandedColumnCount="66000" ss:ExpandedRowCount="66000" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="15">
<Column ss:Width="109.5"/>
<Column ss:Width="41.25"/>
<Column ss:Width="61.5"/>
<Column ss:Width="51.75"/>

7
<Column ss:Width="41.25"/>
<Column ss:Width="42.75"/>
<Column ss:Width="70.5"/>
<Column ss:Width="72.75"/>
<Column ss:Width="114.75"/>
<Column ss:Width="58.5"/>
<Column ss:Width="135.75"/>
<Column ss:Width="161.25"/>
<Row ss:Height="21">
<Cell ss:MergeAcross="11" ss:StyleID="s80"><Data ss:Type="String">Move Orders Aging
Report</Data></Cell>
</Row>
<Row ss:Height="25.5">
<Cell ss:StyleID="s98"><Data ss:Type="String">Move Order RequestNo#</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Line No#</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Item Number</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s98"><Data ss:Type="String">Description</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s98"><Data ss:Type="String">Quantity</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s98"><Data ss:Type="String">Unit Cost</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s98"><Data ss:Type="String">Extended Value</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Requested Time </Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Move Ordered Transacted Time</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Elapsed Time </Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Source Locator Details to Move From</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
<Cell ss:StyleID="s99"><Data ss:Type="String">Customer Locator Details to Move To</Data><NamedCell
ss:Name="_FilterDatabase"/></Cell>
</Row>

Data Section

<Row>
<Cell ss:StyleID="s100"><Data ss:Type="Number">10011</Data></Cell>
<Cell ss:StyleID="s101"><Data ss:Type="Number">1</Data></Cell>
<Cell ss:StyleID="s100"><Data ss:Type="String">SAH-1</Data></Cell>
<Cell ss:StyleID="s100"><Data ss:Type="String">N/A</Data></Cell>

8
<Cell ss:StyleID="s101"><Data ss:Type="Number">10</Data></Cell>
<Cell ss:StyleID="s101"><Data ss:Type="Number">1</Data></Cell>
<Cell ss:StyleID="s101"><Data ss:Type="Number">10</Data></Cell>
<Cell ss:StyleID="s102"><Data ss:Type="DateTime">2012-08-03T23:59:00.000</Data></Cell>
<Cell ss:StyleID="s102"><Data ss:Type="DateTime">2012-08-03T16:33:44.000</Data></Cell>
<Cell ss:StyleID="s101"><Data ss:Type="String">-8:34:44</Data></Cell>
<Cell ss:StyleID="s105"><Data ss:Type="String">XXXX</Data></Cell>
<Cell ss:StyleID="s105"><Data ss:Type="String">YYYYY</Data></Cell>
</Row>

Footer Section

</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Print>
<ValidPrinterInfo/>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>11</ActiveRow>
<ActiveCol>10</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
<AutoFilter x:Range="R2C1:R2C12"
xmlns="urn:schemas-microsoft-com:office:excel">
</AutoFilter>
</Worksheet>
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="15">
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>

9
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet3">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="15">
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>

2.2 Prepare PLSQL Package

Package Specification
CREATE OR REPLACE PACKAGE APPS.XXTEST_EXCEL_RPT_POC authid definer
AS
PROCEDURE p_main_prc(p_retcode OUT NUMBER,
p_errbuff OUT VARCHAR2,
P_ORG_ID NUMBER
);
PROCEDURE p_header_prc;
PROCEDURE p_footer_prc;
END XXTEST_EXCEL_RPT_POC;
/

Package Body

CREATE OR REPLACE PACKAGE BODY APPS.XXTEST_EXCEL_RPT_POC


AS
PROCEDURE p_main_prc( p_retcode OUT NUMBER,
p_errbuff OUT VARCHAR2,
P_ORG_ID NUMBER
)
IS
l_text Varchar2(32767);
CURSOR cur

10
IS
SELECT MTRH.REQUEST_NUMBER,MTRL.LINE_NUMBER,
MSIB.SEGMENT1 ITEM_NUMBER,
MSIB.DESCRIPTION ITEM_DESCRIPTION,
MTRL.PRIMARY_QUANTITY,
CIC.ITEM_COST UNIT_COST,
NVL(MTRL.PRIMARY_QUANTITY,0)*NVL(CIC.ITEM_COST,0) EXTENDED_VALUE,
TO_CHAR(MTRL.DATE_REQUIRED,'DD-MON-RRRR HH24:MI:SS') DATE_REQUIRED,
TO_CHAR(MMT.TRANSACTION_DATE,'DD-MON-RRRR HH24:MI:SS') TRANSACTION_DATE,
(
FLOOR(((MMT.TRANSACTION_DATE-MTRL.DATE_REQUIRED)*24*60*60)/3600)
|| ':' ||
FLOOR((((MMT.TRANSACTION_DATE-MTRL.DATE_REQUIRED)*24*60*60) -
FLOOR(((MMT.TRANSACTION_DATE-MTRL.DATE_REQUIRED)*24*60*60)/3600)*3600)/60)
|| ':' ||
ROUND((((MMT.TRANSACTION_DATE-MTRL.DATE_REQUIRED)*24*60*60) -
FLOOR(((MMT.TRANSACTION_DATE-MTRL.DATE_REQUIRED)*24*60*60)/3600)*3600 -
(FLOOR((((MMT.TRANSACTION_DATE-MTRL.DATE_REQUIRED)*24*60*60) -
FLOOR(((MMT.TRANSACTION_DATE-
MTRL.DATE_REQUIRED)*24*60*60)/3600)*3600)/60)*60) ))
) ELAPSED_TIME,
MMT.SUBINVENTORY_CODE,
NVL2(FROM_LOC.CONCATENATED_SEGMENTS, MMT.SUBINVENTORY_CODE ||':'||
FROM_LOC.CONCATENATED_SEGMENTS, MMT.SUBINVENTORY_CODE
) FROM_LOCATOR,
MMT.TRANSFER_SUBINVENTORY,
NVL2(TO_LOC.CONCATENATED_SEGMENTS, MMT.TRANSFER_SUBINVENTORY ||':'||
TO_LOC.CONCATENATED_SEGMENTS, MMT.TRANSFER_SUBINVENTORY
) TO_LOCATOR
FROM MTL_TXN_REQUEST_HEADERS MTRH,
MTL_TXN_REQUEST_LINES MTRL,
MTL_SYSTEM_ITEMS_B MSIB,
CST_ITEM_COSTS CIC,
MTL_MATERIAL_TRANSACTIONS MMT,
MTL_ITEM_LOCATIONS_KFV FROM_LOC,
MTL_ITEM_LOCATIONS_KFV TO_LOC
WHERE MTRH.HEADER_ID = MTRL.HEADER_ID
AND MSIB.INVENTORY_ITEM_ID = MTRL.INVENTORY_ITEM_ID
AND MSIB.ORGANIZATION_ID = MTRL.ORGANIZATION_ID
AND CIC.INVENTORY_ITEM_ID(+) = MTRL.INVENTORY_ITEM_ID
AND CIC.ORGANIZATION_ID(+) = MTRL.ORGANIZATION_ID
AND CIC.COST_TYPE_ID(+) = 1
AND MMT.MOVE_ORDER_LINE_ID(+) = MTRL.LINE_ID
AND FROM_LOC.INVENTORY_LOCATION_ID(+) = MMT.LOCATOR_ID
AND FROM_LOC.INVENTORY_LOCATION_ID(+) = MMT.TRANSFER_LOCATOR_ID
AND TO_LOC.INVENTORY_LOCATION_ID(+) = MMT.LOCATOR_ID
AND TO_LOC.INVENTORY_LOCATION_ID(+) = MMT.TRANSFER_LOCATOR_ID
AND MTRH.ORGANIZATION_ID = P_ORG_ID
AND rownum<=10
;
BEGIN
FND_FILE.PUT_LINE(FND_FILE.log,'Inside Main Procedure');

p_header_prc();

l_text := NULL;
FOR rec_cur IN cur
LOOP
l_text :=
'<Row>'||
'<Cell ss:StyleID="s100"><Data ss:Type="Number">'||rec_cur.REQUEST_NUMBER||'</Data></Cell>'||
'<Cell ss:StyleID="s101"><Data ss:Type="Number">'||rec_cur.LINE_NUMBER||'</Data></Cell>'||
'<Cell ss:StyleID="s100"><Data ss:Type="String">'||rec_cur.ITEM_NUMBER||'</Data></Cell>'||
'<Cell ss:StyleID="s100"><Data ss:Type="String">'||rec_cur.ITEM_DESCRIPTION||'</Data></Cell>'||
'<Cell ss:StyleID="s101"><Data ss:Type="Number">'||rec_cur.PRIMARY_QUANTITY||'</Data></Cell>'||
'<Cell ss:StyleID="s101"><Data ss:Type="Number">'||rec_cur.UNIT_COST||'</Data></Cell>'||

11
'<Cell ss:StyleID="s101"><Data ss:Type="Number">'||rec_cur.EXTENDED_VALUE||'</Data></Cell>'||
'<Cell ss:StyleID="s102"><Data ss:Type="String">'||rec_cur.DATE_REQUIRED||'</Data></Cell>'||
'<Cell ss:StyleID="s102"><Data ss:Type="String">'||rec_cur.TRANSACTION_DATE||'</Data></Cell>'||
'<Cell ss:StyleID="s101"><Data ss:Type="String">'||rec_cur.ELAPSED_TIME||'</Data></Cell>'||
'<Cell ss:StyleID="s105"><Data ss:Type="String">'||rec_cur.FROM_LOCATOR||'</Data></Cell>'||
'<Cell ss:StyleID="s105"><Data ss:Type="String">'||rec_cur.TO_LOCATOR||'</Data></Cell>'||
'</Row>';
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_text);

END LOOP;

p_footer_prc();
EXCEPTION
WHEN OTHERS THEN
NULL;
END p_main_prc;

PROCEDURE p_header_prc
IS
l_text Varchar2(32767);
BEGIN
FND_FILE.PUT_LINE(FND_FILE.log,'Inside Header Procedure');

l_text := '<Here Copy the text from Header Section>';


FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_text);
END;

PROCEDURE p_footer_prc
IS
l_text Varchar2(32767);
BEGIN
FND_FILE.PUT_LINE(FND_FILE.log,'Inside Footer Procedure');

l_text := '<Here Copy the text from Footer Section>';


FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_text);
END;

About the Package Body

In the package body p_main_prc is the main procedure. Inside the main procedure calling Header
Procedure First then preparing data section then calling footer procedure.
Basically we trying to prepare the xml file into text variable and sending it to FND_FILE.OUTPUT

So when we run concurrent program as an output of concurrent program we will get XML Spread Sheet in
the form of Excel.

2.3 AOL Registration

Register Concurrent Program Executable

12
Register Concurrent Program

Attach the Concurrent Program to the respective Request Group

2.3 Setup for Excel Reporting

Navigate to System Administrator > Install > Viewer Options

13
Type the following in “MIME Type” and Give Description for “Excel”

Mime Type: application/vnd.ms-excel

Add the row in Viewer Option if Mime Type is not setup.

14
Now Navigate to System Administration > System

Type %Viewer% in Profile and find

Select Profile Viewer: Application for HTML and select Excel From the list of Values in Site Level .

15
2.4 Test the Report

Submit concurrent program from respective responsibility

View the Concurrent Program “XX Excel Report Demo” Output. Save the excel on local machine.

2.4 Debug
If you are facing any issues while opening excel file and getting error pop. Then go to the path mentioned in pop a
log file generated. Check the log and take appropriate action.

16
Eg. File path: “c:\Documents and Settings\485410.S1VPN\Local Settings\Temporary Internet Files\Content.MSO\“

Log File Content


XML ERROR in Table
REASON: Bad Value
FILE: C:\Documents and Settings\485410.S1VPN\Desktop\Excel Report Demo\Demo\Report Layout1.xml
GROUP: Row
TAG: Cell
ATTRIB: StyleID
VALUE: s7

XML ERROR in Worksheet Setting


REASON: Bad Value
FILE: C:\Documents and Settings\485410.S1VPN\Desktop\Excel Report Demo\Demo\Report Layout1.xml
GROUP: Worksheet
TAG: Table
ATTRIB: ExpandedColumnCount
VALUE: 12

2.5 For Reference: Code

PLSQL Package: Report Layout:

17
3. Summary

Excel report is very convenient for Business Analyst kind of users. And we can fulfill complex design using this
method with minimum efforts. Instead of complex logic put it into the code. Maintenance of such kind of report is
little bit tricky but manageable.

18
Thank You

Contact

For more information, contact rajkumar.vishwakarma@tcs.com

About Tata Consultancy Services (TCS)

Tata Consultancy Services is an IT services, consulting and business solutions


organization that delivers real results to global business, ensuring a level of certainty no
other firm can match. TCS offers a consulting-led, integrated portfolio of IT and IT-
enabled infrastructure, engineering and assurance services. This is delivered through its
unique Global Network Delivery ModelTM, recognized as the benchmark of excellence in
software development. A part of the Tata Group, India’s largest industrial conglomerate,
TCS has a global footprint and is listed on the National Stock Exchange and Bombay
Stock Exchange in India.

For more information, visit us at www.tcs.com.

IT Services
Business Solutions
Outsourcing

All content / information present here is the exclusive property of Tata Consultancy Services Limited (TCS). The content /
information contained here is correct at the time of publishing. No material from here may be copied, modified,
reproduced, republished, uploaded, transmitted, posted or distributed in any form without prior written permission from
TCS. Unauthorized use of the content / information appearing here may violate copyright, trademark and other applicable
laws, and could result in criminal or civil penalties. Copyright © 2011 Tata Consultancy Services Limited

You might also like