12.05.2010, 09:58 | #1 |
Сам.AX
|
Открытие формы строк журнала спецификации
Уважаемые участники axforum.info!
Никак не получается программно открыть форму строк журнала спецификации. Делаю так: Функция insertInventJour создает журнал и строку в ней и возвращает код журнала: X++: //формируем строку inventJournalTable.Description descr = strfmt("к заказу %1", SalesTable.SalesId); //ищем тип журнала спецификация select firstonly inventJournalName where inventJournalName.JournalNameId == 'Спецификация'; //ищем журнал спецификации к этому заказу select firstonly inventJournalTable where (inventJournalTable.JournalNameId == inventJournalName.JournalNameId) && (inventJournalTable.Description == descr); //если не нашли, создаем журнал и строку в нем с приходом номенклатуры-спецификации if (!inventJournalTable) { ttsbegin; inventJournalTable.initFromInventJournalName(inventJournalName); inventJournalTable.Description = descr; inventJournalTable.isDocOutput = NoYes::Yes; inventJournalTable.Dimension = SalesLine.Dimension; inventJournalTable.insert(); ttscommit; select firstonly inventTable where inventTable.ItemId == 'НОМ1'; ttsbegin; inventJournalTrans.initFromInventJournalTable(inventJournalTable); inventJournalTrans.initFromInventTable(inventTable); inventJournalTrans.TransDate = today(); inventJournalTrans.Dimension = SalesLine.Dimension; inventJournalTrans.insert(); ttscommit; } //возвращаем код журнала спецификации ret = InventJournalTable.JournalId; X++: inventJournalTableT = InventJournalTable::find(element.insertInventJour()); if(inventJournalTableT) { select inventJournalTransT where inventJournalTransT.JournalId == inventJournalTableT.JournalId; args.record(inventJournalTransT); args.parm(inventJournalTableT.JournalId); frmInventJournalTrans = new MenuFunction(menuItemDisplayStr(InventJournalTransBOM), menuItemType::Display).create(args); frmInventJournalTrans.run(); } Она вываливается из метода new X++: if (! formRun.args().caller() || ! formRun.args().dataset()) throw error(strfmt("@SYS22678",formRun.name())); Версия Аксапты - 4 SP2 |
|
12.05.2010, 10:22 | #2 |
Участник
|
Цитата:
Как вариант, могу посоветовать в фоне создать форму самих журналов InventJournalTable и передать её в качестве caller в форму строк. |
|
12.05.2010, 10:28 | #3 |
Сам.AX
|
Цитата:
X++: args.record(inventJournalTableT); frmInventJournalTable = new MenuFunction(menuItemDisplayStr(InventJournalTableBOM), menuItemType::Display).create(args); args.caller(frmInventJournalTable); JournalTableData Объект не инициализирован. Трассировка стека (C)\Classes\JournalTableData\journalTable (C)\Classes\InventJournalFormTrans\formInitPost - line 6 (C)\Forms\InventJournalBOM\Methods\init - line 15 (C)\Classes\SysSetupFormRun\init - line 5 (C)\Classes\MenuFunction\create (C)\Classes\FormButtonControl\Clicked - line 48 Я в замешательстве... |
|
12.05.2010, 10:37 | #4 |
Участник
|
Сделайте frmInventJournalTable.init() перед тем как его использовать
|
|
12.05.2010, 10:43 | #5 |
Сам.AX
|
не помогло
X++: : JournalTableData . (C)\Classes\JournalTableData\journalStatic (C)\Classes\JournalFormTable\formInitPost - line 8 (C)\Classes\InventJournalFormTable\formInitPost - line 4 (C)\Forms\InventJournalTable\Methods\init - line 27 (C)\Classes\SysSetupFormRun\init - line 5 (C)\Classes\FormButtonControl\Clicked - line 45 |
|
12.05.2010, 10:57 | #6 |
Участник
|
|
|
12.05.2010, 11:10 | #7 |
Участник
|
X++: args.record(inventJournalTableT); args.caller(this); frmInventJournalTable = new MenuFunction(menuItemDisplayStr(InventJournalTableBOM), menuItemType::Display); frmInventJournalTable.run(args); Последний раз редактировалось Roman N. Krivov; 12.05.2010 в 11:19. |
|
12.05.2010, 11:19 | #8 |
Сам.AX
|
Цитата:
при вызове run все конечно будет инициализировано, но и форма журналов появится, а мне это не нужно. Можно конечно потом сразу ее закрыть, но мне не нравятся эти мельтешения на экране Последний раз редактировалось AGRESSOR; 12.05.2010 в 11:25. |
|
12.05.2010, 11:23 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: AGRESSOR (1). |
12.05.2010, 11:37 | #10 |
Сам.AX
|
Цитата:
Но вот форма таблицы журналов ведь будет в этом случае тупо жрать ресурсы зря... думаю нужно все таки попытаться открыть форму строк без запуска формы журналов. |
|
12.05.2010, 12:11 | #11 |
Участник
|
Цитата:
Расскажите что вы делаете и зачем вам строки журнала в отдельном окне? |
|
12.05.2010, 13:25 | #12 |
Сам.AX
|
Цитата:
Сообщение от S.Kuskov
Для этого нужно классу строк скормить класс журнала без использования формы журнала. Но учтите, чем больше вы будете программировать сейчас, тем больше вам прийдётся программировать при переходе на новые версии.
Расскажите что вы делаете и зачем вам строки журнала в отдельном окне? |
|
12.05.2010, 15:56 | #13 |
MCTS
|
Цитата:
Может лучше воспользоваться типичными "паттернами" стандартного функционала? На форме заказов по кнопке, расположенной в группе "Функции", открывается диалог, где пользователь вводит начальные данные (выбирает спецификацию и т.п.). В диалоге присутствует две кнопулины: "ОК" и "Отмена". Если пользователь передумал - нажал отмену, дилог закрылся, ничего не произошло. Если нажал "ОК", то в одной транзакции на основе данных из диалога создался складской журнал. На той же форме заказов по кнопке, расположенной в группе "Запросы", можно открыть форму складского журнала и посмотреть спецификацию.
__________________
Dynamics AX Experience Последний раз редактировалось CDR; 12.05.2010 в 15:58. |
|
12.05.2010, 17:00 | #14 |
Сам.AX
|
Давайте не будем сейчас разводить дискуссию на тему нужно ли это. Можете найти мой топик в ветке про функционал. Прочитаете и все поймете. Вкратце: "Решили, что так нужно"
К тому же я ведь спрашиваю КАК можно это сделать, а не НУЖНО ли это делать. Если даже моя разработка и не пригодится, то, в любом случае, это опыт... мало ли что бывает, не так ли? |
|
13.05.2010, 09:22 | #15 |
MCTS
|
Я вроде и писал о том, как это принято делать в системе, а не нужно ли это делать. Жаль, что вы меня не поняли.
__________________
Dynamics AX Experience |
|
13.05.2010, 10:17 | #16 |
Сам.AX
|
Думаю, что я Вас понял
Предположим через "Функции", я введу нужную номенклатуру. Только вот как я, не выходя из формы заказы на продажу, могу создать журнал спецификации, открыть в нем строки, и примаркировать этот журнал к созданной строке заказа... Может я конечно чего-то не понимаю... Предложение щелкнуть в области переходов по нужному пункту не принимается, нужно именно с формы заказов на продажу |
|
13.05.2010, 11:18 | #17 |
MCTS
|
Цитата:
Сообщение от AGRESSOR
Думаю, что я Вас понял
Предположим через "Функции", я введу нужную номенклатуру. Только вот как я, не выходя из формы заказы на продажу, могу создать журнал спецификации, открыть в нем строки, и примаркировать этот журнал к созданной строке заказа... Может я конечно чего-то не понимаю... Предложение щелкнуть в области переходов по нужному пункту не принимается, нужно именно с формы заказов на продажу По нажатию "ОК" в диалоге класс в рамках одной транзакции формирует заголовок журнала, создает его строки (если нужно, выполняет разноску журнала) и выполняет маркировку складских проводок. Если происходит ошибка, транзакция полностью откатывается, а пользователь получает сообщение об ошибке. При этом в системе не остается никакого мусора в виде полусозданных журналов. Для просмотра созданного журнала в "Запросах" создается кнопка для отображения созданного журнала спецификаций, нужно только предусмотреть связь строк заказа и журналов. Таким образом, для текущей строки заказа в любой момент можно открыть и посмотреть журнал.
__________________
Dynamics AX Experience |
|
|
|