|  08.11.2005, 13:55 | #1 | 
| Axapta Retail User |  Программное открытие формы строк журнала переноса 
			
			Возникла следующая задача - программно создавать журнал переноса, причем созданные строки журнала должны быть показаны пользователю, а дальше он уже сам редактирует/проверяет/разносит. Тут вылезла следующая проблема - при открытии формы InventJournalTransfer (строки журнала) возникает сообщение - "Для формы 'InventJournalTransfer' требуется активный буфер". Как я поняла, это связано с тем что она динамически связана с формой InventJournalTable (список журналов). Соответсвенно возникает вопрос - можно ли ее "обмануть" - например передать какие-нибудь параметры чтобы открыть ее из любой другой формы? Заранее спасибо! | 
|  | 
|  08.11.2005, 14:14 | #2 | 
| Участник | 
			
			Дело в том, что ошибка "вылезает" не из-за того, что формы динамически связаны. А из-за того, что при инициализации класса InventJournalTrans_Movement, в родителе (класс JournalFormTrans) в методе NEW() написана следующая обработка: PHP код: 
			 | 
|  | 
|  08.11.2005, 14:14 | #3 | 
| Участник | 
			
			Нужно передать аргумент, примерно так FormRun formRun; Args args = new Args(); ; args.Record(InventJournalTable); formRun = new MenuFunction(nventJournalTransfer, MenuItemType:  isplay).create(args); if (formRun) { formRun.run(); formRun.wait(); } | 
|  | |
| За это сообщение автора поблагодарили: AGRESSOR (1). | |
|  08.11.2005, 14:18 | #4 | 
| Участник | 
			
			А почему нельзя также программно создавать InventJournalTable, тем более, что строки журнала без самого журнала не живут и как эти строки вы потом искать будете, не дай бог если у вас без журнала все получится. Короче журнал - это шапка документа, строки - спецификация и они неотделимы друг от друга. Кстати, если пользователь собирается разносить строки, то разносит он строки одного журнала (все) и признак разнесен журнал или нет содержится в InventJournalTable. Так что как вы без него обойдетесь не знаю
		 | 
|  | 
|  08.11.2005, 15:19 | #5 | 
| Axapta Retail User | 
			
			Наверное я немножко неверно задала вопрос. Как передать параметры я знаю, проблема в том что не знаю какие. 2 Zan: В частности потом в классе initJournalFormTable есть строки: callerForm = formRun.args().caller(); journalFormTable = callerForm.journalForm(); что означает по минимуму наличие соответсвующего метода в моей форме. а в стандартной форме списка журнала в методе init все это дело заполняется через контролы формы (почему и зачем - не знаю) journalFormTable.parmCtrlallOpenPosted(allOpenPosted); journalFormTable.parmCtrlJournalTypeGrid(ctrlGridJournalType); journalFormTable.parmCtrlJournalIdTab(journalId); но не могу же я контролы дублировать... а как иначе - не понимаю. собственно это и составляет суть вопроса - как этот journalFormTable заполнить. и может кто сможет объяснить - почему используется такой метод передачи параметров? 2 itfs: спасибо. теперь осталось понять как сформировать нужный caller... 2 Gad: программно создаваться запись в InventJournalTable конечно будет, я просто не хочу эту формы вызывать и отображать на экране. | 
|  | 
|  08.11.2005, 15:57 | #6 | 
| Участник | 
			
			можно попробовать сделать своего fake - наследника journalformtable
		 | 
|  | 
|  08.11.2005, 15:59 | #7 | 
| Участник | 
			
			В методе init() заполняется это все через контролы формы, потому что, инициализация класса  JournalFormTable происходит до вызова super(), а в super() происходит инициализация DataSource, а в init() DataSource используется метод класса JournalFormTable. PHP код: 
			 | 
|  | 
|  08.11.2005, 16:00 | #8 | 
| Участник | 
			
			Да и до инициализации формы  контролы скорее всего тоже не проинициализированы.
		 Последний раз редактировалось Zan; 08.11.2005 в 16:22. | 
|  | 
|  08.11.2005, 16:04 | #9 | 
| Участник | 
			
			А чем не устраивает открывать форму InventJournalTable, отображая в ней при этом только что созданный журнал? А уж на кнопочку Строки нажать не так трудно   | 
|  | 
|  08.11.2005, 16:11 | #10 | 
| Участник | 
			
			И тогда ваша задача значительно упроститься. Потому что открыть форму InventJornalTable будет выглядеть примерно так: PHP код: 
			Последний раз редактировалось Zan; 08.11.2005 в 18:39. | 
|  | 
|  08.11.2005, 16:57 | #11 | 
| Аманд | Цитата: 
		
			Сообщение от ViV
			
			 Возникла следующая задача - программно создавать журнал переноса, причем созданные строки журнала должны быть показаны пользователю, а дальше он уже сам редактирует/проверяет/разносит. Заранее спасибо! А вы уверены что перенос именно так нужно создавать? Внедрено (или внедряется) ли у вас сводное планирование? В нём есть механизм создающий нужные переносы автоматически. | 
|  | 
|  09.11.2005, 06:37 | #12 | 
| Участник | 
			
			А почему бы вам не открывать сначала форму журнала с созданным журналом, а затем саму форму строк? Т.е. сделать так, как работает, например, проверка журнала на ошибки. Если в журнале есть ошибки, то даже при закрытой форме строк и самого журнала при двойном клике на строку с ошибкой открывается форма журнала с необходимым журналом и форма строк этого журнала. За такое поведение отвечает класс JournalInfoAction, а точнее вот такой кусок кода в методе run(): X++: ttsbegin; journalTable = journalStatic::findJournalTableFromTrans(journalTrans,true); ttscommit; if (journalTable.recId && journalTableData::journalBlockLevel(journalTable) == journalBlockLevel::None) { args = new Args(); args.name(journalStatic::newTable(journalTable).tableFormName()); args.record(journalTable); formRun = classFactory.formRunClass(args); formRun.init(); formRun.run(); formRunObject = formRun; journalForm = formRunobject.journalForm(); journalForm.findRecord(journalTrans); formRun.wait(); } | 
|  | |
| За это сообщение автора поблагодарили: Player1 (3). | |
|  09.11.2005, 07:53 | #13 | 
| Axapta Retail User |   
			
			2 Zan и Peter Savintsev - огромное спасибо! Решено сделать по вашему совету - открывать сначала форму журнала с созданным журналом и тут же открывать сразу строки. Можно еще дурацкий вопрос - а нельзя ли чтобы форма журнала была невидима? Потом просто при закрытии формы строк ее закрывать себе...   2 Vals - да, уверены. | 
|  | 
|  09.11.2005, 13:16 | #14 | 
| Участник | 
			
			После небольших изысканий удалось добиться следующего. Одно но, я это делал применительно к журналам Главной книги. 1. На форме LedgerJournalTable создал метод, возвращающий контрол (В нашем случае кнопка Lines) PHP код: 
			2. Небольшие модификации в коде, открывающем форму журнала после его создания. PHP код: 
			Последний раз редактировалось Zan; 09.11.2005 в 13:26. | 
|  | 
|  | 
| 
 |