Tuesday, December 4, 2012

Workflow Builder 2.6.3.5 Client Installation tips

Download from Oracle here:
http://www.oracle.com/technetwork/database/options/winclient-101059.html

Ensure to extract the software before running the Oracle installation.

Symptoms: Cannot install Workflow Builder, or getting "Error Accessing the System Registry"

Solution: Before installing the Workflow builder, install this software with 'Compatibility Mode' as either Windows XP or XP Service Pack 2

After successfully installing, run the Workflow Builder software as System Administrator, by right-clicking the program from the Start Menu.


Happy Workflow-ing!

Thursday, August 30, 2012

Duplicate Bank Names in 11i do not upgrade correctly in R12


When the 11i bank data looks like this:

bank name bank_number
--------- -----------
ANZ 013-427
ANZ 014-295
ANZ (blank)

The upgrade will treat this as three different banks..since bank numbers are different..

1) if they want only one ANZ .. say for eg.. ANZ without bank number, then in that case they will have to remove the bank numbers from the UI..
2) They also need to make sure that the bank names are same(case sensitive). So if name is say 'National Australia Bank' and 'NATIONAL AUSTRALIA BANK' then they are treated as two different banks..

So the best approach is as follows:

Please correct the data in their 11i instance from the UI. Once they are done with all the corrections, they can run the below script to figure out..what banks will be created..

select bank_branch_id, bank_name, bank_number from ap_bank_branches
where bank_branch_id in (
SELECT
t.group_id
FROM ap_bank_branches b,
(SELECT bank_branch_id,
fv group_id,
country,
DECODE(bank_branch_id, fv, 'Y', 'N') primary_flag
FROM
(SELECT bank_branch_id,
bank_number,
institution_type,
country,
bank_admin_email,
bank_name,
bank_name_alt,
jgzz_fiscal_code,
tax_reference,
description,
active_date,
end_date,
first_value(bank_branch_id) over (partition BY bank_number,
institution_type, country, bank_name, jgzz_fiscal_code, tax_reference order
by creation_date DESC) fv
FROM
(SELECT creation_date,
x.bank_branch_id,
bank_number,
DECODE(upper(institution_type), 'BANK', 'BANK', 'CLEARINGHOUSE')
institution_type,
NVL(x.country, DECODE(SUBSTR(global_attribute_category,4,2), 'BR',
'BR', 'CO', 'CO', 'ES', 'ES', NVL(y.country,'AU'))) country,
bank_admin_email,
bank_name,
bank_name_alt,
DECODE(NVL(x.country,SUBSTR(global_attribute_category,4,2)), 'ES',
global_attribute1, 'CO', NVL(global_attribute11
|| global_attribute12, DECODE(global_attribute14,NULL,NULL,
(SELECT b2.global_attribute11
||b2.global_attribute12
FROM ap_bank_branches b2
WHERE NVL(b2.country, SUBSTR(b2.global_attribute_category, 4, 2)) =
'CO'
AND b2.bank_branch_id =
to_number(x.global_attribute14)
)))) jgzz_fiscal_code,
DECODE(NVL(x.country,SUBSTR(global_attribute_category,4,2)), 'CO',
global_attribute13) tax_reference,
description,
active_date,
end_date
FROM ap_bank_branches x,
(SELECT bank_branch_id,
country
FROM
(SELECT ba.bank_branch_id,
ba.bank_account_id,
ba.org_id,
loc.country,
first_value(ba.bank_account_id) over (partition BY
ba.bank_branch_id order by DECODE(ba.account_type, 'INTERNAL', 1, 2)) fv
FROM ap_bank_accounts_all ba,
hr_all_organization_units org,
hr_locations_all loc
WHERE ba.account_type IN ('INTERNAL', 'EXTERNAL', 'SUPPLIER')
AND org.organization_id = ba.org_id
AND loc.location_id = org.location_id
)
WHERE bank_account_id = fv
) y
WHERE y.bank_branch_id(+) = x.bank_branch_id
)
)
) t
WHERE b.bank_branch_id = t.bank_branch_id )
ORDER BY 2 ;

Wednesday, August 29, 2012

Script to identify inactive supplier records



The following script can be used to identify the supplier records not used for a specific number of days:

