|  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 
				__________________ "Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. | 
|  |