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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2020, 16:58   #1  
Максим1989 is offline
Максим1989
Участник
 
33 / 10 (1) +
Регистрация: 14.04.2020
Создание нового метода в классе
Добрый день!

Подскажите как решить следующую задачу!
В предыдущем примере мне была поставлена сл. задача:

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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
1.
я поправил форматирование вашего сообщения - добавил тег [xpp]

я отвечу скорее по форме вашего кода, чем по существу.
думаю, что по существу вам обязательно ответят.

2.
метод clicked (как и другие методы формы) всегда выполняются на клиенте (до версии ax7)
крайне НЕ рекомендуется вставлять в методы формы код, который обращается к данным.

посмотрите в вашу форму. там наверняка должны быть вызовы классов, которые обращаются с данными. классы могут и должны выполняться на сервере.

скорее всего, вам надо вставиться в класс. или, на крайняк, создать новый класс.
не работайте с данными из методов формы. Даже в ax7.

3.
если уж говорить про метод clicked, то свой код надо добавлять ПОСЛЕ super
super этого метода занимается отрисовкой меню и прочим UI.
Дайте Аксапте сначала отрисовать реакцию на действия пользователей, а уж потом делайте что-то свое.

4.
проконтролируйте, что super на методах формы обязательно выполнится.
в некоторых случаях вы можете сломать отрисовку UI, выполнив return и не выполнив super
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 17.04.2020 в 18:04.
Старый 17.04.2020, 18:33   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Попробую ответить по сути:
Цитата:
Сообщение от Максим1989 Посмотреть сообщение
Но есть класс который я так понимаю отвечает за данную операцию и в нем нужно сделать метод с помощью которого будет исполняться вышеописанная операция
да, либо в класс, либо в метод validateDelete таблицы inventJournalTrans, либо (маловероятно) сделать свой класс.

но уж точно НЕ в метод формы.

Цитата:
Сообщение от Максим1989 Посмотреть сообщение
в журнале проводок
....
InventJournalTrans.ToInventTransId
судя по названию поля, вы работаете с журналом переноса, а не с журналом проводок.
постарайтесь использовать точные названия. Можно английские.

Цитата:
Сообщение от Максим1989 Посмотреть сообщение
InventTransOrigin
судя по названию таблицы, вы работаете с 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.
сейчас вы выдаете столько сообщений, сколько проводок будет найдено

кроме того, я сильно подозреваю, что inventTransOrigin в запросе лишний.
поле InventTransId есть и в inventTrans.

а, в штатной ax2012 у таблицы InventTrans нет индекса по InventTransId, а раньше был.
ок, пусть inventTransOrigin будет.

Указывайте версию Аксапты в своем вопросе.

и еще: не сокращайте inventTransOrigin в iTransOpen.
префикс i скорее относится к интерфейсам.
в аксапте есть и интерфейсы, и invent

или (не рекомендуется) сокращайте все. например, ito, itr, it

Цитата:
Сообщение от Максим1989 Посмотреть сообщение
(желательно расписать все очень подробно т.к. я раньше не занимался программированием)
Вам надо найти тьютора или разобраться самостоятельно с библиотеками/таблицами аксапты.
чтобы задать правильный вопрос нужно знать хотя бы половину ответа.

хотя может быть, кто-нибудь и попробует ответить по существу больше.

также почитайте best practice. он старый но все еще актуальный.
https://docs.microsoft.com/en-us/dyn...ax-development
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 17.04.2020 в 18:44.
Старый 17.04.2020, 19:55   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
а, в штатной ax2012 у таблицы InventTrans нет индекса по InventTransId, а раньше был.
Открою небольшой секрет - в DAX2012 даже поля InventTransId в таблице InventTrans нет.
Все сделано в угоду божечку нормализации, декомпозиции и прочим циям.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание метода в классе Максим1989 DAX: Программирование 1 17.04.2020 20:39
Создание нового работника ax 2012 r3 - как? mnt_dx DAX: Функционал 9 28.11.2014 15:51
Создание нового EDT в AX 2012 Mileyko DAX: Программирование 2 26.03.2013 14:35
Поведение equal() метода в классе RunOn Server v3.0 SP4 Russland DAX: Программирование 7 15.11.2007 16:12
Создание нового типа журнала в Управлении запасами vasiliy DAX: Программирование 2 03.11.2005 14:46
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:53.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.