Показать сообщение отдельно
Старый 30.03.2017, 13:44   #1  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 164 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Неверная аналитика в проводках ГК по накладным расходам при разноске счета для заказа на покупку AX 2012 R2 CU7
Описанная в заглавии проблема появляется если накладные расходы (записи таблицы MarkupTrans) привязаны к шапке заказа на покупку (записи таблицы PurchTable) и пользователь изменяет в шапке закупки финансовые аналитики (поле PurchTable.DefaultDimension). При этом в появляющемся диалоге пользователь подтверждает копирование новой финансовой аналитики на строки заказа на покупку. Новая финансовая аналитика успешно копируется на строки закупки, но, к сожалению, при просмотре "распределений" в диалоге разноски инвойса можно увидеть, что для накладных расходов будет использована "старая" финансовая аналитика.

Проблему решил следующей модификацией метода PurchTableType.updateDistribution()

X++:
public void updateDistribution()
{
    // Моя модификация -->
    MarkupTrans markupTrans;
    // Моя модификация <--
    
    if (purchTable.DiscPercent != 0 || purchTable.SourceDocumentLine != 0)
    {
        if (SourceDocumentLine::find(purchTable.SourceDocumentLine).AccountingStatus == SourceDocumentLineAccountingStatus::Completed)
        {
            SourceDocumentProcessorFacade::submitSourceDocumentLineImplementation(purchTable, false, SourceDocumentLineAccountingStatus::FullyDistributed);
        }
        else
        {
            SourceDocumentProcessorFacade::submitSourceDocumentLineImplementation(purchTable, purchTable.SourceDocumentLine ? false : true);
        }
    }
    
    // Моя модификация -->
    while select SourceDocumentLine 
            from markupTrans
           where markupTrans.TransRecId   == purchTable.RecId
              && markupTrans.TransTableId == purchTable.TableId
    {
        if (markupTrans.SourceDocumentLine)
        {
            if (SourceDocumentLine::find(markupTrans.SourceDocumentLine).AccountingStatus == SourceDocumentLineAccountingStatus::Completed)
            {
                SourceDocumentProcessorFacade::submitSourceDocumentLineImplementation(markupTrans, false, SourceDocumentLineAccountingStatus::FullyDistributed);
            }
            else
            {
                SourceDocumentProcessorFacade::submitSourceDocumentLineImplementation(markupTrans, true);
            }
        }
    }
    // Моя модификация <--
}
За это сообщение автора поблагодарили: plumbum (2).