1

特定の日の口座残高を照会したいと思います。

おそらく CustomDetailReportQuery を使用してこれを行うことができるように見えますが、やり過ぎのようです。

4

2 に答える 2

1

私が知っている唯一の方法は、CustomDetailReportQuery を使用して適切な日付を設定し、合計行を探すことです。

public bool GetBalance(string sAccount, DateTime dt, out decimal balance)
{
    balance = 0.0M;

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

    ICustomDetailReportQuery q = msr.AppendCustomDetailReportQueryRq();
    q.ReportOpenBalanceAsOf.SetValue(ENReportOpenBalanceAsOf.robaoReportEndDate);
    q.DisplayReport.SetValue(false);
    q.IncludeColumnList.Add(ENIncludeColumn.icDate);
    q.IncludeColumnList.Add(ENIncludeColumn.icName);
    q.IncludeColumnList.Add(ENIncludeColumn.icMemo);
    q.IncludeColumnList.Add(ENIncludeColumn.icDebit);
    q.IncludeColumnList.Add(ENIncludeColumn.icCredit);
    q.IncludeColumnList.Add(ENIncludeColumn.icRunningBalance);
    q.ORReportPeriod.ReportPeriod.ToReportDate.SetValue(dt);
    q.ReportAccountFilter.ORReportAccountFilter.FullNameList.Add(sAccount);

    q.CustomDetailReportType.SetValue(ENCustomDetailReportType.cdrtCustomTxnDetail);
    q.SummarizeRowsBy.SetValue(ENSummarizeRowsBy.srbTotalOnly);

    IMsgSetResponse msrgrsp = sm.DoRequests(msr);
    try
    {
        if (msrgrsp.ResponseList.Count == 1)
        {
            IResponse resp = msrgrsp.ResponseList.GetAt(0);
            if (resp.StatusCode == 0)
            {
                IReportRet rp = (IReportRet)resp.Detail;
                IORReportData data = rp.ReportData.ORReportDataList.GetAt(rp.NumRows.GetValue() - 1);
                if (data.TotalRow != null)
                {
                    balance = decimal.Parse(data.TotalRow.ColDataList.GetAt(data.TotalRow.ColDataList.Count - 1).value.GetValue());
                    return true;
                }
            }
        }
    }
    catch (Exception e)
    {
        Log("Error finding balance of " + sAccount + ":");
        Log(e.Message);
    }

    return false;

}
于 2013-01-26T19:33:10.797 に答える