0

これを、QB Enterprise を使用すると常に失敗する単純な例に要約しました。(奇妙なことに、このコードは以前は機能していたと断言できます。)

  1. 特定の参照番号「PTD1234」を使用して、SDK を介して日誌エントリを作成します
  2. 同じコード ブロックで特定の日誌エントリを検索する
  3. 結果が見つかりませんか?

ただし、QB で同じ日誌エントリを手動で作成するようにプロセスを変更すると、以下の検索コードが正しく機能し、日誌エントリが見つかります。

        Quickbooks qb = new Quickbooks();
        qb.Connect(this);

        IMsgSetRequest msr = qb.sm.CreateMsgSetRequest("US", 7, 0);
        msr.Attributes.OnError = ENRqOnError.roeStop;

        IJournalEntryAdd jea = msr.AppendJournalEntryAddRq();

        jea.TxnDate.SetValue(new DateTime(2013, 3, 1));
        jea.RefNumber.SetValue("PTD1234");

        IJournalCreditLine jcl = jea.ORJournalLineList.Append().JournalCreditLine;
        jcl.Amount.SetValue(1);
        jcl.AccountRef.FullName.SetValue("Credit Card Batches:Paymentech");
        jcl.EntityRef.FullName.SetValue("CHASE PAYMENTECH");

        IJournalDebitLine jdl = jea.ORJournalLineList.Append().JournalDebitLine;
        jdl.Amount.SetValue(1);
        jdl.AccountRef.FullName.SetValue("Chase Deposits EUR");
        jdl.EntityRef.FullName.SetValue("CHASE PAYMENTECH");

        IMsgSetResponse msp = qb.sm.DoRequests(msr);
        IResponse resp = msp.ResponseList.GetAt(0);
        if (resp.StatusCode != 0)
        {
            Log("-------------\r\nError during test");
            Log(resp.StatusMessage);
        }

        IJournalEntryRet jet = null;

        msr = qb.sm.CreateMsgSetRequest("US", 7, 0);
        msr.Attributes.OnError = ENRqOnError.roeStop;

        IJournalEntryQuery q = msr.AppendJournalEntryQueryRq();
        q.metaData.SetValue(ENmetaData.mdNoMetaData);
        q.ORTxnQuery.TxnFilter.ORRefNumberFilter.RefNumberFilter.RefNumber.SetValue("PTD1234");
        q.ORTxnQuery.TxnFilter.ORRefNumberFilter.RefNumberFilter.MatchCriterion.SetValue(ENMatchCriterion.mcContains);
        q.ORTxnQuery.TxnFilter.AccountFilter.ORAccountFilter.FullNameList.Add("Chase Deposits EUR");
        q.IncludeLineItems.SetValue(false);

        msp = qb.sm.DoRequests(msr);
        if (msp.ResponseList.Count > 0)
        {
            IResponseList rl = msp.ResponseList;
            if (rl.Count >= 1)
            {
                IResponse r = rl.GetAt(0);
                if (r.Detail == null)
                    Log("Fail: Detail was null");

                if (r.StatusCode != 0)
                    Log("Fail: Status code was not zero");

                if (r.Type.GetValue() == (short)ENResponseType.rtJournalEntryQueryRs)
                {
                    IJournalEntryRetList crl = (IJournalEntryRetList)r.Detail;
                    if (crl != null && crl.Count == 1)
                        jet = crl.GetAt(0);
                }
            }
        }

        if (jet != null)
            Log("Success!");

        qb.Cleanup();
4

1 に答える 1

0

理由は不明ですが、JournalEntryQuery と TxnFilter.ORRefNumberFilter.RefNumberFilter を使用すると、一部のジャーナル エントリが表示されません。ただし、回避策として、ORTxnQuery.RefNumberList を使用してから仕訳明細を循環し、勘定科目が一致することを確認します。

   public bool GetExactJournalTransaction(string sRefNum, string sAccount, out IJournalEntryRet jet)
    {
        jet = null;

        IMsgSetRequest msr = sm.CreateMsgSetRequest("US", 4, 0);
        msr.Attributes.OnError = ENRqOnError.roeStop;

        IJournalEntryQuery q = msr.AppendJournalEntryQueryRq();
        q.metaData.SetValue(ENmetaData.mdNoMetaData);
        q.ORTxnQuery.RefNumberList.Add(sRefNum);
        q.IncludeLineItems.SetValue(true);


        IMsgSetResponse resp = sm.DoRequests(msr);
        if (resp.ResponseList.Count == 0)
            return false;

        IResponseList rl = resp.ResponseList;
        if (rl.Count == 1)
        {
            IResponse r = rl.GetAt(0);
            if (r.Detail == null)
                return false;

            if (r.StatusCode != 0)
                return false;

            if (r.Type.GetValue() == (short)ENResponseType.rtJournalEntryQueryRs)
            {
                IJournalEntryRetList crl = (IJournalEntryRetList)r.Detail;
                if (crl != null)
                {
                    for (int i = 0; i < crl.Count; i++)
                    {
                        jet = crl.GetAt(i);
                        for (int j = 0; j < jet.ORJournalLineList.Count; j++)
                        {
                            IORJournalLine l = jet.ORJournalLineList.GetAt(j);
                            if (l.JournalCreditLine != null && l.JournalCreditLine.AccountRef.FullName.GetValue() == sAccount)
                                return true;
                            else if (l.JournalDebitLine != null && l.JournalDebitLine.AccountRef.FullName.GetValue() == sAccount)
                                return true;
                        }
                    }
                }
            }
        }
        return false;
    }
于 2013-03-13T02:37:05.913 に答える