Показать сообщение отдельно
Старый 15.05.2013, 16:53   #1  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
AX2009: Throw error в modified()
Есть форма, на ней есть поле, в кот человек пишет значение, аксапта должна отформатировать значение и оставить уже отформатированное в этом поле.

Функция F, которая форматирует и возвращает отформатированную строку при некоторых условиях выкидывает ошибку.

Вызов F происходит на modified контрола формы.
Но, не смотря на ошибку, значение остается в поле и пользователь может сохранить по Ctrl+F неверное значение.
То есть, упрощенно, происходит то, что после выполнения кода, например, приведенного ниже, можно нажать кнопку Save и сохранится Table1.A = '22'. Такой же эффект, если modified на поле на DS формы.
X++:
public boolean modified()  // modified контрола , привязанного к Table1.A
{
    boolean ret;
    ;
    
    Table1.A = '22';
    throw error('tratata');

    ret = super();

    return ret;
}
Как это обойти? Понятно, что лучше :
1) переприсваивать значение на modifiedField таблицы,но на форме уже есть код на этом контроле и лучше пересчет вставить именно сюда.
2) лучше отдельно вызывать проверки в validate (до modified), но код класса вызывается из нескольких мест + в общем случае на modified могут же выбрасываться ошибки и хотелось бы узнать, как их обрабатывать.

Получается достигнуть желаемого(= не дать ввести и, уж тем более,сохранить запись с неправильным значением), написав try/catch в modified(), но это как-то не оч стандартный подход.

Как в идеале нужно решать подобную задачу?

AX2009