利用这种方式的优点是不需要跑请求就可以打印报表

工具包中常用程序说明

htp.print

语法   htp.print (cbuf | dbuf | nbuf);

作用   generates a line in an HTML document.

参数   cbuf in varchar2 or

dbuf in dateor

nbuf in number

Generates Generates a line in an HTML document based on the value passed to it.

htp.p 

Alias for htp.print 

Structure Tags 结构标记

The following tags are used to identify the major parts of an HTML 

document. 

Note: Although this section shows hypertext procedures (HTP), all of

them are also available as hypertext functions (HTF).

htp.htmlOpen 

语法   htp.htmlOpen;

作用   Prints a tag that indicates the beginning of an HTML document

ERP REPORT 

参数   none

Generates <HTML>

htp.htmlClose 

语法   htp.htmlClose;

作用   Prints a tag that indicates the end of an HTML document

参数   none

Generates </HTML>

htp.headOpen 

语法   htp.headOpen;

作用   Prints a tag that indicates the beginning of the HTML document head

参数   none

Generates <HEAD>

htp.headClose 

语法   htp.headClose;

作用   Prints a tag that indicates the end of the HTML document head

参数   none

Generates </HEAD>

htp.bodyOpen 

语法   htp.bodyOpen (cbackground, cattributes);

作用   Prints the tag that identifies the beginning of the body of an HTML document, and 

allows you to specify an image as the background of the document

参数   cbackground in varchar2 DEFAULT NULL 

cattributes in varchar2 DEFAULT NULL

Generates <BODY background="cbackground" cattributes>

Note: If cbackground and cattributes are NULL, this tag generates <BODY>. 

ERP REPORT 

Example htp.bodyOpen ('/img/background.gif');  This line produces:<BODY

background="background.gif">

htp.bodyClose 

语法   htp.bodyClose;

作用   Defines the end of the HTML document body

参数   none

Generates   </BODY>

Generates   <TITLE>ctitle</TITLE><Hnsize

ALIGN="calign" NOWRAP CLEAR="cclear" 

cattributes>ctitle</Hnsize>

Note that htp.htitle produces non-standard 

HTML. However, most Web Browsers accept 

it. To produce standard HTML, the <TITLE> 

tag must be in the HEAD section of the page, 

and the level heading tag (<H

n>) must be in the BODY section. For example: 

htp.headOpen; htp.title(...); 

htp.headClose; htp.bodyOpen; htp.header 

(1,...)); ...

Table Tags 表格标记

The Table tags allow the user to insert tables and manipulate the size 

and columns of the table in a document. 

Note: All the hypertext procedures (HTP) shown in this section are also

available as hypertext functions (HTF).

htp.tableOpen 

语法    htp.tableOpen (cborder, calign, cnowrap, cclear, cattributes); 

作用    Prints an HTML tag that begins an HTML table. 

参数    cborder in varchar2 DEFAULT NULL 

calign in varchar2 DEFAULT NULL 

cnowrap in varchar2 DEFAULT NULL 

cclear in varchar2 DEFAULT NULL 

cattributes in varchar2 DEFAULT NULL; 

Generates <TABLE BORDER NOWRAP ALIGN="calign" CLEAR="cclear" cattributes>

Note: The BORDER attribute is only determined by whether cborder is null 

or not null.

ERP REPORT

htp.tableClose 

语法    htp.tableClose; 

作用    Prints an HTML tag that ends an HTML table. 

参数    none

Generates </TABLE>

htp.tableRowOpen 

语法    htp.tableRowOpen (calign, cvalign,cdp, cnowrap, cattributes); 

作用    Prints an HTML tag that inserts a row tag into a table. 

参数    calign in varchar2 DEFAULT NULL 

cvalign in varchar2 DEFAULT NULL 

cdp in varchar2 DEFAULT NULL 

cnowrap in varchar2 DEFAULT NULL 

cattributes in varchar2 DEFAULT NULL

Generates <TR ALIGN="calign" VALIGN="cvalign" DP="cdp" NOWRAP catttributes>

htp.tableRowClose 

语法    htp.tableRowClose; 

作用    Prints an HTML tag that ends a row in a table. 

参数    none

Generates </TR>

htp.tableData 

语法    htp.tableData (cvalue, calign, cdp, cnowrap, cattributes); 

作用    Prints an HTML tag that inserts data into the rows and columns of a selected table. 

