-
Суть:
Имеется таблица с номенклатурой товаров. Необходимо сделать "наглядную" выборку из этого списка.
"Наглядная" - это два списка:
1 общий с польз. условиями выборки минус уже выбранные позиции
2 выбранные позиции
Думаю так: два дбгрида, начальные селекты
Для 1 -
select * FROM NOMETKLATURA
where (польз. фильтр)
Для 2
select * FROM NOMETKLATURA
where nom_id in (null)
(nom_id входит в первичный индекс)
При выбре селекты меняются
1 - select * FROM NOMETKLATURA
where (польз. фильтр) and nom_id not in (список выбранных)
2 - select * FROM NOMETKLATURA
where nom_id in (список выбранных)
Вроде должно работать.
Есть ли другие способы? Попроще.
-
у меня подобное делается средствами грида.
то есть изначально юзер видит датасет нефильтрованный, или с фильтрм дизайнт-тайма.
в процессе просмотра он может отбирать записи или их группы.
выбор визуализируется цветом и может активироваться (видно только выбранное)
плюс к этому он может инвертировать свое условие выбора по горячей кнопке. выбранным становится все невыбранное.
операции эти не разрушающие, можно возвращаться туда-обратно много раз
-
> [0] Mike Kouzmine (19.08.09 11:49)
Ну а если второй список организовать на клиенте в таблицу в памяти? И просто копировать туда записи из первого. Что предполагается делать с выбранными записями?
Я такое делал для оформления документа одной транзакцией, а в память выбирал для подсчета промежуточных результатов и безболезненного отката. Типа клиент говорит "хочу подешевле" и можно какую то позицию поменять в окончательном заказе без засорения БД.
-
Первое, что хотел сделать - это так как у вас, но, подумав (пока делаю для себя), решил, что для человека, который будет это делать, нагляднее будет вариант с двумя гридами. Принцип-то тот же. Визуализация другая. Вероятно.
-
Sergey13 © (19.08.09 12:00) [2] Потом выбранные будут
UPDATE NOMETKLATURA
SET TNVED_ID = :T
WHERE NOM_ID IN (список)
-
> Mike Kouzmine (19.08.2009 11:49:00) [0]
Вроде бы и этот не сложный.
-
> Медвежонок Пятачок (19.08.2009 11:55:01) [1]
Для списков полностью помещающихся на экране это подходит, но для длинных списков это мучение.
-
Anatoly Podgoretsky © (19.08.09 12:06) [5] Я не говорю, что сложный. Это то, что пришло в голову сразу.
-
Anatoly Podgoretsky © (19.08.09 12:06) [6] Записей 10000, не более. С условиями штук 50.
-
Anatoly Podgoretsky © (19.08.09 12:06) [6] Я спрашивал попроще для пользователя.
-
но для длинных списков это мучение.
с двумя гридами будет тоже самое мучение.
это вопрос дизайна самой формы в которой пока нет никаких пользовательских отборов
-
> Mike Kouzmine (19.08.2009 12:10:09) [9]
Мне кажется первый вариант проще для пользователя, во первых он сразу видит список отобраных записей, а во вторых нет возможности сделать дубль.
-
> Медвежонок Пятачок (19.08.2009 12:22:10) [10]
Не будет мучения, второй список короткий, а в первом запись убирается и можно первый список крутить как угодно не боясь снять отметку.
-
> [4] Mike Kouzmine (19.08.09 12:05)
Если (список) будет длинным (типа юзер "Выбрал ФСЁ") теоретически можно налететь на превыешние длины запроса и/или на плохую производительность запроса.
Как вариант можно попробовать сделать псевдо-временную таблицу, куда писать идентификаторы записей с оригинальным признаком, например имени пользователя. Перед заполнением ее очищать от своих старых записей.
-
Anatoly Podgoretsky © (19.08.09 13:31) [11]
Уже почти доделал
-
Если это номенклатура, то там должны быть и группы (подгруппы). Отображение списка деревом много упростит пользователю жизнь. Хотя, конечно, можно и предусмотреть "сплошной" режим.
В остальном делал бы как в Sergey13 © (19.08.09 12:00) [2] Например через обычный стрингрид .
-
Sergey13 © (19.08.09 14:41) [13] Пробовал на 800 - отрабатывает менее чем за секунду.
Превышение возможно - поставлю ограничитель
-
MsGuns © (20.08.09 09:11) [15] Это присутствует в качестве условий отбора - группа и строка для отбора из поля наименования