SELECT aps.vendor_id, aps.vendor_name, aps.segment1, aps.vendor_type_lookup_code FROM ap_suppliers aps WHERE NOT EXISTS (SELECT DISTINCT vendor_id FROM (SELECT vendor_id FROM ap_invoices_all WHERE creation_date > (sysdate - p_days) AND org_id = UNION ALL SELECT vendor_id FROM po_headers_all WHERE creation_date > (sysdate - p_days) AND closed_code <> 'CLOSED') AND org_id = WHERE vendor_id = aps.vendor_id) AND aps.end_date_active IS NULL; 

Wednesday, June 20, 2012

Pre AME rollout - HR sanity check scripts

Prior to rolling out AME for iProcurement and/or Internet Expenses, it is important to ensure the HR hierarchy is clean with no breaks or holes in it.

Here's an example of a script to help identify corrupt data in the HR hierarchy (e.g. direct reports with no supervisors, missing default expense accounts, jobs (positions), office location, email address)


select distinct ppf.full_name empl_name
from per_all_assignments_f paa,
     per_people_f ppf,
     fnd_user f
where paa.person_id = ppf.person_id
  and f.end_date is null
  and ppf.person_id = f.employee_id
and paa.supervisor_id is null --with missing supervisor record
and sysdate BETWEEN paa.effective_start_date AND paa.effective_end_date
and paa.primary_flag = 'Y'
union
select distinct ppf.full_name empl_name
from per_all_assignments_f paa,
     per_people_f ppf,
     fnd_user f
where paa.person_id = ppf.person_id
  and f.end_date is null
  and ppf.person_id = f.employee_id
and paa.default_code_comb_id is null --with missing default expense account
and sysdate BETWEEN paa.effective_start_date AND paa.effective_end_date
and paa.primary_flag = 'Y'
union
select distinct ppf.full_name empl_name
from per_all_assignments_f paa,
     per_people_f ppf,
     fnd_user f
where paa.person_id = ppf.person_id
  and f.end_date is null
  and ppf.person_id = f.employee_id
and paa.job_id is null  --with missing job (or position, for fetching the DOA)
and sysdate BETWEEN paa.effective_start_date AND paa.effective_end_date
and paa.primary_flag = 'Y'
union
select distinct ppf.full_name empl_name
from per_all_assignments_f paa,
     per_people_f ppf,
     fnd_user f
where paa.person_id = ppf.person_id
  and f.end_date is null
  and ppf.person_id = f.employee_id
and paa.location_id is null  --with missing location (used to create supplier records of Employees with OIE)
and sysdate BETWEEN paa.effective_start_date AND paa.effective_end_date
and paa.primary_flag = 'Y'
union
select distinct ppf.full_name empl_name
from per_all_assignments_f paa,
     per_people_f ppf,
     fnd_user f
where paa.person_id = ppf.person_id
  and f.end_date is null
  and ppf.person_id = f.employee_id
and ppf.email_address is null  --with missing email address (to send email notifications)
and sysdate BETWEEN paa.effective_start_date AND paa.effective_end_date
and paa.primary_flag = 'Y'
order by 1;


Review of OIE processes, expense items, expense report templates



Here's a script that extracts all expense report templates and expense items with accounting information, the extract should be reviewed by the Finance and/or Accounts Payable team(s) on a regular basis and make changes when required:

select decode (exi.org_id,1,'',2,'org name 2',3,'org name 3',4,'org name 4') organisation,
ext.report_type template_name, exi.prompt, exi.vat_code, category_code, exi.flex_concactenated, exi.flex_description, exi.creation_date
from AP_EXPENSE_REPORT_PARAMS_ALL exi,
ap_expense_reports_all ext
where ext.org_id = exi.org_id
and ext.expense_report_id = exi.expense_report_id
and ext.inactive_date is null
and ext.web_enabled_flag = 'Y'
and exi.end_date is null
order by 1, 2, 3;


Thursday, May 24, 2012

Some tech tips and links


Where are the .wft files located, like APEXP.wft ?

WFLOAD - what does this command do in PUTTY?
Have a read of this blog entry here.

More to come - keep watching !


Monday, May 7, 2012

Tax Codes not enabled for Internet Expenses


Try the following SQL scripts to help you identify if the setup of tax codes were correctly done or upgraded:

--Query 1
SELECT lookup_code, meaning, description
FROM zx_input_classifications_v
WHERE lookup_type = 'ZX_INPUT_CLASSIFICATIONS'
AND org_id =
AND enabled_flag = 'Y'

