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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2006, 08:08   #1  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Post Проблема с Edit методом
На таблице пишу edit метод для заполнения поля в Grid:
Код:
edit UM_QtyInPakage QtyInPakage(boolean _set, UM_QtyInPakage _val)
{
    if (!_set)
    {
        return UnitConvert::find(this.itemID,"Шт","М").Factor;
    }

    return _val;
}
При изменении значения моего поля пользователем произходит двойной вызов этого метода... первый вызов делает то что нужно(выполняется :
Код:
    return _val;
), а второй затирает это значение
Код:
        return UnitConvert::find(this.itemID,"Шт","М").Factor;
Как это объясняется и как сделать правильно?
Старый 09.06.2006, 08:53   #2  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
?
Цитата:
Сообщение от Sada
PHP код:
edit CurrentShift CurrentShift (boolean _setCurrentShift _txt)
{
    
InventParameters    InventParameters;
    ;
    
InventParameters InventParameters::find();
        if(
_set)
        {
            
tmp_curshift _txt;
            return 
_txt;        }
        else
        {   
            if(!
tmp_curshift)
                return 
InventParameters.CurrentShift;
            else
                return 
tmp_curshift;
        }

где tmp_curshift объявлена в ClassDeclaration
О каком ClassDeclaration идет речь? Ведь я пишу edit метод на таблице?
Или я чего-то не понимаю?

Последний раз редактировалось PavelSR; 09.06.2006 в 09:11.
Старый 09.06.2006, 08:54   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
у меня на форме
не учёл, что вы пишите на табле...

Последний раз редактировалось Sada; 09.06.2006 в 08:57.
Старый 09.06.2006, 09:08   #4  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
И как мне быть?
Старый 09.06.2006, 09:16   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
А если на форме Edit метод написать? Я тут не силен, где лучше а где нет, но рассмотрите такой вариант.

Последний раз редактировалось Sada; 09.06.2006 в 09:18.
Старый 09.06.2006, 09:21   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не совсем понятно что вы хотите получить - изменения в вашем методе нигде не сохранются и после обновления датасорурса они пропадут
__________________
Axapta v.3.0 sp5 kr2
Старый 09.06.2006, 09:34   #7  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от Sada
А если на форме Edit метод написать? Я тут не силен, где лучше а где нет, но рассмотрите такой вариант.
На форме написал edit метод:
Код:
edit UM_QtyInPakage QtyInPakage(boolean _modif,  UM_QtyInPakage _val)
{
    if (!_modif)
    {
        if(curQtyInPakage)
            return curQtyInPakage;
        return UnitConvert::find(UM_ConvertBladingLineTable.itemID,"Шт","М").Factor;
    }
    curQtyInPakage = _val;
    return _val;
}
в результате при переходе на другую строчку значение моего поля становится таким же каким оно было на предыдущей строчке...
Старый 09.06.2006, 09:39   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от PavelSR
На форме написал edit метод:
Код:
edit UM_QtyInPakage QtyInPakage(boolean _modif,  UM_QtyInPakage _val)
{
    if (!_modif)
    {
        if(curQtyInPakage)
            return curQtyInPakage;
        return UnitConvert::find(UM_ConvertBladingLineTable.itemID,"Шт","М").Factor;
    }
    curQtyInPakage = _val;
    return _val;
}
в результате при переходе на другую строчку значение моего поля становится таким же каким оно было на предыдущей строчке...
Правильно. Изменений не было и вы возвращаете предидущее значение (вашу глобальную переменную)
Этот метод (пост я стёр, так как не подходит, но вы успели его процитировать )
я писал на тот случай, когда не понятно почему форма вызывалась два раза (а то и три), вам он не подходит, напишите обычный Edit метод и должно все заработать.
PHP код:
edit UM_QtyInPakage QtyInPakage(boolean _modif,  UM_QtyInPakage _val)
{
    if (!
_modif)
    {
        return 
UnitConvert::find(UM_ConvertBladingLineTable.itemID,"Шт","М").Factor;
    }
        return 
_val;

Должно работать.
Старый 09.06.2006, 09:50   #9  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Должно работать.
Проблема таже: произходит двойной вызов edit метода...
Старый 09.06.2006, 09:59   #10  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Поставте счетчик .Если вызывается первый раз то чистим глобальную переменную и потом её запоминаем, если второй раз то возвращаем её и счетчик сбросили.
Это конечно мог придумать только мой ивращенный мозг, но на вскидку ничего ЭЛЕГАНТНОГО не лезет
Старый 09.06.2006, 10:12   #11  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Думаю нада так:
завести в таблице поле типа UM_QtyInPakage, например бум звать его QtyInPakage
//--->

edit UM_QtyInPakage QtyInPakage(boolean _set, UM_QtyInPakage _val)
{
if (_set)
{
this.QtyInPakage = UnitConvert::find(this.itemID,"Шт","М").Factor;

}
return this.QtyInPakage;
}

//<--
по моему так должно быть


PS: Двойной вызов это нормально,
первый раз когда вы изменяете значение, второй когда форма хочет перерисовать контрол.

Последний раз редактировалось Jony; 09.06.2006 в 10:15.
Старый 09.06.2006, 10:27   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
!
Честно говоря, непонятно, чего вы пытаетесь получить вашим методом.

Edit методы используются для того, чтобы отображать значение, к примеру, не из вашей таблицы датасорса, и чтобы при его изменении можно было произвести более сложное изменение.

У вас же ничего не меняется.

Возможно вам просто нужен display method?

А если вам таки нужно что-то изменять, тогда напишите что.
Сейчас же ваш метод отрабатывает полностью верно - при изменении вызывается метод с параметром _set = true. а после этого сразу же он вызывается с параметром _set = false;

Разберитесь, короче, что вы хотитет получить от этого метода
Старый 09.06.2006, 10:55   #13  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Я все понял... Действително я зря пытался использовать edit метод... Задача была следующая: в Grid'е есть поле ItemId от которого зависят некоторые другие... при выборе кода номенклатуры должны измениться зависимые от него с последующей возможностью редактирования...
Я изменил поле непосредственно в источнике данных, перекрыв метод modified... в контроле ItemId.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
проблема с display методом kitty DAX: Программирование 6 29.11.2007 19:24
Проблема с EDIT методом и гридом Delfins DAX: Программирование 1 23.01.2007 21:36
Помогите разобраться с edit-методом mashaSi DAX: Программирование 4 08.06.2006 07:19
Грабли с наследником и edit-методом Wamr DAX: Программирование 5 02.02.2006 18:16

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

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

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