0

Quickbooks QBFC を使用しており、「最初のチェック番号」フィールドの値をプログラムで取得したいと考えています。

[ファイル] > [フォームの印刷] > [小切手] の Quickbooks にあります。

これをどのように行うことができるか、または私が見ることができる参照を提案してください。

4

1 に答える 1

1

これを直接行うことはできませんが、関心のあるアカウントに対して書き込まれた最新の小切手を照会することはできます。デフォルトの最初の小切手番号は、書き込まれた最大の小切手番号よりも 1 大きくなります。

原則として、私は彼らのために人々のコードを書きません。今日は金曜日であり、気分が狂っているという理由だけで例外を設けています。次のコードは、便利な最後のチェック番号ルーチンの開始点として使用できます。現実的で使いやすいルーチンを作成するには、私ではなくあなたが、人々が小切手帳を使用する方法に付随するすべての風変わりな要素に対処する必要があります: 数字以外の数字、数字の順序の乱れなど.

注意: このコードは、Zombie オープン ソース ライブラリと 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;
        }
    }
}
于 2012-08-29T16:47:10.130 に答える