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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.12.2011, 23:39   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Ax2009 Проводки по кассе есть, а строк журнала нет
1. Тема поднималась в Есть проводка по модулю (касса), нет по ГК
но решение я не смогла найти. Не понимаю в какой момент он дает удалить после одобрения.

2 Может кто сталкивался. Захожу в журнал ордеров. 3 одобренных. Редактировать не дает. Делаю новую строчку, заполняю. Удаляю ее. И все 3 предыдущих одобренных ордера становятся доступными для редактирования. Не могу найти место, где в коде ошибка. Более того, если создать строку по кнопке вниз и ему будет что-то не нравиться в ней, он ее блокирует и при этом блокирует от изменений все другие неодобренные строки журнала. Надо выйти из журнала и зайти. Только после этого все ок.
Старый 19.12.2011, 10:20   #2  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Arahnid Посмотреть сообщение
1. Тема поднималась в Есть проводка по модулю (касса), нет по ГК
но решение я не смогла найти. Не понимаю в какой момент он дает удалить после одобрения.

2 Может кто сталкивался. Захожу в журнал ордеров. 3 одобренных. Редактировать не дает. Делаю новую строчку, заполняю. Удаляю ее. И все 3 предыдущих одобренных ордера становятся доступными для редактирования. Не могу найти место, где в коде ошибка. Более того, если создать строку по кнопке вниз и ему будет что-то не нравиться в ней, он ее блокирует и при этом блокирует от изменений все другие неодобренные строки журнала. Надо выйти из журнала и зайти. Только после этого все ок.
Есть такое, какой-то баг с разрешением редактирования после удаления одной из записей. Сходу не понял, в чем проблема, где-то на active() неправильно работает, попробую исправить за сегодня-завтра.
Старый 19.12.2011, 11:28   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Есть проводка по модулю (касса), нет по ГК[/url]. Не понимаю в какой момент он дает удалить после одобрения.
Было замечено, что проводки RCashTrans могут "отваливаться" от строк журналов ГК, если в последних, кажется, поменять дату проводки.
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Захожу в журнал ордеров. 3 одобренных. Редактировать не дает. Делаю новую строчку, заполняю. Удаляю ее. И все 3 предыдущих одобренных ордера становятся доступными для редактирования.
Я такое видел в результате работы какой-то древней притащенной откуда-то модифы по ТВД: типа работает такой стандартный код, дергает кучу методов, че-то там проверяет, выставляет allowEdit(), а потом - фигакс! и модифа тупо перебивает это свойство исходя из своей какой-то там логики. Под отладчиком это все относительно быстро нашлось. А еще офигенски прикольно, что \Classes\LedgerJournalTransUpdateRCash\checkCash штатно тупо не проверяет проводки в статусе, отличном от RCashTransStatus::None. И правда, зачем? локализаторы же все надежно прикрыли, возможность редактирования после одобрения отрубили...
За это сообщение автора поблагодарили: Bega (1).
Старый 20.12.2011, 20:35   #4  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Проблема в том, что после удаления строки LedgerJournalTrans почему-то перестает нормально работать датасорс LedgerJournalTrans_RCash (возвращает пустую запись, хотя в базе она есть). Почему это происходит, не могу понять. Насчет "фигакс!" gl00mie прав, там после всей логики разрешения/запрета редактирования просто перезаписывается allowEdit() исходя из статуса LedgerJournalTrans_RCash, поскольку этот буфер пустой, то allowEdit() становится в true.

Пока что нашел некрасивое решение: в конце метода executeQuery() датасорса LedgerJournalTrans_RCash вставить:
X++:
if (!LedgerJournalTrans_RCash)
{
   LedgerJournalTrans_RCash = LedgerJournalTrans_RCash::find(LedgerJournalTrans.RecId, true);
}
Вроде работает, но вообще хорошо бы понять, почему глючит датасорс LedgerJournalTrans_RCash.
Старый 29.12.2011, 11:48   #5  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Мое решение выглядело так - на методе validateField в таблице LedgerJournalTrans поставила запрет на редактирование
X++:
if (LedgerJournalTrans_RCash::find(this.RecId).CashDocId)
    {
        throw error ('Нельзя редактировать одобренную строку!');
    }
С момента создания темы и до текущей даты более проблем не возникало. Однако, воспроизвести наличие кассовой проводки и отсутствие ее в журнале так и не смогла.
За это сообщение автора поблагодарили: gl00mie (3).
Старый 04.01.2012, 17:11   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (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 Кб, 54 просмотров)

Последний раз редактировалось 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, время: 18:02.