|  21.12.2005, 13:04 | #1 | 
| Участник | 
			
			Глюк в том, когда поле не заполнено и нет ни одной записи в related-таблице ... делаем `GoToMainTable` и создаём там новую запись, то она проподает... (при условии что там нет ни одной записи) Примеры: 1) TaxTable -> Tab: Tax Reporting (4-ый tab).. где ссылки на `TaxReportCollection`... 2) ZipCode -> поле: Страна -> GoToMainTable (форма `Country`) 3) будут ещё наверно ... PS: проблему решил так... в форме, которая открывается из GoToMainTable: Код: public void init()
{
	FormStringControl   callerControl;
;
	if (element.args().caller())
	{
		callerControl   = SysTableLookup::getCallerStringControl(element.args());
		if (callerControl)
		{
			isFromParentControl = true;
			callerCountryId = callerControl.valueStr();
		}
	}
	super();
}Код: public void research()
{
	if (isFromParentControl && callerCountryId && !Country::exist(callerCountryId))
	{
		return;
	}
	super();
} Спасибо! PPS: Ax_3.0_SP4_EeastEurope [MSSQL 2k DevelopEdition] + AOS_3.0_SP4_EE PPS2: probuju sozdat' svoji tablici i formi - ne poluchajetsja etot gljuk povtorit'... a v standartnih forma - ne udajetsja bez haka popravit' | 
|  | 
|  21.12.2005, 16:18 | #2 | 
| Участник | 
			
			Замечу что поле по которому осуществляется переход - цифровое. Проблема в том, что передается значение Args().LookupValue() == "0". При этом у Axapta'ы слегка срывает крышу и она пытется периодически перевыполнить запрос (повторно вызывает research() датасоурса). Чтобы решить глобально - перекрыть метод Init() класса SysSetupFormRun и дописать после super() следующий код <div class='XPPtop'>X++</div><div class='XPP'> [color=:blue]public[/color] [color=:blue]void[/color] init() { DictField dictField; ; [color=:blue]super[/color](); [color=:green]// --> D.Andy исправление глюка с переходом на цифровое поле [/color] [color=:blue]if[/color] (this.args().lookupField() && this.args().lookupValue() [color=:blue]==[/color] [color=:red]"0"[/color]) { dictField = [color=:blue]new[/color] DictField(this.dataSource().cursor().TableId, this.args().lookupField());} [color=:green]// <-- D.Andy [/color] ... }</div> Эта же проблема проявляется при открытии Lookup-формы 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | |
| За это сообщение автора поблагодарили: Logger (1). | |
|  21.12.2005, 17:17 | #3 | 
| Участник | 
			
			Спасибо.. помогло пока..   а что на счет ZipCode -> поле: Country -> GoToMainTable (форма: Country).. ??? Там ведь `String`... Именно у меня проблема, когда значение несуществует в таблице... (симулировать можна поменяв на прямыю значение в таблице через SQL manager или Query ) например при импорте код страны попал как 2-символа,.. а компания ID использует kak ISO код (3 символа) ПС: такие Fix-ы надо включать в hotfix-ы или ServicePack | 
|  | 
|  21.12.2005, 17:34 | #4 | 
| Участник | 
			
			ZipCode - это таблица? Честно сказать с Country у меня все нормально (3.0 CIS sp3 cu1) По хорошему - после изменения глобального класса не мешало бы сделать полную компиляцию 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  21.12.2005, 17:49 | #5 | 
| Участник | 
			
			Eto potomu chto skoree vsego znachenije suschestvujet v tablice... Vot moj Final-kod Код: public void init()
{
	DictField   dictField;
	Common	  c;
;
	super();	
	if (this.args().lookupField() && this.args().lookupValue() != "" )
	{
		// Check bug on Integer `0` value
		if (this.args().lookupValue() == "0")
		{
			// --> Thanks AndyD
			dictField = new DictField(this.dataSource().cursor().TableId, this.args().lookupField());
			if (dictField && dictField.baseType() == Types::Integer)
				this.args().lookupValue("");
			// <-- Thanks AndyD
		} else {
			// Check if exists
			c.data(this.dataSource().cursor());
			select  c
			where   c.(this.args().lookupField()) == this.args().lookupValue();
			if ( !c.RecId )
			{
				this.args().lookupValue("");
			}
		}
	}
} | 
|  | 
|  21.12.2005, 18:05 | #6 | 
| Участник | 
			
			Нет, так нельзя - вообще ломается jumpRef.
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  21.12.2005, 18:08 | #7 | 
| Участник | 
			
			v smisle? U menja shas vse rabotaet... Fix: Код: c = this.dataSource().cursor(); | 
|  | 
|  21.12.2005, 18:18 | #8 | 
| Участник | 
			
			2-х или 3-х звенка?
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  21.12.2005, 18:45 | #9 | 
| Участник | 
			
			Вообще - значение "0" может иметь и строковое поле - так что, по идее, надо проверять сначала какой тип у этого поля  <div class='XPPtop'>X++</div><div class='XPP'> dictField = [color=:blue]new[/color] DictField(this.dataSource().cursor().TableId, this.args().lookupField()); [color=:blue]if[/color] (dictField && dictField.baseType() [color=:blue]==[/color] Types::Integer && this.args().lookupValue() [color=:blue]==[/color] [color=:red]"0"[/color]) this.args().lookupValue([color=:red]""[/color]);[color=:blue]else[/color] { проверка на существование }</div> А вообще сомнения у меня есть в целесообразности второй проверки - может лучше делать это при импорте? 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  21.12.2005, 19:49 | #10 | 
| Участник | 
			
			3-x zvenka... Nu puskaj budet sdes' proverka... 2-x zvenka tozhe rabotaet... nashet proverki pri importi - bivajut vsjakie polzovateli, i zaimportirovat' mogut shto ugodno..  a X++ pisat' konechno ne umejut...  Esli String budet "0"... to budet proverjatsja na nalichie Spasibo za to.. glavnoe najti mesto gde ispravit'... | 
|  |