Позиционирование в QUEUE

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
George
Бывалый
Сообщения: 87
Зарегистрирован: 04 Август 2009, 9:48

Позиционирование в QUEUE

Сообщение 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)
VWV
Бывалый
Сообщения: 59
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск

Позиционирование в QUEUE

Сообщение VWV »

Может код не определен? :

SORT(Queue:Max,MAX::Summa)
GET(Queue:Max,1)
KOL::Kod = ...
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 1856
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

Позиционирование в QUEUE

Сообщение Губин Игорь »

George писал(а): 20 Май 2022, 9:09 SORT(Queue:Max,MAX::Kod,MAX::Summa)
Да воскурим мануал!

Вначале идёт сортировка по первому ключу, а потом - по второму. Вот и получается, что сортировка по MAX::Summa идёт в рамках сортировки по MAX::Kod

Поменяй их местами
Это я только кажусь дураком! На самом деле я полный идиот!
George
Бывалый
Сообщения: 87
Зарегистрирован: 04 Август 2009, 9:48

Позиционирование в QUEUE

Сообщение George »

Извиняюсь за неточную формулировку задачи :)
Надо определить наименьшую сумму в рамках конкретного MAX::Kod.
Т.е. очередь типа:
Код Сумма
1 100
1 200
1 50
1 300
2 55
2 12
2 100
2 200
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2749
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

George писал(а): 20 Май 2022, 9:09 SORT(Queue:Max,MAX::Kod,MAX::Summa)
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
Перед GET очистите поле суммы:

Код: Выделить всё

CLEAR(MAX::Summa) 
С уважением, ДП
George
Бывалый
Сообщения: 87
Зарегистрирован: 04 Август 2009, 9:48

Позиционирование в QUEUE

Сообщение George »

И этот вариант не работает.
Alex_G
Бывалый
Сообщения: 58
Зарегистрирован: 09 Ноябрь 2009, 13:04

Позиционирование в QUEUE

Сообщение 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
George
Бывалый
Сообщения: 87
Зарегистрирован: 04 Август 2009, 9:48

Позиционирование в QUEUE

Сообщение George »

MAX::Kod = KOL::Kod есть и на него встает, но при этом не на самую меньшую MAX::Summa.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2749
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

Alex_G писал(а): 20 Май 2022, 13:06 Должно работать и без очистки MAX::Summa
Да, и работает как надо, проверил.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 3379
Зарегистрирован: 06 Ноябрь 2014, 12:48

Позиционирование в QUEUE

Сообщение finsoftrz »

Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
C6/C11, ШВС, tps/btrieve.
George
Бывалый
Сообщения: 87
Зарегистрирован: 04 Август 2009, 9:48

Позиционирование в QUEUE

Сообщение George »

finsoftrz писал(а): 20 Май 2022, 13:41 Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
Скорее всего именно так, но как получить нужный результат?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 3379
Зарегистрирован: 06 Ноябрь 2014, 12:48

Позиционирование в QUEUE

Сообщение finsoftrz »

Разные варианты есть. На практике самый юзабельный, на мой взгляд, при заполнении этой кьюшки формировать вторую с некими итоговыми значениями. Или после заполнения кьшки перебрать один раз все строки и заполнить вторую кьюшку. В этой второй кьюшке, например, могут быть поля код+минимальное значение, либо код+границы относящихся к нему строк в первой кьюшке и т.п.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 3379
Зарегистрирован: 06 Ноябрь 2014, 12:48

Позиционирование в QUEUE

Сообщение finsoftrz »

Можно еще служебную строку воткнуть с минимальным значением суммы.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4502
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Позиционирование в QUEUE

Сообщение 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.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2749
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

George писал(а): 20 Май 2022, 13:19 MAX::Kod = KOL::Kod есть и на него встает, но при этом не на самую меньшую MAX::Summa.
У меня встаёт на самую меньшую. :idied:
С уважением, ДП
Ответить