--Query 2
SELECT lookup_code, meaning, description
FROM zx_input_classifications_v
WHERE lookup_type = 'ZX_WEB_EXP_TAX_CLASSIFICATIONS'
AND org_id =  
AND enabled_flag = 'Y'

If the tax code appears in both queries, then the tax code should appear in the Internet Expenses module, when the tax code only appears in query 1 above, then you know there is an issue with the tax code.

To fix this issue, follow the additional setups identified in Oracle note 1312692.1 : Payables - Upgrade - Tax Codes not Enabled for Internet Expenses OIE

Tuesday, May 1, 2012

Steps for debugging issues in Oracle


How to capture the back-end FND debugging messages thrown when errors are thrown.

See the action plan below:

(a) Set the following profile options at your user level

FND: Diagnostics: Yes
FND: Debug Log Enabled: Yes
FND: Debug Log Level: Statement
FND: Debug Log Mode: Asynchronous with Cross-Tier Sequencing
FND: Debug Log Module to %


(b) Go to the form or prior step where the issue arises.

At this point, run the following SQL:

select max(log_sequence) from fnd_log_messages;

Note the max(log_sequence) value as &start


(c) Then proceed to replicate the error.

After clicking away the error, re-run the SQL:

select max(log_sequence) from fnd_log_messages;

Note the max(log_sequence) value as &end


(d) Then run

SELECT substr(module,1,70), MESSAGE_TEXT, timestamp, log_sequence
FROM fnd_log_messages msg
WHERE log_sequence between &start and &end
ORDER BY LOG_SEQUENCE


(e) REMOVE PROFILE OPTION VALUES AT YOUR USER LEVEL!!!!


Wednesday, April 11, 2012

R12 SLA Tree: a visual diagram

>> ADR JED JLT

>>>> JLD


>>>>>> AAD

>>>>>>>> SLAM

Where:
ADR = Account Derivation Rules
JED = Journal Entry Description
JLT = Journal Line Type
JLD = Journal Line Definition
AAD = Application Accounting Definition
SLAM = Subledger Accounting Method

Friday, March 2, 2012

Using Folders to manage AP Invoice workloads

Remember the old days when AP functions and workloads were split between AP Invoice Officers using the first letter of the supplier name (we called this the alphabet split), or using the invoice date, or the invoice receipt date.

In today's world, with ERP systems and scanning solutions, the processing of AP invoices is mostly automated. Invoices are often automatically created or imported into the AP Invoice workbench using interface tables or a scanning solution. With these systems in place the majority of invoices do not require any human intervention, while others do. For this last group, the workload distribution can be achieved in different ways, alphabetically, by invoice date (invoice receipt date), or by evenly distributing the workload to the AP Officers using the count of invoices.

I have replicated the alphabet split approach using form folders with embedded queries, sorting unprocessed invoices by first letter of the supplier name, this worked nicely, but this approach had a few disadvantages:
- the workload was often not evenly distributed,
- all invoices from the same supplier were processed by the same AP officer, employee morale was low as the work was monotonous,
- suppliers often called the AP officer directly to find out when their invoices were going to be paid, instead of calling the designated hotline,
- other AP officers did not know how to process these invoices, if there were any particularities related tho this supplier,
- some suppliers would request special attention or request the AP officer to process their invoices in a particular way, instead of applying the standardized process.

The second approach defined above, by distributing the workload using dates, also does not split the workload evenly between the AP Officers, affecting employee morale as well.

The evenly distributed workload approach seems like the best option and can easily be implemented by using the same Form Folders with embedded queries. How did we achieve this you may ask, here's how we did it. We grouped the last 2 digits of the INVOICE_ID (numeric value) into ranges of values, e.g. we created 5 folders with the following ranges: 00-19, 20-39, 40-59, 60-79, and finally 80-99.
So when invoices are migrated from the interface or from the invoice scanning software, the unprocessed AP invoices are allocated evenly between all 5 AP Officers.

I put a smile on the face of the AP manager when this solution was implemented. The team immediately felt more engaged and valued.

Monday, February 20, 2012

How to setup a defaulting DFF value of Default Type SQL Statement

If you need to repeat a value already part of the original transaction and automatically populate it in another area of the same transaction, in this case: the data is located on the AP Invoice header and it needs to be passed to the invoice line.

Then you need to create a DFF with a default type of 'SQL Statement' at the destination level and pass a bind variable into the 'where' clause of the select statement.

