Страница 1 из 2
					
				Помогите с позиционированием записи...
				Добавлено: 03 окт 2005, 12:41
				 DarkAngel27
				Галактика 7.12 пишу следующий код на VIP:
Код: Выделить всё
if getfirst hdr_ps=tsOK then 
 if getfirst ps_lines=tsOK then
   If getfirst katmc1=tsOK then
   {
   } while ((pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK) and (getnext katmc1=tsOK))
В 7.11 позиционирование происходило нормально. В 7.12 позиционируется только если нужная запись стоит последней.
Если добавить в фильтр запроса эту строчку, то вообще ничего не выгружается:
(pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK)
Что я делаю не так? 

 
			 
			
					
				
				Добавлено: 03 окт 2005, 12:45
				 Алексей
				А почему бы это условие не наложить в логической таблице и делать по ней простой _Loop ?
			 
			
					
				
				Добавлено: 03 окт 2005, 13:02
				 DarkAngel27
				В таблице должна проиходить модификация. В _loop этого не рекомендуют делать. Приходится по старинке делать.
			 
			
					
				
				Добавлено: 03 окт 2005, 13:08
				 Алексей
				External _Loop
и все дела.
			 
			
					
				
				Добавлено: 03 окт 2005, 13:09
				 Алексей
				на крайний случай подцепи по нреку синоним.
луп делай по одному, а апдейт по другой.
			 
			
					
				
				Добавлено: 03 окт 2005, 13:24
				 Goblin
				В _loop не рекомендуется делать модификацию полей , входящих в сегменты индекса, по которому делается проход. Все остальные поля модифицировать - ради бога ...
			 
			
					
				
				Добавлено: 03 окт 2005, 15:22
				 DarkAngel27
				А без _loop обойтись никак нельзя?
			 
			
					
				
				Добавлено: 03 окт 2005, 15:29
				 edward_K
				а в сапорте то выбора проходит?
и зачем писать
(pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK)
булиновское значение сравниваете с word
pos=1 уже тогда нужно взять в скобки навсяк случай
эт наверное правильнее
pos(upcase('В'),upcase(katmc1.name))<>1
а быстрее будет
upcase(substr(katmc1.name,1,1))<>'B'
			 
			
					
				
				Добавлено: 03 окт 2005, 16:36
				 DarkAngel27
				Код: Выделить всё
(pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK)
 Это действительно была моя глупость. 
Меня другое интересует: В этом куске кода 
Код: Выделить всё
while ((pos(upcase('В'),upcase(katmc1.name))<>1) and (getnext katmc1=tsOK))
я перескакиваю на идущую далее запись, как сделать так, чтобы он не перепрыгивал далее, а оставался на записи, в которой нашёл 'В'?
 
			 
			
					
				
				Добавлено: 03 окт 2005, 17:10
				 edward_K
				вопрос в порядке обработки
я бы сделал
do {
if pos(upcase('В'),upcase(katmc1.name))=1 then break ;
} while getnext katmc1=0 ;
так надежней и проще для понимания.
а можно и так(тут уж контекста зависит)
if getfirst katmc where (( 'B' <<= katmc.name and
'BЯ'>>=katmc.name ))=0
{
}
			 
			
					
				
				Добавлено: 18 окт 2005, 12:15
				 DarkAngel27
				
а в сапорте то выбора проходит? 
В Support выгрузка работает...
 
			 
			
					
				
				Добавлено: 25 окт 2005, 13:27
				 Maverick
				edward_K писал(а):
if getfirst katmc where (( 'B' <<= katmc.name and
'BЯ'>>=katmc.name ))=0
однозначно работать не будет. конструкци <<= >>= используется только для последнего сегмента индекса. Если сегмент всего 1, конструкция неприменима
 
			 
			
					
				
				Добавлено: 25 окт 2005, 13:37
				 edward_K
				не знаю как у вас, у меня вроде прокатывает - поскольку слова последнего касаются не сегмента индекса, а условия по индексу. 
в сапорте выполните
select katmc.name where (( 'B' <<= katmc.name and 'BЯ'>>=katmc.name )) ;
			 
			
					
				
				Добавлено: 25 окт 2005, 13:44
				 Maverick
				Попробуйте то же самое выполнить в ВИП
			 
			
					
				
				Добавлено: 25 окт 2005, 19:00
				 DarkAngel27
				 
Попробуйте то же самое выполнить в ВИП 
Так на Vip все и делается.