| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			В методе класса InventDimCtrl_Frm_Lookup.callerFormDatasource() обнаружил странный код: 
		
		
		
		
		
		
		
	X++: FormDataSource callerFormDatasource()
{
    if (! fr.args())
        return null;
    // Don't check on 'fr.args().record()' alone
    // Try test for dataset instead
    if (! fr.args().dataset())
        return null;
    // Could be a buffer which isn't inserted yet
    if (! fr.args().record().tableId)
        return null;
    return fr.args().record().dataSource();
}PS. И почему вообще второй if раскрашен, как коментарий?..  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			fr.args().record().tableId возвращает идентификатор таблицы, здесь проверяется существование курсара передоного в args 
		
		
		
		
		
		
		
	return fr.args().record().dataSource(); вывод курсара  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А args().dataset() в нее передается информация о наборах данных, которые могут использоваться по умолчанию, зачем она там используется не знаю но если пошарится по АОТ то много подобного можно найти, я раза 4 натыкался на подобное
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня, DAX 3.0 SP3 он не закоментирован 
		
		
		
		
		
		
			
		
		
		
		
	Возвращают они всегда одно и то же значение. (разве что, если попробовать явно указать что-то другое, не пробовал) Разница в том, что если курсор не передавался, то args().record().tableid вылетит с ошибкой времени выполнения, потому как Common record не инициализирован. (пытаемся обратиться к полю несуществюущего курсора) В то же время dataset возвращает просто tableId - поэтому это будет работать. Вот зачем там третья проверка как раз не совсем пойму - видимо таки, предполагалась возможность передачи разных чисел в dataset и record().tableId  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я имел в виду то, как код отображается на форуме в тэгах XPP. У меня (Opera 9.02.8585, MSIE 6.0.3790.1830 SP1) в этом сообщении второй if раскрашен, как комментарий - ну да фиг с ним, я на stopbugs об этом написал. 
		
		
		
		
		
		
		
	Цитата: 
	
		
			Возвращают они всегда одно и то же значение. (разве что, если попробовать явно указать что-то другое, не пробовал).
		
	 
   Я знаю только способ через передачу табличной переменной в качестве аргумента record().Цитата: 
	
		
			Вот зачем там третья проверка как раз не совсем пойму - видимо таки, предполагалась возможность передачи разных чисел в dataset и record().tableId
		
	 
   При этом в комментарии есть явное указание на такую ситуацию: когда запись в буфере еще не вставлена в таблицу. Так вот, сталкивался кто-нить с таким или нет?
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Оказывается, такое бывает, что args.dataset() != args.record().tableId: это встречается тогда, когда дочерняя форма (или класс, или еще кто-то, кому передается Args), к примеру, вызывается на пустом grid'е. В моем случае при этом в args.record() ничего вообще не передавалось (что ожидаемо), в то время как args.dataset() возвращала tableId для таблицы основного datasource'а grid'а.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: e@gle (1), vladz (1). | |
| 
	
	 | 
	
		
  |