Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta MS Dynamics 365操作跨公司报告不起作用_Axapta_Dynamics 365 Operations - Fatal编程技术网

Axapta MS Dynamics 365操作跨公司报告不起作用

Axapta MS Dynamics 365操作跨公司报告不起作用,axapta,dynamics-365-operations,Axapta,Dynamics 365 Operations,我有一个简单的RDP报告,工作正常,正如预期的那样。在选定的法人实体中运行时 我希望启用跨公司报告,以便在选定的公司中,如果需要,我可以查看所有其他公司的数据。我在AOT查询和重建中启用了属性,这在报告查询中添加了公司范围。我仍然在同一个法人实体 我选择与我所在的法人实体相同的公司 所有其他范围等都正确,数据现在不正确。我还需要做什么才能让它工作?这是一个简单的RDP报告代码,粘贴在下面。我已尝试在queryrun对象上启用crosscompany,但仍不起作用。我到处都是0 我还需要做什么才能

我有一个简单的RDP报告,工作正常,正如预期的那样。在选定的法人实体中运行时

我希望启用跨公司报告,以便在选定的公司中,如果需要,我可以查看所有其他公司的数据。我在AOT查询和重建中启用了属性,这在报告查询中添加了公司范围。我仍然在同一个法人实体

我选择与我所在的法人实体相同的公司

所有其他范围等都正确,数据现在不正确。我还需要做什么才能让它工作?这是一个简单的RDP报告代码,粘贴在下面。我已尝试在queryrun对象上启用crosscompany,但仍不起作用。我到处都是0

我还需要做什么才能让它正常工作?范围代码可以忽略,这只是捕获用户选择的范围并在报告上打印

[   
SRSReportQueryAttribute(queryStr(WIP))
]
public class WIP extends SRSReportDataProviderBase
{
    tmpWIP tmpWIP;
    TmpRanges tmpRanges;

    [
        SRSReportDataSetAttribute('tmpWIP')
    ]
        public tmpWIP gettmpWIP()
    {
        select tmpWIP;
        return tmpWIP;
    }

    [
        SRSReportDataSetAttribute(tablestr(TmpRanges))
    ]
    public TmpRanges getTmpRanges()
    {
        select tmpRanges;
        return tmpRanges;
    }

public void processReport()
    {
        ProjTable                       projTable;
        ProjTransPosting                projTransPosting;
        CostControlTransCommittedCost   costControlTransCommittedCost;
        EstimateTemplatePeriod      EstimateTemplatePeriod;
        QueryRun                        queryRun;

    // Get the query from the runtime using a dynamic query.
    queryRun = new QueryRun(this.parmQuery());
    queryRun.allowCrossCompany(true);

    while (queryRun.next())
    {
        projTable = queryRun.get(tablenum(ProjTable));
        ProjTransPosting = queryRun.get(tablenum(ProjTransPosting));
        CostControlTransCommittedCost = queryRun.get(tableNum(CostControlTransCommittedCost));
        EstimateTemplatePeriod = queryRun.get(tableNum(EstimateTemplatePeriod));

        tmpWIP.clear();
        tmpWIP.CustAccount = projTable.CustAccount;
        tmpWIP.ProjId = projTable.ProjId;
        tmpWIP.Name = projTable.Name;
        tmpWIP.CustName = projTable.custName();
        tmpWIP.AmountMst = projTransPosting.AmountMst;
        tmpWIP.CostAmount = projTransPosting.costAmount();
        tmpWIP.ProjTransType = projTransPosting.ProjTransType;
        tmpWIP.CategoryId = projTransPosting.CategoryId;
        tmpWIP.CommittedCostAmount = costControlTransCommittedCost.AmountMst;
        tmpWIP.EstimateValue = EstimateTemplatePeriod.Value;
        tmpWIP.PostingType = projTransPosting.PostingType;
        tmpWIP.insert();
    }
    this.rangesToTable(this.parmQuery());
}

public void rangesToTable(Query _query)
{
    QueryBuildDataSource    qbds;
    QueryBuildRange         queryBuildRange;
    LabelType               tableLabel;
    int                     occurrence;
    int                     dataSourceNo;
    int                     i;

    for (dataSourceNo = 1; dataSourceNo <= _query.dataSourceCount(); dataSourceNo++)
    {
        qbds = _query.dataSourceNo(dataSourceNo);
        if (qbds.enabled())
        {
            occurrence = SysQuery::tableOccurrence(_query, qbds.table(), dataSourceNo);
            tableLabel = tableId2pname(qbds.table()) + SysQuery::tableOccurrenceText(occurrence);

            for (i = 1; i <= qbds.rangeCount(); i++)
            {
                queryBuildRange = qbds.range(i);

                if (queryBuildRange.value() && queryBuildRange.status() != RangeStatus::Hidden)
                {
                    tmpRanges.clear();
                    tmpRanges.FieldLabel   = fieldId2pname(qbds.table(), queryBuildRange.field());
                    tmpRanges.RangeValue   = queryBuildRange.value();
                    tmpRanges.insert();
                }
            }
        }
    }
}
}
allowCrossCompany方法允许您在多个公司中进行查询,但查询不知道在哪些公司中进行查询。为此,您可以为每个适用的公司调用addCompanyRange

在MorpX报告中,相当于:

public void init()
{
    super();
    this.query().allowCrossCompany( true );
    this.query().addCompanyRange( "dat" );
    this.query().addCompanyRange( "dmo" );
}

与跨公司查询的其他用途类似,您必须知道它适用于哪些公司

我发现这是由于1:N的获取模式不支持属性“允许AOT中的跨公司”。我目前正在X++中重建此查询以解决此问题

请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。您是否尝试过检查查询?i、 toString?我已经尝试过使用它,但只有query对象似乎给出了string而不是queryrun,不知道如何将query对象添加到这个中,我对x++开发相当陌生。谢谢您好,谢谢您的快速回复,非常感谢。很抱歉,我现在不在,所以无法正确地看待这个问题,我不明白你在说什么,当我在公司范围内选择它时,查询应该知道我在看哪家公司?当allowcrosscompany设置为yes(如屏幕截图所示)时,此功能将立即启用。在这种情况下,您应该验证查询是否已正确更新。确定我将如何修改代码以公开SQL查询,我将检查它。。。谢谢