Страница 1 из 4
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 9:09
				 George
				Привет всем!
Clarion 10 ABC
Есть QUEUE:
  Queue:Max  QUEUE,PRE(MAX:)
  Kod               LONG
  Summa          REAL
                    END
Необходимо встать на запись с меньшей суммой.
Вот такая конструкция почему-то 

 не работает:
  SORT(Queue:Max,MAX::Kod,MAX::Summa)
  MAX::Kod = KOL::Kod
  GET(Queue:Max,MAX::Kod)
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 9:49
				 VWV
				Может код не определен? :
SORT(Queue:Max,MAX::Summa)
GET(Queue:Max,1)
KOL::Kod = ...
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 9:59
				 Губин Игорь
				George писал(а): 20 Май 2022, 9:09
SORT(Queue:Max,MAX::Kod,MAX::Summa)
 
Да воскурим мануал! 
Вначале идёт сортировка по первому ключу, а потом - по второму. Вот и получается, что 
сортировка по MAX::Summa идёт в рамках сортировки по MAX::Kod
Поменяй их местами
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 12:43
				 George
				Извиняюсь за неточную формулировку задачи 

Надо определить наименьшую сумму в рамках конкретного MAX::Kod.
Т.е. очередь типа:
Код       Сумма
1           100
1           200
1            50
1           300
2            55
2            12
2          100
2          200
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 12:47
				 Дед Пахом
				George писал(а): 20 Май 2022, 9:09
SORT(Queue:Max,MAX::Kod,MAX::Summa)
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
 
Перед GET очистите поле суммы:
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 13:03
				 George
				И этот вариант не работает.
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 13:06
				 Alex_G
				George писал(а): 20 Май 2022, 9:09
Вот такая конструкция почему-то  не работает:
SORT(Queue:Max,MAX::Kod,MAX::Summa)
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
 
Не работает: возвращает ошибку или не то значение?
Проверьте, есть ли в очереди элемент со значением MAX::Kod = KOL::Kod.
Должно работать и без очистки MAX::Summa
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 13:19
				 George
				MAX::Kod = KOL::Kod есть и на него встает, но при этом не на самую меньшую MAX::Summa.
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 13:23
				 Дед Пахом
				Alex_G писал(а): 20 Май 2022, 13:06
Должно работать и без очистки MAX::Summa
 
Да, и работает как надо, проверил.
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 13:41
				 finsoftrz
				Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 13:52
				 George
				finsoftrz писал(а): 20 Май 2022, 13:41
Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
 
Скорее всего именно так, но как получить нужный результат?
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 16:06
				 finsoftrz
				Разные варианты есть. На практике самый юзабельный, на мой взгляд, при заполнении этой кьюшки формировать вторую с некими итоговыми значениями. Или после заполнения кьшки перебрать один раз все строки и заполнить вторую кьюшку. В этой второй кьюшке, например, могут быть поля код+минимальное значение, либо код+границы относящихся к нему строк в первой кьюшке и т.п.
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 16:08
				 finsoftrz
				Можно еще служебную строку воткнуть с минимальным значением суммы.
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 16:14
				 kreator
				George, почему не почитать справку? Сделайте в очереди именованные поля. И тогда:
Код: Выделить всё
Que:Name = 'Smith'                       !Initialize the key fields
Que:Zip = 12345
GET(NameQue,'FirstField,SecondField')    !Get the matching record
IF ERRORCODE() THEN STOP(ERROR()) END
Ещё можно сначала сделать set, потом один next.
 
			 
			
					
				Позиционирование в QUEUE
				Добавлено: 20 Май 2022, 16:52
				 Дед Пахом
				George писал(а): 20 Май 2022, 13:19
MAX::Kod = KOL::Kod есть и на него встает, но при этом не на самую меньшую MAX::Summa.
 
У меня встаёт на самую меньшую. 
