| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Очень хочется "прыгать" по записям
			 
			
			Здравтсвуйте всем. 
		
		
		
		
		
		
		
	Как-нибудь можно перепрыгивать к конкретной записи в таблице, что-то типа метода MoveTo(int)? /************************************/ InventTable Table1; ; select * from Table1 order by ItemName; MoveTo(100); //Вот такое надо  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В принципе, наверное, можно через while select сделать.   Что-то у меня такое ощущение, что по быстродействию это будет эквиваленто всем остальным способам, если конечно же такие найдутся.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А вообще, как правило такие вопросы свидетельствуют о неправильной постановке задачи.  Что требуется сделать в общем случае ?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, еще: 
		
		
		
		
		
		
		
	вот так Вашу задачу можно было бы выполнить в T-SQL: select (select count(*) from table as table2 where table2.id<=table.id) as rank , id,description from table as table1 having rank = 100 order by id То же способ не идеальный, так как join таблицы саму на себя никогда не был хороши решением, но при небольщом количестве записей в таблице все-таки получше, чем курсор. Остается только переложить этот запрос на X++ ![]() Или можно воспользоваться классами Connection, Statement, ResultSet. Они позволят выполнить этот запрос к БД напрямую, без преобразования sql выражения. Вот кстати еще один метод решения этой задачи в T-SQL: ![]() select count (table2.id) as rank, table1.id, table1.description from table as table1 inner join table as table2 on tree1.id >= table2.id group by table1.id, table1.description having rank = 100 order by rank Хотя, может кто-то предложит решение этой задачи более Аксаптовсими методами  
		 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если  я скажу, что хочу реализовать бинарный поиск на темповой таблице и сравнить по скорости со стандартным селектом.  Что с того будет?  
		
		
		
		
		
		
		
	На практике сталкивался со случаем, когда такой подход приносил ощутимые результаты, но это было на С++ && ADO, а вот здесь не знаю даже с какой стороны подступиться-знаний маловато  
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Если я скажу, что хочу реализовать бинарный поиск на темповой таблице и сравнить по скорости со стандартным селектом.
		
	 
Немного оффтопа - однажды я попробовал переписать Аксаптовскую функцию посика подстроки в строке, так как стандартный вариант не удовлетворял меня по быстродействию. Для этого я потратил кучу своего времени реализовал на X++ алгоритм Бойера - Мура. Оказывается зря - мой вариант работал раз в 10 медленнее стандартного варианта. И это при том, что данный алгоритм считается одним из лучших. Все дело в том, что Аксапта интерпретирует X++ и он никогда не будет работать быстрее, чем нативный код. Мой алгоритм был написан на X++, а стандартный вариант был реализован в системном классе. Переписав свой алгоритм на C++, реализовав его в виде dll и вызвов его из Аксапты я все таки получил незначительный выигрыш перед Аксаптовским вариантом. Но вывод, который я сделал - бесполезно придумывать хорошие алгоритмы, пока они написаны на X++ они всегда будут уступать в быстродействии коду, реализованному в виде системных классов и функций. Цитата: 
	
		
			Что с того будет?
		
	 
 
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо. 
		
		
		
		
		
		
		
	Я уже и забыл, что он интерпретируемый    3 раза Сделал, чтобы вывод отчета в Excel был в несколько раз быстрее чем стандртный отчет, хотел еще время формирования уменьшить... Ну, и .... с этим X++ . Напишу полностью на C++, все равно отчет в Excel выводится.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Напишу полностью на C++, все равно отчет в Excel выводится.
		
	 
В таком случае тебе никто не мешает воспользоваться не Аксаптовскими средствами. Например, Crystal Reports - ускоряет разработку отчетов в несколько раз и не требует программистов, хорошо знающих Аксапту.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Re: Очень хочется "прыгать" по записям
			 
			
			Добавлю. 
		
		
		
		
		
		
		
	Цитата: 
	
		
			Изначально опубликовано Diman  
Как-нибудь можно перепрыгивать к конкретной записи в таблице, что-то типа метода MoveTo(int)? С точки зрения Аксапты коркретной записью является запись с заданным RecID. Поэтому в Аксапте позиционирование на "конкретную" запись делается следующим образом: Код: select * from Table where table.RecID = myRecID Почему-то мне кажется, что вопрос не к аксапте, а вообще к технологии баз данных и к SQL'ям. Стоит почитать о деревьях и бинарном поиске на www.sql.ru Например, http://sdm.viptop.ru/articles/sqltrees.html http://www.sql.ru/articles/mssql/010...eesInSQL.shtml http://www.osp.ru/win2000/sql/2001/05/970.htm  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Возможности спозиционироваться в таблице на запись с определенным номером нет. И это правильно, если подумать.
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Поэтому в Аксапте позиционирование на "конкретную" запись делается следующим образом: select * from Table where table.RecID = myRecID
		
	 
Это скорее не позиционирование, а выборка конкретной записи. А позиционирование я делаю примерно так. PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это позиционирование на 23 сверху запись? 
		
		
		
		
		
		
		
	Не знал. Век живи - век учись.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это позиционирование на запись у которой RecId == 23 
		
		
		
		
		
		
			
		
		
		
		
	Ты же в своём примере откуда-то берёшь переменную myRecID. Но у тебя получается выборка конкретной записи, а у меня перемещение(позиционирование) на неё.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Это позиционирование на 23 сверху запись?
		
	 
Цитата: 
	
		
			Век живи - век учись.
		
	 
![]() p.s. Прошу прощения. Опоздал.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Yuri Safronov, а... позиционирование в форме... я думал про позиционирование в выборке... Спасибо. 
		
		
		
		
		
		
		
	Андре. Нет не проверил. Ввожу. Извините. Постараюсь исправиться  
		 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Нет не проверил. Ввожу. Извините. Постараюсь исправиться
		
	 
 .   Кстати, я написал "поверил", а не "проверил".     По-моему в данном варианте мое сообщение звучит более дружелюбно.  
		 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ок  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Пенсионер 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Diman  
Сделал, чтобы вывод отчета в Excel был в несколько раз быстрее чем стандртный отчет...  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 blokva: 
		
		
		
		
		
		
		
	Дело в том, что вывод с использованием автоматизации реализуется через маршаллинг/демаршаллинг, а это удовольствие не из дешевых. А вот операция с файлами проходит намного быстрее. Вот примерный алгоритм: 1. Создать ASCII файл например при помощи класса AsciiIo. (Если надо с форматированием я использую *.htm формат) 2. Создать экземпляр MS Excel через COM 3. А вот теперь можно открыть файл и навести окончательный лоск на листе используя автоматизацию. Вроде все. PS Только вот рекоммендую сначала ознакомиться с форматом *.htm файлов, которые генерит Office. И определиться с версиями Office у пользователей.  | 
| 
	
 |