Import Expense Plans

This feature allows for the importing of Project or Task Expense Plan information into the Unanet system.  

Within one import file, an Administrator can import entries for one to many projects and tasks, across multiple organizations if desired.  The Project level version of the import restricts the importing of data to the specific org/project the Project Manager / Lead is currently operating on.


Plan Set Feature Note

If the Plan Set Feature is enabled (via the Enable Multiple Plan Sets (unanet.plan_sets.enabled) property), note that you can only import into the 'active' plan set via this Administrative expense plans import.   The project level expense plans import, however, does allow for plans to be imported into specified Plan Sets.


This screen is available to users having any of the following roles: Administrator, P&R Administrator (and Project Manager and Project Lead have access to a project level version).


This feature is available with any Unanet edition.

Performance Tip Note:  Depending on the number of users in your installation and other factors such as the overall performance of your platform, the activity of importing one or many files may take up to several minutes.  Should this be the case with your installation, you may want to consider running these processes at non-peak times to minimize database contention.


Topics covered on this help page include:

Import File Record Layout



Field Header Name





ALWAYS REQUIRED.  This code uniquely identifies the Organization to which the project belongs.  This value must match an existing Project Organization Code value defined in your system.  If the Organization you are trying to import does not already exist in the database, the entire record will be rejected.




ALWAYS REQUIRED.  This project code identifies the project to which this Expense Plan belongs.  The project code is unique within an Organization.   This value must match an existing Project Code value defined in your system.  If the Project you are trying to import does not already exist in the database,  the entire record will be rejected.




CONDITIONALLY REQUIRED. This field is required if the project you are working on supports task level assignments.   Otherwise, this field is not allowed (e.g. if the project is managed at the project level -- import records will be rejected if this field is populated).  

The Task Name should be unique at the same indentation level under a project.

This value must match an existing Task Name value in your system.  If the Task Name you are trying to import does not already exist in the database,  the entire record will be rejected.

If a task is not a top-level task (e.g. it has sub-tasks), you must include a comma separated list of each task starting at the top level down.  The following is an example of a valid task tree and how you would reflect each task using this import.

Task Tree Access String

1.   Car Repair

"Car Repair"

1.1     Tires

"Car Repair,Tires"

1.2     Paint

"Car Repair,Paint"

1.2.1      Prep work

"Car Repair,Paint,Prep work"

1.2.2      Patching

"Car Repair,Paint,Patching"

1.3     Engine

"Car Repair,Engine"

1.3.1      Tune-up

"Car Repair,Engine,Tune-up"

1.3.1      Rebuild

"Car Repair,Engine,Rebuild"


See the Excel Tips regarding the use of double quotes and more.





ALWAYS REQUIRED.  This code uniquely identifies the Expense Type Name.   This value must match an existing Expense Type Name value in your system (not the expense type code). If the Expense Type name you are trying to import does not already exist in the database, the entire record will be rejected.  If the project your are importing the expense against has a project level expense type list, the expense type must be a valid expense type on that list. The expense type may be enabled or disabled.




CONDITIONALLY REQUIRED.  Additional description to uniquely identify this expense budget entry.  When updating an existing expense entry that has a populated Description, this field must match the existing entries value.  This field can be left blank. This field cannot be updated.

Maximum Length: 50 characters




ALWAYS REQUIRED.  This field represents the beginning date of the expense plan entry.  If this is an update to, or a deletion of, an existing expense plan entry, then this value must match the value on the existing entry.

When updating an existing entry, if one of the fields you are attempting to update is the Begin Date, you'll need to supply the following syntax in this field.

"!UPDATE!,old_begin_date,new_begin_date"  -- this entire string must be enclosed in double quotes (note that if you are working in Excel, Excel will provide the double quotes and thus you do not need to add them in manually).

Recommended date format:   yyyy-MM-dd    See Allowable Date Formats for more options.

See the Excel Tips regarding the use of double quotes and more.

See date overlap restriction note below.




ALWAYS REQUIRED on ADD. This field represents the ending date of the expense plan entry.  

Recommended date format:   yyyy-MM-dd    See Allowable Date Formats for more options.

See date overlap restriction note below.




ALWAYS REQUIRED on ADD.    Numeric amount for the line item being imported.

This field accepts a numeric value up to 16 positions to the left of the decimal and 2 positions to the right.




This field allows you to indicate that the Expense Plan entry dates will be linked with the dates specified on the Project (or Task -- depending on the Project/Task Assignment level for the project) rather than explicitly defining dates for the expense plan entry.  When used, any dates supplied in the Begin_Date and End_Date fields will be ignored on a new add.

A value of "Y" indicates that the dates will be linked to the project/task dates, and a value of "N" indicates that they will not be linked.  The default is "N".




This field can be used to trigger the system to delete an Expense Plan entry.  In order for the delete to happen, you must include the following text string !DELETE! in this field.


Note: Check out the Unanet Data model for specific field data types, lengths, and other attributes.

Import File Format

The file to import must be saved in a comma delimited format.   The fields can be enclosed in double quotes -- which would be particularly necessary should the data being imported contain commas.

Importing a Sub-Set of Columns using a Field Header Record

If you are not using the default column layout sequence as defined above, you must include a header record (prefixed with an asterisk *), containing the column Header Names for those columns you are including in the import file (to indicated what data is contained in each column).  The specific Header Names for each column are listed in the table above.



Date Overlap Restriction

When inserting entries for a particular project_org_code, project_code, task_name, description and expense type, you cannot import other expense plan entries having the same key field values that have date ranges that overlap.  Entries that would result in an overlap situation will not be imported, an error message will be written and the import will continue with the next record.

Excel Template

You can create the comma delimited import file with any number of tools.  For those interested in using an Excel spreadsheet to create the file, you can download an Excel Template with predefined headers and required fields noted.  

See the Excel Tips regarding the use of double quotes and more.

Import Screen

The Import Expense Plan screen looks like:

Field Descriptions:



Type of Import

Select the appropriate import type from the list of available types of imports.

File to Import

Enter (or browse for) the file that you would like to import.

Output Options

Specify the level of detail included in the output.

Expense Plans

When linking Expense Plan dates to the Project/Task dates, any existing Expense Plan dates supplied will be overridden.  Also, when using this feature only one Expense Plan entry per Project / Task / Expense Type / Description is allowed and thus existing Expense Plan records may be removed.  Because of this possibility of losing existing data, this check box is present to make sure any resulting data removal is intentional.


The import process is triggered by pressing the Import button.  All Warnings and Error messages are written to the screen and can then be saved if desired.  While some line items may be found invalid and rejected, the remaining line items will be successfully imported and saved in the database.  The rejected line items will be written out to a file on the Unanet server as well as displayed at the bottom of the user feedback screen.  The rejected record file name will be UnanetExpensePlanImportErrorxxx, where xxx is a randomly generated number.  The file will be placed in the Unanet temporary directory (which is defined by the Temp Directory (Fully Qualified Directory Name) (unanet.temp_directory) Unanet property).

Related Topics