Here's an example: let's say there is a value (e.g. attribute4) in the AP invoice header that needs to be copied down to each AP invoice lines, you simply need to have the following default SQL statement for the DFF created at the invocie line level:

select aph.attribute4
from ap_invoice_lines_all apl, ap_invoices_all aph
where aph.invoice_id = apl.invoice_id
and apl.invoice_id = :INV_SUM_FOLDER.invoice_id

In order for the attribute4 from the invoice header to default automatically to the invoice lines, the last clause of the query above requires to pass a bind variable, in this case, it corresponds to ":INV_SUM_FOLDER.invoice_id"

To get the value above, Navigate to the form where the data is located, then extract the 'block'.'field' information by navigating to Help > Diagnostic > Examine

Prefix the combination of the 'block'.'field' with a " : "

My friend Cathy B. also pointed me to this excellent reference explaining Bind Variables: http://docs.oracle.com/cd/A60725_05/html/comnls/us/fnd/values19.htm

Thursday, October 6, 2011

Another helpful query from my friend Jon B.

This query is useful when troubleshooting the WF mailer, and to see if there is an issue with it.

Select * From Wf_Notifications
Where Trunc(Begin_Date) > Trunc(Sysdate-3)
order by 1 desc;

When the WF Mailer issue gets resolved, all notifications with a FAILED or ERROR mail status can be resent using the following concurrent program under the System Administrator responsibility: Resend Failed/Error Workflow Notifications

Wednesday, September 14, 2011

How to set the context in R12

--sometimes you need to run the following:

ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN';

--to set the context, provide the org_id in the SQL script below:
begin
mo_global.set_policy_context('S',"<"org_id">");
end;

--to fetch data for all operating units, and for a specific application
begin
mo_global.init('SQLAP');
end;

Thursday, June 9, 2011

AME - Approval of CEO's Requisitions

Just following up on an AME Oracle thread, and providing a quicker solution when the CEO's requisitions need to be approved by someone else in the company (e.g. CFO)

Reference: https://communities.oracle.com/portal/server.pt/community/view_discussion_topic/216?threadid=115624


As a quicker solution, instead of creating a new package, you can update the seeded attribute "ALLOW_REQUESTOR_APPORVAL" with the following value:

select
decode ( tpid.query_string, prepid.preparer_id, 'true', decode (PO_AME_SETUP_PVT.can_preparer_approve(:transactionId),'Y', 'true', 'false'))
from (select query_string
from ame_attribute_usages aau, ame_attributes aa
where aa.attribute_id = aau.attribute_id
and aa.name = 'TOP_SUPERVISOR_PERSON_ID'
and sysdate between aa.start_date and aa.end_date
and sysdate between aau.start_date and aau.end_date
and aau.application_id = -184 ) tpid,
(select preparer_id from po_requisition_headers_all
where requisition_header_id = :transactionId) prepid

I need to admit I had some help from a colleague: thanks JB!

AME - Tax Calculated

Here's a workaround to an issue we encountered in AME configuration for Payables Invoice Approvals:

Background:
====================
The query is from the seeded attribute: SUPPLIER_INVOICE_TAX_CALCULATED

select AP_WORKFLOW_PKG.get_attribute_value(:transactionId, null, 'SUPPLIER_INVOICE_TAX_CALCULATED', 'header') from dual

In our case, we replace the :transactionID with an invoice that the tax was calculate (ID: 54077), and the result still returns 'N', we are expecting to return 'Y'


Problem Description:
====================
Invalid condition in the following: (It always returns 'N')

select AP_WORKFLOW_PKG.get_attribute_value(54077, null, 'SUPPLIER_INVOICE_TAX_CALCULATED', 'header') from dual

ELSIF p_attribute_name= 'SUPPLIER_INVOICE_TAX_CALCULATED' THEN

SELECT sum(decode(tax_already_calculated_flag, 'Y',
1, 0)), count(line_number)
INTO l_sum_calc, l_line_count
FROM ap_invoice_lines_all
WHERE invoice_id = p_invoice_id
AND line_type_lookup_code not in ('TAX','AWT');

IF l_sum_calc >0 and l_sum_matched = l_line_count THEN
l_return_val := 'Y';
ELSE
l_return_val := 'N';

Summary:
====================
In plain English terms, the l_sum_matched is not defined in the package at this point in the procedure and therefore always returns 'N'


