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 in most cases.
Required when the parent–child pair maps to more than one XML group name (see Defaults for ParentRecordGroupName).

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


You can omit this argument when the parent–child pair maps to a single XML group name; Velixo applies the default automatically.

Specify this argument explicitly when the parent–child pair maps to more than one possible XML group name — for example, GLACCTGRP with an ACCTRANGE or GLCOACATMEMBER child. If you omit it in those cases, Velixo creates the parent record but does not create the child, with no error returned.

This argument is ignored if ParentRecordReference is not specified, or if the API setting is Legacy (in which case the XML group name is determined automatically).

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.

Defaults for the ParentRecordGroupName argument

When ParentRecordReference is set, and the parent–child pair maps to a single XML group name, you can omit ParentRecordGroupName. Velixo automatically applies the default for that pair.

For example, when the child SI.WRITEBACK formula references a parent SI.WRITEBACK formula for APBILL, ParentRecordGroupName is optional — its only valid value is APBILLITEMS, so Velixo uses it by default.

Parent–child pairs with multiple possible group names

Specify ParentRecordGroupName explicitly for these pairs.

If you omit ParentRecordGroupName for the pairs below, Velixo creates the parent record but does not create the child, and no error is returned. To avoid losing child records, always specify ParentRecordGroupName for these combinations.

Parent object

Child object

Possible group names (specify one)

GLACCTGRP

ACCTRANGE

GLACCTRANGES, GLSTATACCTRANGES

GLACCTGRP

GLCOACATMEMBER

GLCATGRPS, GLSTATCATGRPS

Supported defaults

The table below lists the parent–child pairs for which Velixo applies a default group name when ParentRecordGroupName is omitted. The defaults apply to the standard API. With the Legacy API, the group name is always determined automatically, and any value provided is ignored.

Show all defaults

Parent object

Child object

Default XML group name

ALLOCATION

ALLOCATIONENTRY

ALLOCATIONENTRIES

APADJUSTMENT

APADJUSTMENTITEM

APADJUSTMENTITEMS

APBILL

APBILLITEM

APBILLITEMS

APPYMT

APPYMTDETAIL

APPYMTDETAILS

APRECURBILL

APRECURBILLENTRY

APRECURBILLENTRIES

APRETAINAGERELEASE

APRETAINAGERELEASEENTRY

APRETAINAGERELEASEENTRIES

ARADJUSTMENT

ARADJUSTMENTITEM

ARADJUSTMENTITEMS

ARADVANCE

ARADVANCEITEM

ARADVANCEITEMS

ARINVOICE

ARINVOICEITEM

ARINVOICEITEMS

ARPYMT

ARPYMTDETAIL

ARPYMTDETAILS

ARRECURINVOICE

ARRECURINVOICEENTRY

ARRECURINVOICEENTRIES

ARRETAINAGERELEASE

ARRETAINAGERELEASEENTRY

ARRETAINAGERELEASEENTRIES

BANKACCTTXNFEED

BANKACCTTXNRECORD

BANKACCTTXNRECORDS

CCTRANSACTION

CCTRANSACTIONENTRY

CCTRANSACTIONENTRIES

CHANGEREQUEST

CHANGEREQUESTENTRY

CHANGEREQUESTENTRIES

CONTRACTBILLINGTEMPLATE

CONTRACTBILLINGTEMPLATEENTRY

CONTRACTBILLINGTEMPLATEENTRIES

CONTRACTEXPENSETEMPLATE

CONTRACTEXPENSETEMPLATEENTRY

CONTRACTEXPENSETEMPLATEENTRIES

CONTRACTITEMPRICELIST

CONTRACTITEMPRICELISTENTRY

CONTRACTITEMPRICELISTENTRIES

CONTRACTITEMPRICELISTENTRY

CONTRACTITEMPRCLSTENTYTIER

CONTRACTITEMPRCLSTENTYTIERS

CONTRACTMEABUNDLE

CONTRACTMEABUNDLEENTRY

CONTRACTMEABUNDLEENTRIES

CONTRACTREVENUETEMPLATE

CONTRACTREVENUETEMPLATEENTRY

CONTRACTREVENUETEMPLATEENTRIES

DEPOSIT

DEPOSITENTRY

DEPOSITENTRIES

EEXPENSES

EEXPENSESITEM

EEXPENSESITEMS

EXCHANGERATE

EXCHANGERATEENTRY

EXCHANGERATEENTRIES

EXPENSEADJUSTMENTS

EXPENSEADJUSTMENTSITEM

EXPENSEADJUSTMENTSITEMS

GCOWNERSHIPENTITY

GCOWNERSHIPCHILDENTITY

GCOWNERSHIPCHILDENTITIES

GCOWNERSHIPSTRUCTUREDETAIL

GCOWNERSHIPENTITY

GCOWNERSHIPENTITIES

GLACCTALLOCATIONGRP

GLACCTALLOCATIONGRPMEMBER

GLACCTALLOCATIONGRPMEMBERS

GLACCTALLOCATIONSOURCE

GLACCTALLOCATIONSOURCEADJBOOK

GLACCTALLOCATIONSOURCEADJBOOKS

GLACCTGRP

GLACCTGRPMEMBER

GLACCTGRPS

GLACCTGRP

GLCOMPGRPMEMBER

GLCOMPGRPS

GLBATCH

GLENTRY

ENTRIES

GLBUDGETHEADER

GLBUDGETITEM

GLBUDGETITEMS

ICTRANSFER

ICTRANSFERITEM

ICTRANSFERITEMS

INVDOCUMENT

INVDOCUMENTENTRY

INVDOCUMENTENTRIES

OTHERRECEIPTS

OTHERRECEIPTSENTRY

OTHERRECEIPTSENTRIES

PJESTIMATE

PJESTIMATEENTRY

ENTRIES

PODOCUMENT

PODOCUMENTENTRY

PODOCUMENTENTRIES

PROJECTCONTRACTLINE

PROJECTCONTRACTLINEENTRY

PROJECTCONTRACTLINEENTRIES

RATETABLE

RATETABLEAPENTRY

RATETABLEAPENTRIES

RATETABLE

RATETABLECCENTRY

RATETABLECCENTRIES

RATETABLE

RATETABLEEXPENSEENTRY

RATETABLEEXPENSEENTRIES

RATETABLE

RATETABLEGLENTRY

RATETABLEGLENTRIES

RATETABLE

RATETABLEPOENTRY

RATETABLEPOENTRIES

RATETABLE

RATETABLETSENTRY

RATETABLETSENTRIES

SODOCUMENT

SODOCUMENTENTRY

SODOCUMENTENTRIES

STANDARDTASK

STANDARDTASKSTANDARDCOSTTYPE

STANDARDTASKSTANDARDCOSTTYPES

STKITDOCUMENT

STKITDOCUMENTENTRY

STKITDOCUMENTENTRIES

TIMESHEET

TIMESHEETENTRY

TIMESHEETENTRIES

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. Set the API argument to legacy.

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

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

  2. For formulas using the PODOCUMENTENTRY object:

    1. Set the API argument to legacy.

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

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

  3. For formulas using the OTHERRECEIPTSENTRY object:

    1. Set the API argument to legacy.

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

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