是否有方法使用QuickBooks SDK查询QuickBooks文件中的第一个事务日期?

是否有方法使用QuickBooks SDK查询QuickBooks文件中的第一个事务日期?,sdk,quickbooks,Sdk,Quickbooks,有没有办法通过QuickBooks SDK识别QuickBooks文件中的第一个事务日期 使用SDK没有具体的方法来实现这一点,但是您可以编写一些代码,每月查看一次以确定此信息。您可以在QuickBooks中使用的最早日期是1901年1月1日。我可能只是对ITransactionQueryRq执行MetaDataOnly查询以检查是否存在事务,然后执行NoMetaData查询以获取当月事务的实际日期。您甚至可能希望缩小到一周和/或一天,以限制NoMetaData查询所需的时间 int count

有没有办法通过QuickBooks SDK识别QuickBooks文件中的第一个事务日期

使用SDK没有具体的方法来实现这一点,但是您可以编写一些代码,每月查看一次以确定此信息。您可以在QuickBooks中使用的最早日期是1901年1月1日。我可能只是对ITransactionQueryRq执行MetaDataOnly查询以检查是否存在事务,然后执行NoMetaData查询以获取当月事务的实际日期。您甚至可能希望缩小到一周和/或一天,以限制NoMetaData查询所需的时间

int count = 0;
DateTime fromDate = new DateTime(1901, 01, 01);
DateTime toDate = new DateTime(1901, 01, 31);

while(count <= 0)
{
    ITransactionQuery query = MsgSetRequest.AppendTransactionQueryRq();
    query.metaData.SetValue(MetaDataOnly);
    ITransactionQuery query = MsgRequest.AppendTransactionQueryRq();
    query.metaData.SetValue(ENmetaData.mdMetaDataOnly);
    query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.FromTxnDate.SetValue(fromDate);
    query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.ToTxnDate.SetValue(toDate);

    IResponse response = SessionManager.DoRequests(MsgRequest).ResponseList.GetAt(0);

    if (response.StatusCode == 0)
    {
        count = response.retCount;
    }
    else if (response.StatusCode == 1)
    {
        fromDate = fromDate.AddMonths(1);
        toDate = new DateTime(fromDate.Year, fromDate.Month, DateTime.DaysInMonth(fromDate.Year, fromDate.Month));
    }
    else throw new Exception("TransactionQuery returned error: " + response.StatusMessage);
}

// fromDate and toDate contain the first month that has transactions.

该代码有几个问题,下面是一个VB,net版本。重要的区别是在每个API调用之间添加了msgSetRequest.ClearRequests

这段代码运行速度也快得多,在第一次事务发生后的一天内就可以完成。我想从10年跳跃开始,让它更快

Public Sub GetFirstTransactionDate(ByRef QuickBooksSessionManager As IQBSessionManager, ByRef fromDate As Date, ByRef toDate As Date)
    Dim msgSetRequest As IMsgSetRequest = QuickBooksSessionManager.CreateMsgSetRequest("US", 13, 0)

    Dim count As Integer = 0
    fromDate = New Date(1901, 1, 1)
    toDate = New Date(1901, 12, 31)
    ' make sure we do not have any old requests still defined
    msgSetRequest.ClearRequests()

    ' set the OnError attribute to continueOnError
    msgSetRequest.Attributes.OnError = ENRqOnError.roeContinue

    While count <= 0
        msgSetRequest.ClearRequests()
        Dim query As ITransactionQuery = msgSetRequest.AppendTransactionQueryRq()
        query.metaData.SetValue(ENmetaData.mdMetaDataOnly)
        query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.FromTxnDate.SetValue(fromDate)
        query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.ToTxnDate.SetValue(toDate)

        Dim response As IResponse = QuickBooksSessionManager.DoRequests(msgSetRequest).ResponseList.GetAt(0)

        If response.StatusCode = 0 Then
            count = response.retCount
        ElseIf response.StatusCode = 1 Then
            fromDate = fromDate.AddYears(1)
            toDate = toDate.AddYears(1)
        Else
            Throw New Exception("TransactionQuery returned error: " + response.StatusMessage)
        End If
    End While
    toDate = New DateTime(fromDate.Year, fromDate.Month, DateTime.DaysInMonth(fromDate.Year, fromDate.Month))
    count = 0
    While count <= 0
        msgSetRequest.ClearRequests()
        Dim query As ITransactionQuery = msgSetRequest.AppendTransactionQueryRq()
        query.metaData.SetValue(ENmetaData.mdMetaDataOnly)
        query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.FromTxnDate.SetValue(fromDate)
        query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.ToTxnDate.SetValue(toDate)

        Dim response As IResponse = QuickBooksSessionManager.DoRequests(msgSetRequest).ResponseList.GetAt(0)

        If response.StatusCode = 0 Then
            count = response.retCount
        ElseIf response.StatusCode = 1 Then
            fromDate = fromDate.AddMonths(1)
            toDate = New DateTime(fromDate.Year, fromDate.Month, DateTime.DaysInMonth(fromDate.Year, fromDate.Month))
        Else
            Throw New Exception("TransactionQuery returned error: " + response.StatusMessage)
        End If
    End While
    toDate = fromDate.AddDays(1)
    count = 0
    While count <= 0
        msgSetRequest.ClearRequests()
        Dim query As ITransactionQuery = msgSetRequest.AppendTransactionQueryRq()
        query.metaData.SetValue(ENmetaData.mdMetaDataOnly)
        query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.FromTxnDate.SetValue(fromDate)
        query.ORTransactionQuery.TransactionFilter.TransactionDateRangeFilter.ORTransactionDateRangeFilter.TxnDateRange.ToTxnDate.SetValue(toDate)

        Dim response As IResponse = QuickBooksSessionManager.DoRequests(msgSetRequest).ResponseList.GetAt(0)

        If response.StatusCode = 0 Then
            count = response.retCount
        ElseIf response.StatusCode = 1 Then
            fromDate = fromDate.AddDays(1)
            toDate = fromDate.AddDays(1)
        Else
            Throw New Exception("TransactionQuery returned error: " + response.StatusMessage)
        End If
    End While
    ' fromDate and toDate contain the first month that has transactions.
End Sub

你能详细说明一下你的答案吗?再加上一点关于你提供的解决方案的描述吗?我需要找到第一笔交易的日期,提供的解决方案最初有一些错误,花了很长时间,实际上不起作用。我的解决方案从1901年1月1日起运行并搜索至今。所以我修改了代码,一次检查一年而不是一个月,然后当我找到正确的年份时,我一次检查一个月,最后是一天。最后,它返回文件中第一个事务的日期。