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