R12.1 – Installation

Well having installed and worked with R12.0.4  it very fast becomes clear that a new version is needed.

So I downloaded R12.1.1 from Oracle eDelivery. 40 files in excess of 45Gb to the joy of my ISP.

NOTE until 20/11-2009 there was a corrupt file on eDelivery and it took me a while to convince Oracle that it was the case.

The sick file was: V15571-01_2of3.zip

However the file has been fixed after the above date but be sure to test your downloaded files anyway using ziptest.

Otherwise follow the procedure for R12 Installation.

Some of the initial rapidwiz screen has changed though.

The Welcome screen is saying 12.1.1 – great:

Screenshot-1

Select express install:

Screenshot-2

Just click next on this one:

Screenshot-3

Update base directory:

Screenshot-4 

Before logging in you should compile the jsp pages – see how to Compile JSP.

And then it is business as usual like in R12.0.4

Also in you environment script – the one I call vis.sh change this:

from:
TECHENV=/oracle/VIS/db/tech_st/10.2.0/$CONTEXT_NAME.env
to:
TECHENV=/oracle/VIS/db/tech_st/11.1.0/$CONTEXT_NAME.env

Have fun…

Posted in: Installation by Kent Comments Off ,

Ziptest

This is a couple of useful scripts to test downloaded files.

This approach is recommended when downloading huge amounts of data like when downloading Oracle R12 installations files.

In addition to testing the downloaded files also be sure to use a download manager.

The basic zip test command is:

$ unzip –t –qq {zipfile}

I made a Linux script for it named ziptest.sh:

#!/bin/bash
# ziptest.sh
SOURCE=/util/install/R12.1.1-32
if [ -z "$1" ]
then
    name="*.zip"
else
    name="$1.zip"
fi
for zipfile in $SOURCE/$name
do
    unzip -t -qq $zipfile
    if [ $? -eq 0 ]
    then
        echo -n "."
    else
        echo " "
    fi
done
echo " "

A similar script can be made for Windows names ziptest.cmd:

@echo off
rem ziptest.cmd {zipfilename}
set zipdir=..\R12.1.1-32
rem do all zip files unless arg received
set zipfile=*.zip
if [%1]==[] goto doit
   set zipfile=%1.zip
:doit
   set target=%zipdir%\%zipfile%
   for %%a in ( %target% ) do call ziptest_call %%a

As command line programming in windows isn’t great we need to call a subprogram names ziptest_call:

@echo off
rem ziptest_call.cmd {zipfile}
if [%1]==[] goto noarg
if not exist %1 goto nofile
:main
    unzip –t –qq %1
    if errorlevel 1 goto badfile
goto xit
:noarg
    echo ARG missing – use only with ziptest.cmd
goto xit
:nofile
    echo FILE %1 does not exist
goto xit
:badfile
    echo %1 BAD
goto xit
:xit

That should be it.

Be sure to update directory references for your own purpose.

Posted in: Technical by Kent Comments Off ,

R12 – General Ledger – GL

Back to R12 – Upgrade Overview

Overview

In GL there has been a number of changes:

  • Terminology Changes
    • Set of Books (SOB) is now Ledgers
    • Multiple Reporting Currencies (MRC) is now Reporting Currencies
    • Global Intercompany System (GIS) is now Advanced Global Intercompany System (AGIS)
  • Obsolete
    • Global Accounting Engine (AX) replaced by Subledger Accounting
    • MRC as a workaround – now fully integrated as Reporting Currencies
  • Accounting Setup manager – New central management of legal entities and legers
  • Legal Entities – now really used
  • Ledgers – new name and setup for SOBs
  • Ledger sets – ledger grouping and security feature
  • Reporting Currencies – MRC has now been cleaned up and is better integrated
  • Period rates – now all daily rates and managed in same way
  • Revaluation and Translation – changed functionality
  • Journal Reconciliation
  • Advanced Global Intercompany System (AGIS) – changed functionality

Accounting Setup Manager

The new Accounting Setup Manager simplifies and centralizes accounting-related setup for common financial components that are shared across financial applications. From a central location, you can define your legal entities and their accounting context, such as the ledgers and reporting currencies that perform the accounting for your legal entities.

image

The setup steps are:

  • Legal Entity
  • Primary Ledger
  • Reporting Currencies
  • Balancing Segment Value Assignments
  • Subledger Accounting Options
  • Operating Units
  • Intercompany Accounts
  • Intercompany Balancing Rules
  • Sequencing
  • Secondary Ledgers

Each of the setup steps is a number of sub screens where some are described later.

Legal Entities

Legal Entities part of Accounting Setup Manager now holds important information for both tax and VAT reporting.

General

image

Registrations

image

This is where you would put in information for the Corporations Office

Establishments

image

List of all locations

Balancing Segments

This is a new important feature that the balancing segment now relates to the legal entity.

image

Primary Ledger

Ledgers are mostly the same as the old Set Of Books however the setup screens has changed a bit.

Definition

image

Nothing really new here except for the OFA screen.

Options

image

Similar to the old screens in a new wrapping.

Advanced Options

image

Again similar to old days except for the new Journal Reconciliation option.

Ledger Sets and Data Access Sets

The Ledger Set is a great new feature which lets you manage multiple ledgers as one – a especially useful feature for faster closing. However the ledgers must share the following information:

  • Chart of accounts
  • Calendar/period type combination

You can open/close periods for multiple ledgers at once, run recurring journals that update balances for multiple ledgers. So it goes way beyond report sets or cross COA FSG reports.

Ledger Set

image

Strange though – this is a non-OFA screen…having thought that all new features was pushed to OFA.

Similar to the Ledger Set the Data Access Set provides security at same level so ledgers must still share the following information:

  • Chart of accounts
  • Calendar/period type combination

The security can be at the following levels:

  • Full Ledger – access to the whole COA
  • Balancing Segment Value – access to specific balancing segment values
  • Management Segment Value – access to specific management segment values

Note the Management Segment is a new segment qualifier. If you what your cost centre to be secured and used in Data Access sets enable the Cost Centre segment as a Management Segment. Remember if your COA has been used there is a specific procedure for doing this to avoid corruption.

Data Access Set

image

The system always generate a Data Access Set with same name and full access for each:

  • Primary Ledger
  • Secondary ledger
  • Ledger Set
  • Reporting Currency (also creates a Reporting Currency + Source Ledger Data Access Set)

Data Access Set security can be combined with Segment Value Security Rules and will work as a logical AND so only where the two overlaps access will be allowed.

Reporting Currencies

The reporting currency definition is now comprised from the R11i options for reporting sets of books and the MRC profile options.

Period Rates

Period Rates Replaced by Daily Rates and all new OAF screens.

Currency Rates Manager:

image

Revaluation and Translation

Revaluation sets are now usable across ledgers that share a common chart of accounts. In some cases, you may need to enter the secondary tracking segment for revaluation sets involving a secondary tracking segment before running revaluations with upgraded templates.

General Ledger modifies revaluation templates to use corresponding daily rates for those that used period rates prior to the upgrade.

Journal Reconciliation

Journals can now be reconciled if an account has been marked as such.

The is a useful feature for clearing accounts or tax accounts which should balance to zero.

Account Setup

image

Note this is a cash clearing account which is a good candidate for journal reconciliation.

So in this case you would enable the segment qualifier “Reconcile” to “Yes”.

Journal Entry

image

Note the new “Reconciliation Reference” field. This is used both for automatic and manual reconciliation.

Unreconciled Lines

image

Search for unreconciled journal lines using the parameters above.

Reconcile Journal

image

No journals to reconcile here – but you see the point?

Posted in: General Ledger by Kent Comments Off , ,

R12 – Receivables – AR

Back to R12 – Upgrade Overview

AR are now fully support new modules like E-Business Tax and Subledger Accounting.

Overview:

  • Integration with E-Business Tax
  • Integration with Subledger Accounting
  • Centralized Banks and Bank Accounts Definitions
  • Integration with Payments for Funds Capture
  • Balance Forward Billing
  • Late Charges Enhancements
  • Customer UI Redesign
  • Process Changes

Integration with E-Business Tax

    Release 12 introduces Oracle E-Business Tax to manage tax across the E-Business Suite. During the upgrade, system and customer options used to control tax calculation and tax code defaulting are migrated from Oracle Receivables into Oracle E-Business Tax entities. See E-Business Tax in this appendix for further details.