Workaround:
====================
Update the seeded attribute with the following:

SELECT decode(sum(decode(tax_already_calculated_flag, 'Y',1, 0)),count(line_number),'Y','N')
FROM ap_invoice_lines_all
where invoice_id = :transactionId
and line_type_lookup_code <> 'TAX'

I would not be able to have done this all by myself, so I will not take full credit here - I have to say thank to my colleague here: Thanks JB (and not the Scotch JB)

Monday, July 19, 2010

Adding a DFF to an OA Framework Page

iProcurement is used as an example in this blog.

Here are the steps to enable DFF's on OAF pages. You can do this for any OAF page in Oracle Apps R12.

Start by adding a DFF to Create Purchase Order page in Buyer Work Center. First we need to define the DFF. The steps are as follows:
1. Create a new Value Set.
2. Define Values for the value set created in step 1.
3. Add Value Set to the Flex Field Segment in Application: Purchasing and Title: PO Headers.
4. Freeze and Compile the FlexField definition.

Enable this DFF in Buyer Work Center. the steps are as follows:
1. Enable profile Personalize Self-Service Defn to yes at the user level.
2. Click Personalize Page at the top of the Create Purchase Order page.
3. Look for Flex: (HeaderRN.DescFlexfields)
4. Click Edit (Pencil)
5. Chang Rendered from false to true
6. Click Apply
7. Click Return to Application

One more example: Add DFF to iProcurement Requisition header in the same way. Define a DFF again:
1. Create a new Value Set.
2. Define Values for the value set created in step 1.
3. Add Value Set to the Flex Field Segment in Application: Purchasing and Title: ReqExpress Headers.
4. Freeze and Compile the FlexField definition.

Enable DFF in IProc HTML pages are as follows:
1. Enable profile Personalize Self-Service Defn to yes at the user level
2. Log in to iProcurement
3. Go to Checkout: Requisition Information page
4. Click Personalize Page at the top of the page
5. Look for Flex: (ReqHeaderDFF)
6. Click Edit (Pencil)
7. Change Rendered from false to true. Click Apply
8. Click Return to Application

Wednesday, June 23, 2010

Clearing Cache Mid Tiers

When you assign a responsibility to your user, and then try to access this responsibility, but it's a self service application, not a core application form.
You get the following message: "Internet Expenses is not a valid responsibility for the current user. Please contact your System Administrator"
Navigate here for step by step instructions with screen shots.

In summary, here are the steps:

1) Log in and select the "Functional Administrator" responsibility

2) Select "Core Services" (the tab at the top right)

3) Select "Caching Framework" (second option from the right on the blue bar)

4) Select "Global Configuration" (bottom option on the left)
This page shows you the currently configured Caching Statistics and Policy. The bit we're interested in though is the "Clear All Cache" button the right-hand side.

5) Click "Clear All Cache"
Read the message

6) Click "Yes"

And we're done, the user should now be able to log in with the new responsibility.

Friday, May 21, 2010

EBS Product & Acronym Listing | ORACLE Technology Information

Do you often ask yourself what does 'AME' stand for? I do - here's an easy way to find out.
Navigate here for the EBS Product Acronym Listing.

Wednesday, April 7, 2010

How to extract the Chart of Account (COA) from Oracle

Here are a few useful SQL scripts used by GL consultants:

1) This SQL lists all GL Segment values:
select fvs.FLEX_VALUE_SET_NAME, ffv.FLEX_VALUE, ffvt.FLEX_VALUE_MEANING, ffvt.DESCRIPTION
,ffv.ENABLED_FLAG, ffv.SUMMARY_FLAG
,ffv.START_DATE_ACTIVE ,ffv.END_DATE_ACTIVE, ffv.HIERARCHY_LEVEL
,replace(ffv.COMPILED_VALUE_ATTRIBUTES,chr(10),'_') Budget_Post
from applsys.FND_FLEX_VALUES_TL ffvt, applsys.FND_FLEX_VALUES ffv, applsys.FND_FLEX_VALUE_SETS fvs,
applsys.FND_ID_FLEX_SEGMENTS fseg, applsys.FND_ID_FLEX_STRUCTURES fifs,
applsys.FND_ID_FLEXS fif, applsys.FND_APPLICATION_TL fat
where ffvt.LANGUAGE = 'US'
and ffvt.FLEX_VALUE_ID = ffv.FLEX_VALUE_ID
and ffv.FLEX_VALUE_SET_ID = fvs.FLEX_VALUE_SET_ID
and fvs.FLEX_VALUE_SET_ID = fseg.FLEX_VALUE_SET_ID
and fseg.APPLICATION_ID = fifs.APPLICATION_ID
and fseg.ID_FLEX_CODE = fifs.ID_FLEX_CODE
and fseg.ID_FLEX_NUM = fifs.ID_FLEX_NUM
and fifs.ID_FLEX_CODE = fif.ID_FLEX_CODE
and fifs.application_id = fif.application_id
and fif.application_id = fat.application_id
and fif.ID_FLEX_NAME = 'Accounting Flexfield'
and fat.APPLICATION_NAME = 'General Ledger'
and fat.LANGUAGE = 'US'

