Позиционирование в QUEUE
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Позиционирование в QUEUE
Привет всем!
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)
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)
-
- Бывалый
- Сообщения: 60
- Зарегистрирован: 12 Июнь 2015, 22:59
- Откуда: Новороссийск
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
Позиционирование в QUEUE
Может код не определен? :
SORT(Queue:Max,MAX::Summa)
GET(Queue:Max,1)
KOL::Kod = ...
SORT(Queue:Max,MAX::Summa)
GET(Queue:Max,1)
KOL::Kod = ...
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
Позиционирование в QUEUE
Да воскурим мануал!
Вначале идёт сортировка по первому ключу, а потом - по второму. Вот и получается, что сортировка по MAX::Summa идёт в рамках сортировки по MAX::Kod
Поменяй их местами
Это я только кажусь дураком! На самом деле я полный идиот!
Позиционирование в QUEUE
Извиняюсь за неточную формулировку задачи
Надо определить наименьшую сумму в рамках конкретного MAX::Kod.
Т.е. очередь типа:
Код Сумма
1 100
1 200
1 50
1 300
2 55
2 12
2 100
2 200
Надо определить наименьшую сумму в рамках конкретного MAX::Kod.
Т.е. очередь типа:
Код Сумма
1 100
1 200
1 50
1 300
2 55
2 12
2 100
2 200
- Дед Пахом
- Старичок
- Сообщения: 3134
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Позиционирование в QUEUE
Перед GET очистите поле суммы:
Код: Выделить всё
CLEAR(MAX::Summa)
С уважением, ДП
Позиционирование в QUEUE
Не работает: возвращает ошибку или не то значение?
Проверьте, есть ли в очереди элемент со значением MAX::Kod = KOL::Kod.
Должно работать и без очистки MAX::Summa
Позиционирование в QUEUE
MAX::Kod = KOL::Kod есть и на него встает, но при этом не на самую меньшую MAX::Summa.
- Дед Пахом
- Старичок
- Сообщения: 3134
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Позиционирование в QUEUE
Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Позиционирование в QUEUE
Разные варианты есть. На практике самый юзабельный, на мой взгляд, при заполнении этой кьюшки формировать вторую с некими итоговыми значениями. Или после заполнения кьшки перебрать один раз все строки и заполнить вторую кьюшку. В этой второй кьюшке, например, могут быть поля код+минимальное значение, либо код+границы относящихся к нему строк в первой кьюшке и т.п.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4618
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Позиционирование в QUEUE
Можно еще служебную строку воткнуть с минимальным значением суммы.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4984
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Позиционирование в QUEUE
George, почему не почитать справку? Сделайте в очереди именованные поля. И тогда:
Ещё можно сначала сделать set, потом один next.
Код: Выделить всё
Que:Name = 'Smith' !Initialize the key fields
Que:Zip = 12345
GET(NameQue,'FirstField,SecondField') !Get the matching record
IF ERRORCODE() THEN STOP(ERROR()) END
We are hard at work… for you.
- Дед Пахом
- Старичок
- Сообщения: 3134
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация: