|
16.06.2016, 10:03 | #1 |
Участник
|
dialog в классе
Есть класс в котором прописан диалог
X++: protected Object dialog(DialogRunbase _dialog, boolean _forceOnClient) { DialogGroup dialogGroup; FormBuildDataSource formBuildDataSource; FormBuildGridControl formBuildGridControl; FormBuildStringControl formBuildStringControl; FormBuildRealControl formBuildRealControl; FormBuildCheckBoxControl formBuildCheckBoxControl; DialogGroup dlgGroup; DialogGroup dlgGrpVisibleSpecifications; DialogGroup dlgGrpVisibleNomenklatures; #define.GridControlWidth(800) #define.GridControlHeight(120) ; _dialog = Dialog::newFormnameRunbase(formstr(TranscriptMCDialog_ZTR), this); dialog = super(_dialog, true,true); dialog.caption(this.caption()); dialogGroup = dialog.addGroup(""); dialogGroup.columns(2); _transscriptFld = dialog.addFieldValueEx_ZTR(typeid(RMZId_ZTR),_rmzId); _transscriptFld.allowEdit(false); _itemIdFld = dialog.addFieldValueEx_ZTR(typeid(ItemId), _itemId, '@SYS72708', '@SYS72708',false, '_ItemIdFld'); _itemIdFld.valueMustExist_ZTR(DialogFieldValueMustExist_ZTR::Yes); _itemIdFld.allowEdit(false); _itemNameFld = dialog.addFieldValueEx_ZTR(typeid(ItemName),_itemName); _itemNameFld.allowEdit(false); _addNodeFld = dialog.addFieldValueEx_ZTR(typeid(NoYes), _isAddNode, "Создать новую строку", "Создать новую строку",false,'_addNodeFld'); _numFld = dialog.addFieldValueEx_ZTR(typeid(RmzBomItemNum),_num,@"Добавить узел в строку", @"Добавить узел в строку",false,'_NumFld'); _numFld.valueMustExist_ZTR(DialogFieldValueMustExist_ZTR::Yes); _numFld.mandatory_ZTR(1); _numFld.displayLength(30); _numFld.enabled(!_isAddNode); _addNodeFld1 = dialog.addFieldValueEx_ZTR(typeid(NoYes), _isAddNode, "Новый объект", "Новый объект",false,'_addNodeFld1'); dlgGrpVisibleSpecifications = dialog.addGroup("@SYS3076"); dlgGrpVisibleSpecifications.frameOptionButton(FormFrameOptionButton::Hide); dlgGrpVisibleSpecifications.optionValue(_bomVisible); dlgGrpVisibleSpecifications.hideIfEmpty(false); formBuildDataSource = dialog.form().dataSource(3); formBuildDataSource.autoQuery(true); formBuildDataSource.autoSearch(false); formBuildDataSource.table(tablenum(TmpBOMWrkTreeBom_ZTR)); formBuildGridControl = dialog.curFormGroup().addControl(FormControlType::Grid, "ItemsGrid"); formBuildGridControl.dataSource(formBuildDataSource.name()); #if.GridControlWidth formBuildGridControl.width(#GridControlWidth, -1); #endif #if.GridControlHeight formBuildGridControl.height(#GridControlHeight, -1); #endif [B] formBuildDataSource.counterField(fieldnum(TmpBOMWrkTreeBom_ZTR, DataType)); formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, DataType)); formBuildRealControl.autoDeclaration(noyes::Yes); // formBuildRealControl.visible(false);[/B] formBuildDataSource.counterField(fieldnum(TmpBOMWrkTreeBom_ZTR, Num)); formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, Num)); formBuildRealControl.name("Num"); formBuildRealControl.width(70); formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, ItemId)); formBuildStringControl.lookupButton(); formBuildStringControl.width(150); formBuildStringControl.name("ItemId"); formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, ItemId)); formBuildStringControl.dataField(0); formBuildStringControl.dataMethod("ItemName"); formBuildStringControl.width(200); formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, QtyCoeff)); formBuildStringControl.name("QtyCoeff"); formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, WrkCtrIssueId)); formBuildStringControl.name("WrkCtrGroupId2"); formBuildStringControl.width(150); formBuildStringControl.label("Цех выпуска"); formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, bomSchemeCode)); formBuildStringControl.name("SchemeCode"); dlgGrpVisibleSpecifications = dialog.addGroup("@ZTR5737"); dlgGrpVisibleSpecifications.frameOptionButton(FormFrameOptionButton::Hide); dlgGrpVisibleSpecifications.optionValue(_itemVisible); dlgGrpVisibleSpecifications.hideIfEmpty(false); formBuildDataSource = dialog.form().dataSource(2); formBuildDataSource.autoQuery(true); formBuildDataSource.autoSearch(false); formBuildDataSource.insertIfEmpty(false); formBuildDataSource.table(tablenum(TmpBOMWrkTreeNotUsedItems_ZTR)); formBuildGridControl = dialog.curFormGroup().addControl(FormControlType::Grid, "NotUsedItemsGrid"); formBuildGridControl.dataSource(formBuildDataSource.name()); #if.GridControlWidth formBuildGridControl.width(#GridControlWidth, -1); #endif #if.GridControlHeight formBuildGridControl.height(#GridControlHeight, -1); #endif formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeNotUsedItems_ZTR, Num)); formBuildRealControl.name("NotUsedItemsNum"); formBuildRealControl.lookupButton(FormLookupButton::Always); formBuildRealControl.width(100); formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeNotUsedItems_ZTR, ItemId)); formBuildStringControl.width(150); formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeNotUsedItems_ZTR, ItemId)); formBuildStringControl.width(200); formBuildStringControl.dataField(0); formBuildStringControl.dataMethod("ItemName"); return dialog; } Можно ли при изменении значения в addNodeFld1 менять автоматически значение в поле грида - DataType. Все DataSource укзаны в самой форме, которую вызывает этот класс. |
|
16.06.2016, 11:38 | #2 |
Участник
|
Добрый день!
В modified написать, что-то вроде: X++: FormStringControl stringControl; //Если DataType это StringControl ; stringControl = dialog.formRun().design().controlName(formControlStr(TranscriptMCDialog_ZTR,DataType)); stringControl.text('newValue'); |
|
16.06.2016, 12:52 | #3 |
Участник
|
Ругается на функцию formControlStr.
У меня Аксапта 2009, может тогда ее еще не было? Поле у меня ComboBox но с этим я все поменяла. Последний раз редактировалось Emka; 16.06.2016 в 12:56. |
|
16.06.2016, 13:57 | #4 |
Мрачный тип
|
Дичь-то какая.
Не проще ли все эти игрища прописать на самой форме, которую используете в качестве диалоговой ?
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
16.06.2016, 14:08 | #5 |
Участник
|
|
|
16.06.2016, 15:17 | #6 |
Участник
|
Получилось вот так
X++: public boolean _addNodeFld1_modified() { boolean ret; FormStringControl formStringControl; FormComboBoxControl ComboBoxControl; ; formStringControl = dialog.formRun().controlCallingMethod(); if (formStringControl) ret = formStringControl.modified(); else ret = true; this.dialogSelectCtrl(); _isAddNode = _addNodeFld1.value(); // если установлен – неактивно поле «Добавить узел в строку»; if(_isAddNode) { ComboBoxControl = dialog.formRun().design().controlName('DataType'); ComboBoxControl.autoDeclaration(noyes::Yes); ComboBoxControl.visible(false); // ComboBoxControl.text(RMZ_BomTree_DataType_ZTR::BudgetGroup); } else { ComboBoxControl = dialog.formRun().design().controlName('DataType'); ComboBoxControl.text('0'); ComboBoxControl.visible(true); // ComboBoxControl.text(RMZ_BomTree_DataType_ZTR::ItemId); } return ret; } |
|
16.06.2016, 15:29 | #7 |
Участник
|
После модификации _addNodeFld1, при смене позиционирования на DataType, значение новое появляется?
Если да, то поможет: Код: ComboBoxControl.redraw(); Последний раз редактировалось Товарищ ♂uatr; 16.06.2016 в 15:36. |
|
16.06.2016, 16:28 | #8 |
Участник
|
Цитата:
на эту команду ругается. В выпадающем окне такой команды нет. |
|
16.06.2016, 17:41 | #9 |
Участник
|
Только что заметил, что DataType это comboBox.
Значение попробуйте изменить через Код: ComboBoxControl.selection(...); Последний раз редактировалось Товарищ ♂uatr; 16.06.2016 в 17:43. |
|
|
За это сообщение автора поблагодарили: Emka (1). |
17.06.2016, 10:15 | #10 |
Участник
|
Один ОЧЕНЬ мудрый человек подсказал решение!
X++: public boolean _addNodeFld1_modified() { boolean ret; FormStringControl formStringControl; FormComboBoxControl ComboBoxControl; formDataSource formDataSource; TmpBOMWrkTreeBom_ZTR TmpBOMWrkTreeBom_ZTR; ; formStringControl = dialog.formRun().controlCallingMethod(); if (formStringControl) ret = formStringControl.modified(); else ret = true; this.dialogSelectCtrl(); _isAddNode = _addNodeFld1.value(); formDataSource = dialog.formRun().dataSource(3); if(_isAddNode) { ComboBoxControl = dialog.formRun().design().controlName('DataType'); formDataSource.object(fieldnum(TmpBOMWrkTreeBom_ZTR, DataType)).setValue(RMZ_BomTree_DataType_ZTR::BudgetGroup); } else { ComboBoxControl = dialog.formRun().design().controlName('DataType'); formDataSource.object(fieldnum(TmpBOMWrkTreeBom_ZTR, DataType)).setValue(RMZ_BomTree_DataType_ZTR::ItemId); } formDataSource.refresh(); return ret; } Последний раз редактировалось Emka; 17.06.2016 в 10:17. |
|
17.06.2016, 10:41 | #11 |
Участник
|
Ничего личного, но мудрый человек в теме TasmanianDevil, который предложил не заниматься программизмом, а либо модифицировать форму TranscriptMCDialog_ZTR, либо сделать отдельную форму на её основе.
|
|
17.06.2016, 11:46 | #12 |
Участник
|
Каждый волен думать по своему
|
|
18.06.2016, 19:22 | #13 |
Участник
|
Очень хорошее замечание. Вот только этих "каждых" очень много. У Вас DAX2009, только навскидку можно посмотреть реализацию SalesFormLetter/PurchFormLetter, ProdUpd*, PordMuti* и другие примеры показывают, что при сложных формах в наследниках RunBase нужно не пытаться программно модифицировать форму, а использовать декларируемую в узле Forms. И уже в ней реализовывать реакцию на события (а саму обработку еще лучше делать в специализированных классах, например, можете посмотреть классы InventDimCtrl*).
Так что тут должно работать не только Каждый волен думать по своему, но и учет того, что Вы не до пенсии будете работать в данной конторе. Подумайте о тех, кто придет после Вас и кому придется дальше развивать систему. |
|
Теги |
dialog, grid |
|
|