Overview
The SI.WRITEBACK function sends one or more lines of values to the ERP. The function uses the fields specified in a pre-defined Object in the ERP.
Syntax
=SI.WRITEBACK(
ConnectionName,
Object,
Settings,
RecordNo,
FieldNames,
ParentRecordReference,
ParentRecordGroupName,
OutputFieldNames,
OutputRange,
RangeOrDataItem,
...
)
Arguments
The SI.WRITEBACK function uses the following arguments:
|
Argument |
Required/Optional |
Description |
||||||
|
|
Required |
The name of the connection as configured in the Connection Manager. This function does not support the multiple connection functionality. |
||||||
|
|
Required |
The name of the Sage Intacct object (case insensitive).
|
||||||
|
|
Optional |
A string defining the selected writeback mode.
OR
A 2-column array with three rows:
or use a formula instead:
|
||||||
|
|
Required when the Mode argument is set to create, update, or recreate |
Indicates the record number to be used for creating, updating, or recreating a record within the ERP. |
||||||
|
|
Required |
A comma-separated string OR an Excel range containing the names of the fields for writeback. |
||||||
|
|
Optional |
A reference to a cell containing another SI.WRITEBACK function to indicate that the current record has a child → parent relationship with the other record. |
||||||
|
|
Optional |
The name of the XML grouping element for the child entries under the parent.
This argument is ignored if |
||||||
|
|
Required |
An Excel cell range (or a comma-separated string) containing the field names to retrieve from the resulting object.
This argument is ignored when in "delete" mode |
||||||
|
|
Optional |
The Excel range which will receive the fields of a created/updated record.
This argument is ignored when in "delete" mode |
||||||
|
|
Required |
The first set of data to be sent to the ERP. The values to be written must be specified in the same order as the column/field names specified in the |
||||||
|
... |
|
|
Tips
-
As an alternative to using the Platform Services → Object screen in Sage Intacct, you may also use the SI.QUERY and/or SI.OBJECTDEFINITION functions for determining the exact column names of a given Object to use in the Writeback function.
-
The WRITEBACKCOMMIT function should be used for creating/updating/recreating parent child records (such as: Projects), so that the
OutputRangevalue returned by the SI.WRITEBACK function can be used by subsequent SI.WRITEBACK in the same batch. -
WRITEBACKcannot be used to update existing journal transactions within Intacct.
Legacy writeback considerations
Starting with Velixo NX 2026.1, some Sage Intacct objects (for example, PODOCUMENT or OTHERRECEIPTS) can only be updated via Sage Intacct’s legacy, object‑specific functions instead of the generic Sage Intacct API. In such cases, Velixo automatically uses SI.WRITEBACK in legacy writeback mode.
As a result of this change, users whose SI.WRITEBACK formulas write back to objects PODOCUMENT, PODOCUMENTENTRY, and OTHERRECEIPTSENTRY need to update their formulas to keep writeback functional. Follow the steps outlined below to update your formulas.
-
For formulas using the
PODOCUMENTobject:-
In the
FieldNamesargument, useVENDORIDin place ofCUSTVENDID -
In the
FieldNamesargument, remove the fieldSTATUS(it is no longer supported).
-
-
For formulas using the
PODOCUMENTENTRYobject:-
In the
FieldNamesargument, usePRICEin place ofUIPRICE. -
In the
FieldNamesargument, remove the fieldDOCPARID(DOCPARIDcan remain in the header).
-
-
For formulas using the
OTHERRECEIPTSENTRYobject:-
In the
FieldNamesargument, useAMOUNTin place ofTRX_AMOUNT. -
If required, add
LOCATIONIDtoFieldNames.
-
-
To link child lines to headers, leverage
ParentRecordReferenceinstead ofParentRecordGroupName. -
DOCIDorRECORD_URLvalues may remain blank despite successful writeback. To retrieve these values, use the SI.QUERYLOOKUP function.
For example,=SI.QUERYLOOKUP(,"PODOCUMENT",,"DOCID","RECORDNO","119")will retrieve theDOCIDfor thePODOCUMENTline with aRECORDNOvalue119:
Fields available for legacy writeback objects
When creating SI.WRITEBACK formulas for legacy writeback objects, be sure to only use the field names listed below (click to expand):
Examples
Example 1 - Creating a new Vendor record
=SI.WRITEBACK(
$B$4,
$B$6,
$D$4:$E$5,
,
Table1[[#Headers],[Name]:[Status]],
,
,
$H$4,
$E13,
Table1[@[Name]:[Status]]
)
Example 2 - Updating an attribute of an existing Project
=SI.WRITEBACK(
$B$4,
$B$6,
$D$4:$E$5,
[@RecordNo],
Table2[[#Headers],[ProjectID]:[ProjectType]],
,
,
,
,
Table2[@[ProjectID]:[ProjectType]]
)
Updating records requires specifying the RecordNo of the record to update. The SI.QUERY function can be used to query the same object to retrieve the RecordNo of the specific item you wish to update.
Example 3 - Creating a record in a Private object (Cost Code Observed Percent Completed Entry scenario)
=SI.WRITEBACK(
$K$4,
$K$6,
$O$4:$P$6,
,
Table137[[#Headers],[TYPE]:[NOTE]],
,
,
$P$7,
P10,
Table137[@[TYPE]:[NOTE]]
)
In this example, the WritebackLocation Setting is used in the 2-column Array: $O$4:$P$6, as the OBSPCTCOMPLETED object is a private object (meaning its records are "private" to a specific entity), and a specific Locationid must be referenced.
Due to a limitation within Sage Intacct, Velixo is unable to provide a specific error message to inform that the WritebackLocation argument needs to be used.
Instead, the following error message may be displayed:
Except from the message: BL01001973 Could not create obspctcompleted record
Example 4 - Update the detail data of an object without updating the header data
(using the APBILL and APBILLITEM objects)
There is a documented example of creating both header and detail information for an object. Let's look at updating only the detail portion.
Here we have both header data (from the APBILL object) and detail data (from the APBILLITEM object):
In this example, we want to change the DEPARTMENTID field at the detail-level from OPERATIONS to FINANCE.
Although we do not want to change the header data, we do need a reference to that header. So, the first thing we are going to is create a header writeback (cell I13) that does nothing except ensure that we have that reference:
All that function does is update the header with the same RECORDNO field that we already retrieved (cell A8) using the SI.QUERY function.
Now, we can create a WRITEBACK function (cell I14) that references the results of the first function (in the ParentRecordReference argument) and uses Update mode to replace the DEPARTMENTID field with the new value (cell J14) while maintaining the existing other field values (cells A14, B14, C14, D14, and F14):
After performing a Full Refresh (to clear any cached SI.QUERY data in our report), we see the updated detail data with no changes to the header: