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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.09.2012, 10:32   #1  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
добавить поле в dialog класса
Добрый день. Помогите разобраться!
Есть класс для формирования отчёта, всё работает как надо, теперь необходимо добавить возможность фильтрации по валюте. Делаю так:
В dialog добавил:
X++:
ret.addGroup("Валюта");
dialogCurrencyCode =  ret.addFieldValue(typeid(CurrencyCode), curCode, "Валюта", "Валюта");
В ClassDeclaration доюавил:
X++:
DialogField                 dialogCurrencyCode;
 CurrencyCode                curCode;
Форма не реагирует на изменения!!! Т.е. открывается, но новых полей я в ней не вижу!
Приведу на всякий случай весь код dialog:

X++:
protected Object dialog(DialogRunbase _dialog, boolean _forceOnClient)
{
    dialog ret;
    FormstringControl fsc;

    ret = super(_dialog, _forceOnClient);

    ret.caption("Расшифровка дебиторской/кредиторской задолженности Развернутая");

    ret.addGroup("Дата отчета");
    dialogReportDate    = ret.addFieldValue(typeid(TransDate),  reportDate, "Дата отчета", "Дата отчета");

    ret.addGroup("Балансовый счет");
    dialogLedgerAccount = ret.addFieldValue(typeid(LedgerAccount), ledgerAccount, "Балансовый счет", "Балансовый счет");
   // это то что нужно добавить
    ret.addGroup("Валюта");
    dialogCurrencyCode =  ret.addFieldValue(typeid(CurrencyCode), curCode, "Валюта", "Валюта");
   // <----
    fsc = dialogLedgerAccount.control();
    fsc.replaceOnLookup(false);
    fsc.limitText(200);
    fsc.displayLength(20);

    return ret;
}
Спасибо.
Старый 26.09.2012, 10:38   #2  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Забыл добавить! Класс наследуется от RunBaseBatch.
Старый 26.09.2012, 10:54   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Точно этот класс вызывается при запуске отчёта? Поставьте точку останова на своём коде, проверьте. Частая ошибка - при копипасте в методе main() остаётся код по созданию экземпляра не того класса.
За это сообщение автора поблагодарили: mazzy (5).
Старый 26.09.2012, 10:59   #4  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Я вызываю класс не из меню. Щёлкаю по нему в AOT правой кнопкой мыши -> открыть.
Так что думаю именно этот класс вызывается ;-)
Старый 26.09.2012, 11:04   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Точно этот класс вызывается при запуске отчёта? Частая ошибка - при копипасте в методе main() остаётся код по созданию экземпляра не того класса.
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Я вызываю класс не из меню. Щёлкаю по нему в AOT правой кнопкой мыши -> открыть. Так что думаю именно этот класс вызывается ;-)
Не надо думать - лучше проверить при "запуске" класса из AOT точно так же выполняется метод main(), и если в нем создается экземпляр другого класса, как описано выше, то не удивительно, что не будет видно измнений в диалоге.
Старый 26.09.2012, 11:10   #6  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,506 / 428 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Я так понимаю. что здесь всё-таки не копипаст, а дописка методов класса без изменения main. Рекомендую следующее:
1) Посмотрите значение CurrentVersion в ClassDeclaration, увеличьте его на 1 и перекомпилите
2) убейте свой userdata и перезайдите в аксапту
__________________
С уважением,
Вячеслав
Старый 26.09.2012, 11:17   #7  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Проблема решена! Я идиот :-). Продублировал класс, чтобы старый не испортить если что то не так сделаю! А в main вызывается класс от которого делал копию! Заработало!! Всё оказалось именно так как вы сказали. Спасибо ещё раз!!!
Старый 26.09.2012, 11:27   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Кстати, на своей практике я встречал интересный приём предназначенный, видимо, во избежании именно таких ситуаций.
X++:
#define.ClassName(MyClass)
class #ClassName extends RunBaseBatch
{
    //...
}

static void main(Args args)
{
    #ClassName  className = new #ClassName ();
    ;

    //...
}
Как видно после дублирования такого класса, достаточно изменить идентификатор лишь в одном месте, в значении макроса.
За это сообщение автора поблагодарили: rusk (1), Pustik (1), Link (3), NickMDAX (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сделать неактивным поле ввода в dialog'е. sobik DAX: Программирование 5 27.12.2010 14:19
Программно добавить поле в таблицу. HorrR DAX: Программирование 3 06.08.2009 18:13
Как скрыть из класса поле вызываемого отчета petr DAX: Программирование 4 17.08.2005 13:00
Как в AddRange() добавить поле Dimension[2] Владимир Максимов DAX: Программирование 13 27.02.2004 11:27
Добавить поле в таблицу -> обновление Datasource Surok DAX: Программирование 1 21.10.2002 14:03

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

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

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