AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2018, 13:14   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Разноска строк из нескольких закупок
Есть табличка содержащая несколько записей вида(ссылка на строку закупки, кол-во), строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
Надо написать процедуру которая сделает по данным этой табличке PackingSlip и Invoice. Все параметры(типа суммовой обработки) должны тоже применяться

Нашел вот такой код, но что-то совсем жестко выглядит(плюс для PackingSlip его получается надо будет дублировать).
Случаем никто не решал такую задачу? есть какие-то более "красивые" способы?
Версия АХ2012R3

https://dynamicsuser.net/ax/f/develo...single-invoice
Старый 16.04.2018, 14:42   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Посмотрите в сторону использования методов
X++:
        purchFormLetter.createFromLines(...);
        purchFormLetter.parmLineList(...);
Пример в стандарте PurchInvoiceJournalCreate
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);
    }
}
правда он используется только для строк прямых поставок, но ограничений по номеру покупок не увидел сходу, может быть просто по таким покупкам возможна обработка 1 в 1 и пачкой их не обработаешь.
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: trud (5).
Старый 16.04.2018, 15:49   #3  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Еще для вдохновения:

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);
}
2. Invoice
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  
Vals is offline
Vals
Аманд
Аватар для Vals
Компания АМАНД
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2009
 
1,766 / 507 (20) +++++++
Регистрация: 27.02.2002
Адрес: Pass partout, Москва
Так это стандарт вроде?

Цитата:
строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
А это журнал" прибытие номенклатуры"
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как создать обработку для нескольких строк? ski DAX: Программирование 6 16.11.2010 10:13
Параллельная разноска нескольких журналов несколькими пользователями. bobski DAX: Функционал 8 31.07.2009 10:34
Вставка нескольких строк из шаблона Excel breakpoint DAX: Программирование 2 04.06.2009 15:31
Разноска складского журнала в 10000 строк. ddadream DAX: Функционал 9 04.01.2004 00:00
3.0, Модуль: ОС, операция: Разноска строк журнала ОС (с предварит просм проводок) MagisterLudi DAX: Функционал 2 07.10.2003 18:55

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:18.