Показать сообщение отдельно
Старый 30.07.2009, 17:25   #7  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DSPIC Посмотреть сообщение
1. Если это нужно сделать для конкретной формы, то лучше этот функционал написать на форме (а ещё лучше в классе и вызывать из формы). Если это нужно для таблицы, которая светится на нескольких формах, то лучше этот функционал написать на таблице, но при этом проверять, что вызов произошел из нужной формы, т.к. изменение полей таблицы может происходить не только по явной инициативе пользователя.
2. В примере данном примере вызов происходит на датасорсе формы Address, метод validateWrite():

X++:
public boolean validateWrite()
{
    boolean ret;
    Tutorial_RunbaseForm    tutorial_RunbaseForm;
    ;

    ret = super();

    if (ret && Address.RecId)
    {
        if (Address.Name != Address.orig().Name)
        {
            tutorial_RunbaseForm = Tutorial_RunbaseForm::construct();

            if (tutorial_RunbaseForm.prompt())
            {
                tutorial_RunbaseForm.run();
            }
            else
            {
                Address.reread();
                ret = checkfailed("ПОля не сохранены");
            }
        }
    }

    return ret;
}
Здесь проверяется на изменение поле "Name".
В качестве диалога\формы для указания причины изменения подставил диалог tutorial_RunbaseForm. У вас должен быть свой.

3. Это первый пример, который пришел в голову, соотв-нно на красивость и полную корректность не претендует.
Всё бы хорошо, если б не одно "НО".
validateWrite() - идёт без транзакции, а сам update() потом пойдёт уже отдельной транзакцией
Соответсвенно потенциально имете проблему, когда лог вставился, а изменения не прошли.

Вариант belugin-а может и лишён конкретно этого недостатка (чего уже придираться то, кстати, - понятно же что он имел ввиду ), но в этом случае будет выскакивать запрос пользователю во время выполнения транзакции, что, я думаю все понимают, не есть гут..
__________________
Zhirenkov Vitaly