TxnVoid(1.1)

Voiding a transaction sets its amount to zero but keeps a record of it in QuickBooks. (Using TxnDel to delete a transaction, on the other hand, removes the transaction completely.)

If you try to void or delete a transaction while it is in use, you will get an error. You will also get an error if you try to void or delete a transaction (say a sales receipt) while a linked transaction (such as a deposit) is in use. If you try to void or delete a transaction that was created before the company’s closing date, you might or might not get an error, depending on the permissions and passwords that are set in QuickBooks.

The mode in which a QuickBooks company file is open (single-user or multiuser) does not impact your application’s ability to void transaction objects in it.


Request

Response

XMLOps

VB.NET

C#

Tag Type Max length Implementation Required

ITxnVoid

Voiding a transaction sets its amount to zero but keeps a record of it in QuickBooks. (Using TxnDel to delete a transaction, on the other hand, removes the transaction completely.) If you try to void or delete a transaction while it is in use, you will get an error. You will also get an error if you try to void or delete a transaction (say a sales receipt) while a linked transaction (such as a deposit) is in use. If you try to void or delete a transaction that was created before the company’s closing date, you might or might not get an error, depending on the permissions and passwords that are set in QuickBooks.The mode in which a QuickBooks company file is open (single-user or multiuser) does not impact your application’s ability to void transaction objects in it.
    1.1  

TxnVoidType

The type of transaction being voided.
IQBENTxnVoidTypeType     Y

TxnID

QuickBooks generates a unique TxnID for each transaction that is added to QuickBooks. A TxnID returned from a request can be used to refer to the transaction in subsequent requests. Notice that you cannot supply the TxnID of a TimeTracking transaction to TransactionQueryRq requests. If you do, you get an error stating that no such record could be found, even though the transaction is in QuickBooks. This behavior reflects the behavior in the QuicKBooks UI in the Find window.
IQBIDType     Y
Tag Type Max length Implementation Required

IResponse

Voiding a transaction sets its amount to zero but keeps a record of it in QuickBooks. (Using TxnDel to delete a transaction, on the other hand, removes the transaction completely.) If you try to void or delete a transaction while it is in use, you will get an error. You will also get an error if you try to void or delete a transaction (say a sales receipt) while a linked transaction (such as a deposit) is in use. If you try to void or delete a transaction that was created before the company’s closing date, you might or might not get an error, depending on the permissions and passwords that are set in QuickBooks.The mode in which a QuickBooks company file is open (single-user or multiuser) does not impact your application’s ability to void transaction objects in it.
    1.1  

StatusCode

A number that corresponds to a statusSeverity and statusMessage. Five status codes relate directly to signon messages: 2000, 2010, 2020, 2030, and 2040. For details about these and other statusCode values that can be returned, see the statusCode table on the Error Codes page.
IQBIntType     Y

StatusSeverity

One of the following values: INFO The request was completed, and the results are consistent with what your application expected. WARNING The request was completed, but the results might not be consistent with what you expected. ERROR The request was not completed. No data will appear in the server’s response after the statusMessage.
IQBStringType     Y

StatusMessage

A user-readable explanation of the success or error condition that is indicated by the statusCode. For details about the statusMessage values that can be returned, see the “Explanation” column of the statusCode table on the Error Codes page.
IQBStringType     Y

TxnVoidType

The type of transaction being voided.
IQBENTxnVoidTypeType      

TxnID

QuickBooks generates a unique TxnID for each transaction that is added to QuickBooks. A TxnID returned from a request can be used to refer to the transaction in subsequent requests. Notice that you cannot supply the TxnID of a TimeTracking transaction to TransactionQueryRq requests. If you do, you get an error stating that no such record could be found, even though the transaction is in QuickBooks. This behavior reflects the behavior in the QuicKBooks UI in the Find window.
IQBIDType      

TimeCreated

Time the object was created.
IQBDateTimeType      

TimeModified

Time the object was last modified.
IQBDateTimeType      

RefNumber

