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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2007, 13:16   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Проблема не в форме, на которой бегут гаджики.
Проблема - в форме, которая активируется после закрытия формы прогресса (а в методе SalesFormLetter.progressKill() как раз происходит удаление формы гаджика).
Если на ней есть хоть один датасоурс и установлено свойство SetCompany=true, то при ее активации произойдет вызов Application.setDefaultCompany().

Помимо отказа от использования метода SysOperationProgress.reset() (который в конце концов вызывается в progressKill()), можно так же модифицировать его таким образом:
X++:
public void reset()
{
    ...
    // D.Andy -->
    DataAreaId  curDataArea = curExt();
    int         line;
    // D.Andy <--
    ;
    ...
    if (id == ownerId)
    // D.Andy -->
    {
        line = infolog.line();
    // D.Andy <--
        infolog.operationProgressClear();
    // D.Andy -->
        if (curDataArea != curExt())
        {
            appl.setDefaultCompany(curDataArea, false);
            infolog.cut(line, infolog.line());
        }
    }
    // D.Andy <--
}
Т.е. если произошло переключение компании в процессе удаления формы прогресса - то восстановить ее обратно (компанию).
После изменения необходимо будет сделать инкрементную компиляцию

PS По поводу формы SysOperationProgress.
А вы уверены, что она используется при работе класса SysOperationProgress?
Во всяком случае, если посмотреть метод setupForm() класса SysOperationProgressForm, то видно, что форма там создается на лету, без использования каких-либо объектов AOT.
PPS Если на форме нет датасорсов, то преключение компаний при ее активации не произойдет
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: fed (5), glibs (7), belugin (5), sukhanchik (5), Logger (10).
Старый 23.04.2007, 14:51   #2  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Если на ней есть хоть один датасоурс и установлено свойство SetCompany=true, то при ее активации произойдет вызов Application.setDefaultCompany().
даааа... я в свое врямя этот глюк ели отловил.
Старый 23.04.2007, 16:08   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Проблема - в форме, которая активируется после закрытия формы прогресса
Дааа... Как говорится век живи - век учись...
__________________
Возможно сделать все. Вопрос времени
Старый 22.10.2009, 18:30   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,973 / 3268 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
AndyD, спасибо вам аз еще одно содержательное сообщение. Я например долго время считал что проблема именно в форме прогресс бара.

Цитата:
Сообщение от AndyD Посмотреть сообщение
Помимо отказа от использования метода SysOperationProgress.reset() (который в конце концов вызывается в progressKill()), можно так же модифицировать его таким образом: ...
К сожалению, данный баг может быть вызван не только прогресс баром. Я сталкивался с проблемами которые вызывают формы SysPrintPrinterProgress и SysPrintProgress

Например у нас есть форма salesTable на ней по кнопке запускается обработка в компании 1, которая делает changeCompany в компанию 2 и печатает там несколько документов. В момент печати первого документа отображается форма печати (какая-то из двух SysPrintPrinterProgress, SysPrintProgress) и после её закрытия фокус попадает в на форму salesTable (вызываются методы SysSetupFormRun.activate() и salesTable.activate() ) происходит переключение в исходную компанию 1 и последующие документы уже печатаются неправильно.

Т.е. надо исправлять не только форму прогресс бара, а вообще любую форму которая может быть вызвана, например изменив SysSetupFormRun.

Вообще, мне кажется что данный баг определяется ошибкой в управлении окнами в аксапте. Пока не отработала функция вызванная из формы, не нужно передавать фокус в вызывающую форму, и вообще ни в какую форму. Т.е. не надо дергать SysSetupFormRun.activate() пока функция вызванная кнопкой не отработала до конца.

Либо ядро должно как-то связывать контекст выполнения кода и текущую компанию, так что если даже фокус перешел на вызвавшую форму (salesTable в моем примере) и произошло переключение в компанию 1, то при передаче управления обратно в функцию вызванную с формы, нужно переключать и текущую компанию обратно в компанию 2.

P.S.
Ax 3.0 KR3
Теги
progress bar, sysoperationprogress, баг, бегунок, законченный пример, полезное, смена компании

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблемы с Exists Join Logger DAX: Программирование 28 28.04.2010 02:54
Enterprise Portal: какие могут быть проблемы? sminex_ax DAX: Администрирование 0 16.05.2008 12:37
Проблемы быстродействия Axapta 3.0 Alexandr A. Osipkin DAX: Администрирование 37 16.02.2007 22:43
Проблемы работы ERP в многофилиальной и территориально разнесённой компании СНГ. SlavaK DAX: Прочие вопросы 18 02.03.2004 15:25

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

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

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