【问题标题】:is there a way to query first transaction date within a QuickBooks file with the QuickBooks SDK?有没有办法使用 QuickBooks SDK 查询 QuickBooks 文件中的第一个交易日期?
【发布时间】:2014-07-17 14:26:12
【问题描述】:

有没有办法通过 QuickBooks SDK 识别 QuickBooks 文件中的第一个交易日期?

【问题讨论】:

    标签: sdk quickbooks


    【解决方案1】:

    没有使用 SDK 执行此操作的特定方法,但您可以提出一些代码,每月查看一次以确定此信息。您可以在 QuickBooks 中使用的最早日期是 01/01/1901。我可能只是对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.
    

    【讨论】:

      【解决方案2】:

      代码有一些问题,下面是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 日到现在都可以工作和搜索。所以我修改了代码,一次检查一年(而不是一个月),然后当我找到正确的年份时,我一次看一个月,最后看一天。最终它会返回文件中第一笔交易的日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多