Login
Register

Home

Trainings

Fusion Blog

EBS Blog

Authors

CONTACT US

Oracle Grants
  • Register

Oracle Gold Partners, our very popular training packages, training schedule is listed here
Designed by Five Star Rated Oracle Press Authors & Oracle ACE's.

webinar new

Search Courses

This article is mostly a technical explanation of how encumbrances can be migrated from open Purchase Orders into Oracle Grants / Oracle Projects.

In oracle applications, my exposure to encumbrances is related to those in Oracle Purchasing / iProcurement, Oracle Payables, Labor Distributions. Firstly, let me tell you that Oracle Applications Encumbrance functionality is very rich, it works well and is also very stable. But it did take Oracle some time to stabilise & deliver feature rich encumbrance Functionality.

My client was already live with Oracle Purchasing & iProcurement when this migration requirement came through. Prior to migration, the encumbrances were pushed into GL via the Oracle Purchasing module.

When implementing Oracle Grants/ Oracle Projects, some of my clients GL Codes were mapped to Grants Awards, Projects, Tasks & Expenditure type.
Before migration, the Encumbrances for such GL codes wouldn't be visible from Grants in either the Award status  (ASI) or the Project Status (PSI) screen. The challenge was not only to make those encumbrances visible from GMS [Grants Management System], but also to have those liquidated/reversed when purchase orders were matched to Oracle Payables Invoices. Not only that, upon matching invoices in Payables, award status screen must then show those earlier encumbrances as actuals.

There are now three subsections below, and you may wish to read those that interest you.
            Section 1. Challenges
            Section 2. Steps undertaken
            Section 3. Notes

Overall this task was of medium complexity, but challenges were :-
1.
Ensuring that all Open Purchase Orders regardless of their Approval/Reservation status were successfully migrated to POETA.
2. To ensure that after switching the relevant Purchase Orders to POETA, those purchase Orders must be Re-Encumbered Successfully. See the note at very end to find how this was ensured.
3. To ensure that all the PO's that were approved prior to migration were Re-Approved successfully without invoking the Approval Workflow and also without having to update any Oracle table.
4. Use Oracle API's at as many possible places. No direct updates to any of the Oracle tables were to be done. Considering there aren't many public API's to help achieve these tasks, I had to do plenty digging to find the APIs that forms and workflows etc called. Those internal API's were re-used, hence avoiding any direct table updates.
5. Some of the PO_DISTRBUTION_LINES records were partially matched. Hence such Distributions had to be split into two.

Following steps were undertaken
All the below steps were accomplished by writing various procedures and functions within a PL/SQL Package
Step 1.
Update the logged in User Id that executes migration program to be that of the Employee that can approve any Purchase Order.
See Note 4 below.
Step 2.
Run Payables Accounting Process and Program Create Journal in GL
Doing so will ensure that PO Distribution table is in synch with the latest set of matched invoices.
Step 3.
Load the data into a table say xx_eligible_po_dist_4_gms_enc
Create a local procedure for doing so.
      INSERT INTO xx_eligible_po_dist_4_gms_enc
        (po_header_id
        ,po_line_id
        ,line_location_id
        ,po_distribution_id
        ,code_combination_id
        ,po_status
        ,old_quantity_ordered
        ,old_quantity_cancelled
        ,old_quantity_billed
        ,old_quantity_delivered
        ,fnd_request_id)
        SELECT pod.po_header_id
              ,pod.po_line_id
              ,pod.line_location_id
              ,pod.po_distribution_id
              ,pod.code_combination_id
              ,po_headers_sv3.get_po_status(phea.po_header_id)
              ,pod.quantity_ordered
              ,pod.quantity_cancelled
              ,pod.quantity_billed
              ,pod.quantity_delivered
              ,g_conc_request_id
        FROM po_line_locations    pll
            ,po_distributions     pod
            ,po_headers           phea
            ,po_lines             pol
            ,po_lookup_codes      plc
            ,po_line_types        plt
            ,xx_enc_eligible_projects   eep
            ,gl_code_combinations glcc
        WHERE pod.line_location_id = pll.line_location_id AND
              pol.po_line_id = pod.po_line_id AND
              pol.line_type_id = plt.line_type_id AND
              nvl(pll.closed_code
                 ,
'OPEN') NOT IN ('CLOSED', 'FINALLY CLOSED') AND
              nvl(pol.closed_code
                 ,
'OPEN') NOT IN ('CLOSED', 'FINALLY CLOSED') AND
              pll.shipment_type IN (
'STANDARD', 'BLANKET', 'SCHEDULED') AND
              nvl(pll.closed_code
                 ,
'OPEN') = plc.lookup_code AND
              plc.lookup_type =
'DOCUMENT STATE' AND
              nvl(pll.cancel_flag
                 ,
'N') = 'N' AND nvl(pol.cancel_flag
                                    ,
'N') = 'N' AND
              glcc.code_combination_id = pod.code_combination_id AND
              (glcc.segment3 LIKE
'P%' OR glcc.segment3 LIKE 'R%') AND
              phea.po_header_id = pol.po_header_id AND
              pod.quantity_ordered - pod.quantity_cancelled -
              pod.quantity_billed >
0 AND
              phea.authorization_status IN
              (
'APPROVED', 'IN PROCESS', 'INCOMPLETE', 'REQUIRES REAPPROVAL') AND
              eep.project_code = glcc.segment3 AND status <>
'CLOSED';