2) This SQL lists all code combinations created:
SELECT
gcc.code_combination_id
,gcc.segment1
,gcc.segment2
,gcc.segment3
,gcc.segment4
,gcc.segment5
,gcc.segment6
,gcc.segment7
,gcc.segment8
,SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,1,gcc.segment1),1,40) segment1_desc
,SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,2,gcc.segment2),1,40) segment2_desc
,DECODE(gcc.segment3,NULL,'',SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,3,gcc.segment3),1,40)) segment3_desc
,DECODE(gcc.segment4,NULL,'',SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,4,gcc.segment4),1,40)) segment4_desc
,DECODE(gcc.segment5,NULL,'',SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,5,gcc.segment5),1,40)) segment5_desc
,DECODE(gcc.segment6,NULL,'',SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,6,gcc.segment6),1,40)) segment6_desc
,DECODE(gcc.SEGMENT7,NULL,'',SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,7,gcc.segment7),1,40)) segment7_desc
,DECODE(gcc.SEGMENT9,NULL,'',SUBSTR(apps.gl_flexfields_pkg.get_description_sql( gcc.chart_of_accounts_id,8,gcc.segment8),1,40)) segment8_desc
,gcc.chart_of_accounts_id chart_of_accounts_id
,gcc.account_type
FROM
gl_code_combinations gcc
-- For references visit my friend's blog here

Tuesday, April 6, 2010

NAB Online vs. NAB Direct

As an Oracle consultant, I often need to configure Oracle to create EFT files that get sent electronically to bank institutions for making payments to suppliers.


In Australia, there is a Bank Institution that currently has 2 different software offerings (Online & Direct) that connect to an ERP system like Oracle. This institution is NAB, National Australia Bank.


And during conversations I had with a financial director of one of my previous engagements, the difference between NAB Online and NAB direct was explained to me as per below, or this is what I understoond the difference was:


NAB Online: is the current version of software provided by NAB for enabling EFT payments, and has a built-in authorisation process for every payments which require 2 people to approve payments before the bank releases the funds.



NAB Direct: is the new software offering which has more automation when it comes to process and configuration, but the authorisation process from the previous version (NAB Online) is no longer offered in the new software, and this is critical per the Finance Director.

The director in question raised the new NAB offering, NAB Direct, as a risky piece of software and left me with these questions: "How can you prevent a techie person from dropping an EFT payment file in the designated NAB directory and tell me who will approve this payment?"

I could not argue with him regarding the director's last point. And I knew I could not diverge the director's irrational distrust of others towards a viable workaround or solution. But I could have had easily provided the director with a few hundred other ways the "techies" could cheat the system.

Here are a few benefits of "NAB Direct" listed their website:


• Leverages your ERP investment – use your ERP system to add ‘end to end’ connectivity between you and NAB.

• Helps save time and reduces costs – fully automatic straight through processing virtually eliminates the needfor manual reconciliation.

• Reduces risk – process high-volume transactions with limited human interaction, thereby reducing operationalrisk.

• Strong security – four layers of security, including digital signatures and message encryption, help to ensure yourconnection to NAB is protected.

My personal opinion about this issue is that the new R12 Oracle Payments module can easily handle the authorisation process within Oracle. The 'end to end' connectivity between Oracle and NAB should be leveraged as well. If a payment goes through by fraud, this will get flagged in the cash management module - alerts can also be defined to notify HR, the legal department, and your Finance Director.

As a side note, if your techies cannot be trusted, I suggest you start looking at outsourcing their tasks to an insured and qualified 3rd party vendor with a reputation to protect.