Integration with Subledger Accounting

    Release 12 introduces Subledger Accounting for managing accounting across subledger transactions. Receivables no longer creates any accounting entries. Existing Receivables accounting options and setups remain and affect the generation of accounting distributions in the Receivables data model. However, the accounting distributions are now simply one of many sources for generation of final accounting in the Subledger Accounting module.

Centralized Banks and Bank Accounts Definitions

    In Release 12, all internal banks and bank accounts you had defined for your operations are automatically migrated to the central Cash Management entities. Remittance bank accounts are owned by a legal entity rather than by an operating unit.

Integration with Payments for Funds Capture

    Release 12 introduces Oracle Payments, which is used by Oracle Receivables for processing funds capture. See Payments in this appendix for further details.

Balance Forward Billing

    Release 12 enhances the Release 11i Consolidated Billing Invoices functionality to include more flexible billing cycles, to consolidate invoices at site or account level, and to present Balance Forward Bills using the user-configurable Bill Presentment Architecture.

Late Charges Enhancements

    Release 12 enhances the Receivables Late Charges feature to incorporate the Global Interest Invoice setups, charge calculation logic, and charge generation processes. Charges for delinquent payments can now be generated as adjustments, debit memos, or interest invoices. The Interest Invoice Global Descriptive Flexfield is obsolete.

Customer UI Redesign

    Release 12 introduces a new HTML user interface for entering and maintaining customer data. See the Oracle Receivables User Guide for further details.

Process Changes

    The following features are obsolete in Release 12:

    Collections Workbench – The Oracle Advanced Collections module delivers similar functionality. See the Collections Migration white paper and the Oracle Advanced Collections User Guide for further details.

    Trade Accounting – Similar functionality is delivered by integration with the Oracle Trade Management module. Trade Management integration is available in Release 11i.

    Bill of Exchange – This functionality has been replaced with the Bills Receivable feature. Bills Receivables is available in Release 11i.

Posted in: Uncategorized by Kent Comments Off

Internet Explorer 8

First Install Java JRE 1.5.0.13 as usual as the download from the Apps server to IE8 would not work – and just install the version required by default so you might need a different version

Then add your Apps server to IE8 security settings:

image

Lower the security setting to medium-low for Trusted Sites:

image

Allow pop-ups from the Apps server:

image

When you start the application for the first time you may get one or more warnings like this:

image

Just keep clicking run and it should work.

Note IE8 is not yet supported by Oracle.

Posted in: Technical by Kent Comments Off , ,

R12 – E-Business Tax – ZX

Oracle E-Business Tax covers “standard” procure to pay and order to cash transaction taxes, with the exception of withholding taxes and those taxes handled by the Latin Tax Engine solution.

In general the limited per module 11i setup has been changed to become a proper self-contained tax engine. With that however comes complexity to the extent that E-Business Tax almost can be regarded as a module in itself.

Hopefully some best practices can be applied here so over time we will have a good template of standard solutions depending on type of business and geographical region.

E-Business tax fully use the TCA and legal entity data model so all involved parties in tax reporting must be defined in TCA – like HM Revenue and Customs – and your reporting business unit must be defined as a legal entity too.

E-Business Tax also introduces many new concepts like:

  • Tax Authority: organisation responsible for collecting taxes
  • First Party Legal Entity: your organisations that have taxable transactions
  • First Party Legal Establishment: your organisation having tax registration in order to report and settle taxes
  • Tax Regime: Name of an area of tax like VAT in the UK
  • Tax Zone: Grouping of Tax Regimes
  • Tax Jurisdiction: The geographical boundary of a tax related to a tax regime
  • Tax: Defines name of a tax within a Tax Regime – like VAT
  • Tax Status: Level of taxes within a tax regime – like Standard, Reduced, Exempt and Zero
  • Tax Recovery Rate: Rate of a recoverable tax – like Full (100%) and None (0%)
  • Tax Rate: Rate of tax applied to an transaction – like Standard would have 14%, 17.5% and 15% depending on date
  • Tax Rule: Rule which is applied to a transaction to provide for the tax calculation for:
    • Determine Place of Supply: Determine the location for transaction
    • Determine Tax Applicability: Determine what taxes apply to a transaction
    • Determine Tax Registration: Determine tax registration number for the transaction
    • Determine Tax Status: Determine the level of tax applicable
    • Determine Tax Rate: Determine the rate based on the tax level
    • Determine Taxable Basis: Determine the amount taxable
    • Calculate Tax Amounts: Determine the tax amount
    • Determine Recovery Rate: Determine the recovery rate

