|
14.09.2011, 13:08 | #1 |
Участник
|
Работа с лукапом
Всем добрый день!
Подскажите, пожалуйста, как можно решить такую задачу. Есть таблица и форма лицевых счетов. В таблице есть поле - код квартиры (с указанием соответствующего расширенного типа данных). Но на форме нужно отобразить поле Номер квартиры, которое будет иметь выпадающий список из 2-ух полей таблицы квартир (код и номер квартиры). При выборе записи в StrinEdite должен появиться номер квартиры, а в самой таблице лицевых счетов сохранить в поле код квартиры - соответствующий код. Лукап у меня отображается и даже заносится код квартиры и в StrinEdite отображается номер, но не только для текущей записи, а сразу для всех на этой форме . Может я не так все делаю и есть какой-то более простой способ такого отображения поля на форме. |
|
14.09.2011, 13:38 | #2 |
Участник
|
На форме у контрола перекрываете метод lookup и что-то вроде
X++: public void lookup() { Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildRange queryBuildRange; SysTableLookup sysTableLookup; ; sysTableLookup = SysTableLookup::newParameters(tablenum( ), this); //Add the fields to be shown in the lookup form sysTableLookup.addLookupfield(fieldnum( , )); sysTableLookup.addLookupfield(fieldnum( , )); //create the query datasource queryBuildDataSource = query.addDataSource(tablenum( )); // add range queryBuildRange = queryBuildDataSource.addRange(fieldnum( , )); queryBuildRange.value( ); //add the query to the lookup form sysTableLookup.parmQuery(query); // Perform lookup sysTableLookup.performFormLookup(); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 14.09.2011 в 13:44. |
|
14.09.2011, 13:51 | #3 |
Участник
|
Как сделать лукап я знаю, проблема в том, что при выборе с лукапа в этом поле отображать не код квартиры а номер.
|
|
14.09.2011, 13:39 | #4 |
Участник
|
|
|
14.09.2011, 14:00 | #5 |
Участник
|
по аналогии с наименованием номенклатуры :
в методах датасорса делаем метод : X++: edit ItemName editItemId(boolean _set, _data, ItemName _val) { ItemName _ret = _val; ; if (_set) _data.ItemId = _val; else _ret = _data.ItemName(); return _ret; } Ну или просто мышкой перетяните его на форму А лукап тогда какой хотите. Лукап конечно придется перекрывать Да, и не забудьте на Вашей таблице сделать дисплей метод для X++: _data.ItemName();
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 14.09.2011 в 14:15. |
|
14.09.2011, 14:36 | #6 |
Участник
|
Цитата:
Сообщение от Pustik
по аналогии с наименованием номенклатуры :
в методах датасорса делаем метод : X++: edit ItemName editItemId(boolean _set, _data, ItemName _val) { ItemName _ret = _val; ; if (_set) _data.ItemId = _val; else _ret = _data.ItemName(); return _ret; } Ну или просто мышкой перетяните его на форму А лукап тогда какой хотите. Лукап конечно придется перекрывать Да, и не забудьте на Вашей таблице сделать дисплей метод для X++: _data.ItemName(); |
|
14.09.2011, 16:28 | #7 |
Участник
|
Цитата:
Сейчас ещё подумалось, а для чего вам edit-метод на датасурсе? Он же зависит только от полей таблицы. В таких случаях его можно реализовать на уровне таблицы, также как и display-метод. Попробуйте может это что-то изменит. |
|
14.09.2011, 16:57 | #8 |
Участник
|
Уже работает, в базу записывает как надо, НО в самом StrinEdite на форме не отображается номер квартиры.
|
|
14.09.2011, 16:39 | #9 |
Участник
|
Цитата:
Сообщение от Katuxa
Это практически так же как я делала, оно то работает, но почему-то срабатывает сразу для всех записей на форме. Т..е. например, если я для одного лицевого счета указываю номер квартиры 1, то при вставке новой записи тоже подставляется этот номер квартиры, или если изменю в какой либо записи номер квартиры, то он меняется во всех. Как с этим бороться?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 14.09.2011 в 16:44. |
|
14.09.2011, 17:04 | #10 |
Участник
|
|
|
14.09.2011, 17:38 | #11 |
Участник
|
|
|
14.09.2011, 14:14 | #12 |
Участник
|
Цитата:
Если поле "код квартиры" в таблице лицевых счетов обязательно для заполнения, то связать два датасурса на форме можно по "inner join". В этом случае останутся доступными стандартные функции фильтрации и сортировки по полю "номер квартиры" |
|
14.09.2011, 14:46 | #13 |
Участник
|
Скорее всего при вычислении значения edit-метода вы используете текущий курсор датасурса, а нужно тот курсор, который передаётся в edit-метод в качестве параметра
|
|
14.09.2011, 14:57 | #14 |
Участник
|
|
|
14.09.2011, 15:00 | #15 |
Участник
|
Покажите свой код edit-метода
|
|
14.09.2011, 15:05 | #16 |
Участник
|
edit-метод в источнике данных на форме:
edit HCSFlatNum editFlatCode(boolean _set, HCSAccountTable _data, HCSFlatNum _val) { HCSFlatNum _ret = _val; ; if (_set) _data.FlatCode = _val; else _ret = _data.flatNum(); return _ret; } И дисплей метод в таблице: display HCSFlatNum flatNum() { return HCSFlatTable::find(this.FlatCode).FlatNum; } |
|
14.09.2011, 15:31 | #17 |
Участник
|
Вроде всё правильно.
А у контрола на гриде в свойстве DataSource указано корректное значение? |
|
14.09.2011, 16:17 | #18 |
Участник
|
В DataSource указано, ну и в DataMethod. Больше ничего не указывала.
|
|