|  18.07.2008, 16:27 | #1 | 
| Модератор |  метод Modified к stringControl 
			
			в методе RUN класса я генерируется форма с гридом. в родителе формы я положил источник , связанный с временной таблицей, которая запоняется в RUN класса. Вопрос: Как к stringControl с именем "NameCtrl" добавить метод modified и по значению поля "NameCtrl" (выпадающий список, выбор пользователя) присвоить значение полю comboBoxControl с именем "TitleCtrl" ? вот код X++: void run() { Form form = new Form(formStr(InventJournalPrint_RU)); List reportList = List::create(inventJournalReportPackable.packReportList()); ListIterator it = new ListIterator(reportList); DictEnum dictEnum = new DictEnum(enumNum(InventJournalReportType_RU)); FormBuildDataSource formBuildDataSource; FormDataSource formDataSource; InventJournalReport_RU report; FormBuildTabControl tabControl; FormBuildTabPageControl pageControl; FormBuildGridControl gridControl; FormBuildGroupControl groupControl; FormBuildStringControl stringControl; FormBuildComboBoxControl comboBoxControl; FormBuildRealControl realControl; Args args; FormRun formRun; QueryBuildDataSource qbds; Str dsName; #define.DataGroupName("NamePosition"); if (reportList.empty()) return; control2Class = new Map(Types::Integer, Types::Class); groupControl = form.addControl(FormControlType::Group, ""); groupControl.widthMode(1); groupControl.heightMode(1); groupControl.frameType(1); tabControl = groupControl.addControl(FormControlType::Tab, ""); tabControl.widthMode(1); tabControl.heightMode(1); while (it.more()) { report = it.value(); if (! report) { it.next(); continue; } dsName = dictEnum.index2Symbol(report.reportType()); formBuildDataSource = form.addDataSource(dsName); formBuildDataSource.table(tableNum(OfficialsTrans_RU)); pageControl = tabControl.addControl(FormControlType::TabPage, ""); pageControl.caption(report.description()); pageControl.dataSource(dsName); pageControl.widthMode(1); pageControl.heightMode(1); gridControl = pageControl.addControl(FormControlType::Grid, ""); gridControl.widthMode(1); gridControl.heightMode(1); gridControl.dataSource(dsName); realControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, LineNum)); realControl.name("LineNum"); comboBoxControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Position)); comboBoxControl.name("PositionCtrl"); control2Class.insert(comboBoxControl.id(), report); stringControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Name)); stringControl.name("NameCtrl"); stringControl.lookupButton(2); control2Class.insert(stringControl.id(), report); comboBoxControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Title)); comboBoxControl.name("TitleCtrl"); control2Class.insert(comboBoxControl.id(), report); it.next(); } args = new Args(); args.object(form); args.caller(this); formRun = classFactory.formRunClass(args); form = formRun.form(); formRun.init(); it.begin(); while (it.more()) { report = it.value(); if (! report) { it.next(); continue; } dsName = dictEnum.index2Symbol(report.reportType()); formDataSource = formRun.dataSource(dsName); qbds = formDataSource.query().dataSourceName(dsName); qbds.addRange(fieldNum(OfficialsTrans_RU, OffsessionId)).value(report.getOffSessionId()); qbds.addRange(fieldNum(OfficialsTrans_RU, reportType)).value(sysQuery::value(InventJournalReport_RU::inventJournalReportType2OffReportType(report.reportType()))); qbds.addSortField(fieldNum(OfficialsTrans_RU, LineNum)); offSessionId = report.getOffSessionId(); it.next(); } formRun.run(); formRun.wait(); } | 
|  | 
|  18.07.2008, 16:36 | #2 | 
| Участник | 
			
			Суть вопроса доконца не понял, но думаю это поможет Вопрос. как отследить modified на диалоге, который создал динамически? | 
|  | 
|  18.07.2008, 16:38 | #3 | 
| Участник | 
			
			Вызовите следующие методы в run своего класса X++: this.controlMethodOverload(true);
this.controlMethodOverloadObject(this); | 
|  | 
|  18.07.2008, 17:37 | #4 | 
| Модератор | 
			
			Lucky13 код вставляем сюда? Цитата: args = new Args(); args.object(form); args.caller(this); formRun = classFactory.formRunClass(args); form = formRun.form(); formRun.controlMethodOverload(true); formRun.controlMethodOverloadObject(this); formRun.init(); но что то не понимаю как полчить значение из NameCtrl и через select присвоить нове в TitleCtrl | 
|  | 
|  18.07.2008, 17:52 | #5 | 
| Модератор | 
			
			в классе InventJournalPrintForm_RU в методе run прописал  formRun.controlMethodOverload(true); formRun.controlMethodOverloadObject(this); создал метод public void NameCtrl_modified в нем нужно найти по таблице OfficialsTrans_RU значение Title имея name и offSessionId чет я не соображу как будет выглядеть NameCtrl_modified Как получить значение с контрола NameCtrl ? | 
|  | 
|  18.07.2008, 18:25 | #6 | 
| MCTS | 
			
			посмотрите \Forms\tutorial_Form_AddControl
		 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  21.07.2008, 16:24 | #7 | 
| Модератор | 
			
			Как дата сорсу в динамически созданной форме в поле присвоить значение? formRun.dataSource(identifierStr(OfficialsTrans_RU)).object(fieldNum(OfficialsTrans_RU, Title)) что нибудь типа такого есть datasource.object(fieldnum(Table, Field)).value();? Последний раз редактировалось Poleax; 21.07.2008 в 16:30. | 
|  | 
|  21.07.2008, 16:29 | #8 | 
| Участник | 
			
			Может так? X++: formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().(fieldNum(OfficialsTrans_RU, Title)) = "My Title"; formRun.dataSource(identifierStr(OfficialsTrans_RU)).refresh(); | 
|  | 
|  21.07.2008, 17:00 | #9 | 
| Модератор | Цитата: 
		
			formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().(fieldNum(OfficialsTrans_RU, Title)) = "My Title";
		
	 Axapta 3. Может какой другой способ присвоить значение полю из DataSource ? | 
|  | 
|  21.07.2008, 17:06 | #10 | 
| Участник | 
			
			Перестаньте маяться дурью и просто нарисуйте форму в AOT. Давно бы уже решили задачу. | 
|  | 
|  21.07.2008, 17:10 | #11 | 
| Модератор | 
			
			Сергей форму рисовать не будет.  Я просто допиливаю класс InventJournalPrintForm_RU осталось то просто присвоить значение в таблицу из DataSource. если знаешь помоги.. а то что с формой делать и так понятно. | 
|  | 
|  21.07.2008, 17:26 | #12 | 
| Участник | 
			
			Сама постановка неправильна. Сам датасорс управляет записью таблицы. Записывать в таблицу в обход датасорса - моветон и четкая установка нарваться на deadlock. Чтобы записать "значение в таблицу" нужно создать переменная типа таблица, найти запись по recId и обновить эту запись. { myTable myTable; myTable = MyTable::findrecid(myDataSource.cursor().recid, true); myTable.myValue = myValue; myTable.update(); } Переформулируйте задачу. Убедитесь, что у вас нет проблем с пониманием. | 
|  | 
|  21.07.2008, 17:43 | #13 | 
| Модератор | 
			
			так то оно так только таблички OfficialsTrans_RU нет метода findrecid и formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId ни чего не возвращает .. пусто. данная код вызывает из метода modified одного из поля на гриде. На гриде создается строка и при изменении одно поля друго должно заполняться автоматически. С табличкой хорошо работать когда там есть данные а тут еще строка не сохранилась из грида.. Последний раз редактировалось Poleax; 21.07.2008 в 17:48. | 
|  | 
|  21.07.2008, 17:54 | #14 | 
| Участник | Цитата: { OfficialsTrans_RU OfficialsTrans_RU; select forupdate OfficialsTrans_RU where OfficialsTrans_RU.recId == myDataSource.cursor().recid; OfficialsTrans_RU.myValue = myValue; OfficialsTrans_RU.update(); } Насчет formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId А с чего вы зяли, что в вашей динамической форме есть датасорс, который НАЗВАЕТСЯ также как и таблица? Вы точно уверены, что указывали название ДАТАСОРСА при создании? Делайте formRun.dataSource(N).cursor().RecId, где N - номер датасорса в форме. Или четко задавайте название датасорса при создании вашей динамической формы. Еще раз - перестаньте заниматься фигней (динамическим программированием), начните наконец решать задачу (нарисуйте форму с методами, просто вызовите ее в вашем методе) | 
|  | 
|  21.07.2008, 18:10 | #15 | 
| Модератор | 
			
			mazzy респект за наставления и поучения. Фигней постараюсь больше не заниматься. Все нормально, вопрос закрыт. З.Ы. интересно было выпендрится динамическим программированием... попытка удалась. | 
|  | 
|  21.07.2008, 18:39 | #16 | 
| Участник | 
			
			Я все-таки повторю | 
|  |