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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.05.2007, 18:16   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Получение номера журнала из пункта меню
Есть шапка журнала, есть строки журнала.
Создаем кнопку в строках журнала со ссылкой на форму "Создать новую строчку в журнале".
Как передать форме код журнала?

= element.args().record() - передача текущей строки, а как из этого получить код журнала, т.к. если передается пустая строка, то она не знает код журнала?

Последний раз редактировалось Arahnid; 10.05.2007 в 18:23.
Старый 10.05.2007, 18:24   #2  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Ну конечно не знает... вызов идет через MenuItem или в коде. Какая запись передается в MenuItem, какой номер журнала вы хотите получить из строк или из шапки?
Старый 10.05.2007, 18:27   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Номер строки из шапки
Старый 10.05.2007, 18:29   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Чтобы не объяснять, как это работает, к примеру, в складских журналах, предложу простой вариант - укажите на пункте меню на форме свойство DataSource - в нем установите значение не источника данных строк, а источника данных шапки. Тогда в вашем классе у вас будет доступна строка шапки, а не строк и отсутствие строк не будет влиять.

А если в шапках тоже строк нету, то и строки создавать негде
Старый 10.05.2007, 18:38   #5  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Но у меня форма шапки отдельно, форма строк отдельно. Кнопка в форме строк, я не могу указать форму шапки
Старый 10.05.2007, 18:41   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Ну значит вызовите свою форму программно и в Args рекорд передайте шапку.
Старый 10.05.2007, 18:44   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Аа, отдельные формы. что ж вы раньше не написали.

Тогда вам нужно смотреть именно в сторону подобия с другими журналами.
Посмотрите наследников класса JournalFormTrans.
Возможно вам просто нужно добавить ваш тип журнала в список уже обрабатываемых?

Суть в том, что при открытии формы строк журнала (в методе init()) запоминается строка, из который была вызвана форма (через args.record()). Вам нужно сделать аналогичное действие - просто в форме запомнить, из какой шапки журнала она вызвана. Если замените, на всех формах строк журналов существуют методы journalForm - они возвращают ссылку на этот самый класс, который хранит информацию в том числе и о шапке журнала. Вам нужно сделать что-то подобное. Вызвать этот метод в классе по пункту меню и получить выбранную шапку.
Запутанно как-то получилось, но в 2 словах это не описать
Старый 10.05.2007, 18:57   #8  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Обалдеть. А может есть простой путь. Зачем так сложно. Неужели нельзя проще?
Старый 10.05.2007, 19:03   #9  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Обалдеть. А может есть простой путь. Зачем так сложно. Неужели нельзя проще?
Конечно можно. В стандартной функциональности создание новой строки журнала вроде бы является обычной операцией
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 10.05.2007, 19:16   #10  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
А вы начальный вопрос прочтите и будет сложнее
Старый 11.05.2007, 01:22   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А собственно, что сложного в том, чтобы запомнить при запуске формы запись, из которой она была вызвана? Думаю, ничего. Аксапта кишит примерами этого.

А далее, что сложного в том, чтобы получить (или передать) эту запись при вызове класса из открытой формы?

Оба действия используют один и тот же подход - используют класс Args

Пример про складские журналы просто показывает, как это реализовано в Аксапте, и как сделать это универсальным. (своего рода Best Practice по архитектуре построения решения).
Старый 11.05.2007, 09:17   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Может что-то типа:
X++:
FormRun caller = args.caller()
Journal journal;
;
journal = caller.args().record();
Старый 11.05.2007, 09:21   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
только надо еще проверок понаставить для надежности...

во-вторых, можно создавать при помощи create на FormDataSource строчек, тогда дайналинк сам вставит туда код журнала. Наконец, перебрать дайналинки в датасурсе строчек в текущей форме, найти тот, который ссылается на журнал и выдрать оттудова код журнала
Старый 11.05.2007, 10:31   #14  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Я так вообще не вижу в чем проблема какую надо запись ту и передал, какой надо параметр тот и передал. Ну на крайний случай
Цитата:
перебрать дайналинки в датасурсе строчек в текущей форме, найти тот, который ссылается на журнал и выдрать оттудова код журнал
хотя тоже вариант.
Старый 11.05.2007, 10:51   #15  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Я пошла по простому пути. Ввела пустую строку, создаваемую автоматом при открытии формы, и оттуда выдернула номер журнала. Вполне сработало.

Просто универсальность решения хороша, но не для маленьких задач. Спасибо большое всем за участие. Столько разной информации получила.
Старый 13.05.2007, 11:44   #16  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
На самом деле для таких целей во всех (точнее, почти во всех; там, где нет, добавьте сами) формах строк журналов есть метод ledgerJournalTable, который возвращает заголовок текущего журнала. Таким образом, задача сводится к вызову
X++:
args.caller().ledgerJournalTable().JournalNum;
Если же речь не о журналах ГК, то можно пойти чуть более сложным путем (хотя и более универсальным). У всех (вот теперь уж точно у всех) форм строк журналов есть метод journalForm(). Этот метод вернет объект класса JournalFormTrans (точнее, одного из его наследников, но это не важно). Далее, у этого класса есть метод journalTableData(), который возвращает объект класса JournalTableData. А вот уже у этого объекта есть метод journalTable(), который и вернет запись-заголовок журнала. В итоге, чтобы получить номер журнала, надо вызвать:
X++:
journalFormTrans = args.caller().journalForm();
journalFormTrans.journalTableData().journalTable().JournalId;
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не изменяется имя пункта меню Silphidae DAX: Программирование 3 25.11.2008 15:35
получение номерной серии из номера ваучера Axaptus DAX: Программирование 2 25.12.2007 14:32
Не видно пункта меню Protey DAX: Программирование 19 15.03.2006 17:12
Отображение пункта меню в разных компаниях Владимир Максимов DAX: Программирование 0 21.10.2004 10:42
Работа с главным меню в Axapta Alexey DAX: Программирование 0 04.01.2002 23:31

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

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

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