21.03.2008, 17:14 | #21 |
Moderator
|
Почему нельзя? Указываете у енума, который будет отображаться на форме, стиль RadioButton, и все дела.
__________________
Андрей. |
|
01.04.2008, 11:25 | #22 |
Участник
|
Вопрос1:
Каким образом на динамически генерируемом диалоге отобразить комбобокс, который наполняется значениями перед этим? Формализируем задачу, в зависимости от некоторых условий формируется список строк(это к тому, что поле типа энам здесь не катит), каким образом динамически создать диалог с комбобоксом, который бы использовал эти строки? Вопрос 2: Каким образом можно использовать временную таблицу в качестве лукапа в поле диалога и можно ли? У меня не смотря на заполнение её значениями в том же методе, где идёт вызов диалога в лукапе поля этого диалога - пустая таблица. Это стандартное поведение? Если нет, то где я ошибаюсь. Вот код: X++: DialogGroup dlgG; DialogField dlgF; ResultHolder resHolder; ; resHolder.ResultID=0; resHolder.X=0.5; resHolder.Y=1; resHolder.insert(); resHolder.ResultID=1; resHolder.X=22; resHolder.Y=333.4; resHolder.insert(); dlg=new Dialog('Kreved'); dlgG=dlg.addGroup("MyField"); dlgF=dlg.addField(typeid(ResultID),'ResultID'); dlgG.columns(3); dlg.windowType(FormWindowType::PopUp); dlg.form().design().topMode(3); dlg.form().design().leftMode(4); dlg.run();
__________________
Axapta has seduced me deadly! |
|
01.04.2008, 12:07 | #23 |
Участник
|
Вопрос 0:
А почему бы Вам не сделать форму в АОТ, и ее использовать в качестве диалога? |
|
01.04.2008, 12:09 | #24 |
Участник
|
Ну вот бзик у меня такой) Стал разбираться с первым вопросом:
X++: Dialog dlg = new Dialog(); FormComboBoxControl myComb; ; dlg.windowType(FormWindowType::PopUp); dlg.form().design().topMode(-1); dlg.form().design().leftMode(4); MyComb=dlg.form().design().addControl(FormControlType::ComboBox,"ABCDEEEMyCo"); MyComb.add("SOME"); //выдаёт ошибку dlg.run()
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 01.04.2008 в 12:13. |
|
01.04.2008, 13:19 | #25 |
Moderator
|
FormBuildComboboxControl должен помочь. Посмотрите по перекрестным ссылкам. Например, метод \Classes\SysCodeUpgrade\button_compare.
__________________
Андрей. |
|
|
За это сообщение автора поблагодарили: HorrR (0). |
01.04.2008, 14:11 | #26 |
Участник
|
Помогло другое: собсна использование items, item и text вместо add В любом случае спасибо)
__________________
Axapta has seduced me deadly! |
|
01.04.2008, 14:19 | #27 |
Участник
|
Цитата:
X++: static void Test_Dialog(Args _args) { Dialog dialog; FormComboBoxControl fcbc; DialogField dfTest; boolean isOk; FormBuildComboBoxControl buildCombo; ; dialog = new Dialog(); // Вариант через дизайн формы ДО инициализации формы диалога buildCombo = dialog.formBuildDesign().addControl(FormControlType::COMBOBOX, ''); buildCombo.items(3); buildCombo.item(1); buildCombo.text("Один-Один"); buildCombo.item(2); buildCombo.text("Два-Два"); buildCombo.item(3); buildCombo.text("Три-Три"); // Вариант с добавление объекта и его модификацией ПОСЛЕ инициализации формы диалога dfTest = dialog.addField(types::ENUM); // Инициализируем форму диалога dialog.doInit(); // Модифицируем содержимое fcbc = dfTest.fieldControl(); fcbc.add("Один"); fcbc.add("Два"); fcbc.add("Три"); isOk = dialog.run(); } |
|
|
За это сообщение автора поблагодарили: Jorj (1), HorrR (1). |
01.04.2008, 15:01 | #28 |
Участник
|
Оу, спасибо, буду знать в чём дело!
__________________
Axapta has seduced me deadly! |
|
01.04.2008, 18:13 | #29 |
Участник
|
Ну а как всё-таки насчёт второго вопроса? Напомню:
Вопрос 2: Каким образом можно использовать временную таблицу в качестве лукапа в поле диалога и можно ли? У меня не смотря на заполнение её значениями в том же методе, где идёт вызов диалога в лукапе поля этого диалога - пустая таблица. Это стандартное поведение? Если нет, то где я ошибаюсь. Вот код: X++: DialogGroup dlgG; DialogField dlgF; ResultHolder resHolder; ; resHolder.ResultID=0; resHolder.X=0.5; resHolder.Y=1; resHolder.insert(); resHolder.ResultID=1; resHolder.X=22; resHolder.Y=333.4; resHolder.insert(); dlg=new Dialog('Kreved'); dlgG=dlg.addGroup("MyField"); dlgF=dlg.addField(typeid(ResultID),'ResultID'); dlgG.columns(3); dlg.windowType(FormWindowType::PopUp); dlg.form().design().topMode(3); dlg.form().design().leftMode(4); dlg.run();
__________________
Axapta has seduced me deadly! |
|
01.04.2008, 18:31 | #30 |
Участник
|
А как реализован лукап? Ведь надо указать системе, что та табличная переменная, в которую Вы заносите данные, и та, данные которой отображаются в лукап форме, ссылаются на один и тот же файл на жестком диске.
Делается это с помощью метода setTmpData() табличной переменной. |
|
01.04.2008, 18:43 | #31 |
Участник
|
Так дело в том, что у меня только одна табличная переменная, лукап я не перегружаю, лукап системный по связи определённой на EDT на который базируется поле ResultID. В таком случае мне прийдётся перегружать лукап ещё на диалоге?
__________________
Axapta has seduced me deadly! |
|
01.04.2008, 18:47 | #32 |
Участник
|
Ну, а Вы подумайте, из какого файла система должна тянуть данные, которые вы во временную таблицу вставили в коде класса, вызывающего диалог? Она ж ведь о вашем классе даже не знает. А соответстенно, ничего не получаете в лукапе. Все просто.
Да, нужно перегружать лукап. Вот поэтому я и написал выше, что проще создать форму в АОТ. Хотя и динамически возможно все это сделать, конечно, без проблем. |
|
01.04.2008, 18:53 | #33 |
Участник
|
Ну дык, я собсно с аксаптой вместе 2 месяца, так что тупизмы и ламоразмы мну позволительны. Но Вам отдельное спасибо, что не даете пропасть) З.Ы Собсна, действительно проще юзать форму ибо геморное дело, хотя можно конечно же заюзать вашу модификацию диалога)
__________________
Axapta has seduced me deadly! |
|
22.05.2008, 17:57 | #34 |
:o)
|
Не отображаются календари
Всем привет!
Добавляю в старый отчёт диапозон дат: ClassDeclaration: Код: class InventStdFormM17_RU extends RunBaseReport { ItemId itemId; boolean isItemIdFixed; InventLocationId inventLocationId; TransDate dateBegin; TransDate dateEnd; int totalLoops; InventTrans InventTrans; DialogField dialogItemId; DialogField dialogInventLocationId; DialogField dialogDateBegin; DialogField dialogDateEnd; #define.currentVersion(2) #localmacro.currentList itemId, inventLocationId, dateBegin, dateEnd #endmacro } Код: public Object dialog(DialogRunbase _dialog = null, boolean _forceOnClient = false) { DialogRunBase dialog = super(_dialog, _forceOnClient); ; dialog.addGroup("@SYS28952"); dialogItemId = dialog.addFieldValue(typeid(ItemId), itemId); if (isItemIdFixed) { dialogItemId.enabled(false); } dialogInventLocationId = dialog.addFieldValue(typeid(InventLocationId), inventLocationId); dialogDateBegin = dialog.addFieldValue(typeid(TransDate), dateBegin, "С"); dialogDateEnd = dialog.addFieldValue(typeid(TransDate), dateEnd, "ПО"); return dialog; } Код: public boolean validate(Object _calledFrom = null) { return super(_calledFrom) && (itemId ? true : checkfailed("@DIS8931")) && InventTable::checkExist(itemId) && InventLocation::checkExist(inventLocationId); } Ещё дополнительный вопрос по currentVersion: если раньше было всё тоже самое, но без диапозона дат, нужно ли менять 2 на 3 (раньше было 2) А вообще хотелось бы по подробнее на эту тему и про pack/unpack тоже... Что это вообще такое, зачем нужно.... может подкинете ссылочку..? |
|
23.05.2008, 07:51 | #35 |
Участник
|
jeky, про pack/unpack методы можете почитать в Best Practices, введя там в поиске "pack-unpack pattern".
Про CurrentVersion: да, нужно сменить версию при добавлении новых полей в список сохраняемых параметров - состав сохраняемого контейнера ведь будет другой и вызовет ошибку в методе unpack. Кроме того кода, который вы привели еще необходимо добавить пару строк для присваивания переменным dateBegin/End значений, выбранных пользователем в диалоге - в метод getFromDialog() вписать следующее: X++: dateBegin = dialogDateBegin.value(); dateEnd = dialogDateEnd.value(); |
|
23.05.2008, 09:32 | #36 |
Участник
|
Цитата:
нужно ли что-нибудь делать с новыми переменными в valdate?:
|
|
23.05.2008, 09:54 | #37 |
:o)
|
Цитата:
dateBegin = dialogDateBegin.value();
dateEnd = dialogDateEnd.value(); Цитата:
jeky, про pack/unpack методы можете почитать в Best Practices, введя там в поиске "pack-unpack pattern".
Цитата:
например можно проверить что dateBegin <= dateEnd, потому что начальная дата большая конечной не имеет смысла.
========= Но! вопрос-то остался, почему календарики при первом вызове пустые...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
23.05.2008, 10:06 | #38 |
Участник
|
Обратите внимание на второй параметр метода addFieldValue, переменные dateBegin и dateEnd какие значения имеют?:
dialogInventLocationId = dialog.addFieldValue(typeid(InventLocationId), inventLocationId); dialogDateBegin = dialog.addFieldValue(typeid(TransDate), dateBegin, "С"); dialogDateEnd = dialog.addFieldValue(typeid(TransDate), dateEnd, "ПО"); |
|
23.05.2008, 11:24 | #39 |
:o)
|
Цитата:
Обратите внимание на второй параметр метода addFieldValue, переменные dateBegin и dateEnd какие значения имеют?:
Я уже на первое время просто задаю сегодня и месяц назад... Код: dialogDateBegin = dialog.addFieldValue(typeid(TransDate), PrevMth(Today()), "@DIS3802", "@DIS3804"); dialogDateEnd = dialog.addFieldValue(typeid(TransDate), Today(), "@DIS3803, @DIS3805"); Но, это же не означает, что календарь тоже должен быть пустым... Например, я открываю любого наследника... там первоначальный диапозон не задан и тем не менее календари при первом выпадении заполнены.... Ну, даже если просто пойти по кнопке "Выбор" в каком-нибудь отчёте... там, допустим напротив поля с типом дат, ничего нет... а календарик нажимаем... и что видим - выпадает заполненный календарик... Может я чего-то не так объясняю - сорри... ну, то, что чего-то не знаю - это понятно...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
23.05.2008, 11:37 | #40 |
:o)
|
ОткопалосО...
Вот оно... Код: runObject.getLast(); Завкомментировала в main... + вернула код: Код: dialogDateBegin = dialog.addFieldValue(typeid(TransDate), dateBegin, "@DIS3802", "@DIS3804"); dialogDateEnd = dialog.addFieldValue(typeid(TransDate), dateEnd, "@DIS3803, @DIS3805"); Причём, после одного такого запуска, если раскомментировать runObject.getLast(); то опять же выпадающий календарь теперь уже заполнен... ====== Но... остаётся вопрос всё равно... как быть при первом запуске... чисто уже интересно при наличии runObject.getLast(); , ведь пользователи при такой конструкции в первый раз всё равно получат пустой календарь, если не заполнены dateBegin и dateEnd при вызове addFieldValue
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|