PA Project Asset Upload

Description

PA Project Asset Upload creates, updates and deletes the capital assets defined on an Oracle Projects capital project – and optionally their asset-to-task assignments – from Excel, via the standard Oracle public API. It maintains the project asset records; it does not capitalize them.

When to use it

  • Bulk-load estimated capital assets onto capital projects early in the project lifecycle.
  • Record as-built capital assets before capitalization.
  • Mass-assign capital assets to project tasks (top-task rollup or leaf-task assignments).
  • Maintain asset attributes (description, category, book, location, units, estimated cost, identification, flexfields) across many assets.
  • Add or remove asset-to-task assignments in bulk.

Before you start

  • Blitz Report is installed and you are signed in to a responsibility with access to the operating unit and project.
  • A capital project already exists in the target operating unit.
  • The FA classification values you reference (book, asset category, asset key, location, depreciation account, parent asset) and any assignment tasks already exist.

Step 1 – Choose a mode, set the parameters and download

In Blitz Report, open PA Project Asset Upload, choose an Upload Mode (Create for an empty template, or Create, Update to download existing project assets), and set the parameters:

ParameterPurpose
Upload ModeCreate or Create, Update. Default is Create.
Operating UnitThe operating unit (required); filters the project list.
Project NumberThe capital project whose assets are uploaded (required).

Run the upload to download and open the Excel file. Each asset is automatically handled as a create or an update depending on whether it already exists.

Step 2 – Enter the assets

On each row enter the Project Number, Asset Name, Description and Asset Type (Estimated or As-Built), and the FA classification (Book, Asset Category, Location), dates, units and cost. To also create an asset-to-task assignment, fill the Assignment Task Number (repeat the asset on extra rows for multiple task assignments).

Step 3 – Delete assignments (optional)

To remove an asset’s assignment to a task, set Delete Assignment to Yes on its row.

Step 4 – Validate and Save

Click Validate and Save. This checks for missing required values and runs the upload’s validation, then saves the file. Correct anything it flags before continuing.

Step 5 – Upload and view the result

Back in Blitz Report, click Upload and select your saved file. This submits the Blitz Upload request, which creates or updates each asset and maintains its assignments. When it finishes, a result report opens showing each row as success or error.

What’s produced

  • Created and updated project assets with their task assignments.
  • A result report listing every row with a status (success or error) and a message.

Common questions

Does this capitalize the assets or create FA assets?
No. It defines and maintains the project asset records and their task assignments only. Capitalization is a separate process.

How do I create an asset with no task assignment?
Leave the Assignment Task Number blank on the row – only the asset header is created/updated.

How do I assign one asset to several tasks?
Repeat the asset’s columns on multiple rows, each with a different Assignment Task Number.

How do I change an existing assignment’s attributes?
You can’t update an assignment in place – set Delete Assignment = Yes on one row, then add it again on another row with the new values.

What asset types can I load?
Only Estimated and As-Built.

Why doesn’t the depreciation account I expect appear?
The account list is the project’s ledger chart of accounts (expense accounts only); accounts from other ledgers aren’t offered.

Troubleshooting

