|
|
#1 |
|
Участник
|
Разноска строк из нескольких закупок
Есть табличка содержащая несколько записей вида(ссылка на строку закупки, кол-во), строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
Надо написать процедуру которая сделает по данным этой табличке PackingSlip и Invoice. Все параметры(типа суммовой обработки) должны тоже применяться Нашел вот такой код, но что-то совсем жестко выглядит(плюс для PackingSlip его получается надо будет дублировать). Случаем никто не решал такую задачу? есть какие-то более "красивые" способы? Версия АХ2012R3 https://dynamicsuser.net/ax/f/develo...single-invoice |
|
|
|
|
#2 |
|
Участник
|
Посмотрите в сторону использования методов
X++: purchFormLetter.createFromLines(...);
purchFormLetter.parmLineList(...);X++: protected void postPackingSlip() { PurchFormLetter purchFormLetter; Num internalPackingSlipId; if (!packingSlipUpdateList.empty()) { internalPackingSlipId = NumberSeq::newGetNum(PurchParameters::numRefPurchPackingSlipId()).num(); purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip); purchFormLetter.createFromLines(true); purchFormLetter.parmLineList(packingSlipUpdateList.pack()); purchFormLetter.update(purchTable, internalPackingSlipId, purchFormLetter.transDate(), PurchUpdate::ReceiveNow); } }
__________________
Sergey Nefedov |
|
|
|
| За это сообщение автора поблагодарили: trud (5). | |
|
|
#3 |
|
Участник
|
Еще для вдохновения:
1. Packing slip X++: SalesFormLetter salesFormLetter;
SalesParmUpdate salesParmUpdate;
SetEnumerator set;
CustPackingSlipJour custPackingSlipJour;
SysQueryRun chooseLines;
salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip);
salesFormLetter.getLast();
salesFormLetter.resetParmListCommonCS();
salesFormLetter.proforma(false);
salesFormLetter.createParmUpdateFromParmUpdateRecord(
SalesFormletterParmData::initSalesParmUpdateFormletter(
DocumentStatus::PackingSlip,
salesFormLetter.pack()));
salesParmUpdate = salesFormLetter.salesParmUpdate();
salesParmUpdate.SpecQty = SalesUpdate::DeliverNow;
salesParmUpdate.Proforma = NoYes::No;
if(salesParmUpdate.SumBy == AccountOrder::Order)
{
salesParmUpdate.SumSalesId = _sumSalesId;
}
salesParmUpdate.update();
salesFormLetter.salesParmUpdate(salesParmUpdate);
chooseLines = this.calcQuery(); // Custom Query
salesFormLetter.chooseLinesQuery(chooseLines);
salesFormLetter.reArrangeNow(true);
salesFormLetter.validateAll(false);
salesFormLetter.chooseLines();
salesFormLetter.run();
set = Set::create(SysOperationHelper::base64Decode(salesFormLetter.getOutputContract().parmAllJournals())).getEnumerator();
while (set.moveNext())
{
custPackingSlipJour = set.current();
break;
}
return custPackingSlipJour.PackingSlipId;X++: public SysQueryRun calcQuery() { Query q = new Query(queryStr(SalesUpdate)); QueryBuildDataSource qbds; qbds = q.dataSourceTable(tableNum(SalesLine)); ... join your table ... return new SysQueryRun(q); } X++: SalesFormLetter salesFormLetter;
SalesParmUpdate salesParmUpdate;
CustPackingSlipJour custPackingSlipJour;
TmpFrmVirtual tmpFrmVirtual;
List selectedList = new List(Types::Record);
SalesParmTable salesParmTable;
select firstonly RecId, TableId from custPackingSlipJour
where custPackingSlipJour.PackingSlipId == _consolidatedPackingSlipId;
tmpFrmVirtual.clear();
tmpFrmVirtual.TableNum = custPackingSlipJour.TableId;
tmpFrmVirtual.RecordNo = custPackingSlipJour.RecId;
tmpFrmVirtual.NoYes = NoYes::Yes;
tmpFrmVirtual.Id = _sumSalesId;
tmpFrmVirtual.insert();
selectedList.addEnd(tmpFrmVirtual);
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
salesFormLetter.selectFromJournal(selectedList.pack());
salesFormLetter.specQty(SalesUpdate::PackingSlip);
salesFormLetter.run(); |
|
|
|
| За это сообщение автора поблагодарили: trud (5). | |
|
|
#4 |
|
Аманд
|
Так это стандарт вроде?
Цитата:
строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
|
|
|
|
|
|