![]() |
#6 |
Участник
|
Спасибо за идею, правда, в моем случае такое "прямолинейное" решение не подошло, потому что 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; } Последний раз редактировалось gl00mie; 04.01.2012 в 17:12. Причина: указание версии |
|
|
|