08.02.2013, 11:40 | #1 |
Участник
|
Два поля-lookup. Автоматическая установка значения
Товарищи, добрый день!
СИтуация такая: на форме имеется два поля с выпадающими списками, у которых задан некоторый датасорс и некоторое датафилд. У обоих эти параметры одинаковые. В свою очередь, на низком уровне, эти два поля являются внешними ключами, поэтому собственно и имеются выпадающие списки... Вопрос такой: как при установке значения в одном поле (при выборе из списка), копировать его во второе? В лоб, т.е. X++: <_2>.text(<_1>.text()) |
|
08.02.2013, 11:54 | #2 |
Участник
|
Видимо вы путаете термин "поле" и термин "контролл". На форме находятся контроллы. Если у них одинаковые датасорс и датафилд, то копировать значения не требуется, тк значение хранится в поле таблицы и отображается с помощью контролла, сколько бы их на форме не было
|
|
08.02.2013, 11:58 | #3 |
Участник
|
Ice,
Цитата:
Согласен, но причина в том, что это, как бы сказать, форма для вставки несуществующей пока еще записи в таблице... Вот, забыл сказать сразу. Да, лучше делать такие действия через Grid, но в данной ситуации так нельзя сделать, не предполагается такая функциональность. Последний раз редактировалось Vasiliusis; 08.02.2013 в 12:03. |
|
08.02.2013, 12:03 | #4 |
Участник
|
сути дела не меняет, при заполнении значения в одном контролле, и переходе с него на другой, отображаемое значение на всех "одинаковых" контроллах обновятся
|
|
08.02.2013, 12:08 | #5 |
Участник
|
Цитата:
А так да, согласен.. ну опыта не более двух недель... |
|
08.02.2013, 12:12 | #6 |
Участник
|
Например, такой код не работает
X++: ... //Ставим борт прилета, если он задан if (FlightShedule_AirCraft.text() != "") { select firstonly * from NVAOMAAirCraft where NVAOMAAirCraft.AirCraftNum == FlightShedule_AirCraft.text(); FlightShedule_AirCraftD.text(NVAOMAAirCraft.AirCraftNum); FlightShedule_AirCraftD.modified(); } ... |
|
08.02.2013, 12:17 | #7 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
08.02.2013, 12:23 | #8 |
Участник
|
|
|
08.02.2013, 12:37 | #9 |
Участник
|
ice, спасибо! Такой код написал, он правилен?
X++: public void modified() { //super(); ; if (!this.getValue()) this.setValue(FlightShedule_AirCraft.text()); } S.Kuskov, по-видимому, так и есть. |
|
08.02.2013, 12:48 | #10 |
Axapta
|
Неправилен скорее всего.
1) Почему не modifiedField таблицы? Такое поведение требуется только на этоф форме, а не вообще для таблицы? Точно? На формах вообще должно быть минимум кода. 2) Почему FlightShedule_AirCraft.text(), когда есть значение поля в табличной переменной? 3) Почему super закомментировали? Забудьте вы вообще про контролы и методы типа text. Оперируйте таблицами и полями. |
|
08.02.2013, 12:58 | #11 |
Участник
|
2 Vasiliusis: Старайтесь всегда смотреть как реализовано в стандартных формах и таблицах (ну и других объектах AOT), Axapta очень хороший справочник примеров
|
|
08.02.2013, 13:08 | #12 |
Участник
|
Цитата:
Сообщение от oip
Неправилен скорее всего.
1) Почему не modifiedField таблицы? Такое поведение требуется только на этоф форме, а не вообще для таблицы? Точно? На формах вообще должно быть минимум кода. 2) Почему FlightShedule_AirCraft.text(), когда есть значение поля в табличной переменной? 3) Почему super закомментировали? Забудьте вы вообще про контролы и методы типа text. Оперируйте таблицами и полями. 1. Да, этот случай уникален и больше нигде не появляется, ну на данный момент, ибо процесс только пытается быть автоматизирован.. кроме того, в других формах присутсвует только одно поле из этих двух, и именно то, чье значение копируется 2. Я взял из датасорса тогда уж, ибо в таблице вносимой записи еще нет. я правильно понимаю? 3. Тыкался, забыл откомментить Хороший совет в конце, учту, спасибо! |
|
08.02.2013, 13:13 | #13 |
Участник
|
Делюсь кодом, кому надо:
X++: public void modified() { super(); //Если нужно копировать из прилета if (element.GetDoCopyAirCraftA2AirCraftD()) { //Сбрасываем индикатор копирования, тем самым предотвращая рекурсию element.SetDoCopyAirCraftA2AirCraftD(false); //Копируем if (!this.getValue() || any2str(this.getValue()) != NVAOMAFlightScheduleDS.AirCraft) this.setValue(NVAOMAFlightScheduleDS.AirCraft); } } |
|
08.02.2013, 13:20 | #14 |
Участник
|
На сколько я понял - это modified контрола, а как вам уже сдесь сказали бизнесс-логику правильнее реализовывать в методах таблиц, ну или в случае если эта логика не относится в целом к таблице, то в методах конкретного датасорса. А методы контролов оставьте для презентационной логики.
Ещё, судя по вашему описанию, значение должно копироваться во второе поле в момент изменения первого поля. Так зачем вы пытаетесь перекрыть метод изменения второго поля, а не первого? |
|
08.02.2013, 13:22 | #15 |
Участник
|
Цитата:
Сообщение от S.Kuskov
На сколько я понял - это modified контрола, а как вам уже сдесь сказали бизнесс-логику правильнее реализовывать в методах таблиц, ну или в случае если эта логика не относится в целом к таблице, то в методах конкретного датасорса. А методы контролов оставьте для презентационной логики.
Ещё, судя по вашему описанию, значение должно копироваться во второе поле в момент изменения первого поля. Так зачем вы пытаетесь перекрыть метод изменения второго поля, а не первого? |
|
08.02.2013, 13:37 | #16 |
Участник
|
Доступ к значению полей текущего курсора может быть осуществлён, через имя датасурса (без суфикса _ds). Нет необходимости использовать методы getValue и setValue.
И я все же по прежнему не понимаю почему вы инициируете изменение значения поля из его же собственного modified? Зачем эта ненужная рекурсия? |
|
08.02.2013, 14:45 | #17 |
Участник
|
Цитата:
Мне ice так посоветал, да и как подругому я не знаю А как по-другому? В контроле не вариант, там не работает, я про код выше, самый первый который |
|
08.02.2013, 14:50 | #18 |
Участник
|
Цитата:
Перекрывать нужно в поле, которое меняется(меняется вручную на форме), тк перекрытый метод сработает при изменении этого поля |
|
11.02.2013, 06:59 | #19 |
Участник
|
|
|
11.02.2013, 17:10 | #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 |
|