Next Update the above entries in the table with POETA
    PROCEDURE load_poeta_info_for_tab IS
    l_poeta_rec r_poeta_rec_type;
  BEGIN
    FOR p_rec IN (SELECT tt.code_combination_id
                  FROM xx_eligible_po_dist_4_gms_enc tt
                  WHERE tt.fnd_request_id = g_conc_request_id
                  GROUP BY tt.code_combination_id)
    LOOP
      l_poeta_rec := get_poeta_rec_for_ccid
         (p_gl_code_combination_id => p_rec.code_combination_id);
      UPDATE xx_eligible_po_dist_4_gms_enc tab_poeta
      SET tab_poeta.project_id            = l_poeta_rec.project_id
         ,tab_poeta.expenditure_org_id    = l_poeta_rec.expenditure_org_id
         ,tab_poeta.expenditure_type      = l_poeta_rec.expenditure_type
         ,tab_poeta.task_id               = l_poeta_rec.task_id
         ,tab_poeta.award_id              = l_poeta_rec.award_id
         ,tab_poeta.expenditure_item_date = l_poeta_rec.expenditure_item_date
      WHERE tab_poeta.code_combination_id = p_rec.code_combination_id;
    END LOOP;
  END load_poeta_info_for_tab;

            
Step 4. Validate the POETA information loaded into above table by calling api's
        gms_transactions_pub.validate_transaction
                                (p_project_id            => p_rec.project_id
                                ,p_task_id               => p_rec.task_id
                                ,p_award_id              => p_rec.award_id
                                ,p_expenditure_type      => p_rec.expenditure_type
                                ,p_expenditure_item_date => p_rec.expenditure_item_date
                                ,p_calling_module        => '
POXPOEPO'
                                ,p_outcome               => v_gms_outcome);
        pa_transactions_pub.validate_transaction(
                                 p_rec.project_id
                                ,p_rec.task_id
                                ,p_rec.expenditure_item_date
                                      ,p_rec.expenditure_type
                                      ,NULL
                                      ,141 --<EmployeeWithMaxApprovalLimit>
                                      ,NULL
                                      ,'
GBP' --x_denom_currency_code
                                      ,'
GBP' --x_acct_currency_code
                                      ,p_rec.denom_raw_cost --denom_raw_cost
                                      ,p_rec.denom_raw_cost --x_acct_raw_cost
                                      ,NULL --x_acct_rate_type
                                      ,NULL --x_acct_rate_date
                                      ,NULL --x_acct_exchange_rate
                                      ,NULL --transfer_ei
                                      ,p_rec.expenditure_org_id --x_expenditure_org_id
                                      ,NULL --nl_resource_org_id
                                      ,NULL --transaction_source
                                      ,'
POXPOEPO' --x_form_name
                                      ,p_rec.vendor_id
                                      ,1054 -- x_last_updated_by <GlobalApprover>
                                      ,NULL --x_attribute_category
                                      ,NULL --x_attribute1
                                      ,NULL --x_attribute2
                                      ,NULL --x_attribute3
                                      ,NULL --x_attribute4
                                      ,NULL --x_attribute5
                                      ,NULL --x_attribute6
                                      ,NULL --x_attribute7
                                      ,NULL --x_attribute8
                                      ,NULL --x_attribute9
                                      ,NULL --x_attribute10
                                      ,NULL --x_attribute11
                                      ,NULL --x_attribute12
                                      ,NULL --x_attribute13
                                      ,NULL --x_attribute14
                                      ,NULL --x_attribute15
                                      ,x_msg_application
                                      ,x_msg_type
                                      ,x_msg_token1
                                      ,x_msg_token2
                                      ,x_msg_token3
                                      ,x_msg_count
                                      ,x_msg_data
                                      ,x_billable_flag);

The POETA records that fail validation must be flagged and reported, so that they are'nt processed for migration.
Step 5.
Now we are ready to roll. Finally Loop through the eligible PO Lines and move them to POETA.
Please find the psuedo code below
    LOOP FOR ALL ELIGIBLE PO LINES
      debug_log(
'Processing p_get_pos.po_header_id=>' ||
                p_get_pos.po_header_id ||
' status=>' || p_get_pos.status);
      BEGIN
        IF does_invvalid_account_exist(p_po_header_id => p_get_pos.po_header_id)
        THEN
          RAISE gl_code_inactive;
        END IF;
     
        IF does_invalid_budget_acct_exist(p_po_header_id => p_get_pos.po_header_id)
        THEN
          RAISE gl_code_inactive;
        END IF;
     
        IF check_invalid_locations_exists(p_po_header_id => p_get_pos.po_header_id)
        THEN
          RAISE invalid_location;
        END IF;
       
--Now here we would only have the validated PO's.
       
--The POETA that was'nt validated were rejected during the
       
--validate_gms and validate_pa stages
        b_originally_reserved_flag := is_orig_po_reserved(p_get_pos.status);
        b_originally_approved_flag := is_orig_po_approved(p_get_pos.status);
     
        IF b_originally_reserved_flag AND
           non_reserved_line_exists(p_po_header_id => p_get_pos.po_header_id)
        THEN
          RAISE unreserved_line_in_reserved_po;
        END IF;
       
        IF b_originally_reserved_flag AND
        does_del_more_than_order_exist(p_po_header_id => p_get_pos.po_header_id)
        THEN
          RAISE delivered_more_than_ordered;       
        END IF ;
        debug_log(
'Remove the association to Requisition.');
       
--the reason we do below, is to esure that REQ is not debited in gl_bc
        --when Unreserve is done.

        
--just updating attribute columns, hence no violation of Oracle support here
        UPDATE po_distributions_all
        SET attribute13              = req_header_reference_num ||
