|  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 | 
| Участник | Цитата: Цитата:  А как по-другому? В контроле не вариант, там не работает, я про код выше, самый первый который | 
|  | 
|  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 | 
|  |