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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.03.2006, 13:57   #1  
Zick-Zibn is offline
Zick-Zibn
Участник
 
78 / 38 (2) +++
Регистрация: 28.05.2004
Адрес: Moscow
:( Где изменяется статус заказа?
Подскажите пож-та где именно происходит изменение статуса Заказа. при его обработке. Пол дня ищу, но что то не успешно
Старый 29.03.2006, 14:04   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
?? Не понял.
Тебя интересует, где непосредственно происходит update?

В SalesFormLetter есть чудесный метод postUpdate
X++:
            if (salesTable)
            {
                salesTable.updateDocumentStatus(this.documentStatus());
                salesTable.updateBackStatus();
                this.updateSalesType();
                this.createBackorderLines();
                salesTable.updateDeadline(salesParmUpdate.respiteDate);
            }
Обрати внимание на updateDocumentStatus.

С Уважением,
Георгий
Старый 29.03.2006, 14:05   #3  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Пол-дня... Друг, поставил бы брекпоинт на update в salesTable да и посмотрел бы

С Уважением,
Георгий
Старый 26.05.2006, 14:27   #4  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от George Nordic
Пол-дня... Друг, поставил бы брекпоинт на update в salesTable да и посмотрел бы

С Уважением,
Георгий
какой такой брекпоинт... ты точно скажи.. скока вешать...
Старый 26.05.2006, 14:50   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от simply2double
какой такой брекпоинт... ты точно скажи.. скока вешать...
200 граммов

Я ж говорю: Класс SalesFormLetter, метод postUpdate. Вызывает метод updateDocumentStatus(новый статус) таблицы SalesTable

Старый 26.05.2006, 15:07   #6  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от George Nordic

200 граммов
маловато... за пол дня можно было гораздо больше... да под хороший закусь
Старый 29.03.2006, 15:09   #7  
Zick-Zibn is offline
Zick-Zibn
Участник
 
78 / 38 (2) +++
Регистрация: 28.05.2004
Адрес: Moscow
Спасибо.
Старый 13.01.2011, 11:37   #8  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Добрый день!
Очень интересует зачем менять статус заказа при обработке каждой строки заказа? Почему нельзя это сделать в конце один раз?
Старый 13.01.2011, 12:02   #9  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Добрый день!
Очень интересует зачем менять статус заказа при обработке каждой строки заказа? Почему нельзя это сделать в конце один раз?
А если заказ отгружается несколькими накладными? Как определить этот самый момент в конце?
__________________
С уважением,
Вячеслав
За это сообщение автора поблагодарили: AvrDen (1).
Старый 13.01.2011, 12:05   #10  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Потому что:
  • заказ может обрабатываться частично
  • каждая строка заказа может обрабатываться частично
в противном случае, по Вашему предложению, вместо легкого update при каждой обработке строки заказа придется писать очень тяжелый метод определения, является ли данная строка последней
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: AvrDen (1).
Старый 13.01.2011, 12:32   #11  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Спасибо!
Я тоже так подумал что это сделано из-за частичной обработке заказа, просто у нас на предприятии все заказы обрабатываются всегда целиком и содержат по 2-5 тыс. строк и разноска занимает очень продожетельное время. Вот и приходиться искать пути оптимизации
Старый 13.01.2011, 12:39   #12  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Спасибо!
Я тоже так подумал что это сделано из-за частичной обработке заказа, просто у нас на предприятии все заказы обрабатываются всегда целиком и содержат по 2-5 тыс. строк и разноска занимает очень продожетельное время. Вот и приходиться искать пути оптимизации
В вашем случае как раз и подошёл бы способ, предложенный Tasmanian Devil. Напишите метод, который по завершении обработки строк накладной проверяет, можно ли изменить статус заказа.
__________________
С уважением,
Вячеслав
Старый 13.01.2011, 12:45   #13  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от pitersky Посмотреть сообщение
В вашем случае как раз и подошёл бы способ, предложенный Tasmanian Devil. Напишите метод, который по завершении обработки строк накладной проверяет, можно ли изменить статус заказа.
Да я так и попробую. Посмотрим как это повлияет.
Старый 13.01.2011, 12:54   #14  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Да я так и попробую. Посмотрим как это повлияет.
простое убирание обновления статуса в разноске из цикла в конец отработки всех строк, скорее всего мало повлияет на скороть обработки:
1. это не самая тяжелая операция
2. updateStatus вызывается еще при обновлении строк заказа
Старый 13.01.2011, 13:34   #15  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от ice Посмотреть сообщение
простое убирание обновления статуса в разноске из цикла в конец отработки всех строк, скорее всего мало повлияет на скороть обработки:
1. это не самая тяжелая операция
2. updateStatus вызывается еще при обновлении строк заказа
При анализе нашли, что больше тормоза происходят в методе salesLine.lowestSalesStatus, который вызываеться из salesTable.updateBackStatus. Скорее всего из-за того что нет индекса по SalesId,SalesStatus в таблице salesLine. В итоге получается что при обработке заказа больше 1000 строк на обработку одной строки уходит порядка 10 сек.
Старый 13.01.2011, 15:01   #16  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
У вас какие-нибудь отчёты строятся по строкам заказов? Если да, то какие?
__________________
С уважением,
Вячеслав
Старый 14.01.2011, 06:01   #17  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от pitersky Посмотреть сообщение
У вас какие-нибудь отчёты строятся по строкам заказов? Если да, то какие?
Нет, отчетов по строкам заказов нет. Но пользователи изначально работают с формой Заказы, она содержит много модификаций для удобства восприятия информации. И если предложить работать с формой накладных, то у них возникнет дискомфорт в работе. Пользователи сильно противяться этому.
Старый 14.01.2011, 11:09   #18  
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   #19  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
а если процессы изменятся?
Старый 14.01.2011, 13:11   #20  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Цитата:
Сообщение от ice Посмотреть сообщение
а если процессы изменятся?
А почему в случае изменения процессов Вас беспокоит только эта модификация, а не 10 тысяч других, сделанных ранее?
Ясно же, что если меняются процессы, то много чего нужно пересматривать и проверять будет. Заложиться заранее на то, что именно и как изменится - невозможно. А конкретная проблема есть уже сейчас, и решать её нужно, и весьма эффективное решение найдено. Искренне поддерживаю автора.
За это сообщение автора поблагодарили: AvrDen (1).
Теги
как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание производственного заказа программно 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, время: 12:31.