':' ||
                                       req_line_reference_num ||
':' ||
                                       req_distribution_id
           ,req_header_reference_num = NULL
           ,req_line_reference_num   = NULL
           ,req_distribution_id      = NULL
           ,attribute12              = to_char(gl_encumbered_date
                                              ,
'DD-MON-YYYY')
           ,gl_encumbered_date       = trunc(SYSDATE)
        WHERE po_header_id = p_get_pos.po_header_id;
     
        IF b_originally_reserved_flag
        THEN
          IF NOT unreserve_po(p_po_header_id => p_get_pos.po_header_id
                             ,p_agent_id     => p_get_pos.agent_id)
          THEN
            RAISE can_not_unreserve;
          END IF;
          debug_log(
'Successfully unreserved p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        END IF;
     
       
/* Here comes the main Logic for splitting the distribution lines*/
        split_po_distribution_lines(p_po_header_id => p_get_pos.po_header_id);
     
        IF b_originally_reserved_flag
        THEN
          IF NOT reserve_po(p_po_header_id => p_get_pos.po_header_id
                           ,p_agent_id     => p_get_pos.agent_id)
          THEN
            RAISE can_not_reserve;
          END IF;
          debug_log(
'Successfully re-reserved p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        END IF;
        IF b_originally_approved_flag
        THEN
          IF NOT approve_po(p_po_header_id => p_get_pos.po_header_id
                           ,p_agent_id     => p_get_pos.agent_id)
          THEN
            RAISE can_not_approve;
          END IF;
          debug_log(
'Successfully re-approved p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        END IF;
      EXCEPTION
        WHEN can_not_unreserve THEN
          debug_log(
'Exception in unreserving p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        WHEN can_not_reserve THEN
          debug_log(
'Exception in reserving p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        WHEN can_not_approve THEN
          debug_log(
'Exception in approving p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        WHEN gl_code_inactive THEN
          debug_log(
'GL Code is Inactive p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
        WHEN unreserved_line_in_reserved_po THEN
          debug_log
         (
'Unreserved Line Exists in Reserved PO. Skipping p_get_pos.po_header_id=>' ||
           p_get_pos.po_header_id);
        WHEN invalid_location THEN
          debug_log
          (
'Invalid Location for Ship-to or Bill-to. Skipping p_get_pos.po_header_id=>'
           || p_get_pos.po_header_id);
        WHEN delivered_more_than_ordered THEN
          debug_log
          (
'Delivered Qty more than ordered qty. Skipping  p_get_pos.po_header_id=>' ||
                    p_get_pos.po_header_id);
      END;
      UPDATE xx_eligible_po_dist_4_gms_enc
      SET processed_flag                 =
'Y'
         ,po_status_after_process_is_run =
                  po_headers_sv3.get_po_status(p_get_pos.po_header_id)
         ,status_updated_by_request_id   = fnd_global.conc_request_id
      WHERE po_header_id = p_get_pos.po_header_id;
    END LOOP;


    Usefull API code packages for various activities in this context are
    FUNCTION reserve_po(p_po_header_id IN INTEGER
                     ,p_agent_id     IN INTEGER) RETURN BOOLEAN IS
    l_dm_call_rec po_doc_manager_pub.dm_call_rec_type;
    x_progress    VARCHAR2(
200);
    l_warning_msg VARCHAR2(
200);
    x_mesg        VARCHAR2(
200);
    l_attr_exist  NUMBER :=
0;
    v_session_id  INTEGER := userenv(
'sessionid');
  BEGIN
    l_dm_call_rec.action              :=
'RESERVE_DOCUMENT';
    l_dm_call_rec.document_type       :=
'PO';
    l_dm_call_rec.document_subtype    :=
'STANDARD';
    l_dm_call_rec.document_id         := p_po_header_id;
    l_dm_call_rec.line_id             := NULL;
    l_dm_call_rec.shipment_id         := NULL;
    l_dm_call_rec.distribution_id     := NULL;
    l_dm_call_rec.employee_id         := p_agent_id;
    l_dm_call_rec.new_document_status := NULL;
    l_dm_call_rec.offline_code        := NULL;
    l_dm_call_rec.note                := NULL;
    l_dm_call_rec.approval_path_id    := NULL;
    l_dm_call_rec.forward_to_id       := p_agent_id;
    l_dm_call_rec.action_date         := NULL;
    l_dm_call_rec.override_funds      :=
'N';
   
-- Below are the output parameters
    l_dm_call_rec.info_request     := NULL;
    l_dm_call_rec.document_status  := NULL;
    l_dm_call_rec.online_report_id := NULL;
    l_dm_call_rec.return_code      := NULL;
    l_dm_call_rec.error_msg        := NULL;
   
/* This is the variable that contains the return value from the
    ** call to the DOC MANAGER:
    ** SUCCESS =0,  TIMEOUT=1,  NO MANAGER=2,  OTHER=3
    */

    l_dm_call_rec.return_value := NULL;
 
   
/* Call the API that calls the Document manager */
    debug_log(
'Before Calling doc_manager to RESERVE');
    COMMIT;
    po_doc_manager_pub.call_doc_manager(l_dm_call_rec);
    COMMIT;
    dbms_lock.sleep(.
2);
    COMMIT;
    debug_log(
'After Calling doc_manager to RESERVE');
    debug_log(
'RESERVE p_po_header_id=>' || p_po_header_id ||
             
' L_DM_CALL_REC.Return_Value=>' ||
              l_dm_call_rec.return_value);
    IF l_dm_call_rec.return_value =
0
    THEN
      RETURN TRUE;
    END IF;
   
--capture the fact that Doc Mgr could re-reserve the PO
    log_error(p_po_header_id           => p_po_header_id
             ,p_po_distribution_id     => NULL
             ,p_gl_code_combination_id => NULL
             ,p_field_name             =>
'CAN NOT RE-RESERVE'
             ,p_error_text             => l_dm_call_rec.error_msg);
    RETURN FALSE;
   
--if doc mgr returns status 0, then return true
   
--in all other cases, return FALSE
 
  END reserve_po;

    FUNCTION approve_po(p_po_header_id IN INTEGER
                     ,p_agent_id     IN INTEGER) RETURN BOOLEAN IS
    l_dm_call_rec po_doc_manager_pub.dm_call_rec_type;
    x_progress    VARCHAR2(
200);
    l_warning_msg VARCHAR2(
200);
    x_mesg        VARCHAR2(
200);
    l_attr_exist  NUMBER :=
0;
    v_session_id  INTEGER := userenv(
'sessionid');
  BEGIN
    l_dm_call_rec.action              :=
'APPROVE_DOCUMENT';
    l_dm_call_rec.action_date         := SYSDATE;
    l_dm_call_rec.document_type       :=
'PO';
    l_dm_call_rec.document_subtype    :=
'STANDARD';
    l_dm_call_rec.document_id         := p_po_header_id;
    l_dm_call_rec.line_id             := NULL;
    l_dm_call_rec.shipment_id         := NULL;
    l_dm_call_rec.distribution_id     := NULL;
    l_dm_call_rec.employee_id         := g_buyer_employee_id;
    l_dm_call_rec.new_document_status :=
'APPROVED';
    l_dm_call_rec.offline_code        := NULL;
    l_dm_call_rec.note                := NULL;
    l_dm_call_rec.approval_path_id    := NULL;
    l_dm_call_rec.forward_to_id       := g_buyer_employee_id;
   
/*  L_DM_CALL_REC.Action_date    := NULL;*/
    l_dm_call_rec.override_funds :=
'N';
   
-- Below are the output parameters
    l_dm_call_rec.info_request     := NULL;
    l_dm_call_rec.document_status  := NULL;
    l_dm_call_rec.online_report_id := NULL;
    l_dm_call_rec.return_code      := NULL;
    l_dm_call_rec.error_msg        := NULL;
   
/* This is the variable that contains the return value from the
    ** call to the DOC MANAGER:
    ** SUCCESS =0,  TIMEOUT=1,  NO MANAGER=2,  OTHER=3
    */

    l_dm_call_rec.return_value := NULL;
   
/* Call the API that calls the Document manager */
    COMMIT;
    po_doc_manager_pub.call_doc_manager(l_dm_call_rec);
    COMMIT;
    dbms_lock.sleep(.
2);
    COMMIT;
    debug_log(
'APPROVE p_po_header_id=>' || p_po_header_id ||
             
' L_DM_CALL_REC.Return_Value=>' ||
              l_dm_call_rec.return_value);
   
--if doc mgr returns status 0, then return true
   
--in all other cases, return FALSE
    IF l_dm_call_rec.return_value =
0
    THEN
      RETURN TRUE;
    END IF;
    log_error(p_po_header_id           => p_po_header_id
             ,p_po_distribution_id     => NULL
             ,p_gl_code_combination_id => NULL
             ,p_field_name             =>
'CAN NOT APPROVE'
             ,p_error_text             => l_dm_call_rec.error_msg);
    RETURN FALSE;
  END approve_po;

    FUNCTION unreserve_po(p_po_header_id IN INTEGER
                       ,p_agent_id     IN INTEGER) RETURN BOOLEAN IS
    l_dm_call_rec po_doc_manager_pub.dm_call_rec_type;
    x_progress    VARCHAR2(
200);
    l_warning_msg VARCHAR2(
200);
    x_mesg        VARCHAR2(
200);
    l_attr_exist  NUMBER :=
0;
    v_session_id  INTEGER := userenv(
'sessionid');
  BEGIN
    l_dm_call_rec.action              :=
'UNRESERVE_DOCUMENT';
    l_dm_call_rec.action_date         := SYSDATE;
    l_dm_call_rec.document_type       :=
'PO';
    l_dm_call_rec.document_subtype    :=
'STANDARD';
    l_dm_call_rec.document_id         := p_po_header_id;
    l_dm_call_rec.line_id             := NULL;
    l_dm_call_rec.shipment_id         := NULL;
    l_dm_call_rec.distribution_id     := NULL;
    l_dm_call_rec.employee_id         := p_agent_id;
    l_dm_call_rec.new_document_status := NULL;
    l_dm_call_rec.offline_code        := NULL;
    l_dm_call_rec.note                := NULL;
    l_dm_call_rec.approval_path_id    := NULL;
    l_dm_call_rec.forward_to_id       := p_agent_id;
   
/*  L_DM_CALL_REC.Action_date    := NULL;*/
    l_dm_call_rec.override_funds :=
'N';
   
-- Below are the output parameters
    l_dm_call_rec.info_request     := NULL;
    l_dm_call_rec.document_status  := NULL;
    l_dm_call_rec.online_report_id := NULL;
    l_dm_call_rec.return_code      := NULL;
    l_dm_call_rec.error_msg        := NULL;
   
/* This is the variable that contains the return value from the
    ** call to the DOC MANAGER:
    ** SUCCESS =0,  TIMEOUT=1,  NO MANAGER=2,  OTHER=3
    */

    l_dm_call_rec.return_value := NULL;
 
   
/* Call the API that calls the Document manager */
    COMMIT;
    po_doc_manager_pub.call_doc_manager(l_dm_call_rec);
    COMMIT;
    dbms_lock.sleep(.
2);
    COMMIT;
 
    debug_log(
'UNRESERVE p_po_header_id=>' || p_po_header_id ||
             
' L_DM_CALL_REC.Return_Value=>' ||
              l_dm_call_rec.return_value);
   
--if doc mgr returns status 0, then return true
   
--in all other cases, return FALSE
    IF l_dm_call_rec.return_value =
0
    THEN
      RETURN TRUE;
    END IF;
   
--capture the fact that Doc Mgr could not un-reserve the PO
    log_error(p_po_header_id           => p_po_header_id
             ,p_po_distribution_id     => NULL
             ,p_gl_code_combination_id => NULL
             ,p_field_name             =>
'CAN NOT UNRESERVE'
             ,p_error_text             => l_dm_call_rec.error_msg);
    RETURN FALSE;
  END unreserve_po;

Step 6.
Run exceptions. I had written half a dozen SQLs for reconcilliation etc.

Step 7.
After reconcilliation, delete the Journals from GL_INTERFACE.
But before deletion please complete your reconcilliation.
You may decide not to delete those journals, but Oracle support gave  a nod to this.

Important notes for migration encumbrances to poeta

Note 1.
Internal to Oracle Encumbrances, two key tables are GMS_BC_PACKETS and GL_BC_PACKETS. Do not modify the data within these tables, treat these two tables as sacred tables. These tables are where the encumbrances are queued, which eventually hits the GL in GL_BALANCES. However, feel free to use gl_bc_packets to debug the progression of encumbrances. I learn quite a lot about encumbrances by merely studying the type of record that gets inserted into packet tables at various stages of PO/Req Entry, Approval, Reservation, Cancellation & Matching stages. The reference1 column in gl_bc_packets will tell you whether the Transaction is PO or REQ. There reference2 columns stores the respective header id, and reference3 stored the po_dist_id. Rest of the reference columns may be used, but I never bothered much as Ref1,2,3 sufficed for my requirements. Also, I must mention that GL_BC_PACKETS is for queuing encumbrances into GL. Once those encumbrances have been transferred and Posted, the respective records in GL_BC_PACKETS get deleted by running Oracle's concurrent process.

Note 2.
For some open PO's, you will be required for UnReserve, UnApprove, Modify PO with POETA and then Re-Reserve and Re-Approve the PO. For Re-Approval, make sure that your data migration Concurrent Process runs via an FND_USER that is attached to an Employee that has the highest approval limit across all cost centres for your client.

Note 3.
Given that during migration to POETA, we re-reserve the Purchase Orders, it is necessary that all the Awards against which encumbrances are being migrated have Advisory Funds Check Level. You may as well set the Advisory level to None for those Awards. This must be taken care of when migrating the Awards into Oracle Grants Accounting.

Note 4.
My client did not use internal Purchase Orders or Requisitions, hence I did not deal with those transactions. However the underlying principles must remain the same.

Note 5.
This migration task worked upon the Open Purchase Orders that had following possible statuses. I defined a global variable for each such status
  g_status_approved             VARCHAR2(50) := 'Approved';
  g_status_approved_reserved    VARCHAR2(50) := 'Approved, Reserved';
  g_status_in_process           VARCHAR2(50) := 'In Process';
  g_status_in_process_reserved  VARCHAR2(50) := 'In Process, Reserved';
  g_status_incomplete           VARCHAR2(50) := 'Incomplete';
  g_status_incomplete_reserved  VARCHAR2(50) := 'Incomplete, Reserved';
  g_status_requires_reapproval  VARCHAR2(50) := 'Requires Reapproval';
  g_status_requires_re_reserved VARCHAR2(50) := 'Requires Reapproval, Reserved';

Note 6. The Award_id that you see in po_distributions_all is not the gms_awards.award_id. For the PO_DISTRIBUTION Award_id you need to create adsl. Used Oracle API for doing so.

Note 7.
We used document manager API for Re-Approval of Purchase Order, Reservation of Purchase Order and also for Unreserving the Purchase Order.
Given that the document manager api sends a pipe signal that is read by doc mgr it happens in a different session. Not only  that, being run by a conc mgr, the doc mgr has limited slots hence give a sleep command before and after each document manager call. Reason we need to do this is to ensure that your loop execution is not faster than the load which Document Manager can undertake.


Note 8.
My client was based in UK, and they had only one single SOB. Hence i felt no risk in hardcoding the Currency Code to GBP.


Anil Passi

Comments   

0 #1 Amit 2007-05-05 00:00
Hi Anil,

I really admire you for providing all these stuff to the whole world.....God bless you.

I am a functional consultant in Oracle Projects. Pls answer some of my questions..

1. What is the scope of this application across the world as I dont find many business implementing this module?

2. Also do have you any special blog for Oracle Projects specifically? As I could not find much on Oracle Projects at your site if not where could I find this that is similar like yours.

Regar ds
Amit
Quote
0 #2 mayur 2007-05-09 00:00
Hi Anil,
I want to learn about the oracle projects fundamentals.

As you are articles are very fundu..I was looking to get any info for ioracle projects.
Can you tell some fundu resources for it?

Thanks
Quote
0 #3 Anil Passi 2007-05-09 00:00
Hi Mayur

Projec ts itself is a fundu module :-)

Tell me what is that you do not understand about Oracle Projects? I will try to explain

Chee rs
Anil
Quote
0 #4 Pakshi 2007-06-27 00:00
Hi,
I want to update the po closure code ,
is it any API avilable ?

Regards,
Pakshi
Quote
0 #5 AshishA 2007-09-04 05:10
Hi Anil,

Great Article. With reference to your first comment - that oracle functionality is very rich and stable - I have also read about issues that happen when you perform operations like cancellation of auto-created PO lines, change received shipments, unit price variance with final closing - if true, this will have impact of GL updates (from sub-ledgers) to encumberance update. What is your experience in such situations?
Quote
0 #6 deepu 2007-09-07 05:55
Hi Anil,

Really you are grate bcoz you are supporting to all world in oracle ERP, God Bless You.

Anil i am new in oracle apps, i want understand the module procure to pay, really i am facing more problem please tell me how can i well learn about this.
Quote
0 #7 Shwetatiwari 2007-10-19 06:01
Hi ,
I am trying to do a ship confirm via an API in the Custom schema.
i m gettin the following error:ORA-00942 : table or view does not exist in Package WSH_DELIVERIES_ PUB Procedure _x_
I did give grant to all the object (Tables And Pkgs )In apps.Still no luck .
Any Suggestions?

T hanks
Shweta
Quote
0 #8 vinodkumar bankupalli 2008-02-08 11:12
Anil,

can i ask any functional related issues to you

Thanks
vin od
Quote
0 #9 Sunil Shinde 2008-02-11 14:40
Hi Anil

I am a functional consultant in Oracle Projects.

1. If you update more articles related to Oracle Projects Accounting will be more feasible to the novice to go thru all the implementation phase. or else if you have any special blog for Oracle Projects specifically? As I could not find much on Oracle Projects at your site if not where could I find this that is similar like yours.

Regards
Sunil
Quote
0 #10 AshwiniAA 2008-05-22 15:42
hi Anil

In a Invoice Entry form after entering to the distribution level information. We have the "Account" field to be entered. This field pos up a window showing our accounting flexfield structure. It tried to validate based on the security rules assigned for the particular responsibility.

Please can you tell me the underlying functionality of validating the flexfield segment values. With respect to some function gets triggered to validate.

Please let me know.

Thanks
A shwini
Quote
0 #11 judi slot online 2021-08-05 06:35
Wow! Finally I gott a webpage from where I be able to
genuinely take helpful information regarding my study and knowledge.


Here is my blog: judi slot online: https://Ggasoftware.com
Quote
0 #12 SLOT ONLINE 2021-08-12 06:44
An intriguing discussion is definitely worth comment.
I ddo believe that you should write more about this subject
matter, itt may not be a taboo subject but typically people do not
talk about such issues. To the next! Cheers!!

My blog post ... SLOT ONLINE: https://ggasoftware.com/
Quote
0 #13 Judi slot 2021-08-16 14:09
Excellent post. I was checking constantly this blog and I'm
impressed! Very helpful information particularly the last
part :) I care for such information a lot. I was seeking this particular
info for a long time. Thank you and good luck.
Quote
0 #14 slot online 24 jam 2022-01-28 13:04
I used to be recommended this website via my cousin. I'm no longer sure whether this post is written by way of him as
no one else recognize such certain approximately my trouble.
You are incredible! Thanks!
Quote
0 #15 leci123 2022-02-04 18:00
What's Taking place i'm new to this, I stumbled upon this I've found It absolutely helpful
and it has helped me out loads. I hope to contribute & assist other customers
like its aided me. Good job.
Quote
0 #16 judi slot 2022-02-06 12:39
Thanks for your personal marvelous posting! I certainly enjoyed
reading it, you might be a great author. I will make certain to
bookmark your blog and may come back very soon. I want to encourage that you continue your
great posts, have a nice morning!
Quote
0 #17 slot online 24jam 2022-02-12 13:24
I am really impressed together with your writing abilities
and also with the layout to your weblog. Is that this a paid subject or did you customize it yourself?
Either way keep up the excellent quality writing, it is rare to look a
great blog like this one today..
Quote
0 #18 judi online24jam 2022-02-12 15:33
I do not know whether it's just me or if everybody
else experiencing issues with your blog.
It appears as if some of the written text on your posts are running
off the screen. Can somebody else please provide feedback
and let me know if this is happening to them as well?
This could be a issue with my browser because
I've had this happen previously. Kudos
Quote
0 #19 slot online 24jam 2022-02-12 16:35
Pretty! This was a really wonderful article. Many
thanks for supplying this information.
Quote
0 #20 slot online24jam 2022-02-12 20:30
Thanks on your marvelous posting! I really enjoyed reading it, you're a great author.
I will make certain to bookmark your blog and may come
back later on. I want to encourage one to continue your great writing,
have a nice morning!
Quote
0 #21 slot online 24 jam 2022-02-12 20:42
Oh my goodness! Impressive article dude! Thank you so much, However I am having difficulties with your RSS.
I don't understand the reason why I am unable to join it.
Is there anybody else having identical RSS problems?

Anybody who knows the solution can you kindly respond?
Thanks!!
Quote
0 #22 online 2022-02-13 03:51
I really love your site.. Excellent colors & theme.
Did you develop this amazing site yourself? Please reply back as I'm
wanting to create my own blog and would like to learn where you got this from or what the theme is named.
Thank you!
Quote
0 #23 slotonline 2022-02-13 06:24
I feel this is one of the most vital info for me.
And i'm glad reading your article. But should commentary on few
normal issues, The site style is perfect, the articles
is truly excellent : D. Just right activity, cheers
Quote
0 #24 judi online24jam 2022-02-13 08:49
Excellent post. I used to be checking constantly this blog and I'm inspired!
Very useful info particularly the ultimate phase :
) I take care of such info much. I used to be looking for this particular info
for a very lengthy time. Thank you and good luck.
Quote
0 #25 mpo slot 2022-02-13 12:44
Hey I am so thrilled I found your webpage, I really found you
by accident, while I was looking on Yahoo for something else, Nonetheless I am here now and
would just like to say many thanks for a incredible post and a all round exciting blog
(I also love the theme/design), I don’t have time
to read it all at the moment but I have saved
it and also added your RSS feeds, so when I have time I
will be back to read a great deal more, Please do
keep up the superb work.
Quote
0 #26 judi online24jam 2022-02-13 14:07
Hi there, just became alert to your blog through Google, and
found that it is really informative. I am going to watch out for
brussels. I'll appreciate if you continue this in future.
Lots of people will be benefited from your writing.
Cheers!
Quote
0 #27 judi online24jam 2022-02-15 11:06
Excellent beat ! I would like to apprentice while you amend your site,
how can i subscribe for a blog site? The account helped me a
acceptable deal. I had been tiny bit acquainted of this your broadcast provided bright clear idea
Quote
0 #28 slot online24jam 2022-02-16 02:54
Your style is so unique in comparison to other people I've read stuff from.
Thanks for posting when you've got the opportunity, Guess I'll just
book mark this web site.
Quote
0 #29 judi online24jam 2022-02-16 03:42
It's hard to come by well-informed people about this topic, but you
seem like you know what you're talking about! Thanks
Quote
0 #30 slot online 24jam 2022-02-19 23:45
This is really attention-grabb ing, You're an overly professional blogger.
I have joined your feed and look ahead to in quest of extra of your excellent post.
Additionally, I've shared your site in my social networks
Quote
0 #31 slot online 24 jam 2022-03-24 03:56
This is the perfect webpage for anyone who really wants to find out about this topic.
You realize a whole lot its almost hard to argue with you (not that I
really would want to…HaHa). You certainly put a brand new spin on a subject that has been discussed for
many years. Excellent stuff, just great!
Quote
0 #32 slot online 24jam 2022-03-24 04:32
My brother suggested I would possibly like this blog.
He was once entirely right. This put up actually made my day.
You can not imagine simply how so much time I
had spent for this information! Thank you!
Quote
0 #33 judi online 24jam 2022-03-24 09:10
It's going to be ending of mine day, however before finish
I am reading this impressive paragraph to improve my knowledge.
Quote
0 #34 judi online 24jam 2022-03-24 09:42
fantastic points altogether, you simply received a new reader.
What could you suggest about your post that you simply made some days in the past?
Any certain?
Quote
0 #35 judi online 24 jam 2022-03-25 14:54
Heya! I just wanted to ask if you ever have any issues with hackers?

My last blog (wordpress) was hacked and I ended
up losing a few months of hard work due to no data
backup. Do you have any methods to protect against hackers?
Quote
0 #36 slot online 24 jam 2022-03-26 03:04
Hi colleagues, its impressive article regarding cultureand entirely defined,
keep it up all the time.
Quote
0 #37 slot online24 jam 2022-04-24 06:02
I've been surfing online more than 4 hours today, yet I
never found any interesting article like yours. It is pretty worth
enough for me. In my opinion, if all web owners
and bloggers made good content as you did, the net will be much more useful than ever before.
Quote
0 #38 Slot Online 24 Jam 2022-04-29 23:08
We stumbled over here different web address and thought I might as
well check things out. I like what I see so i am just following you.
Look forward to looking at your web page for a second time.
Quote
0 #39 slot online 24 jam 2022-04-30 07:51
Magnificent goods from you, man. I've understand
your stuff previous to and you're just too magnificent.
I really like what you have acquired here, certainly
like what you're saying and the way in which you say it.
You make it entertaining and you still care for to keep it
sensible. I cant wait to read much more from you. This is
really a tremendous web site.
Quote
0 #40 slot online 24jam 2022-04-30 18:40
Attractive section of content. I just stumbled upon your blog
and in accession capital to assert that I acquire actually
enjoyed account your blog posts. Anyway I will
be subscribing to your augment and even I achievement you access consistently rapidly.
Quote
0 #41 leci123 2022-05-01 08:23
Thanks for your marvelous posting! I truly enjoyed reading it, you happen to be a great author.
I will ensure that I bookmark your blog and will eventually come back in the future.
I want to encourage yourself to continue your great work, have a nice morning!
Quote
0 #42 slot online24jam 2022-05-02 20:12
I think this is among the most important information for me.
And i'm glad reading your article. But should remark
on few general things, The site style is wonderful, the articles is really nice :
D. Good job, cheers
Quote
0 #43 mpo slot 2022-05-11 17:54
Great information. Lucky me I came across your site by chance (stumbleupon).
I have book marked it for later!
Quote
0 #44 judi online 24 jam 2022-05-14 17:22
You made some good points there. I looked on the internet to
learn more about the issue and found most people will go along with your views on this web site.
Quote
0 #45 lecislot.com 2022-05-16 10:27
Wow that was unusual. I just wrote an incredibly long comment
but after I clicked submit my comment didn't appear. Grrrr...

well I'm not writing all that over again. Anyhow, just wanted to say fantastic blog!
Quote
0 #46 leci 123 2022-05-16 17:04
Very good post. I'm going through a few of these
issues as well..
Quote
0 #47 mpo slot 2022-05-20 23:29
Very energetic blog, I enjoyed that a lot. Will there be a part 2?
Quote
0 #48 leci 123 2022-05-21 13:54
Write more, thats all I have to say. Literally, it seems as though you relied on the
video to make your point. You clearly know what youre talking about, why
waste your intelligence on just posting videos to
your weblog when you could be giving us something informative
to read?
Quote
0 #49 leci 123 2022-05-21 16:18
Hi exceptional website! Does running a blog like this
take a lot of work? I have virtually no understanding of coding however I had been hoping to start my
own blog soon. Anyways, if you have any suggestions or techniques for new blog owners please share.
I understand this is off topic nevertheless I simply wanted to ask.

Cheers!
Quote
0 #50 lecislot.org 2022-05-21 20:35
I am not sure where you are getting your info, but
great topic. I needs to spend some time learning
much more or understanding more. Thanks for great info I was looking for this information for
my mission.
Quote
0 #51 leci 123 2022-05-21 21:18
I've been surfing online more than three hours today, yet I
never found any interesting article like yours.
It is pretty worth enough for me. In my view, if all
webmasters and bloggers made good content as you did, the web will be
a lot more useful than ever before.
Quote
0 #52 lecislot.com 2022-05-22 01:31
Heya this is kind of of off topic but I was wanting to know if blogs use WYSIWYG editors or if you
have to manually code with HTML. I'm starting a blog soon but have no
coding know-how so I wanted to get guidance from someone with experience.
Any help would be enormously appreciated!
Quote
0 #53 leci123.org 2022-05-22 22:45
What's up to every body, it's my first pay a quick visit
of this website; this webpage carries remarkable and truly fine information in support of visitors.
Quote
0 #54 leci 123 2022-05-23 10:04
Thanks to my father who informed me regarding this webpage,
this blog is actually awesome.
Quote
0 #55 lecislot.com 2022-05-31 23:19
Heya i'm for the first time here. I came across this board
and I find It truly useful & it helped me out a lot.
I hope to give something back and aid others like you aided me.
Quote
0 #56 leci 123 2022-06-04 20:24
Hola! I've been following your site for a long time now and finally got the bravery to
go ahead and give you a shout out from Houston Texas! Just wanted to mention keep
up the fantastic work!
Quote
0 #57 slot online24jam 2022-06-05 04:20
I used to be recommended this web site by means of my cousin. I am not sure whether this publish
is written by means of him as nobody else recognise such special about my problem.
You are incredible! Thank you!
Quote
0 #58 slot online24jam 2022-06-19 15:12
Why viewers still make use of to read news papers when in this
technological globe everything is accessible on web?
Quote
0 #59 slot online24jam 2022-06-22 17:29
It's difficult to find educated people about this subject, however, you seem
like you know what you're talking about! Thanks
Quote
0 #60 leci123 2022-07-16 08:58
Your method of describing the whole thing in this post is in fact nice, all can without difficulty understand it,
Thanks a lot.
Quote
0 #61 lecislot.org 2022-07-21 04:01
Hello there, just became alert to your blog through Google, and found that it's really
informative. I am going to watch out for brussels. I'll appreciate if you continue this in future.
Lots of people will be benefited from your writing. Cheers!
Quote
0 #62 leci123.com 2022-07-23 22:21
What's up to every body, it's my first pay a quick visit
of this blog; this weblog includes amazing and genuinely excellent stuff in support
of visitors.
Quote
0 #63 leci123 2022-07-26 23:08
Hey! I'm at work surfing around your blog from my
new iphone 3gs! Just wanted to say I love reading
your blog and look forward to all your posts! Carry on the great work!
Quote
0 #64 leci123 2022-07-30 17:25
It's awesome for me to have a web site, which is good
designed for my knowledge. thanks admin
Quote
0 #65 leci123 2022-08-03 10:16
Hey! I'm at work surfing around your blog from my new iphone
3gs! Just wanted to say I love reading your blog
and look forward to all your posts! Carry on the great work!
Quote
0 #66 leci123.org 2022-09-04 10:54
What i don't understood is if truth be told how you
are no longer actually a lot more smartly-liked than you
may be now. You are very intelligent. You realize therefore considerably in relation to this matter, produced me in my opinion believe it from so many numerous
angles. Its like women and men are not interested until it's something to accomplish with Girl gaga!

Your individual stuffs great. All the time maintain it up!
Quote
0 #67 leci 123 2022-09-04 14:50
I visited many web pages however the audio quality for audio songs existing at this site is really marvelous.
Quote
0 #68 leci123.org 2022-09-04 20:41
Normally I do not read post on blogs, but I wish to say
that this write-up very pressured me to take a
look at and do so! Your writing taste has been amazed me.

Thank you, quite great article.
Quote
0 #69 lecislot.com 2022-09-05 04:13
I have been exploring for a little bit for any high-quality articles or blog posts on this sort of space .

Exploring in Yahoo I ultimately stumbled upon this website.
Reading this information So i am glad to show that I have an incredibly just right uncanny feeling I found out exactly what I
needed. I so much for sure will make sure to do not omit this site and give it a look on a relentless basis.
Quote

Add comment


Security code
Refresh

Search Trainings

Fully verifiable testimonials

Apps2Fusion - Event List

<<  Apr 2024  >>
 Mon  Tue  Wed  Thu  Fri  Sat  Sun 
  1  2  3  4  5  6  7
  8  91011121314
15161718192021
22232425262728
2930     

Enquire For Training

Fusion Training Packages

Get Email Updates


Powered by Google FeedBurner