utl_file包的使用

首先看一下oracle 脚本

/* # $Header: HTMomse12.sql 12.0.4                                  20121015    Support $

#+======================================================================================+
#|  Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA               |
#|   Oracle Support Services.  All rights reserved                                      |
#+======================================================================================+

#========================================================================================
#  PURPOSE:		This script will collect information related to a sales order
#			transaction and it's Workflow processes. This script should be
#			run whenever there are problems related to a sales order
#			transaction, including processes like Pick Release, Shipping,
#			Invoice interface.
#
#  FILE NAME:		HTMomse12.sql
#  FILE VERSION:	12.0.4
#  PRODUCT: 		Oracle Order Management
#  PRODUCT VERSIONS: 	12.0 (and above)
#  PLATFORM: 		Generic
#  PARAMETERS:		Order_Number, Header_Id (opt), Line_Id (opt)
#========================================================================================

#  USAGE: 	sqlplus apps/apps @HTMomse12.sql
#
#  This script requires a header_id to be passed in as a parameter ONLY if there are
#  multiple header_id's for the order requested.  If there is only one header_id returned
#  after inputting the order number, simply hit enter and this header_id will be assumed.
#
#  Entering a line_id is only required when you wish to have output for one order line.
#  Otherwise, hit enter without entering a line_id and all lines will be output in the
#  script.
#
#  The script writes to an output file named HTMomse12_<ordernumber>.html on DB Server
#  under 'utl_file_dir', this file may be viewed in any HTML browser.
#
*/

set term off;
/*
#=========================================================================================
# CHANGE HISTORY:
  This script is based on HTMomse11i version 7.5.1, for the complete
  change history please see HTMomse11i (Note 133464.1)

 From HTMomse11i:
 31-MAR-00 Created                                                   rnmercer
 12-DEC-00 Major modifications to the look of the report including   rnmercer
           abreviated column names for flags, etc.  A legend cross
           referencing the abreviations is included in the output.
           Got rid of the need to input the org_id. It is set via
           derived data from the header_id.
 17-MAY-01 Fix the line number to display all 5 numbers              rnmercer
           line.shipment.option.component.service
 05-DEC-01 Changed format of output filename as part of the iTar
           automated scripting initiative.                           rodavid
 13-JUN-02 Modified to change version numbering to match Repository  rodavid
 02-APR-04 Modified to create HTML output file and included basic
 14-APR-04 verifications to help the Analysis                        rijames
 14-APR-04 include table ONT_WF_SKIP_LOG on header and lines         rijames
 01-NOV-07 Changed output function from DBMS_OUTOUT for UTL_FILE,    rijames  Ver. 7.5
           due to size limitations on DBMS_OUTPUT function.
           Output file will now be located on DB Server under 'utl_file_dir'.
           Script will printout the filename and location.
           Added some columns as requested by Support.

 For HTMomse12:
 09-JAN-08 Created as copy of HTMomse11i 7.5.1                       rijames
 11-JAN-08 Modified set environment using rodavid script             rijames
           Exclude IC tables (for OPM) as now OPM information is
           contained on OM/WSH base tables.
 14-JAN-08 Corrected conditions for sections to use UPPER() when     rijames
           answer is provided on lower case.
 04-FEB-08 Move INVentory and OM Interface Flags after the Release   rijames  Ver 12.0.2
           status field.
           Correction on decode of the Hold Entity Code, label for
           code 'W' is changed to 'Warehouse' (from 'Workflow').
 06-FEB-08 Add outer join to MTL_SALES_ORDERS to print when Order    rijames
           Type definition has been deleted.
           Move Parameters summary to top of output.
           Modify to handle Orders with no lines, only Header
           information will be printed.
 07-FEB-08 Add Hostname on printout for ouput location.              rijames
 05-MAR-08 Add OPM fields on ORDER_LINES and most MTL queries,       rijames
           MTL_TRANSACTION_LOT_NUMBERS table included on MTL queries.
 06-SEP-11 Correct Header on RA_INTERFACE_TABLE field                rijames  Ver 12.0.3
           RAI.INTERFACE_LINE_ATTRIBUTE6  Line_ID_6 (was Line_ID_5)
 06-SEP-11 Add transaction date and transaction interface id to      rijames
           MTL_TRANSACTIONS_INTERFACE.
 06-SEP-11 Add transaction date to MTL_MATERIAL_TRANSACTIONS_TEMP.   rijames
 06-SEP-11 Add transaction date to MTL_MATERIAL_TRANSACTIONS.        rijames
 06-SEP-11 Add transaction date to MTL_UNIT_TRANSACTIONS.            rijames
 16-SEP-11 Add table MTL_SERIAL_NUMBERS.                             rijames
 22-SEP-11 Add option to All or only first 10 records from tables    rijames
           MTL_UNIT_TRANSACTIONS (MUT), WSH_SERIAL_NUMBERS (WSN)
           and MTL_SERIAL_NUMBERS
 26-SEP-11 Add multiple Close and Reopen of Output file, so in case  rijames
           of SQL failure only a few tables are not printed.
 29-SEP-11 Add additional fields to ORGANIZATIONS listing.           rijames
 17-OCT-11 Add 'SERIAL NUMBER Details' on Parameters Listing         rijames
 17-OCT-11 Modify title for column Transaction_Interface_Id  for     rijames
           table MTL_TRANSACTIONS_INTERFACE
 17-OCT-11 Modify title color for column INV_INTERFACED_FLAG  for    rijames
           table WSH_DELIVERY_DETAILS, also the title bar will be
           printed every 35 rows instead of every 50.
 16-NOV-11 Split printout for ORGANIZATIONS and ACCOUNTING PERIODS   rijames
 10-FEB-12 Correct print sequence on Order Lines (Ordered Item)      rijames
 10-FEB-12 Print Column Headers for Order Lines every 35 lines       rijames
 10-FEB-12 Modify query for ACCOUNTING PERIODS to include Period     rijames
           for lines not Shipped yet.
 14-MAR-12 Modify 'Serial Num. Details' title on Parameters Listing  rijames
 14-MAR-12 Add new close/open after ACCOUNTING PERIODS table         rijames
 04-MAY-12 Correct printout for 'UNPICKED LINES' table.              rijames
 11-OCT-12 Include WMS Rules tables.                                 rijames
 11-OCT-12 Include link to table WMS Rules on Tables Index.          rijames
 11-OCT-12 Change version to 12.0.4                                  rijames
 15-OCT-12 Include line number and Internal Result code on lines     rijames
           Workflow table
 15-OCT-12 Include Internal Result code on header Workflow table     rijames
 15-OCT-12 Correct OE_LINES FULFIL_QTY field printed                 rijames
 15-MAR-13 Set WMS Information to Default to 'N' as the file         rijames
           created is too extense.
 14-OCT-13 Sorting for Workflow lines corrected                      rijames
 14-OCT-13 Change Version numbering to include date .yymmdd          rijames
 24-MAR-14 Change SQL to obtain utl_file_dir value                   rijames
 24-MAR-14 Add field Source_line_set_id to Delivery Details query    rijames
 10-JUN-14 Correct WSH_DELIVERY_DETAILS (DET) table Headers          rijames
 10-JUN-14 Correct WSH_DELIVERY_DETAILS (CONTAINERS) columns order   rijames
 10-JUN-14 Add field Source Line Set Id to WSH_DELIVERY_DETAILS      rijames
#
#========================================================================================

References
----------
For documentation and white papers on the Order Management product suite go to Metalink,
http://metalink.us.oracle.com, click on Top Tech Docs button -> E-Business Suite: ERP ->
Distribution/Supply Chain -> OM Suite: Order Management.
*/

variable        v_order_num         varchar2(100);
variable        v_error             number;
variable        v_line_tot          number;
variable        v_line_cnt          number;
variable        sales_ord_id        number;
variable        v_op_unit           number;
variable        v_head_cnt          number;
variable        v_header_id         number;
variable        v_head_only         varchar2(1);

variable        r_line_t            varchar2(100);
variable        r_res_q             number;
variable        r_wdd               number;
variable        r_flag              varchar2(100);
variable        r_pro_na            varchar2(100);
variable        r_act_na            varchar2(100);
variable        r_result            varchar2(100);
variable        r_act_s             varchar2(100);
variable        r_error             number;
variable        is_opm              varchar2(2);

variable        all_or_top10        varchar2(100);

set arraysize 4;
set pagesize 58;
set term on;
set linesize 145;
set underline =;
set verify off;
set serveroutput on size 1000000;
set feedback off;

-- OE_ORDER_HEADERS
column HEADER_ID               format 99999999;
column ORGANIZATION_NAME       format A30;
column TYPE_ID                 format 99999999;
column TYPE_NAME               format A15;
column ORD_DATE_TYPE           format a15;
column ORD_NUM                 format 999999999;
column VERS                    format 9999;
column ORD_TYPE_ID             format 999999999;
column FLOW_CODE               format a22;
column CUST_NAME               format A20;
column CUST_ID                 format 999999999;
column SHIP_TO_ID              format 999999999;
column SHIP_TO                 format A12;
column SOLD_TO_ID              format 999999999;
column PO_NUMBER               format A09;
column DATE_ORD                format A15;
column PL_ID                   format 99999;
column PRICE_LIST_NAME         format A15;
column PL_NAME                 format A15;
column SHIP_PART               format A09;
column ORGANIZATION            format 9999999;
column WH_ID                   format 99999;
column DEMAND_CLASS            format A12;
column OP                      format A05;
column CN                      format A05;
column BK                      format A05;
column DRP_SHP                 format A07;
column CYCLE_ID                format 99999999;
column ORD_SRC_ID              format 99999999;
column TRANS_TYPE              format A12;
column CATEGORY                format A08;
column SP                      format A05;
column CAT                     format A06;

-- WF_NOTIFICATIONS
column TO_USER        format a22;
column ORIG_RECIP     format a10;
column RECIP_ROLE     format a10;
column MAIL_STAT      format a9;
column MESSAGE_NAME   format a25;
column SUBJECT        format a45;

-- OE_TRANSACTION_TYPES_ALL
column ORDER_TYPE_NAME         format A25;
column TYPE_NAME               format A15;
column CONSTANTOE              format A15;
column SHIP_PRIORITY           format A13;
column SYS_REQD                format A08;

--  OE_ORDER_LINES_ALL

column LINE_ID                 format 99999999;
column LINE                    format A08;
column LINE_NUM                format A08;
column LINE_CTG                format A09;
column CONFIG_HDR_ID           format B99999999;
column SSCHED                  format B9999;
column PRT_LINE_ID             format B99999999;
column ATO_LINE_ID             format B99999999;
column LNK_LINE_ID             format B99999999;
column SHP_LINE_ID             format B99999999;
column SRC_LINE_ID             format B99999999;
column SRV_LINE_ID             format B99999999;
column ITEM_ID                 format 99999999;
column ITEM                    format A17;
column ORD_Q                   format 999999.99;
column ORG_Q                   format 999999.99;
column REQ_Q                   format 999999.99;
column PRICE                   format $999999999.99;
column SHP_Q                   format 999999.99;
column Q_INC                   format 999999.99;
column SHN_Q                   format 999999.99;
column SHP_Q                   format 999999.99;
column FUL_Q                   format 999999.99
column RES_Q                   format 999999.99;
column INC_Q                   format 999999.99;
column CAN_Q                   format 999999.99;
column LN_SET_TY             format A11;
column SH_SET_TY             format A11;
column AR_SET_TY             format A11;
column REQUEST_D               format A15;
column SCHEDUL_D               format A15;
column SOURCE_TYPE             format A11;
column DEM_CLASS               format A10;
column LINE_DETAIL_ID          format 9999999999;
--column OPEN_FL                 format A07;
--column CANC_FL                 format A07;
--column BOOKED                  format A07;
column SH                      format A05;
column VD                      format A05;
column FF                      format A05;
column SUBINV                  format A10;
column SSC                     format A05;
column SI                      format A05;
column II                      format A05;
column INVC_INT_STAT           format A14;
column SHIPPABLE               format A08;
column TRANSACTABLE            format A08;
column RESERVABLE              format A08;
column RELEASED                format A08;
column FOR_REVENUE             format A08;
column DELIVERY                format 9999999999;

column SET_TYPE                format A15;
column SET_NAME                format A10;
column STATUS                  format A06;
column SCH_SHP_DT              format A10;
column SCH_ARV_DT              format A10;
column CARRIER                 format A15;
column SHIP_METHOD             format A15;

column wf_act_code             format a11;
column wf_result               format a9;
column hist_comments           format a45;
column hist_type               format a12;
-- column PRICE                   format $9999999999.99;

-- WORKFLOW TABLES
column ITEM_KEY                format A08;
column FLOW_PROCESS            format A22;
column RESULT_CODE             format A15;
column RESULT                  format A15;
column ASSIGNED_USER           format A10;
column ERROR_NAME              format A19;
column PROCESS_NAME            format A25;
column ACTIVITY_NAME           format A25;
column ERROR_ACTIVITY_NAME     format A31;
column ACT_STATUS              format A10;
column HEAD_ID                 format A08;
column LIN_ID                  format A08;
column NOTIF_ID                format 99999999;
column ERROR_NAME              format A14;
column ERR_RETRY_ROLE          format A14;
column ERR_RETRY_USER          format A14;
column BEGIN_DATE              format A18;
column END_DATE                format A18;

column ORD_TYPE_NAME           format A20;
column CONSTANTOE              format A12;
column DEMAND_ID               format 9999999999;
column PARDEM_ID               format 9999999999;
column DS_HEADER_ID            format 99999999;
column DS_LINE                 format A08;
column RSV_QTY                 format 9999999.99;
column SAT_QTY                 format 9999999.99;
column PND_QTY                 format 9999999.99;
column REQUIRD_D               format A15;
column TY                      format 99999;
column UP                      format 99999.99;
column MRP                     format 99999.99;
column ATP                     format 99999.99;
column PICKING_HEADER_ID       format 9999999999;
column PICK_SLIP               format 9999999999;
column BATCH_ID                format 99999999;
column STATUS_CODE             format A11;
column BATCH_NAME              format A30;
column PICKING_LINE_ID         format 9999999999;

column CONFIRMED               format A09;
column RA_INTERFACE            format A12;
column IN_INTERFACE            format A15;
column PICK_LN_DTL_ID          format 9999999999;
column SUBINVENTORY            format A12;
column REV                     format A05;
column LOT_NUMBER              format A15;
column SERIAL_NUMBER           format A20;
column LOCATION_ID             format 9999999999;
column ORG                     format A05;
column ATO                     format A05;
column OPT                     format A05;
column CFG                     format A05;
column SHIP_MC                 format A07;
column SHIP_SET                format 99999999;
column ITEM_TYPE               format A09;
column LINE_TYPE               format A09;
column ENTER                   format A10;
column CANCEL_ORD              format A10;
column CANCEL_LIN              format A10;
column CTG                     format A05;
column INCL                    format A05;
column CONF                    format A05;
column WIP_RSV                 format 9999999;
column WIP_COM                 format 9999999;
column COMP_CODE               format A10;
column SRC_TYP                 format 9999999;
column DEM_TYP                 format 9999999;
column WIP_ID                  format B99999999;
column JOB_NAME                format A15;
column JOB_STAT                format A12;
column UOM                     format A5;
column REL_FL                  format A06;
column SHIP_FL                 format A07;
column FOR_REV                 format A07;
column AUTOSCH                 format A06;
column DEP_NAME                format a10;
column ORG_ID                  format 99999;
column WSH_ID                  format 9999999;
column SOURCE_CD               format a12;
column STAT_CODE               format A11;
column CLOSED_DT               format A09;
column FREIGHT                 format A09;
column PLN_DEP_DT              format A10;
column ACT_DEP_DT              format A10;
column PLN_DEP_ID              format 9999999999;
column ACT_DEP_ID              format 9999999999;
column LOAD_ORD_FLG            format A12;
column DEL_SEL                 format A07;
column DEP_SEL                 format A07;
column REL_STAT                format A08;
column LIN_STAT                format A08;
column WIP_ENT_ID              format 9999999999;
column CONFIRM_D               format A09;
column INVC_STAT               format A10;
column INVC_INTF               format A10;
column SHIP_STAT               format A10;
column SHIP_INTF               format A10;
column LOT                     format A10;
column REV                     format A05;
column SERIAL_NUM              format A10;
column LOC_ID                  format 99999999;
column RESV_FL                 format A07;
column TRAN_FL                 format A07;
column SCHED_STAT                  format A10;
column INVOICE_TRIGGER             format A15;
column SOURCING_STATUS             format A15;
column INVOICING_STATUS            format A16;
column CANCELLED_FLAG              format A14;
column OPEN_FLAG                   format A09;
column CONSOLIDATION_STATUS_CODE   format A25;
column CONSOLIDATION_PREF_FLAG     format A23;
column PURCHASE_ORDER_NUM          format A18;

column DEL_ID                      format 9999999;
column DEL_NAME                    format A10;

-- PO_REQUISITION_INTERFACE_ALL
column AUTH_STATUS                 format A11;
column DEST_TYPE                   format A10;
column SRC_CODE                    format A11;
column SRC_TYPE_CODE               format A13;   

-- PO_REQUISITION_HEADERS_ALL
column REQ_NUMBER                  format A10;
column SUMMARY                     format A07;
column XFR_OE_FLAG                 format A11;
column REQ_TYPE                    format A11;
column ENABLED                     format A07;

column ITEM_DESC                   format A40;
column CANC                        format A05;
column ENC_FL                      format A06;
column RFQ                         format A05;
column SRC_TYPE                    format a09;
column SRC_ORG                     format 9999999;

-- PO_HEADERS
column PO_NUM                      format A06;

-- MTL_SUPPLY
column SUP_TYPE                    format a08;
-- MTL_RESERVATIONS
column SHIP_READY                  format A12;
column SS_TYPE_ID                  format A11;
-- WSH_TRIPS
column TRIP_ID                     format 9999999;
column TRIP_NAME                   format A10;
column PLND                        format A05;
column VEH_NUM                     format A10;
column CARR_ID                     format 9999999;
column DET_Q                       format 99999;
column DS_TYPE                     format 9999999;
column ROUTE_ID                    format 99999999;
column VEH_ORG_ID                  format 9999999999;

-- WSH_TRIP_STOPS
column STOP_ID                     format 99999999;
column SEQ_NUM                     format 9999999;
column STOP_LOC_ID                 format 99999999999;
column PLN_DEP_DATE                format A15;
column PLN_ARV_DATE                format A15;
column ACT_DEP_DATE                format A15;
column ACT_ARV_DATE                format A15;
column PEND_INTERF                 format A11;

-- WSH_DELIVERY_LEGS
column LEG_ID                      format 9999999;
column LOAD_TENDER_STAT            format A15;

-- WSH_NEW_DELIVERIES  DEL
column DEL_NAME                    format A12;
column BOOKING_NUM                 format A12;
column WAYBILL                     format A12;
column ACCEPTED                    format A15;
column PICKUP_DT                   format A15;
column DROPOFF_DT                  format A15;

-- WSH_DELIVERY_ASSIGNMENTS  ASG
column ACTIVE                      format A06;

-- WSH_DELIVERY_DETAILS
column REL_STATUS                  format A17;
column STA                         format 99999;
column STB                         format 99999;
column HOLD_CODE                   format A09;
column SMC                         format A05;
column SUB                         format A09;
column CUR_SUB                     format A09;
column ORG_SUB                     format A09;
column REV                         format A05;
column LOT                         format A05;
column SERIAL                      format A10;
column LOC_ID                      format 99999999;
column SHIP_METH                   format A10;
column OMI                         format A05;
column INI                         format A05;
column MVT_STATUS                  format A10;
column INV_INT                     format A07;
column CONT_NAME                   format A15;
column CONT_TYPE                   format A10;
column UNIT_NUM                    format A08;
column CONTAINER                format A09;
column REQ_DATE                 format A15;
column MVT_STAT                 format A08;
column DEL_DET_ID               format 9999999999;
column RELEASE_STAT             format A15;
column REQ_Q                    format 999999.99;
column DLV_Q                    format 999999.99;
column SRQ_Q                    format 999999.99;
column BO_Q                     format 999999.99;
--column CAN_QTY                  format 9999999;
column SHIP_TO_ID               format 999999999;
column LINE_REQ_QTY             format 999999999999;
column TYPE                     format A05;
column MO_LINE_ID               format 9999999999;
column DELIV_ID                 format 999999999;
column SH_FROM_ID               format 999999999;
column SH_TO_ID                 format 99999999;

--WSH_PICK_SLIP_V
column LINE_STAT                format A11;
column FROM_SUB                 format A09;
column TO_SUB                   format A09;
column DETL_DATE                format A15;

column LINE_STATUS              format A11;

--MTL_TXN_REQUEST_LINES_V
column REQ_NUM                  format A10;
column MV_LINE_STAT             format A14;
column MO_NUMBER                format A09;
column MOVE_TYPE_NAME           format A14;
column TRNS_SRC_TYPE            format A13;
column TRNS_TYPE_NAME           format A30;
column TRNS_ACTION              format A15;
column LOT_NUM                  format A10;

--MTL_MATERIAL_TRANSACTIONS_TEMP
column ERROR_EXPL               format A10;
-- RA_CUSTOMER_TRX
-- RA_CUSTOMER_TRX_LINES
column ORD_LINE_NUM             format 999999999999;
column TRX_NUMBER               format A10;
column CONTEXT                  format A12;
column Order_Num_1              format A11;
column Order_Type_2             format A12;
column Delivery_3               format A10;
column WayBill_4                format A09;
column Line_ID_5                format A09;
column Pick_Line_Id_7           format A14;
column Bill_Lading_8            format A13;
column Warehouse_10             format A12;
column SOURCE                   format A30;
column TAX_FL                   format A06;    

column QTY_ORD                  format 9999999.99;
column QTY                      format 9999999.99;
column ORD_LINE_NUM             format A12;
column HEAD_CAT                 format A8;
column CURR                     format A4;
column TAX_EX_FL                format A09;
column TERR_SEG1                format A09;
column TERR_SEG2                format A09;
column TERR_SEG3                format A09;

column MESSAGE_TEXT             format A145;
column INVALID_VALUE            format A30;

column STATUS                   format a8;

column   ERR_TYPE_KEY      format a14;
column   ASGND_USER        format a10;
column   ERR_PROCESS_NAME  format a18;
column   ERR_ACTIVITY_NAME format a22;

column hold_name format a22;
column hold_type format a12;
column WF_ACTIVITY format a15;
column ENTITY format a8;
column ENTITY2 format a8;
column HOLD_UNTIL format a18;
column RELEASE_REASON format a14;
column H_REL format a5;
column S_REL format a5;

column AF             format A5;
column LIST_TYPE_CODE format a14;
column UA             format A5;
column UF             format A5;
column AP             format A5;
column ARITH_OP       format a8;
column TAX_CODE       format a12;
column INF            format A5;
column EF             format A5;
column CHG_TY_CD      format a9;
column AC             format A5;
column PI             format A5;
column CD             format A5;
column LIST_LN_NO     format a10;
column LK             format 99999;
column PP             format 99999;
column MOD_LVL        format a7;
column PERC           format 9999;

column STATUS         format a6;

column msg_Source     format a14;  

column error          format a30;
column ITEM_DESC      format a25;
column PRICE          format $999999999.99

column REQ_NUM_IK     format A9;

column ACCEPT_REQD    format A10;
column CLS_STAT       format A08;
column CONF_ORD       format A08;
column CURR_CODE      format A05;
column ENABLED        format A07;
column FROZEN         format A06;
column SUMM           format A05;
column TYPE           format A10;
column ITEM_KEY       format A09;
column SHIP_TO        format 9999999;

column PO_LINE        format 9999;
column FIRM           format A05;
column ITEM_DESC      format A40;

column PO_NUM_IK      format A9;
column ERROR_N        format A7;

column SRC_DOC format a9;
column SHP_LINE_STATUS format a15;
column RCV_Q   format 99999;
column TRANS_TYPE              format A10;
column INSPECT_STAT            format A13;
column INTF_SRC                format A11;
column SRC_DOC_CODE            format A12;
column QTY                     format 9999;

column PROC_MODE format a10;
column DEST_TYPE format a9;
column INSP_STAT format a13;
column INSP_SRC  format a8;
column PROC_STAT format a9;
column RCPT_SRC  format a8;
column TRNS_STAT format a9;
column TRNS_TYPE format a9;

column error_wie format a100;

column status format a9;
column firm format 9999;
column WIP_SUP_TYPE format a13;
column JOB_NAME     format a8;
column TRANS_TYPE   format a19;

column SRC_CODE format a8;
column PHS format 99999;
column STAT_TY format 9999999;
column STAT format 9999;
column LOAD format 9999;

column status format a9;
column firm format 9999;
column WIP_SUP_TYPE format a13;
column JOB_NAME     format a8;
column TRANS_TYPE   format a19;

column SRC_CODE format a8;
column PHS format 99999;
column STAT_TY format 9999999;
column STAT format 9999;
column LOAD format 9999;

column STOP_DESCRIPTION   format A58;

column GRS_WT  format 999999;
column FL_PER  format 999.99;
column VOL     format 9999;
column VOL_UOM format a07;
column CF      format A05;
column WT_UOM  format a06;
column FOB_CODE format a11;
column FRT_TERMS format a9;

column LCK       format 99999;
column PROCESS   format 9999999;
column ERROR_CODE format A30;
column ERROR_EXPL format A60;

column FRT_NAME      format a30;
column FRT_TYPE      format a15;
column FRT_LEVEL     format a15;
column QTY           format 9999;

column PRM_Q    format 99999;
column DLV_Q    format 99999;
column DTL_Q    format 99999;          

column LCK       format A05;
column PROCESS   format A07;
column ERROR_CODE format A11;
column ERROR_EXPL format A30;

column TRANS_TYPE format A11;

column QTY          format 9999;
column LINE_NUM     format 99999999;
column BATCH_SOURCE format a20;
column SO_LIN       format a06;
column AR_ID        format 99999;
column IR_ID        format 99999;
column WH_ID_10     format a08;
column PA_ID_11     format a08;
column C_RATE       format 999999;
column TR           format 9999;
column EF           format A05;
column INTF_LINE_ID format 99999999999;
column CRD_Q        format 99999;
column PRICE        format $9999999.99;

column PO_NUMBER   format A09;
column COMP_FL     format a07;
column EXTD_AMT    format $999,999.99;
column REV_AMT     format $999,999.99;
column TF          format A05;
column SOURCE      format A11;
column INV_Q       format 99999;
column SHIP_VIA    format A12;

Set heading on

WHENEVER SQLERROR EXIT FAILURE ROLLBACK;

prompt
accept order_number_selected prompt 'Please enter Sales Order number: '
prompt 

begin

  :v_error     := 0;
  :v_order_num := '&order_number_selected';

  select count(*)
  into :v_head_cnt
  from oe_order_headers_all
  where
  order_number = :v_order_num;

  if :v_head_cnt = 0 then
      RAISE no_data_found;
  end if;

  if :v_head_cnt = 1 then
     select header_id
     into :v_header_id
     from oe_order_headers_all
     where order_number = :v_order_num;
  end if;

exception
   when no_data_found then
      dbms_output.put_line('ERROR - Invalid order number entered');
      dbms_output.put_line('ACTION - Script execution must be aborted');
      dbms_output.put_line('ACTION - Please hit CTL-C to exit');
      :v_error := 1;
      raise;
   when others then
      dbms_output.put_line('ERROR - Unable to retrieve order due to error: '||SQLERRM);
      dbms_output.put_line('ACTION - Script execution must be aborted');
      dbms_output.put_line('ACTION - Please hit CTL-C to exit');
      :v_error := 1;
      raise;

end;
/

-- spool &out_file;

/* Display list of header_ids matching the order number entered */
  select
       ORD.HEADER_ID                 HEADER_ID,
       TYP.NAME                      ORDER_TYPE_NAME,
       ORD.ORDER_CATEGORY_CODE       CATEGORY,
       ORD.ORG_ID                    ORG_ID,
       (select name
        from hr_operating_units
        where organization_id = nvl(ORD.ORG_ID,-99)) ORGANIZATION_NAME
  from
       OE_ORDER_HEADERS_ALL          ORD,
       OE_TRANSACTION_TYPES_TL       TYP,
       FND_LANGUAGES                 FLA
  where
       ORD.ORDER_NUMBER              = :v_order_num
  and  TYP.LANGUAGE                  = FLA.LANGUAGE_CODE
  and  FLA.INSTALLED_FLAG            = 'B'
  and  ORD.ORDER_TYPE_ID             = TYP.TRANSACTION_TYPE_ID
  and :v_error                       = 0;

prompt
accept header_id_selected prompt 'Please enter HEADER_ID from list above (optional): '
prompt 

/* Set client info context based on the org_id from sales order */
begin
  select org_id
    into :v_op_unit
  from   oe_order_headers_all ord
  where
     ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id);

  mo_global.set_policy_context(p_access_mode => 'S',  p_org_id  => :v_op_unit); -- by rodavid

exception
   when no_data_found then
      dbms_output.put_line('ERROR - Invalid order number entered');
      dbms_output.put_line('ACTION - Script execution must be aborted');
      dbms_output.put_line('ACTION - Please hit CTL-C to exit');
      :v_error := 1;
      raise;
   when others then
      dbms_output.put_line('ERROR - Unable to retrieve order due to error: '||SQLERRM);
      dbms_output.put_line('ACTION - Script execution must be aborted');
      dbms_output.put_line('ACTION - Please hit CTL-C to exit');
      :v_error := 1;
      raise;
end;
/

begin
  select count(*)
    into :v_line_tot
    from oe_order_lines_all
   where header_id = nvl('&header_id_selected',:v_header_id);

  if :v_line_tot = 0 then
      dbms_output.put_line('WARNING - Order selected does not have any lines');
      dbms_output.put_line('WARNING - Please hit CTL-C to abort');
      dbms_output.put_line('WARNING - If you chose to continue only Header information will be printed,');
      dbms_output.put_line('WARNING - all additional entries will be ignored.');
      :v_head_only := 'Y';
    else
      :v_head_only := 'N';
  end if;
end;
/

/* Display all line_ids associated with this order number */
select
    substr(LIN.LINE_ID,1,15)      LINE_ID,
    substr(to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)),1,10) LINE_NUM,
     ITM.SEGMENT1                  ITEM,
     substr(LIN.LINE_CATEGORY_CODE,1,10)  lin_cat,
     nvl(LIN.ORDERED_QUANTITY,0)   Order_QTY,
     LIN.ORDER_QUANTITY_UOM        uom,
     substr(LIN.FLOW_STATUS_CODE,1,20) Line_status,
     nvl(LIN.SHIPPED_QUANTITY,0)   shipped,
     nvl(LIN.FULFILLED_QUANTITY,0) fulfilled,
     nvl(LIN.INVOICED_QUANTITY,0)  invoiced,
     nvl(LIN.CANCELLED_QUANTITY,0) cancelled
from
     OE_ORDER_LINES                LIN,
     MTL_SYSTEM_ITEMS              ITM
where
     LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
and  LIN.SHIP_FROM_ORG_ID           = ITM.ORGANIZATION_ID(+)
and  LIN.INVENTORY_ITEM_ID          = ITM.INVENTORY_ITEM_ID(+)
and  LIN.OPTION_NUMBER              IS NULL
and  LIN.ITEM_TYPE_CODE             <> 'INCLUDED'
order by
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     NVL(LIN.SERVICE_REFERENCE_LINE_ID, LIN.LINE_ID),
     LIN.LINE_ID;

/* Display any header or line sets associated with this order */
PROMPT
PROMPT OE_SETS (SET)

select ST1.SET_ID                        SET_ID,
       ST1.SET_NAME                      SET_NAME,
       ST1.SET_TYPE                      SET_TYPE,
       ST1.HEADER_ID                     HEADER_ID,
       ST1.INVENTORY_ITEM_ID             ITEM_ID,
       ST1.ORDERED_QUANTITY_UOM          UOM,
       ST1.LINE_TYPE_ID                  LINE_TYPE_ID,
       nvl(LST.SYSTEM_REQUIRED_FLAG,'N') SYS_REQD,
       ST1.SET_STATUS                    STATUS,
       to_char(ST1.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS')  SCH_SHP_DT,
       to_char(ST1.SCHEDULE_ARRIVAL_DATE,'DD-MON-RR_HH24:MI:SS')   SCH_ARV_DT,
       ST1.SHIP_FROM_ORG_ID              SHIP_FROM,
       ST1.SHIP_TO_ORG_ID                SHIP_TO_ID,
       ST1.SHIPMENT_PRIORITY_CODE        SHIP_PRIORITY,
       ST1.FREIGHT_CARRIER_CODE          CARRIER,
       ST1.SHIPPING_METHOD_CODE          SHIP_METHOD,
       ST1.SHIP_TOLERANCE_ABOVE          STA,
       ST1.SHIP_TOLERANCE_BELOW          STB
from OE_SETS                       ST1,
     OE_LINE_SETS                  LST
where ST1.SET_ID              = LST.SET_ID(+)
and   ST1.HEADER_ID = nvl('&header_id_selected',:v_header_id);          

prompt
accept line_id_selected prompt 'Please enter LINE_ID from list above(leave blank for all lines): '

begin
if :v_line_tot > 0 then   -- check for line_id
begin
  select count(*)
    into :v_line_cnt
    from oe_order_lines_all
   where header_id = nvl('&header_id_selected',:v_header_id)
     and  nvl('&line_id_selected',0)  in (0,line_id);

  if :v_line_cnt = 0 then
      RAISE no_data_found;
  end if;

exception
   when no_data_found then
      dbms_output.put_line('ERROR - Invalid line_id entered');
      dbms_output.put_line('ACTION - Please hit CTL-C to exit');
      dbms_output.put_line('.');
      :v_error := 1;
      raise;
   when others then
      dbms_output.put_line('ERROR - Unable to retrieve order line due to error: '||SQLERRM);
      dbms_output.put_line('ACTION - Please hit CTL-C to exit');
      dbms_output.put_line('.');
      :v_error := 1;
      raise;
end;
end if;
end;
/

WHENEVER SQLERROR CONTINUE;

prompt
accept do_analysis prompt 'Do you want validation performed on this order (Default=Y): '
prompt

prompt
accept prt_wf    prompt 'Do you want WorkFlow information printed? (Default=Y): '
accept prt_price prompt 'Do you want Pricing information printed? (Default=Y): '
accept prt_po    prompt 'Do you want Purchasing information printed? (Default=Y): '
accept prt_rec   prompt 'Do you want Receiving information printed? (Default=Y): '
accept prt_wip   prompt 'Do you want Work In Progress information printed? (Default=Y): '
accept prt_inv   prompt 'Do you want Inventory information printed? (Default=Y): '
accept prt_ar    prompt 'Do you want Receivables information printed? (Default=Y): '
prompt
prompt Listing of tables for WMS could be extense,  *** Note Default is No ***
accept prt_wms   prompt 'Do you want WMS information printed? (Default=N): '
prompt
prompt Listing of tables MTL_UNIT_TRANSACTIONS (MUT), WSH_SERIAL_NUMBERS (WSN)
prompt and MTL_SERIAL_NUMBERS could be extense.
accept det_cnt   prompt 'Do you want complete listing (Y-All records  N-only the first 10 records)? (Default=Y): '
prompt

set heading off

def version_code='12.0.4.140610'
def c1='_'
def pref='HTMomse12'
def suff='.html'
def out_file='&pref&c1&order_number_selected&suff'

-- Printout the filename and location
column DUMMY  new_value out_dir noprint
column DUMMY2 new_value host_nam noprint
  select substr(value,1,instr(value||',',',')-1) DUMMY
    from v$parameter where name = 'utl_file_dir';

  select substr(machine,1,20) DUMMY2
    from v$session where upper(program) like '%SMON%';

Prompt Output file created on Database Server: "&host_nam"
Prompt Complete path and filename: "&out_dir/&out_file"

set define '!'
-- Tables
def std='<table width=100% border=1 cellpadding=1 cellspacing=1>'
def et=</Table>
-- headers
def sh='<TR bgcolor="#cccc99"><td><font face="arial" color="#336699"> <b><i>'
def dh='</i></b></font></td><td><font face="arial" color="#336699"> <b><i>'
def dhr='</i></b></font></td><td><font face="arial" color="#ff0000"> <b><i>'
def eh='</i></b></font></td></tr>'
-- def sh='<TR bgcolor="#cccc99"><td><b><i>'
-- def dh='</i></b></td><td><b><i>'
-- def eh='</i></b></td></tr>'
-- lines
def sld='<tr bgcolor="#f7f7e7"><td><font face="arial" size="-1">'
def d='</font></td><td><font face="arial" size="-1">'
def el='</font></td></tr>'
-- def sld='<tr bgcolor="#f7f7e7"><td>'
-- def d='</td><td>'
-- def el='</td></tr>'
-- otros
def f=<br>     -- eol
def b=<b>      -- bold
def eb=</b>    -- end bold
def sp=' ' -- space
set null ' '
set define '&'

-- Start of printout
DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is  -- to print fields
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

function n2(v varchar2,v2 varchar2) return varchar2 is   -- to print parameters
begin
  if v is null then
   return v2;
   else
   return v;
  end if;
end n2;

begin
-- Creation of output file
-- SQL fails when parameter is loo long
--  select substr(value,1,instr(value||',',',')-1) into dirname
--    from v$parameter where name = 'utl_file_dir';

  select substr(value,1,decode(instr(value,','),0,length(value),instr(value,',')-1)) into dirname
    from v$parameter where name = 'utl_file_dir';

--  handle := UTL_FILE.FOPEN(dirname,dirname||'/&out_file','W',32000);
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','W',32000);

/* HTML header information */

UTL_FILE.PUT_LINE(handle,'<html>');
UTL_FILE.PUT_LINE(handle,'<head>');
UTL_FILE.PUT_LINE(handle,'<title> &out_file </title>');
UTL_FILE.PUT_LINE(handle,'</head>');
UTL_FILE.PUT_LINE(handle,'<body background=#ffffff>');
UTL_FILE.PUT_LINE(handle,'<font face="arial" color="#336699"> <b><i>');

-- DataBase name, creation date
-- User and time script execution
UTL_FILE.PUT_LINE(handle,'&std &sh DATABASE IDENTIFICATION &dh SCRIPT EXECUTION (Ver. &version_code) &eh');
select '&sld &b DB Name: &eb '||name||' - &b Release: &eb '||substr(release_name,1,10)||' &d'||
       '&b Script run at Date/Time: &eb'||to_char(sysdate,'DD-MON-RR_HH24:MI:SS')||'&el'||
       '&sld &b Creation Date: &eb'||to_char(created,'DD-MON-RR_HH24:MI:SS')||'&d'
       into text
  from V$DATABASE, fnd_product_groups;

UTL_FILE.PUT_LINE(handle,text);
select '&b USER is: '||username into text from user_users;
UTL_FILE.PUT_LINE(handle,text);
UTL_FILE.PUT_LINE(handle,'&eb &el &et &f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh The test will be run with the following parameters &dh Sections being printed: &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld &b Order Number = &eb &order_number_selected &d WorkFlow = '||n2('&prt_wf','Y')||' &d Pricing = '||n2('&prt_price','Y')||' &el');
UTL_FILE.PUT_LINE(handle,'&sld &b Header Id = &eb &header_id_selected &d Purchasing = '||n2('&prt_po','Y')||' &d Receiving = '||n2('&prt_rec','Y')||' &el');
if :v_head_only = 'Y' then
  UTL_FILE.PUT_LINE(handle,'&sld &b Line Id = &eb '||n2('','Header Only')||' &d Work in Progress = '||n2('&prt_wip','Y')||' &d Inventory = '||n2('&prt_inv','Y')||' &el');
 else
  UTL_FILE.PUT_LINE(handle,'&sld &b Line Id = &eb '||n2('&line_id_selected','All Lines')||' &d Work in Progress = '||n2('&prt_wip','Y')||' &d Inventory = '||n2('&prt_inv','Y')||' &el');
end if;
UTL_FILE.PUT_LINE(handle,'&sld &b Validation = &eb '||n2('&do_analysis','Y')||' &d Receivables = '||n2('&prt_ar','Y')||' &d Serial Num. Details = '||n2('&det_cnt','Y')||' &el');
UTL_FILE.PUT_LINE(handle,'&sld &sp &d WMS info = '||n2('&prt_wms','N')||' &d &sp &el');
UTL_FILE.PUT_LINE(handle,'&et &f &f');

-- Index for Major tables direct access
UTL_FILE.PUT_LINE(handle,'&std &sh INDEX FOR MAJOR TABLES DIRECT ACCESS &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#OE_SETS">OE_SETS (SET)</a>                   &d <a HREF="#WSH_TRIPS">WSH_TRIPS (TRP)</a>  &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#OE_ORDER_HEADERS">OE_ORDER_HEADERS (ORD)</a> &d <a HREF="#WSH_TRIP_STOPS">WSH_TRIP_STOPS (STP)</a>  &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#OE_ORDER_LINES">OE_ORDER_LINES (LIN)</a>     &d <a HREF="#WSH_NEW_DELIVERIES">WSH_NEW_DELIVERIES (DEL)</a>  &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_RESERVATIONS">MTL_RESERVATIONS (RES)</a> &d <a HREF="#WSH_DELIVERY_DETAILS">WSH_DELIVERY_DETAILS (DET)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_TRANSACTIONS_INTERFACE">MTL_TRANSACTIONS_INTERFACE (MTI)</a> &d');
UTL_FILE.PUT_LINE(handle,'<a HREF="#WMS_RULES">WMS_RULES</a>  &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_MATERIAL_TRANSACTIONS_TEMP">MTL_MATERIAL_TRANSACTIONS_TEMP (TMP) - UNPICKED LINES</a> &d');
UTL_FILE.PUT_LINE(handle,'<a HREF="#RA_INTERFACE_LINES">RA_INTERFACE_LINES (RAI)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_MATERIAL_TRANSACTIONS">MTL_MATERIAL_TRANSACTIONS (TRN) - PICKED LINES</a>  &d');
UTL_FILE.PUT_LINE(handle,'<a HREF="#RA_CUSTOMER_TRX">RA_CUSTOMER_TRX (RAH) - INVOICE HEADERS</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_TXN_REQUEST_LINES_V">MTL_TXN_REQUEST_LINES_V (MOV)</a> &d ');
UTL_FILE.PUT_LINE(handle,'<a HREF="#RA_CUSTOMER_TRX_LINES">RA_CUSTOMER_TRX_LINES (RAL)</a>  &el');

UTL_FILE.PUT_LINE(handle,'&et &f &f');

-- Parameters, initial listings from screen

UTL_FILE.PUT_LINE(handle,'&std &sh HEADER_ID &dh ORDER_TYPE_NAME &dh CATEGORY &dh ORG_ID &dh ORGANIZATION_NAME &el');

Declare
cursor l_orders is
  select
       ORD.HEADER_ID                 Hea_I,
       TYP.NAME                      OT_NAME,
       ORD.ORDER_CATEGORY_CODE       CAT_co,
       ORD.ORG_ID                    ORG_I
  from
       OE_ORDER_HEADERS_ALL          ORD,
       OE_TRANSACTION_TYPES_TL       TYP,
       FND_LANGUAGES                 FLA
  where
       ORD.ORDER_NUMBER              = :v_order_num
  and  TYP.LANGUAGE                  = FLA.LANGUAGE_CODE
  and  FLA.INSTALLED_FLAG            = 'B'
  and  ORD.ORDER_TYPE_ID             = TYP.TRANSACTION_TYPE_ID
  and :v_error                       = 0;

or_name varchar2(100);

begin
 for lo in l_orders
 loop

   -- Organization Name
  select name
    into or_name
    from hr_operating_units
   where organization_id = nvl(lo.ORG_I,-99);

   -- Print line to Output file

   utl_file.put_line(handle,'&sld'||n(lo.hea_i)||'&d'||n(lo.ot_name)||'&d');
   utl_file.put_line(handle,n(lo.Cat_co)||'&d'||n(lo.org_i)||'&d'||n(or_name)||'&el');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et  ');

UTL_FILE.PUT_LINE(handle,'&f &f &b LINE_IDs ASSOCIATED WITH THIS ORDER NUMBER &f');

UTL_FILE.PUT_LINE(handle,'&std &sh LINE NUMBER &dh LINE_ID &dh ITEM &dh ORDER QTY &dh UOM &dh LINE STATUS &dh SHIP QTY &dh ');
UTL_FILE.PUT_LINE(handle,'FULFILL QTY &dh INVOICE QTY &dh CANCEL QTY &dh OPEN &dh SHIP &dh CANC &dh SI &dh SHIP FROM &dh ');
UTL_FILE.PUT_LINE(handle,'LINE TYPE &dh LINE CATEG &dh INVOICED &dh ARRIVAL SET_ID &dh SHIP SET_ID &dh LINE SET_ID &eh');

Declare
cursor l_lines_ord is
select
     to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE_NUM,
     LIN.LINE_ID                    LINE_ID,
     ITM.SEGMENT1                  ITEM,
     nvl(LIN.ORDERED_QUANTITY,0)   ORD_QTY,
     LIN.ORDER_QUANTITY_UOM        Orduom,
     substr(LIN.FLOW_STATUS_CODE,1,22) Line_st,
     nvl(LIN.SHIPPED_QUANTITY,0)   shpq,
     nvl(LIN.FULFILLED_QUANTITY,0) fulq,
     nvl(LIN.INVOICED_QUANTITY,0)  invq,
     nvl(LIN.CANCELLED_QUANTITY,0) canq,
     nvl(LIN.OPEN_FLAG,'N')        openf,
     nvl(LIN.SHIPPABLE_FLAG,'N')   shipf,
     nvl(LIN.CANCELLED_FLAG,'N')   canf,
     nvl(LIN.SHIPPING_INTERFACED_FLAG,'N')    SI,
     LIN.SHIP_FROM_ORG_ID          shipfrom,
     LIN.LINE_TYPE_ID              LINE_TYPE_ID,
     LIN.LINE_CATEGORY_CODE        lin_cat,
     nvl(LIN.INVOICE_INTERFACE_STATUS_CODE,'N') INV_INT_STAT,
     LIN.ARRIVAL_SET_ID            ARRIV_SET_ID,
     LIN.SHIP_SET_ID               SHIP_SET_ID,
     LIN.LINE_SET_ID               LINE_SET_ID
from
     OE_ORDER_LINES                LIN,
     MTL_SYSTEM_ITEMS              ITM
where
     LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
and  LIN.SHIP_FROM_ORG_ID           = ITM.ORGANIZATION_ID(+)
and  LIN.INVENTORY_ITEM_ID          = ITM.INVENTORY_ITEM_ID(+)
and  LIN.OPTION_NUMBER              IS NULL
and  LIN.ITEM_TYPE_CODE             <> 'INCLUDED'
order by
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     NVL(LIN.SERVICE_REFERENCE_LINE_ID, LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for ll in l_lines_ord
 loop
   utl_file.put_line(handle,'&sld'||n(ll.LINE_NUM)||'&d'||n(ll.LINE_ID)||'&d'||n(ll.ITEM)||'&d');
   utl_file.put_line(handle,n(ll.ORD_QTY)||'&d'||n(ll.Orduom)||'&d');
   utl_file.put_line(handle,n(ll.Line_st)||'&d'||n(ll.shpq)||'&d');
   utl_file.put_line(handle,n(ll.fulq)||'&d'||n(ll.invq)||'&d');
   utl_file.put_line(handle,n(ll.canq)||'&d'||n(ll.openf)||'&d');
   utl_file.put_line(handle,n(ll.shipf)||'&d'||n(ll.canf)||'&d');
   utl_file.put_line(handle,n(ll.SI)||'&d'||n(ll.shipfrom)||'&d');
   utl_file.put_line(handle,n(ll.LINE_TYPE_ID)||'&d'||n(ll.LIN_CAT)||'&d');
   utl_file.put_line(handle,n(ll.INV_INT_STAT)||'&d'||n(ll.ARRIV_SET_ID)||'&d');
   utl_file.put_line(handle,n(ll.SHIP_SET_ID)||'&d'||n(ll.LINE_SET_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

/* Display any header or line sets associated with this order */

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="OE_SETS"> OE_SETS (SET) </a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh SET_ID &dh SET_NAME &dh SET_TYPE &dh HEADER_ID &dh LINE_ID &dh ITEM_ID &dh UOM &dh LINE_TYPE_ID &dh SYS_REQD &dh ');
UTL_FILE.PUT_LINE(handle,'STATUS &dh SCH_SHP_DT &dh SCH_ARV_DT &dh SHIP_FROM &dh SHIP_TO_ID &dh SHIP_PRIORITY &dh CARRIER &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_METHOD &dh STA &dh STB &eh');

Declare
cursor l_oe_sets is
select ST1.SET_ID                        SET_ID,
       ST1.SET_NAME                      SET_NAME,
       ST1.SET_TYPE                      SET_TYPE,
       ST1.HEADER_ID                     HEADER_ID,
       LST.LINE_ID                       LINE_ID,
       ST1.INVENTORY_ITEM_ID             ITEM_ID,
       ST1.ORDERED_QUANTITY_UOM          UOM,
       ST1.LINE_TYPE_ID                  LINE_TYPE_ID,
       nvl(LST.SYSTEM_REQUIRED_FLAG,'N') SYS_REQD,
       ST1.SET_STATUS                    STATUS,
       to_char(ST1.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS')    SCH_SHP_DT,
       to_char(ST1.SCHEDULE_ARRIVAL_DATE,'DD-MON-RR_HH24:MI:SS') SCH_ARV_DT,
       ST1.SHIP_FROM_ORG_ID              SHIP_FROM,
       ST1.SHIP_TO_ORG_ID                SHIP_TO_ID,
       ST1.SHIPMENT_PRIORITY_CODE        SHIP_PRIORITY,
       ST1.FREIGHT_CARRIER_CODE          CARRIER,
       ST1.SHIPPING_METHOD_CODE          SHIP_METHOD,
       ST1.SHIP_TOLERANCE_ABOVE          STA,
       ST1.SHIP_TOLERANCE_BELOW          STB
from OE_SETS                       ST1,
     OE_LINE_SETS                  LST
where ST1.SET_ID              = LST.SET_ID(+)
and   ST1.HEADER_ID = nvl('&header_id_selected',:v_header_id);          

begin
 for ll in l_oe_sets
 loop
   utl_file.put_line(handle,'&sld'||n(ll.SET_ID)||'&d'||n(ll.SET_NAME)||'&d');
   utl_file.put_line(handle,n(ll.SET_TYPE)||'&d'||n(ll.HEADER_ID)||'&d');
   utl_file.put_line(handle,n(ll.LINE_ID)||'&d'||n(ll.ITEM_ID)||'&d');
   utl_file.put_line(handle,n(ll.UOM)||'&d'||n(ll.LINE_TYPE_ID)||'&d');
   utl_file.put_line(handle,n(ll.SYS_REQD)||'&d'||n(ll.STATUS)||'&d');
   utl_file.put_line(handle,n(ll.SCH_SHP_DT)||'&d'||n(ll.SCH_ARV_DT)||'&d');
   utl_file.put_line(handle,n(ll.SHIP_FROM)||'&d'||n(ll.SHIP_TO_ID)||'&d');
   utl_file.put_line(handle,n(ll.SHIP_PRIORITY)||'&d'||n(ll.CARRIER)||'&d');
   utl_file.put_line(handle,n(ll.SHIP_METHOD)||'&d'||n(ll.STA)||'&d');
   utl_file.put_line(handle,n(ll.STB)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et &f &f');

UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="OE_ORDER_HEADERS"> OE_ORDER_HEADERS (ORD) </a> <a HREF="#OOH">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh HEADER_ID &dh ORD_NUM &dh TYPE_ID &dh TYPE_NAME &dh FLOW_PROCESS &dh FLOW_CODE &dh BK &dh OP &dh CN &dh SP &dh ');
UTL_FILE.PUT_LINE(handle,'CUST_ID &dh CUST_NAME &dh SHIP_ID &dh SHIP_TO &dh BILL_ID &dh ORD_DATE &dh WH_ID &dh ORG &dh ');
UTL_FILE.PUT_LINE(handle,'CAT &dh PL_ID &dh PL_NAME &dh PO_NUMBER &dh STA &dh STB &dh OPERATING_UNIT &eh');

declare
cursor header1 is
     select distinct ORD.HEADER_ID            head_id,
            ORD.ORDER_NUMBER                  ord_no,
            ORD.ORDER_TYPE_ID                 ord_t,
            TYP.NAME                          ord_tna,
            ORD.SOLD_TO_ORG_ID                cus_id,
            substr(CUS.CUSTOMER_NAME,1,20)    cus_na,
            ORD.SHIP_TO_ORG_ID                ship_t,
            substr(SHP.NAME,1,12)             ship_tn,
            ORD.INVOICE_TO_ORG_ID             bill_t,
            to_char(ORD.ORDERED_DATE,'DD-MON-RR_HH24:MI:SS')  ord_d,
            nvl(ORD.BOOKED_FLAG,'N')          book_g,
            nvl(ORD.OPEN_FLAG,'N')            open_f,
            nvl(ORD.CANCELLED_FLAG,'N')       can_f,
            nvl(ORD.PARTIAL_SHIPMENTS_ALLOWED,'Y') spa,
            ORD.SHIP_FROM_ORG_ID                   or_id,
            PAR.ORGANIZATION_CODE                  or_co,
            ORD.FLOW_STATUS_CODE                   fl_co,
            ORD.ORDER_CATEGORY_CODE                cat_co,
            ORD.PRICE_LIST_ID                      pr_id,
            PRC.NAME                               pr_na,
            ORD.CUST_PO_NUMBER                     po_no,
            ORD.SHIP_TOLERANCE_ABOVE               shta,
            ORD.SHIP_TOLERANCE_BELOW               shtb,
            HR.NAME                                oper_unit
from
     OE_ORDER_HEADERS                  ORD,
     MTL_PARAMETERS                    PAR,
     OE_TRANSACTION_TYPES_V            TYP,
     AR_CUSTOMERS                      CUS,
     OE_SHIP_TO_ORGS_V                 SHP,
     QP_LIST_HEADERS_V                 PRC,
     HR_OPERATING_UNITS                HR
where
     ORD.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  ORD.SHIP_FROM_ORG_ID          = PAR.ORGANIZATION_ID(+)
and  ORD.ORDER_TYPE_ID             = TYP.TRANSACTION_TYPE_ID(+)
and  ORD.SHIP_TO_ORG_ID            = SHP.SITE_USE_ID(+)
and  ORD.SOLD_TO_ORG_ID            = CUS.CUSTOMER_ID(+)
and  ORD.PRICE_LIST_ID             = PRC.LIST_HEADER_ID(+)
and  ORD.ORG_ID                    = HR.ORGANIZATION_ID(+);

r_ord_t  varchar2(100);
r_open_l number;
r_canc_l number;
r_canopen_l number;

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

begin
 dbms_output.enable(1000000);
 :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
 for i in 1..60
 loop
   msg(i).flag := '0';
   msg(i).descrip := '';
 end loop;

 msg(10).descrip := '   10. Order_Header has associated lines with OPEN and CANCELLED flags set to Y.';
 msg(15).descrip := '   15. Order_Header status is BOOKED but "Book" activity has not been completed.';

 msg(20).descrip := '   20. Order_Header status is CLOSED but "Close" activity has not been completed.';
 msg(21).descrip := '   21. Order_Header status is CLOSED but exist open lines associated to this header.';
 msg(22).descrip := '   22. All associated lines has been closed but Order_Header is not ready to CLOSE.';

 msg(50).descrip := '   50. No WorkFlow Process associated to this line.';
 msg(51).descrip := '   51. Incorrect WorkFlow Process associated to this Order Header.';
 msg(52).descrip := '   52. Incorrect WorkFlow Activity associated to this Order Header.';
 msg(53).descrip := '   53. Incorrect WorkFlow Activity Result for this Order Header.';
 msg(54).descrip := '   54. Incorrect WorkFlow Activity Status for this Order Header.';
end if;

 for h in header1
 loop
   :r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   --
   -- Gather general information
   --
   begin
     -- get Order_Header Flow name
     select WFA1.DISPLAY_NAME
       into r_ord_t
       FROM WF_ITEM_ACTIVITY_STATUSES         WFS,
            WF_PROCESS_ACTIVITIES             WFP,
            WF_ACTIVITIES_VL                  WFA,
            WF_ACTIVITIES_VL                  WFA1
      where WFS.ITEM_TYPE              = 'OEOH'
        and WFS.item_key               = h.head_id
        and WFS.PROCESS_ACTIVITY       = WFP.INSTANCE_ID(+)
        and WFP.PROCESS_NAME           = 'ROOT'
        and WFP.PROCESS_ITEM_TYPE      = WFA.ITEM_TYPE
        and WFP.PROCESS_NAME           = WFA.NAME
        and WFP.PROCESS_VERSION        = WFA.VERSION
        and WFP.ACTIVITY_ITEM_TYPE     = WFA1.ITEM_TYPE
        and WFP.ACTIVITY_NAME          = WFA1.NAME
        and WFA1.VERSION               = (select nvl(max(VERSION),-1)
                                            from WF_ACTIVITIES WF2
                                           where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                                             and WF2.NAME      = WFP.ACTIVITY_NAME);

     -- Select current activity
     select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
            WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
            LKP.MEANING
       into :r_pro_na, :r_act_na, :r_result, :r_act_s
       from WF_ITEM_ACTIVITY_STATUSES WFS,
            WF_PROCESS_ACTIVITIES     WFP,
            WF_ACTIVITIES_VL          WFA,
            WF_ACTIVITIES_VL          WFA1,
            WF_LOOKUPS                LKP
      where WFS.ITEM_TYPE          = 'OEOH'
        and WFS.item_key           = h.head_id
        and WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
        and WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
        and WFP.PROCESS_NAME       = WFA.NAME
        and WFP.PROCESS_VERSION    = WFA.VERSION
        and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
        and WFP.ACTIVITY_NAME      = WFA1.NAME
        and WFA1.VERSION           = (select max(VERSION)
                                        from WF_ACTIVITIES WF2
                                       where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                                         and WF2.NAME      = WFP.ACTIVITY_NAME)
        and LKP.LOOKUP_TYPE        = 'WFENG_STATUS'
        and LKP.LOOKUP_CODE        = WFS.ACTIVITY_STATUS
        and Execution_time         = (Select Max(execution_time) from WF_ITEM_ACTIVITY_STATUSES
                                       where ITEM_TYPE = 'OEOH'
                                         and item_key = h.head_id);
   exception
     when no_data_found then
       :r_flag := :r_flag || '50 ';
       msg(50).flag := '1';
   end;

   -- Check if order has open lines and count also cancelled lines
   begin
   select sum(decode(open_flag,'Y',1,0)),sum(decode(cancelled_flag,'Y',1,0)),sum(decode(cancelled_flag,'Y',decode(open_flag,'Y',1,0),0))
     into r_open_l, r_canc_l, r_canopen_l
     from oe_order_lines_all
    where header_id = h.head_id
    group by header_id;
   exception
     when no_data_found then
       r_open_l := 0;
       r_canc_l := 0;
       r_canopen_l := 0;
   end;
   ---
   -- Basic Verifications
   --

   -- Open lines have cancelled flag showing as open
   if r_canopen_l > 0 then
     :r_flag := :r_flag || '10 ';
     msg(10).flag := '1';
   end if;

   -- All lines closed but Order Header status is not CLOSED and WF is NOT waiting to close.
   if r_open_l = 0    -- no open lines
    and h.fl_co <> 'CLOSED'  then
     if :r_pro_na = 'Close - Order'    -- check current status
       and :r_act_s = 'Deferred' then
        null;  -- OK just waiting for month end
     else
       :r_flag := :r_flag || '22 ';
       msg(22).flag := '1';
     end if;
   end if;   

   ---
   -- Verifications for Order Header on ENTERED status
   ---
   If h.fl_co = 'ENTERED' then
     -- verify current WF status
     if :r_pro_na <> 'Book - Order, Manual' then
       :r_flag := :r_flag || '51 ';
       msg(51).flag := '1';
      elsif :r_act_na <> 'Book - Eligible' then
        :r_flag := :r_flag || '52 ';
        msg(52).flag := '1';
      elsif :r_result is not null then
        :r_flag := :r_flag || '53 ';
        msg(53).flag := '1';
      elsif :r_act_s <> 'Notified' then
        :r_flag := :r_flag || '54 ';
        msg(54).flag := '1';
     end if;
   end if; -- ENTERED

   ---
   -- Verifications for Order Header on BOOKED status
   ---
   If h.fl_co = 'BOOKED' then
     -- Check is Book activity has been completed
     begin
       select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
              WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
              LKP.MEANING
         into :r_pro_na, :r_act_na, :r_result, :r_act_s
         from WF_ITEM_ACTIVITY_STATUSES WFS,
              WF_PROCESS_ACTIVITIES     WFP,
              WF_ACTIVITIES_VL          WFA,
              WF_ACTIVITIES_VL          WFA1,
              WF_LOOKUPS                LKP
        where WFS.ITEM_TYPE          = 'OEOH'
          and WFS.item_key           = h.head_id
          and WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
          and WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
          and WFP.PROCESS_NAME       = WFA.NAME
          and WFP.PROCESS_VERSION    = WFA.VERSION
          and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
          and WFP.ACTIVITY_NAME      = WFA1.NAME
          and WFA1.VERSION           = (select max(VERSION)
                                          from WF_ACTIVITIES WF2
                                         where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                                           and WF2.NAME      = WFP.ACTIVITY_NAME)
          and LKP.LOOKUP_TYPE        = 'WFENG_STATUS'
          and LKP.LOOKUP_CODE        = WFS.ACTIVITY_STATUS
          and WFA1.DISPLAY_NAME      = 'Book';
     exception
       when no_data_found then
         :r_flag := :r_flag || '15 ';
         msg(15).flag := '1';
     end;

     if :r_act_na = 'Book' then
       if :r_result = 'Complete'
          and :r_act_s = 'Complete' then
            null;  -- status is OK
        else
         :r_flag := :r_flag || '15 ';
         msg(15).flag := '1';
       end if;
     end if;
   end if; -- BOOKED

   ---
   -- Verifications for Order Header on CLOSED status
   ---
   If h.fl_co = 'CLOSED' then
     -- verify current WF status
     if :r_pro_na <> r_ord_t then
       :r_flag := :r_flag || '51 ';
       msg(51).flag := '1';
      elsif :r_act_na <> 'End' then
        :r_flag := :r_flag || '52 ';
        msg(52).flag := '1';
      elsif :r_result <> 'Null' then
        :r_flag := :r_flag || '53 ';
        msg(53).flag := '1';
      elsif :r_act_s <> 'Complete' then
        :r_flag := :r_flag || '54 ';
        msg(54).flag := '1';
     end if;

     -- Get status for CLOSE activity
     begin
       select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
              WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
              LKP.MEANING
         into :r_pro_na, :r_act_na, :r_result, :r_act_s
         from WF_ITEM_ACTIVITY_STATUSES WFS,
              WF_PROCESS_ACTIVITIES     WFP,
              WF_ACTIVITIES_VL          WFA,
              WF_ACTIVITIES_VL          WFA1,
              WF_LOOKUPS                LKP
        where WFS.ITEM_TYPE          = 'OEOH'
          and WFS.item_key           = h.head_id
          and WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
          and WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
          and WFP.PROCESS_NAME       = WFA.NAME
          and WFP.PROCESS_VERSION    = WFA.VERSION
          and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
          and WFP.ACTIVITY_NAME      = WFA1.NAME
          and WFA1.VERSION           = (select max(VERSION)
                                          from WF_ACTIVITIES WF2
                                         where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                                           and WF2.NAME      = WFP.ACTIVITY_NAME)
          and LKP.LOOKUP_TYPE        = 'WFENG_STATUS'
          and LKP.LOOKUP_CODE        = WFS.ACTIVITY_STATUS
          and WFA1.DISPLAY_NAME      = 'Close';
     exception
       when no_data_found then
         :r_flag := :r_flag || '20 ';
         msg(20).flag := '1';
     end;
     -- verify CLOSE activity completed
     if :r_act_na = 'Close' then
       if :r_result = 'Complete'
          and :r_act_s = 'Complete' then
            null;  -- status is OK
        else
         :r_flag := :r_flag || '20 ';
         msg(20).flag := '1';
       end if;
     end if;

     -- check for open lines
     if r_open_l > 0 then
       :r_flag := :r_flag || '21 ';
       msg(21).flag := '1';
     end if;
   end if; -- CLOSED

end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#OHERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,n(h.head_id)||'&d'||n(h.ord_no)||'&d');
   utl_file.put_line(handle,n(h.ord_t)||'&d'||n(h.ord_tna)||'&d');
   utl_file.put_line(handle,n(r_ord_t)||'&d'||n(h.fl_co)||'&d');
   utl_file.put_line(handle,n(h.book_g)||'&d'||n(h.open_f)||'&d');
   utl_file.put_line(handle,n(h.can_f)||'&d'||n(h.spa)||'&d');
   utl_file.put_line(handle,n(h.cus_id)||'&d'||n(h.cus_na)||'&d');
   utl_file.put_line(handle,n(h.ship_t)||'&d'||n(h.ship_tn)||'&d');
   utl_file.put_line(handle,n(h.bill_t)||'&d'||n(h.ord_d)||'&d');
   utl_file.put_line(handle,n(h.or_id)||'&d'||n(h.or_co)||'&d');
   utl_file.put_line(handle,n(h.cat_co)||'&d'||n(h.pr_id)||'&d');
   utl_file.put_line(handle,n(h.pr_na)||'&d'||n(h.po_no)||'&d');
   utl_file.put_line(handle,n(h.shta)||'&d'||n(h.shtb)||'&d');
   utl_file.put_line(handle,n(h.oper_unit)||'&el');

   if :r_flag is not null then
     :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="OHERR">Warning List:</a> &eb &f');
   for i in 1..60
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
If :v_head_only = 'N' then 

-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

if UPPER(nvl('&prt_wf','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER STATUS  &f');

UTL_FILE.PUT_LINE(handle,'&std');
UTL_FILE.PUT_LINE(handle,'&sh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh INT_PROCESS_NAME &dh INT_ACTIVITY_NAME &dh INT_RESULT_CODE &dh BEGIN_DATE &dh END_DATE &dh ERROR_NAME &eh');

Declare
cursor l_wf_order is
select WFA.DISPLAY_NAME      Process,
       WFA1.DISPLAY_NAME     Activity,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) Result,
       LKP.MEANING           Act_status,
       WFS.NOTIFICATION_ID   Notif,
       WFP.PROCESS_NAME      I_process,
       WFP.ACTIVITY_NAME     I_activity,
       WFS.ACTIVITY_RESULT_CODE   I_Act_Res_code,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') Begin_d,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS')   End_d,
       WFS.ERROR_NAME        error_name
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'OEOH'
and  WFS.item_key           = nvl('&header_id_selected',to_char(:v_header_id))
and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
and  WFP.PROCESS_NAME       = WFA.NAME
and  WFP.PROCESS_VERSION    = WFA.VERSION
and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and  WFP.ACTIVITY_NAME      = WFA1.NAME
and  WFA1.VERSION           =
                             (select max(VERSION)
                              from WF_ACTIVITIES WF2
                              where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and   WF2.NAME              = WFP.ACTIVITY_NAME)
and  LKP.LOOKUP_TYPE        = 'WFENG_STATUS'
and  LKP.LOOKUP_CODE        = WFS.ACTIVITY_STATUS
order by WFS.ITEM_KEY,
         WFS.BEGIN_DATE,
         EXECUTION_TIME;

begin
 for ll in l_wf_order
 loop
   utl_file.put_line(handle,'&sld'||n(ll.Process)||'&d'||n(ll.Activity)||'&d');
   utl_file.put_line(handle,n(ll.Result)||'&d'||n(ll.Act_status)||'&d');
   utl_file.put_line(handle,n(ll.Notif)||'&d'||n(ll.I_process)||'&d');
   utl_file.put_line(handle,n(ll.I_activity)||'&d'||n(ll.I_Act_Res_code)||'&d');
   utl_file.put_line(handle,n(ll.Begin_d)||'&d');
   utl_file.put_line(handle,n(ll.End_d)||'&d'||n(ll.Error_name)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER NOTIFICATION INFORMATION (WFN)&f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');

Declare
cursor l_wf_ord_noti is
select WFN.NOTIFICATION_ID         NOTIF_ID,
       WFN.TO_USER                 TO_USER,
       WFN.ORIGINAL_RECIPIENT      ORIG_RECIP,
       WFN.RECIPIENT_ROLE          RECIP_ROLE,
       WFN.MAIL_STATUS             MAIL_STAT,
       WFN.MESSAGE_NAME            MESSAGE_NAME,
       WFN.STATUS                  STATUS,
       WFN.SUBJECT                 SUBJECT
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_NOTIFICATIONS          WFN
where WFS.ITEM_TYPE          = 'OEOH'
 and  WFS.item_key           = nvl('&header_id_selected',to_char(:v_header_id))
 and  WFS.NOTIFICATION_ID    is not null
 and  WFN.NOTIFICATION_ID    = WFS.NOTIFICATION_ID
order by WFS.ITEM_KEY,
         WFS.BEGIN_DATE,
         EXECUTION_TIME;

begin
 for ll in l_wf_ord_noti
 loop
   utl_file.put_line(handle,'&sld'||n(ll.NOTIF_ID)||'&d'||n(ll.TO_USER)||'&d');
   utl_file.put_line(handle,n(ll.ORIG_RECIP)||'&d'||n(ll.RECIP_ROLE)||'&d');
   utl_file.put_line(handle,n(ll.MAIL_STAT)||'&d'||n(ll.MESSAGE_NAME)||'&d');
   utl_file.put_line(handle,n(ll.STATUS)||'&d'||n(ll.SUBJECT)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

/*
UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER SKIP INFORMATION (WFSKIP)&f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');

Declare
r_exist   number;

begin
  select count(*)
    into r_exist
    from all_tables
   where table_name = 'ONT_WF_SKIP_LOG';
  if r_exist = 0 then
    utl_file.put_line(handle,'&et Table ONT_WF_SKIP_LOG is not present on this instance: &f');
 end if;
end;

Declare
cursor l_wf_ord_skip is
   select WFS.HEADER_ID      HEADER_ID,
       WFA.DISPLAY_NAME      DISPLAY_NAME,
       to_char(WFS.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CRE_DATE,
       WFS.USER_ID           USER_ID,
       WFS.RESPONSIBILITY_ID RESPONSIBILITY_ID,
       WFS.APPLICATION_ID    APPLICATION_ID
  from ONT_WF_SKIP_LOG           WFS,
       WF_PROCESS_ACTIVITIES     WFP,
       WF_ACTIVITIES_VL          WFA
 where WFS.LINE_ID            is null
  and  WFS.HEADER_ID          = nvl('&header_id_selected',to_char(:v_header_id))
  and  WFS.ACTIVITY_ID        = WFP.INSTANCE_ID
  and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
  and  WFP.PROCESS_NAME       = WFA.NAME
  and  WFP.PROCESS_VERSION    = WFA.VERSION
 order by WFS.HEADER_ID,
          WFS.CREATION_DATE;

begin
 for ll in l_wf_ord_skip
 loop
   utl_file.put_line(handle,'&sld'||n(ll.HEADER_ID)||'&d'||n(ll.DISPLAY_NAME)||'&d');
   utl_file.put_line(handle,n(ll.CRE_DATE)||'&d'||n(ll.USER_ID)||'&d');
   utl_file.put_line(handle,n(ll.RESPONSIBILITY_ID)||'&d'||n(ll.APPLICATION_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');  */

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER LEVEL ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PROCESS_NAME &dh ERROR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor l_wf_ord_err is
select WFA.DISPLAY_NAME    Process,
       WFA1.DISPLAY_NAME   Activity,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) result,
       LKP.MEANING         status,
       WFS.ERROR_NAME      err_name,
       WFS.ERROR_MESSAGE   err_mess,
       WFS.ERROR_STACK     err_stack
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'OEOH'
and  WFS.item_key           = nvl('&header_id_selected',to_char(:v_header_id))
and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
and  WFP.PROCESS_NAME       = WFA.NAME
and  WFP.PROCESS_VERSION    = WFA.VERSION
and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and  WFP.ACTIVITY_NAME      = WFA1.NAME
and  WFA1.VERSION =
    (select max(VERSION)
     from WF_ACTIVITIES WF2
     where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
     and   WF2.NAME      = WFP.ACTIVITY_NAME)
and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and  WFS.ACTIVITY_STATUS = 'ERROR'
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for ll in l_wf_ord_err
 loop
   utl_file.put_line(handle,'&sld'||n(ll.Process)||'&d'||n(ll.Activity)||'&d');
   utl_file.put_line(handle,n(ll.result)||'&d'||n(ll.status)||'&d');
   utl_file.put_line(handle,n(ll.err_name)||'&d'||n(ll.err_mess)||'&d');
   utl_file.put_line(handle,n(ll.err_stack)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- break on ERR_TYPE_KEY skip 2;

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ACTIVITY STATUS FOR ORDER ERROR PROCESS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ERR_TYPE_KEY &dh ERR_PROCESS_NAME &dh ERR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ASGND_USER &dh BEGIN_DATE &dh END_DATE &eh');

Declare
cursor l_wf_ord_erp is
select WFS.ITEM_TYPE || '-' || WFS.ITEM_KEY               ERR_TYPE_KEY,
       WFA.DISPLAY_NAME           ERR_PROCESS_NAME,
       WFA1.DISPLAY_NAME          ERR_ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                ACT_STATUS,
       WFS.NOTIFICATION_ID        NOTIF_ID,
       WFS.ASSIGNED_USER          ASGND_USER,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP,
     WF_ITEMS                  WFI
where
       WFS.ITEM_TYPE          = WFI.ITEM_TYPE
  and  WFS.item_key           = WFI.ITEM_KEY
  and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
  and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
  and  WFP.PROCESS_NAME       = WFA.NAME
  and  WFP.PROCESS_VERSION    = WFA.VERSION
  and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
  and  WFP.ACTIVITY_NAME      = WFA1.NAME
  and  WFA1.VERSION =
      (select max(VERSION)
       from WF_ACTIVITIES WF2
       where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
       and   WF2.NAME      = WFP.ACTIVITY_NAME)
  and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
  and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
  and  WFI.PARENT_ITEM_TYPE = 'OEOH'
  and  WFI.PARENT_ITEM_KEY  = nvl('&header_id_selected',to_char(:v_header_id))
  and  WFI.ITEM_TYPE in (select WFAE.ERROR_ITEM_TYPE
                         from WF_ITEM_ACTIVITY_STATUSES WFSE,
                         WF_PROCESS_ACTIVITIES     WFPE,
                         WF_ACTIVITIES_VL          WFAE,
                         WF_ACTIVITIES_VL          WFA1E
                         where
                                WFSE.ITEM_TYPE = 'OEOH'
                           and  WFSE.ITEM_KEY  = nvl('&header_id_selected',to_char(:v_header_id))
                           and  WFSE.PROCESS_ACTIVITY   = WFPE.INSTANCE_ID
                           and  WFPE.PROCESS_ITEM_TYPE  = WFAE.ITEM_TYPE
                           and  WFPE.PROCESS_NAME       = WFAE.NAME
                           and  WFPE.PROCESS_VERSION    = WFAE.VERSION
                           and  WFPE.ACTIVITY_ITEM_TYPE = WFA1E.ITEM_TYPE
                           and  WFPE.ACTIVITY_NAME      = WFA1E.NAME
                           and  WFA1E.VERSION =
                               (select max(VERSION)
                                from WF_ACTIVITIES WF2E
                                where WF2E.ITEM_TYPE = WFPE.ACTIVITY_ITEM_TYPE
                                and   WF2E.NAME      = WFPE.ACTIVITY_NAME)
                           and  WFSE.ACTIVITY_STATUS = 'ERROR')
  order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for ll in l_wf_ord_erp
 loop
   utl_file.put_line(handle,'&sld'||n(ll.ERR_TYPE_KEY)||'&d'||n(ll.ERR_PROCESS_NAME)||'&d');
   utl_file.put_line(handle,n(ll.ERR_ACTIVITY_NAME)||'&d'||n(ll.RESULT)||'&d');
   utl_file.put_line(handle,n(ll.ACT_STATUS)||'&d'||n(ll.NOTIF_ID)||'&d');
   utl_file.put_line(handle,n(ll.ASGND_USER)||'&d'||n(ll.BEGIN_DATE)||'&d');
   utl_file.put_line(handle,n(ll.END_DATE)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_wf

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
If :v_head_only = 'N' then 

-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

UTL_FILE.PUT_LINE(handle,'&f &f GENERIC HOLDS (ORDER AND/OR LINES) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh HOLD_ID &dh HOLD_NAME &dh HOLD_TYPE &dh WF_ITEM &dh WF_ACTIVITY &dh ORD_HOLD_ID &dh HLD_SRC_ID &dh HLD_REL_ID &dh ');
UTL_FILE.PUT_LINE(handle,'HEADER_ID &dh H_REL &dh S_REL &dh RELEASE_REASON &dh ENTITY &dh ENTITY_ID &dh ENTITY2 &dh ENTITY_ID2 &dh HOLD_UNTIL  &eh');

Declare
cursor l_ord_hld is
SELECT
  HDF.HOLD_ID                        ,
  HDF.NAME                           ,
  HDF.TYPE_CODE                      ,
  HDF.ITEM_TYPE                      ,
  HDF.ACTIVITY_NAME                  ,
  HLD.ORDER_HOLD_ID                  ,
  HLD.HOLD_SOURCE_ID                 ,
  HLD.HOLD_RELEASE_ID                ,
  HLD.HEADER_ID                      ,
  HLD.RELEASED_FLAG                  Rel_Flag1,
  HSR.RELEASED_FLAG                  Rel_Flag2,
  HRL.RELEASE_REASON_CODE            Rel_code,
  decode(HSR.HOLD_ENTITY_CODE,
         'B','Bill To',
         'C','Customer',
         'I','Item',
         'O','Order',
         'S','Ship To',
         'W','Warehouse',
         HSR.HOLD_ENTITY_CODE)       entity,
  HSR.HOLD_ENTITY_ID                 entity_id,
  decode(HSR.HOLD_ENTITY_CODE2,
         'B','Bill To',
         'C','Customer',
         'I','Item',
         'O','Order',
         'S','Ship To',
         'W','Warehouse',
         HSR.HOLD_ENTITY_CODE2)      entity2,
  HSR.HOLD_ENTITY_ID2                entity_id2,
  to_char(HSR.HOLD_UNTIL_DATE,'DD-MON-RR_HH24:MI:SS') Hold_until
from OE_ORDER_HOLDS_ALL    HLD,
     OE_HOLD_SOURCES_ALL   HSR,
     OE_HOLD_DEFINITIONS   HDF,
     OE_HOLD_RELEASES      HRL
where        HLD.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
        and  HLD.HOLD_SOURCE_ID       = HSR.HOLD_SOURCE_ID
        and  HSR.HOLD_ID              = HDF.HOLD_ID
        and  HLD.HOLD_RELEASE_ID      = HRL.HOLD_RELEASE_ID(+)
        and  HLD.LINE_ID              IS NULL;

begin
 for ll in l_ord_hld
 loop
   utl_file.put_line(handle,'&sld'||n(ll.HOLD_ID)||'&d'||n(ll.NAME)||'&d');
   utl_file.put_line(handle,n(ll.TYPE_CODE)||'&d'||n(ll.ITEM_TYPE)||'&d');
   utl_file.put_line(handle,n(ll.ACTIVITY_NAME)||'&d'||n(ll.ORDER_HOLD_ID)||'&d');
   utl_file.put_line(handle,n(ll.HOLD_SOURCE_ID)||'&d'||n(ll.HOLD_RELEASE_ID)||'&d');
   utl_file.put_line(handle,n(ll.HEADER_ID)||'&d'||n(ll.Rel_Flag1)||'&d');
   utl_file.put_line(handle,n(ll.Rel_Flag2)||'&d'||n(ll.Rel_code)||'&d');
   utl_file.put_line(handle,n(ll.entity)||'&d'||n(ll.entity_id)||'&d');
   utl_file.put_line(handle,n(ll.entity2)||'&d'||n(ll.entity_id2)||'&d');
   utl_file.put_line(handle,n(ll.Hold_until)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- This section is commented out because it runs slowly without an index
--<do not run> CREATE INDEX OE_PROCESSING_MSGS_777
--<do not run> ON ONT.OE_PROCESSING_MSGS
--<do not run> (header_id, line_id);

-- column ACTIVITY   format a15;
-- column msg_Source format a14;
-- column DESCRIPTION format a30;

-- PROMPT
UTL_FILE.PUT_LINE(handle,'&f &f  HEADER PROCESSING MESSAGES &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh HEADER_ID &dh MSG_SOURCE &dh ACTIVITY &dh REQUEST_ID &dh DESCRIPTION &dh MESSAGE_TEXT &eh');

declare
 cursor h_proc is
 select distinct
        MSG.header_id                   HEADER_ID,
    decode(MSG.MESSAGE_SOURCE_CODE,
           'U','U=On-Line(UI)',
           'C','C=Conc Process',
           'W','W=Workflow',
           MSG.MESSAGE_SOURCE_CODE)     MSG_SOURCE,
    MSG.PROCESS_ACTIVITY                PROCESS_ACTIVITY,
    MSG.request_id                      REQUEST_ID,
    MST.message_text                    MESSAGE_TEXT
 from oe_processing_msgs_vl     MSG,
      oe_processing_msgs_tl     MST,
      fnd_languages             FLA
 where  MSG.header_id      = nvl('&header_id_selected',:v_header_id)
   and  msg.transaction_id = mst.transaction_id
   and  MST.LANGUAGE                  = FLA.LANGUAGE_CODE
   and  FLA.INSTALLED_FLAG            = 'B'
   and  decode(MSG.LINE_ID,9.99E+125,NULL,MSG.LINE_ID) is NULL;

r_activity varchar2(100);
r_descrip  varchar2(100);

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

begin
 :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
 for i in 1..10
 loop
   msg(i).flag := '0';
   msg(i).descrip := '';
 end loop;

 msg(1).descrip := '    1. Cannot find Activity name associated to HEADER PROCESSING MESSAGES.';
 msg(2).descrip := '    2. Cannot find Request Description.';
end if;

 for hp in h_proc
 loop
   :r_flag := '';
   :r_error := 0;
   r_activity := '';
   r_descrip  := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   -- Get Activity name
   begin
     select WFA1.DISPLAY_NAME
       into r_activity
       from WF_PROCESS_ACTIVITIES  WFP,
            WF_ACTIVITIES_VL       WFA1
      where WFP.INSTANCE_ID        = hp.PROCESS_ACTIVITY
        and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
        and WFP.ACTIVITY_NAME      = WFA1.NAME
        and WFA1.VERSION = (select max(VERSION)
                              from WF_ACTIVITIES WF2
                             where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                               and WF2.NAME      = WFP.ACTIVITY_NAME);
    exception
      when no_data_found then
        :r_flag := :r_flag || '1 ';
        msg(1).flag := '1';
   end;

   -- Get Request description
   begin
     select DESCRIPTION
       into r_descrip
       FROM FND_CONCURRENT_REQUESTS FCR
      where FCR.REQUEST_ID    = hp.REQUEST_ID;
    exception
      when no_data_found then
        :r_flag := :r_flag || '2 ';
        msg(2).flag := '1';
   end;

end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#HPMERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,n(hp.HEADER_ID)||'&d'||n(hp.MSG_SOURCE)||'&d');
   utl_file.put_line(handle,n(r_activity)||'&d'||n(hp.REQUEST_ID)||'&d');
   utl_file.put_line(handle,n(r_descrip)||'&d'||n(hp.MESSAGE_TEXT)||'&el');

   if :r_flag is not null then
     :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="HPMERR">Warning List:</a> &eb &f');
   for i in 1..10
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/

-- <do not run> DROP INDEX OE_PROCESSING_MSGS_777

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
If :v_head_only = 'N' then 

-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

if UPPER(nvl('&prt_price','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f HEADER PRICE ADJUSTMENTS (ADJ)   <a HREF="#ADJC">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh APPLIED &dh PRC_ADJ_ID &dh LST_HD_ID &dh LST_LN_ID &dh LIST_LN_NO &dh MOD_LVL &dh ');
UTL_FILE.PUT_LINE(handle,'LIST_TYPE_CODE &dh CHG_TY_CD &dh ARITH_OP &dh OP_PER_QTY &dh ADJ_AMT_PQ &dh OPERAND &dh ');
UTL_FILE.PUT_LINE(handle,'ADJ_AMT &dh CD &dh AF &dh PI &dh AC &dh IF &dh EF &dh UA &dh UF &dh AP &dh LK &dh ');
UTL_FILE.PUT_LINE(handle,'PERC &dh COST_ID &dh TAX_CODE &dh PP &eh');

declare
 cursor h_prc_adj is
select
ADJ.PRICE_ADJUSTMENT_ID            PRC_ADJ_ID,
nvl(ADJ.APPLIED_FLAG,'N')          APPLIED_FLAG,
ADJ.LIST_HEADER_ID                 LST_HD_ID,
ADJ.LIST_LINE_ID                   LST_LN_ID,
ADJ.LIST_LINE_NO                   LIST_LN_NO,
ADJ.MODIFIER_LEVEL_CODE            MOD_LVL,
ADJ.LIST_LINE_TYPE_CODE            LIST_TYPE_CODE,
ADJ.CHARGE_TYPE_CODE               CHG_TY_CD,
ADJ.ARITHMETIC_OPERATOR            ARITH_OP,
ADJ.OPERAND_PER_PQTY               OP_PER_QTY,
ADJ.ADJUSTED_AMOUNT_PER_PQTY       ADJ_AMT_PQ,
ADJ.OPERAND                        OPERAND,
ADJ.ADJUSTED_AMOUNT                ADJ_AMT,
ADJ.CREDIT_OR_CHARGE_FLAG          CD,
ADJ.AUTOMATIC_FLAG                 AF,
ADJ.PRINT_ON_INVOICE_FLAG          PI,
ADJ.ACCRUAL_FLAG                   AC,
ADJ.INVOICED_FLAG                  INF,
ADJ.ESTIMATED_FLAG                 EF,
ADJ.UPDATE_ALLOWED                 UA,
ADJ.UPDATED_FLAG                   UF,
ADJ.APPLIED_FLAG                   AP,
ADJ.LOCK_CONTROL                   LK,
ADJ.PERCENT                        PERC,
ADJ.COST_ID                        COST_ID,
ADJ.TAX_CODE                       TAX_CODE,
ADJ.PRICING_PHASE_ID               PP
from OE_PRICE_ADJUSTMENTS   ADJ
where  ADJ.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
        and  ADJ.LINE_ID              IS NULL
--        and  ADJ.APPLIED_FLAG         = 'Y'
order by ADJ.APPLIED_FLAG,LIST_TYPE_CODE;

begin
 for hh in h_prc_adj
 loop
   utl_file.put_line(handle,'&sld'||n(hh.APPLIED_FLAG)||'&d'||n(hh.PRC_ADJ_ID)||'&d'||n(hh.LST_HD_ID)||'&d');
   utl_file.put_line(handle,n(hh.LST_LN_ID)||'&d'||n(hh.LIST_LN_NO)||'&d'||n(hh.MOD_LVL)||'&d');
   utl_file.put_line(handle,n(hh.LIST_TYPE_CODE)||'&d'||n(hh.CHG_TY_CD)||'&d'||n(hh.ARITH_OP)||'&d');
   utl_file.put_line(handle,n(hh.OP_PER_QTY)||'&d'||n(hh.ADJ_AMT_PQ)||'&d'||n(hh.OPERAND)||'&d');
   utl_file.put_line(handle,n(hh.ADJ_AMT)||'&d'||n(hh.CD)||'&d'||n(hh.AF)||'&d');
   utl_file.put_line(handle,n(hh.PI)||'&d'||n(hh.AC)||'&d'||n(hh.INF)||'&d');
   utl_file.put_line(handle,n(hh.EF)||'&d'||n(hh.UA)||'&d'||n(hh.UF)||'&d');
   utl_file.put_line(handle,n(hh.AP)||'&d'||n(hh.LK)||'&d'||n(hh.PERC)||'&d');
   utl_file.put_line(handle,n(hh.COST_ID)||'&d'||n(hh.TAX_CODE)||'&d'||n(hh.PP)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_price

UTL_FILE.PUT_LINE(handle,'&f &f MTL_SALES_ORDERS (MSO)  &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DS_HEADER_ID &dh HEADER_ID &dh ORDER_NUMBER &dh ORDER_TYPE_NAME &dh CONSTANTOE &eh');

declare
 cursor mtl_sal is
select
     MSO.SALES_ORDER_ID     ,
     ORD.HEADER_ID                 ,
     ORD.ORDER_NUMBER              ,
     TYP.NAME                      ,
     MSO.SEGMENT3
from
     MTL_SALES_ORDERS              MSO,
     OE_ORDER_HEADERS              ORD,
     OE_TRANSACTION_TYPES_VL       TYP
where
     ORD.ORDER_TYPE_ID             = TYP.TRANSACTION_TYPE_ID
and  TO_CHAR(ORD.ORDER_NUMBER)     = MSO.SEGMENT1
and  TYP.NAME(+)                   = MSO.SEGMENT2
-- klr
and  MSO.SEGMENT1                  = '&order_number_selected'
and  ORD.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
order by
     ORD.HEADER_ID;

begin
 for ms in mtl_sal
 loop
   utl_file.put_line(handle,'&sld'||n(ms.SALES_ORDER_ID)||'&d'||n(ms.HEADER_ID)||'&d');
   utl_file.put_line(handle,n(ms.ORDER_NUMBER)||'&d'||n(ms.NAME)||'&d');
   utl_file.put_line(handle,n(ms.SEGMENT3)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

begin
  select distinct(MSO.SALES_ORDER_ID)
    into :sales_ord_id
    from MTL_SALES_ORDERS              MSO,
         OE_ORDER_HEADERS              ORD,
         OE_TRANSACTION_TYPES_TL       TYP,
         FND_LANGUAGES                 FLA
   where ORD.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
     and ORD.ORDER_TYPE_ID             = TYP.TRANSACTION_TYPE_ID
     and TYP.LANGUAGE                  = FLA.LANGUAGE_CODE
     and FLA.INSTALLED_FLAG            = 'B'
     -- klr
     and MSO.SEGMENT1                  = '&order_number_selected'
     and TYP.NAME                      = MSO.SEGMENT2;
end;

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);
  c_lines number;

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
c_lines := 0;
If :v_head_only = 'N' then 

-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="OE_ORDER_LINES">OE_ORDER_LINES (LIN)</a> <a HREF="#OOL">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh LINE &dh LINE_ID &dh DELIVERY DETAIL &dh ITEM ID &dh ITEM &dh ');
UTL_FILE.PUT_LINE(handle,'FLOW PROCESS &dh FLOW CODE &dh OP &dh BK &dh SH &dh CN &dh VD &dh SI &dh FF &dh ATO &dh ');
UTL_FILE.PUT_LINE(handle,'SMC &dh ORDER QTY &dh UOM &dh SELL PRICE &dh LIST PRICE &dh ');
UTL_FILE.PUT_LINE(handle,'CALC PRICE &dh RESERV QTY &dh SHIPNG QTY &dh SHIPPD QTY &dh FULFIL QTY &dh CANCEL QTY &dh ');
UTL_FILE.PUT_LINE(handle,'INVOIC QTY &dh SCHD ST_CD &dh WH_ID &dh ORG &dh CREATE DATE &dh ');
UTL_FILE.PUT_LINE(handle,'REQUEST DATE &dh SCHED DATE &dh ACTUAL SHIP_DATE &dh LINE TYPE &dh LINE CATEG &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM TYPE &dh ORDERED ITEM_ID &dh ORDERED ITEM &dh SOURCE TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'PRICE LIST_ID &dh DEMAND CLASS &dh CFG &dh WH_ID &dh PRT LN_ID &dh ATO LN_ID &dh LINK LN_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SPLIT BY &dh SPLIT LN_ID &dh CONFIG HD_ID &dh INVOIC INT_STAT &dh STA &dh STB &dh SHIP SET_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP SET_TY &dh LINE SET_ID &dh LINE SET_TY &dh ARRIV SET_ID &dh ARRIV SET_TY &dh OTHER SETS &dh ');
UTL_FILE.PUT_LINE(handle,'DISCRETE ORDER_QTY &dh DISCR UOM &dh DISCRETE SHPNG_QTY &dh DISCRETE SHPNG_UOM &dh ');
UTL_FILE.PUT_LINE(handle,'DISCRETE SHIPPD_QTY &dh DISCRETE FULFLL_QTY &dh DISCRETE CANCEL_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'LAST UPD_DATE &dh');
UTL_FILE.PUT_LINE(handle,'TRACK QTY_IND &dh PRIMARY UOM_COD &dh DUAL_UOM CONTROL &dh SECONDARY DEFAULT_IND &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY UOM_COD &dh CHILD LOT_FLAG &dh PARENT_CHILD GEN_FLAG &dh LOT DIVIS_FLAG &dh ');
UTL_FILE.PUT_LINE(handle,'GRADE CNTRL_FLAG &dh ONT_PRICING QTY_SOURCE &dh DUAL_UOM DEV_HGH &dh DUAL_UOM DEV_LOW &dh ');
UTL_FILE.PUT_LINE(handle,'LOT CONTROL &dh LOCATION CTRL_CODE &dh STATUS CONTROL &dh SRC_DOC LINE_ID &eh ');

declare
 cursor line1 is
  select
    to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number))  line_n,
     LIN.LINE_ID                   Line_i,
     LIN.INVENTORY_ITEM_ID         Item_i,
     lpad(' ',length(LIN.SORT_ORDER)/4,rpad('.',80,'....!'))||ITM.SEGMENT1   Item_na,
     substr(LIN.FLOW_STATUS_CODE,1,22) Line_st,
     nvl(LIN.ORDERED_QUANTITY,0)   Ordq,
     LIN.ORDER_QUANTITY_UOM        Orduom,
     nvl(LIN.ORDERED_QUANTITY2,0)  Ordq2,
     LIN.ORDERED_QUANTITY_UOM2     Orduom2,
     LIN.UNIT_SELLING_PRICE        sell,
     LIN.UNIT_LIST_PRICE           lisl,
     nvl(LIN.SHIPPED_QUANTITY,0)   shpq,
     nvl(LIN.SHIPPED_QUANTITY2,0)  shpq2,
     nvl(LIN.SHIPPING_QUANTITY,0)  SHN_Q,
     nvl(LIN.SHIPPING_QUANTITY2,0) SHN_Q2,
     nvl(LIN.SHIPPING_QUANTITY_UOM2,0)  SHN_QUOM2,
     nvl(FULFILLED_QUANTITY,0)     fulq,
     nvl(FULFILLED_QUANTITY2,0)    fulq2,
     nvl(LIN.CANCELLED_QUANTITY,0) canq,
     nvl(LIN.CANCELLED_QUANTITY2,0) canq2,
     nvl(LIN.INVOICED_QUANTITY,0)  invq,
     substr(LIN.SCHEDULE_STATUS_CODE,1,5)      schc,
     nvl(LIN.OPEN_FLAG,'N')        openf,
     nvl(LIN.BOOKED_FLAG,'N')      bookf,
     nvl(LIN.SHIPPABLE_FLAG,'N')   shipf,
     nvl(LIN.CANCELLED_FLAG,'N')   canf,
     nvl(LIN.VISIBLE_DEMAND_FLAG,'N')  vdem,
     nvl(LIN.FULFILLED_FLAG, 'N')  fulf,
     nvl(LIN.SHIPPING_INTERFACED_FLAG,'N')    SI,
     decode(nvl(LIN.ATO_LINE_ID,0),0,'N','Y') ato_i,
     nvl(LIN.SHIP_MODEL_COMPLETE_FLAG,'N')  smcf,
     LIN.SHIP_FROM_ORG_ID          shipfrom,
--     PAR.ORGANIZATION_CODE         org_i,
     to_char(LIN.REQUEST_DATE,'DD-MON-RR_HH24:MI:SS')  reqd,
     to_char(LIN.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS') schd,
--     TYP.NAME                      lin_ty,
     LIN.LINE_TYPE_ID              LINE_TYPE_ID,
     LIN.LINE_CATEGORY_CODE        lin_cat,
     LIN.ITEM_TYPE_CODE            itm_tc,
     LIN.ORDERED_ITEM_ID           ord_it,
     LIN.ORDERED_ITEM              ord_it_name,
     LIN.SOURCE_TYPE_CODE          Src_tc,
     LIN.PRICE_LIST_ID             prlst,
     LIN.DEMAND_CLASS_CODE         demc,
     nvl(LIN.OPTION_FLAG,'N')                 CFG,
     LIN.SHIP_FROM_ORG_ID                     WH_ID,
     LIN.TOP_MODEL_LINE_ID                    PRT_LN_ID,
     LIN.ATO_LINE_ID                          ATO_LN_ID,
     LIN.LINK_TO_LINE_ID                      LNK_LN_ID,
     LIN.SPLIT_BY                             SPL_BY,
     LIN.SPLIT_FROM_LINE_ID                   SPL_LN_ID,
     LIN.CONFIG_HEADER_ID                     CFG_HD_ID,
     nvl(LIN.INVOICE_INTERFACE_STATUS_CODE,'N') INVC_INT_STAT,
     LIN.SHIP_TOLERANCE_ABOVE                 STA,
     LIN.SHIP_TOLERANCE_BELOW                 STB,
     LIN.SHIP_SET_ID                          SH_SET_ID,
     ST2.SET_TYPE                             SH_SET_TY,
     LIN.LINE_SET_ID                          LN_SET_ID,
     ST3.SET_TYPE                             LN_SET_TY,
     LIN.ARRIVAL_SET_ID                       AR_SET_ID,
     ST1.SET_TYPE                             AR_SET_TY,
     LIN.CALCULATE_PRICE_FLAG                 CAL_PR,
     to_char(LIN.ACTUAL_SHIPMENT_DATE,'DD-MON-RR_HH24:MI:SS')  act_shp,
     to_char(LIN.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')  cre_date,
     LIN.ordered_quantity2                    ord_qty2,
     LIN.ordered_quantity_uom2                ord_uom2,
     to_char(LIN.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS')  upd_date,
     ITM.TRACKING_QUANTITY_IND                trck_qty_ind,
     ITM.PRIMARY_UOM_CODE                     PRM_UOM,
     ITM.DUAL_UOM_CONTROL                     DUAL_UOM,
     ITM.SECONDARY_DEFAULT_IND                SEC_DEF_IND,
     ITM.SECONDARY_UOM_CODE                   SEC_UOM,
     ITM.CHILD_LOT_FLAG                       CHLD_LOT,
     ITM.PARENT_CHILD_GENERATION_FLAG         PAR_CHLD,
     ITM.LOT_DIVISIBLE_FLAG                   LOT_DIV,
     ITM.GRADE_CONTROL_FLAG                   GRAD_CTRL,
     Decode(ITM.ONT_PRICING_QTY_SOURCE,
            'P','Primary', 'Secondary')       ONT_PR_QTY,
     ITM.dual_uom_deviation_high              DUAL_UOM_DEV_H,
     ITM.dual_uom_deviation_low               DUAL_UOM_DEV_L,
     ITM.lot_control_code                     lot_ctl,
     ITM.location_control_code                loct_ctl,
     ITM.lot_status_enabled                   status_ctl,
     LIN.source_document_line_id              sdli
from
     OE_ORDER_LINES                LIN,
--     OE_TRANSACTION_TYPES          TYP,
     MTL_SYSTEM_ITEMS              ITM,
--     MTL_PARAMETERS                PAR,
     OE_SETS                       ST1,
     OE_SETS                       ST2,
     OE_SETS                       ST3
where
     LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)     in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
-- and  LIN.LINE_TYPE_ID               = TYP.TRANSACTION_TYPE_ID
-- and  LIN.SHIP_FROM_ORG_ID           = PAR.ORGANIZATION_ID(+)
and  LIN.SHIP_FROM_ORG_ID           = ITM.ORGANIZATION_ID(+)
and  LIN.INVENTORY_ITEM_ID          = ITM.INVENTORY_ITEM_ID(+)
-- and  LIN.OPTION_NUMBER              IS NULL
-- and  LIN.ITEM_TYPE_CODE             <> 'INCLUDED'
and  LIN.ARRIVAL_SET_ID            = ST1.SET_ID(+)
and  LIN.SHIP_SET_ID               = ST2.SET_ID(+)
and  LIN.LINE_SET_ID               = ST3.SET_ID(+)
order by
    nvl(LIN.line_number,0), nvl(LIN.shipment_number,0), nvl(LIN.option_number,0),
    nvl(LIN.component_number,0), nvl(LIN.service_number,0);
--     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
--     NVL(LIN.SORT_ORDER,                '0000'),
--     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
--     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
--     NVL(LIN.SERVICE_REFERENCE_LINE_ID, LIN.LINE_ID),
--     LIN.LINE_ID;  

 cursor setl(lin number) is
  select os.set_id, os.set_type
    from oe_sets os, oe_line_sets ols
   where os.set_id = ols.set_id
     and line_id = lin;

r_del_det  varchar2(100);
r_pro_nab  varchar2(100);
r_act_nab  varchar2(100);
r_resultb  varchar2(100);
r_act_sb   varchar2(100);
r_sets     varchar2(100);
r_omint    varchar2(100);
r_invint   varchar2(100);
org_i      varchar2(100);
lin_ty     varchar2(100);

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

begin
  :r_error := 0;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..70
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip  := '    1. Ordered Quantity is less than Shipped Quantity.';
  msg(2).descrip  := '    2. Ordered Quantity is less than Fulfilled Quantity.';
  msg(3).descrip  := '    3. Ordered Quantity is less than Invoiced Quantity.';
  msg(4).descrip  := '    4. Interface to WSH set to "N" but exist Delivery Details associated to this Order_line.';
  msg(5).descrip  := '    5. Associated Delivery Details has NOT been interface but Shipped, Fulfilled or Invoiced QTY are updated.';

  msg(10).descrip := '   10. Order_Line shows as OPEN but CANCELLED flag is set to Y.';

  msg(11).descrip := '   11. Order_Line status ENTERED but Shipped Qty is greater than zero.';
  msg(12).descrip := '   12. Order_Line status ENTERED but Fulfilled Qty is greater than zero.';

  msg(15).descrip := '   15. Order_Line status BOOKED but "Book" activity has not been completed.';
  msg(16).descrip := '   16. Order_Line status BOOKED but Shipped Qty is greater than zero.';
  msg(17).descrip := '   17. Order_Line status BOOKED but Fulfilled Qty is greater than zero.';

  msg(20).descrip := '   20. Order_Line status AWAITING SHIPPING but Item is set to Non-Shippable.';
  msg(21).descrip := '   21. Order_Line status AWAITING SHIPPING but Shipped Qty is greater than zero.';
  msg(22).descrip := '   22. Order_Line status AWAITING SHIPPING but Fulfilled Qty is greater than zero.';
  msg(23).descrip := '   23. No Delivery Details associated to this Order_line, Interface to WSH is set to "Y".';
  msg(24).descrip := '   24. Associated Delivery Details have invalid RELEASED status.';
  msg(25).descrip := '   25. Associated Delivery Details have invalid INTERFACE status (Not Shipped but Interfaced to OM or INV).';

  msg(40).descrip := '   40. Line status is CLOSED but associated Delivery Details still not interface to OM.';
  msg(41).descrip := '   41. Line status is CLOSED but associated Delivery Details still not interface to INVentory.';

  msg(45).descrip := '   45. Line status is CANCELLED but associated Delivery Details has been interfaced to OM.';
  msg(46).descrip := '   46. Line status is CANCELLED but associated Delivery Details has been interfaced to INVentory.';

  msg(50).descrip := '   50. No WorkFlow Process associated to this line.';
  msg(51).descrip := '   51. Incorrect WorkFlow Process associated to this line.';
  msg(52).descrip := '   52. Incorrect WorkFlow Activity associated to this line.';
  msg(53).descrip := '   53. Incorrect WorkFlow Activity Result for this line.';
  msg(54).descrip := '   54. Incorrect WorkFlow Activity Status for this line.';
  msg(55).descrip := '   55. Order Line status is BOOKED, WorkFlow Activities shows additional activities for this line.';

  msg(60).descrip := '   60. Organization_id is Null for this line.';
  msg(61).descrip := '   61. Transaction Type is Null for this line.';
end if;

 for i in line1
 loop
   :r_flag := '';
   r_del_det := '';
   r_sets := '';

   -- get Order_line WF name
   begin
     :r_line_t := '';
     select WFA.DISPLAY_NAME
       into :r_line_t
       FROM WF_ITEM_ACTIVITY_STATUSES     WFS,
            WF_PROCESS_ACTIVITIES         WFP,
            WF_ACTIVITIES_VL              WFA
      WHERE WFS.ITEM_TYPE           = 'OEOL'
        -- klr
        and WFS.ITEM_KEY            = to_char(I.LINE_I)
        and WFS.PROCESS_ACTIVITY    = WFP.INSTANCE_ID
        and WFP.PROCESS_NAME        = 'ROOT'
        and WFP.ACTIVITY_ITEM_TYPE  = WFA.ITEM_TYPE
        and WFP.ACTIVITY_NAME       = WFA.NAME
        and nvl(WFA.VERSION,-1)     = (select nvl(max(VERSION),-1)
                                         from WF_ACTIVITIES WF2
                                        where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                                          and WF2.NAME      = WFP.ACTIVITY_NAME);
   exception
     when no_data_found then
       :r_flag := :r_flag || '50 ';
       msg(50).flag := '1';
   end;

   -- get organization code
   begin
     select ORGANIZATION_CODE
       into org_i
       from MTL_PARAMETERS
      where i.shipfrom   = ORGANIZATION_ID(+);
   exception
     when no_data_found then
       org_i := null;
       :r_flag := :r_flag || '60 ';
       msg(60).flag := '1';
   end;

   -- get Transaction Type name
   begin
     select NAME
       into lin_ty
       from OE_TRANSACTION_TYPES
      where i.LINE_TYPE_ID   = TRANSACTION_TYPE_ID;
   exception
     when others then
       lin_ty := null;
       :r_flag := :r_flag || '61 ';
       msg(61).flag := '1';
   end;

   -- Check if exist associated Delivery Detail id regardles of line status and SI flag.
   begin
     select Delivery_detail_id
       into r_del_det
       from WSH_Delivery_Details
      where SOURCE_LINE_ID   = I.LINE_I
        and source_code = 'OE'
        and rownum = 1;
   exception
     when no_data_found then
       null;   -- conditions will be evaluated later
   end;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   -- Reservations
   select sum(nvl(RESERVATION_QUANTITY,0))
     into :r_res_q
     from MTL_RESERVATIONS RES
    where RES.DEMAND_SOURCE_HEADER_ID = :sales_ord_id
      and RES.DEMAND_SOURCE_TYPE_ID in  (2,8,9,21,22)
      and RES.DEMAND_SOURCE_LINE_ID  = i.LINE_I;

   -- current WF status
   begin
     :r_pro_na := '';
     :r_act_na := '';
     :r_result := '';
     :r_act_s  := '';

     select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
            WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
            LKP.MEANING
       into :r_pro_na, :r_act_na, :r_result, :r_act_s
       from WF_ITEM_ACTIVITY_STATUSES WFS,
            WF_PROCESS_ACTIVITIES     WFP,
            WF_ACTIVITIES_VL          WFA,
            WF_ACTIVITIES_VL          WFA1,
            WF_LOOKUPS                LKP
      where WFS.ITEM_TYPE          = 'OEOL'
        and WFS.item_key           = i.line_i
        and WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
        and WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
        and WFP.PROCESS_NAME       = WFA.NAME
        and WFP.PROCESS_VERSION    = WFA.VERSION
        and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
        and WFP.ACTIVITY_NAME      = WFA1.NAME
        and WFA1.VERSION =  (select max(VERSION)  from WF_ACTIVITIES WF2
                             where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                               and WF2.NAME      = WFP.ACTIVITY_NAME)
        and LKP.LOOKUP_TYPE        = 'WFENG_STATUS'
        and LKP.LOOKUP_CODE        = WFS.ACTIVITY_STATUS
        and Execution_time         = (Select Max(execution_time) from WF_ITEM_ACTIVITY_STATUSES
                                       where item_type = 'OEOL' and Item_key = i.line_i);
   exception
     when no_data_found then
       if msg(50).flag = '1' then
         null;   -- problem already discovered
       else
         :r_flag := :r_flag || '50 ';
         msg(50).flag := '1';
       end if;
   end;

   -- Get associated sets
   for sl in setl(i.line_i)
   loop
     r_sets := r_sets || to_char(sl.set_id)||'-'||sl.set_type || ' ';
   end loop;
   ---
   -- Basic Verification
   --
   -- Ordered Qty less than Shipped (with Tolerance)
   If  i.Ordq*(100+nvl(i.sta,0))/100 < i.shpq then
     :r_flag := :r_flag || '1 ';
     msg(1).flag := '1';
   end if;

   -- Ordered Qty less than Fulfilled (with Tolerance)
   If  i.Ordq*(100+nvl(i.sta,0))/100 < i.fulq then
     :r_flag := :r_flag || '2 ';
     msg(2).flag := '1';
   end if;

   -- Ordered Qty less than Invoiced (with Tolerance)
   If  i.Ordq*(100+nvl(i.sta,0))/100 < i.invq then
     :r_flag := :r_flag || '3 ';
     msg(3).flag := '1';
   end if;

   If i.si = 'N' then     -- Non interfaced to WSH
     select count(*) -- count total wdd for this line
       into :r_wdd
       from WSH_Delivery_Details
      where SOURCE_LINE_ID   = I.LINE_I
        and source_code = 'OE';
     If :r_wdd > 0 then
       :r_flag := :r_flag || '4 ';
       msg(4).flag := '1';
     end if;
   end if;

   -- If line is Shippable
   -- Check if shipped, fulfilled or invoiced quantities has been updated and associated Del.Details still not Interfaced to OM
   if  i.shipf = 'Y' then   -- Shippable line
     if i.shpq > 0
      or i.fulq > 0
      or i.invq > 0 then
       select count(*)    -- count if any associated Delivery Detail has been OM interfaced
         into r_omint
         from WSH_Delivery_Details
        where SOURCE_LINE_ID   = I.LINE_I
          and source_code = 'OE'
          and OE_INTERFACED_FLAG = 'Y';
       if r_omint = 0 then
         :r_flag := :r_flag || '5 ';
         msg(5).flag := '1';
       end if;
     end if;
   end if;

   -- line open but Cancelled flag is Y
   if i.openf = 'Y'
    and i.canf = 'Y' then
     :r_flag := :r_flag || '10 ';
     msg(10).flag := '1';
   end if;

   ---
   -- Verifications for Order_Lines on ENTERED status
   ---
   If i.line_st = 'ENTERED' then

     if  i.shpq > 0 then     -- Quantity Shipped
       :r_flag := :r_flag || '11 ';
       msg(11).flag := '1';
     end if;
     if i.fulq > 0 then      -- Quantity Fulfilled
       :r_flag := :r_flag || '12 ';
       msg(12).flag := '1';
     end if;

     -- verify current WF status
     if :r_pro_na <> 'Enter - Line' then
       :r_flag := :r_flag || '51 ';
       msg(51).flag := '1';
      elsif :r_act_na <> 'Wait for Booking' then
        :r_flag := :r_flag || '52 ';
        msg(52).flag := '1';
      elsif :r_result is not null then
        :r_flag := :r_flag || '53 ';
        msg(53).flag := '1';
      elsif :r_act_s <> 'Notified' then
        :r_flag := :r_flag || '54 ';
        msg(54).flag := '1';
     end if;
   end if; -- ENTERED

   ---
   -- Verifications for Order_Lines on BOOKED status
   ---
   If i.line_st = 'BOOKED' then
     -- Check is Book activity has been completed
     begin
       select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
              WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
              LKP.MEANING
         into r_pro_nab, r_act_nab, r_resultb, r_act_sb
         from WF_ITEM_ACTIVITY_STATUSES WFS,
              WF_PROCESS_ACTIVITIES     WFP,
              WF_ACTIVITIES_VL          WFA,
              WF_ACTIVITIES_VL          WFA1,
              WF_LOOKUPS                LKP
        where WFS.ITEM_TYPE          = 'OEOL'
          and WFS.item_key           = i.line_i
          and WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
          and WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
          and WFP.PROCESS_NAME       = WFA.NAME
          and WFP.PROCESS_VERSION    = WFA.VERSION
          and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
          and WFP.ACTIVITY_NAME      = WFA1.NAME
          and WFA1.VERSION =  (select max(VERSION)  from WF_ACTIVITIES WF2
                               where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                                 and WF2.NAME      = WFP.ACTIVITY_NAME)
          and LKP.LOOKUP_TYPE        = 'WFENG_STATUS'
          and LKP.LOOKUP_CODE        = WFS.ACTIVITY_STATUS
          and WFA1.DISPLAY_NAME      = 'Wait for Booking';
     exception
       when no_data_found then
         :r_flag := :r_flag || '15 ';
         msg(15).flag := '1';
     end;

     if r_act_nab = 'Wait for Booking' then
       if r_resultb = 'Null'
          and r_act_sb = 'Complete' then
            null;  -- status is OK
        else
         :r_flag := :r_flag || '15 ';
         msg(15).flag := '1';
       end if;
     end if;

     if  i.shpq > 0 then     -- Quantity Shipped
       :r_flag := :r_flag || '16 ';
       msg(16).flag := '1';
     end if;
     if i.fulq > 0 then      -- Quantity Fulfilled
       :r_flag := :r_flag || '17 ';
       msg(17).flag := '1';
     end if;

     -- Check if there are other activities after Booking.
     if :r_act_na = 'Wait for Booking' then
       null;   -- OK last activity is Booking
      else
       :r_flag := :r_flag || '55 ';
       msg(55).flag := '1';
     end if;

   end if; -- BOOKED

   ---
   -- Verifications for Order_Lines on AWAITING SHIPPING status
   ---
   If i.line_st = 'AWAITING_SHIPPING' then
     if i.shipf = 'N' then   -- No shippable line
       :r_flag := :r_flag || '20 ';
       msg(20).flag := '1';
     end if;
     if  i.shpq > 0 then     -- Quantity Shipped
       :r_flag := :r_flag || '21 ';
       msg(21).flag := '1';
     end if;
     if i.fulq > 0 then      -- Quantity Fulfilled
       :r_flag := :r_flag || '22 ';
       msg(22).flag := '1';
     end if;
     select count(*) -- count total wdd for this line
       into :r_wdd
       from WSH_Delivery_Details
      where SOURCE_LINE_ID   = I.LINE_I
        and source_code = 'OE';
     If :r_wdd = 0 and i.si = 'Y' then
       :r_flag := :r_flag || '23 ';
       msg(23).flag := '1';
      else
       select count(*)  -- Invalid Release flag status
         into :r_wdd
         from WSH_Delivery_Details
        where SOURCE_LINE_ID   = I.LINE_I
          and source_code = 'OE'
          and RELEASED_STATUS  not in ('Y','R','S','B','P','C','N','D','X');
       If :r_wdd > 0 then
         :r_flag := :r_flag || '24 ';
         msg(24).flag := '1';
       end if;
       select count(*) -- count Released status 'R' but OM or INV interfaced
         into :r_wdd
         from WSH_Delivery_Details
        where SOURCE_LINE_ID   = I.LINE_I
          and source_code = 'OE'
          and RELEASED_STATUS <> 'C'
          and (nvl(INV_INTERFACED_FLAG,'N') not in ( 'N','X')
               or nvl(OE_INTERFACED_FLAG,'N') <> 'N');
       If :r_wdd > 0 then
         :r_flag := :r_flag || '25 ';
         msg(25).flag := '1';
       end if;
     end if; -- no wdd

     -- verify current WF status
     if :r_pro_na <> 'Ship - Line, Manual' then
       :r_flag := :r_flag || '51 ';
       msg(51).flag := '1';
      elsif :r_act_na <> 'Ship' then
        :r_flag := :r_flag || '52 ';
        msg(52).flag := '1';
      elsif :r_result is not null then
        :r_flag := :r_flag || '53 ';
        msg(53).flag := '1';
      elsif :r_act_s <> 'Notified' then
        :r_flag := :r_flag || '54 ';
        msg(54).flag := '1';
     end if;

   end if; -- AWAITING SHIPPING

   ---
   -- Verifications for Order_Lines on SHIPPED status
   ---
   If i.line_st = 'SHIPPED' then
     null;  -- nothing yet
     -- :r_flag := :r_flag || '';
     -- msg(30).flag := '1';
   end if; -- SHIPPED

   ---
   -- Verifications for Order_Lines on FULFILLED status
   ---
   If i.line_st = 'FULFILLED' then
     null;  -- nothing yet
     -- :r_flag := :r_flag || '';
     -- msg(40).flag := '1';
   end if; -- FULFILLED

   ---
   -- Verifications for Order_Lines on INVOICED status
   ---
   If i.line_st = 'INVOICED' then
     null; -- nothing yet
     -- :r_flag := :r_flag || '';
     -- msg(40).flag := '1';
   end if; -- INVOICED

   ---
   -- Verifications for Order_Lines on CLOSED status
   ---
   If i.line_st = 'CLOSED' then
     -- If line is Shippable check if associated Del.Details still not Interfaced to OM or INV
     if i.shipf = 'Y' then
       -- count if any associated Delivery Detail has NOT been OM or INV interfaced
       begin
         select sum(decode(nvl(OE_INTERFACED_FLAG,'N'),'N',1,0)), sum(decode(nvl(INV_INTERFACED_FLAG,'N'),'N',1,0))
           into r_omint, r_invint
           from WSH_Delivery_Details
          where SOURCE_LINE_ID   = I.LINE_I
            and SOURCE_CODE = 'OE'
            and released_status <> 'D'
          group by SOURCE_LINE_ID;
        exception
         when no_data_found then
           r_omint := 0;
           r_invint := 0;
       end;
       if r_omint > 0 then
         :r_flag := :r_flag || '40 ';
         msg(40).flag := '1';
       end if;
       if r_invint > 0 then
         :r_flag := :r_flag || '41 ';
         msg(41).flag := '1';
       end if;
     end if;
   end if; -- CLOSED

   ---
   -- Verifications for Order_Lines on CANCELLED status
   ---
   If i.line_st = 'CANCELLED' then
     -- If line is Shippable check if associated Del.Details open Pending Interfaced to OM or INV
     if i.shipf = 'Y' then
       -- count if any associated Delivery Detail has been interfaced to OM or INV
       begin
         select sum(decode(nvl(OE_INTERFACED_FLAG,'N'),'Y',1,0)), sum(decode(nvl(INV_INTERFACED_FLAG,'N'),'Y',1,0))
           into r_omint, r_invint
           from WSH_Delivery_Details
          where SOURCE_LINE_ID  = I.LINE_I
            and source_code = 'OE'
            and RELEASED_STATUS <> 'D'
          group by SOURCE_LINE_ID;
        exception
         when no_data_found then
           r_omint := 0;
           r_invint := 0;
       end;
       if r_omint > 0 then
         :r_flag := :r_flag || '45 ';
         msg(45).flag := '1';
       end if;
       if r_invint > 0 then
         :r_flag := :r_flag || '46 ';
         msg(46).flag := '1';
       end if;
     end if;
   end if; -- CANCELLED
end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#OLERR">'||n(:r_flag)||'</a> &eb &d'||n(i.line_n)||'&d');
   utl_file.put_line(handle,'<a NAME="OOE'||i.Line_i||'">'||n(i.Line_i)||'</a>'||'&d'||'<a HREF="#WDD'||r_del_det||'">'||n(r_del_det)||'</a>');
   utl_file.put_line(handle,'&d'||n(i.Item_i)||'&d'||n(i.Item_na)||'&d');
   utl_file.put_line(handle,'<a HREF="#WF'||i.Line_i||'">'||n(:r_line_t)||'</a>'||'&d');
   utl_file.put_line(handle,n(i.Line_st)||'&d'||n(i.openf)||'&d');
   utl_file.put_line(handle,n(i.bookf)||'&d'||n(i.shipf)||'&d');
   utl_file.put_line(handle,n(i.canf)||'&d'||n(i.vdem)||'&d');
   utl_file.put_line(handle,n(i.si)||'&d'||n(i.fulf)||'&d');
   utl_file.put_line(handle,n(i.ato_i)||'&d'||n(i.smcf)||'&d');
   utl_file.put_line(handle,n(i.Ordq)||'&d'||n(i.Orduom)||'&d');
   utl_file.put_line(handle,n(i.sell)||'&d');
   utl_file.put_line(handle,n(i.lisl)||'&d'||n(i.cal_pr)||'&d');
   utl_file.put_line(handle,n(:r_res_q)||'&d'||n(i.shn_q)||'&d');
   utl_file.put_line(handle,n(i.shpq)||'&d'||n(i.fulq)||'&d');
   utl_file.put_line(handle,n(i.canq)||'&d');
   utl_file.put_line(handle,n(i.invq)||'&d'||n(i.schc)||'&d');
   utl_file.put_line(handle,n(i.shipfrom)||'&d'||n(org_i)||'&d');
   utl_file.put_line(handle,n(i.cre_date)||'&d');
   utl_file.put_line(handle,n(i.reqd)||'&d'||n(i.schd)||'&d');
   utl_file.put_line(handle,n(i.act_shp)||'&d');
   utl_file.put_line(handle,n(lin_ty)||'&d'||n(i.lin_cat)||'&d');
   utl_file.put_line(handle,n(i.itm_tc)||'&d'||n(i.ord_it)||'&d');
   utl_file.put_line(handle,n(i.ord_it_name)||'&d'||n(i.Src_tc)||'&d');
   utl_file.put_line(handle,n(i.prlst)||'&d'||n(i.demc)||'&d');
   utl_file.put_line(handle,n(i.CFG)||'&d'||n(i.WH_ID)||'&d');
   utl_file.put_line(handle,n(i.PRT_LN_ID)||'&d'||n(i.ATO_LN_ID)||'&d');
   utl_file.put_line(handle,n(i.LNK_LN_ID)||'&d'||n(i.SPL_BY)||'&d');
   utl_file.put_line(handle,n(i.SPL_LN_ID)||'&d');
   utl_file.put_line(handle,n(i.CFG_HD_ID)||'&d'||n(i.INVC_INT_STAT)||'&d');
   utl_file.put_line(handle,n(i.STA)||'&d');
   utl_file.put_line(handle,n(i.STB)||'&d'||n(i.SH_SET_ID)||'&d');
   utl_file.put_line(handle,n(i.SH_SET_TY)||'&d'||n(i.LN_SET_ID)||'&d');
   utl_file.put_line(handle,n(i.LN_SET_TY)||'&d'||n(i.AR_SET_ID)||'&d');
   utl_file.put_line(handle,n(i.AR_SET_TY)||'&d'||n(r_sets)||'&d');
   utl_file.put_line(handle,n(i.Ordq2)||'&d'||n(i.Orduom2)||'&d');
   utl_file.put_line(handle,n(i.shn_q2)||'&d'||n(i.shn_quom2)||'&d');
   utl_file.put_line(handle,n(i.shpq2)||'&d'||n(i.fulq2)||'&d');
   utl_file.put_line(handle,n(i.canq2)||'&d');
   utl_file.put_line(handle,n(i.upd_date)||'&d');
   utl_file.put_line(handle,n(i.trck_qty_ind)||'&d'||n(i.PRM_UOM)||'&d');
   utl_file.put_line(handle,n(i.DUAL_UOM)||'&d'||n(i.SEC_DEF_IND)||'&d');
   utl_file.put_line(handle,n(i.SEC_UOM)||'&d'||n(i.CHLD_LOT)||'&d');
   utl_file.put_line(handle,n(i.PAR_CHLD)||'&d'||n(i.LOT_DIV)||'&d');
   utl_file.put_line(handle,n(i.GRAD_CTRL)||'&d'||n(i.ONT_PR_QTY)||'&d');
   utl_file.put_line(handle,n(i.DUAL_UOM_DEV_H)||'&d'||n(i.DUAL_UOM_DEV_L)||'&d');
   utl_file.put_line(handle,n(i.LOT_CTL)||'&d'||n(i.LOCT_CTL)||'&d');
   utl_file.put_line(handle,n(i.STATUS_CTL)||'&d'||n(i.sdli)||'&el');
   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;

 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="OLERR">Warning List:</a> &eb &f');
   for i in 1..70
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/
--AQUI

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
If :v_head_only = 'N' then 

-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

UTL_FILE.PUT_LINE(handle,'&f &f OE_ORDER_LINES_HISTORY (HIL)  &f');
UTL_FILE.PUT_LINE(handle,'&std &sh LINE_ID &dh LINE &dh ORD_Q &dh LCN_Q &dh SHN_Q &dh SHP_Q &dh FUL_Q &dh CAN_Q &dh INC_Q &dh UOM &dh SSC &dh OP &dh');
UTL_FILE.PUT_LINE(handle,'BK &dh SH &dh CN &dh VD &dh SI &dh FF &dh WF_ACT_CODE &dh WF_RESULT &dh HIST_TYPE &dh HIST_CREAT_DATE &dh FLOW_CODE &dh');
UTL_FILE.PUT_LINE(handle,'PRICE  &dh REASON_CODE &dh HIST_COMMENTS &eh');

Declare
cursor l_lin_his is
select
     HIL.LINE_ID                           Line_id,
     to_char(HIL.line_number) ||
          decode(HIL.shipment_number, null, null, '.' || to_char(HIL.shipment_number))||
          decode(HIL.option_number, null, null, '.' || to_char(HIL.option_number)) ||
          decode(HIL.component_number, null, null,
                 decode(HIL.option_number, null, '.',null)||
                 '.'||to_char(HIL.component_number))||
          decode(HIL.service_number,null,null,
                 decode(HIL.component_number, null, '.' , null) ||
                        decode(HIL.option_number, null, '.', null ) ||
                        '.'|| to_char(HIL.service_number)) line_no,
     nvl(HIL.ORDERED_QUANTITY,0)           Ord_q,
     nvl(HIL.LATEST_CANCELLED_QUANTITY,0)  lCan_q,
     nvl(HIL.SHIPPING_QUANTITY,0)          SHI_q,
     nvl(HIL.SHIPPED_QUANTITY,0)           SHP_q,
     nvl(HIL.FULFILLED_QUANTITY,0)         Ful_q,
     nvl(HIL.CANCELLED_QUANTITY,0)         Can_q,
     nvl(HIL.INVOICED_QUANTITY,0)          INV_q,
     HIL.ORDER_QUANTITY_UOM                Ord_q_uom,
     substr(HIL.SCHEDULE_STATUS_CODE,1,5)  Sch_code,
     nvl(HIL.OPEN_FLAG,'N')                OP_f,
     nvl(HIL.BOOKED_FLAG,'N')              BK_f,
     nvl(HIL.SHIPPABLE_FLAG,'N')           SH_f,
     nvl(HIL.CANCELLED_FLAG,'N')           CN_f,
     nvl(HIL.VISIBLE_DEMAND_FLAG,'N')      VD_f,
     nvl(HIL.SHIPPING_INTERFACED_FLAG,'N') SI_f,
     nvl(HIL.FULFILLED_FLAG,'N')           FL_f,
     HIL.WF_ACTIVITY_CODE                  Act_code,
     HIL.WF_RESULT_CODE                    Res_code,
     HIL.HIST_TYPE_CODE                    Typ_code,
     to_char(HIL.HIST_CREATION_DATE, 'DD-MON-RR_HH24:MI:SS')  Hist_cre_date,
     HIL.FLOW_STATUS_CODE                  Sta_code,
     HIL.UNIT_SELLING_PRICE                Sell_p,
     HIL.REASON_CODE                       Reason,
     HIL.HIST_COMMENTS                     comments
from
     OE_ORDER_LINES_HISTORY        HIL
where
     HIL.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,HIL.LINE_ID,
                                         HIL.TOP_MODEL_LINE_ID,
                                         HIL.ATO_LINE_ID,
                                         HIL.LINK_TO_LINE_ID,
                                         HIL.SERVICE_REFERENCE_LINE_ID)
order by
     NVL(HIL.ATO_LINE_ID,               HIL.LINE_ID),
     NVL(HIL.SORT_ORDER,                '0000'),
     NVL(HIL.LINK_TO_LINE_ID,           HIL.LINE_ID),
     NVL(HIL.SOURCE_DOCUMENT_LINE_ID,   HIL.LINE_ID),
     NVL(HIL.SERVICE_REFERENCE_LINE_ID, HIL.LINE_ID),
     HIL.LINE_ID;

begin
 for ll in l_lin_his
 loop
   utl_file.put_line(handle,'&sld'||n(ll.Line_id)||'&d'||n(ll.line_no)||'&d');
   utl_file.put_line(handle,n(ll.Ord_q)||'&d'||n(ll.lcan_q)||'&d');
   utl_file.put_line(handle,n(ll.SHI_q)||'&d'||n(ll.SHP_q)||'&d');
   utl_file.put_line(handle,n(ll.Ful_q)||'&d'||n(ll.CAN_q)||'&d');
   utl_file.put_line(handle,n(ll.INV_q)||'&d'||n(ll.ord_q_uom)||'&d');
   utl_file.put_line(handle,n(ll.Sch_code)||'&d'||n(ll.OP_f)||'&d');
   utl_file.put_line(handle,n(ll.BK_f)||'&d'||n(ll.SH_f)||'&d');
   utl_file.put_line(handle,n(ll.CN_f)||'&d'||n(ll.VD_f)||'&d');
   utl_file.put_line(handle,n(ll.SI_f)||'&d'||n(ll.FL_f)||'&d');
   utl_file.put_line(handle,n(ll.Act_code)||'&d'||n(ll.Res_code)||'&d');
   utl_file.put_line(handle,n(ll.Typ_code)||'&d'||n(ll.Hist_cre_date)||'&d');
   utl_file.put_line(handle,n(ll.Sta_code)||'&d'||n(ll.Sell_p)||'&d');
   utl_file.put_line(handle,n(ll.Reason)||'&d'||n(ll.comments)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

if UPPER(nvl('&prt_wf','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW LINE STATUS &f');

-- break on WFS.ITEM_KEY skip 2;

declare
cursor WF_LINE is
select WFS.ITEM_KEY               ITEM_KEY,
       WFA.DISPLAY_NAME           PROCESS_NAME,
       WFA1.DISPLAY_NAME          ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT_CODE,
       LKP.MEANING                MEANING,
       WFS.NOTIFICATION_ID        NOTIFICATION_ID,
       WFP.PROCESS_NAME           INT_Process_name,
       WFP.ACTIVITY_NAME          INT_Activity_name,
       WFS.ACTIVITY_RESULT_CODE   INT_Act_Res_code,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') B_Date,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS')   E_Date,
       WFS.ERROR_NAME             Err_name,
       WFS.BEGIN_DATE             BEGIN_DATE2,
       WFS.EXECUTION_TIME         EXECUTION_TIME2
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'OEOL'
  and  WFS.item_key           in
              (select to_char(line_id) from OE_ORDER_LINES LIN
               where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
               and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
              )
  and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
  and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
  and  WFP.PROCESS_NAME       = WFA.NAME
  and  WFP.PROCESS_VERSION    = WFA.VERSION
  and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
  and  WFP.ACTIVITY_NAME      = WFA1.NAME
  and  WFA1.VERSION =
      (select max(VERSION)
       from WF_ACTIVITIES WF2
       where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
       and   WF2.NAME      = WFP.ACTIVITY_NAME)
  and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
  and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
UNION ALL
select WFS.ITEM_KEY             ITEM_KEY,
       WFA.DISPLAY_NAME         PROCESS_NAME,
       WFA1.DISPLAY_NAME        ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT_CODE,
       LKP.MEANING                MEANING,
       WFS.NOTIFICATION_ID        NOTIFICATION_ID,
       WFP.PROCESS_NAME           INT_Process_name,
       WFP.ACTIVITY_NAME          INT_Activity_name,
       WFS.ACTIVITY_RESULT_CODE   INT_Act_Res_code,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') B_Date,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS')   E_Date,
       WFS.ERROR_NAME             Err_name,
       WFS.BEGIN_DATE             BEGIN_DATE2,
       WFS.EXECUTION_TIME         EXECUTION_TIME2
from WF_ITEM_ACTIVITY_STATUSES_H WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'OEOL'
  and  WFS.item_key           in
              (select to_char(line_id) from OE_ORDER_LINES LIN
               where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
               and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
              )
  and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
  and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
  and  WFP.PROCESS_NAME       = WFA.NAME
  and  WFP.PROCESS_VERSION    = WFA.VERSION
  and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
  and  WFP.ACTIVITY_NAME      = WFA1.NAME
  and  WFA1.VERSION =
      (select max(VERSION)
       from WF_ACTIVITIES WF2
       where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
       and   WF2.NAME      = WFP.ACTIVITY_NAME)
  and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
  and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
  order by 1, 13, 14;

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;
current_key  number;
line_no  varchar2(10);

begin
  current_key := '';
  :r_error := 0;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..60
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;

end if; -- do_analysis

 -- cycle for table information
 for wf in wf_LINE
 loop
   :r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;  -- nothing yet
end if; -- do_analysis

   -- Print line to Output file
   if wf.item_key <> nvl(current_key,0) then  -- check if item key changed to place a division
     if current_key is not null then  -- first pass don't need to close table
       utl_file.put_line(handle,'&et &f');
     end if;
     utl_file.put_line(handle,'&std &sh <a NAME="WF'||wf.ITEM_KEY||'">WARNING</a> &dh');
     utl_file.put_line(handle,'LIN_NUM &dh');
     utl_file.put_line(handle,'LIN_ID &dh');
     utl_file.put_line(handle,'PROCESS_NAME &dh');
     utl_file.put_line(handle,'ACTIVITY_NAME &dh');
     utl_file.put_line(handle,'RESULT &dh');
     utl_file.put_line(handle,'ACT_STATUS &dh');
     utl_file.put_line(handle,'NOTIF_ID &dh');
     utl_file.put_line(handle,'INT_PROCESS_NAME &dh');
     utl_file.put_line(handle,'INT_ACTIVITY_NAME &dh');
     utl_file.put_line(handle,'INT_RESULT_CODE &dh');
     utl_file.put_line(handle,'BEGIN_DATE &dh');
     utl_file.put_line(handle,'END_DATE &dh');
     utl_file.put_line(handle,'ERROR_NAME &eh');
     current_key := wf.item_key;

     select to_char(LIN.line_number) ||
            decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
            decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
            decode(LIN.component_number, null, null,
                   decode(LIN.option_number, null, '.',null)||
                   '.'||to_char(LIN.component_number))||
            decode(LIN.service_number,null,null,
                   decode(LIN.component_number, null, '.' , null) ||
                          decode(LIN.option_number, null, '.', null ) ||
                          '.'|| to_char(LIN.service_number))
            into line_no
       from OE_ORDER_LINES LIN
      where LIN.Line_id = current_key;

   end if;
   utl_file.put_line(handle,'&sld &b <a HREF="#WFLERR">'||n(:r_flag)||'</a> &eb &d'||n(line_no)||'&d');
   utl_file.put_line(handle,n(wf.ITEM_KEY)||'&d');
   utl_file.put_line(handle,n(wf.Process_name)||'&d'||n(wf.activity_name)||'&d');
   utl_file.put_line(handle,n(wf.Result_code)||'&d'||n(wf.Meaning)||'&d');
   utl_file.put_line(handle,n(wf.Notification_id)||'&d'||n(wf.INT_Process_name)||'&d');
   utl_file.put_line(handle,n(wf.INT_activity_name)||'&d'||n(wf.INT_Act_Res_code)||'&d');
   utl_file.put_line(handle,n(wf.B_date)||'&d');
   utl_file.put_line(handle,n(wf.E_date)||'&d'||n(wf.Err_name)||'&el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;

 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="WFLERR">Warning List:</a> &eb &f');
   for i in 1..60
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');

/*
UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW LINE SKIP INFORMATION (WFSKIPL)&f');

UTL_FILE.PUT_LINE(handle,'&std &sh LINE_ID &dh HEADER_ID &dh DISPLAY_NAME &dh CREATION_DATE &dh USER_ID &dh RESPONSIBILITY_ID &dh APPLICATION_ID &eh');

declare
  r_exist   number;

begin

  select count(*)
    into r_exist
    from all_tables
   where table_name = 'ONT_WF_SKIP_LOG';
  if r_exist = 0 then
    utl_file.put_line(handle,'&et Table ONT_WF_SKIP_LOG is not present on this instance: &f');
 end if;

end;

    select '&sld', WFS.LINE_ID,
           WFS.HEADER_ID,
           WFA.DISPLAY_NAME,
           to_char(WFS.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') cre_date,
           WFS.USER_ID,
           WFS.RESPONSIBILITY_ID,
           WFS.APPLICATION_ID,'&el'
      from ONT_WF_SKIP_LOG           WFS,
           WF_PROCESS_ACTIVITIES     WFP,
           WF_ACTIVITIES_VL          WFA
     where WFS.HEADER_ID          = nvl('&header_id_selected',to_char(:v_header_id))
       and WFS.ACTIVITY_ID        = WFP.INSTANCE_ID
       and WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
       and WFP.PROCESS_NAME       = WFA.NAME
       and WFP.PROCESS_VERSION    = WFA.VERSION
       and NVL('&line_id_selected',0)  in (0,WFS.LINE_ID)
     order by WFS.HEADER_ID,
              WFS.LINE_ID,
              WFS.CREATION_DATE;

UTL_FILE.PUT_LINE(handle,'&et'); */

UTL_FILE.PUT_LINE(handle,'&f &f &b WORKFLOW LINE STATUS ERRORS &f');

-- break on LIN_ID skip 2;

UTL_FILE.PUT_LINE(handle,'&std &sh LIN_ID &dh PROCESS_NAME &dh ERROR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERR_RETRY_ROLE &dh ERR_RETRY_USER &dh ');
UTL_FILE.PUT_LINE(handle,'ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor l_wf_err is
select
       WFS.ITEM_KEY               LIN_ID,
       WFA.DISPLAY_NAME           PROCESS_NAME,
       WFA1.DISPLAY_NAME          ERROR_ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                   ACT_STATUS,
       WFS.ERROR_NAME             ERROR_NAME,
       WFS.ERROR_MESSAGE          ERROR_MESSAGE,
       WFS.ERROR_STACK            ERROR_STACK
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_ITEMS                  WFI,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'OEOL'
  and  WFS.item_key           in
              (select to_char(line_id) from OE_ORDER_LINES LIN
               where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
               and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
              )
  and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
  and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
  and  WFP.PROCESS_NAME       = WFA.NAME
  and  WFP.PROCESS_VERSION    = WFA.VERSION
  and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
  and  WFP.ACTIVITY_NAME      = WFA1.NAME
  and  WFA1.VERSION =
      (select max(VERSION)
       from WF_ACTIVITIES WF2
       where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
       and   WF2.NAME      = WFP.ACTIVITY_NAME)
  and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
  and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
  and  WFS.ERROR_NAME is not NULL
  and  WFI.PARENT_ITEM_TYPE='OEOL'
  and  WFI.PARENT_ITEM_KEY in
              (select to_char(line_id) from OE_ORDER_LINES LIN
               where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
               and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
              )
 order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for ll in l_wf_err
 loop
   utl_file.put_line(handle,'&sld'||n(ll.LIN_ID)||'&d'||n(ll.PROCESS_NAME)||'&d');
   utl_file.put_line(handle,n(ll.ERROR_ACTIVITY_NAME)||'&d'||n(ll.RESULT)||'&d');
   utl_file.put_line(handle,n(ll.ACT_STATUS)||'&d'||n(ll.ERROR_NAME)||'&d');
   utl_file.put_line(handle,n(ll.ERROR_MESSAGE)||'&d'||n(ll.ERROR_STACK)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- break on ERR_TYPE_KEY skip 2;

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ACTIVITY STATUS FOR LINE ERROR PROCESS &f');

UTL_FILE.PUT_LINE(handle,'&std &sh ERR_TYPE_KEY &dh ERR_PROCESS_NAME &dh ERR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ASGND_USER &dh BEGIN_DATE &dh END_DATE &eh');

Declare
cursor l_wf_proc_err is
select
       WFS.ITEM_TYPE || '-' || WFS.ITEM_KEY               ERR_TYPE_KEY,
       WFA.DISPLAY_NAME           ERR_PROCESS_NAME,
       WFA1.DISPLAY_NAME          ERR_ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                ACT_STATUS,
       WFS.NOTIFICATION_ID        NOTIF_ID,
       WFS.ASSIGNED_USER          ASGND_USER,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP,
     WF_ITEMS                  WFI
where
       WFS.ITEM_TYPE          = WFI.ITEM_TYPE
  and  WFS.item_key           = WFI.ITEM_KEY
  and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
  and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
  and  WFP.PROCESS_NAME       = WFA.NAME
  and  WFP.PROCESS_VERSION    = WFA.VERSION
  and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
  and  WFP.ACTIVITY_NAME      = WFA1.NAME
  and  WFA1.VERSION =
      (select max(VERSION)
       from WF_ACTIVITIES WF2
       where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
       and   WF2.NAME      = WFP.ACTIVITY_NAME)
  and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
  and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
  and  WFI.PARENT_ITEM_TYPE = 'OEOL'
  and  WFI.PARENT_ITEM_KEY  in
             (select to_char(line_id) from OE_ORDER_LINES LIN
               where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
               and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
              )
  and  WFI.ITEM_TYPE in (select WFAE.ERROR_ITEM_TYPE
                         from WF_ITEM_ACTIVITY_STATUSES WFSE,
                         WF_PROCESS_ACTIVITIES     WFPE,
                         WF_ACTIVITIES_VL          WFAE,
                         WF_ACTIVITIES_VL          WFA1E
                         where
                                WFSE.ITEM_TYPE = 'OEOL'
                           and  WFSE.ITEM_KEY  in
                                (select to_char(line_id) from OE_ORDER_LINES LIN
                                 where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
                                 and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
                                 )
                           and  WFSE.PROCESS_ACTIVITY   = WFPE.INSTANCE_ID
                           and  WFPE.PROCESS_ITEM_TYPE  = WFAE.ITEM_TYPE
                           and  WFPE.PROCESS_NAME       = WFAE.NAME
                           and  WFPE.PROCESS_VERSION    = WFAE.VERSION
                           and  WFPE.ACTIVITY_ITEM_TYPE = WFA1E.ITEM_TYPE
                           and  WFPE.ACTIVITY_NAME      = WFA1E.NAME
                           and  WFA1E.VERSION =
                               (select max(VERSION)
                                from WF_ACTIVITIES WF2E
                                where WF2E.ITEM_TYPE = WFPE.ACTIVITY_ITEM_TYPE
                                and   WF2E.NAME      = WFPE.ACTIVITY_NAME)
                           and  WFSE.ACTIVITY_STATUS = 'ERROR')
  order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for ll in l_wf_proc_err
 loop
   utl_file.put_line(handle,'&sld'||n(ll.ERR_TYPE_KEY)||'&d'||n(ll.ERR_PROCESS_NAME)||'&d');
   utl_file.put_line(handle,n(ll.ERR_ACTIVITY_NAME)||'&d'||n(ll.RESULT)||'&d');
   utl_file.put_line(handle,n(ll.ACT_STATUS)||'&d'||n(ll.NOTIF_ID)||'&d');
   utl_file.put_line(handle,n(ll.ASGND_USER)||'&d'||n(ll.BEGIN_DATE)||'&d');
   utl_file.put_line(handle,n(ll.END_DATE)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_wf

UTL_FILE.PUT_LINE(handle,'&f &f LINE SPECIFIC HOLDS (LINES ONLY)');
UTL_FILE.PUT_LINE(handle,'&std &sh LINE &dh HOLD_ID &dh HOLD_NAME &dh HOLD_TYPE &dh WF_ITEM &dh WF_ACTIVITY &dh ORD_HOLD_ID &dh HLD_SRC_ID &dh ');
UTL_FILE.PUT_LINE(handle,'HLD_REL_ID &dh HEADER_ID &dh LINE_ID &dh H_REL &dh S_REL &dh RELEASE_REASON &dh ENTITY &dh ENTITY_ID &dh ENTITY2 &dh ');
UTL_FILE.PUT_LINE(handle,'ENTITY_ID2 &dh HOLD_UNTIL &eh');

Declare
cursor l_holds is
SELECT
    to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  HDF.HOLD_ID                        HOLD_ID,
  HDF.NAME                           HOLD_NAME,
  HDF.TYPE_CODE                      HOLD_TYPE,
  HDF.ITEM_TYPE                      WF_ITEM,
  HDF.ACTIVITY_NAME                  WF_ACTIVITY,
  HLD.ORDER_HOLD_ID                  ORD_HOLD_ID,
  HLD.HOLD_SOURCE_ID                 HLD_SRC_ID,
  HLD.HOLD_RELEASE_ID                HLD_REL_ID,
  HLD.HEADER_ID                      HEADER_ID,
  HLD.LINE_ID                        LINE_ID,
  HLD.RELEASED_FLAG                  H_REL,
  HSR.RELEASED_FLAG                  S_REL,
  HRL.RELEASE_REASON_CODE            RELEASE_REASON,
  decode(HSR.HOLD_ENTITY_CODE,
         'B','Bill To',
         'C','Customer',
         'I','Item',
         'O','Order',
         'S','Ship To',
         'W','Warehouse',
         HSR.HOLD_ENTITY_CODE)       ENTITY,
  HSR.HOLD_ENTITY_ID                 ENTITY_ID,
  decode(HSR.HOLD_ENTITY_CODE2,
         'B','Bill To',
         'C','Customer',
         'I','Item',
         'O','Order',
         'S','Ship To',
         'W','Warehouse',
         HSR.HOLD_ENTITY_CODE2)      ENTITY2,
  HSR.HOLD_ENTITY_ID2                ENTITY_ID2,
  to_char(HSR.HOLD_UNTIL_DATE,'DD-MON-RR_HH24:MI:SS')    HOLD_UNTIL
from OE_ORDER_HOLDS_ALL    HLD,
     OE_HOLD_SOURCES_ALL   HSR,
     OE_HOLD_DEFINITIONS   HDF,
     OE_HOLD_RELEASES      HRL,
     OE_ORDER_LINES_ALL    LIN
where        HLD.HEADER_ID             = nvl('&header_id_selected',:v_header_id)
        and  LIN.HEADER_ID             = nvl('&header_id_selected',:v_header_id)
        and  HLD.LINE_ID               IS NOT NULL
        and  HLD.LINE_ID               = LIN.LINE_ID
        and  NVL('&line_id_selected',0)in (0,LIN.LINE_ID,
                                       LIN.TOP_MODEL_LINE_ID,
                                       LIN.ATO_LINE_ID,
                                       LIN.LINK_TO_LINE_ID,
                                       LIN.REFERENCE_LINE_ID,
                                       LIN.SERVICE_REFERENCE_LINE_ID)
        and  HLD.HOLD_SOURCE_ID       = HSR.HOLD_SOURCE_ID
        and  HSR.HOLD_ID              = HDF.HOLD_ID
        and  HLD.HOLD_RELEASE_ID      = HRL.HOLD_RELEASE_ID(+);

begin
 for ll in l_holds
 loop
   utl_file.put_line(handle,'&sld'||n(ll.LINE)||'&d'||n(ll.HOLD_ID)||'&d');
   utl_file.put_line(handle,n(ll.HOLD_NAME)||'&d'||n(ll.HOLD_TYPE)||'&d');
   utl_file.put_line(handle,n(ll.WF_ITEM)||'&d'||n(ll.WF_ACTIVITY)||'&d');
   utl_file.put_line(handle,n(ll.ORD_HOLD_ID)||'&d'||n(ll.HLD_SRC_ID)||'&d');
   utl_file.put_line(handle,n(ll.HLD_REL_ID)||'&d'||n(ll.HEADER_ID)||'&d');
   utl_file.put_line(handle,n(ll.LINE_ID)||'&d'||n(ll.H_REL)||'&d');
   utl_file.put_line(handle,n(ll.S_REL)||'&d'||n(ll.RELEASE_REASON)||'&d');
   utl_file.put_line(handle,n(ll.ENTITY)||'&d'||n(ll.ENTITY_ID)||'&d');
   utl_file.put_line(handle,n(ll.ENTITY2)||'&d'||n(ll.ENTITY_ID2)||'&d');
   utl_file.put_line(handle,n(ll.HOLD_UNTIL)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- This is commented out because it runs slowly without an index
--<do not run> CREATE INDEX OE_PROCESSING_MSGS_777
--<do not run>  ON ONT.OE_PROCESSING_MSGS
--<do not run> (header_id, line_id);

UTL_FILE.PUT_LINE(handle,'&f &f LINE PROCESSING MESSAGES &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh LINE &dh HEADER_ID &dh LINE_ID &dh MSG_SOURCE &dh ACTIVITY &dh REQUEST_ID &dh DESCRIPTION &dh MESSAGE_TEXT &eh');

declare
 cursor l_proc is
 select distinct
   to_char(LIN.line_number) ||
           decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
           decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
           decode(LIN.component_number, null, null,
                  decode(LIN.option_number, null, '.',null)||
                  '.'||to_char(LIN.component_number))||
           decode(LIN.service_number,null,null,
                  decode(LIN.component_number, null, '.' , null) ||
                         decode(LIN.option_number, null, '.', null ) ||
                         '.'|| to_char(LIN.service_number)) LINE,
        MSG.header_id                                       HEADER_ID,
        MSG.line_id                                         LINE_ID,
        decode(MSG.MESSAGE_SOURCE_CODE,
               'U','U=On-Line(UI)',
               'C','C=Conc Process',
               'W','W=Workflow',
               MSG.MESSAGE_SOURCE_CODE)                     MSG_SOURCE,
        MSG.PROCESS_ACTIVITY        PROCESS_ACTIVITY,
        MSG.request_id              REQUEST_ID,
        MST.message_text                                    MESSAGE_TEXT
 from oe_processing_msgs_vl     MSG,
      oe_processing_msgs_tl     MST,
      oe_order_lines_all        LIN,
      fnd_languages             FLA
 where  MSG.header_id    = nvl('&header_id_selected',:v_header_id)
   and  MSG.HEADER_ID      = LIN.HEADER_ID
   and  msg.transaction_id = mst.transaction_id
   and  MST.LANGUAGE                  = FLA.LANGUAGE_CODE
   and  FLA.INSTALLED_FLAG            = 'B'
   and  MSG.LINE_ID        = LIN.LINE_ID
   and  MSG.LINE_ID        is not NULL
   and  NVL('&line_id_selected',0)      in (0,LIN.LINE_ID,
                                            LIN.TOP_MODEL_LINE_ID,
                                            LIN.ATO_LINE_ID,
                                            LIN.LINK_TO_LINE_ID,
                                            LIN.SERVICE_REFERENCE_LINE_ID);
r_activity varchar2(100);
r_descrip  varchar2(100);

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

begin
 :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
 for i in 1..10
 loop
   msg(i).flag := '0';
   msg(i).descrip := '';
 end loop;

 msg(1).descrip := '    1. Cannot find Activity name associated to LINE PROCESSING MESSAGES.';
 msg(2).descrip := '    2. Cannot find Request Description.';
end if;

 for lp in l_proc
 loop
   :r_flag := '';
   :r_error := 0;
   r_activity := '';
   r_descrip  := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   -- Get Activity name
   begin
     select WFA1.DISPLAY_NAME
       into r_activity
       from WF_PROCESS_ACTIVITIES  WFP,
            WF_ACTIVITIES_VL       WFA1
      where WFP.INSTANCE_ID        = lp.PROCESS_ACTIVITY
        and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
        and WFP.ACTIVITY_NAME      = WFA1.NAME
        and WFA1.VERSION = (select max(VERSION)
                              from WF_ACTIVITIES WF2
                             where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
                               and WF2.NAME      = WFP.ACTIVITY_NAME);
    exception
      when no_data_found then
        :r_flag := :r_flag || '1 ';
        msg(1).flag := '1';
   end;

   -- Get Request description
   begin
     select DESCRIPTION
       into r_descrip
       FROM FND_CONCURRENT_REQUESTS FCR
      where FCR.REQUEST_ID    = lp.REQUEST_ID;
    exception
      when no_data_found then
        :r_flag := :r_flag || '2 ';
        msg(2).flag := '1';
   end;

end if; -- do_analysis

   -- Print line to Output file

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#LPMERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,n(lp.LINE)||'&d'||n(lp.HEADER_ID)||'&d');
   utl_file.put_line(handle,n(lp.LINE_ID)||'&d'||n(lp.MSG_SOURCE)||'&d');
   utl_file.put_line(handle,n(r_activity)||'&d'||n(lp.REQUEST_ID)||'&d');
   utl_file.put_line(handle,n(r_descrip)||'&d'||n(lp.MESSAGE_TEXT)||'&el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;

 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="LPMERR">Warning List:</a> &eb &f');
   for i in 1..10
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');

--<do not run> DROP INDEX OE_PROCESSING_MSGS_777

if UPPER(nvl('&prt_price','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="APPLIED LINE PRICE ADJUSTMENTS">APPLIED LINE PRICE ADJUSTMENTS (ADJ)</a> <a HREF="#ALA">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PRC_ADJ_ID &dh LINE &dh LST_HD_ID &dh LST_LN_ID &dh LIST_LN_NO &dh MOD_LVL &dh LIST_TYPE_CODE &dh CHG_TY_CD &dh');
UTL_FILE.PUT_LINE(handle,'ARITH_OP &dh OP_PER_QTY &dh ADJ_AMT_PQ &dh OPERAND &dh ADJ_AMT &dh CD &dh AF &dh PI &dh AC &dh IF &dh EF &dh UA &dh UF &dh');
UTL_FILE.PUT_LINE(handle,'AP &dh LK &dh PERC &dh COST_ID &dh TAX_CODE &dh PP &eh');

Declare
cursor l_prc_adj is
select
    ADJ.PRICE_ADJUSTMENT_ID            PRC_ADJ_ID,
    to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     ADJ.LIST_HEADER_ID                 LST_HD_ID,
     ADJ.LIST_LINE_ID                   LST_LN_ID,
     ADJ.LIST_LINE_NO                   LIST_LN_NO,
     ADJ.MODIFIER_LEVEL_CODE            MOD_LVL,
     ADJ.LIST_LINE_TYPE_CODE            LIST_TYPE_CODE,
     ADJ.CHARGE_TYPE_CODE               CHG_TY_CD,
     ADJ.ARITHMETIC_OPERATOR            ARITH_OP,
     ADJ.OPERAND_PER_PQTY               OP_PER_QTY,
     ADJ.ADJUSTED_AMOUNT_PER_PQTY       ADJ_AMT_PQ,
     ADJ.OPERAND                        OPERAND,
     ADJ.ADJUSTED_AMOUNT                ADJ_AMT,
     ADJ.CREDIT_OR_CHARGE_FLAG          CD,
     ADJ.AUTOMATIC_FLAG                 AF,
     ADJ.PRINT_ON_INVOICE_FLAG          PI,
     ADJ.ACCRUAL_FLAG                   AC,
     ADJ.INVOICED_FLAG                  INF,
     ADJ.ESTIMATED_FLAG                 EF,
     ADJ.UPDATE_ALLOWED                 UA,
     ADJ.UPDATED_FLAG                   UF,
     ADJ.APPLIED_FLAG                   AP,
     ADJ.LOCK_CONTROL                   LK,
     ADJ.PERCENT                        PERC,
     ADJ.COST_ID                        COST_ID,
     ADJ.TAX_CODE                       TAX_CODE,
     ADJ.PRICING_PHASE_ID               PP
from OE_PRICE_ADJUSTMENTS   ADJ,
     OE_ORDER_LINES_ALL     LIN
where  ADJ.HEADER_ID             = nvl('&header_id_selected',:v_header_id)
  and  LIN.HEADER_ID             = nvl('&header_id_selected',:v_header_id)
  and  ADJ.LINE_ID               IS NOT NULL
  and  ADJ.LINE_ID               = LIN.LINE_ID
  and  NVL('&line_id_selected',0)in (0,LIN.LINE_ID,
                                       LIN.TOP_MODEL_LINE_ID,
                                       LIN.ATO_LINE_ID,
                                       LIN.LINK_TO_LINE_ID,
                                       LIN.REFERENCE_LINE_ID,
                                       LIN.SERVICE_REFERENCE_LINE_ID)
  and  ADJ.APPLIED_FLAG         = 'Y'
order by LINE,
         LIST_LINE_TYPE_CODE;

begin
 for ll in l_prc_adj
 loop
   utl_file.put_line(handle,'&sld'||n(ll.PRC_ADJ_ID)||'&d'||n(ll.LINE)||'&d');
   utl_file.put_line(handle,n(ll.LST_HD_ID)||'&d'||n(ll.LST_LN_ID)||'&d');
   utl_file.put_line(handle,n(ll.LIST_LN_NO)||'&d'||n(ll.MOD_LVL)||'&d');
   utl_file.put_line(handle,n(ll.LIST_TYPE_CODE)||'&d'||n(ll.CHG_TY_CD)||'&d');
   utl_file.put_line(handle,n(ll.ARITH_OP)||'&d'||n(ll.OP_PER_QTY)||'&d');
   utl_file.put_line(handle,n(ll.ADJ_AMT_PQ)||'&d'||n(ll.OPERAND)||'&d');
   utl_file.put_line(handle,n(ll.ADJ_AMT)||'&d'||n(ll.CD)||'&d');
   utl_file.put_line(handle,n(ll.AF)||'&d'||n(ll.PI)||'&d');
   utl_file.put_line(handle,n(ll.AC)||'&d'||n(ll.INF)||'&d');
   utl_file.put_line(handle,n(ll.EF)||'&d'||n(ll.UA)||'&d');
   utl_file.put_line(handle,n(ll.UF)||'&d'||n(ll.AP)||'&d');
   utl_file.put_line(handle,n(ll.LK)||'&d'||n(ll.PERC)||'&d');
   utl_file.put_line(handle,n(ll.COST_ID)||'&d'||n(ll.TAX_CODE)||'&d');
   utl_file.put_line(handle,n(ll.PP)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="UN-APPLIED LINE PRICE ADJUSTMENTS">UN-APPLIED LINE PRICE ADJUSTMENTS (ADJ)</a> <a HREF="#ALA">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PRC_ADJ_ID &dh LINE &dh LST_HD_ID &dh LST_LN_ID &dh LIST_LN_NO &dh MOD_LVL &dh LIST_TYPE_CODE &dh CHG_TY_CD &dh');
UTL_FILE.PUT_LINE(handle,'ARITH_OP &dh OP_PER_QTY &dh ADJ_AMT_PQ &dh OPERAND &dh ADJ_AMT &dh CD &dh AF &dh PI &dh AC &dh IF &dh EF &dh UA &dh UF &dh');
UTL_FILE.PUT_LINE(handle,'AP &dh LK &dh PERC &dh COST_ID &dh TAX_CODE &dh PP &eh');

Declare
cursor l_prc_adj_un is
select
    ADJ.PRICE_ADJUSTMENT_ID            PRC_ADJ_ID,
    to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     ADJ.LIST_HEADER_ID                 LST_HD_ID,
     ADJ.LIST_LINE_ID                   LST_LN_ID,
     ADJ.LIST_LINE_NO                   LIST_LN_NO,
     ADJ.MODIFIER_LEVEL_CODE            MOD_LVL,
     ADJ.LIST_LINE_TYPE_CODE            LIST_TYPE_CODE,
     ADJ.CHARGE_TYPE_CODE               CHG_TY_CD,
     ADJ.ARITHMETIC_OPERATOR            ARITH_OP,
     ADJ.OPERAND_PER_PQTY               OP_PER_QTY,
     ADJ.ADJUSTED_AMOUNT_PER_PQTY       ADJ_AMT_PQ,
     ADJ.OPERAND                        OPERAND,
     ADJ.ADJUSTED_AMOUNT                ADJ_AMT,
     ADJ.CREDIT_OR_CHARGE_FLAG          CD,
     ADJ.AUTOMATIC_FLAG                 AF,
     ADJ.PRINT_ON_INVOICE_FLAG          PI,
     ADJ.ACCRUAL_FLAG                   AC,
     ADJ.INVOICED_FLAG                  INF,
     ADJ.ESTIMATED_FLAG                 EF,
     ADJ.UPDATE_ALLOWED                 UA,
     ADJ.UPDATED_FLAG                   UF,
     ADJ.APPLIED_FLAG                   AP,
     ADJ.LOCK_CONTROL                   LK,
     ADJ.PERCENT                        PERC,
     ADJ.COST_ID                        COST_ID,
     ADJ.TAX_CODE                       TAX_CODE,
     ADJ.PRICING_PHASE_ID               PP
from OE_PRICE_ADJUSTMENTS   ADJ,
     OE_ORDER_LINES_ALL     LIN
where  ADJ.HEADER_ID             = nvl('&header_id_selected',:v_header_id)
  and  LIN.HEADER_ID             = nvl('&header_id_selected',:v_header_id)
  and  ADJ.LINE_ID               IS NOT NULL
  and  ADJ.LINE_ID               = LIN.LINE_ID
  and  NVL('&line_id_selected',0)in (0,LIN.LINE_ID,
                                       LIN.TOP_MODEL_LINE_ID,
                                       LIN.ATO_LINE_ID,
                                       LIN.LINK_TO_LINE_ID,
                                       LIN.REFERENCE_LINE_ID,
                                       LIN.SERVICE_REFERENCE_LINE_ID)
  and  nvl(ADJ.APPLIED_FLAG,'N') = 'N'
order by LINE,
         LIST_LINE_TYPE_CODE;

begin
 for ll in l_prc_adj_un
 loop
   utl_file.put_line(handle,'&sld'||n(ll.PRC_ADJ_ID)||'&d'||n(ll.LINE)||'&d');
   utl_file.put_line(handle,n(ll.LST_HD_ID)||'&d'||n(ll.LST_LN_ID)||'&d');
   utl_file.put_line(handle,n(ll.LIST_LN_NO)||'&d'||n(ll.MOD_LVL)||'&d');
   utl_file.put_line(handle,n(ll.LIST_TYPE_CODE)||'&d'||n(ll.CHG_TY_CD)||'&d');
   utl_file.put_line(handle,n(ll.ARITH_OP)||'&d'||n(ll.OP_PER_QTY)||'&d');
   utl_file.put_line(handle,n(ll.ADJ_AMT_PQ)||'&d'||n(ll.OPERAND)||'&d');
   utl_file.put_line(handle,n(ll.ADJ_AMT)||'&d'||n(ll.CD)||'&d');
   utl_file.put_line(handle,n(ll.AF)||'&d'||n(ll.PI)||'&d');
   utl_file.put_line(handle,n(ll.AC)||'&d'||n(ll.INF)||'&d');
   utl_file.put_line(handle,n(ll.EF)||'&d'||n(ll.UA)||'&d');
   utl_file.put_line(handle,n(ll.UF)||'&d'||n(ll.AP)||'&d');
   utl_file.put_line(handle,n(ll.LK)||'&d'||n(ll.PERC)||'&d');
   utl_file.put_line(handle,n(ll.COST_ID)||'&d'||n(ll.TAX_CODE)||'&d');
   utl_file.put_line(handle,n(ll.PP)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_price

if UPPER(nvl('&prt_po','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f OE_DROP_SHIP_SOURCES (SRC) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DROP_SHIP_ID &dh HEADER_ID &dh LINE_ID &dh LINE &dh ORG_ID &dh DEST_ID &dh DEST_ORG &dh REQ_HEADER_ID &dh ');
UTL_FILE.PUT_LINE(handle,'REQ_LINE_ID &dh PO_HEAD_ID &dh PO_LINE_ID &dh LINE_LOC_ID &dh PO_RELEASE_ID &eh');

Declare
cursor l_drop_ship is
select
 SRC.DROP_SHIP_SOURCE_ID                      DROP_SHIP_ID,
 SRC.HEADER_ID                                HEADER_ID,
 SRC.LINE_ID                                  LINE_ID,
    to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
 SRC.ORG_ID                                   ORG_ID,
 SRC.DESTINATION_ORGANIZATION_ID              DEST_ID,
 PAR.ORGANIZATION_CODE                        DEST_ORG,
 SRC.REQUISITION_HEADER_ID                    REQ_HEADER_ID,
 SRC.REQUISITION_LINE_ID                      REQ_LINE_ID,
 SRC.PO_HEADER_ID                             PO_HEAD_ID,
 SRC.PO_LINE_ID                               PO_LINE_ID,
 SRC.LINE_LOCATION_ID                         LINE_LOC_ID,
 SRC.PO_RELEASE_ID                            PO_RELEASE_ID
FROM OE_DROP_SHIP_SOURCES    SRC,
     OE_ORDER_LINES          LIN,
     MTL_PARAMETERS          PAR
WHERE
     SRC.LINE_ID                      = LIN.LINE_ID
and  SRC.DESTINATION_ORGANIZATION_ID  = PAR.ORGANIZATION_ID(+)
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
order by
     NVL(LIN.TOP_MODEL_LINE_ID,            LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for ll in l_drop_ship
 loop
   utl_file.put_line(handle,'&sld'||n(ll.DROP_SHIP_ID)||'&d'||n(ll.HEADER_ID)||'&d');
   utl_file.put_line(handle,n(ll.LINE_ID)||'&d'||n(ll.LINE)||'&d');
   utl_file.put_line(handle,n(ll.ORG_ID)||'&d'||n(ll.DEST_ID)||'&d');
   utl_file.put_line(handle,n(ll.DEST_ORG)||'&d'||n(ll.REQ_HEADER_ID)||'&d');
   utl_file.put_line(handle,n(ll.REQ_LINE_ID)||'&d'||n(ll.PO_HEAD_ID)||'&d');
   utl_file.put_line(handle,n(ll.PO_LINE_ID)||'&d'||n(ll.LINE_LOC_ID)||'&d');
   utl_file.put_line(handle,n(ll.PO_RELEASE_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_po

end if; -- :v_head_only

   UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
If :v_head_only = 'N' then 

-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

if UPPER(nvl('&prt_po','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f PO_REQUISITIONS_INTERFACE_ALL (RQI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DROP_SHIP_ID &dh LINE &dh AUTH_STATUS &dh DELIV_LOC &dh PREPARER &dh DEST_ORG_ID &dh DEST_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'SRC_CODE &dh SRC_TYPE_CODE &dh ITEM_ID &dh NEED_BY &dh QTY &dh PRICE &el');

Declare
cursor po_req_int is
Select
     RQI.INTERFACE_SOURCE_LINE_ID           DROP_SHIP_ID,
     to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     RQI.AUTHORIZATION_STATUS               AUTH_STATUS,
     RQI.DELIVER_TO_LOCATION_ID             DELIV_LOC,
     RQI.PREPARER_ID                        PREPARER,
     RQI.DESTINATION_ORGANIZATION_ID        DEST_ORG_ID,
     RQI.DESTINATION_TYPE_CODE              DEST_TYPE,
     RQI.INTERFACE_SOURCE_CODE              SRC_CODE,
     RQI.SOURCE_TYPE_CODE                   SRC_TYPE_CODE,
     RQI.ITEM_ID                            ITEM_ID,
     to_char(RQI.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS')  NEED_BY,
     RQI.QUANTITY                           QTY,
     RQI.UNIT_PRICE                         PRICE
from  PO_REQUISITIONS_INTERFACE_ALL   RQI,
      OE_DROP_SHIP_SOURCES            SRC,
      OE_ORDER_LINES                  LIN
where  SRC.LINE_ID                      = LIN.LINE_ID
  and  SRC.DROP_SHIP_SOURCE_ID          = RQI.INTERFACE_SOURCE_LINE_ID
  and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
  and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
order by
     NVL(LIN.TOP_MODEL_LINE_ID,            LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for po in po_req_int
 loop
   utl_file.put_line(handle,'&sld'||n(po.DROP_SHIP_ID)||'&d'||n(po.LINE)||'&d');
   utl_file.put_line(handle,n(po.AUTH_STATUS)||'&d'||n(po.DELIV_LOC)||'&d');
   utl_file.put_line(handle,n(po.PREPARER)||'&d'||n(po.DEST_ORG_ID)||'&d');
   utl_file.put_line(handle,n(po.DEST_TYPE)||'&d'||n(po.SRC_CODE)||'&d');
   utl_file.put_line(handle,n(po.SRC_TYPE_CODE)||'&d'||n(po.ITEM_ID)||'&d');
   utl_file.put_line(handle,n(po.NEED_BY)||'&d'||n(po.QTY)||'&d');
   utl_file.put_line(handle,n(po.PRICE)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_INTERFACE_ERRORS_ALL (POE) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_TRANS_ID &dh LINE &dh COLUMN_NAME &dh ERROR &dh INTF_TYPE &dh REQUEST_ID &dh TABLE_NAME &eh');

Declare
cursor po_int_err is
select
  POE.INTERFACE_TRANSACTION_ID     INTF_TRANS_ID,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  POE.COLUMN_NAME                  COLUMN_NAME,
  POE.ERROR_MESSAGE                ERRORM,
  POE.INTERFACE_TYPE               INTF_TYPE,
  POE.REQUEST_ID                   REQUEST_ID,
  POE.TABLE_NAME                   TABLE_NAME
from
  PO_INTERFACE_ERRORS             POE,
  OE_DROP_SHIP_SOURCES            SRC,
  OE_ORDER_LINES                  LIN,
  PO_REQUISITIONS_INTERFACE_ALL   RQI
where
     SRC.LINE_ID                      = LIN.LINE_ID
and  SRC.DROP_SHIP_SOURCE_ID          = RQI.INTERFACE_SOURCE_LINE_ID
and  RQI.TRANSACTION_ID               = POE.INTERFACE_TRANSACTION_ID
and  LIN.HEADER_ID                    = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)       in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
order by
     NVL(LIN.TOP_MODEL_LINE_ID,         LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for po in po_int_err
 loop
   utl_file.put_line(handle,'&sld'||n(po.INTF_TRANS_ID)||'&d'||n(po.LINE)||'&d');
   utl_file.put_line(handle,n(po.COLUMN_NAME)||'&d'||n(po.ERRORM)||'&d');
   utl_file.put_line(handle,n(po.INTF_TYPE)||'&d'||n(po.REQUEST_ID)||'&d');
   utl_file.put_line(handle,n(po.TABLE_NAME)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_REQUISITION_HEADERS_ALL (RQH) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh REQ_HEADER_ID &dh REQ_NUMBER &dh DROP_SHIP_ID &dh AUTH_STATUS &dh ENABLED &dh SRC_CODE &dh SUMMARY &dh ');
UTL_FILE.PUT_LINE(handle,'XFR_OE_FLAG &dh REQ_TYPE &dh ITEM_TYPE &dh ITEM_KEY &eh');

Declare
cursor po_req_hdr is
select distinct
  RQH.REQUISITION_HEADER_ID         REQ_HEADER_ID ,
  RQH.SEGMENT1                            REQ_NUMBER,
  RQH.INTERFACE_SOURCE_LINE_ID            DROP_SHIP_ID,
  RQH.AUTHORIZATION_STATUS                AUTH_STATUS,
  RQH.ENABLED_FLAG                        ENABLED,
  RQH.INTERFACE_SOURCE_CODE               SRC_CODE,
  RQH.SUMMARY_FLAG                        SUMMARY,
  RQH.TRANSFERRED_TO_OE_FLAG              XFR_OE_FLAG,
  RQH.TYPE_LOOKUP_CODE                    REQ_TYPE,
  RQH.WF_ITEM_TYPE                        ITEM_TYPE,
  RQH.WF_ITEM_KEY                         ITEM_KEY
from
 PO_REQUISITION_HEADERS_ALL      RQH,
 OE_DROP_SHIP_SOURCES            SRC,
 OE_ORDER_LINES                  LIN
where
     SRC.LINE_ID                      = LIN.LINE_ID
and SRC.REQUISITION_HEADER_ID         = RQH.REQUISITION_HEADER_ID
and  LIN.HEADER_ID                    = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)      in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select distinct  /* INTERNAL REQ */
  RQH.REQUISITION_HEADER_ID        REQ_HEADER_ID ,
  RQH.SEGMENT1                            REQ_NUMBER,
  RQH.INTERFACE_SOURCE_LINE_ID            DROP_SHIP_ID,
  RQH.AUTHORIZATION_STATUS                AUTH_STATUS,
  RQH.ENABLED_FLAG                        ENABLED,
  RQH.INTERFACE_SOURCE_CODE               SRC_CODE,
  RQH.SUMMARY_FLAG                        SUMMARY,
  RQH.TRANSFERRED_TO_OE_FLAG              XFR_OE_FLAG,
  RQH.TYPE_LOOKUP_CODE                    REQ_TYPE,
  RQH.WF_ITEM_TYPE                        ITEM_TYPE,
  RQH.WF_ITEM_KEY                         ITEM_KEY
from
 PO_REQUISITION_HEADERS_ALL      RQH,
 OE_ORDER_LINES                  LIN
where
     LIN.SOURCE_DOCUMENT_ID           = RQH.REQUISITION_HEADER_ID
and  LIN.SOURCE_DOCUMENT_TYPE_ID      = 10                        --INTERNAL REQUISITION
and  LIN.HEADER_ID                    = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)      in (0,LIN.LINE_ID,
                                           LIN.TOP_MODEL_LINE_ID,
                                           LIN.ATO_LINE_ID,
                                           LIN.LINK_TO_LINE_ID,
                                           LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select distinct  /* ATO BUY ITEM */
  RQH.REQUISITION_HEADER_ID        REQ_HEADER_ID ,
  RQH.SEGMENT1                            REQ_NUMBER,
  RQH.INTERFACE_SOURCE_LINE_ID            DROP_SHIP_ID,
  RQH.AUTHORIZATION_STATUS                AUTH_STATUS,
  RQH.ENABLED_FLAG                        ENABLED,
  RQH.INTERFACE_SOURCE_CODE               SRC_CODE,
  RQH.SUMMARY_FLAG                        SUMMARY,
  RQH.TRANSFERRED_TO_OE_FLAG              XFR_OE_FLAG,
  RQH.TYPE_LOOKUP_CODE                    REQ_TYPE,
  RQH.WF_ITEM_TYPE                        ITEM_TYPE,
  RQH.WF_ITEM_KEY                         ITEM_KEY
from
  PO_REQUISITION_HEADERS_ALL      RQH,
  MTL_RESERVATIONS                RES
where
     :sales_ord_id                 = RES.DEMAND_SOURCE_HEADER_ID
and  RES.DEMAND_SOURCE_TYPE_ID     = 2   -- SO
and  RES.SUPPLY_SOURCE_TYPE_ID     = 17  -- Req
and  RES.SUPPLY_SOURCE_HEADER_ID   = RQH.REQUISITION_HEADER_ID;

begin
 for po in po_req_hdr
 loop
   utl_file.put_line(handle,'&sld'||n(po.REQ_HEADER_ID)||'&d'||n(po.REQ_NUMBER)||'&d');
   utl_file.put_line(handle,n(po.DROP_SHIP_ID)||'&d'||n(po.AUTH_STATUS)||'&d');
   utl_file.put_line(handle,n(po.ENABLED)||'&d'||n(po.SRC_CODE)||'&d');
   utl_file.put_line(handle,n(po.SUMMARY)||'&d'||n(po.XFR_OE_FLAG)||'&d');
   utl_file.put_line(handle,n(po.REQ_TYPE)||'&d'||n(po.ITEM_TYPE)||'&d');
   utl_file.put_line(handle,n(po.ITEM_KEY)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_REQUISITION_LINES_ALL (RQL) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh REQ_HEAD_ID &dh REQ_LINE_ID &dh DOC_TYPE &dh REQ_LINE &dh LINE &dh ITEM_ID &dh ITEM_DESC &dh UOM &dh PRICE &dh ');
UTL_FILE.PUT_LINE(handle,'QTY &dh QTY_CNC &dh QTY_DLV &dh CANC &dh SRC_TYPE &dh SRC_ORG &dh DEST_TYPE &dh DEST_ORG &dh ENC_FL &dh LINE_TYPE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'NEED_BY &dh RFQ &dh BUYER_ID &eh');

Declare
cursor po_req_lin is
select /* DROP SHIPMENT */
  RQL.REQUISITION_HEADER_ID        REQ_HEAD_ID,
  RQL.REQUISITION_LINE_ID          REQ_LINE_ID,
  'DROP SHIP'                      DOC_TYPE,
  RQL.LINE_NUM                     REQ_LINE,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  RQL.ITEM_ID                      ITEM_ID,
  RQL.ITEM_DESCRIPTION             ITEM_DESC,
  RQL.UNIT_MEAS_LOOKUP_CODE        UOM,
  RQL.UNIT_PRICE                   PRICE,
  RQL.QUANTITY                     QTY,
  RQL.QUANTITY_CANCELLED           QTY_CNC,
  RQL.QUANTITY_DELIVERED           QTY_DLV,
  RQL.CANCEL_FLAG                  CANC,
  RQL.SOURCE_TYPE_CODE             SRC_TYPE,
  RQL.SOURCE_ORGANIZATION_ID       SRC_ORG,
  RQL.DESTINATION_CONTEXT          DEST_TYPE,
  RQL.DESTINATION_ORGANIZATION_ID  DEST_ORG,
  RQL.ENCUMBERED_FLAG              ENC_FL,
  RQL.LINE_TYPE_ID                 LINE_TYPE_ID,
  to_char(RQL.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS')  NEED_BY,
  RQL.ON_RFQ_FLAG                  RFQ ,
  RQL.SUGGESTED_BUYER_ID           BUYER_ID
from
  PO_REQUISITION_LINES_ALL         RQL,
  OE_DROP_SHIP_SOURCES             SRC,
  OE_ORDER_LINES                   LIN
where
     SRC.LINE_ID                      = LIN.LINE_ID
and  RQL.REQUISITION_LINE_ID          = SRC.REQUISITION_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select  /* INTERNAL SALES ORDER */
  RQL.REQUISITION_HEADER_ID        REQ_HEAD_ID,
  RQL.REQUISITION_LINE_ID          REQ_LINE_ID,
  'INTERNAL SO'                    DOC_TYPE,
  RQL.LINE_NUM                     REQ_LINE,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  RQL.ITEM_ID                      ITEM_ID,
  RQL.ITEM_DESCRIPTION             ITEM_DESC,
  RQL.UNIT_MEAS_LOOKUP_CODE        UOM,
  RQL.UNIT_PRICE                   PRICE,
  RQL.QUANTITY                     QTY,
  RQL.QUANTITY_CANCELLED           QTY_CNC,
  RQL.QUANTITY_DELIVERED           QTY_DLV,
  RQL.CANCEL_FLAG                  CANC,
  RQL.SOURCE_TYPE_CODE             SRC_TYPE,
  RQL.SOURCE_ORGANIZATION_ID       SRC_ORG,
  RQL.DESTINATION_CONTEXT          DEST_TYPE,
  RQL.DESTINATION_ORGANIZATION_ID  DEST_ORG,
  RQL.ENCUMBERED_FLAG              ENC_FL ,
  RQL.LINE_TYPE_ID                 LINE_TYPE_ID,
  to_char(RQL.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS')  NEED_BY,
  RQL.ON_RFQ_FLAG                  RFQ ,
  RQL.SUGGESTED_BUYER_ID           BUYER_ID
from
  PO_REQUISITION_LINES_ALL         RQL,
  OE_ORDER_LINES                   LIN
where
     LIN.SOURCE_DOCUMENT_LINE_ID      = RQL.REQUISITION_LINE_ID
and  LIN.SOURCE_DOCUMENT_TYPE_ID      = 10                        --INTERNAL REQUISITION
and  LIN.HEADER_ID                    = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)       in (0,LIN.LINE_ID,
                                            LIN.TOP_MODEL_LINE_ID,
                                            LIN.ATO_LINE_ID,
                                            LIN.LINK_TO_LINE_ID,
                                            LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for po in po_req_lin
 loop
   utl_file.put_line(handle,'&sld'||n(po.REQ_HEAD_ID)||'&d'||n(po.REQ_LINE_ID)||'&d');
   utl_file.put_line(handle,n(po.DOC_TYPE)||'&d'||n(po.REQ_LINE)||'&d');
   utl_file.put_line(handle,n(po.LINE)||'&d'||n(po.ITEM_ID)||'&d');
   utl_file.put_line(handle,n(po.ITEM_DESC)||'&d'||n(po.UOM)||'&d');
   utl_file.put_line(handle,n(po.PRICE)||'&d'||n(po.QTY)||'&d');
   utl_file.put_line(handle,n(po.QTY_CNC)||'&d'||n(po.QTY_DLV)||'&d');
   utl_file.put_line(handle,n(po.CANC)||'&d'||n(po.SRC_TYPE)||'&d');
   utl_file.put_line(handle,n(po.SRC_ORG)||'&d'||n(po.DEST_TYPE)||'&d');
   utl_file.put_line(handle,n(po.DEST_ORG)||'&d'||n(po.ENC_FL)||'&d');
   utl_file.put_line(handle,n(po.LINE_TYPE_ID)||'&d'||n(po.NEED_BY)||'&d');
   utl_file.put_line(handle,n(po.RFQ)||'&d'||n(po.BUYER_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW REQUISITION APPROVAL STATUS &f');

-- break on REQ_NUM_IK skip 2;

UTL_FILE.PUT_LINE(handle,'&std &sh REQ_NUM_IK &dh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh _BEGIN_DATE_ &dh ');
UTL_FILE.PUT_LINE(handle,'_END_DATE_ &dh ERROR &eh');

Declare
cursor po_req_apprv is
select WFS.item_key               REQ_NUM_IK,
       WFA.DISPLAY_NAME           PROCESS_NAME,
       WFA1.DISPLAY_NAME          ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                ACT_STATUS,
       WFS.NOTIFICATION_ID        NOTIF_ID,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE,
       WFS.ERROR_NAME             ERROR_apprv
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'REQAPPRV'
and  WFS.item_key       in (select wf_item_key /*DROP SHIPMENTS*/
                           from
                           PO_REQUISITION_HEADERS  REQ,
                           OE_DROP_SHIP_SOURCES    SRC,
                           OE_ORDER_LINES          LIN
                           where
                               SRC.LINE_ID                   = LIN.LINE_ID
                           and SRC.REQUISITION_HEADER_ID     = REQ.REQUISITION_HEADER_ID
                           and  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id)
                           and  NVL('&line_id_selected',0)   in (0,LIN.LINE_ID,
                                     LIN.TOP_MODEL_LINE_ID,
                                     LIN.ATO_LINE_ID,
                                     LIN.LINK_TO_LINE_ID,
                                     LIN.SERVICE_REFERENCE_LINE_ID)
                           UNION ALL
                           select wf_item_key /* INTERNAL SALES ORDERSS */
                           from
                           PO_REQUISITION_HEADERS  REQ,
                           OE_ORDER_LINES          LIN
                           where
                                LIN.SOURCE_DOCUMENT_ID           = REQ.REQUISITION_HEADER_ID
                           and  LIN.SOURCE_DOCUMENT_TYPE_ID      = 10
                           and  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id)
                           and  NVL('&line_id_selected',0)   in (0,LIN.LINE_ID,
                                     LIN.TOP_MODEL_LINE_ID,
                                     LIN.ATO_LINE_ID,
                                     LIN.LINK_TO_LINE_ID,
                                     LIN.SERVICE_REFERENCE_LINE_ID))
and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
and  WFP.PROCESS_NAME       = WFA.NAME
and  WFP.PROCESS_VERSION    = WFA.VERSION
and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and  WFP.ACTIVITY_NAME      = WFA1.NAME
and  WFA1.VERSION =
    (select max(VERSION)
     from WF_ACTIVITIES WF2
     where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
     and   WF2.NAME      = WFP.ACTIVITY_NAME)
and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for po in po_req_apprv
 loop
   utl_file.put_line(handle,'&sld'||n(po.REQ_NUM_IK)||'&d'||n(po.PROCESS_NAME)||'&d');
   utl_file.put_line(handle,n(po.ACTIVITY_NAME)||'&d'||n(po.RESULT)||'&d');
   utl_file.put_line(handle,n(po.ACT_STATUS)||'&d'||n(po.NOTIF_ID)||'&d');
   utl_file.put_line(handle,n(po.BEGIN_DATE)||'&d'||n(po.END_DATE)||'&d');
   utl_file.put_line(handle,n(po.ERROR_APPRV)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW REQUISITION APPROVAL NOTIFICATIONS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');

Declare
cursor po_req_apprv_not is
select   WFN.NOTIFICATION_ID         NOTIF_ID,
         WFN.TO_USER                 TO_USER,
         WFN.ORIGINAL_RECIPIENT      ORIG_RECIP,
         WFN.RECIPIENT_ROLE          RECIP_ROLE,
         WFN.MAIL_STATUS             MAIL_STAT,
         WFN.MESSAGE_NAME            MESSAGE_NAME,
         WFN.STATUS                  STATUS,
         WFN.SUBJECT                 SUBJECT
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_NOTIFICATIONS          WFN
where
     WFS.ITEM_TYPE          = 'REQAPPRV'
and  WFS.item_key       in (select wf_item_key  /* DROP SHIPMENTS */
                           from
                           PO_REQUISITION_HEADERS  REQ,
                           OE_DROP_SHIP_SOURCES    SRC,
                           OE_ORDER_LINES          LIN
                           where
                               SRC.LINE_ID                   = LIN.LINE_ID
                           and SRC.REQUISITION_HEADER_ID     = REQ.REQUISITION_HEADER_ID
                           and  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id)
                           and  NVL('&line_id_selected',0)   in (0,LIN.LINE_ID,
                                     LIN.TOP_MODEL_LINE_ID,
                                     LIN.ATO_LINE_ID,
                                     LIN.LINK_TO_LINE_ID,
                                     LIN.SERVICE_REFERENCE_LINE_ID)
                           UNION ALL
                           select wf_item_key  /* INTERNAL SALES ORDERSS */
                           from
                           PO_REQUISITION_HEADERS  REQ,
                           OE_ORDER_LINES          LIN
                           where
                                LIN.SOURCE_DOCUMENT_ID           = REQ.REQUISITION_HEADER_ID
                           and  LIN.SOURCE_DOCUMENT_TYPE_ID      = 10
                           and  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id)
                           and  NVL('&line_id_selected',0)   in (0,LIN.LINE_ID,
                                     LIN.TOP_MODEL_LINE_ID,
                                     LIN.ATO_LINE_ID,
                                     LIN.LINK_TO_LINE_ID,
                                     LIN.SERVICE_REFERENCE_LINE_ID))
and  WFS.NOTIFICATION_ID is not null
and  WFN.NOTIFICATION_ID = WFS.NOTIFICATION_ID
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for po in po_req_apprv_Not
 loop
   utl_file.put_line(handle,'&sld'||n(po.NOTIF_ID)||'&d'||n(po.To_USER)||'&d');
   utl_file.put_line(handle,n(po.ORIG_RECIP)||'&d'||n(po.RECIP_ROLE)||'&d');
   utl_file.put_line(handle,n(po.MAIL_STAT)||'&d'||n(po.MESSAGE_NAME)||'&d');
   utl_file.put_line(handle,n(po.STATUS)||'&d'||n(po.SUBJECT)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et ');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW REQUISITION APPROVAL ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor po_req_apprv_err is
select WFA.DISPLAY_NAME           PROCESS_NAME,
       WFA1.DISPLAY_NAME          ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                ACT_STATUS,
       WFS.ERROR_NAME             ERROR_NAME,
       WFS.ERROR_MESSAGE          ERROR_MESSAGE,
       WFS.ERROR_STACK            ERROR_STACK
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'REQAPPRV'
and  WFS.item_key       in (select wf_item_key /* DROP SHIPMENTS */
                           from
                           PO_REQUISITION_HEADERS  REQ,
                           OE_DROP_SHIP_SOURCES    SRC,
                           OE_ORDER_LINES          LIN
                           where
                               SRC.LINE_ID                   = LIN.LINE_ID
                           and SRC.REQUISITION_HEADER_ID     = REQ.REQUISITION_HEADER_ID
                           and  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id)
                           and  NVL('&line_id_selected',0)   in (0,LIN.LINE_ID,
                                     LIN.TOP_MODEL_LINE_ID,
                                     LIN.ATO_LINE_ID,
                                     LIN.LINK_TO_LINE_ID,
                                     LIN.SERVICE_REFERENCE_LINE_ID)
                           UNION ALL
                           select wf_item_key  /* INTERNAL SALES ORDERSS */
                           from
                           PO_REQUISITION_HEADERS  REQ,
                           OE_ORDER_LINES          LIN
                           where
                                LIN.SOURCE_DOCUMENT_ID           = REQ.REQUISITION_HEADER_ID
                           and  LIN.SOURCE_DOCUMENT_TYPE_ID      = 10
                           and  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id)
                           and  NVL('&line_id_selected',0)   in (0,LIN.LINE_ID,
                                     LIN.TOP_MODEL_LINE_ID,
                                     LIN.ATO_LINE_ID,
                                     LIN.LINK_TO_LINE_ID,
                                     LIN.SERVICE_REFERENCE_LINE_ID))
and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
and  WFP.PROCESS_NAME       = WFA.NAME
and  WFP.PROCESS_VERSION    = WFA.VERSION
and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and  WFP.ACTIVITY_NAME      = WFA1.NAME
and  WFA1.VERSION =
    (select max(VERSION)
     from WF_ACTIVITIES WF2
     where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
     and   WF2.NAME      = WFP.ACTIVITY_NAME)
and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and  WFS.ERROR_NAME is not NULL
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for po in po_req_apprv_err
 loop
   utl_file.put_line(handle,'&sld'||n(po.PROCESS_NAME)||'&d'||n(po.ACTIVITY_NAME)||'&d');
   utl_file.put_line(handle,n(po.RESULT)||'&d'||n(po.ACT_STATUS)||'&d');
   utl_file.put_line(handle,n(po.ERROR_NAME)||'&d'||n(po.ERROR_MESSAGE)||'&d');
   utl_file.put_line(handle,n(po.ERROR_STACK)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_HEADERS_INTERFACE (PHI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_HEAD_ID &dh BATCH_ID &dh INTF_SRC_CODE &dh PROCESS_CODE &dh ACTION &dh PO_HEADER_ID &dh REL_NUM &dh');
UTL_FILE.PUT_LINE(handle,'PO_RELEASE_ID &dh VENDOR_NAME &dh APPRV_STAT &dh FIRM &dh FROZEN &dh CLOSE_CODE &dh CLOSE_DATE &dh APPRV_REQD &dh');
UTL_FILE.PUT_LINE(handle,'REF_NUM &dh VEND_NUM &dh WF_GROUP_ID &eh');

Declare
cursor po_hdr_int is
select
  PHI.INTERFACE_HEADER_ID            INTF_HEAD_ID,
  PHI.BATCH_ID                       BATCH_ID,
  PHI.INTERFACE_SOURCE_CODE          INTF_SRC_CODE,
  PHI.PROCESS_CODE                   PROCESS_CODE,
  PHI.ACTION                         ACTION,
  PHI.PO_HEADER_ID                   PO_HEADER_ID,
  PHI.RELEASE_NUM                    REL_NUM,
  PHI.PO_RELEASE_ID                  PO_RELEASE_ID,
  PHI.VENDOR_NAME                    VENDOR_NAME,
  PHI.APPROVAL_STATUS                APPRV_STAT,
  PHI.FIRM_FLAG                      FIRM,
  PHI.FROZEN_FLAG                    FROZEN,
  PHI.CLOSED_CODE                    CLOSE_CODE,
  to_char(PHI.CLOSED_DATE,'DD-MON-RR_HH24:MI:SS')  CLOSE_DATE,
  PHI.APPROVAL_REQUIRED_FLAG         APPRV_REQD,
  PHI.REFERENCE_NUM                  REF_NUM,
  PHI.VENDOR_NUM                     VEND_NUM,
  PHI.WF_GROUP_ID                    WF_GROUP_ID
from
     PO_HEADERS_INTERFACE            PHI,
     PO_LINES_INTERFACE              PLI,
     OE_DROP_SHIP_SOURCES            SRC,
     OE_ORDER_LINES                  LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.REQUISITION_LINE_ID       = PLI.REQUISITION_LINE_ID
and  PHI.INTERFACE_HEADER_ID       = PLI.INTERFACE_HEADER_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)order by
     NVL(LIN.TOP_MODEL_LINE_ID,            LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for po in po_hdr_int
 loop
   utl_file.put_line(handle,'&sld'||n(po.INTF_HEAD_ID)||'&d'||n(po.BATCH_ID)||'&d');
   utl_file.put_line(handle,n(po.INTF_SRC_CODE)||'&d'||n(po.PROCESS_CODE)||'&d');
   utl_file.put_line(handle,n(po.ACTION)||'&d'||n(po.PO_HEADER_ID)||'&d');
   utl_file.put_line(handle,n(po.REL_NUM)||'&d'||n(po.PO_RELEASE_ID)||'&d');
   utl_file.put_line(handle,n(po.VENDOR_NAME)||'&d'||n(po.APPRV_STAT)||'&d');
   utl_file.put_line(handle,n(po.FIRM)||'&d'||n(po.FROZEN)||'&d');
   utl_file.put_line(handle,n(po.CLOSE_CODE)||'&d'||n(po.CLOSE_DATE)||'&d');
   utl_file.put_line(handle,n(po.APPRV_REQD)||'&d'||n(po.REF_NUM)||'&d');
   utl_file.put_line(handle,n(po.VEND_NUM)||'&d'||n(po.WF_GROUP_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_LINES_INTERFACE (PLI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_LINE_ID &dh INTF_HEAD_ID &dh ACTION &dh PO_LINE &dh LINE &dh PO_LINE_ID &dh SHIP_NUM &dh SHIP_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'REQ_LINE_ID &dh PO_HEADER_ID &dh LINE_TYPE &dh ITEM &dh UOM &dh QUANTITY &dh PRICE &dh FIRM &dh SHIP_ORG_CODE &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_ORG_ID &dh SHIP_TO_LOC &dh SHIP_TO_LOC_ID &dh NEED_BY &dh PROMISE &dh WAREH_ID &eh');

Declare
cursor po_lin_int is
select
  PLI.INTERFACE_LINE_ID              INTF_LINE_ID,
  PLI.INTERFACE_HEADER_ID            INTF_HEAD_ID,
  PLI.ACTION                         ACTION,
  PLI.LINE_NUM                       PO_LINE,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  PLI.PO_LINE_ID                     PO_LINE_ID,
  PLI.SHIPMENT_NUM                   SHIP_NUM,
  PLI.SHIPMENT_TYPE                  SHIP_TYPE,
  PLI.REQUISITION_LINE_ID            REQ_LINE_ID,
  PLI.PO_HEADER_ID                   PO_HEADER_ID,
  PLI.LINE_TYPE                      LINE_TYPE,
  PLI.ITEM                           ITEM,
  PLI.UNIT_OF_MEASURE                UOM,
  PLI.QUANTITY                       QUANTITY,
  PLI.UNIT_PRICE                     PRICE,
  PLI.FIRM_FLAG                      FIRM,
  PLI.SHIP_TO_ORGANIZATION_CODE      SHIP_ORG_CODE,
  PLI.SHIP_TO_ORGANIZATION_ID        SHIP_ORG_ID,
  PLI.SHIP_TO_LOCATION               SHIP_TO_LOC,
  PLI.SHIP_TO_LOCATION_ID            SHIP_TO_LOC_ID,
  to_char(PLI.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS')  NEED_BY,
  to_char(PLI.PROMISED_DATE,'DD-MON-RR_HH24:MI:SS')  PROMISE,
  PLI.ORGANIZATION_ID                WAREH_ID
from PO_LINES_INTERFACE              PLI,
     OE_DROP_SHIP_SOURCES            SRC,
     OE_ORDER_LINES                  LIN
where
     SRC.LINE_ID                      = LIN.LINE_ID
and  SRC.REQUISITION_LINE_ID          = PLI.REQUISITION_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
order by
     NVL(LIN.TOP_MODEL_LINE_ID,            LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for po in po_lin_int
 loop
   utl_file.put_line(handle,'&sld'||n(po.INTF_LINE_ID)||'&d'||n(po.INTF_HEAD_ID)||'&d');
   utl_file.put_line(handle,n(po.ACTION)||'&d'||n(po.PO_LINE)||'&d');
   utl_file.put_line(handle,n(po.LINE)||'&d'||n(po.PO_LINE_ID)||'&d');
   utl_file.put_line(handle,n(po.SHIP_NUM)||'&d'||n(po.SHIP_TYPE)||'&d');
   utl_file.put_line(handle,n(po.REQ_LINE_ID)||'&d'||n(po.PO_HEADER_ID)||'&d');
   utl_file.put_line(handle,n(po.LINE_TYPE)||'&d'||n(po.ITEM)||'&d');
   utl_file.put_line(handle,n(po.UOM)||'&d'||n(po.QUANTITY)||'&d');
   utl_file.put_line(handle,n(po.PRICE)||'&d'||n(po.FIRM)||'&d');
   utl_file.put_line(handle,n(po.SHIP_ORG_CODE)||'&d'||n(po.SHIP_ORG_ID)||'&d');
   utl_file.put_line(handle,n(po.SHIP_TO_LOC)||'&d'||n(po.SHIP_TO_LOC_ID)||'&d');
   utl_file.put_line(handle,n(po.NEED_BY)||'&d'||n(po.PROMISE)||'&d');
   utl_file.put_line(handle,n(po.WAREH_ID)||'&el');
 end loop;
end;
UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_INTERFACE_ERRORS_ALL    (POE) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INF_TRANS_ID &dh COLUMN_NAME &dh ERROR &dh INF_TYPE &dh REQUEST_ID &dh TABLE_NAME &eh');

Declare
cursor po_int_err is
select
     POE.INTERFACE_TRANSACTION_ID      INF_TRANS_ID,
     POE.COLUMN_NAME                   COLUMN_NAME,
     POE.ERROR_MESSAGE                 ERROR_M,
     POE.INTERFACE_TYPE                INF_TYPE,
     POE.REQUEST_ID                    REQUEST_ID,
     POE.TABLE_NAME                    TABLE_N
from
     PO_INTERFACE_ERRORS             POE,
     PO_HEADERS_INTERFACE            PHI,
     PO_LINES_INTERFACE              PLI,
     OE_DROP_SHIP_SOURCES            SRC,
     OE_ORDER_LINES                  LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.REQUISITION_LINE_ID       = PLI.REQUISITION_LINE_ID
and  PHI.INTERFACE_HEADER_ID       = PLI.INTERFACE_HEADER_ID
and  (POE.INTERFACE_TRANSACTION_ID = PLI.INTERFACE_LINE_ID
 or   POE.INTERFACE_TRANSACTION_ID = PHI.INTERFACE_HEADER_ID)
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)order by
     NVL(LIN.TOP_MODEL_LINE_ID,            LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for po in po_int_err
 loop
   utl_file.put_line(handle,'&sld'||n(po.INF_TRANS_ID)||'&d'||n(po.COLUMN_NAME)||'&d');
   utl_file.put_line(handle,n(po.ERROR_M)||'&d'||n(po.INF_TYPE)||'&d');
   utl_file.put_line(handle,n(po.REQUEST_ID)||'&d'||n(po.TABLE_N)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_HEADERS_ALL (POH) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PO_HEADER_ID &dh PO_NUM &dh ACCEPT_REQD &dh BILL_TO &dh SHIP_TO &dh CLS_STAT &dh CONF_ORD &dh CURR &dh ');
UTL_FILE.PUT_LINE(handle,'ENABLED &dh FROZEN &dh SUMM &dh TYPE &dh VEND_CNCACT &dh VEND_ID &dh VEND_SITE &dh ITEM_TYPE &dh ITEM_KEY &eh');

Declare
cursor po_hdr is
select
  POH.PO_HEADER_ID                PO_HEADER_ID,
  POH.SEGMENT1                    PO_NUM,
  POH.ACCEPTANCE_REQUIRED_FLAG    ACCEPT_REQD,
  POH.BILL_TO_LOCATION_ID         BILL_TO,
  POH.SHIP_TO_LOCATION_ID         SHIP_TO,
  POH.CLOSED_CODE                 CLS_STAT,
  POH.CONFIRMING_ORDER_FLAG       CONF_ORD,
  POH.CURRENCY_CODE               CURR,
  POH.ENABLED_FLAG                ENABLED,
  POH.FROZEN_FLAG                 FROZEN,
  POH.SUMMARY_FLAG                SUMM,
  POH.TYPE_LOOKUP_CODE            TYPE,
  POH.VENDOR_CONTACT_ID           VEND_CONT,
  POH.VENDOR_ID                   VEND_ID,
  POH.VENDOR_SITE_ID              VEND_SITE,
  POH.WF_ITEM_TYPE                ITEM_TYPE,
  POH.WF_ITEM_KEY                 ITEM_KEY
from
    PO_HEADERS           POH,
    OE_DROP_SHIP_SOURCES SRC,
    OE_ORDER_LINES       LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.PO_HEADER_ID              = POH.PO_HEADER_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select distinct     /* ATO BUY ITEM */
  POH.PO_HEADER_ID                PO_HEADER_ID,
  POH.SEGMENT1                    PO_NUM,
  POH.ACCEPTANCE_REQUIRED_FLAG    ACCEPT_REQD,
  POH.BILL_TO_LOCATION_ID         BILL_TO,
  POH.SHIP_TO_LOCATION_ID         SHIP_TO,
  POH.CLOSED_CODE                 CLS_STAT,
  POH.CONFIRMING_ORDER_FLAG       CONF_ORD,
  POH.CURRENCY_CODE               CURR,
  POH.ENABLED_FLAG                ENABLED,
  POH.FROZEN_FLAG                 FROZEN,
  POH.SUMMARY_FLAG                SUMM,
  POH.TYPE_LOOKUP_CODE            TYPE,
  POH.VENDOR_CONTACT_ID           VEND_CONT,
  POH.VENDOR_ID                   VEND_ID,
  POH.VENDOR_SITE_ID              VEND_SITE,
  POH.WF_ITEM_TYPE                ITEM_TYPE,
  POH.WF_ITEM_KEY                 ITEM_KEY
from
    PO_HEADERS           POH,
    MTL_RESERVATIONS     RES
where
     :sales_ord_id                 = RES.DEMAND_SOURCE_HEADER_ID
and  RES.DEMAND_SOURCE_TYPE_ID     = 2                         -- SO
and  RES.SUPPLY_SOURCE_TYPE_ID     in (1,13)                   -- PO or INV
and  RES.SUPPLY_SOURCE_HEADER_ID   = POH.PO_HEADER_ID;

begin
 for po in po_hdr
 loop
   utl_file.put_line(handle,'&sld'||n(po.PO_HEADER_ID)||'&d'||n(po.PO_NUM)||'&d');
   utl_file.put_line(handle,n(po.ACCEPT_REQD)||'&d'||n(po.BILL_TO)||'&d');
   utl_file.put_line(handle,n(po.SHIP_TO)||'&d'||n(po.CLS_STAT)||'&d');
   utl_file.put_line(handle,n(po.CONF_ORD)||'&d'||n(po.CURR)||'&d');
   utl_file.put_line(handle,n(po.ENABLED)||'&d'||n(po.FROZEN)||'&d');
   utl_file.put_line(handle,n(po.SUMM)||'&d'||n(po.TYPE)||'&d');
   utl_file.put_line(handle,n(po.VEND_CONT)||'&d'||n(po.VEND_ID)||'&d');
   utl_file.put_line(handle,n(po.VEND_SITE)||'&d'||n(po.ITEM_TYPE)||'&d');
   utl_file.put_line(handle,n(po.ITEM_KEY)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_LINES (POL) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PO_HEADER_ID &dh PO_LINE_ID &dh PO_LINE &dh LINE &dh CATEGORY_ID &dh CLS_STAT &dh FIRM &dh ITEM_DESC &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM_ID &dh LINE_TYPE_ID &dh QTY &dh PRICE &eh');

Declare
cursor po_lines is
select
  POL.PO_HEADER_ID                PO_HEADER_ID,
  POL.PO_LINE_ID                  PO_LINE_ID,
  POL.LINE_NUM                    PO_LINE,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  POL.CATEGORY_ID                 CATEGORY_ID,
  POL.CLOSED_CODE                 CLS_STAT,
  POL.FIRM_STATUS_LOOKUP_CODE     FIRM,
  POL.ITEM_DESCRIPTION            ITEM_DESC,
  POL.ITEM_ID                     ITEM_ID,
  POL.LINE_TYPE_ID                LINE_TYPE_ID,
  POL.QUANTITY                    QTY,
  POL.UNIT_PRICE                  PRICE
from
    PO_LINES             POL,
    OE_DROP_SHIP_SOURCES SRC,
    OE_ORDER_LINES       LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.PO_LINE_ID                = POL.PO_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
order by
     NVL(LIN.TOP_MODEL_LINE_ID,            LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID;

begin
 for po in po_lines
 loop
   utl_file.put_line(handle,'&sld'||n(po.PO_HEADER_ID)||'&d'||n(po.PO_LINE_ID)||'&d');
   utl_file.put_line(handle,n(po.PO_LINE)||'&d'||n(po.LINE)||'&d');
   utl_file.put_line(handle,n(po.CATEGORY_ID)||'&d'||n(po.CLS_STAT)||'&d');
   utl_file.put_line(handle,n(po.FIRM)||'&d'||n(po.ITEM_DESC)||'&d');
   utl_file.put_line(handle,n(po.ITEM_ID)||'&d'||n(po.LINE_TYPE_ID)||'&d');
   utl_file.put_line(handle,n(po.QTY)||'&d'||n(po.PRICE)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW PURCHASE ORDER APPROVAL STATUS &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PO_NUM_IK &dh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh ');
UTL_FILE.PUT_LINE(handle,'BEGIN_DATE &dh END_DATE &dh ERROR &eh');

Declare
cursor po_wf_po_apr is
select WFS.item_key               PO_NUM_IK,
       WFA.DISPLAY_NAME           PROCESS_NAME,
       WFA1.DISPLAY_NAME          ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                ACT_STATUS,
       WFS.NOTIFICATION_ID        NOTIF_ID,
       to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
       to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE,
       WFS.ERROR_NAME             ERROR_N
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'POAPPRV'
and  WFS.item_key           in (select wf_item_key
                               from
                               PO_HEADERS           POH,
                               OE_DROP_SHIP_SOURCES SRC,
                               OE_ORDER_LINES       LIN
                               where
                               SRC.LINE_ID                   = LIN.LINE_ID
                               and  SRC.PO_HEADER_ID              = POH.PO_HEADER_ID
                               and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
                               and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID))
and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
and  WFP.PROCESS_NAME       = WFA.NAME
and  WFP.PROCESS_VERSION    = WFA.VERSION
and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and  WFP.ACTIVITY_NAME      = WFA1.NAME
and  WFA1.VERSION =
    (select max(VERSION)
     from WF_ACTIVITIES WF2
     where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
     and   WF2.NAME      = WFP.ACTIVITY_NAME)
and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for po in po_wf_po_apr
 loop
   utl_file.put_line(handle,'&sld'||n(po.PO_NUM_IK)||'&d'||n(po.PROCESS_NAME)||'&d');
   utl_file.put_line(handle,n(po.ACTIVITY_NAME)||'&d'||n(po.RESULT)||'&d');
   utl_file.put_line(handle,n(po.ACT_STATUS)||'&d'||n(po.NOTIF_ID)||'&d');
   utl_file.put_line(handle,n(po.BEGIN_DATE)||'&d'||n(po.END_DATE)||'&d');
   utl_file.put_line(handle,n(po.ERROR_N)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW PURCHASE APPROVAL NOTIFICATIONS  &f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');

Declare
cursor po_wf_not is
select   WFN.NOTIFICATION_ID         NOTIF_ID,
         WFN.TO_USER                 TO_USER,
         WFN.ORIGINAL_RECIPIENT      ORIG_RECIP,
         WFN.RECIPIENT_ROLE          RECIP_ROLE,
         WFN.MAIL_STATUS             MAIL_STAT,
         WFN.MESSAGE_NAME            MESSAGE_NAME,
         WFN.STATUS                  STATUS,
         WFN.SUBJECT                 SUBJECT
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_NOTIFICATIONS          WFN
where
     WFS.ITEM_TYPE          = 'POAPPRV'
and  WFS.item_key           in (select wf_item_key
                               from
                               PO_HEADERS           POH,
                               OE_DROP_SHIP_SOURCES SRC,
                               OE_ORDER_LINES       LIN
                               where
                               SRC.LINE_ID                   = LIN.LINE_ID
                               and  SRC.PO_HEADER_ID              = POH.PO_HEADER_ID
                               and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
                               and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID))
and  WFS.NOTIFICATION_ID is not null
and  WFN.NOTIFICATION_ID = WFS.NOTIFICATION_ID
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for po in po_wf_not
 loop
   utl_file.put_line(handle,'&sld'||n(po.NOTIF_ID)||'&d'||n(po.TO_USER)||'&d');
   utl_file.put_line(handle,n(po.ORIG_RECIP)||'&d'||n(po.RECIP_ROLE)||'&d');
   utl_file.put_line(handle,n(po.MAIL_STAT)||'&d'||n(po.MESSAGE_NAME)||'&d');
   utl_file.put_line(handle,n(po.STATUS)||'&d'||n(po.SUBJECT)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW PURCHASE APPROVAL ERRORS   &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor po_hdr_int is
select WFA.DISPLAY_NAME           PROCESS_NAME,
       WFA1.DISPLAY_NAME          ACTIVITY_NAME,
       WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
       LKP.MEANING                ACT_STATUS,
       WFS.ERROR_NAME             ERROR_NAME,
       WFS.ERROR_MESSAGE          ERROR_MESSAGE,
       WFS.ERROR_STACK            ERROR_STACK
from WF_ITEM_ACTIVITY_STATUSES WFS,
     WF_PROCESS_ACTIVITIES     WFP,
     WF_ACTIVITIES_VL          WFA,
     WF_ACTIVITIES_VL          WFA1,
     WF_LOOKUPS                LKP
where
     WFS.ITEM_TYPE          = 'POAPPRV'
and  WFS.item_key           in (select wf_item_key
                               from
                               PO_HEADERS           POH,
                               OE_DROP_SHIP_SOURCES SRC,
                               OE_ORDER_LINES       LIN
                               where
                               SRC.LINE_ID                   = LIN.LINE_ID
                               and  SRC.PO_HEADER_ID              = POH.PO_HEADER_ID
                               and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
                               and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID))
and  WFS.PROCESS_ACTIVITY   = WFP.INSTANCE_ID
and  WFP.PROCESS_ITEM_TYPE  = WFA.ITEM_TYPE
and  WFP.PROCESS_NAME       = WFA.NAME
and  WFP.PROCESS_VERSION    = WFA.VERSION
and  WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and  WFP.ACTIVITY_NAME      = WFA1.NAME
and  WFA1.VERSION =
    (select max(VERSION)
     from WF_ACTIVITIES WF2
     where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
     and   WF2.NAME      = WFP.ACTIVITY_NAME)
and  LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and  LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and  WFS.ERROR_NAME is not NULL
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
 for po in po_hdr_int
 loop
   utl_file.put_line(handle,'&sld'||n(po.PROCESS_NAME)||'&d'||n(po.ACTIVITY_NAME)||'&d');
   utl_file.put_line(handle,n(po.RESULT)||'&d'||n(po.ACT_STATUS)||'&d');
   utl_file.put_line(handle,n(po.ERROR_NAME)||'&d'||n(po.ERROR_MESSAGE)||'&d');
   utl_file.put_line(handle,n(po.ERROR_STACK)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_po

if UPPER(nvl('&prt_rec','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f RCV_SHIPMENT_LINES (SHL) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh SHP_LN_ID &dh SHP_HD_ID &dh SHP_LINE_STATUS &dh RCV_Q &dh SHP_Q &dh DEST_TYPE &dh OE_HD_ID &dh OE_LN_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM_ID &dh TO_ORG &dh SRC_DOC &dh REQUEST_ID &eh');

Declare
cursor rcv_shp_lin is
select  /* DROP SHIPMENTS */
  SHL.SHIPMENT_LINE_ID                  SHP_LN_ID,
  SHL.SHIPMENT_HEADER_ID                SHP_HD_ID,
  SHL.SHIPMENT_LINE_STATUS_CODE         SHP_LINE_STATUS,
  SHL.QUANTITY_RECEIVED                 RCV_Q,
  SHL.QUANTITY_SHIPPED                  SHP_Q,
  SHL.DESTINATION_TYPE_CODE             DEST_TYPE,
  SHL.OE_ORDER_HEADER_ID                OE_HD_ID,
  SHL.OE_ORDER_LINE_ID                  OE_LN_ID,
  SHL.ITEM_ID                           ITEM_ID,
  SHL.SHIP_TO_LOCATION_ID               TO_ORG,
  SHL.SOURCE_DOCUMENT_CODE              SRC_DOC,
  SHL.REQUEST_ID                        REQUEST_ID
from
   RCV_SHIPMENT_LINES         SHL,
   OE_DROP_SHIP_SOURCES       SRC,
   OE_ORDER_LINES             LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.PO_LINE_ID                = SHL.PO_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
 UNION ALL
select      /* RETURNS */
  SHL.SHIPMENT_LINE_ID                  SHP_LN_ID,
  SHL.SHIPMENT_HEADER_ID                SHP_HD_ID,
  SHL.SHIPMENT_LINE_STATUS_CODE         SHP_LINE_STATUS,
  SHL.QUANTITY_RECEIVED                 RCV_Q,
  SHL.QUANTITY_SHIPPED                  SHP_Q,
  SHL.DESTINATION_TYPE_CODE             DEST_TYPE,
  SHL.OE_ORDER_HEADER_ID                OE_HD_ID,
  SHL.OE_ORDER_LINE_ID                  OE_LN_ID,
  SHL.ITEM_ID                           ITEM_ID,
  SHL.SHIP_TO_LOCATION_ID               TO_ORG,
  SHL.SOURCE_DOCUMENT_CODE              SRC_DOC,
  SHL.REQUEST_ID                        REQUEST_ID
from
   RCV_SHIPMENT_LINES             SHL,
   OE_ORDER_LINES                 LIN
where
     SHL.OE_ORDER_LINE_ID          = LIN.LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select    /* INTERNAL SALES ORDER */
  SHL.SHIPMENT_LINE_ID                  SHP_LN_ID,
  SHL.SHIPMENT_HEADER_ID                SHP_HD_ID,
  SHL.SHIPMENT_LINE_STATUS_CODE         SHP_LINE_STATUS,
  SHL.QUANTITY_RECEIVED                 RCV_Q,
  SHL.QUANTITY_SHIPPED                  SHP_Q,
  SHL.DESTINATION_TYPE_CODE             DEST_TYPE,
  SHL.OE_ORDER_HEADER_ID                OE_HD_ID,
  SHL.OE_ORDER_LINE_ID                  OE_LN_ID,
  SHL.ITEM_ID                           ITEM_ID,
  SHL.SHIP_TO_LOCATION_ID               TO_ORG,
  SHL.SOURCE_DOCUMENT_CODE              SRC_DOC,
  SHL.REQUEST_ID                        REQUEST_ID
from
   RCV_SHIPMENT_LINES         SHL,
   OE_ORDER_LINES             LIN
where
     LIN.SOURCE_DOCUMENT_LINE_ID       = SHL.REQUISITION_LINE_ID
and  LIN.SOURCE_DOCUMENT_TYPE_ID       = 10
and  LIN.HEADER_ID                     = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)        in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select  /* ATO BUY ITEM */
  SHL.SHIPMENT_LINE_ID                  SHP_LN_ID,
  SHL.SHIPMENT_HEADER_ID                SHP_HD_ID,
  SHL.SHIPMENT_LINE_STATUS_CODE         SHP_LINE_STATUS,
  SHL.QUANTITY_RECEIVED                 RCV_Q,
  SHL.QUANTITY_SHIPPED                  SHP_Q,
  SHL.DESTINATION_TYPE_CODE             DEST_TYPE,
  SHL.OE_ORDER_HEADER_ID                OE_HD_ID,
  SHL.OE_ORDER_LINE_ID                  OE_LN_ID,
  SHL.ITEM_ID                           ITEM_ID,
  SHL.SHIP_TO_LOCATION_ID               TO_ORG,
  SHL.SOURCE_DOCUMENT_CODE              SRC_DOC,
  SHL.REQUEST_ID                        REQUEST_ID
from
   RCV_SHIPMENT_LINES         SHL,
   MTL_RESERVATIONS           RES,
   PO_HEADERS_ALL             POH
where
     :sales_ord_id                 = RES.DEMAND_SOURCE_HEADER_ID
and  RES.DEMAND_SOURCE_LINE_ID     = NVL('&line_id_selected',RES.DEMAND_SOURCE_LINE_ID)
and  RES.DEMAND_SOURCE_TYPE_ID     = 2                         -- SO
and  RES.SUPPLY_SOURCE_TYPE_ID     in (1,13)                   -- PO or INV
and  RES.SUPPLY_SOURCE_HEADER_ID   = POH.PO_HEADER_ID          --
and  POH.PO_HEADER_ID              = SHL.PO_HEADER_ID;

begin
 for rcv in rcv_shp_lin
 loop
   utl_file.put_line(handle,'&sld'||n(rcv.SHP_LN_ID)||'&d'||n(rcv.SHP_HD_ID)||'&d');
   utl_file.put_line(handle,n(rcv.SHP_LINE_STATUS)||'&d'||n(rcv.RCV_Q)||'&d');
   utl_file.put_line(handle,n(rcv.SHP_Q)||'&d'||n(rcv.DEST_TYPE)||'&d');
   utl_file.put_line(handle,n(rcv.OE_HD_ID)||'&d'||n(rcv.OE_LN_ID)||'&d');
   utl_file.put_line(handle,n(rcv.ITEM_ID)||'&d'||n(rcv.TO_ORG)||'&d');
   utl_file.put_line(handle,n(rcv.SRC_DOC)||'&d'||n(rcv.REQUEST_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et ');

UTL_FILE.PUT_LINE(handle,'&f &f RCV_TRANSACTIONS (RCV) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh TRANS_ID &dh PRNT_TRANS_ID &dh LINE &dh TRANS_TYPE &dh TRANS_DATE &dh DEST_TYPE &dh INSPECT_STAT &dh ');
UTL_FILE.PUT_LINE(handle,'INTF_SRC &dh INTF_TRANS_ID &dh LOC_ID &dh MVT_STAT &dh ORG_ID &dh OE_HEAD_ID &dh OE_LINE_ID &dh PO_HEAD_ID &dh ');
UTL_FILE.PUT_LINE(handle,'PO_LINE_ID &dh LINE_LOC_ID &dh UNIT_PRICE &dh UOM &dh QTY &dh REQUEST_ID &dh SHIP_HEAD_ID &dh SHIP_LINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SRC_DOC_CODE &dh VEND_ID &dh VEND_SITE_ID &eh');

Declare
cursor rcv_trx is
select /* DROP SHIPMENTS */
  RCV.TRANSACTION_ID              TRANS_ID,
  RCV.PARENT_TRANSACTION_ID       PRNT_TRANS_ID,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  RCV.TRANSACTION_TYPE            TRANS_TYPE,
  to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS')  TRANS_DATE,
  RCV.DESTINATION_TYPE_CODE       DEST_TYPE,
  RCV.INSPECTION_STATUS_CODE      INSPECT_STAT,
  RCV.INTERFACE_SOURCE_CODE       INTF_SRC,
  RCV.INTERFACE_TRANSACTION_ID    INTF_TRANS_ID,
  RCV.LOCATION_ID                 LOC_ID,
  RCV.MVT_STAT_STATUS             MVT_STAT,
  RCV.ORGANIZATION_ID             ORG_ID,
  RCV.OE_ORDER_HEADER_ID          OE_HEAD_ID,
  RCV.OE_ORDER_LINE_ID            OE_LINE_ID,
  RCV.PO_HEADER_ID                PO_HEAD_ID,
  RCV.PO_LINE_ID                  PO_LINE_ID,
  RCV.PO_LINE_LOCATION_ID         LINE_LOC_ID,
  RCV.PO_UNIT_PRICE               UNIT_PRICE,
  RCV.PRIMARY_UNIT_OF_MEASURE     UOM,
  RCV.QUANTITY                    QTY,
  RCV.REQUEST_ID                  REQUEST_ID,
  RCV.SHIPMENT_HEADER_ID          SHIP_HEAD_ID,
  RCV.SHIPMENT_LINE_ID            SHIP_LINE_ID,
  RCV.SOURCE_DOCUMENT_CODE        SRC_DOC_CODE,
  RCV.VENDOR_ID                   VEND_ID,
  RCV.VENDOR_SITE_ID              VEND_SITE_ID
from
   RCV_TRANSACTIONS     RCV,
   OE_DROP_SHIP_SOURCES SRC,
   OE_ORDER_LINES       LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.PO_LINE_ID                = RCV.PO_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
 UNION ALL
select    /* RETURNS */
  RCV.TRANSACTION_ID              TRANS_ID,
  RCV.PARENT_TRANSACTION_ID       PRNT_TRANS_ID,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  RCV.TRANSACTION_TYPE            TRANS_TYPE,
  to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
  RCV.DESTINATION_TYPE_CODE       DEST_TYPE,
  RCV.INSPECTION_STATUS_CODE      INSPECT_STAT,
  RCV.INTERFACE_SOURCE_CODE       INTF_SRC_CODE,
  RCV.INTERFACE_TRANSACTION_ID    INTF_TRANS_ID,
  RCV.LOCATION_ID                 LOC_ID,
  RCV.MVT_STAT_STATUS             MVT_STAT,
  RCV.ORGANIZATION_ID             ORG_ID,
  RCV.OE_ORDER_HEADER_ID          OE_HEAD_ID,
  RCV.OE_ORDER_LINE_ID            OE_LINE_ID,
  RCV.PO_HEADER_ID                PO_HEAD_ID,
  RCV.PO_LINE_ID                  PO_LINE_ID,
  RCV.PO_LINE_LOCATION_ID         LINE_LOC_ID,
  RCV.PO_UNIT_PRICE               UNIT_PRICE,
  RCV.PRIMARY_UNIT_OF_MEASURE     UOM,
  RCV.QUANTITY                    QTY,
  RCV.REQUEST_ID                  REQUEST_ID,
  RCV.SHIPMENT_HEADER_ID          SHIP_HEAD_ID,
  RCV.SHIPMENT_LINE_ID            SHIP_LINE_ID,
  RCV.SOURCE_DOCUMENT_CODE        SRC_DOC_CODE,
  RCV.VENDOR_ID                   VEND_ID,
  RCV.VENDOR_SITE_ID              VEND_SITE_ID
from
   RCV_TRANSACTIONS     RCV,
   OE_ORDER_LINES       LIN
where
     RCV.OE_ORDER_LINE_ID          = LIN.LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select      /* INTERNAL SALES ORDERS */
  RCV.TRANSACTION_ID              TRANS_ID,
  RCV.PARENT_TRANSACTION_ID       PRNT_TRANS_ID,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  RCV.TRANSACTION_TYPE            TRANS_TYPE,
  to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
  RCV.DESTINATION_TYPE_CODE       DEST_TYPE,
  RCV.INSPECTION_STATUS_CODE      INSPECT_STAT,
  RCV.INTERFACE_SOURCE_CODE       INTF_SRC_CODE,
  RCV.INTERFACE_TRANSACTION_ID    INTF_TRANS_ID,
  RCV.LOCATION_ID                 LOC_ID,
  RCV.MVT_STAT_STATUS             MVT_STAT,
  RCV.ORGANIZATION_ID             ORG_ID,
  RCV.OE_ORDER_HEADER_ID          OE_HEAD_ID,
  RCV.OE_ORDER_LINE_ID            OE_LINE_ID,
  RCV.PO_HEADER_ID                PO_HEAD_ID,
  RCV.PO_LINE_ID                  PO_LINE_ID,
  RCV.PO_LINE_LOCATION_ID         LINE_LOC_ID,
  RCV.PO_UNIT_PRICE               UNIT_PRICE,
  RCV.PRIMARY_UNIT_OF_MEASURE     UOM,
  RCV.QUANTITY                    QTY,
  RCV.REQUEST_ID                  REQUEST_ID,
  RCV.SHIPMENT_HEADER_ID          SHIP_HEAD_ID,
  RCV.SHIPMENT_LINE_ID            SHIP_LINE_ID,
  RCV.SOURCE_DOCUMENT_CODE        SRC_DOC_CODE,
  RCV.VENDOR_ID                   VEND_ID,
  RCV.VENDOR_SITE_ID              VEND_SITE_ID
from
   RCV_TRANSACTIONS     RCV,
   OE_ORDER_LINES       LIN
where
     LIN.SOURCE_DOCUMENT_LINE_ID       = RCV.REQUISITION_LINE_ID
and  LIN.SOURCE_DOCUMENT_TYPE_ID       = 10
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* ATO BUY ITEM */
  RCV.TRANSACTION_ID              TRANS_ID,
  RCV.PARENT_TRANSACTION_ID       PRNT_TRANS_ID,
  to_char(RES.DEMAND_SOURCE_LINE_ID) LINE,
  RCV.TRANSACTION_TYPE            TRANS_TYPE,
  to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
  RCV.DESTINATION_TYPE_CODE       DEST_TYPE,
  RCV.INSPECTION_STATUS_CODE      INSPECT_STAT,
  RCV.INTERFACE_SOURCE_CODE       INTF_SRC_CODE,
  RCV.INTERFACE_TRANSACTION_ID    INTF_TRANS_ID,
  RCV.LOCATION_ID                 LOC_ID,
  RCV.MVT_STAT_STATUS             MVT_STAT,
  RCV.ORGANIZATION_ID             ORG_ID,
  RCV.OE_ORDER_HEADER_ID          OE_HEAD_ID,
  RCV.OE_ORDER_LINE_ID            OE_LINE_ID,
  RCV.PO_HEADER_ID                PO_HEAD_ID,
  RCV.PO_LINE_ID                  PO_LINE_ID,
  RCV.PO_LINE_LOCATION_ID         LINE_LOC_ID,
  RCV.PO_UNIT_PRICE               UNIT_PRICE,
  RCV.PRIMARY_UNIT_OF_MEASURE     UOM,
  RCV.QUANTITY                    QTY,
  RCV.REQUEST_ID                  REQUEST_ID,
  RCV.SHIPMENT_HEADER_ID          SHIP_HEAD_ID,
  RCV.SHIPMENT_LINE_ID            SHIP_LINE_ID,
  RCV.SOURCE_DOCUMENT_CODE        SRC_DOC_CODE,
  RCV.VENDOR_ID                   VEND_ID,
  RCV.VENDOR_SITE_ID              VEND_SITE_ID
from
   RCV_TRANSACTIONS           RCV,
   MTL_RESERVATIONS           RES,
   PO_HEADERS_ALL             POH
where
     :sales_ord_id                 = RES.DEMAND_SOURCE_HEADER_ID
and  RES.DEMAND_SOURCE_LINE_ID     = NVL('&line_id_selected',RES.DEMAND_SOURCE_LINE_ID)
and  RES.DEMAND_SOURCE_TYPE_ID     = 2                         -- SO
and  RES.SUPPLY_SOURCE_TYPE_ID     in (1,13)                   -- PO or INV
and  RES.SUPPLY_SOURCE_HEADER_ID   = POH.PO_HEADER_ID          --
and  POH.PO_HEADER_ID              = RCV.PO_HEADER_ID;

begin
 for rcv in rcv_trx
 loop
   utl_file.put_line(handle,'&sld'||n(rcv.TRANS_ID)||'&d'||n(rcv.PRNT_TRANS_ID)||'&d');
   utl_file.put_line(handle,n(rcv.LINE)||'&d'||n(rcv.TRANS_TYPE)||'&d');
   utl_file.put_line(handle,n(rcv.TRANS_DATE)||'&d'||n(rcv.DEST_TYPE)||'&d');
   utl_file.put_line(handle,n(rcv.INSPECT_STAT)||'&d'||n(rcv.INTF_SRC)||'&d');
   utl_file.put_line(handle,n(rcv.INTF_TRANS_ID)||'&d'||n(rcv.LOC_ID)||'&d');
   utl_file.put_line(handle,n(rcv.MVT_STAT)||'&d'||n(rcv.ORG_ID)||'&d');
   utl_file.put_line(handle,n(rcv.OE_HEAD_ID)||'&d'||n(rcv.OE_LINE_ID)||'&d');
   utl_file.put_line(handle,n(rcv.PO_HEAD_ID)||'&d'||n(rcv.PO_LINE_ID)||'&d');
   utl_file.put_line(handle,n(rcv.LINE_LOC_ID)||'&d'||n(rcv.UNIT_PRICE)||'&d');
   utl_file.put_line(handle,n(rcv.UOM)||'&d'||n(rcv.QTY)||'&d');
   utl_file.put_line(handle,n(rcv.REQUEST_ID)||'&d'||n(rcv.SHIP_HEAD_ID)||'&d');
   utl_file.put_line(handle,n(rcv.SHIP_LINE_ID)||'&d'||n(rcv.SRC_DOC_CODE)||'&d');
   utl_file.put_line(handle,n(rcv.VEND_ID)||'&d'||n(rcv.VEND_SITE_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f RCV_TRANSACTIONS_INTERFACE (RTI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_TRNS_ID &dh PROC_MODE &dh PROC_STAT &dh TRNS_STAT &dh TRNS_DATE &dh TRNS_TYPE &dh DEST_TYPE &dh INSP_STAT &dh');
UTL_FILE.PUT_LINE(handle,'INSP_SRC &dh OE_HEAD_ID &dh OE_LINE_ID &dh ITEM_ID &dh QTY &dh PRY_Q &dh PO_UNIT_PRC &dh SUB &dh TO_ORG_ID &dh RCPT_SRC &dh');
UTL_FILE.PUT_LINE(handle,'PRNT_TRN_ID &dh SHP_HEAD_ID &dh SHP_LINE_ID &dh SRC_DOC &dh REQUEST_ID &eh');

Declare
cursor rcv_trx_int is
select   /* DROP SHIPMENTS */
  RTI.INTERFACE_TRANSACTION_ID          INTF_TRNS_ID,
  RTI.PROCESSING_MODE_CODE              PROC_MODE,
  RTI.PROCESSING_STATUS_CODE            PROC_STAT,
  RTI.TRANSACTION_STATUS_CODE           TRNS_STAT,
  to_char(RTI.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS')  TRNS_DATE,
  RTI.TRANSACTION_TYPE                  TRNS_TYPE,
  RTI.DESTINATION_TYPE_CODE             DEST_TYPE,
  RTI.INSPECTION_STATUS_CODE            INSP_STAT,
  RTI.INTERFACE_SOURCE_CODE             INSP_SRC,
  RTI.OE_ORDER_HEADER_ID                OE_HEAD_ID,
  RTI.OE_ORDER_LINE_ID                  OE_LINE_ID,
  RTI.ITEM_ID                           ITEM_ID,
  RTI.QUANTITY                          QTY,
  RTI.PRIMARY_QUANTITY                  PRY_Q,
  RTI.PO_UNIT_PRICE                     PO_UNIT_PRC,
  RTI.SUBINVENTORY                      SUB,
  RTI.TO_ORGANIZATION_ID                TO_ORG_ID,
  RTI.RECEIPT_SOURCE_CODE               RCPT_SRC,
  RTI.PARENT_TRANSACTION_ID             PRNT_TRN_ID,
  RTI.SHIPMENT_HEADER_ID                SHP_HEAD_ID,
  RTI.SHIPMENT_LINE_ID                  SHP_LINE_ID,
  RTI.SOURCE_DOCUMENT_CODE              SRC_DOC,
  RTI.PROCESSING_REQUEST_ID             REQUEST_ID
from
   RCV_TRANSACTIONS_INTERFACE RTI,
   OE_DROP_SHIP_SOURCES       SRC,
   OE_ORDER_LINES             LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.PO_LINE_ID                = RTI.PO_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
 UNION ALL
select      /* RETURNS */
  RTI.INTERFACE_TRANSACTION_ID          INTF_TRNS_ID,
  RTI.PROCESSING_MODE_CODE              PROC_MODE,
  RTI.PROCESSING_STATUS_CODE            PROC_STAT,
  RTI.TRANSACTION_STATUS_CODE           TRNS_STAT,
  to_char(RTI.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRNS_DATE,
  RTI.TRANSACTION_TYPE                  TRNS_TYPE,
  RTI.DESTINATION_TYPE_CODE             DEST_TYPE,
  RTI.INSPECTION_STATUS_CODE            INSP_STAT,
  RTI.INTERFACE_SOURCE_CODE             INSP_SRC,
  RTI.OE_ORDER_HEADER_ID                OE_HEAD_ID,
  RTI.OE_ORDER_LINE_ID                  OE_LINE_ID,
  RTI.ITEM_ID                           ITEM_ID,
  RTI.QUANTITY                          QTY,
  RTI.PRIMARY_QUANTITY                  PRY_Q,
  RTI.PO_UNIT_PRICE                     PO_UNIT_PRC,
  RTI.SUBINVENTORY                      SUB,
  RTI.TO_ORGANIZATION_ID                TO_ORG_ID,
  RTI.RECEIPT_SOURCE_CODE               RCPT_SRC,
  RTI.PARENT_TRANSACTION_ID             PRNT_TRN_ID,
  RTI.SHIPMENT_HEADER_ID                SHP_HEAD_ID,
  RTI.SHIPMENT_LINE_ID                  SHP_LINE_ID,
  RTI.SOURCE_DOCUMENT_CODE              SRC_DOC,
  RTI.PROCESSING_REQUEST_ID             REQUEST_ID
from
   RCV_TRANSACTIONS_INTERFACE     RTI,
   OE_ORDER_LINES                 LIN
where
     RTI.OE_ORDER_LINE_ID          = LIN.LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select    /* INTERNAL SALES ORDER  */
  RTI.INTERFACE_TRANSACTION_ID          INTF_TRNS_ID,
  RTI.PROCESSING_MODE_CODE              PROC_MODE,
  RTI.PROCESSING_STATUS_CODE            PROC_STAT,
  RTI.TRANSACTION_STATUS_CODE           TRNS_STAT,
  to_char(RTI.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS')  TRNS_DATE,
  RTI.TRANSACTION_TYPE                  TRNS_TYPE,
  RTI.DESTINATION_TYPE_CODE             DEST_TYPE,
  RTI.INSPECTION_STATUS_CODE            INSP_STAT,
  RTI.INTERFACE_SOURCE_CODE             INSP_SRC,
  RTI.OE_ORDER_HEADER_ID                OE_HEAD_ID,
  RTI.OE_ORDER_LINE_ID                  OE_LINE_ID,
  RTI.ITEM_ID                           ITEM_ID,
  RTI.QUANTITY                          QTY,
  RTI.PRIMARY_QUANTITY                  PRY_Q,
  RTI.PO_UNIT_PRICE                     PO_UNIT_PRC,
  RTI.SUBINVENTORY                      SUB,
  RTI.TO_ORGANIZATION_ID                TO_ORG_ID,
  RTI.RECEIPT_SOURCE_CODE               RCPT_SRC,
  RTI.PARENT_TRANSACTION_ID             PRNT_TRN_ID,
  RTI.SHIPMENT_HEADER_ID                SHP_HEAD_ID,
  RTI.SHIPMENT_LINE_ID                  SHP_LINE_ID,
  RTI.SOURCE_DOCUMENT_CODE              SRC_DOC,
  RTI.PROCESSING_REQUEST_ID             REQUEST_ID
from
   RCV_TRANSACTIONS_INTERFACE     RTI,
   OE_ORDER_LINES                 LIN
where
     LIN.SOURCE_DOCUMENT_LINE_ID       = RTI.REQUISITION_LINE_ID
and  LIN.SOURCE_DOCUMENT_TYPE_ID       = 10
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for rcv in rcv_trx_int
 loop
   utl_file.put_line(handle,'&sld'||n(rcv.INTF_TRNS_ID)||'&d'||n(rcv.PROC_MODE)||'&d'||n(rcv.PROC_STAT)||'&d');
   utl_file.put_line(handle,n(rcv.TRNS_STAT)||'&d'||n(rcv.TRNS_DATE)||'&d'||n(rcv.TRNS_TYPE)||'&d');
   utl_file.put_line(handle,n(rcv.DEST_TYPE)||'&d'||n(rcv.INSP_STAT)||'&d'||n(rcv.INSP_SRC)||'&d');
   utl_file.put_line(handle,n(rcv.OE_HEAD_ID)||'&d'||n(rcv.OE_LINE_ID)||'&d'||n(rcv.ITEM_ID)||'&d');
   utl_file.put_line(handle,n(rcv.QTY)||'&d'||n(rcv.PRY_Q)||'&d'||n(rcv.PO_UNIT_PRC)||'&d');
   utl_file.put_line(handle,n(rcv.SUB)||'&d'||n(rcv.TO_ORG_ID)||'&d'||n(rcv.RCPT_SRC)||'&d');
   utl_file.put_line(handle,n(rcv.PRNT_TRN_ID)||'&d'||n(rcv.SHP_HEAD_ID)||'&d'||n(rcv.SHP_LINE_ID)||'&d');
   utl_file.put_line(handle,n(rcv.SRC_DOC)||'&d'||n(rcv.REQUEST_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_rec

if UPPER(nvl('&prt_po','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f MTL_SUPPLY (SUP) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh SUP_TYPE &dh REQ_HEAD_ID &dh REQ_LINE_ID &dh PO_HEAD_ID &dh PO_REL_ID &dh PO_LINE_ID &dh PO_LINE_LOC_ID &dh ');
UTL_FILE.PUT_LINE(handle,'PO_DIST_ID &dh SHP_HEAD_ID &dh SHP_LINE_ID &dh RCV_TRANS_ID &dh ITEM_ID &dh QTY &dh RECPT_DT &dh NEED_BY_DT &dh ');
UTL_FILE.PUT_LINE(handle,'DEST_TYPE &dh FROM_ORG &dh FROM_SUB &dh TO_ORG &dh TO_SUB &dh INTRNS_OWN_ORG &eh');

Declare
cursor mtl_supply is
select  /* DROP SHIPMENTS */
  SUP.SUPPLY_TYPE_CODE               SUP_TYPE,
  SUP.REQ_HEADER_ID                  REQ_HEAD_ID,
  SUP.REQ_LINE_ID                    REQ_LINE_ID,
  SUP.PO_HEADER_ID                   PO_HEAD_ID,
  SUP.PO_RELEASE_ID                  PO_REL_ID,
  SUP.PO_LINE_ID                     PO_LINE_ID,
  SUP.PO_LINE_LOCATION_ID            PO_LINE_LOC_ID,
  SUP.PO_DISTRIBUTION_ID             PO_DIST_ID,
  SUP.SHIPMENT_HEADER_ID             SHP_HEAD_ID,
  SUP.SHIPMENT_LINE_ID               SHP_LINE_ID,
  SUP.RCV_TRANSACTION_ID             RCV_TRANS_ID,
  SUP.ITEM_ID                        ITEM_ID,
  SUP.QUANTITY                       QTY,
  to_char(SUP.RECEIPT_DATE,'DD-MON-RR_HH24:MI:SS')  RECPT_DT,
  to_char(SUP.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS')  NEED_BY_DT,
  SUP.DESTINATION_TYPE_CODE          DEST_TYPE,
  SUP.FROM_ORGANIZATION_ID           FROM_ORG,
  SUP.FROM_SUBINVENTORY              FROM_SUB,
  SUP.TO_ORGANIZATION_ID             TO_ORG,
  SUP.TO_SUBINVENTORY                TO_SUB,
  SUP.INTRANSIT_OWNING_ORG_ID        INTRNS_OWN_ORG
from
   MTL_SUPPLY           SUP,
   OE_DROP_SHIP_SOURCES SRC,
   OE_ORDER_LINES       LIN
where
     SRC.LINE_ID                   = LIN.LINE_ID
and  SRC.PO_LINE_ID                = SUP.PO_LINE_ID
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select         /* INTERNAL SALES ORDER */
  SUP.SUPPLY_TYPE_CODE               SUP_TYPE,
  --SUP.SUPPLY_SOURCE_ID               SUP_SRC,
  SUP.REQ_HEADER_ID                  REQ_HEAD_ID,
  SUP.REQ_LINE_ID                    REQ_LINE_ID,
  SUP.PO_HEADER_ID                   PO_HEAD_ID,
  SUP.PO_RELEASE_ID                  PO_REL_ID,
  SUP.PO_LINE_ID                     PO_LINE_ID,
  SUP.PO_LINE_LOCATION_ID            PO_LINE_LOC_ID,
  SUP.PO_DISTRIBUTION_ID             PO_DIST_ID,
  SUP.SHIPMENT_HEADER_ID             SHP_HEAD_ID,
  SUP.SHIPMENT_LINE_ID               SHP_LINE_ID,
  SUP.RCV_TRANSACTION_ID             RCV_TRANS_ID,
  SUP.ITEM_ID                        ITEM_ID,
  SUP.QUANTITY                       QTY,
  to_char(SUP.RECEIPT_DATE,'DD-MON-RR_HH24:MI:SS') RECPT_DT,
  to_char(SUP.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY_DT,
  SUP.DESTINATION_TYPE_CODE          DEST_TYPE,
  SUP.FROM_ORGANIZATION_ID           FROM_ORG,
  SUP.FROM_SUBINVENTORY              FROM_SUB,
  SUP.TO_ORGANIZATION_ID             TO_ORG,
  SUP.TO_SUBINVENTORY                TO_SUB,
  SUP.INTRANSIT_OWNING_ORG_ID        INTRNS_OWN_ORG
from
   MTL_SUPPLY           SUP,
   OE_ORDER_LINES       LIN
where
     LIN.SOURCE_DOCUMENT_LINE_ID       = SUP.REQ_LINE_ID
and  LIN.SOURCE_DOCUMENT_TYPE_ID       = 10
and  LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for mtl in mtl_supply
 loop
   utl_file.put_line(handle,'&sld'||n(mtl.SUP_TYPE)||'&d'||n(mtl.REQ_HEAD_ID)||'&d'||n(mtl.REQ_LINE_ID)||'&d');
   utl_file.put_line(handle,n(mtl.PO_HEAD_ID)||'&d'||n(mtl.PO_REL_ID)||'&d'||n(mtl.PO_LINE_ID)||'&d');
   utl_file.put_line(handle,n(mtl.PO_LINE_LOC_ID)||'&d'||n(mtl.PO_DIST_ID)||'&d'||n(mtl.SHP_HEAD_ID)||'&d');
   utl_file.put_line(handle,n(mtl.SHP_LINE_ID)||'&d'||n(mtl.RCV_TRANS_ID)||'&d'||n(mtl.ITEM_ID)||'&d');
   utl_file.put_line(handle,n(mtl.QTY)||'&d'||n(mtl.RECPT_DT)||'&d'||n(mtl.NEED_BY_DT)||'&d');
   utl_file.put_line(handle,n(mtl.DEST_TYPE)||'&d'||n(mtl.FROM_ORG)||'&d'||n(mtl.FROM_SUB)||'&d');
   utl_file.put_line(handle,n(mtl.TO_ORG)||'&d'||n(mtl.TO_SUB)||'&d'||n(mtl.INTRNS_OWN_ORG)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_po

if UPPER(nvl('&prt_inv','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_RESERVATIONS">MTL_RESERVATIONS (RES) </a> <a HREF="#MR">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RESERV_ID &dh SHIP_READY &dh DS_HEAD_ID &dh DS_LINE_ID &dh DS_DELIV &dh LINE &dh ITEM_ID &dh ITEM &dh ');
UTL_FILE.PUT_LINE(handle,'RES_Q &dh DET_Q &dh UOM &dh REQUIRD_D &dh DS_TYPE &dh WH_ID &dh SUBINV &dh LOT &dh REV &dh LOC_ID &dh SERIAL_NUM &dh ');
UTL_FILE.PUT_LINE(handle,'SS_TYPE_ID &dh WIP_ID &dh JOB_NAME &dh JOB_STAT &dh SS_HEADER_ID &dh SS_SOURCE_LINE_DET &dh SS_SOURCE_LINE &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY RES_QTY &dh CALC_SEC RES_QTY &dh SECONDARY UOM &dh SECONDARY DET_QTY &eh');

Declare
cursor mtl_res is
select
     RES.RESERVATION_ID               RESERV_ID,
     decode(RES.SHIP_READY_FLAG,
        1,'1=Released',
        2,'2=Submitted',
        to_char(RES.SHIP_READY_FLAG)) SHIP_READY,
     RES.DEMAND_SOURCE_HEADER_ID      DS_HEAD_ID,
     RES.DEMAND_SOURCE_LINE_ID        DS_LINE_ID,
     RES.DEMAND_SOURCE_DELIVERY       DS_DELIV,
     to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     RES.INVENTORY_ITEM_ID            ITEM_ID,
     ITM.SEGMENT1                     ITEM,
     RES.PRIMARY_RESERVATION_QUANTITY RES_Q,
     RES.DETAILED_QUANTITY            DET_Q,
     RES.PRIMARY_UOM_CODE             UOM,
     To_char(RES.REQUIREMENT_DATE,'DD-MON-RR_HH24:MI:SS') REQUIRD_D,
     RES.DEMAND_SOURCE_TYPE_ID        DS_TYPE,
     RES.ORGANIZATION_ID              WH_ID,
     RES.SUBINVENTORY_CODE            SUBINV,
     RES.LOT_NUMBER                   LOT,
     RES.REVISION                     REV,
     RES.LOCATOR_ID                   LOC_ID,
     RES.SERIAL_NUMBER                SERIAL_NUM,
     decode(RES.SUPPLY_SOURCE_TYPE_ID,
            5,'5=WIP DJ',
            RES.SUPPLY_SOURCE_TYPE_ID) SS_TYPE_ID,
     WIP.WIP_ENTITY_ID                WIP_ID,
     WIP.WIP_ENTITY_NAME              JOB_NAME,
     JOB.STATUS_TYPE_DISP             JOB_STAT,
     RES.SUPPLY_SOURCE_HEADER_ID      SS_HEADER_ID,
     RES.SUPPLY_SOURCE_LINE_DETAIL    SS_SOURCE_LINE_DET,
     RES.SUPPLY_SOURCE_LINE_ID        SS_SOURCE_LINE,
     res.secondary_reservation_quantity sec_res_q,
     inv_convert.inv_um_convert(
                            res.inventory_item_id,
                            res.lot_number,
                            res.organization_id,
                            5,
                            res.primary_reservation_quantity,
                            res.primary_uom_code,
                            res.secondary_uom_code,
                            null,
                            null) calc_sec_res_q,
     res.secondary_uom_code uom2,
     res.secondary_detailed_quantity  sec_dtl_q
from
     MTL_RESERVATIONS              RES,
     OE_ORDER_LINES                LIN,
     MTL_SYSTEM_ITEMS              ITM,
     WIP_ENTITIES                  WIP,
     WIP_DISCRETE_JOBS_V           JOB
where
     :sales_ord_id                 = RES.DEMAND_SOURCE_HEADER_ID
and  RES.DEMAND_SOURCE_TYPE_ID     in  (2,8,9,21,22)
and  RES.DEMAND_SOURCE_LINE_ID     = LIN.LINE_ID(+)
and  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
and  RES.ORGANIZATION_ID           = ITM.ORGANIZATION_ID(+)
and  RES.INVENTORY_ITEM_ID         = ITM.INVENTORY_ITEM_ID(+)
and  RES.SUPPLY_SOURCE_HEADER_ID   = WIP.WIP_ENTITY_ID(+)
and  WIP.WIP_ENTITY_ID             = JOB.WIP_ENTITY_ID(+)
order by
     NVL(LIN.TOP_MODEL_LINE_ID,         LIN.LINE_ID),
     NVL(LIN.ATO_LINE_ID,               LIN.LINE_ID),
     NVL(LIN.SORT_ORDER,                '0000'),
     NVL(LIN.LINK_TO_LINE_ID,           LIN.LINE_ID),
     NVL(LIN.SOURCE_DOCUMENT_LINE_ID,   LIN.LINE_ID),
     LIN.LINE_ID,
     RES.RESERVATION_ID; 

begin
 for mtl in mtl_res
 loop
   utl_file.put_line(handle,'&sld'||n(mtl.RESERV_ID)||'&d'||n(mtl.SHIP_READY)||'&d'||n(mtl.DS_HEAD_ID)||'&d');
   utl_file.put_line(handle,n(mtl.DS_LINE_ID)||'&d'||n(mtl.DS_DELIV)||'&d'||n(mtl.LINE)||'&d');
   utl_file.put_line(handle,n(mtl.ITEM_ID)||'&d'||n(mtl.ITEM)||'&d'||n(mtl.RES_Q)||'&d');
   utl_file.put_line(handle,n(mtl.DET_Q)||'&d'||n(mtl.UOM)||'&d'||n(mtl.REQUIRD_D)||'&d');
   utl_file.put_line(handle,n(mtl.DS_TYPE)||'&d'||n(mtl.WH_ID)||'&d'||n(mtl.SUBINV)||'&d');
   utl_file.put_line(handle,n(mtl.LOT)||'&d'||n(mtl.REV)||'&d'||n(mtl.LOC_ID)||'&d');
   utl_file.put_line(handle,n(mtl.SERIAL_NUM)||'&d'||n(mtl.SS_TYPE_ID)||'&d'||n(mtl.WIP_ID)||'&d');
   utl_file.put_line(handle,n(mtl.JOB_NAME)||'&d'||n(mtl.JOB_STAT)||'&d'||n(mtl.SS_HEADER_ID)||'&d');
   utl_file.put_line(handle,n(mtl.SS_SOURCE_LINE_DET)||'&d'||n(mtl.SS_SOURCE_LINE)||'&d');
   utl_file.put_line(handle,n(mtl.sec_res_q)||'&d'||n(mtl.calc_sec_res_q)||'&d');
   utl_file.put_line(handle,n(mtl.uom2)||'&d'||n(mtl.sec_dtl_q)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_inv

if UPPER(nvl('&prt_wip','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f WIP_JOB_SCHEDULE_INTERFACE (WJS) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTERF_ID &dh SRC_LINE_ID &dh LINE &dh REQUEST_ID &dh GROUP_ID &dh SRC_CODE &dh PHS &dh STAT_TY &dh ');
UTL_FILE.PUT_LINE(handle,'STAT &dh ORG &dh LOAD &dh ITEM_ID &dh WIP_SUP_TY &dh START_QTY &eh');

Declare
cursor wip_sch_int is
select
     WJS.INTERFACE_ID                   INTERF_ID,
     WJS.SOURCE_LINE_ID                 SRC_LINE_ID,
     to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     WJS.REQUEST_ID                     REQUEST_ID,
     WJS.GROUP_ID                       GROUP_ID,
     WJS.SOURCE_CODE                    SRC_CODE,
     WJS.PROCESS_PHASE                  PHS,
     WJS.STATUS_TYPE                    STAT_TY,
     WJS.PROCESS_STATUS                 STAT,
     WJS.ORGANIZATION_CODE              ORG,
     WJS.LOAD_TYPE                      LOAD,
     WJS.PRIMARY_ITEM_ID                ITEM_ID,
     WJS.WIP_SUPPLY_TYPE                WIP_SUP_TY,
     WJS.START_QUANTITY                 START_QTY
from WIP_JOB_SCHEDULE_INTERFACE WJS,
     OE_ORDER_LINES_ALL         LIN
where WJS.SOURCE_LINE_ID      =  LIN.LINE_ID
  and LIN.HEADER_ID           = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for wip in wip_sch_int
 loop
   utl_file.put_line(handle,'&sld'||n(wip.INTERF_ID)||'&d'||n(wip.SRC_LINE_ID)||'&d'||n(wip.LINE)||'&d');
   utl_file.put_line(handle,n(wip.REQUEST_ID)||'&d'||n(wip.GROUP_ID)||'&d'||n(wip.SRC_CODE)||'&d');
   utl_file.put_line(handle,n(wip.PHS)||'&d'||n(wip.STAT_TY)||'&d'||n(wip.STAT)||'&d');
   utl_file.put_line(handle,n(wip.ORG)||'&d'||n(wip.LOAD)||'&d'||n(wip.ITEM_ID)||'&d');
   utl_file.put_line(handle,n(wip.WIP_SUP_TY)||'&d'||n(wip.START_QTY)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WIP_INTERFACE_ERRORS (WIE) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTERF_ID &dh LINE &dh ERROR_TYPE &dh ERROR &eh');

Declare
cursor wip_int_err is
select
     WIE.INTERFACE_ID                 INTERF_ID,
     to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     WIE.ERROR_TYPE                   ERROR_TYPE,
     WIE.ERROR                        ERROR_WIE
from WIP_INTERFACE_ERRORS       WIE,
     WIP_JOB_SCHEDULE_INTERFACE WJS,
     OE_ORDER_LINES_ALL         LIN
where WIE.INTERFACE_ID        = WJS.INTERFACE_ID
  and WJS.SOURCE_LINE_ID      =  LIN.LINE_ID
  and LIN.HEADER_ID           = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for wip in wip_int_err
 loop
   utl_file.put_line(handle,'&sld'||n(wip.INTERF_ID)||'&d'||n(wip.LINE)||'&d');
   utl_file.put_line(handle,n(wip.ERROR_TYPE)||'&d'||n(wip.ERROR_WIE)||'&el');
 end loop;
end;
UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WIP_DISCRETE_JOBS (WIP) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WIP_ENT_ID &dh JOB_NAME &dh WH_ID &dh REQUEST_ID &dh LINE_ID &dh LINE &dh STATUS &dh PRY_ITEM_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM &dh FIRM &dh JOB_TY &dh WIP_SUP_TYPE &dh SCH_STRT &dh SCH_CMPL &dh RLS_DATE &dh DUE_DATE &dh COMPL_DT &dh ');
UTL_FILE.PUT_LINE(handle,'CLSD_DT &dh STRT_Q &dh COMP_Q &dh SCRP_Q &dh NET_Q &dh LINE_ID &eh');

Declare
cursor wip_d_jobs is
select
     WIP.WIP_ENTITY_ID                  WIP_ENT_ID,
     WIV.WIP_ENTITY_NAME                JOB_NAME,
     WIP.ORGANIZATION_ID                WH_ID,
     WIP.REQUEST_ID                     REQUEST_ID,
     WIP.SOURCE_LINE_ID                 LINE_ID,
     to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
     WIV.STATUS_TYPE_DISP               STATUS,
     WIP.PRIMARY_ITEM_ID                PRY_ITEM_ID,
     ITM.SEGMENT1                       ITEM,
     WIP.FIRM_PLANNED_FLAG              FIRM,
     WIP.JOB_TYPE                       JOB_TY,
     WIV.WIP_SUPPLY_TYPE_DISP           WIP_SUP_TYPE,
     WIP.SCHEDULED_START_DATE           SCH_STRT,
     WIP.SCHEDULED_COMPLETION_DATE      SCH_CMPL,
     WIP.DATE_RELEASED                  RLS_DATE,
     WIP.DUE_DATE                       DUE_DATE,
     WIP.DATE_COMPLETED                 COMPL_DT,
     WIP.DATE_CLOSED                    CLSD_DT,
     WIP.START_QUANTITY                 STRT_Q,
     WIP.QUANTITY_COMPLETED             COMP_Q,
     WIP.QUANTITY_SCRAPPED              SCRP_Q,
     WIP.NET_QUANTITY                   NET_Q,
     WIP.LINE_ID                        WIP_LINE_ID
from WIP_DISCRETE_JOBS   WIP,
     WIP_DISCRETE_JOBS_V WIV,
     MTL_SYSTEM_ITEMS_B  ITM,
     OE_ORDER_LINES_ALL  LIN
where WIP.WIP_ENTITY_ID       = WIV.WIP_ENTITY_ID
  and WIP.PRIMARY_ITEM_ID     = ITM.INVENTORY_ITEM_ID
  and WIP.ORGANIZATION_ID     = ITM.ORGANIZATION_ID
  and WIP.SOURCE_LINE_ID      =  LIN.LINE_ID
  and LIN.HEADER_ID           = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for wip in wip_d_jobs
 loop
   utl_file.put_line(handle,'&sld'||n(wip.WIP_ENT_ID)||'&d'||n(wip.JOB_NAME)||'&d');
   utl_file.put_line(handle,n(wip.WH_ID)||'&d'||n(wip.REQUEST_ID)||'&d');
   utl_file.put_line(handle,n(wip.LINE_ID)||'&d'||n(wip.LINE)||'&d');
   utl_file.put_line(handle,n(wip.STATUS)||'&d'||n(wip.PRY_ITEM_ID)||'&d');
   utl_file.put_line(handle,n(wip.ITEM)||'&d'||n(wip.FIRM)||'&d');
   utl_file.put_line(handle,n(wip.JOB_TY)||'&d'||n(wip.WIP_SUP_TYPE)||'&d');
   utl_file.put_line(handle,n(wip.SCH_STRT)||'&d'||n(wip.SCH_CMPL)||'&d');
   utl_file.put_line(handle,n(wip.RLS_DATE)||'&d'||n(wip.DUE_DATE)||'&d');
   utl_file.put_line(handle,n(wip.COMPL_DT)||'&d'||n(wip.CLSD_DT)||'&d');
   utl_file.put_line(handle,n(wip.STRT_Q)||'&d'||n(wip.COMP_Q)||'&d');
   utl_file.put_line(handle,n(wip.SCRP_Q)||'&d'||n(wip.NET_Q)||'&d');
   utl_file.put_line(handle,n(wip.WIP_LINE_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f DISCRETE JOB TRANSACTIONS (DJT) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh JOB_NAME &dh LINE &dh ITEM_ID &dh ITEM &dh QTY &dh MTL_TRNS_ID &dh TRANS_TYPE &dh OP_SEQ &dh SERIAL &eh');

Declare
cursor wip_job_trx is
select
      WIE.wip_entity_name                    JOB_NAME,
      to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
      TRN.inventory_item_id                  ITEM_ID,
      ITM.segment1                           ITEM,
      TRN.TRANSACTION_QUANTITY               QTY,
      TRN.TRANSACTION_ID                     MTL_TRNS_ID,
      decode(TRN.TRANSACTION_TYPE_ID,
             35, 'WIP Component Issue',
             44, 'WIP Assy Completion',
             TRN.TRANSACTION_TYPE_ID)        TRANS_TYPE,
      TRN.OPERATION_SEQ_NUM                  OP_SEQ,
      UNT.serial_number                      SERIAL
from    wip_discrete_jobs  WIP,
      OE_ORDER_LINES_ALL LIN,
      wip_entities WIE,
      mtl_material_transactions TRN,
      mtl_system_items_b ITM,
      mtl_unit_transactions UNT
where WIE.wip_entity_id              = WIP.wip_entity_id
  and LIN.LINE_ID                    = WIP.source_line_id
  and TRN.transaction_source_id      = WIP.wip_entity_id
  and TRN.transaction_source_type_id = 5
  and TRN.inventory_item_id          = ITM.inventory_item_id
  and TRN.organization_id            = ITM.organization_id
  and TRN.transaction_id             = UNT.transaction_id(+)
  and LIN.HEADER_ID           = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for wip in wip_job_trx
 loop
   utl_file.put_line(handle,'&sld'||n(wip.JOB_NAME)||'&d'||n(wip.LINE)||'&d');
   utl_file.put_line(handle,n(wip.ITEM_ID)||'&d'||n(wip.ITEM)||'&d');
   utl_file.put_line(handle,n(wip.QTY)||'&d'||n(wip.MTL_TRNS_ID)||'&d');
   utl_file.put_line(handle,n(wip.TRANS_TYPE)||'&d'||n(wip.OP_SEQ)||'&d');
   utl_file.put_line(handle,n(wip.SERIAL)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_wip

end if; -- :v_head_only

   UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

If :v_head_only = 'N' then 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_TRIPS"> WSH_TRIPS (TRP) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh TRIP_ID &dh NAME &dh PLND &dh STATUS_CODE &dh VEH_NUM &dh CARR_ID &dh SHIP_METH &dh ROUTE_ID &dh VEH_ORG_ID &eh');

Declare
 cursor w_trips is
select distinct
  TRP.TRIP_ID                      TRIP_ID,
  TRP.NAME                         NAME,
  TRP.PLANNED_FLAG                 PLND,
  TRP.STATUS_CODE                  STATUS_CODE,
  TRP.VEHICLE_NUMBER               VEH_NUM,
  TRP.CARRIER_ID                   CARR_ID,
  TRP.SHIP_METHOD_CODE             SHIP_METH,
  TRP.ROUTE_ID                     ROUTE_ID,
  TRP.VEHICLE_ORGANIZATION_ID      VEH_ORG_ID
FROM
  WSH_TRIPS                        TRP
where
  TRIP_ID in
      (select distinct(STP.TRIP_ID)
       FROM
            OE_ORDER_LINES                   LIN,
            WSH_DELIVERY_DETAILS             DET,
            WSH_NEW_DELIVERIES               DEL,
            WSH_DELIVERY_LEGS                LEG,
            WSH_TRIP_STOPS                   STP,
            WSH_DELIVERY_ASSIGNMENTS         ASG
       WHERE
            DEL.DELIVERY_ID                 = ASG.DELIVERY_ID AND
            ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
            DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
            STP.STOP_ID                     = LEG.PICK_UP_STOP_ID AND
            LEG.DELIVERY_ID                 = DEL.DELIVERY_ID AND
            LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
            NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
       )
order by TRP.TRIP_ID;

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

begin
  :r_error := 0;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..30
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := '    1. XX.';
end if;

 for tt in w_trips
 loop
   :r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;
end if;

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#WTERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,'<a NAME="T'||tt.TRIP_ID||'">'||n(tt.TRIP_ID)||'</a>'||'&d'||n(tt.NAME)||'&d');
   utl_file.put_line(handle,n(tt.PLND)||'&d'||n(tt.STATUS_CODE)||'&d'||n(tt.VEH_NUM)||'&d'||n(tt.CARR_ID)||'&d');
   utl_file.put_line(handle,n(tt.SHIP_METH)||'&d'||n(tt.ROUTE_ID)||'&d'||n(tt.VEH_ORG_ID)||'&el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="WTERR">Warning List:</a> &eb &f');
   for i in 1..30
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_TRIP_STOPS">WSH_TRIP_STOPS (STP) </a> &f ');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh STOP_ID &dh STOP_DESCRIPTION &dh TRIP_ID &dh TRIP_NAME &dh STOP_LOC_ID &dh STATUS &dh LOCK_ST_ID &dh ');
UTL_FILE.PUT_LINE(handle,'PEND_INTERF &dh PLN_DEP_DATE &dh ACT_DEP_DATE &eh');

Declare cursor w_trip_stops is
select distinct
  STP.STOP_ID                      STOP_ID,
  STP1.STOP_DESCRIPTION            STOP_DESCRIPTION,
  STP.TRIP_ID                      TRIP_ID,
  TRP.NAME                         TRIP_NAME,
  STP.STOP_LOCATION_ID             STOP_LOC_ID,
  STP.STATUS_CODE                  STATUS,
  STP.LOCK_STOP_ID                 LOCK_ST_ID,
  STP.PENDING_INTERFACE_FLAG       PEND_INTERF,
  to_char(STP.PLANNED_DEPARTURE_DATE,'DD-MON-RR_HH24:MI:SS')  PLN_DEP_DATE,
  to_char(STP.ACTUAL_DEPARTURE_DATE,'DD-MON-RR_HH24:MI:SS')   ACT_DEP_DATE
FROM
  WSH_TRIP_STOPS                   STP,
  WSH_SRS_TRIP_STOPS_V             STP1,
  WSH_TRIPS                        TRP
where
  STP.TRIP_ID                     = TRP.TRIP_ID(+) AND
  STP1.STOP_ID                    = STP.STOP_ID AND
  STP.STOP_ID in
        (
         (select distinct(LEG.PICK_UP_STOP_ID)
         from
            OE_ORDER_LINES                   LIN,
            WSH_DELIVERY_DETAILS             DET,
            WSH_NEW_DELIVERIES               DEL,
            WSH_DELIVERY_LEGS                LEG,
            WSH_DELIVERY_ASSIGNMENTS         ASG
         where
         DEL.DELIVERY_ID                 = ASG.DELIVERY_ID AND
         ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
         DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
         LEG.DELIVERY_ID                 = DEL.DELIVERY_ID AND
         LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
         NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
         )
         UNION
         (select distinct(LEG.DROP_OFF_STOP_ID)
         from
            OE_ORDER_LINES                   LIN,
            WSH_DELIVERY_DETAILS             DET,
            WSH_NEW_DELIVERIES               DEL,
            WSH_DELIVERY_LEGS                LEG,
            WSH_DELIVERY_ASSIGNMENTS         ASG
         where
         DEL.DELIVERY_ID                 = ASG.DELIVERY_ID AND
         ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
         DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
         LEG.DELIVERY_ID                 = DEL.DELIVERY_ID AND
         LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
         NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
         )
        );

type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

begin
  :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..30
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := '    1. XX.';
end if;

 for ts in w_trip_stops
 loop
   :r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;
end if;

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#WTSERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,'<a NAME="TS'||ts.STOP_ID||'">'||n(ts.STOP_ID)||'</a>'||'&d'||n(ts.STOP_DESCRIPTION)||'&d');
   utl_file.put_line(handle,'<a HREF="#T'||ts.TRIP_ID||'">'||n(ts.TRIP_ID)||'</a>'||'&d');
   utl_file.put_line(handle,n(ts.TRIP_NAME)||'&d'||'<a NAME="PU'||n(ts.STOP_LOC_ID)||'">'||n(ts.STOP_LOC_ID)||'</a>'||'&d');
   utl_file.put_line(handle,n(ts.STATUS)||'&d'||n(ts.LOCK_ST_ID)||'&d');
   utl_file.put_line(handle,n(ts.PEND_INTERF)||'&d'||n(ts.PLN_DEP_DATE)||'&d'||n(ts.ACT_DEP_DATE)||'&el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="WTSERR">Warning List:</a> &eb &f');
   for i in 1..30
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f WSH_DELIVERY_LEGS (LEG) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh LEG_ID &dh SEQ_NUM &dh DELIVERY_ID &dh PICKUP_STOP_ID &dh DROPOFF_STOP_ID &eh');

Declare
cursor w_del_leg is
select distinct
  LEG.DELIVERY_LEG_ID              LEG_ID,
  LEG.SEQUENCE_NUMBER              SEQ_NUM,
  LEG.DELIVERY_ID                  DELIVERY_ID,
  LEG.PICK_UP_STOP_ID              PICKUP_STOP_ID,
  LEG.DROP_OFF_STOP_ID             DROPOFF_STOP_ID
  --LEG.LOAD_TENDER_STATUS           LOAD_TENDER_STAT
  --ENABLE_TIMESTAMP ,to_char(LEG.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
  --ENABLE_TIMESTAMP ,to_char(LEG.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
  --ENABLE_TIMESTAMP ,LEG.REQUEST_ID                                    REQUEST_ID
FROM
  OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  WSH_NEW_DELIVERIES               DEL,
  WSH_DELIVERY_LEGS                LEG,
  WSH_TRIP_STOPS                   STP,
  WSH_DELIVERY_ASSIGNMENTS         ASG,
  WSH_TRIPS                        TRP
where
  DEL.DELIVERY_ID                 = ASG.DELIVERY_ID AND
  ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
  DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
  STP.STOP_ID(+)                  = LEG.PICK_UP_STOP_ID AND
  STP.TRIP_ID                     = TRP.TRIP_ID AND
  LEG.DELIVERY_ID(+)              = DEL.DELIVERY_ID AND
  LIN.HEADER_ID                = nvl('&header_id_selected',:v_header_id) AND
  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
order by
     LEG.DELIVERY_LEG_ID;

begin
 for wdl in w_del_leg
 loop
   utl_file.put_line(handle,'&sld'||n(wdl.LEG_ID)||'&d'||n(wdl.SEQ_NUM)||'&d');
   utl_file.put_line(handle,n(wdl.DELIVERY_ID)||'&d'||n(wdl.PICKUP_STOP_ID)||'&d');
   utl_file.put_line(handle,n(wdl.DROPOFF_STOP_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_NEW_DELIVERIES"> WSH_NEW_DELIVERIES (DEL) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh DELIVERY_ID &dh DEL_NAME &dh STATUS_CODE &dh WAYBILL &dh PLND &dh PICKUP_DT &dh PICKUP_LOC &dh');
UTL_FILE.PUT_LINE(handle,'DROPOFF_DT &dh DROPOFF_LOC &dh SHIP_METHOD_CODE &dh CONFIRM_DATE &eh');

Declare cursor w_deliveries is
select distinct
  DEL.DELIVERY_ID                  DELIVERY_ID,
  DEL.NAME                         DEL_NAME,
  DEL.STATUS_CODE                  STATUS_CODE,
  DEL.WAYBILL                      WAYBILL,
  DEL.PLANNED_FLAG                 PLND,
  to_char(DEL.INITIAL_PICKUP_DATE,'DD-MON-RR_HH24:MI:SS') PICKUP_DT,
  DEL.INITIAL_PICKUP_LOCATION_ID   PICKUP_LOC,
  to_char(DEL.ULTIMATE_DROPOFF_DATE,'DD-MON-RR_HH24:MI:SS')  DROPOFF_DT,
  DEL.ULTIMATE_DROPOFF_LOCATION_ID DROPOFF_LOC,
  DEL.SHIP_METHOD_CODE             SHP_METH,
  to_char(DEL.CONFIRM_DATE,'DD-MON-RR_HH24:MI:SS')  CONF_DATE
  --DEL.BOOKING_NUMBER               BOOKING_NUM,
  --DEL.ACCEPTANCE_FLAG              ACCEPTED
  --ENABLE_TIMESTAMP ,to_char(DEL.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
  --ENABLE_TIMESTAMP ,to_char(DEL.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
  --ENABLE_TIMESTAMP ,DEL.REQUEST_ID                                    REQUEST_ID
FROM
  OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  WSH_NEW_DELIVERIES               DEL,
  WSH_DELIVERY_ASSIGNMENTS         ASG
where
  DEL.DELIVERY_ID                 = ASG.DELIVERY_ID AND
  ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
  DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
  LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
order by Del.DELIVERY_ID;
type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
  :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..30
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := '    1. XX.';
end if;

 for nd in w_deliveries
 loop
   :r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;
end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#WNDERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,'<a NAME="D'||nd.DELIVERY_ID||'">'||n(nd.DELIVERY_ID)||'</a>'||'&d'||n(nd.DEL_NAME)||'&d');
   utl_file.put_line(handle,n(nd.STATUS_CODE)||'&d'||n(nd.WAYBILL)||'&d'||n(nd.PLND)||'&d'||n(nd.PICKUP_DT)||'&d');
   utl_file.put_line(handle,'<a HREF="#PU'||nd.PICKUP_LOC||'">'||n(nd.PICKUP_LOC)||'</a>'||'&d');
   utl_file.put_line(handle,n(nd.DROPOFF_DT)||'&d'||n(nd.DROPOFF_LOC)||'&d');
   utl_file.put_line(handle,n(nd.SHP_METH)||'&d'||n(nd.CONF_DATE)||'&el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="WNDERR">Warning List:</a> &eb &f');
   for i in 1..30
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');

UTL_FILE.PUT_LINE(handle,'&f &f WSH_DELIVERY_ASSIGNMENTS (ASG) &f ');
UTL_FILE.PUT_LINE(handle,'&std &sh DEL_ASGN_ID &dh DELIVERY_ID &dh DEL_DETAIL_ID &dh PAR_DEL_ID &dh PAR_DETAIL_ID &eh ');

Declare
cursor w_del_asig is
select distinct
  ASG.DELIVERY_ASSIGNMENT_ID       DEL_ASGN_ID,
  ASG.DELIVERY_ID                  DELIVERY_ID,
  ASG.DELIVERY_DETAIL_ID           DEL_DETAIL_ID,
  ASG.PARENT_DELIVERY_ID           PAR_DEL_ID,
  ASG.PARENT_DELIVERY_DETAIL_ID    PAR_DETAIL_ID
  --  ASG.ACTIVE_FLAG                  ACTIVE
  --ENABLE_TIMESTAMP ,to_char(ASG.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
  --ENABLE_TIMESTAMP ,to_char(ASG.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
  --ENABLE_TIMESTAMP ,ASG.REQUEST_ID                                    REQUEST_ID
FROM
  OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  WSH_DELIVERY_ASSIGNMENTS         ASG
where
  ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
  DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
  LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
  NVL('&line_id_selected',0)       in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for wda in w_del_asig
 loop
   utl_file.put_line(handle,'&sld'||n(wda.DEL_ASGN_ID)||'&d'||n(wda.DELIVERY_ID)||'&d');
   utl_file.put_line(handle,n(wda.DEL_DETAIL_ID)||'&d'||n(wda.PAR_DEL_ID)||'&d');
   utl_file.put_line(handle,n(wda.PAR_DETAIL_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="ORGANIZATIONS"> ORGANIZATIONS (ORG) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ORG_ID &dh ORGANIZATION CODE &dh WMS_ENABLED &dh OPM_ENABLED &dh NEGATIVE BAL_ALLOW ');
UTL_FILE.PUT_LINE(handle,'&dh PRIMARY COST_METH &dh COST ORG_ID &dh MASTER ORG_ID &dh DAFAULT COST_GRP &dh PROJECT REF_ENABLED ');
UTL_FILE.PUT_LINE(handle,'&dh COST CUT_DATE &dh EAM ENABLED &dh ENCUMBR REVERSAL &eh ');

Declare cursor l_orgs is
SELECT distinct
       mp.organization_id                org_id,
       mp.organization_code              org,
       decode(mp.primary_cost_method,
              1, 'Standard',
              2, 'Average',
              5, 'FIFO',
              6, 'LIFO')              PCM,
       decode(mp.wms_enabled_flag,
              'Y', 'Yes',
              'N', 'No')              WMS,
       decode(mp.NEGATIVE_INV_RECEIPT_CODE,
              1, 'Yes',
              2, 'No')                neg_bal,
       mp.cost_organization_id           c_org,
       mp.master_organization_id         m_org,
       mp.default_cost_group_id          dcg,
       decode(mp.project_reference_enabled,
              1, 'Yes',
              2, 'No')                PRE,
       to_char(mp.cost_cutoff_date,'dd-mon-rrrr') ccd,
       decode(mp.eam_enabled_flag,
              'Y','Yes',
              'N','No')               EAM,
       decode (mp.encumbrance_reversal_flag,
               1, 'Yes',
               2, 'No')               ENC
  FROM MTL_PARAMETERS                   MP,
       WSH_DELIVERY_DETAILS             DET
where DET.SOURCE_CODE                 = 'OE'
  and MP.ORGANIZATION_ID              = DET.ORGANIZATION_ID
  and DET.SOURCE_HEADER_ID            = nvl('&header_id_selected',:v_header_id);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin

 for orgi in l_orgs
 loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;
end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(orgi.org_id)||' &d ');
   utl_file.put_line(handle,n(orgi.org)||' &d '||n(orgi.WMS)||' &d ');
   if INV_GMI_RSV_BRANCH.PROCESS_BRANCH(orgi.org_id) then
     utl_file.put_line(handle,'Yes ');
     :is_opm := 'Y';
    else
     utl_file.put_line(handle,'No ');
     :is_opm := 'N';
   end if;
   utl_file.put_line(handle,' &d '||n(orgi.neg_bal)||' &d '||n(orgi.PCM)||' &d ');
   utl_file.put_line(handle,n(orgi.c_org)||' &d '||n(orgi.m_org)||' &d ');
   utl_file.put_line(handle,n(orgi.dcg)||' &d '||n(orgi.PRE)||' &d ');
   utl_file.put_line(handle,n(orgi.ccd)||' &d '||n(orgi.EAM)||' &d ');
   utl_file.put_line(handle,n(orgi.ENC)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="ACCOUNTING PERIODS"> ACCOUNTING PERIODS (ACC) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ORG_ID &dh ORGANIZATION CODE &dh PLANNED_DEPART_DT (Shipped Line) &dh ');
UTL_FILE.PUT_LINE(handle,'SCHEDULE_SHIP_DT (Not Shipped Line) &dh ACCOUNT PERIOD_ID &dh PERIOD NAME ');
UTL_FILE.PUT_LINE(handle,'&dh OPEN FLAG &dh PERIOD START_DT &dh PERIOD CLOSE_DT &dh SCHEDULE CLOSE_DT &eh ');

Declare cursor l_orgs is
SELECT distinct
       mp.organization_id               org_id,
       mp.organization_code             org,
       to_char(STP.PLANNED_DEPARTURE_DATE,'DD-MON-RR_HH24:MI:SS')  plan_dep_date,
       ''                               schdate,
       oac.acct_period_id               acc_per_id,
       oac.period_name                  per_name,
       oac.open_flag                    open_fl,
       to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS')   per_sd,
       to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS')   per_cd,
       to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
  FROM MTL_PARAMETERS                   MP,
       ORG_ACCT_PERIODS                 OAC,
       WSH_DELIVERY_DETAILS             DET,
       WSH_DELIVERY_LEGS                LEG,
       WSH_TRIP_STOPS                   STP,
       WSH_DELIVERY_ASSIGNMENTS         ASG,
       WSH_TRIPS                        TRP
where ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID
  and STP.STOP_ID(+)                  = LEG.PICK_UP_STOP_ID
  and STP.TRIP_ID                     = TRP.TRIP_ID(+)
  and LEG.DELIVERY_ID(+)              = ASG.DELIVERY_ID
  and DET.SOURCE_CODE                 = 'OE'
  and MP.ORGANIZATION_ID              = OAC.ORGANIZATION_ID
  and MP.ORGANIZATION_ID              = DET.ORGANIZATION_ID
  and STP.PLANNED_DEPARTURE_DATE      BETWEEN OAC.PERIOD_START_DATE and NVL(OAC.PERIOD_CLOSE_DATE,OAC.SCHEDULE_CLOSE_DATE)
  and DET.SOURCE_HEADER_ID            = nvl('&header_id_selected',:v_header_id)
union
SELECT distinct
       mp.organization_id               org_id,
       mp.organization_code             org,
       ''                               plan_dep_date,
       to_char(LIN.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS')   schdate,
       oac.acct_period_id               acc_per_id,
       oac.period_name                  per_name,
       oac.open_flag                    open_fl,
       to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS')   per_sd,
       to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS')   per_cd,
       to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
  FROM MTL_PARAMETERS                   MP,
       ORG_ACCT_PERIODS                 OAC,
       WSH_DELIVERY_DETAILS             DET,
       OE_ORDER_LINES                   LIN
where DET.SOURCE_LINE_ID              = LIN.LINE_ID
  and DET.SOURCE_CODE                 = 'OE'
  and MP.ORGANIZATION_ID              = OAC.ORGANIZATION_ID
  and MP.ORGANIZATION_ID              = DET.ORGANIZATION_ID
  and LIN.SCHEDULE_SHIP_DATE          BETWEEN OAC.PERIOD_START_DATE and NVL(OAC.PERIOD_CLOSE_DATE,OAC.SCHEDULE_CLOSE_DATE)
  and DET.SOURCE_HEADER_ID            = nvl('&header_id_selected',:v_header_id);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin

 for orgi in l_orgs
 loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;
end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(orgi.org_id)||' &d ');
   utl_file.put_line(handle,n(orgi.org)||' &d '||n(orgi.plan_dep_date)||' &d ');
   utl_file.put_line(handle,n(orgi.schdate)||' &d '||n(orgi.acc_per_id)||' &d ');
   utl_file.put_line(handle,n(orgi.per_name)||' &d '||n(orgi.open_fl)||' &d ');
   utl_file.put_line(handle,n(orgi.per_sd)||' &d '||n(orgi.per_cd)||' &d ');
   utl_file.put_line(handle,n(orgi.sch_cd)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_DELIVERY_DETAILS"> WSH_DELIVERY_DETAILS (DET)</a> <a HREF="#WDD">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std ');  -- just to start the table, header will be printed later

Declare cursor w_del_details is
select distinct
  DET.DELIVERY_DETAIL_ID           DEL_DET_ID,
  DET.RELEASED_STATUS              REL_STATUS_C,
  decode(DET.RELEASED_STATUS,
    'Y','Y=Staged',
    'R','R=Ready to Release',
    'S','S=Rel to Warhouse',
    'B','B=Backorder',
    'P','P=Pending Inv',
    'C','C=Shipped',
    'N','N=Not Ready',
    'D','D=Cancelled',
    'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
  DET.MOVE_ORDER_LINE_ID            MO_LINE_ID,
  ASG.DELIVERY_ID                   DELIV_ID,
  TRP.TRIP_ID                       TRIP_ID,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  DET.SOURCE_LINE_ID                LINE_ID,
  DET.INVENTORY_ITEM_ID             ITEM_ID,
  ITM.SEGMENT1                      ITEM,
  nvl(DET.SRC_REQUESTED_QUANTITY,0) SRQ_Q,
  DET.SRC_REQUESTED_QUANTITY_UOM    SRQ_U,
  nvl(DET.SRC_REQUESTED_QUANTITY2,0) SRQ_Q2,
  DET.SRC_REQUESTED_QUANTITY_UOM2   SRQ_U2,
  nvl(DET.REQUESTED_QUANTITY,0)     REQ_Q,
  DET.REQUESTED_QUANTITY_UOM        REQ_U,
  nvl(DET.REQUESTED_QUANTITY2,0)    REQ_Q2,
  DET.REQUESTED_QUANTITY_UOM2       REQ_U2,
  nvl(DET.SHIPPED_QUANTITY,0)       SHP_Q,
  nvl(DET.SHIPPED_QUANTITY2,0)      SHP_Q2,
  nvl(DET.DELIVERED_QUANTITY,0)     DLV_Q,
  nvl(DET.DELIVERED_QUANTITY2,0)    DLV_Q2,
  nvl(DET.CANCELLED_QUANTITY,0)     CAN_Q,
  nvl(DET.CANCELLED_QUANTITY2,0)    CAN_Q2,
  nvl(DET.INV_INTERFACED_FLAG,'N')  INI,
  nvl(DET.OE_INTERFACED_FLAG,'N')   OMI,
  DET.SHIP_TOLERANCE_ABOVE          STA,
  DET.SHIP_TOLERANCE_BELOW          STB,
  DET.SHIP_FROM_LOCATION_ID         SH_FROM_ID,
  DET.SHIP_TO_LOCATION_ID           SH_TO_ID,
--  DET.MVT_STAT_STATUS               MVT_STATUS,
  DET.ORGANIZATION_ID               WH_ID,
  DET.SUBINVENTORY                  CUR_SUB,
  DET.ATTRIBUTE15                   ORG_SUB,
  DET.REVISION                      REV,
  DET.LOT_NUMBER                    LOT,
  DET.SERIAL_NUMBER                 SERIAL,
  DET.LOCATOR_ID                    LOC_ID,
  DET.SHIP_METHOD_CODE              SHIP_METH,
--  DET.MOVEMENT_ID                   MVMT_ID,
  DET.SPLIT_FROM_DELIVERY_DETAIL_ID SPL_DEL_DET_ID,
  DET.PICKABLE_FLAG                 PICKABLE_FLAG,
  nvl(DET.PICKED_QUANTITY,0)        PICKED_QUANTITY,
  nvl(DET.PICKED_QUANTITY2,0)       PICKED_QUANTITY2,
  DET.SHIP_SET_ID                   SHIP_SET_ID,
  DET.SHIP_MODEL_COMPLETE_FLAG      SHIP_MODEL_COMPLETE_FLAG,
  DET.TRANSACTION_TEMP_ID           TRX_TEMP_ID,
  DET.TOP_MODEL_LINE_ID             TOP_MO_LIN,
  DET.SOURCE_LINE_SET_ID            SRC_LIN_SET,
  to_char(DET.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')  cre_date,
  DET.sublot_number                 slotno,
  DET.CYCLE_COUNT_QUANTITY2         cycle_qty,
  DET.QUALITY_CONTROL_QUANTITY      QC_qty,
  DET.QUALITY_CONTROL_QUANTITY2     QC_qty2,
  DET.SCHEDULED_QUANTITY2           sch_qty2,
  to_char(DET.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS')  upd_date,
  DET.source_line_set_id            SRC_LIN_SET_ID
FROM
  OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  WSH_NEW_DELIVERIES               DEL,
  WSH_DELIVERY_LEGS                LEG,
  WSH_TRIP_STOPS                   STP,
  MTL_SYSTEM_ITEMS                 ITM,
  WSH_DELIVERY_ASSIGNMENTS         ASG,
  WSH_TRIPS                        TRP
where
  DEL.DELIVERY_ID(+)              = ASG.DELIVERY_ID AND
  ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
  DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
  STP.STOP_ID(+)                  = LEG.PICK_UP_STOP_ID AND
  STP.TRIP_ID                     = TRP.TRIP_ID(+) AND
  LEG.DELIVERY_ID(+)              = DEL.DELIVERY_ID AND
  LIN.SHIP_FROM_ORG_ID            = ITM.ORGANIZATION_ID(+) AND
  LIN.INVENTORY_ITEM_ID           = ITM.INVENTORY_ITEM_ID(+) AND
  DET.SOURCE_CODE                 = 'OE' AND
  LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
  NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
Order by
  DET.SOURCE_LINE_ID, DET.DELIVERY_DETAIL_ID;

r_uom_lin        varchar2(10);
r_qshp_lin       number;
r_sta_lin        varchar2(100);
r_mtl_trn        varchar2(100);
c_lines          number;
type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

Procedure prt_DET_head is
begin
  UTL_FILE.PUT_LINE(handle,'&sh WARNING &dh DELIVERY DETAIL_ID &dh RELEASE STATUS &dhr INI &dh OMI &dh MOVE_ORDER LINE_ID &dh ');
  UTL_FILE.PUT_LINE(handle,'DELIVERY ID &dh TRIP_ID &dh LINE &dh LINE_ID &dh ITEM_ID &dh ITEM &dh SOURCE REQ_QTY &dh ');
  UTL_FILE.PUT_LINE(handle,'SOURCE REQ_UOM &dh REQUEST QTY &dh REQUEST UOM &dh PICKED QTY &dh SHIPPED QTY &dh ');
  UTL_FILE.PUT_LINE(handle,'DELIVER QTY &dh CANCEL QTY &dh PICK FLAG &dh STA &dh STB &dh SHIP FROM_ID &dh ');
  UTL_FILE.PUT_LINE(handle,'SHIP TO_ID &dh WH_ID &dh CURRENT SUBINV &dh ORG SUBINV &dh REV &dh LOT &dh SERIAL &dh ');
  UTL_FILE.PUT_LINE(handle,'TRANSAC TEMP_ID &dh LOCATOR ID &dh SHIP METHOD &dh CREATE DATE &dh SPLIT_FROM DEL_DET_ID &dh ');
  UTL_FILE.PUT_LINE(handle,'SHIP SET &dh SHIP MOD_CMP &dh TOP_MODEL LINE_ID &dh SOURCE LINE_SET &dh DISCRETE SRC_REQ_QTY &dh ');
  UTL_FILE.PUT_LINE(handle,'DISCRETE SRC_REQ_UOM &dh DISCRETE REQ_QTY &dh DISCRETE REQ_UOM &dh DISCRETE PICK_QTY &dh ');
  UTL_FILE.PUT_LINE(handle,'DISCRETE SHP_QTY &dh DISCRETE DEL_QTY &dh DISCRETE CANC_QTY &dh ');
  UTL_FILE.PUT_LINE(handle,'CYCLE COUNT_QTY &dh QUALITY CTRL_QTY &dh ');
  UTL_FILE.PUT_LINE(handle,'QUALITY CTRL_QTY2 &dh DISCRETE SCHD_QTY &dh SUBLOT NUMBER &dh LAST UPDATE_DATE &dh');
  UTL_FILE.PUT_LINE(handle,'SRC_LIN SET_ID &eh');
end;

begin
  :r_error := 0;
  c_lines := 35;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..35
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := '    1. Source Requested Quantity is less than Shipped Quantity.';

  msg(10).descrip  := '   10. Pickable_Flag on Delivery Detail does Not Match with Mtl_Transactions_Enabled_Flag on Mtl_System_Items.';

  msg(20).descrip  := '   20. Delivery Detail have no Order Lines Associated.';
  msg(21).descrip  := '   21. Order Line associated to this Delivery Detail have INVALID status.';
  msg(24).descrip  := '   24. Delivery Detail have invalid RELEASED status.';
  msg(25).descrip  := '   25. Delivery Detail has NOT been Shipped but has been INTERFACED to OM or INV.';
  msg(26).descrip  := '   26. Delivery Detail has NOT been Shipped but associated Order Line shows Shipped Quantity.';
  msg(27).descrip  := '   27. Delivery Detail has NOT been Shipped but associated Order Line is Not on AWAITING SHIPPING status.';
  msg(28).descrip  := '   28. Delivery Detail has been Shipped, NOT OM Interfaced but associated Order Line Shipped Qty has been updated.';
  msg(29).descrip  := '   29. Delivery Detail has been Shipped, NOT OM Interfaced but associated Order Line is Not on AWAITING SHIPPING status.';
  msg(30).descrip  := '   30. Delivery Detail has been Shipped and OM Interfaced but associated Order Line Shipped Qty has NOT been updated.';
  msg(31).descrip  := '   31. Delivery Detail has been Shipped and OM Interfaced but associated Order Line still on AWAITING SHIPPING status.';
  msg(32).descrip  := '   32. Delivery Detail has been Shipped and OM interfaced, Shipped Qty on order_line does not match Delivery Detail Shp Qty (maybe a Split line).';
  msg(33).descrip  := '   33. Delivery Detail is Cancelled but has been INTERFACED to OM or INV.';
end if;

 for dd in w_del_details
 loop
   :r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   -- Check Pickable_flag against mtl_system_items.mtl_transactions_enabled_flag
   Select nvl(mtl_transactions_enabled_flag,'N')
     into r_mtl_trn
     from Mtl_System_items
    where Inventory_item_Id = dd.ITEM_ID
      and Organization_Id   = dd.WH_ID;
   if dd.PICKABLE_FLAG <> r_mtl_trn then
     :r_flag := :r_flag || '10 ';
     msg(10).flag := '1';
   end if;

   begin
     select ORDER_QUANTITY_UOM, nvl(SHIPPED_QUANTITY,0), substr(FLOW_STATUS_CODE,1,22)
       into r_uom_lin, r_qshp_lin, r_sta_lin
      from oe_order_lines_all
     where line_id = dd.LINE_ID;
     exception
       when no_data_found then
         :r_flag := :r_flag || '20 ';
         msg(20).flag := '1';
   end;
   ---
   -- Basic Verification
   --
   If  (dd.SRQ_Q*(100+nvl(dd.STA,0))/100 < dd.SHP_Q) AND (dd.SRQ_U = dd.REQ_U) then
     :r_flag := :r_flag || '1 ';
     msg(1).flag := '1';
   end if;

   if dd.REL_STATUS_C not in ('Y','R','S','B','P','C','N','D','X') then    -- invalid Released status
     :r_flag := :r_flag || '24 ';
     msg(24).flag := '1';
   end if;

   if dd.REL_STATUS_C not in ('C','D')  -- not shipped or cancelled
      and (dd.INI not in ( 'N','X')
           or dd.OMI <> 'N') then    --  but interfaced INV or OM
     :r_flag := :r_flag || '25 ';
     msg(25).flag := '1';
   end if;

   if dd.REL_STATUS_C not in ('C','D')   -- not shipped nor cancelled
      and dd.OMI = 'N'
      and r_qshp_lin > 0  then   -- not OM interfaced but Shipped qty on order line has been updated
       :r_flag := :r_flag || '26 ';
       msg(26).flag := '1';
   end if;

   if dd.REL_STATUS_C not in ('C','D')   -- not shipped nor cancelled
      and dd.OMI = 'N'
      and r_sta_lin <> 'AWAITING_SHIPPING'  then   --  not OM interfaced but order line is not Awaiting Shipping
       :r_flag := :r_flag || '27 ';
       msg(27).flag := '1';
   end if;

   -- Verifications for Shipped Delivery Details
   if dd.REL_STATUS_C = 'C' then
     if dd.OMI = 'N'
      and r_qshp_lin > 0  then   -- Shipped, not OM interfaced but order lines Qty has been updated
       :r_flag := :r_flag || '28 ';
       msg(28).flag := '1';
     end if;

     if dd.OMI = 'N'
      and r_sta_lin <> 'AWAITING_SHIPPING'  then   -- Shipped, not OM interfaced but order line not on Awaiting Shipping
       :r_flag := :r_flag || '29 ';
       msg(29).flag := '1';
     end if;

     if dd.OMI = 'Y'
      and r_qshp_lin = 0  then    -- Shipped and OM interfaced, order_line shipped Qty not updated
       :r_flag := :r_flag || '30 ';
       msg(30).flag := '1';
     end if;

     if dd.OMI = 'Y'
      and r_sta_lin = 'AWAITING_SHIPPING'  then    -- Shipped and OM interfaced, order_line status not updated
       :r_flag := :r_flag || '31 ';
       msg(31).flag := '1';
     end if;

     if dd.OMI = 'Y'
      and r_uom_lin = dd.REQ_U            -- same UOM, no conversion
      and r_qshp_lin <> dd.SHP_Q  then    -- Shipped and OM interfaced, Shipped Qty on order_line does not match Delivery Detail Shp Qty
       :r_flag := :r_flag || '32 ';
       msg(32).flag := '1';
     end if;
   end if; -- Shipped Del.Detail

   -- Verifications for Cancelled Delivery Details
   if dd.REL_STATUS_C = 'D' then
     if (dd.INI = 'Y'
      or dd.OMI = 'Y') then   -- Delivery Detail has been cancelled but INV or OM flags are set to Y
       :r_flag := :r_flag || '33 ';
       msg(33).flag := '1';
     end if;
   end if; -- Cancelled Del.Detail

end if; -- do_analysis
   ---
   if c_lines >= 35 then
     c_lines := 1;
     prt_DET_head;
    else
     c_lines := c_lines + 1;
   end if;

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#WDDERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,'<a NAME="WDD'||dd.DEL_DET_ID||'">'||n(dd.DEL_DET_ID)||'</a> &d');
   utl_file.put_line(handle,n(dd.REL_STATUS)||'&d');
   utl_file.put_line(handle,n(dd.INI)||'&d'||n(dd.OMI)||'&d');
   utl_file.put_line(handle,'<a HREF="#MO'||dd.MO_LINE_ID||'">'||n(dd.MO_LINE_ID)||'</a>'||'&d');
   utl_file.put_line(handle,'<a HREF="#D'||dd.DELIV_ID||'">'||n(dd.DELIV_ID)||'</a>'||'&d');
   utl_file.put_line(handle,'<a HREF="#T'||dd.TRIP_ID||'">'||n(dd.TRIP_ID)||'</a>'||'&d'||n(dd.LINE)||'&d');
   utl_file.put_line(handle,'<a HREF="#OOE'||dd.LINE_ID||'">'||n(dd.LINE_ID)||'</a> &d');
   utl_file.put_line(handle,n(dd.ITEM_ID)||'&d'||n(dd.ITEM)||'&d');
   utl_file.put_line(handle,n(dd.SRQ_Q)||'&d'||n(dd.SRQ_U)||'&d');
   utl_file.put_line(handle,n(dd.REQ_Q)||'&d'||n(dd.REQ_U)||'&d');
   utl_file.put_line(handle,n(dd.PICKED_QUANTITY)||'&d'||n(dd.SHP_Q)||'&d');
   utl_file.put_line(handle,n(dd.DLV_Q)||'&d'||n(dd.CAN_Q)||'&d');
   utl_file.put_line(handle,n(dd.PICKABLE_FLAG)||'&d');
   utl_file.put_line(handle,n(dd.STA)||'&d');
   utl_file.put_line(handle,n(dd.STB)||'&d'||n(dd.SH_FROM_ID)||'&d');
   utl_file.put_line(handle,n(dd.SH_TO_ID)||'&d');
   utl_file.put_line(handle,n(dd.WH_ID)||'&d'||n(dd.CUR_SUB)||'&d');
   utl_file.put_line(handle,n(dd.ORG_SUB)||'&d'||n(dd.REV)||'&d');
   utl_file.put_line(handle,n(dd.LOT)||'&d'||n(dd.SERIAL)||'&d');
   utl_file.put_line(handle,n(dd.TRX_TEMP_ID)||'&d');
   utl_file.put_line(handle,n(dd.LOC_ID)||'&d'||n(dd.SHIP_METH)||'&d');
   utl_file.put_line(handle,n(dd.CRE_DATE)||'&d');
   utl_file.put_line(handle,n(dd.SPL_DEL_DET_ID)||'&d');
   utl_file.put_line(handle,n(dd.SHIP_SET_ID)||'&d'||n(dd.SHIP_MODEL_COMPLETE_FLAG)||'&d');
   utl_file.put_line(handle,n(dd.TOP_MO_LIN)||'&d'||n(dd.SRC_LIN_SET)||'&d');
   utl_file.put_line(handle,n(dd.SRQ_Q2)||'&d'||n(dd.SRQ_U2)||'&d');
   utl_file.put_line(handle,n(dd.REQ_Q2)||'&d'||n(dd.REQ_U2)||'&d');
   utl_file.put_line(handle,n(dd.PICKED_QUANTITY2)||'&d'||n(dd.SHP_Q2)||'&d');
   utl_file.put_line(handle,n(dd.DLV_Q2)||'&d'||n(dd.CAN_Q2)||'&d');
   utl_file.put_line(handle,n(dd.cycle_qty)||'&d');
   utl_file.put_line(handle,n(dd.QC_qty)||'&d'||n(dd.QC_qty2)||'&d');
   utl_file.put_line(handle,n(dd.sch_qty2)||'&d');
   utl_file.put_line(handle,n(dd.slotno)||'&d'||n(dd.upd_date)||'&d');
   utl_file.put_line(handle,n(dd.SRC_LIN_SET_ID)||'&el');
   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="WDDERR">Warnings List:</a> &eb &f');
   for i in 1..35
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f WSH_DELIVERY_DETAILS (CONTAINERS) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DEL_DET_ID &dh REL_STATUS &dh DELIV_ID &dh TRIP_ID &dh ITEM_ID &dh ITEM &dh CF &dh CONT_NAME &dh CONT_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'FL_PER &dh GRS_WT &dh NET_WT &dh WT_UOM &dh VOL &dh VOL_UOM &dh SRQ_Q &dh REQ_Q &dh SHP_Q &dh DLV_Q &dh CAN_Q &dh ');
UTL_FILE.PUT_LINE(handle,'INI &dh OMI &dh SH_FROM_ID &dh SH_TO_ID &dh WH_ID &dh SHIP_METH &dh CREATE_D &dh FOB_CODE &dh FRT_TERMS &dh');
UTL_FILE.PUT_LINE(handle,'SPL_DEL_DET_ID &dh LPN_ID &eh');

Declare
cursor w_del_det_c is
select distinct
  DET.DELIVERY_DETAIL_ID           DEL_DET_ID,
  decode(DET.RELEASED_STATUS,
    'Y','Y=Staged',
    'R','R=Ready to Relese',
    'S','S=Rel to Warhouse',
    'B','B=Backorder',
    'P','P=Pending Inv',
    'C','C=Shipped',
    'N','N=Not Ready',
    'D','D=Cancelled',
    'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
  ASG.DELIVERY_ID                   DELIV_ID,
  TRP.TRIP_ID                       TRIP_ID,
  DET.INVENTORY_ITEM_ID             ITEM_ID,
  ITM.SEGMENT1                      ITEM,
  DET.CONTAINER_FLAG                CF,
  DET.CONTAINER_NAME                CONT_NAME,
  DET.CONTAINER_TYPE_CODE           CONT_TYPE,
  DET.FILL_PERCENT                  FL_PER,
  DET.GROSS_WEIGHT                  GRS_WT,
  DET.NET_WEIGHT                    NET_WT,
  DET.WEIGHT_UOM_CODE               WT_UOM,
  DET.VOLUME                        VOL,
  DET.VOLUME_UOM_CODE               VOL_UOM,
  nvl(DET.SRC_REQUESTED_QUANTITY,0) SRQ_Q,
  nvl(DET.REQUESTED_QUANTITY,0)     REQ_Q,
  nvl(DET.SHIPPED_QUANTITY,0)       SHP_Q,
  nvl(DET.DELIVERED_QUANTITY,0)     DLV_Q,
  nvl(DET.CANCELLED_QUANTITY,0)     CAN_Q,
  nvl(DET.INV_INTERFACED_FLAG,'N')  INI,
  nvl(DET.OE_INTERFACED_FLAG,'N')   OMI,
  DET.SHIP_FROM_LOCATION_ID         SH_FROM_ID,
  DET.SHIP_TO_LOCATION_ID           SH_TO_ID,
  DET.ORGANIZATION_ID               WH_ID,
  DET.SHIP_METHOD_CODE              SHIP_METH,
  to_char(DET.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CRE_DT,
  DET.FOB_CODE                      FOB_CODE,
  DET.FREIGHT_TERMS_CODE            FRT_TERMS,
  --DET.MOVEMENT_ID                   MVMT_ID,
  DET.SPLIT_FROM_DELIVERY_DETAIL_ID SPL_DEL_DET_ID,
  DET.LPN_ID                        LPN_ID
  --ENABLE_TIMESTAMP ,DET.ORG_ID                                        DEL_ORG_ID
  --ENABLE_TIMESTAMP ,to_char(DET.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
  --ENABLE_TIMESTAMP ,to_char(DET.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
  --ENABLE_TIMESTAMP ,DET.REQUEST_ID                                    REQUEST_ID
FROM
  --OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  --WSH_NEW_DELIVERIES               DEL,
  WSH_DELIVERY_LEGS                LEG,
  WSH_TRIP_STOPS                   STP,
  MTL_SYSTEM_ITEMS                 ITM,
  WSH_DELIVERY_ASSIGNMENTS         ASG,
  WSH_TRIPS                        TRP
where
  --DEL.DELIVERY_ID(+)              = ASG.DELIVERY_ID AND
  ASG.DELIVERY_DETAIL_ID          = DET.DELIVERY_DETAIL_ID AND
  DET.ORGANIZATION_ID             = ITM.ORGANIZATION_ID(+) AND
  DET.INVENTORY_ITEM_ID           = ITM.INVENTORY_ITEM_ID(+) AND
  --DET.SOURCE_LINE_ID              = LIN.LINE_ID AND
  STP.STOP_ID(+)                  = LEG.PICK_UP_STOP_ID AND
  STP.TRIP_ID                     = TRP.TRIP_ID(+) AND
  LEG.DELIVERY_ID(+)              = ASG.DELIVERY_ID AND
  --LIN.SHIP_FROM_ORG_ID            = ITM.ORGANIZATION_ID(+) AND
  --LIN.INVENTORY_ITEM_ID           = ITM.INVENTORY_ITEM_ID(+) AND
  DET.SOURCE_CODE                 = 'WSH' AND
  ASG.DELIVERY_ID IN (select ASG1.DELIVERY_ID
                  from   WSH_DELIVERY_ASSIGNMENTS ASG1,
                         WSH_DELIVERY_DETAILS     DET1,
                         OE_ORDER_LINES_ALL       LIN1
                  where DET1.SOURCE_LINE_ID = LIN1.LINE_ID AND
                        DET1.DELIVERY_DETAIL_ID = ASG1.DELIVERY_DETAIL_ID AND
                        DET1.SOURCE_CODE = 'OE' AND
  LIN1.HEADER_ID                   = nvl('&header_id_selected',:v_header_id) AND
  NVL('&line_id_selected',0)    in (0,LIN1.LINE_ID,
                                         LIN1.TOP_MODEL_LINE_ID,
                                         LIN1.ATO_LINE_ID,
                                         LIN1.LINK_TO_LINE_ID,
                                         LIN1.REFERENCE_LINE_ID,
                                         LIN1.SERVICE_REFERENCE_LINE_ID));

begin
 for wddc in w_del_det_c
 loop
   utl_file.put_line(handle,'&sld'||n(wddc.DEL_DET_ID)||'&d'||n(wddc.REL_STATUS)||'&d');
   utl_file.put_line(handle,n(wddc.DELIV_ID)||'&d'||n(wddc.TRIP_ID)||'&d');
   utl_file.put_line(handle,n(wddc.ITEM_ID)||'&d'||n(wddc.ITEM)||'&d');
   utl_file.put_line(handle,n(wddc.CF)||'&d'||n(wddc.CONT_NAME)||'&d');
   utl_file.put_line(handle,n(wddc.CONT_TYPE)||'&d'||n(wddc.FL_PER)||'&d');
   utl_file.put_line(handle,n(wddc.GRS_WT)||'&d'||n(wddc.NET_WT)||'&d');
   utl_file.put_line(handle,n(wddc.WT_UOM)||'&d'||n(wddc.VOL)||'&d');
   utl_file.put_line(handle,n(wddc.VOL_UOM)||'&d'||n(wddc.SRQ_Q)||'&d');
   utl_file.put_line(handle,n(wddc.REQ_Q)||'&d'||n(wddc.SHP_Q)||'&d');
   utl_file.put_line(handle,n(wddc.DLV_Q)||'&d'||n(wddc.CAN_Q)||'&d');
   utl_file.put_line(handle,n(wddc.INI)||'&d'||n(wddc.OMI)||'&d');
   utl_file.put_line(handle,n(wddc.SH_FROM_ID)||'&d'||n(wddc.SH_TO_ID)||'&d');
   utl_file.put_line(handle,n(wddc.WH_ID)||'&d'||n(wddc.SHIP_METH)||'&d');
   utl_file.put_line(handle,n(wddc.CRE_DT)||'&d'||n(wddc.FOB_CODE)||'&d');
   utl_file.put_line(handle,n(wddc.FRT_TERMS)||'&d'||n(wddc.SPL_DEL_DET_ID)||'&d');
   utl_file.put_line(handle,n(wddc.LPN_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_SERIAL_NUMBERS"> WSH_SERIAL_NUMBERS (WSN)</a> <a HREF="#WSN">Column Definitions</a> &f');

Declare
r_exist   number;

begin

  select count(*)
    into r_exist
    from all_tables
   where table_name = 'WSH_SERIAL_NUMBERS';
  if r_exist = 0 then
    utl_file.put_line(handle,'&et Table WSH_SERIAL_NUMBER is not present on this instance (introduced on 11.5.9): &f');
   else
    UTL_FILE.PUT_LINE(handle,'&std &sh ERR_FLAG &dh DEL_DET_ID &dh REL_STATUS &dh LINE &dh LINE_ID &dh ITEM_ID &dh SRQ_Q &dh SRQ_U &dh REQ_Q &dh');
    UTL_FILE.PUT_LINE(handle,'REQ_U &dh PIK_Q &dh SHP_Q &dh DLV_Q &dh CAN_Q &dh INI &dh OMI &dh STA &dh STB &dh WH_ID &dh CUR_SUB &dh');
    UTL_FILE.PUT_LINE(handle,'ORG_SUB &dh REV &dh LOT &dh SERIAL &dh LOC_ID &dh SPL_DEL_DET_ID &dh FROM_SERIAL &dh TO_SERIAL &dh SERIAL_QTY &eh');
 end if;

end;

Declare cursor w_serial_n is
select distinct
  DET.DELIVERY_DETAIL_ID           DEL_DET_ID,
  DET.RELEASED_STATUS              REL_STATUS_C,
  decode(DET.RELEASED_STATUS,
    'Y','Y=Staged',
    'R','R=Ready to Release',
    'S','S=Rel to Warhouse',
    'B','B=Backorder',
    'P','P=Pending Inv',
    'C','C=Shipped',
    'N','N=Not Ready',
    'D','D=Cancelled',
    'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  DET.SOURCE_LINE_ID                LINE_ID,
  DET.INVENTORY_ITEM_ID             ITEM_ID,
  nvl(DET.SRC_REQUESTED_QUANTITY,0) SRQ_Q,
  SRC_REQUESTED_QUANTITY_UOM        SRQ_U,
  nvl(DET.REQUESTED_QUANTITY,0)     REQ_Q,
  SRC_REQUESTED_QUANTITY_UOM        REQ_U,
  nvl(DET.SHIPPED_QUANTITY,0)       SHP_Q,
  nvl(DET.DELIVERED_QUANTITY,0)     DLV_Q,
  nvl(DET.CANCELLED_QUANTITY,0)     CAN_Q,
  nvl(DET.INV_INTERFACED_FLAG,'N')  INI,
  nvl(DET.OE_INTERFACED_FLAG,'N')   OMI,
  DET.SHIP_TOLERANCE_ABOVE          STA,
  DET.SHIP_TOLERANCE_BELOW          STB,
  DET.ORGANIZATION_ID               WH_ID,
  DET.SUBINVENTORY                  CUR_SUB,
  DET.ATTRIBUTE15                   ORG_SUB,
  DET.REVISION                      REV,
  DET.LOT_NUMBER                    LOT,
  DET.SERIAL_NUMBER                 SERIAL,
  DET.LOCATOR_ID                    LOC_ID,
  DET.SPLIT_FROM_DELIVERY_DETAIL_ID SPL_DEL_DET_ID,
  DET.PICKED_QUANTITY               PICKED_QUANTITY,
  substr(wsn.fm_serial_number,1,15)  FROM_SERIAL,
  substr(wsn.to_serial_number,1,15)  TO_SERIAL,
  wsn.quantity                      WSN_QTY,
  to_char(wsn.creation_date,'DD-MON-RR_HH24:MI:SS') WSN_CRE_DATE
FROM
  OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  WSH_SERIAL_NUMBERS               WSN
where DET.DELIVERY_DETAIL_ID          = WSN.DELIVERY_DETAIL_ID
  and DET.SOURCE_LINE_ID              = LIN.LINE_ID
  and DET.SOURCE_CODE                 = 'OE'
  and LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
  and (UPPER(nvl('&det_cnt','Y')) = 'Y' or rownum <= 10);

r_uom_lin        varchar2(10);
r_qshp_lin       number;
r_sta_lin        varchar2(100);
r_mtl_trn        varchar2(100);
type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
  :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..1
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := '    1. No verifications yet.';
end if;

 for dd in w_serial_n
 loop
   :r_flag := '';

-- if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   -- Include verifications here
--   Select nvl(mtl_transactions_enabled_flag,'N')
--     into r_mtl_trn
--     from Mtl_System_items
--    where Inventory_item_Id = dd.ITEM_ID
--      and Organization_Id   = dd.WH_ID;
--   if dd.PICKABLE_FLAG <> r_mtl_trn then
--     :r_flag := :r_flag || '1 ';
--     msg(1).flag := '1';
--   end if;

-- end if; -- do_analysis
   ---

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#WSNERR">'||n(:r_flag)||'</a> &eb &d ');
   utl_file.put_line(handle,n(dd.DEL_DET_ID)||' &d ');
   utl_file.put_line(handle,n(dd.REL_STATUS)||' &d '||n(dd.LINE)||' &d ');
   utl_file.put_line(handle,'<a HREF="#'||dd.LINE_ID||'">'||n(dd.LINE_ID)||'</a> &d ');
   utl_file.put_line(handle,n(dd.ITEM_ID)||' &d');
   utl_file.put_line(handle,n(dd.SRQ_Q)||'&d'||n(dd.SRQ_U)||' &d ');
   utl_file.put_line(handle,n(dd.REQ_Q)||'&d'||n(dd.REQ_U)||' &d ');
   utl_file.put_line(handle,n(dd.PICKED_QUANTITY)||' &d');
   utl_file.put_line(handle,n(dd.SHP_Q)||'&d'||n(dd.DLV_Q)||' &d');
   utl_file.put_line(handle,n(dd.CAN_Q)||'&d'||n(dd.INI)||' &d');
   utl_file.put_line(handle,n(dd.OMI)||'&d'||n(dd.STA)||' &d');
   utl_file.put_line(handle,n(dd.STB)||'&d');
   utl_file.put_line(handle,n(dd.WH_ID)||'&d'||n(dd.CUR_SUB)||' &d');
   utl_file.put_line(handle,n(dd.ORG_SUB)||'&d'||n(dd.REV)||' &d');
   utl_file.put_line(handle,n(dd.LOT)||'&d'||n(dd.SERIAL)||' &d');
   utl_file.put_line(handle,n(dd.LOC_ID)||'&d'||n(dd.SPL_DEL_DET_ID)||' &d');
   utl_file.put_line(handle,n(dd.FROM_SERIAL)||'&d'||n(dd.TO_SERIAL)||' &d');
   utl_file.put_line(handle,n(dd.WSN_QTY)||'&d'||n(dd.WSN_CRE_DATE)||' &el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="WSNERR">Error List:</a> &eb &f');
   for i in 1..1
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f WSH_FREIGHT_COSTS (CST) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh FRT_CST_ID &dh FRT_NAME &dh FRT_TYPE &dh FRT_LEVEL &dh QTY &dh UNIT_AMT &dh TOT_AMT &dh ENTITY_ID &eh');

Declare
cursor w_fre_cst is
select distinct
wfc.FREIGHT_COST_ID         FRT_CST_ID,
wfc.FREIGHT_COST_TYPE       FRT_NAME,
lkp.Meaning                 FRT_TYPE,
'DELIV_DETAIL'              FRT_LEVEL,
wfc.QUANTITY                QTY,
wfc.UNIT_AMOUNT             UNIT_AMT,
wfc.TOTAL_AMOUNT            TOT_AMT,
wfc.DELIVERY_DETAIL_ID      ENTITY_ID
from wsh_freight_costs_v              wfc,
     wsh_freight_cost_types           wft,
     fnd_lookup_values                lkp,
     OE_ORDER_LINES                   LIN,
     WSH_DELIVERY_DETAILS             DET
 WHERE
            wfc.freight_cost_type_id      = wft.freight_cost_type_id AND
            wft.freight_cost_type_code    = lkp.lookup_code AND
            lkp.lookup_type               = 'FREIGHT_COST_TYPE' AND
            DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
            LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
            NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID) AND
            WFC.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID
UNION ALL
select distinct
wfc.FREIGHT_COST_ID         FRT_CST_ID,
wfc.FREIGHT_COST_TYPE       FRT_NAME,
lkp.Meaning                 FRT_TYPE,
'DELIVERY'                  FRT_LEVEL,
wfc.QUANTITY                QTY,
wfc.UNIT_AMOUNT             UNIT_AMT,
wfc.TOTAL_AMOUNT            TOT_AMT,
wfc.DELIVERY_ID             ENTITY_ID
from wsh_freight_costs_v              wfc,
     wsh_freight_cost_types           wft,
     fnd_lookup_values                lkp,
     OE_ORDER_LINES                   LIN,
     WSH_DELIVERY_DETAILS             DET,
     --WSH_NEW_DELIVERIES               DEL,
     --WSH_DELIVERY_LEGS                LEG,
     --WSH_TRIP_STOPS                   STP,
     WSH_DELIVERY_ASSIGNMENTS         ASG
 WHERE
            wfc.freight_cost_type_id      = wft.freight_cost_type_id AND
            wft.freight_cost_type_code    = lkp.lookup_code AND
            lkp.lookup_type               = 'FREIGHT_COST_TYPE' AND
            --DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
            ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
            DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
           -- STP.STOP_ID                   = LEG.PICK_UP_STOP_ID AND
           -- LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
            LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
            NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID) AND
            WFC.DELIVERY_ID              = ASG.DELIVERY_ID AND
            WFC.DELIVERY_DETAIL_ID       IS NULL
UNION ALL
select distinct
wfc.FREIGHT_COST_ID         FRT_CST_ID,
wfc.FREIGHT_COST_TYPE       FRT_NAME,
lkp.Meaning                 FRT_TYPE,
'LEG'                       FRT_LEVEL,
wfc.QUANTITY                QTY,
wfc.UNIT_AMOUNT             UNIT_AMT,
wfc.TOTAL_AMOUNT            TOT_AMT,
wfc.DELIVERY_LEG_ID         ENTITY_ID
from wsh_freight_costs_v              wfc,
     wsh_freight_cost_types           wft,
     fnd_lookup_values                lkp,
     OE_ORDER_LINES                   LIN,
     WSH_DELIVERY_DETAILS             DET,
     WSH_NEW_DELIVERIES               DEL,
     WSH_DELIVERY_LEGS                LEG,
     --WSH_TRIP_STOPS                   STP,
     WSH_DELIVERY_ASSIGNMENTS         ASG
 WHERE
            wfc.freight_cost_type_id      = wft.freight_cost_type_id AND
            wft.freight_cost_type_code    = lkp.lookup_code AND
            lkp.lookup_type               = 'FREIGHT_COST_TYPE' AND
            DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
            ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
            DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
           -- STP.STOP_ID                   = LEG.PICK_UP_STOP_ID AND
            LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
            LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
            NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID) AND
            WFC.DELIVERY_LEG_ID          = LEG.DELIVERY_LEG_ID AND
            WFC.DELIVERY_DETAIL_ID       IS NULL AND
            WFC.DELIVERY_ID              IS NULL
UNION ALL
select distinct
wfc.FREIGHT_COST_ID         FRT_CST_ID,
wfc.FREIGHT_COST_TYPE       FRT_NAME,
lkp.Meaning                 FRT_TYPE,
'STOP'                      FRT_LEVEL,
wfc.QUANTITY                QTY,
wfc.UNIT_AMOUNT             UNIT_AMT,
wfc.TOTAL_AMOUNT            TOT_AMT,
wfc.STOP_ID                 ENTITY_ID
from wsh_freight_costs_v              wfc,
     wsh_freight_cost_types           wft,
     fnd_lookup_values                lkp,
     OE_ORDER_LINES                   LIN,
     WSH_DELIVERY_DETAILS             DET,
     WSH_NEW_DELIVERIES               DEL,
     WSH_DELIVERY_LEGS                LEG,
     WSH_TRIP_STOPS                   STP,
     WSH_DELIVERY_ASSIGNMENTS         ASG
 WHERE
            wfc.freight_cost_type_id      = wft.freight_cost_type_id AND
            wft.freight_cost_type_code    = lkp.lookup_code AND
            lkp.lookup_type               = 'FREIGHT_COST_TYPE' AND
            DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
            ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
            DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
            STP.STOP_ID                   = LEG.PICK_UP_STOP_ID AND
            LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
            LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
            NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID) AND
            WFC.STOP_ID                  = STP.STOP_ID AND
            WFC.DELIVERY_DETAIL_ID       IS NULL AND
            WFC.DELIVERY_ID              IS NULL AND
            WFC.DELIVERY_LEG_ID          IS NULL
UNION ALL
select distinct
wfc.FREIGHT_COST_ID         FRT_CST_ID,
wfc.FREIGHT_COST_TYPE       FRT_NAME,
lkp.Meaning                 FRT_TYPE,
'TRIP'                      FRT_LEVEL,
wfc.QUANTITY                QTY,
wfc.UNIT_AMOUNT             UNIT_AMT,
wfc.TOTAL_AMOUNT            TOT_AMT,
wfc.TRIP_ID                 ENTITY_ID
from wsh_freight_costs_v              wfc,
     wsh_freight_cost_types           wft,
     fnd_lookup_values                lkp,
     OE_ORDER_LINES                   LIN,
     WSH_DELIVERY_DETAILS             DET,
     WSH_NEW_DELIVERIES               DEL,
     WSH_DELIVERY_LEGS                LEG,
     WSH_TRIP_STOPS                   STP,
     WSH_DELIVERY_ASSIGNMENTS         ASG
 WHERE
            wfc.freight_cost_type_id      = wft.freight_cost_type_id AND
            wft.freight_cost_type_code    = lkp.lookup_code AND
            lkp.lookup_type               = 'FREIGHT_COST_TYPE' AND
            DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
            ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
            DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
            STP.STOP_ID                   = LEG.PICK_UP_STOP_ID AND
            LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
            LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
            NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID) AND
            WFC.TRIP_ID                  = STP.TRIP_ID AND
            WFC.DELIVERY_DETAIL_ID       IS NULL AND
            WFC.DELIVERY_ID              IS NULL AND
            WFC.STOP_ID                  IS NULL AND
            WFC.DELIVERY_LEG_ID          IS NULL;

begin
 for wfc in w_fre_cst
 loop
   utl_file.put_line(handle,'&sld'||n(wfc.FRT_CST_ID)||'&d'||n(wfc.FRT_NAME)||'&d');
   utl_file.put_line(handle,n(wfc.FRT_TYPE)||'&d'||n(wfc.FRT_LEVEL)||'&d');
   utl_file.put_line(handle,n(wfc.QTY)||'&d'||n(wfc.UNIT_AMT)||'&d');
   utl_file.put_line(handle,n(wfc.TOT_AMT)||'&d'||n(wfc.ENTITY_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- Output for table WSH_EXCEPTIONS being commented by Dev. request to improve performance
--
--UTL_FILE.PUT_LINE(handle,'&f &f WSH_EXCEPTIONS (EXC) &f
--UTL_FILE.PUT_LINE(handle,'NOTE: THESE ARE BASED STRICTLY ON REQUEST_ID, SO MESSAGES MAY NOT APPLY TO THIS SHIPPING TRANSACTION &f
--
--column EXCEPT_NAME   format a20;
--column EXC_STATUS    format a18;
--column ERROR_MSG     format a30;
--
--UTL_FILE.PUT_LINE(handle,'&std &sh EXCEPT_ID &dh EXCEPT_NAME &dh SEV &dh EXC_STATUS &dh TRIP_ID &dh STOP_ID &dh DELIV_ID &dh DEL_DET_ID &dh
--UTL_FILE.PUT_LINE(handle,'ERROR_MSG &dh REQUEST_ID &dh MESSAGE &eh
--
--select distinct   '&sld',
--     EXCEPTION_ID             EXCEPT_ID,
--     EXCEPTION_NAME           EXCEPT_NAME,
--     SEVERITY                 SEV,
--     STATUS                   EXC_STATUS,
--     TRIP_ID                  TRIP_ID,
--     TRIP_STOP_ID             STOP_ID,
--     DELIVERY_ID              DELIV_ID,
--     DELIVERY_DETAIL_ID       DEL_DET_ID,
--     ERROR_MESSAGE            ERROR_MSG,
--     REQUEST_ID               REQUEST_ID,
--     MESSAGE                  MESSAGE,'&el'
--FROM WSH_EXCEPTIONS   EXC
--where STATUS <> 'NO_ACTION_REQUIRED'
--  and EXC.REQUEST_ID IN (
--     select DET.request_id
--     from OE_ORDER_LINES                   LIN,
--          WSH_DELIVERY_DETAILS             DET
--      WHERE
--                 DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
--                 LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
--                 NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
--                                              LIN.TOP_MODEL_LINE_ID,
--                                              LIN.ATO_LINE_ID,
--                                              LIN.LINK_TO_LINE_ID,
--                                              LIN.REFERENCE_LINE_ID,
--                                              LIN.SERVICE_REFERENCE_LINE_ID)
--     UNION ALL
--     select ASG.REQUEST_ID
--     from OE_ORDER_LINES                   LIN,
--          WSH_DELIVERY_DETAILS             DET,
--          WSH_DELIVERY_ASSIGNMENTS         ASG
--      WHERE
--                 ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
--                 DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
--                 LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
--                 NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
--                                              LIN.TOP_MODEL_LINE_ID,
--                                              LIN.ATO_LINE_ID,
--                                              LIN.LINK_TO_LINE_ID,
--                                              LIN.REFERENCE_LINE_ID,
--                                              LIN.SERVICE_REFERENCE_LINE_ID)
--     UNION ALL
--     select LEG.REQUEST_ID
--     from OE_ORDER_LINES                   LIN,
--          WSH_DELIVERY_DETAILS             DET,
--          WSH_NEW_DELIVERIES               DEL,
--          WSH_DELIVERY_LEGS                LEG,
--          WSH_DELIVERY_ASSIGNMENTS         ASG
--      WHERE
--                 DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
--                 ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
--                 DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
--                 LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
--                 LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
--                 NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
--                                              LIN.TOP_MODEL_LINE_ID,
--                                              LIN.ATO_LINE_ID,
--                                              LIN.LINK_TO_LINE_ID,
--                                         LIN.REFERENCE_LINE_ID,
--                                              LIN.SERVICE_REFERENCE_LINE_ID)
--     UNION ALL
--     select STP.REQUEST_ID
--     from OE_ORDER_LINES                   LIN,
--          WSH_DELIVERY_DETAILS             DET,
--          WSH_NEW_DELIVERIES               DEL,          WSH_DELIVERY_LEGS                LEG,
--          WSH_TRIP_STOPS                   STP,
--          WSH_DELIVERY_ASSIGNMENTS         ASG
--      WHERE      DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
--                 ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
--                 DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
--                 STP.STOP_ID                   = LEG.PICK_UP_STOP_ID AND
--                 LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
--                 LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
--                 NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
--                                              LIN.TOP_MODEL_LINE_ID,
--                                              LIN.ATO_LINE_ID,
--                                              LIN.LINK_TO_LINE_ID,
--                                              LIN.REFERENCE_LINE_ID,
--                                              LIN.SERVICE_REFERENCE_LINE_ID)
--     UNION ALL
--     select TRP.REQUEST_ID
--     from OE_ORDER_LINES                   LIN,
--          WSH_DELIVERY_DETAILS             DET,
--          WSH_NEW_DELIVERIES               DEL,
--          WSH_DELIVERY_LEGS                LEG,
--          WSH_TRIP_STOPS                   STP,
--          WSH_TRIPS                        TRP,
--          WSH_DELIVERY_ASSIGNMENTS         ASG
--      WHERE      DEL.DELIVERY_ID               = ASG.DELIVERY_ID AND
--                 ASG.DELIVERY_DETAIL_ID        = DET.DELIVERY_DETAIL_ID AND
--                 DET.SOURCE_LINE_ID            = LIN.LINE_ID AND
--                 STP.STOP_ID                   = LEG.PICK_UP_STOP_ID AND
--                 TRP.TRIP_ID                   = STP.TRIP_ID AND
--                 LEG.DELIVERY_ID               = DEL.DELIVERY_ID AND
--                 LIN.HEADER_ID                 = nvl('&header_id_selected',:v_header_id) AND
--                 NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
--                                              LIN.TOP_MODEL_LINE_ID,
--                                              LIN.ATO_LINE_ID,
--                                              LIN.LINK_TO_LINE_ID,
--                                              LIN.REFERENCE_LINE_ID,
--                                              LIN.SERVICE_REFERENCE_LINE_ID)
--);
--

end if; -- :v_head_only

   UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
  handle UTL_FILE.FILE_TYPE;
  dirname varchar2(1000);
  text    varchar2(1000);

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
-- Append to output file
  handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
  UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

If :v_head_only = 'N' then 

if UPPER(nvl('&prt_wms','N')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_RULES"> WMS_RULES </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh CREATE DATE &dh ORG_ID &dh TYPE CODE &dh NAME &dh ');
UTL_FILE.PUT_LINE(handle,'DESCRIPTION &dh QTY_FUNCT PARAM &dh ENABLED FLAG &dh USER FLAG &dh TYPE HRD_ID &dh ');
UTL_FILE.PUT_LINE(handle,'RULE WEIGHT &dh ATTR CATEG &dh MIN_PICK TASK &dh ALLOCAT MODE &dh WMS_ENABLED FLAG &eh ');

Declare cursor wms_r is
Select
       WMSR.RULE_ID             ruleid,
       WMSR.CREATION_DATE       credt,
       WMSR.ORGANIZATION_ID     orgid,
       WMSR.TYPE_CODE           typc,
       WMSR.NAME                nam,
       WMSR.DESCRIPTION         des,
       WMSR.QTY_FUNCTION_PARAMETER_ID qty_funct,
       WMSR.ENABLED_FLAG        enabf,
       WMSR.USER_DEFINED_FLAG   userf,
       WMSR.TYPE_HDR_ID         typh,
       WMSR.RULE_WEIGHT         rulew,
       WMSR.ATTRIBUTE_CATEGORY  attrcat,
       WMSR.MIN_PICK_TASKS_FLAG minpick,
       WMSR.ALLOCATION_MODE_ID  allom,
       WMSR.WMS_ENABLED_FLAG    wmsf
  FROM WMS_RULES                WMSR,
       WSH_DELIVERY_DETAILS     DET,
       OE_ORDER_LINES           LIN
where DET.SOURCE_LINE_ID      = LIN.LINE_ID
  and DET.SOURCE_CODE         = 'OE'
  and WMSR.ORGANIZATION_ID    = DET.ORGANIZATION_ID
  and DET.SOURCE_HEADER_ID    = nvl('&header_id_selected',:v_header_id);

begin

 for wms in wms_r
 loop

  if UPPER(nvl('&do_analysis','Y')) = 'Y' then
    null;
  end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
   utl_file.put_line(handle,n(wms.credt)||' &d ');
   utl_file.put_line(handle,n(wms.orgid)||' &d '||n(wms.typc)||' &d ');
   utl_file.put_line(handle,n(wms.nam)||' &d '||n(wms.des)||' &d ');
   utl_file.put_line(handle,n(wms.qty_funct)||' &d '||n(wms.enabf)||' &d ');
   utl_file.put_line(handle,n(wms.userf)||' &d '||n(wms.typh)||' &d ');
   utl_file.put_line(handle,n(wms.rulew)||' &d '||n(wms.attrcat)||' &d ');
   utl_file.put_line(handle,n(wms.minpick)||' &d '||n(wms.allom)||' &d ');
   utl_file.put_line(handle,n(wms.wmsf)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_RULE_CONSISTENCIES"> WMS_RULE_CONSISTENCIES </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh CONSISTENCY ID &dh PARAMETER ID &dh CREATE DATE &dh ATTR CATEG &eh ');

Declare cursor wms_rc is
Select WRC.RULE_ID              ruleid,
       WRC.CONSISTENCY_ID       consid,
       WRC.PARAMETER_ID         paramid,
       WRC.CREATION_DATE        credt,
       WRC.ATTRIBUTE_CATEGORY   attrcat
  FROM WMS_RULE_CONSISTENCIES   WRC,
       WMS_RULES                WMSR,
       WSH_DELIVERY_DETAILS     DET,
       OE_ORDER_LINES           LIN
 WHERE WRC.RULE_ID             = WMSR.RULE_ID
   and DET.SOURCE_LINE_ID      = LIN.LINE_ID
   and DET.SOURCE_CODE         = 'OE'
   and WMSR.ORGANIZATION_ID    = DET.ORGANIZATION_ID
   and DET.SOURCE_HEADER_ID    = nvl('&header_id_selected',:v_header_id)
 ORDER BY 1;

begin

 for wms in wms_rc
 loop

  if UPPER(nvl('&do_analysis','Y')) = 'Y' then
    null;
  end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
   utl_file.put_line(handle,n(wms.consid)||' &d '||n(wms.paramid)||' &d ');
   utl_file.put_line(handle,n(wms.credt)||' &d '||n(wms.attrcat)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_RESTRICTIONS"> WMS_RESTRICTIONS </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh SEQUENCE NUMBER &dh CREATE DATE &dh PARAMETER ID &dh ');
UTL_FILE.PUT_LINE(handle,'OPERAND CODE &dh OPERAND TYPE &dh OPER_NUMBER CONSTANT &dh OPER_CHAR CONSTANT &dh ');
UTL_FILE.PUT_LINE(handle,'OPER_DATE CONSTANT &dh OPER PARAM_ID &dh OPER EXPRESSION &dh OPER_FLEX VALUE_SET &dh ');
UTL_FILE.PUT_LINE(handle,'LOGICAL OPER_CODE &dh BRACKET OPEN &dh BRACKET CLOSE &dh ATTR CATEG &eh ');

Declare cursor wms_res is
Select WRES.RULE_ID                      ruleid,
       WRES.SEQUENCE_NUMBER              seqno,
       WRES.CREATION_DATE                credt,
       WRES.PARAMETER_ID                 paramid,
       WRES.OPERATOR_CODE                opcode,
       WRES.OPERAND_TYPE_CODE            optype,
       WRES.OPERAND_CONSTANT_NUMBER      opnum,
       WRES.OPERAND_CONSTANT_CHARACTER   opchar,
       WRES.OPERAND_CONSTANT_DATE        opdate,
       WRES.OPERAND_PARAMETER_ID         oppar,
       WRES.OPERAND_EXPRESSION           opexp,
       WRES.OPERAND_FLEX_VALUE_SET_ID    opfvs,
       WRES.LOGICAL_OPERATOR_CODE        logop,
       WRES.BRACKET_OPEN                 braop,
       WRES.BRACKET_CLOSE                bracl,
       WRES.ATTRIBUTE_CATEGORY           attrcat
  FROM WMS_RESTRICTIONS         WRES,
       WMS_RULES                WMSR,
       WSH_DELIVERY_DETAILS     DET,
       OE_ORDER_LINES           LIN
 WHERE WRES.RULE_ID            = WMSR.RULE_ID
   and DET.SOURCE_LINE_ID      = LIN.LINE_ID
   and DET.SOURCE_CODE         = 'OE'
   and WMSR.ORGANIZATION_ID    = DET.ORGANIZATION_ID
   and DET.SOURCE_HEADER_ID    = nvl('&header_id_selected',:v_header_id)
 ORDER BY 1;

begin

 for wms in wms_res
 loop

  if UPPER(nvl('&do_analysis','Y')) = 'Y' then
    null;
  end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
   utl_file.put_line(handle,n(wms.seqno)||' &d '||n(wms.credt)||' &d ');
   utl_file.put_line(handle,n(wms.paramid)||' &d '||n(wms.opcode)||' &d ');
   utl_file.put_line(handle,n(wms.optype)||' &d '||n(wms.opnum)||' &d ');
   utl_file.put_line(handle,n(wms.opchar)||' &d '||n(wms.opdate)||' &d ');
   utl_file.put_line(handle,n(wms.oppar)||' &d '||n(wms.opexp)||' &d ');
   utl_file.put_line(handle,n(wms.opfvs)||' &d '||n(wms.logop)||' &d ');
   utl_file.put_line(handle,n(wms.braop)||' &d '||n(wms.bracl)||' &d ');
   utl_file.put_line(handle,n(wms.attrcat)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_SORT_CRITERIA"> WMS_SORT_CRITERIA </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh SEQUENCE NUMBER &dh CREATE DATE &dh PARAMETER ID &dh ');
UTL_FILE.PUT_LINE(handle,'OPERAND CODE &dh ATTR CATEG &eh ');

Declare cursor wms_sc is
Select WSOC.RULE_ID             ruleid,
       WSOC.SEQUENCE_NUMBER     seqno,
       WSOC.CREATION_DATE       credt,
       WSOC.PARAMETER_ID        paramid,
       WSOC.ORDER_CODE          opcode,
       WSOC.ATTRIBUTE_CATEGORY  attrcat
  FROM WMS_SORT_CRITERIA        WSOC,
       WMS_RULES                WMSR,
       WSH_DELIVERY_DETAILS     DET,
       OE_ORDER_LINES           LIN
 WHERE WSOC.RULE_ID            = WMSR.RULE_ID
   and DET.SOURCE_LINE_ID      = LIN.LINE_ID
   and DET.SOURCE_CODE         = 'OE'
   and WMSR.ORGANIZATION_ID    = DET.ORGANIZATION_ID
   and DET.SOURCE_HEADER_ID    = nvl('&header_id_selected',:v_header_id)
 ORDER BY 1;

begin

 for wms in wms_sc
 loop

  if UPPER(nvl('&do_analysis','Y')) = 'Y' then
    null;
  end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
   utl_file.put_line(handle,n(wms.seqno)||' &d '||n(wms.credt)||' &d ');
   utl_file.put_line(handle,n(wms.paramid)||' &d '||n(wms.opcode)||' &d ');
   utl_file.put_line(handle,n(wms.attrcat)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_SELECTION_CRITERIA_TXN_V"> WMS_SELECTION_CRITERIA_TXN_V </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh SEQUENCE NUMBER &dh RULE TYPE_CODE &dh RULE TYPE &dh RETURN TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'RETURN TYPE_ID &dh RETURN TYPE_NAME &dh ENABLED FLAG &dh DATE TYPE_COD &dh ');
UTL_FILE.PUT_LINE(handle,'DATE TYPE_FROM &dh DATE TYPE_TO &dh DATE_TYPE LOOKUP_TYPE &dh EFFECTIVE FROM &dh ');
UTL_FILE.PUT_LINE(handle,'EFFECTIVE TO &dh FROM ORGANIZATION_ID &dh FROM ORGANIZATION_CODE &dh FROM SUBINVENT_NAME &dh ');
UTL_FILE.PUT_LINE(handle,'TO ORGANIZATION_ID &dh TO ORGANIZATION_CODE &dh TO SUBINVENT_NAME &dh CUSTOMER ID &dh ');
UTL_FILE.PUT_LINE(handle,'CUSTOMER NAME &dh FREIGHT CODE &dh FREIGHT CODE_NAME &dh INVENTORY ITEM_ID &dh ITEM &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM TYPE &dh ITEM TYPE_NAME &dh ASSIGNMENT GROUP_ID &dh ABC CLASS_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ABC_GROUP CLASS_NAME &dh CATEGORY SET_ID &dh CATEGORY ID &dh CATEGORY SET_NAME &dh ');
UTL_FILE.PUT_LINE(handle,'ORDER TYPE_ID &dh ORDER TYPE_NAME &dh VENDOR ID &dh VENDOR NAME &dh PROJECT ID &dh ');
UTL_FILE.PUT_LINE(handle,'PROJECT NAME &dh TASK ID &dh TASK NAME &dh USER ID &dh USER NAME &dh TRANSACTION ACTION_ID &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSACTION ACTION_NAME &dh REASON ID &dh REASON NAME &dh TRANSACTION SOURCE_TYPE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSACTION_SOURCE TYPE_NAME &dh TRANSACTION TYPE_ID &dh TRANSACTION TYPE_NAME &dh ');
UTL_FILE.PUT_LINE(handle,'UOM_CODE &dh UNIT_OF MEASURE &dh UOM CLASS &dh UOM_CLASS NAME &dh CREATION DATE &dh ');
UTL_FILE.PUT_LINE(handle,'WMS_ENABLED FLAG &dh LOCATION ID &dh LOCATION NAME &eh ');

Declare cursor wms_sct is
Select WSCT.STG_ASSIGNMENT_ID            stgasg,
       WSCT.SEQUENCE_NUMBER              seqno,
       WSCT.RULE_TYPE_CODE               rultyco,
       WSCT.RULE_TYPE                    rulty,
       WSCT.RETURN_TYPE                  retty,
       WSCT.RETURN_TYPE_ID               rettyid,
       WSCT.RETURN_TYPE_NAME             rettyna,
       WSCT.ENABLED_FLAG                 enaf,
       WSCT.DATE_TYPE_CODE               dttyco,
       WSCT.DATE_TYPE_FROM               dttyfr,
       WSCT.DATE_TYPE_TO                 dttyto,
       WSCT.DATE_TYPE_LOOKUP_TYPE        dttylty,
       WSCT.EFFECTIVE_FROM               efffr,
       WSCT.EFFECTIVE_TO                 effto,
       WSCT.FROM_ORGANIZATION_ID         frorgid,
       WSCT.FROM_ORGANIZATION_CODE       frorgco,
       WSCT.FROM_SUBINVENTORY_NAME       frsubna,
       WSCT.TO_ORGANIZATION_ID           toorgid,
       WSCT.TO_ORGANIZATION_CODE         toorgco,
       WSCT.TO_SUBINVENTORY_NAME         tosubna,
       WSCT.CUSTOMER_ID                  cusid,
       WSCT.CUSTOMER_NAME                cusna,
       WSCT.FREIGHT_CODE                 fcod,
       WSCT.FREIGHT_CODE_NAME            fcna,
       WSCT.INVENTORY_ITEM_ID            inviid,
       WSCT.ITEM                         it,
       WSCT.ITEM_TYPE                    ityp,
       WSCT.ITEM_TYPE_NAME               itypna,
       WSCT.ASSIGNMENT_GROUP_ID          assgid,
       WSCT.ABC_CLASS_ID                 abcid,
       WSCT.ABC_GROUP_CLASS_NAME         abcna,
       WSCT.CATEGORY_SET_ID              csid,
       WSCT.CATEGORY_ID                  catid,
       WSCT.CATEGORY_SET_NAME            csna,
       WSCT.ORDER_TYPE_ID                otid,
       WSCT.ORDER_TYPE_NAME              otna,
       WSCT.VENDOR_ID                    vid,
       WSCT.VENDOR_NAME                  vna,
       WSCT.PROJECT_ID                   pid,
       WSCT.PROJECT_NAME                 pna,
       WSCT.TASK_ID                      tid,
       WSCT.TASK_NAME                    tna,
       WSCT.USER_ID                      usid,
       WSCT.USER_NAME                    usna,
       WSCT.TRANSACTION_ACTION_ID        taid,
       WSCT.TRANSACTION_ACTION_NAME      tana,
       WSCT.REASON_ID                    resid,
       WSCT.REASON_NAME                  resna,
       WSCT.TRANSACTION_SOURCE_TYPE_ID   tstid,
       WSCT.TRANSACTION_SOURCE_TYPE_NAME tstna,
       WSCT.TRANSACTION_TYPE_ID          ttid,
       WSCT.TRANSACTION_TYPE_NAME        ttna,
       WSCT.UOM_CODE                     uomco,
       WSCT.UNIT_OF_MEASURE              uomna,
       WSCT.UOM_CLASS                    uomcl,
       WSCT.UOM_CLASS_NAME               uomclna,
       WSCT.CREATION_DATE                credt,
       WSCT.WMS_ENABLED_FLAG             wmsef,
       WSCT.LOCATION_ID                  locid,
       WSCT.LOCATION_NAME                locna
  FROM WMS_SELECTION_CRITERIA_TXN_V WSCT,
       WSH_DELIVERY_DETAILS         DET,
       OE_ORDER_LINES               LIN
 where DET.SOURCE_LINE_ID         = LIN.LINE_ID
   and DET.SOURCE_CODE            = 'OE'
   and WSCT.FROM_ORGANIZATION_ID  = DET.ORGANIZATION_ID
   and DET.SOURCE_HEADER_ID       = nvl('&header_id_selected',:v_header_id);

begin

 for wms in wms_sct
 loop

  if UPPER(nvl('&do_analysis','Y')) = 'Y' then
    null;
  end if; -- do_analysis

   -- Print line to Output file
   utl_file.put_line(handle,'&sld '||n(wms.stgasg)||' &d ');
   utl_file.put_line(handle,n(wms.seqno)||' &d '||n(wms.rultyco)||' &d ');
   utl_file.put_line(handle,n(wms.rulty)||' &d '||n(wms.retty)||' &d ');
   utl_file.put_line(handle,n(wms.rettyid)||' &d '||n(wms.rettyna)||' &d ');
   utl_file.put_line(handle,n(wms.enaf)||' &d '||n(wms.dttyco)||' &d ');
   utl_file.put_line(handle,n(wms.dttyfr)||' &d '||n(wms.dttyto)||' &d ');
   utl_file.put_line(handle,n(wms.dttylty)||' &d '||n(wms.efffr)||' &d ');
   utl_file.put_line(handle,n(wms.effto)||' &d '||n(wms.frorgid)||' &d ');
   utl_file.put_line(handle,n(wms.frorgco)||' &d '||n(wms.frsubna)||' &d ');
   utl_file.put_line(handle,n(wms.toorgid)||' &d '||n(wms.toorgco)||' &d ');
   utl_file.put_line(handle,n(wms.tosubna)||' &d '||n(wms.cusid)||' &d ');
   utl_file.put_line(handle,n(wms.cusna)||' &d '||n(wms.fcod)||' &d ');
   utl_file.put_line(handle,n(wms.fcna)||' &d '||n(wms.inviid)||' &d ');
   utl_file.put_line(handle,n(wms.it)||' &d '||n(wms.ityp)||' &d ');
   utl_file.put_line(handle,n(wms.itypna)||' &d '||n(wms.assgid)||' &d ');
   utl_file.put_line(handle,n(wms.abcid)||' &d '||n(wms.abcna)||' &d ');
   utl_file.put_line(handle,n(wms.csid)||' &d '||n(wms.catid)||' &d ');
   utl_file.put_line(handle,n(wms.csna)||' &d '||n(wms.vid)||' &d ');
   utl_file.put_line(handle,n(wms.otna)||' &d '||n(wms.pid)||' &d ');
   utl_file.put_line(handle,n(wms.vna)||' &d '||n(wms.tid)||' &d ');
   utl_file.put_line(handle,n(wms.pna)||' &d '||n(wms.usid)||' &d ');
   utl_file.put_line(handle,n(wms.usna)||' &d '||n(wms.taid)||' &d ');
   utl_file.put_line(handle,n(wms.tana)||' &d '||n(wms.resid)||' &d ');
   utl_file.put_line(handle,n(wms.resna)||' &d '||n(wms.tstid)||' &d ');
   utl_file.put_line(handle,n(wms.tstna)||' &d '||n(wms.ttid)||' &d ');
   utl_file.put_line(handle,n(wms.ttna)||' &d '||n(wms.uomco)||' &d ');
   utl_file.put_line(handle,n(wms.uomna)||' &d '||n(wms.uomcl)||' &d ');
   utl_file.put_line(handle,n(wms.uomclna)||' &d '||n(wms.credt)||' &d ');
   utl_file.put_line(handle,n(wms.wmsef)||' &d '||n(wms.locid)||' &d ');
   utl_file.put_line(handle,n(wms.locna)||' &el ');

 end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

end if; --prt_wms

if UPPER(nvl('&prt_inv','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_TRANSACTIONS_INTERFACE"> MTL_TRANSACTIONS_INTERFACE (MTI) </a> <a HREF="#MTI">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh TRX_INT_ID &dh LINE &dh LINE_ID &dh DELIVERY DETAIL_ID &dh ITEM &dh PICKING LINE &dh TRANSACT TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSACTION DATE &dh PRIM QTY &dh FROM_SUB &dh FROM LOC_ID &dh PROCESS &dh LOCK &dh TRANSACTION MODE &dh LPN_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ERROR CODE &dh ERROR EXPLANATION &dh SECONDARY UOM_CODE &dh SECONDARY TRANS_QTY &DH ');
UTL_FILE.PUT_LINE(handle,'ACCOUNT PERIOD_ID &dh PERRIOD NAME &dh PERIOD OPEN &dh PERIOD START_DT &dh PERIOD CLOSE_DT ');
UTL_FILE.PUT_LINE(handle,'&dh SCHEDULE CLOSE_DT &eh');

Declare
cursor mtl_trx_int is
SELECT
 TMP.TRANSACTION_INTERFACE_ID     TXN_ID,
 to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
 LIN.LINE_ID                      LINE_ID,
 DET.DELIVERY_DETAIL_ID           DEL_DETAIL_ID,
 ITM.SEGMENT1                     ITEM,
 TMP.PICKING_LINE_ID              PICK_LN_ID,
 decode(TMP.TRANSACTION_TYPE_ID,
	 52,'52-Stage Trans',
	 33,'33-SO Issue',
	 15,'15-RMA Receipt',
	 18,'18-PO Receipt',
	 TMP.TRANSACTION_TYPE_ID||'-Unknown')    TXN_TYPE,
 TMP.TRANSACTION_DATE             TXN_DATE,
 TMP.PRIMARY_QUANTITY             PRM_Q,
 TMP.SUBINVENTORY_CODE            FROM_SUB,
 TMP.LOCATOR_ID                   FROM_LOC_ID,
 TMP.PROCESS_FLAG                 PROCESS,
 TMP.LOCK_FLAG                    LCK,
 TMP.TRANSACTION_MODE             TRANS_MODE,
 TMP.CONTENT_LPN_ID               LPN_ID,
 TMP.ERROR_CODE                   ERROR_CODE,
 TMP.ERROR_EXPLANATION            ERROR_EXPL,
 TMP.SECONDARY_UOM_CODE           SEC_UOM_CODE,
 TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
 TMP.ACCT_PERIOD_ID               ACCT_PER,
 OAC.period_name                  per_name,
 OAC.open_flag                    open_fl,
 to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS')   per_sd,
 to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS')   per_cd,
 to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
FROM
    MTL_TRANSACTIONS_INTERFACE        TMP,
    WSH_DELIVERY_DETAILS              DET,
    OE_ORDER_LINES                    LIN,
    MTL_SYSTEM_ITEMS                  ITM,
    ORG_ACCT_PERIODS                  OAC
WHERE
      TMP.SOURCE_LINE_ID = LIN.LINE_ID
  and LIN.LINE_CATEGORY_CODE = 'ORDER'
  and LIN.SHIP_FROM_ORG_ID   = ITM.ORGANIZATION_ID(+)
  and LIN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID(+)
  and DET.SOURCE_LINE_ID     = LIN.LINE_ID
  and TMP.PICKING_LINE_ID    = DET.DELIVERY_DETAIL_ID(+)
  and TMP.ACCT_PERIOD_ID     = OAC.acct_period_id
  and LIN.HEADER_ID          = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
SELECT
 TMP.TRANSACTION_INTERFACE_ID     TXN_ID,
 to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
 LIN.LINE_ID                      LINE_ID,
 DET.DELIVERY_DETAIL_ID           DEL_DETAIL_ID,
 ITM.SEGMENT1                     ITEM,
 TMP.PICKING_LINE_ID              PICK_LN_ID,
 decode(TMP.TRANSACTION_TYPE_ID,
	 52,'Stage Trans',
	 33,'SO Issue',
	 15,'RMA Receipt',
	 18,'PO Receipt',
	TMP.TRANSACTION_TYPE_ID)    TXN_TYPE,
 TMP.TRANSACTION_DATE             TXN_DATE,
 TMP.PRIMARY_QUANTITY             PRM_Q,
 TMP.SUBINVENTORY_CODE            FROM_SUB,
 TMP.LOCATOR_ID                   FROM_LOC_ID,
 TMP.PROCESS_FLAG                 PROCESS,
 TMP.LOCK_FLAG                    LCK,
 TMP.TRANSACTION_MODE             TRANS_MODE,
 TMP.CONTENT_LPN_ID               LPN_ID,
 TMP.ERROR_CODE                   ERROR_CODE,
 TMP.ERROR_EXPLANATION            ERROR_EXPL,
 TMP.SECONDARY_UOM_CODE           SEC_UOM_CODE,
 TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
 TMP.ACCT_PERIOD_ID               ACCT_PER,
 OAC.period_name                  per_name,
 OAC.open_flag                    open_fl,
 to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS')   per_sd,
 to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS')   per_cd,
 to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
FROM
    MTL_TRANSACTIONS_INTERFACE        TMP,
    WSH_DELIVERY_DETAILS              DET,
    OE_ORDER_LINES                    LIN,
    MTL_SYSTEM_ITEMS                  ITM,
    ORG_ACCT_PERIODS                  OAC
WHERE
      TMP.TRX_SOURCE_LINE_ID = LIN.LINE_ID
  and LIN.LINE_CATEGORY_CODE = 'RETURN'
  and LIN.SHIP_FROM_ORG_ID   = ITM.ORGANIZATION_ID(+)
  and LIN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID(+)
  and DET.SOURCE_LINE_ID     = LIN.LINE_ID
  and TMP.PICKING_LINE_ID    = DET.DELIVERY_DETAIL_ID(+)
  and TMP.ACCT_PERIOD_ID     = OAC.acct_period_id
  and LIN.HEADER_ID          = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for mti in mtl_trx_int
 loop
   utl_file.put_line(handle,'&sld'||n(mti.TXN_ID)||' &d ');
   utl_file.put_line(handle,n(mti.LINE)||' &d '||n(mti.LINE_ID)||' &d ');
   utl_file.put_line(handle,n(mti.DEL_DETAIL_ID)||' &d'||n(mti.ITEM)||' &d ');
   utl_file.put_line(handle,n(mti.PICK_LN_ID)||' &d'||n(mti.TXN_TYPE)||' &d ');
   utl_file.put_line(handle,n(mti.TXN_DATE)||' &d ');
   utl_file.put_line(handle,n(mti.PRM_Q)||' &d '||n(mti.FROM_SUB)||' &d ');
   utl_file.put_line(handle,n(mti.FROM_LOC_ID)||' &d '||n(mti.PROCESS)||' &d ');
   utl_file.put_line(handle,n(mti.LCK)||' &d '||n(mti.TRANS_MODE)||' &d ');
   utl_file.put_line(handle,n(mti.LPN_ID)||' &d '||n(mti.ERROR_CODE)||' &d ');
   utl_file.put_line(handle,n(mti.ERROR_EXPL)||' &d ');
   utl_file.put_line(handle,n(mti.SEC_UOM_CODE)||' &d '||n(mti.SEC_TRN_QTY)||' &d ');
   utl_file.put_line(handle,n(mti.ACCT_PER)||' &d '||n(mti.PER_NAME)||' &d ');
   utl_file.put_line(handle,n(mti.open_fl)||' &d '||n(mti.per_sd)||' &d ');
   utl_file.put_line(handle,n(mti.per_cd)||' &d '||n(mti.sch_cd)||' &el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_MATERIAL_TRANSACTIONS_TEMP"> MTL_MATERIAL_TRANSACTIONS_TEMP (TMP) - UNPICKED LINES </a> ');
UTL_FILE.PUT_LINE(handle,'<a HREF="#TMP">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh MTL_TRNS_ID &dh TRANSACTION DATE &dh MOVE_LINE_ID &dh PICK_SLIP &dh LINE &dh LINE_ID &dh ITEM ');
UTL_FILE.PUT_LINE(handle,'&dh PRM_Q &dh FROM_SUB &dh FROM_LOC_ID &dh ');
UTL_FILE.PUT_LINE(handle,'TO_SUB &dh TO_LOC_ID &dh PROCESS &dh LCK &dh TRANS_MODE &dh ERROR_CODE &dh ERROR_EXPL &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY UOM_CODE &dh SECONDARY TRANS_QTY &dh LOT_NUM &dh LOT PRM_QTY &dh LOT SEC_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'LOT_CAL SEC_QTY &eh');

Declare
cursor mtl_trx_tmp is
SELECT distinct
 TMP.TRANSACTION_TEMP_ID               MTL_TRNS_ID,
 TMP.TRANSACTION_DATE                  MTL_TRNS_DATE,
 TMP.MOVE_ORDER_LINE_ID                MOVE_LINE_ID,
 --'UNPICKED'                            LINE_STATUS,
 TMP.PICK_SLIP_NUMBER                  PICK_SLIP,
 to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
 LIN.LINE_ID                      LINE_ID,
 --DET.DELIVERY_DETAIL_ID           DET_DELIVERY_ID,
 ITM.SEGMENT1                     ITEM,
 TMP.PRIMARY_QUANTITY             PRM_Q,
 TMP.SUBINVENTORY_CODE            FROM_SUB,
 TMP.LOCATOR_ID                   FROM_LOC_ID,
 TMP.TRANSFER_SUBINVENTORY        TO_SUB,
 TMP.TRANSFER_TO_LOCATION         TO_LOC_ID,
 TMP.PROCESS_FLAG                 PROCESS,
 TMP.LOCK_FLAG                    LCK,
 TMP.TRANSACTION_MODE             TRANS_MODE,
 TMP.ERROR_CODE                   ERROR_CODE,
 TMP.ERROR_EXPLANATION            ERROR_EXPL,
 TMP.SECONDARY_UOM_CODE           SEC_UOM_CODE,
 TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
 lot.lot_number                   lot_num,
 lot.primary_quantity             lot_prm_q,
 lot.secondary_quantity           lot_sec_q,
 inv_convert.inv_um_convert(
    tmp.inventory_item_id,
    lot.lot_number,
    tmp.organization_id,
    5,
    lot.primary_quantity,
    itm.primary_uom_code,
    tmp.secondary_uom_code,
    null, null)                   lot_cal_sec_q
FROM
    MTL_MATERIAL_TRANSACTIONS_TEMP    TMP,
--    WSH_DELIVERY_DETAILS              DET,
    OE_ORDER_LINES                    LIN,
    MTL_SYSTEM_ITEMS                  ITM,
    mtl_transaction_lots_temp         lot
WHERE
      TMP.DEMAND_SOURCE_LINE = LIN.LINE_ID
  and LIN.LINE_CATEGORY_CODE = 'ORDER'
  and LIN.SHIP_FROM_ORG_ID   = ITM.ORGANIZATION_ID(+)
  and LIN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID(+)
  and lot.transaction_temp_id (+)= tmp.transaction_temp_id
--  and TMP.DEMAND_SOURCE_LINE = DET.SOURCE_LINE_ID(+)   - Creates duplicates for lines with multiple Del_details.
  and LIN.HEADER_ID          = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
SELECT distinct
 TMP.TRANSACTION_TEMP_ID               MTL_TRNS_ID,
 TMP.TRANSACTION_DATE                  MTL_TRNS_DATE,
 TMP.MOVE_ORDER_LINE_ID                MOVE_LINE_ID,
 --'UNPICKED'                            LINE_STATUS,
 TMP.PICK_SLIP_NUMBER                  PICK_SLIP,
 to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
 LIN.LINE_ID                      LINE_ID,
-- DET.DELIVERY_DETAIL_ID           DET_DELIVERY_ID,
 ITM.SEGMENT1                     ITEM,
 TMP.PRIMARY_QUANTITY             PRM_Q,
 TMP.SUBINVENTORY_CODE            FROM_SUB,
 TMP.LOCATOR_ID                   FROM_LOC_ID,
 TMP.TRANSFER_SUBINVENTORY        TO_SUB,
 TMP.TRANSFER_TO_LOCATION         TO_LOC_ID,
 TMP.PROCESS_FLAG                 PROCESS,
 TMP.LOCK_FLAG                    LCK,
 TMP.TRANSACTION_MODE             TRANS_MODE,
 TMP.ERROR_CODE                   ERROR_CODE,
 TMP.ERROR_EXPLANATION            ERROR_EXPL,
 TMP.SECONDARY_UOM_CODE           SEC_UOM_CODE,
 TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
 ' '                              lot_num,
 0                                lot_prm_q,
 0                                lot_sec_q,
 0                                lot_cal_sec_q
FROM
    MTL_MATERIAL_TRANSACTIONS_TEMP    TMP,
--    WSH_DELIVERY_DETAILS              DET,
    OE_ORDER_LINES                    LIN,
    MTL_SYSTEM_ITEMS                  ITM
WHERE
      TMP.TRX_SOURCE_LINE_ID = LIN.LINE_ID
  and LIN.LINE_CATEGORY_CODE = 'RETURN'
  and LIN.SHIP_FROM_ORG_ID   = ITM.ORGANIZATION_ID(+)
  and LIN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID(+)
--  and TMP.DEMAND_SOURCE_LINE = DET.SOURCE_LINE_ID(+)
  and LIN.HEADER_ID          = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for mtt in mtl_trx_tmp
 loop
   utl_file.put_line(handle,'&sld'||n(mtt.MTL_TRNS_ID)||'&d'||n(mtt.MTL_TRNS_DATE)||'&d');
   utl_file.put_line(handle,n(mtt.MOVE_LINE_ID)||'&d');
   utl_file.put_line(handle,n(mtt.PICK_SLIP)||'&d'||n(mtt.LINE)||'&d');
   utl_file.put_line(handle,n(mtt.LINE_ID)||'&d'||n(mtt.ITEM)||'&d');
   utl_file.put_line(handle,n(mtt.PRM_Q)||'&d'||n(mtt.FROM_SUB)||'&d');
   utl_file.put_line(handle,n(mtt.FROM_LOC_ID)||'&d'||n(mtt.TO_SUB)||'&d');
   utl_file.put_line(handle,n(mtt.TO_LOC_ID)||'&d'||n(mtt.PROCESS)||'&d');
   utl_file.put_line(handle,n(mtt.LCK)||'&d'||n(mtt.TRANS_MODE)||'&d');
   utl_file.put_line(handle,n(mtt.ERROR_CODE)||'&d'||n(mtt.ERROR_EXPL)||'&d ');
   utl_file.put_line(handle,n(mtt.SEC_UOM_CODE)||'&d'||n(mtt.SEC_TRN_QTY)||'&d');
   utl_file.put_line(handle,n(mtt.LOT_NUM)||'&d'||n(mtt.LOT_PRM_Q)||'&d');
   utl_file.put_line(handle,n(mtt.LOT_SEC_Q)||'&d'||n(mtt.LOT_CAL_SEC_Q)||'&el');
 end loop;
end;
UTL_FILE.PUT_LINE(handle,'&et '); 

-- This is commented out because it runs slowly without an index
--<do not run> CREATE INDEX MTL_MATL_TRANS_777
--<do not run>  ON INV.MTL_MATERIAL_TRANSACTIONS
--<do not run> (trx_source_line_id);

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_MATERIAL_TRANSACTIONS"> MTL_MATERIAL_TRANSACTIONS (TRN) - PICKED LINES </a>');
UTL_FILE.PUT_LINE(handle,'<a HREF="#TRN">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh MTL_TRNS_ID &dh TRANSACTION DATE &dh MOVE_LINE_ID &dh TRANS_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'PICK_SLIP &dh LINE &dh LINE_ID &dh PRM_Q &dh');
UTL_FILE.PUT_LINE(handle,'FROM_SUB &dh FROM_LOC_ID &dh TO_SUB &dh TO_LOC_ID &dh ORG_ID &dh PICKING_LINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY UOM_CODE &dh SECONDARY TRANS_QTY &dh LOT PRM_QTY &dh LOT SEC_QTY &dh LOT_CAL SEC_QTY &eh');

declare
cursor Mtl_trans is
SELECT
 TRN.TRANSACTION_ID                    MTL_TRNS_ID,
 TRN.TRANSACTION_DATE                  MTL_TRNS_DATE,
 TRN.MOVE_ORDER_LINE_ID                MOVE_LINE_ID,
 --to_char(TRN.TRANSACTION_TYPE_ID) || '=' ||
 -- (select TYP.TRANSACTION_TYPE_NAME
 --   from MTL_TRANSACTION_TYPES TYP
 --   where TRN.TRANSACTION_TYPE_ID = TYP.TRANSACTION_TYPE_ID) TRANS_TYPE,
 -- See header of this script for mapping other TRANSACTION_TYPE_ID's to their meaning
 decode(TRN.TRANSACTION_TYPE_ID,
        52,'Stage Trans',
        53,'Stage Trans INT',
        33,'SO Issue',
        34,'SO Issue INT',
        15,'RMA Receipt',
        18,'PO Receipt',
        'Invalid '||to_char(TRN.TRANSACTION_TYPE_ID))       TRANS_TYPE,
 TRN.PICK_SLIP_NUMBER                  PICK_SLIP,
 TRN.TRX_SOURCE_LINE_ID                TRX_SOURCE_LINE_ID,
 TRN.TRX_SOURCE_LINE_ID                LINE_ID,
 TRN.PRIMARY_QUANTITY                  PRM_Q,
 TRN.SUBINVENTORY_CODE                 FROM_SUB,
 TRN.LOCATOR_ID                        FROM_LOC_ID,
 TRN.TRANSFER_SUBINVENTORY             TO_SUB,
 TRN.TRANSFER_LOCATOR_ID               TO_LOC_ID,
 TRN.ORGANIZATION_ID                   ORG_ID,
 TRN.PICKING_LINE_ID                   PICKING_LINE_ID,
 TRN.SECONDARY_UOM_CODE                SEC_UOM_CODE,
 TRN.SECONDARY_TRANSACTION_QUANTITY    SEC_TRN_QTY,
 lot.primary_quantity                  lot_prm_q,
 lot.secondary_transaction_quantity    lot_sec_q,
 inv_convert.inv_um_convert(
     lot.inventory_item_id,
     lot.lot_number,
     lot.organization_id,
     5,
     lot.primary_quantity,
     itm.primary_uom_code,
     trn.secondary_uom_code,
     null, null)                       lot_cal_sec_q
FROM
    MTL_MATERIAL_TRANSACTIONS         TRN,
    MTL_SYSTEM_ITEMS                  ITM,
    mtl_transaction_lot_numbers         lot
WHERE
 -- klr
 (TRN.TRX_SOURCE_LINE_ID,TRN.ORGANIZATION_ID,TRN.INVENTORY_ITEM_ID) IN (SELECT DISTINCT LINE_ID,SHIP_FROM_ORG_ID,INVENTORY_ITEM_ID
                               FROM OE_ORDER_LINES         LIN1
                               WHERE LIN1.HEADER_ID = nvl('&header_id_selected',:v_header_id)
                               and NVL('&line_id_selected',0)    in (0,LIN1.LINE_ID,
                                         LIN1.TOP_MODEL_LINE_ID,
                                         LIN1.ATO_LINE_ID,
                                         LIN1.LINK_TO_LINE_ID,
                                         LIN1.REFERENCE_LINE_ID,
                                         LIN1.SERVICE_REFERENCE_LINE_ID))
and TRN.ORGANIZATION_ID   = ITM.ORGANIZATION_ID
and TRN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID
and lot.transaction_id (+) = trn.transaction_id
UNION ALL
SELECT   /* DROP SHIP */
 TRN.TRANSACTION_ID                    MTL_TRNS_ID,
 TRN.TRANSACTION_DATE                  MTL_TRNS_DATE,
 TRN.MOVE_ORDER_LINE_ID                MOVE_LINE_ID,
 decode(TRN.TRANSACTION_TYPE_ID,
        52,'Stage Trans',
        33,'SO Issue',
        15,'RMA Receipt',
        18,'PO Receipt',
        'Invalid '||to_char(TRN.TRANSACTION_TYPE_ID))       TRANS_TYPE,
 TRN.PICK_SLIP_NUMBER                  PICK_SLIP,
-- to_char(TRN.SOURCE_LINE_ID)           LINE,
 TRN.TRX_SOURCE_LINE_ID                TRX_SOURCE_LINE_ID,
 TRN.TRX_SOURCE_LINE_ID                LINE_ID,
 TRN.PRIMARY_QUANTITY                  PRM_Q,
 TRN.SUBINVENTORY_CODE                 FROM_SUB,
 TRN.LOCATOR_ID                        FROM_LOC_ID,
 TRN.TRANSFER_SUBINVENTORY             TO_SUB,
 TRN.TRANSFER_LOCATOR_ID               TO_LOC_ID,
 TRN.ORGANIZATION_ID                   ORG_ID,
 TRN.PICKING_LINE_ID                   PICKING_LINE_ID,
 TRN.SECONDARY_UOM_CODE                SEC_UOM_CODE,
 TRN.SECONDARY_TRANSACTION_QUANTITY    SEC_TRN_QTY,
 0                                     lot_prm_q, -- Only for OPM
 0                                     lot_sec_q, -- Only for OPM
 0                                     lot_cal_sec_q -- Only for OPM
FROM
    MTL_MATERIAL_TRANSACTIONS         TRN,
    MTL_SYSTEM_ITEMS                  ITM,
    OE_DROP_SHIP_SOURCES              DRP,
    PO_HEADERS_ALL                    POH
WHERE
     TRN.TRANSACTION_TYPE_ID         = 18                        -- PO Receipt
and  TRN.TRANSACTION_SOURCE_TYPE_ID  = 1
and  TRN.TRANSACTION_SOURCE_ID       = POH.PO_HEADER_ID
and  POH.PO_HEADER_ID                = DRP.PO_HEADER_ID
and  DRP.HEADER_ID                   = nvl('&header_id_selected',:v_header_id)
and  TRN.ORGANIZATION_ID             = ITM.ORGANIZATION_ID
and  TRN.INVENTORY_ITEM_ID           = ITM.INVENTORY_ITEM_ID
UNION ALL
SELECT   /* PO receipt trx for ATO BUY ITEM */
 TRN.TRANSACTION_ID                    MTL_TRNS_ID,
 TRN.TRANSACTION_DATE                  MTL_TRNS_DATE,
 TRN.MOVE_ORDER_LINE_ID                MOVE_LINE_ID,
 decode(TRN.TRANSACTION_TYPE_ID,
        52,'Stage Trans',
        33,'SO Issue',
        15,'RMA Receipt',
        18,'PO Receipt',
        'Invalid '||to_char(TRN.TRANSACTION_TYPE_ID))       TRANS_TYPE,
 TRN.PICK_SLIP_NUMBER                  PICK_SLIP,
-- to_char(RES.DEMAND_SOURCE_LINE_ID)    LINE,
 TRN.TRX_SOURCE_LINE_ID                TRX_SOURCE_LINE_ID,
 TRN.TRX_SOURCE_LINE_ID                LINE_ID,
 TRN.PRIMARY_QUANTITY                  PRM_Q,
 TRN.SUBINVENTORY_CODE                 FROM_SUB,
 TRN.LOCATOR_ID                        FROM_LOC_ID,
 TRN.TRANSFER_SUBINVENTORY             TO_SUB,
 TRN.TRANSFER_LOCATOR_ID               TO_LOC_ID,
 TRN.ORGANIZATION_ID                   ORG_ID,
 TRN.PICKING_LINE_ID                   PICKING_LINE_ID,
 TRN.SECONDARY_UOM_CODE                SEC_UOM_CODE,
 TRN.SECONDARY_TRANSACTION_QUANTITY    SEC_TRN_QTY,
 0                                     lot_prm_q, -- Only for OPM
 0                                     lot_sec_q, -- Only for OPM
 0                                     lot_cal_sec_q -- Only for OPM
FROM
    MTL_MATERIAL_TRANSACTIONS         TRN,
    MTL_SYSTEM_ITEMS                  ITM,
    MTL_RESERVATIONS                  RES,
    PO_HEADERS_ALL                    POH
WHERE
     :sales_ord_id                 = RES.DEMAND_SOURCE_HEADER_ID
and  RES.DEMAND_SOURCE_TYPE_ID     = 2                         -- SO
and  RES.SUPPLY_SOURCE_TYPE_ID     in (1,13)                   -- PO or INV
and  RES.SUPPLY_SOURCE_HEADER_ID   = POH.PO_HEADER_ID          --
and  POH.PO_HEADER_ID              = TRN.TRANSACTION_SOURCE_ID
and  TRN.ORGANIZATION_ID           = ITM.ORGANIZATION_ID
and  TRN.INVENTORY_ITEM_ID         = ITM.INVENTORY_ITEM_ID
and  TRN.TRANSACTION_TYPE_ID       = 18                        -- PO Receipt
and  TRN.TRANSACTION_SOURCE_TYPE_ID  = 1;

r_lin_no  varchar2(100);
type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
  :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..30
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := 'x';

end if;

 for mt in Mtl_trans
 loop
   :r_flag := '';

   -- Order_Line number
     SELECT to_char(LIN.line_number) ||
            decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
            decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
            decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
            decode(LIN.service_number,null,null,
                   decode(LIN.component_number, null, '.' , null) ||
                   decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number))
      into r_lin_no
      FROM OE_ORDER_LINES LIN
     WHERE mt.TRX_SOURCE_LINE_ID = LIN.LINE_ID;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  null;
   ---
   -- Basic Verification
   --
--   If  i.Ordq < i.shpq then
--     :r_flag := :r_flag || '1 ';
--   end if;
--   If  i.Ordq < i.fulq then
--     :r_flag := :r_flag || '2 ';
--   end if;
   ---
end if;

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#TRNERR">'||n(:r_flag)||'</a> &eb &d');
   utl_file.put_line(handle,n(mt.MTL_TRNS_ID)||'&d'||n(mt.MTL_TRNS_DATE)||'&d');
   utl_file.put_line(handle,'<a NAME="MO'||mt.MOVE_LINE_ID||'">'||n(mt.MOVE_LINE_ID)||'</a>'||'&d');
   utl_file.put_line(handle,n(mt.TRANS_TYPE)||'&d'||n(mt.PICK_SLIP)||'&d');
   utl_file.put_line(handle,n(r_lin_no)||'&d'||n(mt.LINE_ID)||'&d');
   utl_file.put_line(handle,n(mt.PRM_Q)||'&d'||n(mt.FROM_SUB)||'&d');
   utl_file.put_line(handle,n(mt.FROM_LOC_ID)||'&d'||n(mt.TO_SUB)||'&d');
   utl_file.put_line(handle,n(mt.TO_LOC_ID)||'&d'||n(mt.ORG_ID)||'&d');
   utl_file.put_line(handle,n(mt.PICKING_LINE_ID)||'&d ');
   utl_file.put_line(handle,n(mt.SEC_UOM_CODE)||'&d'||n(mt.SEC_TRN_QTY)||'&d');
   utl_file.put_line(handle,n(mt.LOT_PRM_Q)||'&d'||n(mt.LOT_SEC_Q)||'&d');
   utl_file.put_line(handle,n(mt.LOT_CAL_SEC_Q)||'&el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
   utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="TRNERR">Warning List:</a> &eb &f');
   for i in 1..30
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

--<do not run> DROP INDEX INDEX MTL_MATL_TRANS_777;

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_SERIAL_NUMBERS"> MTL_SERIAL_NUMBERS (MSN)</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ERR_FLAG &dh DEL_DET_ID &dh REL_STATUS &dh LINE &dh LINE_ID &dh ITEM_ID &dh FROM_SERIAL &dh TO_SERIAL &dh ');
UTL_FILE.PUT_LINE(handle,'QUANTITY &dh SERIAL_NUMBER &dh CURR_STATUS &dh CURR_SUBINV &dh REVISION &dh LOT_NUMBER &dh ');
UTL_FILE.PUT_LINE(handle,'CURR_LOCATION &dh CURR_ORG_ID &dh GROUP_MARK &dh LINE_MARK &dh LOT_MARK &dh ORIGIN_DATE &eh');

Declare
cursor m_serial_n is
select distinct
  DET.DELIVERY_DETAIL_ID           DEL_DET_ID,
  decode(DET.RELEASED_STATUS,
    'Y','Y=Staged',
    'R','R=Ready to Release',
    'S','S=Rel to Warhouse',
    'B','B=Backorder',
    'P','P=Pending Inv',
    'C','C=Shipped',
    'N','N=Not Ready',
    'D','D=Cancelled',
    'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
  to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
  DET.SOURCE_LINE_ID                LINE_ID,
  DET.INVENTORY_ITEM_ID             ITEM_ID,
  substr(wsn.fm_serial_number,1,15)  FROM_SERIAL,
  substr(wsn.to_serial_number,1,15)  TO_SERIAL,
  wsn.quantity                      WSN_QTY,
  to_char(wsn.creation_date,'DD-MON-RR_HH24:MI:SS') WSN_CRE_DATE,
  MSN.SERIAL_NUMBER                 MSN_SN,
  MSN.CURRENT_STATUS                MSN_CUR_STA,
  MSN.REVISION                      MSN_REV,
  MSN.LOT_NUMBER                    MSN_LOT,
  MSN.CURRENT_SUBINVENTORY_CODE     MSN_CUR_SUB,
  MSN.CURRENT_LOCATOR_ID            MSN_CUR_LOC,
  MSN.CURRENT_ORGANIZATION_ID       MSN_CUR_ORG,
  MSN.GROUP_MARK_ID                 MSN_GRP_MRK,
  MSN.LINE_MARK_ID                  MSN_LIN_MRK,
  MSN.LOT_LINE_MARK_ID              MSN_LOT_MRK,
  MSN.ORIGINATION_DATE              MSN_ORI_DATE
FROM
  OE_ORDER_LINES                   LIN,
  WSH_DELIVERY_DETAILS             DET,
  WSH_SERIAL_NUMBERS               WSN,
  MTL_SERIAL_NUMBERS               MSN
where
  DET.DELIVERY_DETAIL_ID          = WSN.DELIVERY_DETAIL_ID
  and DET.SOURCE_LINE_ID              = LIN.LINE_ID
  and DET.SOURCE_CODE                 = 'OE'
  and LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID)
  and DET.INVENTORY_ITEM_ID           = MSN.INVENTORY_ITEM_ID
  and MSN.SERIAL_NUMBER    between  WSN.FM_SERIAL_NUMBER and WSN.TO_SERIAL_NUMBER
  and (UPPER(nvl('&det_cnt','Y')) = 'Y' or rownum <= 10)
order by
    LINE,MSN.SERIAL_NUMBER;
r_uom_lin        varchar2(10);
r_qshp_lin       number;
r_sta_lin        varchar2(100);
r_mtl_trn        varchar2(100);
type     per_record_typ is RECORD
               (flag    varchar2(1),
                descrip varchar2(200));
type     msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg      msg_tab;

function n(v varchar2) return varchar2 is
begin
  if v is null then
   return '&sp';
   else
   return v;
  end if;
end n;

begin
  :r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
  for i in 1..1
  loop
    msg(i).flag := '0';
    msg(i).descrip := '';
  end loop;
  msg(1).descrip   := '    1. No verifications yet.';
end if;

 for dd in m_serial_n
 loop
   :r_flag := '';

-- if UPPER(nvl('&do_analysis','Y')) = 'Y' then
   -- Include verifications here
--   Select nvl(mtl_transactions_enabled_flag,'N')
--     into r_mtl_trn
--     from Mtl_System_items
--    where Inventory_item_Id = dd.ITEM_ID
--      and Organization_Id   = dd.WH_ID;
--   if dd.PICKABLE_FLAG <> r_mtl_trn then
--     :r_flag := :r_flag || '1 ';
--     msg(1).flag := '1';
--   end if;

-- end if; -- do_analysis
   ---

   -- Print line to Output file
   utl_file.put_line(handle,'&sld &b <a HREF="#MSNERR">'||n(:r_flag)||'</a> &eb &d ');
   utl_file.put_line(handle,n(dd.DEL_DET_ID)||' &d ');
   utl_file.put_line(handle,n(dd.REL_STATUS)||' &d '||n(dd.LINE)||' &d ');
   utl_file.put_line(handle,'<a HREF="#'||dd.LINE_ID||'">'||n(dd.LINE_ID)||'</a> &d ');
   utl_file.put_line(handle,n(dd.ITEM_ID)||' &d ');
   utl_file.put_line(handle,n(dd.FROM_SERIAL)||' &d '||n(dd.TO_SERIAL)||' &d ');
   utl_file.put_line(handle,n(dd.WSN_QTY)||' &d '||n(dd.MSN_SN)||' &d ');
   utl_file.put_line(handle,n(dd.MSN_CUR_STA)||' &d '||n(dd.MSN_CUR_SUB)||' &d ');
   utl_file.put_line(handle,n(dd.MSN_REV)||' &d '||n(dd.MSN_LOT)||' &d ');
   utl_file.put_line(handle,n(dd.MSN_CUR_LOC)||' &d '||n(dd.MSN_CUR_ORG)||' &d ');
   utl_file.put_line(handle,n(dd.MSN_GRP_MRK)||' &d '||n(dd.MSN_LIN_MRK)||' &d ');
   utl_file.put_line(handle,n(dd.MSN_LOT_MRK)||' &d '||n(dd.MSN_ORI_DATE)||' &el');

   if :r_flag is not null then
    :r_error := 1;
   end if;
 end loop;
 utl_file.put_line(handle,'&et');

 if :r_error = 1 then
   utl_file.put_line(handle,'&f &b <a NAME="MSNERR">Error List:</a> &eb &f');
   for i in 1..1
   loop
     if msg(i).flag = '1' then
       utl_file.put_line(handle,msg(i).descrip||'&f');
     end if;
   end loop;
 end if;

end;

UTL_FILE.PUT_LINE(handle,'&et '); 

UTL_FILE.PUT_LINE(handle,'&f &f MTL_UNIT_TRANSACTIONS (UNT) <a HREF="#UNT">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh TRANS_ID &dh TRANSACTION DATE &dh STATUS_ID &dh SUBINV &dh LOC_ID &dh SERIAL_NUM ');
UTL_FILE.PUT_LINE(handle,'&dh ITEM_ID &dh WH_ID &dh TRX_DATE &dh ');
UTL_FILE.PUT_LINE(handle,'TRX_SRC_ID &dh TRX_SRC_TYPE_ID &dh RECEIPT_ISSUE_TYPE &dh CUST_ID &dh SHIP_ID &eh');

Declare
cursor mtl_unt_trx is
select
     UNT.TRANSACTION_ID                 TRANS_ID,
     UNT.TRANSACTION_DATE               MTL_TRNS_DATE,
     UNT.STATUS_ID                      STATUS_ID,
     UNT.SUBINVENTORY_CODE              SUBINV,
     UNT.LOCATOR_ID                     LOC_ID,
     UNT.SERIAL_NUMBER                  SERIAL_NUM,
     UNT.INVENTORY_ITEM_ID              ITEM_ID,
     UNT.ORGANIZATION_ID                WH_ID,
     to_char(UNT.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRX_DATE,
     UNT.TRANSACTION_SOURCE_ID          TRX_SRC_ID,
     UNT.TRANSACTION_SOURCE_TYPE_ID     TRX_SRC_TYPE_ID,
     --UNT.TRANSACTION_SOURCE_NAME        TRX_SOURCE_NAME
     UNT.RECEIPT_ISSUE_TYPE             RECEIPT_ISSUE_TYPE,
     UNT.CUSTOMER_ID                    CUST_ID,
     UNT.SHIP_ID                        SHIP_ID
    --,UNT.SERIAL_ATTRIBUTE_CATEGORY      SERIAL_ATTR_CAT
    --,UNT.ORIGINATION_DATE               ORIGIN_DATE
from MTL_UNIT_TRANSACTIONS UNT
where UNT.TRANSACTION_ID in (select TRN.TRANSACTION_ID
FROM
    MTL_MATERIAL_TRANSACTIONS         TRN,
    --WSH_DELIVERY_DETAILS              DET,
    --OE_ORDER_LINES                    LIN,
    MTL_SYSTEM_ITEMS                  ITM
WHERE
 -- klr
 (TRN.TRX_SOURCE_LINE_ID,TRN.ORGANIZATION_ID,TRN.INVENTORY_ITEM_ID) IN (SELECT DISTINCT LINE_ID,SHIP_FROM_ORG_ID,INVENTORY_ITEM_ID
                               FROM OE_ORDER_LINES         LIN1
                               WHERE LIN1.HEADER_ID = nvl('&header_id_selected',:v_header_id)
                               and NVL('&line_id_selected',0)    in (0,LIN1.LINE_ID,
                                         LIN1.TOP_MODEL_LINE_ID,
                                         LIN1.ATO_LINE_ID,
                                         LIN1.LINK_TO_LINE_ID,
                                         LIN1.REFERENCE_LINE_ID,
                                         LIN1.SERVICE_REFERENCE_LINE_ID))
and TRN.ORGANIZATION_ID   = ITM.ORGANIZATION_ID
and TRN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID)
and (UPPER(nvl('&det_cnt','Y')) = 'Y' or rownum <= 10);

begin
 for mut in mtl_unt_trx
 loop
   utl_file.put_line(handle,'&sld'||n(mut.TRANS_ID)||' &d '||n(mut.MTL_TRNS_DATE)||' &d ');
   utl_file.put_line(handle,n(mut.STATUS_ID)||' &d ');
   utl_file.put_line(handle,n(mut.SUBINV)||' &d '||n(mut.LOC_ID)||' &d ');
   utl_file.put_line(handle,n(mut.SERIAL_NUM)||' &d '||n(mut.ITEM_ID)||' &d ');
   utl_file.put_line(handle,n(mut.WH_ID)||' &d '||n(mut.TRX_DATE)||' &d ');
   utl_file.put_line(handle,n(mut.TRX_SRC_ID)||' &d '||n(mut.TRX_SRC_TYPE_ID)||' &d ');
   utl_file.put_line(handle,n(mut.RECEIPT_ISSUE_TYPE)||' &d '||n(mut.CUST_ID)||' &d ');
   utl_file.put_line(handle,n(mut.SHIP_ID)||' &el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_TXN_REQUEST_LINES_V"> MTL_TXN_REQUEST_LINES_V (MOV) - MOVE TRANSACTIONS </a> <a HREF="#MOV">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh MO_LINE_ID &dh MO_NUMBER &dh MV_HDR_ID &dh MV_LINE_NUM &dh MV_LINE_STAT &dh LINE &dh TXN_SLINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM &dh QTY &dh PRM_Q &dh DLV_Q &dh DTL_Q &dh MOVE_TYPE_NAME &dh TRNS_SRC_TYPE &dh TRNS_TYPE_NAME &dh WH_ID &dh ');
UTL_FILE.PUT_LINE(handle,'FROM_SUB &dh FROM_LOC_ID &dh TO_SUB &dh TO_LOC_ID &dh LOT_NUM &dh TRNS_HEAD_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY QTY &dh SECONDARY DETAIL_Q &dh SECONDARY DELIVER_Q &eh');

Declare
cursor mtl_trx_reql is
select distinct
 TRL.LINE_ID                         MO_LINE_ID,
 TRH.REQUEST_NUMBER                  MO_NUMBER,
 TRL.HEADER_ID                       MV_HDR_ID,
 TRL.LINE_NUMBER                     MV_LINE_NUM,
 decode(TRL.LINE_STATUS,
        1, '1=Incomplete',
        2, '2=Pend Aprvl',
        3, '3=Approved',
        4, '4=Not Apprvd',
        5, '5=Closed',
        6, '6=Canceled',
        7, '7=Pre Apprvd',
        8, '8=Part Aprvd',
        9, '9=Cncld Source') MV_LINE_STAT,
 to_char(LIN.line_number) ||
          decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
          decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
          decode(LIN.component_number, null, null,
                 decode(LIN.option_number, null, '.',null)||
                 '.'||to_char(LIN.component_number))||
          decode(LIN.service_number,null,null,
                 decode(LIN.component_number, null, '.' , null) ||
                        decode(LIN.option_number, null, '.', null ) ||
                        '.'|| to_char(LIN.service_number)) LINE,
 TRL.TXN_SOURCE_LINE_ID              TXN_SLINE_ID,
 --DET.DELIVERY_DETAIL_ID              DEL_DET_ID,
 ITM.SEGMENT1                        ITEM,
 TRL.QUANTITY                        QTY,
 TRL.PRIMARY_QUANTITY                PRM_Q,
 TRL.QUANTITY_DELIVERED              DLV_Q,
 TRL.QUANTITY_DETAILED               DTL_Q,
 TRL.MOVE_ORDER_TYPE_NAME            MOVE_TYPE_NAME,
 decode(TRL.TRANSACTION_SOURCE_TYPE_ID,2,'Sales Order',TRL.TRANSACTION_SOURCE_TYPE_ID)
                                     TRNS_SRC_TYPE,
 TRL.TRANSACTION_TYPE_NAME           TRNS_TYPE_NAME,
 TRL.ORGANIZATION_ID                 WH_ID,
 TRL.FROM_SUBINVENTORY_CODE          FROM_SUB,
 TRL.FROM_LOCATOR_ID                 FROM_LOC_ID,
 TRL.TO_SUBINVENTORY_CODE            TO_SUB,
 TRL.TO_LOCATOR_ID                   TO_LOC_ID,
 TRL.LOT_NUMBER                      LOT_NUM,
 TRL.TRANSACTION_HEADER_ID           TRNS_HEAD_ID,
 trl.secondary_quantity              sec_q,
 trl.secondary_quantity_detailed     sec_dtl_q,
 trl.secondary_quantity_delivered    sec_dlv_q
from MTL_TXN_REQUEST_LINES_V   TRL,
     MTL_TXN_REQUEST_HEADERS   TRH,
     WSH_DELIVERY_DETAILS      DET,
     OE_ORDER_LINES            LIN,
     MTL_SYSTEM_ITEMS          ITM
where TRL.LINE_ID            = DET.MOVE_ORDER_LINE_ID
      --TRL.TXN_SOURCE_LINE_ID = LIN.LINE_ID
  and LIN.SHIP_FROM_ORG_ID   = ITM.ORGANIZATION_ID(+)
  and LIN.INVENTORY_ITEM_ID  = ITM.INVENTORY_ITEM_ID(+)
  and DET.SOURCE_LINE_ID     = LIN.LINE_ID
  and TRL.HEADER_ID          = TRH.HEADER_ID
  and LIN.HEADER_ID          = nvl('&header_id_selected',:v_header_id)
  and NVL('&line_id_selected',0)    in (0,LIN.LINE_ID,
                                         LIN.TOP_MODEL_LINE_ID,
                                         LIN.ATO_LINE_ID,
                                         LIN.LINK_TO_LINE_ID,
                                         LIN.REFERENCE_LINE_ID,
                                         LIN.SERVICE_REFERENCE_LINE_ID);

begin
 for mtr in mtl_trx_reql
 loop
   utl_file.put_line(handle,'&sld'||n(mtr.MO_LINE_ID)||'&d'||n(mtr.MO_NUMBER)||'&d');
   utl_file.put_line(handle,n(mtr.MV_HDR_ID)||'&d'||n(mtr.MV_LINE_NUM)||'&d');
   utl_file.put_line(handle,n(mtr.MV_LINE_STAT)||'&d'||n(mtr.LINE)||'&d');
   utl_file.put_line(handle,n(mtr.TXN_SLINE_ID)||'&d'||n(mtr.ITEM)||'&d');
   utl_file.put_line(handle,n(mtr.QTY)||'&d'||n(mtr.PRM_Q)||'&d');
   utl_file.put_line(handle,n(mtr.DLV_Q)||'&d'||n(mtr.DTL_Q)||'&d');
   utl_file.put_line(handle,n(mtr.MOVE_TYPE_NAME)||'&d'||n(mtr.TRNS_SRC_TYPE)||'&d');
   utl_file.put_line(handle,n(mtr.TRNS_TYPE_NAME)||'&d'||n(mtr.WH_ID)||'&d');
   utl_file.put_line(handle,n(mtr.FROM_SUB)||'&d'||n(mtr.FROM_LOC_ID)||'&d');
   utl_file.put_line(handle,n(mtr.TO_SUB)||'&d'||n(mtr.TO_LOC_ID)||'&d');
   utl_file.put_line(handle,n(mtr.LOT_NUM)||'&d'||n(mtr.TRNS_HEAD_ID)||'&d');
   utl_file.put_line(handle,n(mtr.SEC_Q)||'&d'||n(mtr.SEC_DTL_Q)||'&d');
   utl_file.put_line(handle,n(mtr.SEC_DLV_Q)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; --prt_inv

if UPPER(nvl('&prt_ar','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="RA_INTERFACE_LINES"> RA_INTERFACE_LINES (RAI) - RECEIVABLES INTERFACE LINES </a> <a HREF="#RAI">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_LINE_ID &dh BATCH_SOURCE &dh ITEM_ID &dh QTY &dh ORD_Q &dh UOM &dh PRICE &dh SO_LIN &dh AR_ID &dh IR_ID &dh');
UTL_FILE.PUT_LINE(handle,'LINE_TYPE &dh Order_Num_1 &dh Order_Type_2 &dh Delivery_3 &dh WayBill_4 &dh Line_ID_6 &dh Pick_Line_Id_7 &dh Bill_Lading_8 &dh ');
UTL_FILE.PUT_LINE(handle,'WH_ID_10 &dh PA_ID_11 &dh C_RATE &dh C_DATE &dh CURR &dh TR &dh S_TAX_ID &dh VAT_ID &dh EF &dh TERR_ID &eh');

Declare
cursor ra_int_lin is
select distinct
            RAI.INTERFACE_LINE_ID             INTF_LINE_ID,
            RAI.BATCH_SOURCE_NAME             BATCH_SOURCE,
            RAI.INVENTORY_ITEM_ID             ITEM_ID,
            RAI.QUANTITY                      QTY,
            RAI.QUANTITY_ORDERED              ORD_Q,
            RAI.UOM_CODE                      UOM,
            RAI.AMOUNT                        PRICE,
            trim(RAI.SALES_ORDER_LINE)        SO_LIN,
            RAI.ACCOUNTING_RULE_ID            AR_ID,
            RAI.INVOICING_RULE_ID             IR_ID,
            RAI.LINE_TYPE                     LINE_TYPE,
            RAI.INTERFACE_LINE_ATTRIBUTE1     Order_Num_1,
            RAI.INTERFACE_LINE_ATTRIBUTE2     Order_Type_2,
            RAI.INTERFACE_LINE_ATTRIBUTE3     Delivery_3,
            RAI.INTERFACE_LINE_ATTRIBUTE4     WayBill_4,
            RAI.INTERFACE_LINE_ATTRIBUTE6     Line_ID_6,
            RAI.INTERFACE_LINE_ATTRIBUTE7     Pick_Line_Id_7,
            RAI.INTERFACE_LINE_ATTRIBUTE8     Bill_Lading_8,
            RAI.INTERFACE_LINE_ATTRIBUTE10    WH_ID_10,
            RAI.INTERFACE_LINE_ATTRIBUTE11    PA_ID_11,
            RAI.CONVERSION_RATE               C_RATE,
            to_Char(RAI.CONVERSION_DATE,'DD-MON-RR_HH24:MI:SS') C_DATE,
            RAI.CURRENCY_CODE                 CURR,
            RAI.TAX_RATE                      TR,
            RAI.SALES_TAX_ID                  S_TAX_ID,
            RAI.VAT_TAX_ID                    VAT_ID,
            RAI.TAX_EXEMPT_FLAG               EF,
            RAI.TERRITORY_ID                  TERR_ID
            --ENABLE_TIMESTAMP ,to_char(RAI.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
            --ENABLE_TIMESTAMP ,to_char(RAI.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
            --ENABLE_TIMESTAMP ,RAI.REQUEST_ID                                    REQUEST_ID
FROM
        RA_INTERFACE_LINES            RAI,
        OE_ORDER_LINES                LIN,
        OE_ORDER_HEADERS              ORD,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
        and  RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                 = LIN.HEADER_ID
        and  RAI.LINE_TYPE                 = 'LINE'
        and (NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and NVL(RAI.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID))
        and LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
            RAI.INTERFACE_LINE_ID             INTF_LINE_ID,
            RAI.BATCH_SOURCE_NAME             BATCH_SOURCE,
            RAI.INVENTORY_ITEM_ID             ITEM_ID,
            RAI.QUANTITY                      QTY,
            RAI.QUANTITY_ORDERED              ORD_Q,
            RAI.UOM_CODE                      UOM,
            RAI.AMOUNT                        PRICE,
            trim(RAI.SALES_ORDER_LINE)        SO_LIN,
            RAI.ACCOUNTING_RULE_ID            AR_ID,
            RAI.INVOICING_RULE_ID             IR_ID,
            RAI.LINE_TYPE                     LINE_TYPE,
            RAI.INTERFACE_LINE_ATTRIBUTE1     Order_Num_1,
            RAI.INTERFACE_LINE_ATTRIBUTE2     Order_Type_2,
            RAI.INTERFACE_LINE_ATTRIBUTE3     Delivery_3,
            RAI.INTERFACE_LINE_ATTRIBUTE4     WayBill_4,
            RAI.INTERFACE_LINE_ATTRIBUTE6     Line_ID_6,
            RAI.INTERFACE_LINE_ATTRIBUTE7     Pick_Line_Id_7,
            RAI.INTERFACE_LINE_ATTRIBUTE8     Bill_Lading_8,
            RAI.INTERFACE_LINE_ATTRIBUTE10    WH_ID_10,
            RAI.INTERFACE_LINE_ATTRIBUTE11    PA_ID_11,
            RAI.CONVERSION_RATE               C_RATE,
            to_char(RAI.CONVERSION_DATE,'DD-MON-RR_HH24:MI:SS') C_DATE,
            RAI.CURRENCY_CODE                 CURR,
            RAI.TAX_RATE                      TR,
            RAI.SALES_TAX_ID                  S_TAX_ID,
            RAI.VAT_TAX_ID                    VAT_ID,
            RAI.TAX_EXEMPT_FLAG               EF,
            RAI.TERRITORY_ID                  TERR_ID
            --ENABLE_TIMESTAMP ,to_char(RAI.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
            --ENABLE_TIMESTAMP ,to_char(RAI.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
            --ENABLE_TIMESTAMP ,RAI.REQUEST_ID                REQUEST_ID
FROM
        RA_INTERFACE_LINES            RAI,
        OE_ORDER_LINES                LIN,
        OE_ORDER_HEADERS              ORD,
        OE_PRICE_ADJUSTMENTS          ADJ,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
        and  RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                 = LIN.HEADER_ID
        and  RAI.LINE_TYPE                 = 'FREIGHT'
        and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and  to_number(RAI.INTERFACE_LINE_ATTRIBUTE6) = ADJ.PRICE_ADJUSTMENT_ID
        and  ADJ.LINE_ID                    = LIN.LINE_ID
        and  ADJ.LINE_ID                    IS NOT NULL
        and  ADJ.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
        and  LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
            RAI.INTERFACE_LINE_ID             INTF_LINE_ID,
            RAI.BATCH_SOURCE_NAME             BATCH_SOURCE,
            RAI.INVENTORY_ITEM_ID             ITEM_ID,
            RAI.QUANTITY                      QTY,
            RAI.QUANTITY_ORDERED              ORD_Q,
            RAI.UOM_CODE                      UOM,
            RAI.AMOUNT                        PRICE,
            trim(RAI.SALES_ORDER_LINE)        SO_LIN,
            RAI.ACCOUNTING_RULE_ID            AR_ID,
            RAI.INVOICING_RULE_ID             IR_ID,
            RAI.LINE_TYPE                     LINE_TYPE,
            RAI.INTERFACE_LINE_ATTRIBUTE1     Order_Num_1,
            RAI.INTERFACE_LINE_ATTRIBUTE2     Order_Type_2,
            RAI.INTERFACE_LINE_ATTRIBUTE3     Delivery_3,
            RAI.INTERFACE_LINE_ATTRIBUTE4     WayBill_4,
            RAI.INTERFACE_LINE_ATTRIBUTE6     Line_ID_6,
            RAI.INTERFACE_LINE_ATTRIBUTE7     Pick_Line_Id_7,
            RAI.INTERFACE_LINE_ATTRIBUTE8     Bill_Lading_8,
            RAI.INTERFACE_LINE_ATTRIBUTE10    WH_ID_10,
            RAI.INTERFACE_LINE_ATTRIBUTE11    PA_ID_11,
            RAI.CONVERSION_RATE               C_RATE,
            to_char(RAI.CONVERSION_DATE,'DD-MON-RR_HH24:MI:SS')  C_DATE,
            RAI.CURRENCY_CODE                 CURR,
            RAI.TAX_RATE                      TR,
            RAI.SALES_TAX_ID                  S_TAX_ID,
            RAI.VAT_TAX_ID                    VAT_ID,
            RAI.TAX_EXEMPT_FLAG               EF,
            RAI.TERRITORY_ID                  TERR_ID
            --ENABLE_TIMESTAMP ,to_char(RAI.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
            --ENABLE_TIMESTAMP ,to_char(RAI.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
            --ENABLE_TIMESTAMP ,RAI.REQUEST_ID                                    REQUEST_ID
FROM
        RA_INTERFACE_LINES            RAI,
        OE_ORDER_HEADERS              ORD,
        OE_PRICE_ADJUSTMENTS          ADJ,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
        and  RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  RAI.LINE_TYPE                 = 'FREIGHT'
        and  ADJ.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
        and  ADJ.LINE_ID                   IS NULL
        and  ORD.HEADER_ID                 = nvl('&header_id_selected',:v_header_id);

begin
 for ril in ra_int_lin
 loop
   utl_file.put_line(handle,'&sld'||n(ril.INTF_LINE_ID)||'&d'||n(ril.BATCH_SOURCE)||'&d');
   utl_file.put_line(handle,n(ril.ITEM_ID)||'&d'||n(ril.QTY)||'&d');
   utl_file.put_line(handle,n(ril.ORD_Q)||'&d'||n(ril.UOM)||'&d');
   utl_file.put_line(handle,n(ril.PRICE)||'&d'||n(ril.SO_LIN)||'&d');
   utl_file.put_line(handle,n(ril.AR_ID)||'&d'||n(ril.IR_ID)||'&d');
   utl_file.put_line(handle,n(ril.LINE_TYPE)||'&d'||n(ril.ORDER_NUM_1)||'&d');
   utl_file.put_line(handle,n(ril.ORDER_TYPE_2)||'&d'||n(ril.DELIVERY_3)||'&d');
   utl_file.put_line(handle,n(ril.WAYBILL_4)||'&d'||n(ril.LINE_ID_6)||'&d');
   utl_file.put_line(handle,n(ril.PICK_LINE_ID_7)||'&d'||n(ril.BILL_LADING_8)||'&d');
   utl_file.put_line(handle,n(ril.WH_ID_10)||'&d'||n(ril.PA_ID_11)||'&d');
   utl_file.put_line(handle,n(ril.C_RATE)||'&d'||n(ril.C_DATE)||'&d');
   utl_file.put_line(handle,n(ril.CURR)||'&d'||n(ril.TR)||'&d');
   utl_file.put_line(handle,n(ril.S_TAX_ID)||'&d'||n(ril.VAT_ID)||'&d');
   utl_file.put_line(handle,n(ril.EF)||'&d'||n(ril.TERR_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f RA_INTERFACE_ERRORS (RAE) - RECEIVABLES INTERFACE ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTERFACE_LINE_ID &dh INTERFACE_SALESCREDIT_ID &dh MESSAGE_TEXT &eh');

Declare
cursor ra_int_err is
select distinct
   RAE.INTERFACE_LINE_ID,
   RAE.INTERFACE_SALESCREDIT_ID,
   RAE.MESSAGE_TEXT
FROM
        RA_INTERFACE_LINES            RAI,
        RA_INTERFACE_ERRORS           RAE,
        OE_ORDER_LINES                LIN,
        OE_ORDER_HEADERS              ORD,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAI.SALES_ORDER               = to_char(ORD.ORDER_NUMBER)
        and  RAI.INTERFACE_LINE_ID         = RAE.INTERFACE_LINE_ID
        and  RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID             = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                 = LIN.HEADER_ID
        and (NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and NVL(RAI.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID))
        and LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
   RAE.INTERFACE_LINE_ID,
   RAE.INTERFACE_SALESCREDIT_ID,
   RAE.MESSAGE_TEXT
FROM
        RA_INTERFACE_LINES            RAI,
        RA_INTERFACE_ERRORS           RAE,
        OE_ORDER_LINES                LIN,
        OE_ORDER_HEADERS              ORD,
        OE_PRICE_ADJUSTMENTS          ADJ,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
        and  RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  RAI.INTERFACE_LINE_ID         = RAE.INTERFACE_LINE_ID
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                 = LIN.HEADER_ID
        and  RAI.LINE_TYPE                 = 'FREIGHT'
        and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and  to_number(RAI.INTERFACE_LINE_ATTRIBUTE6) = ADJ.PRICE_ADJUSTMENT_ID
        and  ADJ.LINE_ID                    = LIN.LINE_ID
        and  ADJ.LINE_ID                    IS NOT NULL
        and  ADJ.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
        and  LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
   RAE.INTERFACE_LINE_ID,
   RAE.INTERFACE_SALESCREDIT_ID,
   RAE.MESSAGE_TEXT
FROM
        RA_INTERFACE_LINES            RAI,
        RA_INTERFACE_ERRORS           RAE,
        OE_ORDER_HEADERS              ORD,
        OE_PRICE_ADJUSTMENTS          ADJ,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
        and  RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  RAI.INTERFACE_LINE_ID         = RAE.INTERFACE_LINE_ID
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  RAI.LINE_TYPE                 = 'FREIGHT'
        and  ADJ.HEADER_ID                 = nvl('&header_id_selected',:v_header_id)
        and  ADJ.LINE_ID                   IS NULL
        and  ORD.HEADER_ID                 = nvl('&header_id_selected',:v_header_id);

begin
 for rie in ra_int_err
 loop
   utl_file.put_line(handle,'&sld'||n(rie.INTERFACE_LINE_ID)||'&d'||n(rie.INTERFACE_SALESCREDIT_ID)||'&d');
   utl_file.put_line(handle,n(rie.MESSAGE_TEXT)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="RA_CUSTOMER_TRX"> RA_CUSTOMER_TRX (RAH) - INVOICE HEADERS </a> <a HREF="#RAH">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh CUST_TRX_ID &dh TRX_NUMBER &dh TRX_TYPE_ID &dh TRX_DATE &dh BATCH_ID &dh SOURCE_ID &dh BILL_CUST &dh BILL_SITE &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_CUST &dh SHIP_SITE &dh TERM_ID &dh SALESREP_ID &dh PO_NUMBER &dh CURR &dh AGREEMENT &dh COMP_FL &dh IR_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_VIA &dh WAYBILL &dh STATUS &eh');

Declare
cursor ra_cus_trx is
select distinct
            RAH.CUSTOMER_TRX_ID           CUST_TRX_ID,
            RAH.TRX_NUMBER                TRX_NUMBER,
            RAH.CUST_TRX_TYPE_ID          TRX_TYPE_ID,
            to_char(RAH.TRX_DATE,'DD-MON-RR_HH24:MI:SS')   TRX_DATE,
            RAH.BATCH_ID                  BATCH_ID,
            RAH.BATCH_SOURCE_ID           SOURCE_ID,
            RAH.BILL_TO_CUSTOMER_ID       BILL_CUST,
            RAH.BILL_TO_SITE_USE_ID       BILL_SITE,
            RAH.SHIP_TO_CUSTOMER_ID       SHIP_CUST,
            RAH.SHIP_TO_SITE_USE_ID       SHIP_SITE,
            RAH.TERM_ID                   TERM_ID,
            RAH.PRIMARY_SALESREP_ID       SALESREP_ID,
            RAH.PURCHASE_ORDER            PO_NUMBER,
            RAH.INVOICE_CURRENCY_CODE     CURR,
            RAH.AGREEMENT_ID              AGREEMENT,
            RAH.COMPLETE_FLAG             COMP_FL,
            RAH.INVOICING_RULE_ID         IR_ID,
            RAH.SHIP_VIA                  SHIP_VIA,
            RAH.WAYBILL_NUMBER            WAYBILL,
            RAH.STATUS_TRX                STATUS
            --ENABLE_TIMESTAMP ,to_char(RAH.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
            --ENABLE_TIMESTAMP ,to_char(RAH.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
            --ENABLE_TIMESTAMP ,RAH.REQUEST_ID                REQUEST_ID
FROM
        RA_CUSTOMER_TRX               RAH,
        RA_CUSTOMER_TRX_LINES         RAL,
        OE_ORDER_LINES                LIN,
        OE_ORDER_HEADERS              ORD,
        OE_TRANSACTION_TYPES_V        TYP
WHERE
             RAH.CUSTOMER_TRX_ID           = RAL.CUSTOMER_TRX_ID
        and  RAL.SALES_ORDER               = to_char(ORD.ORDER_NUMBER)
        and  RAL.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                 = LIN.HEADER_ID
        and  NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and NVL(RAL.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id)
ORDER BY
        RAH.TRX_NUMBER;

begin
 for rct in ra_cus_trx
 loop
   utl_file.put_line(handle,'&sld'||n(rct.CUST_TRX_ID)||'&d'||n(rct.TRX_NUMBER)||'&d');
   utl_file.put_line(handle,n(rct.TRX_TYPE_ID)||'&d'||n(rct.TRX_DATE)||'&d');
   utl_file.put_line(handle,n(rct.BATCH_ID)||'&d'||n(rct.SOURCE_ID)||'&d');
   utl_file.put_line(handle,n(rct.BILL_CUST)||'&d'||n(rct.BILL_SITE)||'&d');
   utl_file.put_line(handle,n(rct.SHIP_CUST)||'&d'||n(rct.SHIP_SITE)||'&d');
   utl_file.put_line(handle,n(rct.TERM_ID)||'&d'||n(rct.SALESREP_ID)||'&d');
   utl_file.put_line(handle,n(rct.PO_NUMBER)||'&d'||n(rct.CURR)||'&d');
   utl_file.put_line(handle,n(rct.AGREEMENT)||'&d'||n(rct.COMP_FL)||'&d');
   utl_file.put_line(handle,n(rct.IR_ID)||'&d'||n(rct.SHIP_VIA)||'&d');
   utl_file.put_line(handle,n(rct.WAYBILL)||'&d'||n(rct.STATUS)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="RA_CUSTOMER_TRX_LINES"> RA_CUSTOMER_TRX_LINES (RAL) - INVOICE LINES </a> <a HREF="#RAL">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh TRX_LINE_ID &dh LINK_TO_ID &dh CUST_TRX_ID &dh TRX_NUMBER &dh SOURCE &dh LINE_NUM &dh ITEM_ID &dh ORD_Q &dh ');
UTL_FILE.PUT_LINE(handle,'INV_Q &dh CRD_Q &dh UOM &dh PRICE &dh EXTD_AMT &dh REV_AMT &dh SO_LIN &dh LINE_TYPE &dh Order_Num_1 &dh Order_Type_2 &dh ');
UTL_FILE.PUT_LINE(handle,'Delivery_3 &dh WayBill_4 &dh Line_ID_5 &dh Bill_Lading_8 &dh WH_ID_10 &dh PA_ID_11 &dh TF &dh TR &dh VAT_ID &dh S_TAX_ID &eh');

Declare
cursor ra_cus_trxl is
select distinct
            RAL.CUSTOMER_TRX_LINE_ID          TRX_LINE_ID,
            RAL.LINK_TO_CUST_TRX_LINE_ID      LINK_TO_ID,
            RAL.CUSTOMER_TRX_ID               CUST_TRX_ID,
            RAH.TRX_NUMBER                    TRX_NUMBER,
            RAL.SALES_ORDER_SOURCE            SOURCE,
            RAL.LINE_NUMBER                   LINE_NUM,
            RAL.INVENTORY_ITEM_ID             ITEM_ID,
            RAL.QUANTITY_ORDERED              ORD_Q,
            RAL.QUANTITY_INVOICED             INV_Q,
            RAL.QUANTITY_CREDITED             CRD_Q,
            RAL.UOM_CODE                      UOM,
            RAL.UNIT_SELLING_PRICE            PRICE,
            RAL.EXTENDED_AMOUNT               EXTD_AMT,
            RAL.REVENUE_AMOUNT                REV_AMT,
            TRIM(RAL.SALES_ORDER_LINE)        SO_LIN,
            RAL.LINE_TYPE                     LINE_TYPE,
            RAL.INTERFACE_LINE_ATTRIBUTE1     Order_Num_1,
            RAL.INTERFACE_LINE_ATTRIBUTE2     Order_Type_2,
            RAL.INTERFACE_LINE_ATTRIBUTE3     Delivery_3,
            RAL.INTERFACE_LINE_ATTRIBUTE4     WayBill_4,
            RAL.INTERFACE_LINE_ATTRIBUTE6     Line_ID_5,
            RAL.INTERFACE_LINE_ATTRIBUTE8     Bill_Lading_8,
            RAL.INTERFACE_LINE_ATTRIBUTE10    WH_ID_10,
            RAL.INTERFACE_LINE_ATTRIBUTE11    PA_ID_11,
            RAL.TAXABLE_FLAG                  TF,
            RAL.TAX_RATE                      TR,
            RAL.VAT_TAX_ID                    VAT_ID,
            RAL.SALES_TAX_ID                  S_TAX_ID
            --ENABLE_TIMESTAMP ,to_char(RAL.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
            --ENABLE_TIMESTAMP ,to_char(RAL.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
            --ENABLE_TIMESTAMP ,RAL.REQUEST_ID                REQUEST_ID
FROM
        RA_CUSTOMER_TRX               RAH,
        RA_CUSTOMER_TRX_LINES         RAL
WHERE
        RAH.CUSTOMER_TRX_ID               = RAL.CUSTOMER_TRX_ID
    and RAL.CUSTOMER_TRX_LINE_ID in
   (select RAL1.CUSTOMER_TRX_LINE_ID
    FROM
            RA_CUSTOMER_TRX               RAH1,
            RA_CUSTOMER_TRX_LINES         RAL1,
            OE_ORDER_LINES                LIN,
            OE_ORDER_HEADERS              ORD,
            OE_TRANSACTION_TYPES_V        TYP
    WHERE
             RAH1.CUSTOMER_TRX_ID           = RAL1.CUSTOMER_TRX_ID
        and  RAL1.SALES_ORDER               = to_char(ORD.ORDER_NUMBER)
        and  RAL1.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID       = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                 = LIN.HEADER_ID
        and  NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and NVL(RAL1.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and LIN.HEADER_ID                  = nvl('&header_id_selected',:v_header_id))
UNION
select /* LINKED LINES */
        distinct
            RAL.CUSTOMER_TRX_LINE_ID          TRX_LINE_ID,
            RAL.LINK_TO_CUST_TRX_LINE_ID      LINK_TO_ID,
            RAL.CUSTOMER_TRX_ID               CUST_TRX_ID,
            RAH.TRX_NUMBER                    TRX_NUMBER,
            RAL.SALES_ORDER_SOURCE            SOURCE,
            RAL.LINE_NUMBER                   LINE_NUM,
            RAL.INVENTORY_ITEM_ID             ITEM_ID,
            RAL.QUANTITY_ORDERED              ORD_Q,
            RAL.QUANTITY_INVOICED             INV_Q,
            RAL.QUANTITY_CREDITED             CRD_Q,
            RAL.UOM_CODE                      UOM,
            RAL.UNIT_SELLING_PRICE            PRICE,
            RAL.EXTENDED_AMOUNT               EXTD_AMT,
            RAL.REVENUE_AMOUNT                REV_AMT,
            TRIM(RAL.SALES_ORDER_LINE)        SO_LIN,
            RAL.LINE_TYPE                     LINE_TYPE,
            RAL.INTERFACE_LINE_ATTRIBUTE1     Order_Num_1,
            RAL.INTERFACE_LINE_ATTRIBUTE2     Order_Type_2,
            RAL.INTERFACE_LINE_ATTRIBUTE3     Delivery_3,
            RAL.INTERFACE_LINE_ATTRIBUTE4     WayBill_4,
            RAL.INTERFACE_LINE_ATTRIBUTE6     Line_ID_5,
            RAL.INTERFACE_LINE_ATTRIBUTE8     Bill_Lading_8,
            RAL.INTERFACE_LINE_ATTRIBUTE10    WH_ID_10,
            RAL.INTERFACE_LINE_ATTRIBUTE11    PA_ID_11,
            RAL.TAXABLE_FLAG                  TF,
            RAL.TAX_RATE                      TR,
            RAL.VAT_TAX_ID                    VAT_ID,
            RAL.SALES_TAX_ID                  S_TAX_ID
            --ENABLE_TIMESTAMP ,to_char(RAL.CREATION_DATE,'DD-MON-RR_HH24:MI:SS')    CREATE_DT
            --ENABLE_TIMESTAMP ,to_char(RAL.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
            --ENABLE_TIMESTAMP ,RAL.REQUEST_ID                                    REQUEST_ID
FROM
        RA_CUSTOMER_TRX               RAH,
        RA_CUSTOMER_TRX_LINES         RAL
WHERE
     RAH.CUSTOMER_TRX_ID               = RAL.CUSTOMER_TRX_ID
 and RAL.LINK_TO_CUST_TRX_LINE_ID in
   (select RAL1.CUSTOMER_TRX_LINE_ID
    FROM
            RA_CUSTOMER_TRX               RAH1,
            RA_CUSTOMER_TRX_LINES         RAL1,
            OE_ORDER_LINES                LIN,
            OE_ORDER_HEADERS              ORD,
            OE_TRANSACTION_TYPES_V        TYP
    WHERE
             RAH1.CUSTOMER_TRX_ID           = RAL1.CUSTOMER_TRX_ID
        and  RAL1.SALES_ORDER               = to_char(ORD.ORDER_NUMBER)
        and  RAL1.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
        and  TYP.TRANSACTION_TYPE_ID        = ORD.ORDER_TYPE_ID
        and  ORD.HEADER_ID                  = LIN.HEADER_ID
        and  NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and NVL(RAL1.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
                                             LIN.TOP_MODEL_LINE_ID,
                                             LIN.ATO_LINE_ID,
                                             LIN.LINK_TO_LINE_ID,
                                             LIN.REFERENCE_LINE_ID,
                                             LIN.SERVICE_REFERENCE_LINE_ID)
        and LIN.HEADER_ID                   = nvl('&header_id_selected',:v_header_id))
order by
        TRX_NUMBER,
        TRX_LINE_ID;

begin
 for rctl in ra_cus_trxl
 loop
   utl_file.put_line(handle,'&sld'||n(rctl.TRX_LINE_ID)||'&d'||n(rctl.LINK_TO_ID)||'&d');
   utl_file.put_line(handle,n(rctl.CUST_TRX_ID)||'&d'||n(rctl.TRX_NUMBER)||'&d');
   utl_file.put_line(handle,n(rctl.SOURCE)||'&d'||n(rctl.LINE_NUM)||'&d');
   utl_file.put_line(handle,n(rctl.ITEM_ID)||'&d'||n(rctl.ORD_Q)||'&d');
   utl_file.put_line(handle,n(rctl.INV_Q)||'&d'||n(rctl.CRD_Q)||'&d');
   utl_file.put_line(handle,n(rctl.UOM)||'&d'||n(rctl.PRICE)||'&d');
   utl_file.put_line(handle,n(rctl.EXTD_AMT)||'&d'||n(rctl.REV_AMT)||'&d');
   utl_file.put_line(handle,n(rctl.SO_LIN)||'&d'||n(rctl.LINE_TYPE)||'&d');
   utl_file.put_line(handle,n(rctl.ORDER_NUM_1)||'&d'||n(rctl.ORDER_TYPE_2)||'&d');
   utl_file.put_line(handle,n(rctl.DELIVERY_3)||'&d'||n(rctl.WAYBILL_4)||'&d');
   utl_file.put_line(handle,n(rctl.LINE_ID_5)||'&d'||n(rctl.BILL_LADING_8)||'&d');
   utl_file.put_line(handle,n(rctl.WH_ID_10)||'&d'||n(rctl.PA_ID_11)||'&d');
   utl_file.put_line(handle,n(rctl.TF)||'&d'||n(rctl.TR)||'&d');
   utl_file.put_line(handle,n(rctl.VAT_ID)||'&d'||n(rctl.S_TAX_ID)||'&el');
 end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; --prt_ar

end if; -- :v_head_only

-- Column descriptions for each table
UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <CENTER> COLUMN DEFINITIONS </CENTER> &eh &et &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="OOH">OE_ORDER_HEADERS (ORD)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld OP  => OPEN FLAG      &d  BK  => BOOKED FLAG          &d SP  => PARTIAL SHIPMENTS ALLOWED &el ');
UTL_FILE.PUT_LINE(handle,'&sld CN  => CANCEL FLAG    &d  STA => SHIP TOLERANCE ABOVE &d STB => SHIP TOLERANCE BELOW &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="OOL">OE_ORDER_LINES (LIN)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  SHN_Q => SHIPPING QUANTITY    &d  OP  => OPEN FLAG            &d  ORG => ORGANIZATION CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld  SHP_Q => SHIPPED QUANTITY     &d  BK  => BOOKED FLAG          &d  SI  => Shipping Interfaced Flag &el');
UTL_FILE.PUT_LINE(handle,'&sld  FUL_Q => FULFILLED QUANTITY   &d  SH  => SHIPPABLE FLAG       &d  II  => Inventory Interfaced Flag &el');
UTL_FILE.PUT_LINE(handle,'&sld  CAN_Q => CANCELLED QUANTITY   &d  CN  => CANCELLED FLAG       &d  ATO => ATO FLAG  &el');
UTL_FILE.PUT_LINE(handle,'&sld  INC_Q => INVOICED QUANTITY    &d  VD  => VISIBLE DEMAND FLAG  &d  OPT => OPTION FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld  RES_Q => RESERVATION QUANTITY &d  SMC => SHIP MODEL COMPLETE  &d  FF  => FULFILLED_FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld  LCN_Q => LAST CANCELLED QTY   &d  CAL_PR => CALCULATE PRICE   &d &sp &el');
UTL_FILE.PUT_LINE(handle,'&sld  STA   => SHIP TOLERANCE ABOVE &d  STB => SHIP TOLERANCE BELOW &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

if UPPER(nvl('&prt_price','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="ADJC">APPLIED and UN-APPLIED HEADER PRICE ADJUSTMENTS (ADJ)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  MOD_LVL   => MODIFIER_LEVEL    &d IF  => INVOICED FLAG    &d  LK  => LOCK CONTROL  &el');
UTL_FILE.PUT_LINE(handle,'&sld  CHG_TY_CD => CHARGE_TYPE_CODE  &d EF  => ESTIMATED FLAG   &d  PP  => PRICING PHASE &el');
UTL_FILE.PUT_LINE(handle,'&sld  CD        => CREDIT_OR_DEBIT   &d UA  => UPDATE ALLOWED   &d  PI  => PRINT ON INVOICE &el');
UTL_FILE.PUT_LINE(handle,'&sld  AF        => AUTOMATIC FLAG    &d UF  => UPDATED FLAG     &d  AP  => APPLIED FLAG     &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="ALA">APPLIED AND UNAPPLIED LINE PRICE ADJUSTMENTS</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MOD_LVL    => MODIFIER_LEVEL_CODE       &d CD => CREDIT_OR_CHARGE_FLAG &d UA => UPDATE_ALLOWED &el');
UTL_FILE.PUT_LINE(handle,'&sld CHG_TY_CD  => CHARGE_TYPE_CODE          &d AF => AUTOMATIC_FLAG        &d UF => UPDATED_FLAG   &el');
UTL_FILE.PUT_LINE(handle,'&sld ARITH_OP   => ARITHMETIC_OPERATOR       &d PI => PRINT_ON_INVOICE_FLAG &d AP => APPLIED_FLAG   &el');
UTL_FILE.PUT_LINE(handle,'&sld OP_PER_QTY => OPERAND_PER_PQTY          &d AC => ACCRUAL_FLAG          &d LK => LOCK_CONTROL   &el');
UTL_FILE.PUT_LINE(handle,'&sld ADJ_AMT_PO => ADJUSTED_AMOUNT_PER_PQTY  &d EF => ESTIMATED_FLAG        &d PERC => PERCENT      &el');
UTL_FILE.PUT_LINE(handle,'&sld ADJ_AMT    => ADJUSTED_AMOUNT           &d PP => PRICING_PHASE_ID      &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

end if; -- prt_price

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="WDD">WSH_DELIVERY_DETAILS (DET)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  MO_LINE_ID => MOVE ORDER LINE ID          &d  DLV_Q      => DELIVERED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  DELIV_ID   => DELIVERY ID                 &d  CAN_Q      => CANCELLED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  SRQ_Q      => SOURCE REQUESTED QUANTITY   &d  SRQ_U      => SOURCE REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld  REQ_Q      => REQUESTED QUANTITY          &d  REQ_U      => REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld  OMI        => ORDER MANAGEMENT INTERFACED &d  INI        => INVENTORY INTERFACED &el');
UTL_FILE.PUT_LINE(handle,'&sld  PIKF       => PICKABLE_FLAG               &d  PIK_Q      => PICKED_QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  SHP_Q      => SHIPPED QUANTITY            &d  ORG_SUB    => ORIGINAL SUBINVENTORY   &el');
UTL_FILE.PUT_LINE(handle,'&sld  CUR_SUB    => CURRENT SUBINVENTORY        &d  CF         => CONTAINER FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld  FL_PERC    => FILL PERCENTAGE             &d  SHP_SET    => SHIP_SET_ID  &el');
UTL_FILE.PUT_LINE(handle,'&sld  STA        => SHIP TOLERANCE ABOVE        &d  STB        => SHIP TOLERANCE BELOW &el');
UTL_FILE.PUT_LINE(handle,'&sld  TRX_TEMP_ID=> TRANSACTION_TEMP_ID         &d  TOP_MO_LIN => TOP_MODEL_LINE_ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  SHP_MC     => SHIP_MODEL_COMPLETE_FLAG    &d  SPL_DEL_DET_ID ==> SPLIT FROM DEL.DETAIL ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="WSN">WSH_SERIAL_NUMBERS (WSN)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  DET_DET_ID => DELIVERY DETAIL ID          &d  DLV_Q      => DELIVERED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  REL_STATUS => RELEASED STATUS             &d  CAN_Q      => CANCELLED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  SRQ_Q      => SOURCE REQUESTED QUANTITY   &d  SRQ_U      => SOURCE REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld  REQ_Q      => REQUESTED QUANTITY          &d  REQ_U      => REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld  OMI        => ORDER MANAGEMENT INTERFACED &d  INI        => INVENTORY INTERFACED &el');
UTL_FILE.PUT_LINE(handle,'&sld  PIKF       => PICKABLE_FLAG               &d  PIK_Q      => PICKED_QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  SHP_Q      => SHIPPED QUANTITY            &d  ORG_SUB    => ORIGINAL SUBINVENTORY   &el');
UTL_FILE.PUT_LINE(handle,'&sld  CUR_SUB    => CURRENT SUBINVENTORY        &d  CF         => CONTAINER FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld  FL_PERC    => FILL PERCENTAGE             &d  SHP_SET    => SHIP_SET_ID  &el');
UTL_FILE.PUT_LINE(handle,'&sld  STA        => SHIP TOLERANCE ABOVE        &d  STB        => SHIP TOLERANCE BELOW &el');
UTL_FILE.PUT_LINE(handle,'&sld  SHP_MC     => SHIP_MODEL_COMPLETE_FLAG    &d  SPL_DEL_DET_ID ==> SPLIT FROM DEL.DETAIL ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

if UPPER(nvl('&prt_inv','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="MR">MTL_RESERVATIONS (RES)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  RES_Q      => PRIMARY RESERVATION QUANTITY &d  DET_Q      => DETAILED QUANTITY   &el');
UTL_FILE.PUT_LINE(handle,'&sld  DS_TYPE    => DEMAND SOURCE TYPE           &d  WH_ID      => ORGANIZATION ID    &el');
UTL_FILE.PUT_LINE(handle,'&sld  SS_TYPE_ID => SUPPLY SOURCE TYPE ID        &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="MTI">MTL_TRANSACTIONS_INTERFACE (MTI)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  TRX_INT_ID  => TRANSACTION_INTERFACE_ID &d PRM_Q      => PRIMARY QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  LCK         => LOCK CODE                &d FROM_SUB   => FROM SUBINVENTORY &el');
UTL_FILE.PUT_LINE(handle,'&sld  FROM_LOC_ID => FROM LOCATOR ID          &d TRANS_MODE => TRANSACTION MODE &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="TMP">MTL_MATERIAL_TRANSACTIONS_TEMP (TMP) - UNPICKED LINES</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  MTL_TRNS_ID => MTL TRANSACTION ID          &d  PICK_SLIP   => PICK SLIP NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld  PRM_Q       => PRIMARY QUANTITY            &d  LCK         => LOCK CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld  FROM_SUB    => FROM SUBINVENTORY           &d  FROM_LOC_ID => FROM LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  TRANS_MODE  => TRANSACTION MODE            &d  &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="TRN">MTL_MATERIAL_TRANSACTIONS (TRN) - PICKED LINES</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  MTL_TRNS_ID => MTL TRANSACTION ID          &d  TRANS_TYPE  => TRANSACTION TYPE &el');
UTL_FILE.PUT_LINE(handle,'&sld  PRM_Q       => PRIMARY QUANTITY            &d  LCK         => LOCK CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld  FROM_SUB    => FROM SUBINVENTORY           &d  FROM_LOC_ID => FROM LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  TO_SUB      => TO SUBINVENTORY             &d  TO_LOC_ID   => TO LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  TRANS_MODE  => TRANSACTION MODE            &d  &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="UNT">MTL_UNIT_TRANSACTIONS (UNT)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  TRANS_ID    => TRANSACTION ID              &d  SUBINV          => SUBINVENTRY CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld  LOC_ID      => LOCATOR ID                  &d  SERIAL_NUM      => SERIAL NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld  WH_ID       => WAREHOUSE ID                &d  TRX_DATE        => TRANSACTION DATE &el');
UTL_FILE.PUT_LINE(handle,'&sld  TRX_SRC_ID  => TRANSACTION SOURCE ID       &d  TRX_SRC_TYPE_ID => TRANSACTION SOURCE TYPE ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  CUST_ID     => CUSTOMER ID                 &d  SHIP_ID         => SHIPMENT ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="MOV">MTL_TXN_REQUEST_LINES_V (MOV) - MOVE TRANSACTIONS</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  MO_LINE_ID   => MOVE ORDER LINE ID          &d  MO_NUMBER   => MOVE ORDER NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld  MV_HDR_ID    => MOVE ORDER HEADER ID        &d  MV_LINE_NUM => MOVE ORDER LINE NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld  MV_LINE_STAT => MOVE ORDER LINE STATUS      &d  TXN_SLINE_ID=> TRANSACTION SOURCE LINE ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  PRM_Q        => PRIMARY QUANTITY            &d  DLV_Q       => DELIVERED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  DTL_Q        => DETAILED QUANTITY           &d  WH_ID       => WAREHOUSE ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  FROM_SUB     => FROM SUBINVENTORY           &d  FROM_LOC_ID => FROM LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  TO_SUB       => TO SUBINVENTORY             &d  TO_LOC_ID   => TO LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  LOT_NUM      => LOT NUMBER                  &d  TRNS_HEAD_ID=> TRANSACTION HEADER ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

end if; -- prt_inv

if UPPER(nvl('&prt_ar','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="RAI">RA_INTERFACE_LINES (RAI)</a>  &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  QTY    => QUANTITY             &d   IR_ID    => INVOICING RULE ID    &d  TR       => TAX RATE  &el');
UTL_FILE.PUT_LINE(handle,'&sld  ORD_Q  => ORDERED QUANTITY     &d   PA_ID_11 => PRICE ADJUSTMENT ID  &d  EF       => TAX EXEMPT FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld  SO_LIN => SALES ORDER LINE ID  &d   C_RATE   => CONVERSION RATE      &d  S_TAX_ID => SALES TAX ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  AR_ID  => ACCOUNTING RULE ID   &d   C_DATE   => CONVERSION DATE      &d  CURR     => CURRENCY CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld  WH_ID  => WAREHOUSE ID         &d   VAT_ID   => VALUE ADDED TAX ID   &d  EF       => TAX EXEMPT FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld  TERR_ID=> TERRITORY ID         &d   &sp      &d  &sp  &el  &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="RAH">RA_CUSTOMER_TRX (RAH) - INVOICE HEADERS</a>  &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  CUST_TRX_ID => CUSTOMER TRANSACTION ID  &d TRX_NUMBER  => TRANSACTION NUMBER  &d TRX_DATE   => TRANSACTION DATE  &el');
UTL_FILE.PUT_LINE(handle,'&sld  CURR        => CURRENCY                 &d COMP_FL     => COMPLETE FLAG       &d IR_ID      => INVOICING RULE ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="RAL">RA_CUSTOMER_TRX_LINES (RAL) - INVOICE LINES</a>  &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld  TRX_LINE_ID => TRANSACTION LINE ID  &d CUST_TRX_ID => CUSTOMER TRANSACTION ID  &d TRX_NUMBER => TRANSACTION NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld  ORD_Q       => ORDERED QUANTITY     &d INV_Q       => INVOICED QUANTITY        &d CRD_Q      => CREDITED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld  EXTD_AMT    => EXTENDED AMOUNT      &d REV_AMT     => REVISED AMOUNT           &d PA_ID_11   => PRICE ADJUSTMENT ID &el');
UTL_FILE.PUT_LINE(handle,'&sld  TF          => TAXABLE FLAG         &d TR          => TAX RATE                 &d VAT_ID     => VALUE ADDED TAX ID &el  &et');

end if; -- prt_ar

UTL_FILE.PUT_LINE(handle,'&f &f');

-- Closing Time
select '&std &sh Script completion time: &eh &sld '||to_char(sysdate,'DD-MON-RR_HH24:MI:SS')||' &el &et &f &f'
       into text
  from dual;
UTL_FILE.PUT_LINE(handle,text);

UTL_FILE.PUT_LINE(handle,'</HTML>');

-- Close output file

   UTL_FILE.FCLOSE(handle);
END;
/

此脚本用于诊断销售订单的所有信息,运行完成后生产html报表,放在服务器上;

好了下面开始研究UTL_FILE包

包中主要的函数

FOPEN

IS_OPEN

GET_LINE

PUT

NEW_LINE

PUT_LINE

PUTF

FFLUSH

FCLOSE

FCLOSE_ALL

使用utl_file包之前应先建立目录

create or replace directory BFILE_DIR as

‘f:/home/oracle/bfiletest‘;

给用户读写该目录的权限

grant read,write on directory BFILE_DIR  to lunar;

GRANT EXECUTE ON utl_file TO wangyh

UTL_FILE.FOPEN

用法

FOPEN会打开指定文件并返回一个文件句柄用于操作文件。

FUNCTION UTL_FILE.FOPEN (

location     IN VARCHAR2,

filename     IN VARCHAR2,

open_mode    IN VARCHAR2,

max_linesize IN BINARY_INTEGER)

RETURN file_type;

参数

location

文件地址

filename

文件名

openmode

打开文件的模式(参见下面说明)

max_linesize

文件每行最大的字符数,包括换行符。最小为1,最大为32767

3种文件打开模式:

R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。

W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用

A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用

打开文件时注意以下几点:

文件路径和文件名合起来必须表示操作系统中一个合法的文件。

文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。

如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。

如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。

FOPEN 会抛出以下异常

UTL_FILE.INVALID_MODE

UTL_FILE.INVALID_OPERATION

UTL_FILE.INVALID_PATH

UTL_FILE.INVALID_MAXLINESIZE

UTL_FILE.IS_OPEN用法

如果文件句柄指定的文件已打开,返回TRUE,否则FALSE

FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;

UTL_FILE只提供一个方法去读取数据:GET_LINE

UTL_FILE.GET_LINE用法

读取指定文件的一行到提供的缓存。

PROCEDURE UTL_FILE.GET_LINE

(file IN UTL_FILE.FILE_TYPE,

buffer OUT VARCHAR2);

file

由FOPEN返回的文件句柄

buffer

读取的一行数据的存放缓存

buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。

异常

NO_DATA_FOUND

VALUE_ERROR

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.READ_ERROR

UTL_FILE.PUT用法

在当前行输出数据

PROCEDURE UTL_FILE.PUT

(file IN UTL_FILE.FILE_TYPE,

buffer OUT VARCHAR2);

file

由FOPEN返回的文件句柄

buffer

包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B

UTL_FILE.PUT输出数据时不会附加行终止符。

UTL_FILE.PUT会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR

UTL_FILE.NEW_LINE

在当前位置输出新行或行终止符,必须使用NEW_LINE来结束当前行,或者使用PUT_LINE输出带有行终止符的完整行数据。

PROCEDURE UTL_FILE.NEW_LINE

(file IN UTL_FILE.FILE_TYPE,

lines IN NATURAL := 1);

file

由FOPEN返回的文件句柄

lines

要插入的行数

如果不指定lines参数,NEW_LINE会使用默认值1,在当前行尾换行。如果要插入一个空白行,可以使用以下语句:

UTL_FILE.NEW_LINE (my_file, 2);

如果lines参数为0或负数,什么都不会写入文件。

NEW_LINE会产生以下异常

VALUE_ERROR

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR

例子

如果要在UTL_FILE.PUT后立刻换行,可以如下例所示:

PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)

IS

BEGIN

UTL_FILE.PUT (file_in, line_in);

UTL_FILE.NEW_LINE (file_in);

END;

UTL_FILE.PUT_LINE

输出一个字符串以及一个与系统有关的行终止符

PROCEDURE UTL_FILE.PUT_LINE

(file IN UTL_FILE.FILE_TYPE,

buffer IN VARCHAR2);

file

由FOPEN返回的文件句柄

buffer

包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B

在调用UTL_FILE.PUT_LINE前,必须先打开文件。

UTL_FILE.PUT_LINE会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR

例子

这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:

declare

fileID UTL_FILE.FILE_TYPE;

BEGIN

fileID := UTL_FILE.FOPEN (‘BFILE_DIR‘, ‘emp.TXT‘, ‘W‘);

/* Quick and dirty construction here! */

FOR emprec IN (SELECT * FROM emp)

LOOP

UTL_FILE.PUT_LINE

(FILEID,TO_CHAR (emprec.empno) || ‘,‘ ||

emprec.ename || ‘,‘ ||

TO_CHAR (emprec.deptno));

END LOOP;

UTL_FILE.FCLOSE (fileID);

END;

/

GRANT READ ON DIRECTORY BFILE_DIR TO SCOTT;

GRANT write ON DIRECTORY BFILE_DIR TO SCOTT;PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%s\n"。

UTL_FILE.PUTF

以一个模版样式输出至多5个字符串,类似C中的printf

PROCEDURE UTL_FILE.PUTF

(file IN FILE_TYPE

,format IN VARCHAR2

,arg1 IN VARCHAR2 DEFAULT NULL

,arg2 IN VARCHAR2 DEFAULT NULL

,arg3 IN VARCHAR2 DEFAULT NULL

,arg4 IN VARCHAR2 DEFAULT NULL

,arg5 IN VARCHAR2 DEFAULT NULL);

file

由FOPEN返回的文件句柄

format

决定格式的格式串

argN

可选的5个参数,最多5个

格式串可使用以下样式

%s

在格式串中可以使用最多5个%s,与后面的5个参数一一对应

\n

换行符。在格式串中没有个数限制

%s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件

UTL_FILE.PUTF会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR

declare

fileID UTL_FILE.FILE_TYPE;

BEGIN

fileID := UTL_FILE.FOPEN (‘BFILE_DIR‘, ‘emp.TXT‘, ‘W‘);

/* Quick and dirty construction here! */

FOR emprec IN (SELECT * FROM emp)

LOOP

UTL_FILE.PUTf

(FILEID,TO_CHAR (emprec.empno) || ‘,‘ ||

emprec.ename || ‘,‘ ||

TO_CHAR (emprec.deptno),‘,‘);

utl_file.new_line(fileid);

END LOOP;

UTL_FILE.FCLOSE (fileID);

END;

/

UTL_FILE.FFLUSH

确保所有数据写入文件。

PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);

file

由FOPEN返回的文件句柄

操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。

典型的使用方法包括分析执行进度和调试纪录。

UTL_FILE.FFLUSH会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR

UTL_FILE.FCLOSE

关闭文件

PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);

file

由FOPEN返回的文件句柄

注意file是一个IN OUT参数,因为在关闭文件后会设置为NULL

当试图关闭文件时有缓存数据未写入文件,会抛出WRITE_ERROR异常

UTL_FILE.FCLOSE会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.WRITE_ERROR

UTL_FILE.FCLOSE_ALL

关闭所有已打开的文件

PROCEDURE UTL_FILE.FCLOSE_ALL;

在结束程序时要确保所有打开的文件已关闭,可使用FCLOSE_ALL

也可以在EXCEPTION使用,当异常退出时,文件也会被关闭。

EXCEPTION

WHEN OTHERS

THEN

UTL_FILE.FCLOSE_ALL;

... other clean up activities ...

END;

注意:当使用FCLOSE_ALL关闭所有文件时,文件句柄并不会标记为NULL,使用IS_OPEN会返回TRUE。但是,那些关闭的文件不能执行读写操作(除非你再次打开文件)。

UTL_FILE.FCLOSE_ALL会产生以下异常

UTL_FILE.WRITE_ERROR

其他的资料

0.为避免目录修改导致程序的修改,目录可以定义为一个常量,或ORACLE的directory。

1.fopen的模式: R(只读),W(读写,且首先清除原有数据),A(读写,原有数据基础上追加数据)。

fopen的限制:

(1)目录和文件名必须合法

(2)目录必须存在

(3)若为R模式,文件必须存在

(4)若为W模式,若文件不存在,则自动创建

(5)若为A模式,则文件必须存在

2.is_open:检查文件是否打开(其实只检查句柄是否为空,比如fclose_all关闭的文件,is_open仍返回true)。

3.get_line:读取一行数据到varchar2变量中。

nvarchar2数据使用get_line_nchar;raw数据使用get_raw。

读取到文件末尾,产生no_data_found异常。还有如下三种情况也会产生no_data_found异常

(1)无返回行的select

(2)pl/sql集合中未定义的行

(3)使用dbms_lob读取bfile文件至末尾。

所以以上四种no_data_found情况在一个pl/sql块中,要区分捕获异常

4.put

9.fclose:若关闭前缓冲区中仍有未写入文件的数据,则触发write_error异常

.fclose_all:关闭所有打开的文件。关闭后,所有文件的句柄不变(仍为非NULL),例如测试中

步骤3使用fclose_all关闭文件,而is_opened仍为TRUE。但此时文件以不可读写。

原因:fclose传入文件句柄参数,且为IN OUT模式,调用后将句柄设置为NULL,而fclose_all

并未传入任何文件句柄参数,所以并未修改文件句柄的值(仍保持原值)。

6.frename:可以重命名文件,也可重命名路径(相当于FCOPY+FREMOVE),也可都改变

7.putf:put format

8.fgetattr:获取文件属性(是否存在,大小,块大小)

*/

PROCEDURE prc_utl_file

IS

file_read_handle utl_file.file_type;

file_write_handle utl_file.file_type;

is_opened BOOLEAN;

v_one_line VARCHAR2(1000);

b_file_exist BOOLEAN;

n_file_length NUMBER(10,2);

bi_block_size BINARY_INTEGER;

BEGIN

--1.读/读写模式打开文件

file_read_handle := utl_file.fopen(‘TEST_UTL_FILE_DIR_READ‘, ‘orcl_ora_396.trc‘, ‘R‘);

file_write_handle := utl_file.fopen(‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE.txt‘, ‘W‘);

--2.检查文件是否打开

is_opened := utl_file.is_open(file_read_handle);

IF is_opened THEN

dbms_output.put_line(‘file is opened‘);

ELSE

dbms_output.put_line(‘file is not opened‘);

END IF;

--3.读文件

LOOP

BEGIN

utl_file.get_line(file_read_handle, v_one_line);

dbms_output.put_line(v_one_line);

-- 4.将读入结果写入新文件中

utl_file.put(file_write_handle, v_one_line);

utl_file.new_line(file_write_handle, 2);

--utl_file.put_line(file_write_handle, v_one_line);

--utl_file.put_line(file_write_handle, v_one_line, TRUE);

EXCEPTION

WHEN no_data_found THEN

EXIT;

WHEN OTHERS THEN

dbms_output.put_line(‘error1:‘||SQLERRM);

EXIT;

END;

END LOOP;

--5.关闭文件

utl_file.fclose(file_read_handle);

--6确认所有未决的数据都写到物理文件中

--utl_file.fflush(file_write_handle);

utl_file.fclose(file_write_handle);

--utl_file.fclose_all;

--6.检查文件是否关闭

is_opened := utl_file.is_open(file_read_handle);

IF is_opened THEN

dbms_output.put_line(‘file is still opened‘);

ELSE

dbms_output.put_line(‘file is already closed‘);

END IF;

--7.拷贝文件

utl_file.fcopy(‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE.txt‘, ‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE_COPY.txt‘, 1, 10);

--8.删除文件

utl_file.fcopy(‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE.txt‘, ‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE_COPY_DELETE.txt‘, 1, 10);

utl_file.fremove(‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE_COPY_DELETE.txt‘);

--9.重命名

--utl_file.frename(‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE_COPY.txt‘, ‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE_COPY_DELETE_RENAME.txt‘, FALSE);

--10.获取重命名后的文件属性

utl_file.fgetattr(‘TEST_UTL_FILE_DIR_WRITE‘, ‘TEST_UTL_FILE_DIR_WRITE_COPY.txt‘,b_file_exist,n_file_length, bi_block_size);

IF b_file_exist THEN

dbms_output.put_line(‘n_file_length:‘||n_file_length||‘\n‘||‘bi_block_size‘||bi_block_size);

END IF;

END;

时间: 2024-10-05 08:54:29

utl_file包的使用的相关文章

oracle读写文件--利用utl_file包对磁盘文件的读写操作

摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做,后来想起ORACLE有很多包,功能很好很强大,于是网上参考了些文章完成了. 主要是用了ORACLE的两个包:UTL_FILE和DBMS_LOB. 实现过程: 第一步:以管理员用户登陆设置可操作目录 --CREATE DIRECTORY privilege is granted only to SYS and SYSTEM by default. create or

Oracle之UTL_FILE 包用法详解

UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服务器端的文件访问功能. 创建测试目录: 新建一个command window: 创建目录:(以system用户登录数据库) Sql代码 收藏代码 SQL> create or replace directory cux_log_dir as '/home/appltest/debug'; Directory created 赋权限. Sql代码 收藏代码 SQL> grant read, wr

oracle中utl_file包读写文件操作实例学习

在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create or replace directory TESTFILE as '/home/oracle/zxx/test'; --给用户授权 grant read, write on directory TESTFILE to zxx; 详细介绍 http://download.oracle.com/docs

ORACLE之UTL_FILE包详解

1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        1.alter system set utl_file_dir='e:/utl' scope=spfile;        2.在init.ora文件中,配置如下:UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl;(2)Oracle10g之后的版本,只需要先创建一个路径即可.

Oracle的UTL_FILE.FOPEN学习笔记

Oracle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN负责打开一个文件. UTL_FILE.FOPEN(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE; Location 是路径参数, FILENAME 是文件名, OPEN_MODE是打开模式,'R'是读文本,'W'是写文本,'A'是附加文本,参数不分大小写,如果指定'A'但是文件不存在,它会用'W'先

Oracle学习笔记十四 内置程序包

扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STANDARD 定义和扩展PL/SQL语言环境 DBMS_LOB 提供对 LOB数据类型进行操作的功能 DBMS_OUTPUT 处理PL/SQL块和子程序输出调试信息 DBMS_RANDOM 提供随机数生成器 DBMS_SQL 允许用户使用动态 SQL DBMS_XMLDOM 用DOM模型读写XML类型的数

PL/SQL之--包

一.包 包是一组相关过程.函数.常量.变量.游标.异常等PL/SQL程序设计元素的组合.它类似于C++和Java中的类,其中变量相当于类中的成员变量,过程和函数相当于类中的方法.通过使用包,可以使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统的性能. 包的结构如下: 一个包由包头和包主体组成: 包头(package):包头部分声明包内数据类型.变量.常量.游标.子程序(只有声明)和异常错误处理等元素,这些元素为包的共有元素. 包主体(package body):包主体则是包定义部分的

UTL_FILE

在PL/SQL中,UTL_FILE包提供文本文件输入和输出功能. 可以访问的目录通过初始化参数UTL_FILE_DIR设置. 注意:UTL_FILE只能读取服务器端文本文件,不能读取二进制文件.这时候,应该使用DBMS_LOB包. 使用UTL_FILE包的方法是打开文件文件,执行文件内容写入和读取等操作,然后关闭这个文件.如果不关闭这个文件,操作系统会认为这个文件当前正在使用中,不允许在关闭之前再次写入这个文件. 下表列出了UTL_FILE包的主要函数.过程及描述. 下表列出了该报的异常情况及描

oracle程序包的原理和使用

程序包 程序包的定义:      程序包是对相关过程.函数.变量.游标和异常等对象的封装 程序包由规范和主体两部分组成 优点:      模块化.更轻松的应用程序设计.信息隐藏.新增功能.性能更佳. 创建包头包体的基本操作如下: create or replace package pack1 --创建包头/规范 is aa number := 1 ; --在包头声明的为公有变量 procedure update_student (update_row in student %rowtype );