|
10.05.2007, 18:16 | #1 |
Участник
|
Получение номера журнала из пункта меню
Есть шапка журнала, есть строки журнала.
Создаем кнопку в строках журнала со ссылкой на форму "Создать новую строчку в журнале". Как передать форме код журнала? = element.args().record() - передача текущей строки, а как из этого получить код журнала, т.к. если передается пустая строка, то она не знает код журнала? Последний раз редактировалось Arahnid; 10.05.2007 в 18:23. |
|
10.05.2007, 18:24 | #2 |
SAP
|
Ну конечно не знает... вызов идет через MenuItem или в коде. Какая запись передается в MenuItem, какой номер журнала вы хотите получить из строк или из шапки?
|
|
10.05.2007, 18:27 | #3 |
Участник
|
Номер строки из шапки
|
|
10.05.2007, 18:29 | #4 |
Участник
|
Чтобы не объяснять, как это работает, к примеру, в складских журналах, предложу простой вариант - укажите на пункте меню на форме свойство DataSource - в нем установите значение не источника данных строк, а источника данных шапки. Тогда в вашем классе у вас будет доступна строка шапки, а не строк и отсутствие строк не будет влиять.
А если в шапках тоже строк нету, то и строки создавать негде |
|
10.05.2007, 18:38 | #5 |
Участник
|
Но у меня форма шапки отдельно, форма строк отдельно. Кнопка в форме строк, я не могу указать форму шапки
|
|
10.05.2007, 18:41 | #6 |
Программатор
|
Ну значит вызовите свою форму программно и в Args рекорд передайте шапку.
|
|
10.05.2007, 18:44 | #7 |
Участник
|
Аа, отдельные формы. что ж вы раньше не написали.
Тогда вам нужно смотреть именно в сторону подобия с другими журналами. Посмотрите наследников класса JournalFormTrans. Возможно вам просто нужно добавить ваш тип журнала в список уже обрабатываемых? Суть в том, что при открытии формы строк журнала (в методе init()) запоминается строка, из который была вызвана форма (через args.record()). Вам нужно сделать аналогичное действие - просто в форме запомнить, из какой шапки журнала она вызвана. Если замените, на всех формах строк журналов существуют методы journalForm - они возвращают ссылку на этот самый класс, который хранит информацию в том числе и о шапке журнала. Вам нужно сделать что-то подобное. Вызвать этот метод в классе по пункту меню и получить выбранную шапку. Запутанно как-то получилось, но в 2 словах это не описать |
|
10.05.2007, 18:57 | #8 |
Участник
|
Обалдеть. А может есть простой путь. Зачем так сложно. Неужели нельзя проще?
|
|
10.05.2007, 19:03 | #9 |
Шаман форума
|
Конечно можно. В стандартной функциональности создание новой строки журнала вроде бы является обычной операцией
__________________
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 |
Участник
|
А вы начальный вопрос прочтите и будет сложнее
|
|
11.05.2007, 01:22 | #11 |
Участник
|
А собственно, что сложного в том, чтобы запомнить при запуске формы запись, из которой она была вызвана? Думаю, ничего. Аксапта кишит примерами этого.
А далее, что сложного в том, чтобы получить (или передать) эту запись при вызове класса из открытой формы? Оба действия используют один и тот же подход - используют класс Args Пример про складские журналы просто показывает, как это реализовано в Аксапте, и как сделать это универсальным. (своего рода Best Practice по архитектуре построения решения). |
|
11.05.2007, 09:17 | #12 |
Участник
|
Может что-то типа:
X++: FormRun caller = args.caller() Journal journal; ; journal = caller.args().record(); |
|
11.05.2007, 09:21 | #13 |
Участник
|
только надо еще проверок понаставить для надежности...
во-вторых, можно создавать при помощи create на FormDataSource строчек, тогда дайналинк сам вставит туда код журнала. Наконец, перебрать дайналинки в датасурсе строчек в текущей форме, найти тот, который ссылается на журнал и выдрать оттудова код журнала |
|
11.05.2007, 10:31 | #14 |
SAP
|
Я так вообще не вижу в чем проблема какую надо запись ту и передал, какой надо параметр тот и передал. Ну на крайний случай
Цитата:
перебрать дайналинки в датасурсе строчек в текущей форме, найти тот, который ссылается на журнал и выдрать оттудова код журнал
|
|
11.05.2007, 10:51 | #15 |
Участник
|
Я пошла по простому пути. Ввела пустую строку, создаваемую автоматом при открытии формы, и оттуда выдернула номер журнала. Вполне сработало.
Просто универсальность решения хороша, но не для маленьких задач. Спасибо большое всем за участие. Столько разной информации получила. |
|
13.05.2007, 11:44 | #16 |
Administrator
|
На самом деле для таких целей во всех (точнее, почти во всех; там, где нет, добавьте сами) формах строк журналов есть метод ledgerJournalTable, который возвращает заголовок текущего журнала. Таким образом, задача сводится к вызову
X++: args.caller().ledgerJournalTable().JournalNum; 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 |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Не изменяется имя пункта меню | 3 | |||
получение номерной серии из номера ваучера | 2 | |||
Не видно пункта меню | 19 | |||
Отображение пункта меню в разных компаниях | 0 | |||
Работа с главным меню в Axapta | 0 |
|