|  16.04.2018, 13:14 | #1 | 
| Участник | Разноска строк из нескольких закупок 
			
			Есть табличка содержащая несколько записей вида(ссылка на строку закупки, кол-во), строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки Надо написать процедуру которая сделает по данным этой табличке PackingSlip и Invoice. Все параметры(типа суммовой обработки) должны тоже применяться Нашел вот такой код, но что-то совсем жестко выглядит(плюс для PackingSlip его получается надо будет дублировать). Случаем никто не решал такую задачу? есть какие-то более "красивые" способы? Версия АХ2012R3 https://dynamicsuser.net/ax/f/develo...single-invoice | 
|  | 
|  16.04.2018, 14:42 | #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). | |
|  16.04.2018, 15:49 | #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). | |
|  16.04.2018, 18:38 | #4 | 
| Аманд | 
			
			Так это стандарт вроде? Цитата: 
		
			строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
		
	 | 
|  | 
|  | 
| 
 |