A string of characters that refers to this transaction and that can be arbitrarily changed by the QuickBooks user. In a BillPaymentCheckAdd request, if you want to set the check number, use RefNumber.Note (especially relevant to CheckAdd requests): When RefNumber is left blank in an SDK transaction add request (that is, or ), the RefNumber will be left blank in QuickBooks. This behavior is new as of QBFC3. It used to select the next sequential reference number since the last one used by QuickBooks, as though no RefNumber had been provided. This is especially relevant to CheckAdd requests because with the current behavior, you will not know the number until the check is printed.
IQBStringType      

Detail

IErrorRecovery   11.0  

ORListOwnerTxn

IORListOwnerTxn     Y

ListID

Along with FullName, ListID is a way to identify a list object. When a list object is added to QuickBooks through the SDK or through the QuickBooks user interface, the server assigns it a ListID. A ListID is not unique across lists, but it is unique across each particular type of list. For example, two customers could not have the same ListID, and a customer could not have the same ListID as an employee (because Customer and Employee are both name lists). But a customer could have the same ListID as a non-inventory item.
IQBIDType      

OwnerID

Refers to the owner of a data extension:If OwnerID is 0, this is a public data extension, also known as a custom field. Custom fields appear in the QuickBooks UI.If OwnerID is a GUID, for example {6B063959-81B0-4622-85D6-F548C8CCB517}, this field is a private data extension defined by an integrated application. Private data extensions do not appear in the QuickBooks UI. Note that OwnerID values are not case-sensitive, meaning that if you enter an OwnerID value with lower-case letters, the value will be saved and returned with upper-case letters. When you share a private data extension with another application, the other application must know both the OwnerID and the DataExtName, as these together form a data extension’s unique name.
IQBGUIDType      

TxnID

QuickBooks generates a unique TxnID for each transaction that is added to QuickBooks. A TxnID returned from a request can be used to refer to the transaction in subsequent requests. Notice that you cannot supply the TxnID of a TimeTracking transaction to TransactionQueryRq requests. If you do, you get an error stating that no such record could be found, even though the transaction is in QuickBooks. This behavior reflects the behavior in the QuicKBooks UI in the Find window.
IQBIDType      

TxnNumber

An identifying number for this transaction.
IQBIntType      

EditSequence

A number that the server generates and assigns to this object. Every time the object is changed, the server will change its EditSequence value. When you try to modify a list object, you must provide its EditSequence. The server compares the EditSequence you provide with the EditSequence in memory to make sure you are dealing with the latest copy of the object. If you are not, the server will reject the request and return an error. Because EditSequence is only used to check whether two objects match, there is no reason to interpret its value.
IQBStringType 16 chars    

ExternalGUID

Allows for the attachment of a user defined GUID value.
IQBGUIDType      

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="16.0"?>
<QBXML>
        <QBXMLMsgsRq onError="stopOnError">
                <TxnVoidRq>
                        <!-- TxnVoidType may have one of the following values: ARRefundCreditCard, Bill, BillPaymentCheck, BillPaymentCreditCard, Charge, Check, CreditCardCharge, CreditCardCredit, CreditMemo, Deposit, InventoryAdjustment, Invoice, ItemReceipt, JournalEntry, SalesReceipt, VendorCredit -->
                        <TxnVoidType >ENUMTYPE</TxnVoidType> <!-- required -->
                        <TxnID >IDTYPE</TxnID> <!-- required -->
                </TxnVoidRq>

                <TxnVoidRs statusCode="INTTYPE" statusSeverity="STRTYPE" statusMessage="STRTYPE">
                        <!-- TxnVoidType may have one of the following values: ARRefundCreditCard, Bill, BillPaymentCheck, BillPaymentCreditCard, Charge, Check, CreditCardCharge, CreditCardCredit, CreditMemo, Deposit, InventoryAdjustment, Invoice, ItemReceipt, JournalEntry, SalesReceipt, VendorCredit -->
                        <TxnVoidType >ENUMTYPE</TxnVoidType> <!-- optional -->
                        <TxnID >IDTYPE</TxnID> <!-- optional -->
                        <TimeCreated >DATETIMETYPE</TimeCreated> <!-- optional -->
                        <TimeModified >DATETIMETYPE</TimeModified> <!-- optional -->
                        <RefNumber >STRTYPE</RefNumber> <!-- optional -->
                        <ErrorRecovery> <!-- optional -->
                                <!-- BEGIN OR -->
                                        <ListID >IDTYPE</ListID> <!-- optional -->
                                <!-- OR -->
                                        <OwnerID >GUIDTYPE</OwnerID> <!-- optional -->
                                <!-- OR -->
                                        <TxnID >IDTYPE</TxnID> <!-- optional -->
                                <!-- END OR -->
                                <TxnNumber >INTTYPE</TxnNumber> <!-- optional -->
                                <EditSequence >STRTYPE</EditSequence> <!-- optional -->
                                <ExternalGUID >GUIDTYPE</ExternalGUID> <!-- optional -->
                        </ErrorRecovery>
                </TxnVoidRs>
        </QBXMLMsgsRq>
