Breadcrumbs

SI.WRITEBACK

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

ConnectionName

Required

The name of the connection as configured in the Connection Manager.

This function does not support the multiple connection functionality.

Object

Required

The name of the Sage Intacct object (case insensitive).

Use the SI.EXPANDOBJECTRANGE function to retrieve available values.


Settings

Optional

A string defining the selected writeback mode.
Available values:

  • "create"

  • "update"

  • "create-or-update" (default)

  • "recreate"

  • "delete"

OR

A 2-column array with three rows:

Mode

Any of the below values

  • "create"

  • "update"

  • "create-or-update" (default)

  • "recreate"

  • "delete"

(This argument is ignored if ParentRecordReference is specified)

BatchSize

A number (optional)

To avoid ERP timeouts on large writebacks and to improve responsiveness of the application, data is broken up in batches of 100 records (default). If you are processing large batches of writebacks and using screens with auto-numbered keys, you can adjust the batch size to ensure your data is not broken up in multiple records.

WritebackLocation

Expects a LocationId (optional)

Set this setting to a Location Id only for entity-scoped objects (or objects' records marked as Private, in other words that are not available at the Top Level).


Considering the below example, you may reference cells: $P$6:$Q$8

https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/frdNrfqHz1TLbLW4V5xUinMnBsoLyEiyUw.png


or use a formula instead:

=HSTACK(
    {"Mode"; "BatchSize"; "WritebackLocation"},
    VSTACK("update", 100, "")
)


OR just: $P$6:$Q$7 for an object record available at the Top Level:

https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/6EycHF1gfaWzT1fTT0yBEvVwTT7i6oVWaA.png


or use this formula instead:

=HSTACK(
    {"Mode"; "BatchSize"},
    VSTACK("update", 100)
)

RecordNo

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.

FieldNames

Required

A comma-separated string OR an Excel range containing the names of the fields for writeback.

ParentRecordReference

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.

ParentRecordGroupName

Optional

The name of the XML grouping element for the child entries under the parent.

This argument is ignored if ParentRecordReference is not specified

OutputFieldNames

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

OutputRange

Optional

The Excel range which will receive the fields of a created/updated record.

This argument is ignored when in "delete" mode

RangeOrDataItem

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 FieldNames argument.

...



Tips

  1. 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.

  2. The WRITEBACKCOMMIT function should be used for creating/updating/recreating parent child records (such as: Projects), so that the OutputRange value returned by the SI.WRITEBACK function can be used by subsequent SI.WRITEBACK in the same batch.

  3. WRITEBACK cannot 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.

  1. For formulas using the PODOCUMENT object:

    1. In the FieldNames argument, use VENDORID in place of CUSTVENDID

    2. In the FieldNames argument, remove the field STATUS (it is no longer supported).

  2. For formulas using the PODOCUMENTENTRY object:

    1. In the FieldNames argument, use PRICE in place of UIPRICE.

    2. In the FieldNames argument, remove the field DOCPARID (DOCPARID can remain in the header).

  3. For formulas using the OTHERRECEIPTSENTRY object:

    1. In the FieldNames argument, use AMOUNT in place of TRX_AMOUNT.

    2. If required, add LOCATIONID to FieldNames.

  4. To link child lines to headers, leverage ParentRecordReference instead of ParentRecordGroupName.

  5. DOCID or RECORD_URL values 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 the DOCID for the PODOCUMENT line with a RECORDNO value 119:

    image-20260206-161814.png

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):

Allowed PODOCUMENT fields:

RECORDNO
DOCNO
DOCID
CREATEDFROM
STATE
CLOSED
WHENCREATED
WHENMODIFIED
WHENPOSTED
WHENDUE
VENDORDOCNO
DOCPARID
TERM.NAME
SHIPVIA
CONTACT.CONTACTNAME
SHIPTO.CONTACTNAME
BILLTO.CONTACTNAME
DELIVERTO.CONTACTNAME
MESSAGE
EXCHRATEDATE
EXCHRATE
EXCH_RATE_TYPE_ID
CURRENCY
BASECURR
EXTERNALREFNO
PROJECTKEY
CHANGELOGNUMBER
NEEDBYDATE
DONOTSHIPBEFOREDATE
DONOTSHIPAFTERDATE
PROMISEDDATE
CONTRACTSTARTDATE
CONTRACTENDDATE
CANCELAFTERDATE
SCOPE
INCLUSIONS
EXCLUSIONS
TERMS
SCHEDULESTARTDATE
ACTUALSTARTDATE
SCHEDULEDCOMPLETIONDATE
REVISEDCOMPLETIONDATE
SUBSTANTIALCOMPLETIONDATE
ACTUALCOMPLETIONDATE
NOTICETOPROCEED
RESPONSEDUE
EXECUTEDON
SCHEDULEIMPACT
INTERNALREFNO
INTERNALINITIATEDBY
INTERNALVERBALBY
INTERNALISSUEDBY
INTERNALISSUEDON
INTERNALAPPROVEDBY
INTERNALAPPROVEDON
INTERNALSIGNEDBY
INTERNALSIGNEDON
INTERNALSOURCE
INTERNALSOURCEREFNO
EXTERNALVERBALBY
EXTERNALAPPROVEDBY
EXTERNALAPPROVEDON
EXTERNALSIGNEDBY
EXTERNALSIGNEDON
PERFORMANCEBONDREQUIRED
PERFORMANCEBONDRECEIVED
PERFORMANCEBONDAMOUNT
PERFORMANCESURETYCOMPANY
PAYMENTBONDREQUIRED
PAYMENTBONDRECEIVED
PAYMENTBONDAMOUNT
PAYMENTSURETYCOMPANY
TAXSOLUTIONID
SUPDOCID
VENDORID
REFNO
PAYTO.CONTACTNAME
RETURNTO.CONTACTNAME

