# How to Add User Defined Fields (UDFs) in Sage 100

> Source: https://netray.co/erp-help/sage-100-user-defined-fields-udf-add-and-report
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: ERP Help

## Short answer

In Sage 100 you add a user defined field through Custom Office: open the Customizer Selection for the module, create the field with a name, type and length, then place it on the relevant data entry panel using the Customizer. UDFs are stored in the module's tables with a UDF_ prefix, which is how they appear in ODBC, Crystal and imports once the field is defined.

## Kind

how-to

## System

small-erp

## Erp

Sage 100

## Module

Custom Office / Customizer

## Query

how to add user defined fields in Sage 100

## Alternate Queries

- Sage 100 UDF Customizer Selection
- Sage 100 add custom field to sales order
- Sage 100 UDF not showing in Crystal report
- Sage 100 user defined field ODBC UDF_ prefix

## Applies To

Sage 100 Standard, Advanced and Premium with Custom Office (Customizer) available; menu text and the exact set of customisable screens vary by version and by the modules installed

## Steps

### Add a UDF and show it on a screen

**Items:**

- Make sure you are the only user in the company, or that the Sage 100 version allows customisation while others are logged on. Many sites schedule UDF changes for a quiet period.
- Open Custom Office, then Customizer Selection, and choose the module and the screen group where the data lives (for example Sales Order Entry header or Customer Maintenance).
- Use the UDF maintenance option to create the field. Set a clear name, the data type (string, numeric, date, or a list), the length or decimal places, and optional default and validation list.
- Open the Customizer on the screen and drag or add the field to a visible position, adjusting the label, tab order and read-only status.
- Save the customisation, then log out and back in so the panel reloads, and test by entering a record and reading it back.
- For reports, refresh the data source in Crystal or Excel so the new UDF_ column is visible.
- For imports, re-open the Visual Integrator job and map the new field, since the job does not pick up new columns automatically.
- Document the field in a change log with the owner and purpose, because UDFs outlive staff and are hard to retire cleanly.

## Sections

### How UDFs are stored

**Body:**

A UDF is defined at the table level and stored as an extra column on the module's data file. When you create a field named Region on the customer record, ODBC and the Business Object Interface expose it as UDF_REGION, with the prefix added automatically. Because the field lives on the base table, it is available to any report, extract or script that reads that table.

Header and line items are separate tables. A UDF on the sales order header belongs to SO_SalesOrderHeader, while one on the line belongs to the detail table. If you need a value on both the order and the invoice, you define it on each and rely on Sage's copy rules, or create a mapping that copies the value as the order converts. Do not assume a field entered on an order flows to the invoice unless you have checked this behaviour.

### Making UDFs useful beyond the screen

**Body:**

UDFs often fail not at creation but at the second step: users add the field to a screen and then find it empty in reports. In Crystal, use the refreshed table definition; in Excel through ODBC, re-run the query. In Visual Integrator, the new field appears in the field list after you re-select the source table. In BOI, read and write the field by its UDF_ name through nGetValue and nSetValue.

Validation matters. A free-text UDF used for a controlled value, such as sales region or inspection class, becomes inconsistent in months. Use a validation table or list where the product allows it, and keep names short and documented. Numeric UDFs used in calculations should define decimals carefully, because changing the decimals later can require rebuilding data.

**Code:**

- -- ODBC: reading a UDF defined as Region on the customer record
SELECT CustomerNo, CustomerName, UDF_REGION
FROM AR_Customer
WHERE UDF_REGION = 'WEST'

### Limits, upgrades and when not to use a UDF

**Body:**

Customisations created through Custom Office are carried through version upgrades in the normal case, but custom panels should be retested after every update, especially when Sage changes the underlying screen. Some screens cannot be customised, and UDFs do not change the business logic of standard posting.

If you need a calculation, a workflow or a validation that depends on other tables, a UDF alone is not enough. That is the point to look at Sage's scripting options for the version you run, or at a third-party tool. If you only need the data for reporting, consider whether a calculated column in the report layer is cheaper than permanent schema change.

## Pitfalls

- Defining the field on the order header and expecting it on invoice or ship-to records without checking where it is carried.
- Using free-text UDFs for controlled values, which produces dirty data in months.
- Changing a UDF's type or length after data exists without a tested plan and a backup.
- Forgetting to update Visual Integrator jobs and reports after adding the field.
- Skipping a retest of customised panels after a Sage 100 update or product update.

## Ai Angle

An assistant grounded in the Sage 100 data dictionary knows which UDFs exist on each table and can answer questions such as which customers have a given UDF value, showing the query. It can also draft the field definition and mapping notes for a Visual Integrator job for a human to review. It does not create the UDF itself; that remains a controlled Custom Office change.

## Faq

### Why does my new UDF not appear in Crystal Reports?

**Answer:** Crystal caches table definitions. Refresh the data source or re-map the database in the report so it picks up the new UDF_ column. Also confirm the UDF was created on the table the report reads, not on a related header or detail table.

### Do UDFs carry over from sales order to invoice?

**Answer:** Not automatically in every case. Check how the specific fields are carried for your version, and test with a copy company. If a value must flow, define the field on both records and verify the copy behaviour.

### Can I delete a UDF in Sage 100?

**Answer:** You can remove the definition in Customizer, but that discards the stored data, so back up first and check reports, imports and scripts that reference the UDF_ name. Hiding the field from the panel is the safer first step.

### Do UDFs work with ODBC and BOI?

**Answer:** Yes. They appear with the UDF_ prefix in ODBC and are readable and writable through the Business Object Interface by that name, subject to the same security and validation as other fields.

## Search terms

Sage 100 user defined fields, Sage 100 UDF, Custom Office Customizer Selection, Sage 100 add custom field, UDF_ Sage 100 ODBC, Sage 100 customize sales order entry, Sage 100 Visual Integrator UDF, Sage 100 custom field Crystal, MAS 90 UDF, Sage 100 customization

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