</QBXML>

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
'The following sample code is generated as an illustration of
'Creating requests and parsing responses ONLY
'This code is NOT intended to show best practices or ideal code
'Use at your most careful discretion

imports System
imports System.Net
imports System.Drawing
imports System.Collections
imports System.ComponentModel
imports System.Windows.Forms
imports System.Data
imports System.IO
imports Interop.QBFC16

Module com.intuit.idn.samples
        Public Class Sample
                Public Sub  DoTxnVoid()
                        Dim sessionBegun as Boolean
                        sessionBegun = False
                        Dim connectionOpen as Boolean
                        connectionOpen = False
                        Dim sessionManager as QBSessionManager
                        sessionManager = nothing

                        Try
                                'Create the session Manager object
                                sessionManager = new QBSessionManager

                                'Create the message set request object to hold our request
                                Dim requestMsgSet as IMsgSetRequest
                                requestMsgSet = sessionManager.CreateMsgSetRequest("US",16,0)
                                requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue

                                BuildTxnVoidRq(requestMsgSet)

                                'Connect to QuickBooks and begin a session
                                sessionManager.OpenConnection("","Sample Code from OSR")
                                connectionOpen = True
                                sessionManager.BeginSession("", ENOpenMode.omDontCare)
                                sessionBegun = True

                                'Send the request and get the response from QuickBooks
                                Dim responseMsgSet as IMsgSetResponse
                                responseMsgSet = sessionManager.DoRequests(requestMsgSet)

                                'End the session and close the connection to QuickBooks
                                sessionManager.EndSession()
                                sessionBegun = False
                                sessionManager.CloseConnection()
                                connectionOpen = False

                                WalkTxnVoidRs(responseMsgSet)
                        Catch e as Exception
                                MessageBox.Show(e.Message, "Error")
                                if (sessionBegun) then
                                        sessionManager.EndSession()
                                End If
                                if (connectionOpen) then
                                        sessionManager.CloseConnection()
                                End If
                        End Try
                End Sub
                Public Sub BuildTxnVoidRq(requestMsgSet as IMsgSetRequest)
                        Dim TxnVoidRq as ITxnVoid
                        TxnVoidRq= requestMsgSet.AppendTxnVoidRq()
                        'Set field value for TxnVoidType
                        TxnVoidRq.TxnVoidType.SetValue(ENTxnVoidType.tvtARRefundCreditCard)
                        'Set field value for TxnID
                        TxnVoidRq.TxnID.SetValue("200000-1011023419")
                End Sub




                Public Sub WalkTxnVoidRs( responseMsgSet as IMsgSetResponse)
                        if (responseMsgSet is nothing) then
                                Exit Sub
                        End If

                        Dim responseList as IResponseList
                        responseList = responseMsgSet.ResponseList
                        if (responseList is nothing) then
                                Exit Sub
                        End If

                        'if we sent only one request, there is only one response, we'll walk the list for this sample
                        for j=0 to responseList.Count-1
                                Dim response as IResponse
                                response = responseList.GetAt(j)
                                'check the status code of the response, 0=ok, >0 is warning
                                if (response.StatusCode >= 0) then
                                        'the request-specific response is in the details, make sure we have some
                                        if (not response.Detail is nothing) then
                                                'make sure the response is the type we're expecting
                                                Dim responseType as ENResponseType
                                                responseType = CType(response.Type.GetValue(),ENResponseType)
                                                if (responseType == ENResponseType.rtTxnVoidRs) then
                                                        'upcast to more specific type here, this is safe because we checked with response.Type check above
                                                        Dim TxnVoidType as IQBENTxnVoidTypeType
                                                        TxnVoidType = CType(response.Detail,IQBENTxnVoidTypeType)
                                                        WalkTxnVoidType(TxnVoidType)
                                                End If
                                        End If
                                End If
                        Next j
                End Sub




                Public Sub WalkTxnVoidType(TxnVoidType as IQBENTxnVoidTypeType)
                        if (TxnVoidType is nothing) then
                                Exit Sub
                        End If

                        'Go through all the elements of IQBENTxnVoidTypeType
                End Sub




        End Class
