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