So quite an expansion of the 11i definitions in one form having a single line of tax code and tax rate…

Anyway before doing a major setup exercise have a read of the note: in Note 463001.1 – which may save you the setup for Europe.

An example of UK VAT to follow:

The section below is only tested on Vision – which is not a live system.

Tax Regimes

image

Controls and Defaults

image

Associations

All first party legal entities and operating units must be associated with the tax regime they are subject to.

image

Party Tax Profiles

Tax Authority

This is the organisation to whom you must report and settle taxes.

image

First Party Legal Entity

This is a organisation that creates taxable transactions.

image

- Configuration Options

image

First Party Legal Establishment

This defines your organisation that reports and settles tax with the tax authority hence here you define you tax registration details.

image

- Tax Registration

image

Taxes

This is the name of the tax and how it is handled.

image

Controls and Defaults

image

Tax Statuses

These are names of tax levels so in the UK the STANDARD VAT is for all basic goods and services but a REDUCED rate is paid for fuel and power and ZERO would be paid for food and books. Do not put the actual rate in the name is you would in 11i as this will be defined in the Tax Rates section.

image

Tax Jurisdictions

image

Tax Recovery Rate

image

Tax Rate

This is rate of a tax status like STANDARD VAT would have been 14%, 17.5% and 15% over time.

image

Country Defaults

Setup the default tax configuration for a country.

image

Tax Simulator

Use this screen to simulate the tax setup without entering real transaction. This is very useful when changing the configuration on a live system.

Be sure to assign the “Oracle Tax Simulator” responsibility to the user and use this rather than using the menu on the home page of “Tax Administrator” – otherwise you will get this error:

image

So from the “Oracle Tax Simulator” responsibility use:

image

And you will see this:

image

When clicking \Tools\View Tax Log:

image

A concurrent job will be submitted. You may be get this error:

image

However this is not any issue – just wait a bit and retry or just monitor the request in \View\Requests:

image

This report will show how the tax was calculated.

Posted in: E-Business Tax by Kent Comments Off , ,

R12 – Subledger Accounting – XLA

Back to R12 – Upgrade Overview

Subledger Accounting is a new application that provides an accounting abstraction layer for subledgers – between subledger accounting events and GL journal entries.

This functionality was in 11i placed in each of the subledgers implemented in different way resulting in different reconciliation processes for each of the subledgers.

Subledger Accounting also replaces the Global Accounting Engine (AX) which essentially in 11i was a add-on or workaround that bypassed the subledger accounting entries to provide a better audit trail and catered for special localization requirements for countries like Italy and Spain.

However the AX was only supported for some countries so in a global implementation you would have different reconciliation processes for the same application depending on the country was using AX or not.

Global Accounting Engine module is therefore obsolete in R12.

Subledger Accounting is now supported for all countries for the following modules:

  • Assets  
  • Cash Management  
  • Contract Commitment  
  • Cost Management  
  • Federal Financials  
  • Financials Common Modules  
  • Loans  
  • Payables  
  • Payroll  
  • Process Manufacturing Financials
  • Projects  
  • Property Manager  
  • Purchasing  
  • Receivables  
  • Trade Management

Subledger Accounting streamlines the accounting and reconciliation process between any of the above subledgers and the GL.

Each of the subledgers interface to Subledger Accounting sending the accounting events and amounts and then Subledger Accounting translates this into accounting entries for GL based on accounting rules.

Subledger Reporting and Reconciliation

WIP

Accounting Method Builder (AMB)

WIP

Accounting Setup

Subledger Accounting setup screen are located as a sub-application General Ledger:

image

This will give you access to the Accounting Setup form:

image

As Subledger Accounting setup is always done in the context of the ledger you must first search for this.

Click “Update Accounting Options” and you will get the following form:

image

For “Subledger Accounting Options” click “Update”:

image

This provides you with a list of currently supported subledgers for which you can update either the Accounting Options or the System Options.

System Options:

image

This is most a technical tuning page and has no functional impact.

From the user guide:

You can define the processing unit size at the event class level to process a large
number of items in one commit cycle. A processing unit is the number of
transactions processed by the Create Accounting program in one commit cycle. The
Create Accounting program processes the default processing unit size at the
application level.

