AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.09.2011, 13:08   #1  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Работа с лукапом
Всем добрый день!
Подскажите, пожалуйста, как можно решить такую задачу.
Есть таблица и форма лицевых счетов. В таблице есть поле - код квартиры (с указанием соответствующего расширенного типа данных).
Но на форме нужно отобразить поле Номер квартиры, которое будет иметь выпадающий список из 2-ух полей таблицы квартир (код и номер квартиры). При выборе записи в StrinEdite должен появиться номер квартиры, а в самой таблице лицевых счетов сохранить в поле код квартиры - соответствующий код. Лукап у меня отображается и даже заносится код квартиры и в StrinEdite отображается номер, но не только для текущей записи, а сразу для всех на этой форме . Может я не так все делаю и есть какой-то более простой способ такого отображения поля на форме.
Старый 14.09.2011, 13:38   #2  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
На форме у контрола перекрываете метод 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:39   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Katuxa Посмотреть сообщение
Лукап у меня отображается и даже заносится код квартиры и в StrinEdite отображается номер, но не только для текущей записи, а сразу для всех на этой форме .
А можно скриншот?
Старый 14.09.2011, 13:51   #4  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Как сделать лукап я знаю, проблема в том, что при выборе с лукапа в этом поле отображать не код квартиры а номер.
Старый 14.09.2011, 14:00   #5  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
по аналогии с наименованием номенклатуры :
в методах датасорса делаем метод :
X++:
edit ItemName editItemId(boolean _set, _data, ItemName _val)
{
    ItemName _ret = _val;
    ;
    if (_set)
        _data.ItemId = _val;
    else
        _ret = _data.ItemName();

    return _ret;
}
Делаем на форме StringEdit и в его свойстве DataMethod ставим наш метод editItemId.
Ну или просто мышкой перетяните его на форму
А лукап тогда какой хотите. Лукап конечно придется перекрывать

Да, и не забудьте на Вашей таблице сделать дисплей метод для
X++:
_data.ItemName();
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 14.09.2011 в 14:15.
Старый 14.09.2011, 14:14   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Katuxa Посмотреть сообщение
В таблице есть поле - код квартиры... Но на форме нужно отобразить поле Номер квартиры
Ещё можно добавить на форму связанный датасурс по таблице квартир. И отображать поле "номер квартиры" уже из этого датасурса.
Если поле "код квартиры" в таблице лицевых счетов обязательно для заполнения, то связать два датасурса на форме можно по "inner join". В этом случае останутся доступными стандартные функции фильтрации и сортировки по полю "номер квартиры"
Старый 14.09.2011, 14:36   #7  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Цитата:
Сообщение от Pustik Посмотреть сообщение
по аналогии с наименованием номенклатуры :
в методах датасорса делаем метод :
X++:
edit ItemName editItemId(boolean _set, _data, ItemName _val)
{
    ItemName _ret = _val;
    ;
    if (_set)
        _data.ItemId = _val;
    else
        _ret = _data.ItemName();

    return _ret;
}
Делаем на форме StringEdit и в его свойстве DataMethod ставим наш метод editItemId.
Ну или просто мышкой перетяните его на форму
А лукап тогда какой хотите. Лукап конечно придется перекрывать

Да, и не забудьте на Вашей таблице сделать дисплей метод для
X++:
_data.ItemName();
Это практически так же как я делала, оно то работает, но почему-то срабатывает сразу для всех записей на форме. Т..е. например, если я для одного лицевого счета указываю номер квартиры 1, то при вставке новой записи тоже подставляется этот номер квартиры, или если изменю в какой либо записи номер квартиры, то он меняется во всех. Как с этим бороться?
Старый 14.09.2011, 14:46   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Скорее всего при вычислении значения edit-метода вы используете текущий курсор датасурса, а нужно тот курсор, который передаётся в edit-метод в качестве параметра
Старый 14.09.2011, 14:57   #9  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Скорее всего при вычислении значения edit-метода вы используете текущий курсор датасурса, а нужно тот курсор, который передаётся в edit-метод в качестве параметра
А можете по-подробнее написать как это реализовать? Так как не совсем понятно.
Старый 14.09.2011, 15:00   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Покажите свой код edit-метода
Старый 14.09.2011, 15:05   #11  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
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   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Вроде всё правильно.
А у контрола на гриде в свойстве DataSource указано корректное значение?
Старый 14.09.2011, 16:17   #13  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
В DataSource указано, ну и в DataMethod. Больше ничего не указывала.
Старый 14.09.2011, 16:28   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Katuxa Посмотреть сообщение
если изменю в какой либо записи номер квартиры, то он меняется во всех. Как с этим бороться?
Я правильно понимаю, что реальные значения кодов квартир в таблице лицевых счетов не меняются. Меняется только отображение соответствующих номеров на форме? Т.е. проблема где-то на форме.

Сейчас ещё подумалось, а для чего вам edit-метод на датасурсе? Он же зависит только от полей таблицы. В таких случаях его можно реализовать на уровне таблицы, также как и display-метод. Попробуйте может это что-то изменит.
Старый 14.09.2011, 16:39   #15  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Katuxa Посмотреть сообщение
Это практически так же как я делала, оно то работает, но почему-то срабатывает сразу для всех записей на форме. Т..е. например, если я для одного лицевого счета указываю номер квартиры 1, то при вставке новой записи тоже подставляется этот номер квартиры, или если изменю в какой либо записи номер квартиры, то он меняется во всех. Как с этим бороться?
Такое бывает если у контрола в свойствах не правильный датасоурс стоит или вообще не стоит.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 14.09.2011 в 16:44.
Старый 14.09.2011, 16:57   #16  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Уже работает, в базу записывает как надо, НО в самом StrinEdite на форме не отображается номер квартиры.
Старый 14.09.2011, 17:04   #17  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Цитата:
Сообщение от Pustik Посмотреть сообщение
Такое бывает если у контрола в свойствах не правильный датасоурс стоит или вообще не стоит.
А датасоурс должен быть указан лицевых счетов? Или я что-то не так понимаю.
Старый 14.09.2011, 17:38   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Katuxa Посмотреть сообщение
А датасоурс должен быть указан лицевых счетов?
Да и edit метод на нём же, ну или на таблице
Старый 14.09.2011, 17:55   #19  
Katuxa is offline
Katuxa
Участник
 
36 / 10 (1) +
Регистрация: 13.05.2011
Так и есть, а номер квартиры на форме все-равно всегда пустой, хотя в базу код квартиры заносится правильно.
Старый 15.09.2011, 08:55   #20  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Сделал простейший пример работы edit-метода на таблице InventDim, которая в Вашем случае выступает как Таблица Лицевых счетов. В качестве Таблицы(справочника) квартир выступает InventLocation. Код квартиры - InventLocationId, Номер квартиры - Name из таблицы InventLocation.
P.S. Не забудьте, что это InventDim, аккуратно. Лучше посмотрите на тестовой базе.
Вложения
Тип файла: xpo Form_InventDimEditCtrlTest.xpo (3.7 Кб, 159 просмотров)
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
функционал Работа с документами и создание договора в Word GM2005 DAX: Функционал 5 28.09.2009 14:49
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02
Работа с главным меню в Axapta Alexey DAX: Программирование 0 04.01.2002 23:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:34.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.