Friday, 26 December 2025

Generate GST TAX_INVOICE_NUM in Shipping for India Localization in Oracle APPS R12

Case: GST TAX_INVOICE_NUM in Shipping for India Localization is not generated.

Fix: 

Option-1: We need to insert records for these delivery-Ids into ja.jai_wsh_exceptions_t table and then run "India - Process Delivery OM/INV Interface" request.

BEGIN
    INSERT INTO ja.jai_wsh_exceptions_t
                (exception_id,
                 delivery_id,
                 exception_type,
                 exception_entity,
                 error_message)
    VALUES      (2222,
                 15723609,
                 'U', --U : User Defined E : Unhandled
                 'OM_INTERFACE',
                 'GST Inv not generated');

    COMMIT;
END; 

Option-2: 

/*API To Generate GST TAX_INVOICE_NUM in Shipping for India Localization in APPS R12*/
DECLARE
    v_process_status  VARCHAR2(30);
    v_process_message VARCHAR2(2000);
    CURSOR c IS
      SELECT a.entity_code,
             a.event_class_code,
             a.event_type_code,
             a.tax_event_class_code,
             a.tax_event_type_code,
             a.trx_id,
             SYSDATE tax_invoice_date
      FROM   jai_tax_det_factors a,
             jai_tax_lines x
      WHERE  a.det_factor_id = x.det_factor_id
             AND a.trx_id = 15723609 --DELIVERY_ID
             AND a.application_id = 707
             AND a.entity_code = 'SALES_ORDER_ISSUE'
      HAVING Max(x.tax_invoice_num) IS NULL
      GROUP  BY a.entity_code,
                a.event_class_code,
                a.event_type_code,
                a.tax_event_class_code,
                a.tax_event_type_code,
                a.trx_id;
BEGIN
    FOR c1 IN c LOOP
        jai_inv_num_gen_pkg.Process_generation(pn_application_id => 707,
        pv_entity_code => c1.entity_code, pv_event_class_code =>
        c1.event_class_code,
        pv_event_type_code => c1.event_type_code,
        pv_tax_event_class_code => c1.tax_event_class_code,
        pv_tax_event_type_code => c1.tax_event_type_code,
        pv_interface_flag => NULL, pn_trx_id => c1.trx_id,
        pn_delivery_id => c1.trx_id,
        pd_invoice_date => c1.tax_invoice_date,
        pv_process_status => v_process_status,
        pv_process_message => v_process_message);

        dbms_output.Put_line('Status=>'
                             ||v_process_status
                             ||':'
                             ||v_process_message);

        --FND_FILE.PUT_LINE(FND_FILE.LOG,'Status=>'||v_process_status||':'||v_process_message);
        COMMIT;
    END LOOP;
END; 

Wednesday, 24 December 2025

API to Book existing Sales Order in Oracle EBS R12

 /*Script for booking Sales Order in Oracle APPS R12*/

DECLARE
    l_api_version_number         NUMBER := 1;
    l_return_status              VARCHAR2(2000);
    l_msg_count                  NUMBER;
    l_msg_data                   VARCHAR2(2000);
    l_debug_level                NUMBER := 1; -- OM DEBUG LEVEL (MAX 5)
    -- IN Variables —
    l_header_rec                 oe_order_pub.header_rec_type;
    l_line_tbl                   oe_order_pub.line_tbl_type;
    l_action_request_tbl         oe_order_pub.request_tbl_type;
    -- OUT Variables —
    l_header_rec_out             oe_order_pub.header_rec_type;
    l_header_val_rec_out         oe_order_pub.header_val_rec_type;
    l_header_adj_tbl_out         oe_order_pub.header_adj_tbl_type;
    l_header_adj_val_tbl_out     oe_order_pub.header_adj_val_tbl_type;
    l_header_price_att_tbl_out   oe_order_pub.header_price_att_tbl_type;
    l_header_adj_att_tbl_out     oe_order_pub.header_adj_att_tbl_type;
    l_header_adj_assoc_tbl_out   oe_order_pub.header_adj_assoc_tbl_type;
    l_header_scredit_tbl_out     oe_order_pub.header_scredit_tbl_type;
    l_header_scredit_val_tbl_out oe_order_pub.header_scredit_val_tbl_type;
    l_line_tbl_out               oe_order_pub.line_tbl_type;
    l_line_val_tbl_out           oe_order_pub.line_val_tbl_type;
    l_line_adj_tbl_out           oe_order_pub.line_adj_tbl_type;
    l_line_adj_val_tbl_out       oe_order_pub.line_adj_val_tbl_type;
    l_line_price_att_tbl_out     oe_order_pub.line_price_att_tbl_type;
    l_line_adj_att_tbl_out       oe_order_pub.line_adj_att_tbl_type;
    l_line_adj_assoc_tbl_out     oe_order_pub.line_adj_assoc_tbl_type;
    l_line_scredit_tbl_out       oe_order_pub.line_scredit_tbl_type;
    l_line_scredit_val_tbl_out   oe_order_pub.line_scredit_val_tbl_type;
    l_lot_serial_tbl_out         oe_order_pub.lot_serial_tbl_type;
    l_lot_serial_val_tbl_out     oe_order_pub.lot_serial_val_tbl_type;
    l_action_request_tbl_out     oe_order_pub.request_tbl_type;
    l_msg_index                  NUMBER;
    l_data                       VARCHAR2(2000);
    l_loop_count                 NUMBER;
    l_debug_file                 VARCHAR2(200);
    b_return_status              VARCHAR2(200);
    b_msg_count                  NUMBER;
    b_msg_data                   VARCHAR2(2000);