Accounting Options:

image

These options used to be in each individual application but are now moved to a common screen. Great!

A nice new feature is “Stop at Error Limit” – especially handy when designing a new chart of accounts.

Scroll down and you get:

image

The Journal Category – used to be specified in the subledger as well now much more ordered and can be customized for any application and any event.

Technical

Had a look at the tables in SQL Developer. It looks to me that Subledger Accounting has borrowed the AP concept of the AP_AE_… tables – now in XLA called XLA_AE_… tables.

Main tables are:

  • XLA_AE_HEADERS – containing information about source application and accounting event
  • XLA_AE_LINES – containing multiple lines of information for each of the above events regarding the financial side of the transaction like DR/CR and CCID

The new tables is also now segmented by LEDGER_ID rather than by ORG_ID as it was in 11i. This completely ties in with the new R12 architecture and is a great improvement.

XLA_AE_HEADERS example:

image

The XLA_AE_HEADERS relates to XLA_EVENT_TYPES:

image

So the entity id in XLA_AE_HEADERS is for AP_INVOICES validation event.

Posted in: Subledger Accounting by Kent Comments Off , ,

R12 – Payments – IBY

Back to R12 – Upgrade Overview

This is a completely new module to provide a central payment capture and disbursement facility.

Overview

  • New Concepts: Payment Processing Profile, Payment Request and Payment Instruction
  • Payment disbursement functionality for Payables
  • Credit card functionality for Advanced Collections and Receivables
  • Bank account transfer functionality for Cash Management
  • Secure storage and encryption of payment data including credit cards
  • Payment document formatting uses XML Publisher
  • Electronic transfer functionality built-in
  • Obsoletes iPayments

New Concepts

A number of new concepts has been introduced but the main ones are:

  • Payment Process Profile – governs how a payments for documents payable having a specific payment method is processed
  • Payment Request – one or more documents payable in a subledger requested to be paid
  • Payment Instruction – payments for one or more documents payable having same Payment Process Profile ready to be printed or transferred to a bank

In 11i – Payables would make all payments however in R12 this task is now split between the subledger and Payments:

11i R12
Payables: Select Document Payable Payables: Select Document Payable
  Payables: Create Payment Request and Validate
Payables: Build/Modify Payments Payments: Create/Modify Payments
  Payments: Create Payment Instructions
Payables: Format Payments Payments: Extract or Format Payment Document
Payables: Print Payments: Transmit or Print
Payables: Confirm Payments: Confirm Printed Cheques

The subledger – in this case Payables – select documents payable and create a Payment Request for Payments. After this point Payments takes over and perform the remaining tasks.

New steps are the Payment Request and the Payment Instruction creation.

Payment Process Profile is assigned during Create Payment Request.

Payment Request acts as an interface between the subledger and Payments. So the Payment Requests are a ledger of Payments needed.

Payment Instruction acts as a internal representation of a physical payment or cheque print file. So the Payment Instruction is the ledger of Payments made.

Confirm is changed so now only pre-numbered cheques needs to be confirmed. For other types of payments they will automatically be confirmed in accordance to the Payment Profile which is default at Format Payment time.

Payment Disbursements

All payment disbursements are now performed by the Payments module. This means that the Payables module like any other subledger sends a payment request to the Payments module. Payments will then create payment instructions based on the payment request.

Payment Workbench:

image

As payment instructions can now be combined across organisations the concept of a payment batch has changed – now there is payment requests and payment instructions:

  • Payment Request: One or more documents selected to be paid
  • Payment Instruction: One or more payment requests having same payment profile

Payment Request form:

image

In 11i – one payment batch was one collection of invoices to be paid by one payment method in one file however in R12 the 1:1 relationship has gone and one payment request can be split into multiple payment instructions and multiple payment requests can be combined into one payment instruction if using same payment profile. One payment instruction would then result in one payment file or transfer.

11i logical data model:

image

R12 logical data model:

image

The R12 payment profile can be defaulted on the payment request however Oracle Payments will have the final say of which payment profile is being used. The payment process does not always have to be a two step process however in that case the payment profile must be specified at time of payment request.

The ability of combining multiple payment requests into a single payment instruction will significantly reduce number of bank transfers and therefore reduce payment costs especially in larger organisations.

Credit Cards

Mostly used for small business and retail – so parked for now.