参数    cvalue in varchar2 DEFAULT NULL 

calign in varchar2 DEFAULT NULL 

cdp in varchar2 DEFAULT NULL 

cnowrap in varchar2 DEFAULT NULL 

cattributes in varchar2 DEFAULT NULL 

Generates <TD ALIGN="calign" DP="cdp" ROWSPAN="crowspan" COLSPAN="ccolspan" NOWRAP 

ERP REPORT 

cattributes>cvalue</TD>

包里面别的程序和用法可以查

http://www.lnu.edu.cn/book/oracleweb/ows402.htm

一个例子

<span style="font-size:18px;">PROCEDURE CUXTS001(
p_header_id IN VARCHAR2 default null,
p_org_id IN VARCHAR2 default null
)
AS
---declare the data source
------Report page parameters
v_row_num NUMBER;
v_first_flag NUMBER := 0; -----标志
x_count NUMBER; -------总行数
v_page_rows NUMBER := 1; ------定义每张报表的line数量
v_page_count NUMBER;
v_page_width NUMBER := 800;
v_font_size NUMBER := 2;
v_page_num NUMBER := 1;
v_line_count NUMBER := 0;
v_jes NUMBER := 0;
v_dis_no NUMBER := 0;
max_line NUMBER := 7;
----------------------------------------------------
t_qty NUMBER := 0;
t_amount NUMBER := 0;
x_org_name VARCHAR2 (100);
x_sum_count_no NUMBER := 0;
----采购题头
CURSOR c_header
IS
SELECT pha.segment1 po_num,
pha.po_header_id,
pha.type_lookup_code,
pha.agent_id,
pha.comments,
ppf.full_name full_name,
pha.creation_date,
ERP REPORT
pv.vendor_id,
SUBSTR (pv.vendor_name, 1, 38) vendor_name
FROM po_headers_all pha,
po_vendors pv,
per_people_f ppf
WHERE pha.vendor_id = pv.vendor_id
AND pha.agent_id = ppf.person_id
AND pha.org_id = TO_NUMBER (p_org_id)
AND pha.po_header_id = p_header_id;
----行信息
CURSOR c_line (x_header_id NUMBER)
IS
SELECT pda.destination_subinventory,
pll.quantity,
pla.line_num,
pla.unit_meas_lookup_code,
pla.unit_price,
pla.item_description item_desc,
pll.quantity * pla.unit_price amount,
pla.po_header_id,
pll.shipment_num,
msi.segment1 item,
pll.need_by_date need_by,
pll.ship_to_organization_id,
pll.promised_date,
pll.note_to_receiver,
ood.organization_code
FROM po_lines_all pla,
po_distributions_all pda,
po_line_locations_all pll,
mtl_system_items_b msi,
financials_system_params_all fsp,
org_organization_definitions ood
WHERE pla.po_line_id = pda.po_line_id
AND pll.line_location_id = pda.line_location_id
AND (pll.closed_code = 'OPEN' OR pll.closed_code IS NULL)
AND pla.item_id = msi.inventory_item_id(+)
AND pla.po_header_id = x_header_id
AND NVL (msi.organization_id, fsp.inventory_organization_id) =
fsp.inventory_organization_id
ERP REPORT
AND fsp.org_id = p_org_id
AND pll.ship_to_organization_id = ood.organization_id(+)
;
BEGIN
fnd_client_info.set_org_context(p_org_id);
HTP.htmlopen;
HTP.p ('<head>');
HTP.p ('<STYLE>');
HTP.p (' P { page-break-before: always }');
HTP.p ('</STYLE>');
HTP.p ('</head>');
HTP.bodyopen;
FOR lc_h IN c_header
LOOP
---title2
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=15 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| 3
|| '"> <b><U>采 购 单 据</b></U>',
cattributes=> 'width="16%"',
calign=> 'center'
);
HTP.tablerowclose;
HTP.tableclose;
---header
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=4 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff" height="8"');
ERP REPORT
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> 采购单号:'
|| lc_h.po_num,
cattributes=> 'width="15%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> 采购类型:'
|| lc_h.type_lookup_code,
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> 采购日期:'
|| TO_CHAR (lc_h.creation_date, 'YYYY/MM/DD'),
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">采购员:'
|| lc_h.full_name,
cattributes=> 'width="15%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=4 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">供应商:'
ERP REPORT
|| lc_h.vendor_name,
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=2 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">备注:'
|| lc_h.comments,
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
-- line
BEGIN
HTP.tableopen (
cattributes=> 'border="1" borderColorDark="#FFFFFF"
borderColorLight="#000000" cellPadding="0" cellSpacing="0" width='
|| v_page_width
|| ' '
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 项目</b></font>',
calign=> 'center',
cattributes=> 'width=18%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 货物名称</b></font>',
ERP REPORT
calign=> 'center',
cattributes=> 'width=22%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 单位</b></font>',
calign=> 'center',
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 采购单价</b></font>',
calign=> 'center',
cattributes=> 'width=8%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 数量</b></font>',
calign=> 'center',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 金额</b></font>',
calign=> 'center',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 需要日期</b></font>',
calign=> 'center',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b> 仓库</b></font>',
calign=> 'center',
cattributes=> 'width=8%'
ERP REPORT
);
HTP.tablerowclose;
SELECT COUNT (pla.po_line_id)
INTO v_jes
FROM po_lines_all pla,
po_distributions_all pda,
po_line_locations_all pll,
mtl_system_items_b msi,
financials_system_params_all fsp,
org_organization_definitions ood
WHERE pla.po_line_id = pda.po_line_id
AND pll.line_location_id = pda.line_location_id
AND (pll.closed_code = 'OPEN' OR pll.closed_code IS NULL)
AND pla.item_id = msi.inventory_item_id(+)
AND pla.po_header_id = lc_h.po_header_id
AND NVL (msi.organization_id, fsp.inventory_organization_id) =
fsp.inventory_organization_id
AND fsp.org_id = p_org_id
AND pll.ship_to_organization_id = ood.organization_id(+);
FOR lc_l IN c_line (lc_h.po_header_id)
LOOP
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.item,
calign=> 'left',
cattributes=> 'width=16%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.item_desc,
calign=> 'left',
cattributes=> 'width=22%'
ERP REPORT
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.unit_meas_lookup_code,
calign=> 'left',
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.unit_price,
calign=> 'right',
cattributes=> 'width=12%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.quantity,
calign=> 'right',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.amount,
calign=> 'right',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
ERP REPORT
|| '"> '
|| '&'
|| 'nbsp'
|| TO_CHAR (lc_l.PROMISED_DATE, 'YYYY/MM/DD'),
calign=> 'center',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.organization_code,
calign=> 'center',
cattributes=> 'width=6%'
);
t_qty := t_qty
+ lc_l.quantity;
t_amount := t_amount
+ lc_l.amount;
END LOOP;
v_jes := max_line
- v_jes;
LOOP
EXIT WHEN v_jes <= 0;
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp'|| ' ' ,
calign=> 'center',
cattributes=> 'width=18%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
ERP REPORT
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=22%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=8%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
ERP REPORT
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=8%'
);
v_jes := v_jes
- 1;
END LOOP;
--sum
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '合计',
calign=> 'center',
cattributes=> 'width=18%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=22%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
ERP REPORT
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp',
calign=> 'center',
cattributes=> 'width=8%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| t_qty,
calign=> 'right',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp' || ' '
|| t_amount,
calign=> 'right',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp' || ' ',
calign=> 'right',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
ERP REPORT
|| '&'
|| 'nbsp' || ' ',
calign=> 'right',
cattributes=> 'width=8%'
);
HTP.tablerowclose;
HTP.tableclose;
END;
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=8 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> 打印人:',
cattributes=> 'width="10%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">部门主管:',
cattributes=> 'width="10%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">总经理:',
cattributes=> 'width="10%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
END LOOP;
HTP.tableclose;
HTP.bodyclose;
HTP.htmlclose;
END; </span>

开发好后注册程序:

路径:系统管理员->安全性->WEB PL/SQL

利用HTP工具包开发报表-LMLPHP

利用HTP工具包开发报表-LMLPHP

然后在需要的地方调用就可以直接打印出报表

DECLARE
v_command VARCHAR2 (200);
v_org_id NUMBER := fnd_profile.VALUE ('ORG_ID');
BEGIN
v_command := fnd_profile.VALUE ('APPS_WEB_AGENT');
v_command := v_command || '/CUXTS001?p_header_id=' || :submit.header_id;
v_command := v_command || '&p_org_id=' || TO_CHAR (v_org_id);
web.show_document (v_command, '_blank');
END;

04-14 08:40