End Module

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//The following sample code is generated as an illustration of
//Creating requests and parsing responses ONLY
//This code is NOT intended to show best practices or ideal code
//Use at your most careful discretion

using System;
using System.Net;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using Interop.QBFC16;

namespace com.intuit.idn.samples
{
        public class Sample
        {
                public void  DoTxnVoid()
                {
                        bool sessionBegun = false;
                        bool connectionOpen = false;
                        QBSessionManager sessionManager = null;

                        try
                        {
                                //Create the session Manager object
                                sessionManager = new QBSessionManager();

                                //Create the message set request object to hold our request
                                IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US",16,0);
                                requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

                                BuildTxnVoidRq(requestMsgSet);

                                //Connect to QuickBooks and begin a session
                                sessionManager.OpenConnection("","Sample Code from OSR");
                                connectionOpen = true;
                                sessionManager.BeginSession("", ENOpenMode.omDontCare);
                                sessionBegun = true;

                                //Send the request and get the response from QuickBooks
                                IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);

                                //End the session and close the connection to QuickBooks
                                sessionManager.EndSession();
                                sessionBegun = false;
                                sessionManager.CloseConnection();
                                connectionOpen = false;

                                WalkTxnVoidRs(responseMsgSet);
                        }
                        catch (Exception e)
                        {
                                MessageBox.Show(e.Message, "Error");
                                if (sessionBegun)
                                {
                                        sessionManager.EndSession();
                                }
                                if (connectionOpen)
                                {
                                        sessionManager.CloseConnection();
                                }
                        }
                }
                void BuildTxnVoidRq(IMsgSetRequest requestMsgSet)
                {
                        ITxnVoid TxnVoidRq= requestMsgSet.AppendTxnVoidRq();
                        //Set field value for TxnVoidType
                        TxnVoidRq.TxnVoidType.SetValue(ENTxnVoidType.tvtARRefundCreditCard);
                        //Set field value for TxnID
                        TxnVoidRq.TxnID.SetValue("200000-1011023419");
                }




                void WalkTxnVoidRs(IMsgSetResponse responseMsgSet)
                {
                        if (responseMsgSet == null) return;
                        IResponseList responseList = responseMsgSet.ResponseList;
                        if (responseList == null) return;
                        //if we sent only one request, there is only one response, we'll walk the list for this sample
                        for(int i=0; i < responseList.Count; i++)
                        {
                                IResponse response = responseList.GetAt(i);
                                //check the status code of the response, 0=ok, >0 is warning
                                if (response.StatusCode >= 0)
                                {
                                        //the request-specific response is in the details, make sure we have some
                                        if (response.Detail != null)
                                        {
                                                //make sure the response is the type we're expecting
                                                ENResponseType responseType = (ENResponseType)response.Type.GetValue();
                                                if (responseType == ENResponseType.rtTxnVoidRs)
                                                {
                                                        //upcast to more specific type here, this is safe because we checked with response.Type check above
                                                        IQBENTxnVoidTypeType TxnVoidType = (IQBENTxnVoidTypeType)response.Detail;
                                                        WalkTxnVoidType(TxnVoidType);
                                                }
                                        }
                                }
                        }
                }




                void WalkTxnVoidType(IQBENTxnVoidTypeType TxnVoidType)
                {
                        if (TxnVoidType == null) return;
                        //Go through all the elements of IQBENTxnVoidTypeType
                }




        }
}