Allowed PODOCUMENTENTRY fields:

RECORDNO
LINE_NO
ITEMID
ITEMNAME
ITEMDESC
ITEM.TAXABLE
WAREHOUSE.LOCATION_NO
UIQTY
UNIT
PRICE
AMOUNT
LOCATIONID
DEPARTMENTID
PROJECTID
COSTTYPEID
TASKID
CUSTOMERID
VENDORID
EMPLOYEEID
CLASSID
MEMO
FORM1099
TAXABSVALUE
TAXVALOVERRIDE
BILLABLE
ITEMALIASID
LINELEVELSIMPLETAXTYPE
SOURCELINEKEY
DELIVERTOCONTACTNAME
FORM1099TYPE
FORM1099BOX
NEEDBYDATE
DONOTSHIPBEFOREDATE
DONOTSHIPAFTERDATE
PROMISEDDATE
DATECONFIRMED
CANCELAFTERDATE
DATESHIPTOSUPPLIER
ALLOCATIONID
RETAINAGEPERCENTAGE
TRX_AMOUNTRETAINED
RELATEDDOCKEY
RELATEDDOCLINEKEY
CONVERSIONTYPE
PARTIALEXEMPT
PAYMENTTAXCAPTURE
REVERSECONVERSION
TAXSCHEDULEID
SOURCEDOCID
SOURCEDOCLINEID
CONTRACTID

Allowed PODOCUMENTSUBTOTALS fields:

DESCRIPTION
TOTAL
ABSVAL
PERCENTVAL
LOCATION
DEPARTMENT
PROJECTID
CUSTOMERID
VENDORID
EMPLOYEEID
CLASSID
ITEMID
CONTRACTID

Allowed PODOCUMENTITEMDETAIL fields:

QUANTITY
SERIALNO
LOTNO
AISLE
ROW
BIN
ITEMEXPIRATION

Allowed OTHERRECEIPTS fields:

RECORDNO
WHENCREATED
DESCRIPTION2
PAYER (alias for DESCRIPTION2)
WHENPAID
PAYMETHOD
DOCNUMBER
DESCRIPTION
BANKACCOUNTID
DEPOSITDATE
CURRENCY
EXCH_RATE_DATE
EXCH_RATE_TYPE_ID
EXCHANGE_RATE
TAXSOLUTIONID
SUPDOCID
UNDEPO_GLACCOUNTNO

Allowed OTHERRECEIPTSENTRY fields:

RECORDNO
LINE_NO
ACCOUNTNO
ACCOUNTLABEL
AMOUNT
TRX_AMOUNT
DEPARTMENTID
LOCATIONID
DESCRIPTION
EXCH_RATE_DATE
EXCH_RATE_TYPE_ID
EXCHANGE_RATE
CURRENCY
ISTAX
DETAILKEY
TAXRATE
DETAILID
GLDIMDONOR
GLDIMS_ASSET
GLDIMS_ASSET_CLASS
GLDIMS_CUSTOMFIELD
PROJECTID
CUSTOMERID
EMPLOYEEID
ITEMID
TASKID
COSTTYPEID
CLASSID
VENDORID
CONTRACTID
WAREHOUSEID

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]]
)


https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/ZFPOo8XsMl5LWSbfEEFmyHou7xJJQN5yPg.png


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]]
)


https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/qvvY6jhc4JwZUlNXjlf5JfiLFfkRwTpWZw.png

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.


https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/qInhRm5Pcm9pvpmn2CkHB3DC8Et-B-kRCQ.png

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:

https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/P3GKPJlf11Mu260PyOaYTAP46-LjBiHZQA.png

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):

https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/MJHemScCbTQOGKYH8QzS9lZ0_6QpQTVVEg.png


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:

https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/cax-Vwq41DSY0M5yS_4mdpYQOXiLekCsZg.png


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):

https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/cERsFY209LpYei8gTMU7mtFv9elliwnaDA.png


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:


https://s3.ca-central-1.amazonaws.com/cdn.velixo.com/helpdesk/oTCaQqc0lNVuT3NlgzPI5qi_XWkvgLgk3A.png