Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Привет всем!
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)
Извиняюсь за неточную формулировку задачи
Надо определить наименьшую сумму в рамках конкретного MAX::Kod.
Т.е. очередь типа:
Код Сумма
1 100
1 200
1 50
1 300
2 55
2 12
2 100
2 200
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
Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
finsoftrz писал(а): 20 Май 2022, 13:41
Насколько я понимаю, это некорректный код. Сортировка по 2 полям, а get по одному. Будет создаваться второй индекс (сортировка) , в котором одно поле кода, а второе поле суммы не упорядочено.
Скорее всего именно так, но как получить нужный результат?
Разные варианты есть. На практике самый юзабельный, на мой взгляд, при заполнении этой кьюшки формировать вторую с некими итоговыми значениями. Или после заполнения кьшки перебрать один раз все строки и заполнить вторую кьюшку. В этой второй кьюшке, например, могут быть поля код+минимальное значение, либо код+границы относящихся к нему строк в первой кьюшке и т.п.
Que:Name = 'Smith' !Initialize the key fields
Que:Zip = 12345
GET(NameQue,'FirstField,SecondField') !Get the matching record
IF ERRORCODE() THEN STOP(ERROR()) END