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.
Comments
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
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
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
I want to update the po closure code ,
is it any API avilable ?
Regards,
Pakshi
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?
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.
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
can i ask any functional related issues to you
Thanks
vin od
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
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
genuinely take helpful information regarding my study and knowledge.
Here is my blog: judi slot online: https://Ggasoftware.com
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/
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.
no one else recognize such certain approximately my trouble.
You are incredible! Thanks!
and it has helped me out loads. I hope to contribute & assist other customers
like its aided me. Good job.
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!
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..
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
thanks for supplying this information.
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!
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!!
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!
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
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.
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.
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!
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
Thanks for posting when you've got the opportunity, Guess I'll just
book mark this web site.
seem like you know what you're talking about! Thanks
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
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!
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!
I am reading this impressive paragraph to improve my knowledge.
What could you suggest about your post that you simply made some days in the past?
Any certain?
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?
keep it up all the time.
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.
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.
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.
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.
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!
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
I have book marked it for later!
learn more about the issue and found most people will go along with your views on this web site.
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!
issues as well..
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?
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!
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.
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.
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!
of this website; this webpage carries remarkable and truly fine information in support of visitors.
this blog is actually awesome.
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.
go ahead and give you a shout out from Houston Texas! Just wanted to mention keep
up the fantastic work!
is written by means of him as nobody else recognise such special about my problem.
You are incredible! Thank you!
technological globe everything is accessible on web?
like you know what you're talking about! Thanks
Thanks a lot.
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!
of this blog; this weblog includes amazing and genuinely excellent stuff in support
of visitors.
new iphone 3gs! Just wanted to say I love reading
your blog and look forward to all your posts! Carry on the great work!
designed for my knowledge. thanks admin
3gs! Just wanted to say I love reading your blog
and look forward to all your posts! Carry on the great work!
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!
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.
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.
RSS feed for comments to this post