|  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 | |||
| 
 |