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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.01.2012, 17:11   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Спасибо за идею, правда, в моем случае такое "прямолинейное" решение не подошло, потому что validateField() вызывается в т.ч. из validateWrite() и еще из кучи мест, включая класс разноски журналов ГК. Во вложении - реализация аналогичной проверки, сделанная за счет дополнения к иерархии классов LedgerJournalTransType. Заодно и сам этот класс подправлен: он в паре мест вызывает свои методы через SysDictClass.callObject(), но при этом не запрашивает ExecutePermission, из-за чего при выполнении на сервере код валится с ошибкой (правда, это проявляется лишь при программном создании строк журналов ГК на сервере). Проверка срабатывает только в "интерактивном контексте" в терминологии данного семейства классов, т.е. в общем случае при работе через форму или AIF, и только если запись была изменена с момента последнего сохранения в БД:
X++:
protected boolean checkApprovedRCashNotModified()
{
    LedgerJournalTrans_RCash    ledgerJourTrans_RCash;
    LedgerJournalTrans          ledgerJourTransOrig;
    LedgerJournalTrans          ledgerJourTrans;
    SysInfologStr               txt;
    boolean                     ret = true;
    ;
    if (    isInteractiveContext                // NB! проверка должна выполняться строго в интерактивном контексте!
        &&  operation == LedgerJournalOperation::Update
       )
    {
        ledgerJourTrans = axLedgerJournalTrans.ledgerJournalTrans();
        ledgerJourTransOrig = ledgerJourTrans.orig();
        if (!ledgerJourTrans.equal(ledgerJourTransOrig))
        {
            ledgerJourTrans_RCash = LedgerJournalTrans_RCash::find(ledgerJourTrans.RecId);
            if (ledgerJourTrans_RCash.CashDocId != '')
            {
                setprefix(strfmt("@SYS67148", ledgerJourTrans.LineNum));
                txt = strfmt(@"По строке журнала уже создана кассовая проводка с '%1' '%2', поэтому ее нельзя редактировать",
                            fieldpname(LedgerJournalTrans_RCash, CashDocId),
                            ledgerJourTrans_RCash.CashDocId
                            );
                ret = AifFault::checkFailedLogFault(txt, #LedgerJournalTransCanNotBeChangedWhenRCashTransCreated);
            }
        }
    }
    return ret;
}
PS. Модифа сделана под 2009-ю
Вложения
Тип файла: rar DEV_RCashWithoutLgrTransFix.rar (2.9 Кб, 57 просмотров)

Последний раз редактировалось gl00mie; 04.01.2012 в 17:12. Причина: указание версии
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проводки с типом SummedUp при закрытии склада в DAX 2009 ansoft DAX: Функционал 15 20.09.2010 08:28
VendTransOpen содержит RefRecID, к-ого нет в VendTrans Arahnid DAX: Программирование 2 07.06.2010 11:51
КЛАДР, он есть или его еще нет? Бигудь DAX: Функционал 8 30.07.2009 17:44
Копирование строк журнала отгрузочной накладной по производственному заказу tolstjak DAX: Программирование 2 22.06.2009 08:39
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49

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

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

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