BEGIN
    IF ( l_debug_level > 0 ) THEN
      l_debug_file := oe_debug_pub.Set_debug_mode('FILE');
      oe_debug_pub.initialize;
      oe_debug_pub.Setdebuglevel(l_debug_level);
      oe_msg_pub.initialize;
    END IF;

    mo_global.Init('ONT');
    fnd_global.Apps_initialize (user_id => 2739, resp_id => 50278,
    resp_appl_id => 660);
    mo_global.Set_policy_context('S', 105);
    oe_msg_pub.initialize;
    l_header_rec := oe_order_pub.g_miss_header_rec;
    l_header_rec.operation := oe_globals.g_opr_update;
    l_header_rec.header_id := 10445902;

    -- To BOOK the Sales Order
    L_action_request_tbl(1) := oe_order_pub.g_miss_request_rec;
    L_action_request_tbl(1).request_type := oe_globals.g_book_order;
    L_action_request_tbl(1).entity_code := oe_globals.g_entity_header;
    L_action_request_tbl(1).entity_index := 1;
    dbms_output.Put_line('Calling API');

    oe_order_pub.Process_order(p_api_version_number => l_api_version_number,
    p_header_rec => l_header_rec, p_line_tbl => l_line_tbl,
    p_action_request_tbl => l_action_request_tbl,
    --OUT variables
    x_header_rec => l_header_rec_out, x_header_val_rec => l_header_val_rec_out,
    x_header_adj_tbl => l_header_adj_tbl_out,
    x_header_adj_val_tbl => l_header_adj_val_tbl_out,
    x_header_price_att_tbl => l_header_price_att_tbl_out,
    x_header_adj_att_tbl => l_header_adj_att_tbl_out,
    x_header_adj_assoc_tbl => l_header_adj_assoc_tbl_out,
    x_header_scredit_tbl => l_header_scredit_tbl_out,
    x_header_scredit_val_tbl => l_header_scredit_val_tbl_out,
    x_line_tbl => l_line_tbl_out, x_line_val_tbl => l_line_val_tbl_out,
    x_line_adj_tbl => l_line_adj_tbl_out,
    x_line_adj_val_tbl => l_line_adj_val_tbl_out,
    x_line_price_att_tbl => l_line_price_att_tbl_out,
    x_line_adj_att_tbl => l_line_adj_att_tbl_out,
    x_line_adj_assoc_tbl => l_line_adj_assoc_tbl_out,
    x_line_scredit_tbl => l_line_scredit_tbl_out,
    x_line_scredit_val_tbl => l_line_scredit_val_tbl_out,
    x_lot_serial_tbl => l_lot_serial_tbl_out,
    x_lot_serial_val_tbl => l_lot_serial_val_tbl_out,
    x_action_request_tbl => l_action_request_tbl_out,
    x_return_status => l_return_status, x_msg_count => l_msg_count,
    x_msg_data => l_msg_data);

    IF l_return_status = fnd_api.g_ret_sts_success THEN
      dbms_output.Put_line('Return status is success ');

      COMMIT;
    ELSE
      dbms_output.Put_line('Return status failure ');

      IF ( l_debug_level > 0 ) THEN
        dbms_output.Put_line('failure');
      END IF;

      ROLLBACK;
    END IF;

    -- Display Return Status
    IF ( l_debug_level > 0 ) THEN
      dbms_output.Put_line('process ORDER ret status IS: '
                           || l_return_status);

      dbms_output.Put_line('process ORDER msg data IS: '
                           || l_msg_data);

      dbms_output.Put_line('header.order_number IS: '
                           || To_char(l_header_rec_out.order_number));

      dbms_output.Put_line('header.header_id IS: '
                           ||l_header_rec_out.header_id);

      dbms_output.Put_line('header.order_source_id IS: '
                           || l_header_rec_out.order_source_id);

      dbms_output.Put_line('header.flow_status_code IS: '
                           || l_header_rec_out.flow_status_code);
    END IF;

    --Display ERROR Messages
    IF ( l_debug_level > 0 ) THEN
      FOR i IN 1 .. l_msg_count LOOP
          l_data := oe_msg_pub.Get(p_msg_index => i, p_encoded => 'F');

          dbms_output.Put_line(i
                               || ') '
                               || l_data);
      END LOOP;
    END IF;

    IF ( l_debug_level > 0 ) THEN
      oe_debug_pub.debug_off;
    END IF;
END;