Страница 2 из 4
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:00
George
kreator писал(а): ↑20 Май 2022, 16:14
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, 17:06
George
kreator писал(а): ↑20 Май 2022, 16:14
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.
1) Если четко определить и второе поле, то и встанет на такую запись (если найдет).
2) SET и NEXT для QUEUE?
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:09
George
finsoftrz писал(а): ↑20 Май 2022, 16:08
Можно еще служебную строку воткнуть с минимальным значением суммы.
Этот вариант был бы хорош, если потом мне не нужно было бы все равно искать строку с наименьшей суммой.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:10
Дед Пахом
Код: Выделить всё
KOL::Kod = 1
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
MESSAGE(MAX::Summa) ! результат 50
Код: Выделить всё
KOL::Kod = 2
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
MESSAGE(MAX::Summa) ! результат 12
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:16
George
Дед Пахом писал(а): ↑20 Май 2022, 17:10
Код: Выделить всё
KOL::Kod = 1
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
MESSAGE(MAX::Summa) ! результат 50
Код: Выделить всё
KOL::Kod = 2
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
MESSAGE(MAX::Summa) ! результат 12
К сожалению, я не понял Ваши примеры.
Общая задача такая - есть набор сумм, необходимо отобрать из этого набора 5 наибольших.
Естественно, первоначальный набор не упорядочен и не может быть упорядочен в принципе.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:18
Дед Пахом
George писал(а): ↑20 Май 2022, 17:16
К сожалению, я не понял Ваши примеры.
Это как раз Ваши примеры. Я заполнил очередь теми данными, что Вы привели, в том же порядке.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:19
George
Дополнительно - 5 наибольших по коду 1, 5 наибольших по коду 2 и т.д.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:22
George
Дед Пахом писал(а): ↑20 Май 2022, 17:18
George писал(а): ↑20 Май 2022, 17:16
К сожалению, я не понял Ваши примеры.
Это как раз Ваши примеры. Я заполнил очередь теми данными, что Вы привели, в том же порядке.
KOL::Kod = 1
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
MESSAGE(MAX::Summa) ! результат 50
Нет, такой вариант не работает.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:24
Дед Пахом
George писал(а): ↑20 Май 2022, 17:22
Нет, такой вариант не работает.
Работает, могу доказать.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:28
George
Дед Пахом писал(а): ↑20 Май 2022, 17:24
George писал(а): ↑20 Май 2022, 17:22
Нет, такой вариант не работает.
Работает, могу доказать.
Тогда почему у меня не работает? Я попробовал
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:29
George
В Вашем варианте, по логике, встанет на первую попавшуюся запись с MAX::Kod = 1
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:30
Дед Пахом
George писал(а): ↑20 Май 2022, 17:29
В Вашем варианте, по логике, встанет на первую попавшуюся запись с MAX::Kod = 1
Почему-то первая попавшаяся всегда с MAX::Summa=50.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:33
Дед Пахом
George писал(а): ↑20 Май 2022, 17:28
Тогда почему у меня не работает? Я попробовал
Напишите минимальную тестовую программу. У меня получилось 54 строчки считая пустые.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:38
finsoftrz
Код: Выделить всё
form_r routine
DATA
lor:queue queue, pre()
lor:kod long
lor:sum real
.
CODE
lor:kod=1
lor:sum=100
add(lor:queue)
lor:kod=1
lor:sum=50
add(lor:queue)
lor:kod=2
lor:sum=100
add(lor:queue)
lor:kod=2
lor:sum=49.2
add(lor:queue)
lor:kod=2
lor:sum=50
add(lor:queue)
sort(lor:queue,lor:kod,lor:sum)
lor:kod=2
get(lor:queue,lor:kod)
stop(lor:sum)
В этом примере работает, выдает значение 49.2. А не может это от версии клариона зависеть? Я на с6 пробую.
Позиционирование в QUEUE
Добавлено: 20 Май 2022, 17:40
Дед Пахом
finsoftrz писал(а): ↑20 Май 2022, 17:38
Я на с6 пробую.
Я на последней.