X++:
//GNRD
static void TutorialSalesTotals(Args _args)
{
SalesTable salesTable;
SalesTable salesTableLocal;
SalesTotals salesTotals;
SalesPickingListJournalTable SPLJT1;
SalesPickingListJournalTable SPLJT;
int z;
;
info("Пример рассчета SalesTotals по отборочной накладной.");
while select salesId
from salesTableLocal
group by SalesId
join * //SalesId
from SPLJT1
where SPLJT1.SalesId == salesTableLocal.SalesId
{
select firstfast firstonly salesTable
where salesTable.SalesId == salesTableLocal.SalesId;
salesTotals = salesTotals::construct(salesTable);
info(strfmt("SalesId:%1\tCustAccount:%2\tSalesTotals:%3\tSalesBalance:%4\tSalesDiscount:%5\tSalesTax:%6\tCostValue:%7\tMargin:%8\tCurrencyCode:%9",
salesTable.SalesId,
salesTable.CustAccount,
salesTotals.totalAmount(),
salesTotals.totalBalance(),
salesTotals.totalLineDisc(),
salesTotals.totalTaxAmount(),
salesTotals.totalCostValue(),
salesTotals.totalContributionMargin(),
salesTotals.currencyCode()));
while select SPLJT
where SPLJT.SalesId == salesTable.SalesId
{
salesTotals = salesTotals::construct(salesTable, 0, AccountOrder::Auto, SPLJT.ParmId, salesTable.SalesId, DocumentStatus::PickingList);
info(strfmt("SalesId:%1\tPickingListJournalId:%2\tParmId:%3\tDate:%4\tSalesQty:%5\tSalesTotals:%6\tSalesBalance:%7\tSalesDiscount:%8\tSalesTax:%9\tCostValue:%10\tMargin:%11\tCurrencyCode:%12",
SalesTable.SalesId,
SPLJT.PickingListId,
SPLJT.ParmId,
SPLJT.PickingListDate,
salesTotals.totalQty(),
salesTotals.totalAmount(),
salesTotals.totalBalance(),
salesTotals.totalLineDisc(),
salesTotals.totalTaxAmount(),
salesTotals.totalCostValue(),
salesTotals.totalContributionMargin(),
salesTotals.currencyCode()));
}
}
}
Надеюсь, поможет разобраться в общих чертах..
Обрати внимание, что SalesTotals не просто считает, он еще роется по провокам, в частности, корректировка налогов.
Хм. Если ты там его не докурочил его окончательно
Георгий