AX 2012 R2 CU7
Собственно вопрос, зачем в локализации запретили изменять номер договора в шапке заказа при наличии строк?
На примере продаж (в закупках все аналогично)
X++:
public boolean checkAgreement_RU(AgreementHeaderExtRecId_RU _agreementHeaderExtRecId = this.salesTable_RU().AgreementHeaderExt_RU)
{
...
if (SalesLine::exist(this.SalesId))
{
ok = checkFailed("@GLS220553"); //Изменение договора не допускается, если созданы какие-либо строки.
}
...
Но, с другой стороны, при изменении контрагента в шапке заказа происходит вызов
X++:
public boolean unlinkAgreementPrompt()
в котором, в том числе, строки заказа "отвязываются" от договора.
У кого-нибудь есть идеи, почему так сделано? И почему не сделали нормальное изменение договора через SalesTable2LineUpdate? Если буду обновлять договор примерно таким кодом, то какие не очевидные последствия могут быть?
X++:
protected void updateSalesTableAgreement(SalesAgreementHeader _salesAgreementHeader)
{
AgreementLine agreementLine;
SalesTable_RU salesTableRU;
SalesLine salesLine;
DimensionAttributeRecId dimensionAttributeRecId;
dimensionAttributeRecId = AgreementHeaderExt_RU::getAgreementDimensionAttribute();
salesTable.unlinkAgreement(true, false, true, true);
salesTable.initFromSalesAgreementHeader(_salesAgreementHeader);
salesTable.update();
while select forUpdate salesLine
where salesLine.SalesId == salesTable.SalesId
{
if (salesLine.canAgreementBeLinked())
{
agreementLine = AgreementLine::findLineForAutoMatch(salesLine, salesTable.MatchingAgreement, true);
if (agreementLine)
{
salesLine.initFromAgreementLine(agreementLine);
}
}
if (dimensionAttributeRecId)
{
salesLine.DefaultDimension = DimensionDefaultingService::serviceReplaceAttributeValue(
salesLine.DefaultDimension,
salesTable.DefaultDimension,
dimensionAttributeRecId);
}
salesLine.update();
}
}