Bank Account Transfers

WIP

Security

WIP

Payment Document Formatting

WIP

Electronic Transfer

WIP

Posted in: Payments by Kent Comments Off , ,

R12 – Cash Management – CE

Back to R12 – Upgrade Overview

The new centralized bank account model provides a single point for defining and managing internal bank accounts for Oracle Payables, Oracle Receivables, Oracle Payroll, Oracle Cash Management, and Oracle Treasury.

Biggest change in cash management is for the users as many screens are now as OAF forms:

Screens has been converted into OAF forms owned by CE but can still be called from AP:

image

Other changes are logical data model changes and was long overdue so a welcome change.

Overview

  • Banks and Branches now managed by Cash Management and data stored in the TCA data model
  • Bank Accounts now managed by Cash Management and data is segmented by legal entity so accounts can be shared across organisations
  • Payment Document Sequence Numbers is now defined by bank account

Bank and Bank Branches

Banks and branches are now defined in the Oracle Trading Community Architecture (TCA). This makes sense as the organisational model of a bank and its branches is no different from any other business having a party and some sites.

Banks and Bank Branches:

image

Update Bank:

image

Note this form actually edits a party in TCA.

Update Branch

image

Bank Branch Addresses

image

Branch Contacts

image

Bank Accounts

A single legal entity is granted ownership of each internal bank account, and one or more organizations are granted usage rights. In addition  bank accounts can be accessed by multiple operating units, but are owned by a single legal entity.

Example of an internal bank account below.

Bank Accounts – Owner and Use

image

Note the new Bank Account Owner field. Great feature.

Bank Accounts – Account Information

image

Bank Accounts – Account Controls

image

image

image

Yes – this IS one page. In 11i this was handled by tabs but this concept is not used in R12 OAF.

Bank Accounts – Account Access

image

This is new as well  – where you can control what organisations has what access per account.

Bank Accounts – Create Contact

image

Payment Document Sequence Numbers

These are now handled by Cash Management at bank account level using a Payment Document Category on the Payment Document. The Payment Document Category is created as usual when defining sequential numbering.

Payment Documents

image

image

Note the new functionality for managing cheque books.

Posted in: Cash Management by Kent Comments Off , ,

R12 – Upgrade Overview

This is a my personal log of changes from 11i to R12.

It is my intent to go through core financials in R12 as an internal project in order to make a structured approach to new features and changes in the new release.

So the notes below only applies to core Financials modules in scope.

This should prove useful when working with 11i based customers and consultants.

The Upgrade User Guide is not very detailed and when you look closer into each module you will realise the changes made are much more significant than stated.

This will have a major impact on businesses upgrading from 11i as not only are there many changes to the user interface but even more so are the changes to many of the maintenance forms where the underlying data model has changed completely. This will also have a major implications on any customisations or interfaces made.

Modules in scope in alphabetical order – module id:

General Changes

Obsolete Modules

  • Global Accounting Engine – AX – replaced by Subledger Accounting functionality
    AX always seemed to be a workaround rather than a core element of the architecture – so a great step forward.
  • iPayments – replaced by Payments functionality

Oracle Applications Framework – OAF

There seems to be a shift towards the Oracle Applications Framework – OAF based web forms from the professional java based client. In general this is good as the java client only was supported by a limited amount of browsers. However I have already had a few problems with the OAF buttons in various browsers like Google Chrome – so there may still be compatibility issues ahead. Always test and re-test.

Architecture Changes

  • TCA is now the container for all organisations and people in OA with the inclusion of suppliers, banks, employees and internal organisations.
    No more need to link suppliers to customers and data conversions has been simplified.
  • XML Publisher is becoming the core output tool weather it is reporting, business intelligence or external communication.
    This will enable non-technical people to make simple custom reports.
  • Multi-org security managed by security profiles instead of one organisation per responsibility.
    A great functionality for shared services centres.
  • MRC functionality now replaced by Reporting Currencies so rather than maintaining dual set of books it is now reported from one ledger only.
  • Subledger Accounting – both replaces Global Accounting Engine but also provides a single approach to GL posting from all subledgers.
    This should sort out all the custom reporting needs to verify and reconcile accounting from various modules. I have had loads of fun with the AP AE tables and can’t wait to see them go.
Posted in: Functional by Kent Comments Off , ,