17.04.2020, 16:58 | #1 |
Участник
|
Создание нового метода в классе
Добрый день!
Подскажите как решить следующую задачу! В предыдущем примере мне была поставлена сл. задача: 1) Есть строка в журнале проводок в статусе зарезервировано, при нажатии на кнопку "удалить" появляется infolog "По данному журналу имеются проводки в статусе больше чем 'заказано', удаление не возможно" 2) а при переходе в функции и нажатии на кнопку "удалить строки журнала", строка удаляется 3) как сделать, чтоб при нажатии на кнопку из 2 пункта строка не удалялась Я ее решил путем перекрытия метода clicked на кнопке и добавления кода. Но есть класс который я так понимаю отвечает за данную операцию и в нем нужно сделать метод с помощью которого будет исполняться вышеописанная операция (желательно расписать все очень подробно т.к. я раньше не занимался программированием) Код который я добавил: X++: void clicked() { InventTrans iTrans; inventTrans InventTr; InventTransOrigin iTransOrigin; ; while select iTransOrigin where (iTransOrigin.InventTransId == InventJournalTrans.InventTransId || iTransOrigin.InventTransId == InventJournalTrans.ToInventTransId) join InventTr where InventTr.InventTransOrigin == iTransOrigin.RecId && InventTr.StatusReceipt != StatusReceipt::Ordered && InventTr.StatusIssue != StatusIssue::OnOrder { info("По данному журналу имеются проводки в статусе больше чем 'заказано', удаление не возможно"); return; } dimensionDefaultingController.deleted(); super(); } Последний раз редактировалось mazzy; 17.04.2020 в 17:45. |
|
17.04.2020, 17:53 | #2 |
Участник
|
1.
я поправил форматирование вашего сообщения - добавил тег [xpp] я отвечу скорее по форме вашего кода, чем по существу. думаю, что по существу вам обязательно ответят. 2. метод clicked (как и другие методы формы) всегда выполняются на клиенте (до версии ax7) крайне НЕ рекомендуется вставлять в методы формы код, который обращается к данным. посмотрите в вашу форму. там наверняка должны быть вызовы классов, которые обращаются с данными. классы могут и должны выполняться на сервере. скорее всего, вам надо вставиться в класс. или, на крайняк, создать новый класс. не работайте с данными из методов формы. Даже в ax7. 3. если уж говорить про метод clicked, то свой код надо добавлять ПОСЛЕ super super этого метода занимается отрисовкой меню и прочим UI. Дайте Аксапте сначала отрисовать реакцию на действия пользователей, а уж потом делайте что-то свое. 4. проконтролируйте, что super на методах формы обязательно выполнится. в некоторых случаях вы можете сломать отрисовку UI, выполнив return и не выполнив super Последний раз редактировалось mazzy; 17.04.2020 в 18:04. |
|
17.04.2020, 18:33 | #3 |
Участник
|
Попробую ответить по сути:
Цитата:
но уж точно НЕ в метод формы. судя по названию поля, вы работаете с журналом переноса, а не с журналом проводок. постарайтесь использовать точные названия. Можно английские. судя по названию таблицы, вы работаете с ax2012 или выше. ответ сильно зависит от версии Аксапты. Цитата:
Сообщение от Максим1989
имеются проводки
X++: while select iTransOrigin where (iTransOrigin.InventTransId == InventJournalTrans.InventTransId || iTransOrigin.InventTransId == InventJournalTrans.ToInventTransId) join InventTr where InventTr.InventTransOrigin == iTransOrigin.RecId && InventTr.StatusReceipt != StatusReceipt::Ordered && InventTr.StatusIssue != StatusIssue::OnOrder значит в запросе должен быть Firstonly. сейчас вы выдаете столько сообщений, сколько проводок будет найдено поле InventTransId есть и в inventTrans. а, в штатной ax2012 у таблицы InventTrans нет индекса по InventTransId, а раньше был. ок, пусть inventTransOrigin будет. Указывайте версию Аксапты в своем вопросе. и еще: не сокращайте inventTransOrigin в iTransOpen. префикс i скорее относится к интерфейсам. в аксапте есть и интерфейсы, и invent или (не рекомендуется) сокращайте все. например, ito, itr, it Цитата:
чтобы задать правильный вопрос нужно знать хотя бы половину ответа. хотя может быть, кто-нибудь и попробует ответить по существу больше. также почитайте best practice. он старый но все еще актуальный. https://docs.microsoft.com/en-us/dyn...ax-development Последний раз редактировалось mazzy; 17.04.2020 в 18:44. |
|
17.04.2020, 19:55 | #4 |
Участник
|
Цитата:
а, в штатной ax2012 у таблицы InventTrans нет индекса по InventTransId, а раньше был.
Все сделано в угоду божечку нормализации, декомпозиции и прочим циям. |
|