0
我正在使用Quickbooks QBFC並希望以編程方式檢索「First Check Number」字段的值。使用QBFC查找Quickbooks中的第一個檢查號碼
它可以在QuickBooks在文件>打印表格中找到>檢查
請建議如何可以做到這一點或任何參考我可以看看。
我正在使用Quickbooks QBFC並希望以編程方式檢索「First Check Number」字段的值。使用QBFC查找Quickbooks中的第一個檢查號碼
它可以在QuickBooks在文件>打印表格中找到>檢查
請建議如何可以做到這一點或任何參考我可以看看。
您無法直接進行此操作,但可以查詢針對您感興趣的帳戶所寫的最近一次支票。默認的第一個支票號碼將比最高的支票號碼大1書面。
作爲一個規則,我不會爲他們編寫人員代碼,今天我只是因爲它是星期五而且我處於一種瘋狂的情緒下才例外。以下代碼可用作起始點,以獲取有用的上次檢查號例程。爲了有一個現實的,可用的例程,你而不是我,將不得不處理所有與人們使用支票簿的方式有關的怪癖:非數字號碼,數字亂序等。
請注意:此代碼使用Zombie open source library和QBFC 11
class CheckNumbers
{
private const int DATE_INTERVAL = -7;
private string _accountName;
private DateTime _lastToDate;
private DateTime _lastFromDate;
public CheckNumbers(string accountName)
{
_accountName = accountName;
_lastToDate = DateTime.Today;
_lastFromDate = _lastToDate.AddDays(DATE_INTERVAL);
}
private void SetCriteria(IORTxnQuery qry)
{
qry.TxnFilter.AccountFilter.ORAccountFilter.FullNameList.Add(_accountName);
var dateFilter = qry.TxnFilter.ORDateRangeFilter.ModifiedDateRangeFilter;
dateFilter.FromModifiedDate.SetValue(_lastFromDate, true);
dateFilter.ToModifiedDate.SetValue(_lastToDate, true);
}
private void ProcessCheckNumber(string checkNumber, ref int highestNumber)
{
if (!string.IsNullOrEmpty(checkNumber))
{
int thisCheck;
if (!int.TryParse(checkNumber, out thisCheck))
{
throw new Exception(string.Format("Check number {0} cannot be read as an integer", checkNumber));
}
if (thisCheck > highestNumber) highestNumber = thisCheck;
}
}
public int GetLastCheckNumber()
{
DateTime failSafe = DateTime.Parse("1/1/2010");
using (var cn = Zombie.ConnectionMgr.GetConnection())
{
int highestCheck = 0;
while (highestCheck == 0 && _lastFromDate > failSafe)
{
var batch = cn.NewBatch();
var checkQuery = batch.MsgSet.AppendCheckQueryRq();
checkQuery.IncludeRetElementList.Add("RefNumber");
SetCriteria(checkQuery.ORTxnQuery);
batch.SetClosures(checkQuery, b =>
{
var checks = new Zombie.QBFCIterator<ICheckRetList, ICheckRet>(b);
foreach (var check in checks)
{
ProcessCheckNumber(Zombie.Safe.Value(check.RefNumber), ref highestCheck);
}
});
var billCheckQuery = batch.MsgSet.AppendBillPaymentCheckQueryRq();
billCheckQuery.IncludeRetElementList.Add("RefNumber");
SetCriteria(billCheckQuery.ORTxnQuery);
batch.SetClosures(billCheckQuery, b =>
{
var checks = new Zombie.QBFCIterator<IBillPaymentCheckRetList, IBillPaymentCheckRet>(b);
foreach (var check in checks)
{
ProcessCheckNumber(Zombie.Safe.Value(check.RefNumber), ref highestCheck);
}
});
if (!batch.Run()) return 0;
_lastToDate = _lastFromDate;
_lastFromDate = _lastToDate.AddDays(DATE_INTERVAL);
}
return highestCheck;
}
}
}
感謝@保羅,該日期字段,我們檢查最近的檢查,帳戶。我們應該使用哪個接口? – Thakur
SDK中沒有「上次修改日期」,因此您必須自行推出。以下是我的做法:選擇一個保守的日期(可能是昨天),並查看查詢是否返回檢查。如果它不繼續向後延伸範圍,直到找到某種東西。您可以通過使用IncludeRetElementList將查詢限制爲僅支持檢查的TxnId,TxnDate和RefNumber來保持輕量級查詢。 –
謝謝@保羅,真的很感激。將嘗試明天實施並讓你知道。 – Thakur