MessageCauseWhat to do
Invalid Asset Category / Asset Key / LocationThe KFF value doesn’t match an enabled FA flexfield combination.Pick from the column’s list; the Asset Category list is filtered by the chosen Book.
Invalid Depreciation Expense AccountThe account isn’t a valid, enabled expense account in the project’s ledger.Choose from the account list (scoped to the project’s ledger and to expense accounts).
Rollup = Yes requires the task to be a top taskRollup = Yes was set on a task that is not a top task.Use a top task for rollup, or leave Rollup blank for a leaf-task assignment.
Failed to create/update project asset (API error)The underlying API rejected the data (dates, units, book/category combination, etc.).Read the API message, correct the field and re-upload.
Assignment to task not found (nothing to delete)Delete Assignment = Yes but no such assignment exists.Informational – remove the Delete flag if not intended.
select
null action_,
null status_,
null message_,
null request_id_,
null modified_columns_,
-- operating unit and project
haouv.name operating_unit,
ppa.segment1 project_number,
ppa.name project_name,
-- asset identity
ppaa.project_asset_id,
ppaa.pm_asset_reference asset_reference,
ppaa.asset_name,
ppaa.asset_description description,
xxen_util.meaning(ppaa.project_asset_type,'PROJECT_ASSET_TYPES',275) project_asset_type,
ppaa.asset_number,
xxen_util.meaning(ppaa.pm_product_code,'PM_PRODUCT_CODE',275) product_source,
-- FA book and KFFs
ppaa.book_type_code book,
fcbk.concatenated_segments asset_category,
fakk.concatenated_segments asset_key,
flk.concatenated_segments location,
-- employee
papf.full_name employee_name,
papf.employee_number,
-- dates
ppaa.estimated_in_service_date,
ppaa.date_placed_in_service actual_in_service_date,
-- units and cost
ppaa.estimated_asset_units,
ppaa.asset_units actual_units,
ppaa.estimated_cost,
-- parent asset
fa.asset_number parent_asset_number,
-- flags
decode(ppaa.depreciate_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) depreciate,
decode(ppaa.amortize_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) amortize_adjustments,
gcck.concatenated_segments depreciation_expense_account,
decode(ppaa.capital_hold_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) capital_hold,
-- identification
ppaa.manufacturer_name,
ppaa.model_number,
ppaa.serial_number,
ppaa.tag_number,
-- asset DFF
xxen_util.display_flexfield_context(275,'PA_PROJECT_ASSETS',ppaa.attribute_category) asset_attribute_category,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE1',ppaa.rowid,ppaa.attribute1) asset_attribute1,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE2',ppaa.rowid,ppaa.attribute2) asset_attribute2,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE3',ppaa.rowid,ppaa.attribute3) asset_attribute3,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE4',ppaa.rowid,ppaa.attribute4) asset_attribute4,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE5',ppaa.rowid,ppaa.attribute5) asset_attribute5,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE6',ppaa.rowid,ppaa.attribute6) asset_attribute6,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE7',ppaa.rowid,ppaa.attribute7) asset_attribute7,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE8',ppaa.rowid,ppaa.attribute8) asset_attribute8,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE9',ppaa.rowid,ppaa.attribute9) asset_attribute9,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE10',ppaa.rowid,ppaa.attribute10) asset_attribute10,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE11',ppaa.rowid,ppaa.attribute11) asset_attribute11,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE12',ppaa.rowid,ppaa.attribute12) asset_attribute12,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE13',ppaa.rowid,ppaa.attribute13) asset_attribute13,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE14',ppaa.rowid,ppaa.attribute14) asset_attribute14,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSETS',ppaa.attribute_category,'ATTRIBUTE15',ppaa.rowid,ppaa.attribute15) asset_attribute15,
-- assignment
pt.task_id assignment_task_id,
pt.task_number assignment_task_number,
decode(case when pt.task_id is not null and pt.task_id=pt.top_task_id then 'Y' end,'Y',xxen_util.meaning('Y','YES_NO',0)) rollup,
null delete_assignment,
-- assignment DFF
xxen_util.display_flexfield_context(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category) assign_attribute_category,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE1',paas.rowid,paas.attribute1) assign_attribute1,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE2',paas.rowid,paas.attribute2) assign_attribute2,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE3',paas.rowid,paas.attribute3) assign_attribute3,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE4',paas.rowid,paas.attribute4) assign_attribute4,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE5',paas.rowid,paas.attribute5) assign_attribute5,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE6',paas.rowid,paas.attribute6) assign_attribute6,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE7',paas.rowid,paas.attribute7) assign_attribute7,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE8',paas.rowid,paas.attribute8) assign_attribute8,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE9',paas.rowid,paas.attribute9) assign_attribute9,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE10',paas.rowid,paas.attribute10) assign_attribute10,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE11',paas.rowid,paas.attribute11) assign_attribute11,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE12',paas.rowid,paas.attribute12) assign_attribute12,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE13',paas.rowid,paas.attribute13) assign_attribute13,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE14',paas.rowid,paas.attribute14) assign_attribute14,
xxen_util.display_flexfield_value(275,'PA_PROJECT_ASSET_ASSIGNMENTS',paas.attribute_category,'ATTRIBUTE15',paas.rowid,paas.attribute15) assign_attribute15,
to_number(null) upload_row
from
pa_projects_all ppa,
hr_all_organization_units_vl haouv,
pa_project_assets_all ppaa,
pa_project_asset_assignments paas,
pa_tasks pt,
fa_categories_b_kfv fcbk,
fa_asset_keywords_kfv fakk,
fa_locations_kfv flk,
fa_additions_v fa,
gl_code_combinations_kfv gcck,
per_all_people_f papf
where
1=1 and
ppa.org_id=haouv.organization_id and
ppa.project_id=ppaa.project_id and
ppaa.project_asset_type in ('AS-BUILT','ESTIMATED') and
ppaa.project_asset_id=paas.project_asset_id(+) and
paas.project_id(+)<>0 and
paas.task_id=pt.task_id(+) and
ppaa.asset_category_id=fcbk.category_id(+) and
ppaa.asset_key_ccid=fakk.code_combination_id(+) and
ppaa.location_id=flk.location_id(+) and
ppaa.parent_asset_id=fa.asset_id(+) and
ppaa.depreciation_expense_ccid=gcck.code_combination_id(+) and
ppaa.assigned_to_person_id=papf.person_id(+) and
trunc(sysdate) between papf.effective_start_date(+) and papf.effective_end_date(+)
Parameter NameSQL textValidation
Upload Mode
:p_upload_mode like '%' || xxen_upload.action_update
LOV
Operating Unit
haouv.name=:p_operating_unit
LOV
Project Number
ppa.segment1=:p_project_number
LOV