![]() |
#1 |
Участник
|
Два поля-lookup. Автоматическая установка значения
Товарищи, добрый день!
СИтуация такая: на форме имеется два поля с выпадающими списками, у которых задан некоторый датасорс и некоторое датафилд. У обоих эти параметры одинаковые. В свою очередь, на низком уровне, эти два поля являются внешними ключами, поэтому собственно и имеются выпадающие списки... Вопрос такой: как при установке значения в одном поле (при выборе из списка), копировать его во второе? В лоб, т.е. X++: <_2>.text(<_1>.text()) |
|
![]() |
#2 |
Участник
|
Видимо вы путаете термин "поле" и термин "контролл". На форме находятся контроллы. Если у них одинаковые датасорс и датафилд, то копировать значения не требуется, тк значение хранится в поле таблицы и отображается с помощью контролла, сколько бы их на форме не было
|
|
![]() |
#3 |
Участник
|
Ice,
Цитата:
![]() Согласен, но причина в том, что это, как бы сказать, форма для вставки несуществующей пока еще записи в таблице... Вот, забыл сказать сразу. Да, лучше делать такие действия через Grid, но в данной ситуации так нельзя сделать, не предполагается такая функциональность. Последний раз редактировалось Vasiliusis; 08.02.2013 в 12:03. |
|
![]() |
#4 |
Участник
|
сути дела не меняет, при заполнении значения в одном контролле, и переходе с него на другой, отображаемое значение на всех "одинаковых" контроллах обновятся
|
|
![]() |
#5 |
Участник
|
Цитата:
![]() А так да, согласен.. ну опыта не более двух недель... |
|
![]() |
#6 |
Участник
|
Например, такой код не работает
X++: ... //Ставим борт прилета, если он задан if (FlightShedule_AirCraft.text() != "") { select firstonly * from NVAOMAAirCraft where NVAOMAAirCraft.AirCraftNum == FlightShedule_AirCraft.text(); FlightShedule_AirCraftD.text(NVAOMAAirCraft.AirCraftNum); FlightShedule_AirCraftD.modified(); } ... |
|
![]() |
#7 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
ice, спасибо! Такой код написал, он правилен?
X++: public void modified() { //super(); ; if (!this.getValue()) this.setValue(FlightShedule_AirCraft.text()); } S.Kuskov, по-видимому, так и есть. |
|
![]() |
#10 |
Axapta
|
Неправилен скорее всего.
1) Почему не modifiedField таблицы? Такое поведение требуется только на этоф форме, а не вообще для таблицы? Точно? На формах вообще должно быть минимум кода. 2) Почему FlightShedule_AirCraft.text(), когда есть значение поля в табличной переменной? 3) Почему super закомментировали? Забудьте вы вообще про контролы и методы типа text. Оперируйте таблицами и полями. |
|
![]() |
#11 |
Участник
|
2 Vasiliusis: Старайтесь всегда смотреть как реализовано в стандартных формах и таблицах (ну и других объектах AOT), Axapta очень хороший справочник примеров
|
|
![]() |
#12 |
Участник
|
Цитата:
Сообщение от oip
![]() Неправилен скорее всего.
1) Почему не modifiedField таблицы? Такое поведение требуется только на этоф форме, а не вообще для таблицы? Точно? На формах вообще должно быть минимум кода. 2) Почему FlightShedule_AirCraft.text(), когда есть значение поля в табличной переменной? 3) Почему super закомментировали? Забудьте вы вообще про контролы и методы типа text. Оперируйте таблицами и полями. 1. Да, этот случай уникален и больше нигде не появляется, ну на данный момент, ибо процесс только пытается быть автоматизирован.. кроме того, в других формах присутсвует только одно поле из этих двух, и именно то, чье значение копируется 2. Я взял из датасорса тогда уж, ибо в таблице вносимой записи еще нет. я правильно понимаю? 3. Тыкался, забыл откомментить ![]() Хороший совет в конце, учту, спасибо! |
|
![]() |
#13 |
Участник
|
Делюсь кодом, кому надо:
X++: public void modified() { super(); //Если нужно копировать из прилета if (element.GetDoCopyAirCraftA2AirCraftD()) { //Сбрасываем индикатор копирования, тем самым предотвращая рекурсию element.SetDoCopyAirCraftA2AirCraftD(false); //Копируем if (!this.getValue() || any2str(this.getValue()) != NVAOMAFlightScheduleDS.AirCraft) this.setValue(NVAOMAFlightScheduleDS.AirCraft); } } |
|
![]() |
#14 |
Участник
|
На сколько я понял - это modified контрола, а как вам уже сдесь сказали бизнесс-логику правильнее реализовывать в методах таблиц, ну или в случае если эта логика не относится в целом к таблице, то в методах конкретного датасорса. А методы контролов оставьте для презентационной логики.
Ещё, судя по вашему описанию, значение должно копироваться во второе поле в момент изменения первого поля. Так зачем вы пытаетесь перекрыть метод изменения второго поля, а не первого? |
|
![]() |
#15 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() На сколько я понял - это modified контрола, а как вам уже сдесь сказали бизнесс-логику правильнее реализовывать в методах таблиц, ну или в случае если эта логика не относится в целом к таблице, то в методах конкретного датасорса. А методы контролов оставьте для презентационной логики.
Ещё, судя по вашему описанию, значение должно копироваться во второе поле в момент изменения первого поля. Так зачем вы пытаетесь перекрыть метод изменения второго поля, а не первого? |
|
![]() |
#16 |
Участник
|
Доступ к значению полей текущего курсора может быть осуществлён, через имя датасурса (без суфикса _ds). Нет необходимости использовать методы getValue и setValue.
И я все же по прежнему не понимаю почему вы инициируете изменение значения поля из его же собственного modified? Зачем эта ненужная рекурсия? |
|
![]() |
#17 |
Участник
|
Цитата:
Цитата:
![]() |
|
![]() |
#18 |
Участник
|
Цитата:
![]() Перекрывать нужно в поле, которое меняется(меняется вручную на форме), тк перекрытый метод сработает при изменении этого поля |
|
![]() |
#19 |
Участник
|
|
|
![]() |
#20 |
Administrator
|
Цитата:
Похожий пример из стандарта: при заполнении наименования номенклатуры заполняется поле "Краткое наименование". Смотрите метод InventTable.modifiedField().
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|