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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.01.2011, 11:09   #1  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Изменили код Classes\SalesFormLetter\postUpdate
X++:
protected void  postUpdate()
{
    SalesParmTable  localSalesParmTable;
    ParmId          parmIdPrev;
    SalesId         salesIdPrev;
    ;

    ttsbegin;

    localSalesParmTable = this.setForUpdateSalesParmTable();

    localSalesParmTable.StartDateTime = startDateTimeTable;
    localSalesParmTable.EndDateTime   = DateTimeUtil::newDateTime(systemdateget(),timenow(),DateTimeUtil::getUserPreferredTimeZone());

    localSalesParmTable.updateParmJobStatusExecuted();

    salesParmLine.clear();
    // Sales totals are nulled in order to force a recalculation of the sales totals
    // which are then stored in the SalesTable.estimate field for utilization during credit limit check
    salesTotals = null;

    recordListSalesParmLine.first(salesParmLine);
    while (salesParmLine)
    {
        if (salesParmLine.OrigSalesId != salesIdPrev || salesParmLine.ParmId != parmIdPrev)
        {
            //counting number of SalesOrders we deal with
            if (salesParmLine.OrigSalesId != salesIdPrev)
            {
                ++numberOfRecords;
            }
            //  13.01.2011 AVRDV -->
            /*
            salesTable = salesParmLine.salesTable(true);
            if (salesTable)
            {
                salesTable.updateDocumentStatus(this.documentStatus());
                salesTable.updateBackStatus();
                this.updateSalesType();
                this.createBackorderLines();
                salesTable.updateDeadline(salesParmUpdate.RespiteDate);

                if (salesTable.SalesId != salesParmTable.SalesId)
                {
                    // If this is not the primary sales order in the summary order,
                    // void the credit card preauthorization that may exist as it is no longer valid
                    this.voidCreditCardPreauthorize();
                }
            }
            */
            //  13.01.2011 AVRDV <--
            localSalesParmTable = salesParmLine.salesParmTable(true);
            if (localSalesParmTable)
            {
                localSalesParmTable.updateParmJobStatusExecuted();
            }
        }

        salesIdPrev = salesParmLine.OrigSalesId;
        parmIdPrev  = salesParmLine.ParmId;

        if (!recordListSalesParmLine.next(salesParmLine))
            break;
    }
    //   13.01.2011 AVRDV -->
    salesTable = SalesTable::find(salesIdPrev,true);
    if (salesTable)
    {
        salesTable.updateDocumentStatus(this.documentStatus());
        salesTable.updateBackStatus();
        this.updateSalesType();
        this.createBackorderLines();
        salesTable.updateDeadline(salesParmUpdate.RespiteDate);

        if (salesTable.SalesId != salesParmTable.SalesId)
        {
            // If this is not the primary sales order in the summary order,
            // void the credit card preauthorization that may exist as it is no longer valid
            this.voidCreditCardPreauthorize();
        }
    }
    //   13.01.2011 AVRDV <--

    ttscommit;
}
В результате получили обработку заказа на 2500 строк 10 минут, вместо 20 минут.
Старый 14.01.2011, 12:25   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,821 / 402 (17) +++++++
Регистрация: 23.03.2006
а если процессы изменятся?
Старый 14.01.2011, 13:11   #3  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Цитата:
Сообщение от ice Посмотреть сообщение
а если процессы изменятся?
А почему в случае изменения процессов Вас беспокоит только эта модификация, а не 10 тысяч других, сделанных ранее?
Ясно же, что если меняются процессы, то много чего нужно пересматривать и проверять будет. Заложиться заранее на то, что именно и как изменится - невозможно. А конкретная проблема есть уже сейчас, и решать её нужно, и весьма эффективное решение найдено. Искренне поддерживаю автора.
За это сообщение автора поблагодарили: AvrDen (1).
Старый 17.01.2011, 14:29   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Изменили код Classes\SalesFormLetter\postUpdate

В результате получили обработку заказа на 2500 строк 10 минут, вместо 20 минут.
Не корректная модификация. Это будет работать только в том случае, если в пределах отобранных salesParmLine будут только записи с одинаковым значением OrigSalesId. Если окажется что есть несколько значений OrigSalesId, то код будет не корректным.

Необходимо сохранить salesIdPrev, например в SET (он автоматически отбросит дубли в момент записи), а потом сканировать полученный SET, чтобы перебрать все SalesId.

X++:
Set   setSalesId = new Set(types::String);
SetIterator   si;
;

// Перебор salesParmLine
recordListSalesParmLine.first(salesParmLine);
while (salesParmLine)
{
    (...)
    salesIdPrev = salesParmLine.OrigSalesId;
    setSalesId.add(salesIdPrev);
    (...)
}    // while (salesParmLine)


// Перебор salesTable на которые есть ссылка в salesParmLine
si = new SetIterator(setSalesId)
while (si.more())
{
    salesIdPrev = si.value();
    salesTable = SalesTable::find(salesIdPrev, true)
    (...)
    si.next();
}    // while (si.more())

(...)
Теги
как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание производственного заказа программно ena_ax DAX: Программирование 7 23.09.2011 11:38
Цены в строке заказа меняются при изменении шапки заказа s.alex DAX: Функционал 8 14.04.2009 11:27
Статус "Отменено" в строках заказа oleg61858 DAX: База знаний и проекты 12 16.10.2007 23:28
Цена на дату создания заказа/закупки George Nordic DAX: Функционал 2 29.06.2005 15:56
Сообщение по обработке строк заказа... Venera DAX: Функционал 5 21.06.2004 13:51

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

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

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