14.10.2008, 11:40 | #1 |
Участник
|
Опять про lookup
Здравствуйте, как передать запись выбранную в лукапе в вызывающую форму и в каком методе это делать. Или наверно правильней, как получить курсор выбраной записи из выпадающего списка в вызывающей форме.
Спасибо заранее. |
|
14.10.2008, 11:58 | #2 |
Участник
|
Не очень понял вопрос и зачем это нужно. Можно предположить, что это требуется когда лукап идёт по таблице, в которой в качестве ключа используется не одно поле, а комбинация полей. В этом случае, в переопределенном методе lookup, сформировав свой лукап вызывать его примерно так:
X++: sysTableLookup.parmQuery(query); lookupForm = sysTableLookup.formRun(); _lookupCtrl.performFormLookup(lookupForm); if (sysTableLookup.waitAndSearch(lookupForm}) { table1 = lookupForm.dataSource(tableNum(Table1)).cursor(); myVar = table1.field1; ... } |
|
|
За это сообщение автора поблагодарили: kashperuk (5). |
14.10.2008, 12:24 | #3 |
Участник
|
Я использую собственную лукап форму.
На пример на вызывающей форме есть 3 поля на 1 перекрыт метод lookup, так вот при выборке из выпадающего списка на 1-м поле, во 2 и 3 поля должны заносится значения полей строки записи выбраной в 1-ом поле. Например в лукапе выбираем строку "1,а,б" так на форме в 1-поле попадет [1], и надо чтоб во 2-е и 3-е записались соответственно значения "а" и "б" |
|
14.10.2008, 12:34 | #4 |
Участник
|
Вопрос был поставлен следующий: а и б напрямую зависят от 1? Или они тоже являются частью ключа? (используются для уникального определения сущности)
|
|
14.10.2008, 12:40 | #5 |
Участник
|
а и б напрямую зависят от 1
|
|
14.10.2008, 12:43 | #6 |
Участник
|
а и б и 1 это все значения одной записи в таблице
|
|
14.10.2008, 12:45 | #7 |
Участник
|
Так какое из утверждений ближе к истине?
Цитата:
Я использую собственную лукап форму
Цитата:
на 1 перекрыт метод lookup
|
|
14.10.2008, 13:01 | #8 |
Участник
|
По значению 1 можно однозначно определить запись в таблице, вот код метода перекрытого метода lookup
X++: RContractTable rContractTable; Args args; FormRun formRun; FormRun ctrl_formRun; FormDataSource ctrl_ds; ; rContractTable = element.args().record(); args = new Args(); args.name(formstr(InvoicePaymLookup)); // InvoicePaymLookup моя лукап форма args.caller(this); ctrl_formRun = this.owner(); ctrl_ds = ctrl_formRun.dataSource(); if (ctrl_ds) { args.record(rContractTable); } formRun = classfactory.formRunClass(args); formRun.init(); this.performFormLookup(formRun); |
|
14.10.2008, 13:18 | #9 |
Участник
|
Если можно точно определить по значению 1 то, на мой взгляд, нужно перенести код определения значений a и b в метод modified. Значение 1 там уже будет, нужно только найти запись и заполнить нужные поля.
|
|
14.10.2008, 13:32 | #10 |
Участник
|
|
|
14.10.2008, 13:34 | #11 |
Участник
|
Нет, не лишние.
Не забывай, что пользователь может не только выбрать значение из лукапа, но и ввести вручную, скопировать из буфера и т.п. |
|
14.10.2008, 13:41 | #12 |
Участник
|
Цитата:
Можно еще вопрос? В методе modified к текущему элементу я обращаюсь this, а как другим элементам присвоить значение. что то типа X++: element.design()...[ ?] = "Результат select'a" |
|
14.10.2008, 14:17 | #13 |
Участник
|
Достаточно просто. В самом элементе, в который нужно записывать значение, устанавливаем флаг AutoDeclaration в значение Yes. Из кода просто пишем:
ИмяЭлемента.text(тут то что нужно). Если значение не текстовое, то вместо text берем соответствующий метод (например, value, selection). В принципе, вместо объявления AutoDeclaration можно обращаться к элементу примерно в таком виде: Цитата:
element.design().control(control::ИмяЭлемента)
|
|
|
За это сообщение автора поблагодарили: kalex_a (1). |
14.10.2008, 14:28 | #14 |
Участник
|
и куда присваивать значение?
X++: element.design().control(Control::DocumentDate).(DateValue ) = "Значение"; |
|
14.10.2008, 14:39 | #15 |
Участник
|
Это же метод, а не свойство, ему ничего не присвоишь. В него можно только передать параметр или получить возвращаемое значение, то есть нужно не
X++: element.design().control(Control::DocumentDate).(DateValue ) = 01\01\2008; X++: element.design().control(Control::DocumentDate).DateValue(01\01\2008) ; X++: DocumentDate.DateValue(01\01\2008); |
|
14.10.2008, 14:55 | #16 |
Участник
|
А это у вас отдельные unbound controls? Или все же данные из таблицы? (которые в modified собираетесь менять)
|
|
14.10.2008, 15:00 | #17 |
Участник
|
так не работаетelement.design().control(Control:ocumentDate).DateValue(01\01\2008) ; оказывается вот так надо:
X++: FormDateControl CtrlDocumentDate;
;
CtrlDocumentDate = element.design().control(Control::DocumentDate);
CtrlDocumentDate.dateValue("Значение"); |
|
14.10.2008, 15:02 | #18 |
Участник
|
|
|
14.10.2008, 15:12 | #19 |
Участник
|
Все разобрался, спасибо Raven Melancholic
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
gatesasbait: How to define a custom lookup form for an extended datatype | 0 | |||
Опять LookUp | 11 | |||
Создание Lookup формы | 9 | |||
Нагло глючит lookup | 1 | |||
Динамические Lookup формы. | 0 |
|