powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Фильтр универсальное решение
25 сообщений из 50, страница 2 из 2
Фильтр универсальное решение
    #34198311
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно темы читать. Топики можно закрывать после 2-го сообщения обычно. Дальше начинается флейм на любые темы, только не по теме топика :)
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198312
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov
Ценность и применимость универсальных фильтров примерно такая же.
очень ценная вещь
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198313
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtockво,как только появились слова "бизнес-сущности" в связке со словом "запрос" то сразу понимаешь,что кто-то хочет написать свой "велосипедный" BusinessObjects, хотя для самообразования это никому не помешает.
А что в BO такого ужасного, что подобные механизмы мешает написать другим?
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198339
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmинтересно темы читать. Топики можно закрывать после 2-го сообщения обычно. Дальше начинается флейм на любые темы, только не по теме топика :)
Во-во! Я тут вернулся в этот форум( тема интересна) - ужаснулся!!!
В такие дебри залезли, атас! Скоро наверно дойдут до синтаксиса хранимых процедур!
Сейчас уже поздно, но завтра обязательно напишу свое мнение.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198346
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm Alexey KudinovЦенность и применимость универсальных фильтров примерно такая же.очень ценная вещь Для вас да. Я согласен с Романом, что "настраиваемые пользователем серверные фильтры - для коробочных решений". Поэтому сразу скажу, что я не говорю о коробочных решениях.
softwarer Это [постраничная выборка] ответ Алексею про затаскивание пятнадцати миллионов строк в грид и как следствие обоснование ненужности заранее прописанных жестких фильтров. О. Я так и знал, что всплывет постраничная выборка. Я не так чтобы совсем отвергаю этот механизм, но считаю что он есть суть решение проблемы, к-ю мы сами себе создаем, позволяя пользователю вводить _любые_ параметры запроса. Ну что он будет делать с этой выборкой ? Правильно. Листая страницы, он будет _искать_ то, что ему надо. А я считаю, что нужно _заставлять_ пользователей делать такие фильтры, чтобы результат запроса был в рамках здравого смысла. Чтобы пояснить, что я имею ввиду под термином "заставлять" надо сделать небольшое отступление.
Я не раз и не два присутствовал при обсуждениях необходимости "универсального фильтра". Каждый раз это происходило примерно одинаково. Выходит программист и говорит, что пользователи сами не знают чего хотят, поэтому надо дать им возможность конструировать запросы самим. И каждый раз при повторном плотном общении с пользователями выяснялось, что в данном конкретном режиме им на самом деле нужен поиск по 3-5, ну 10 параметрам и не более.
Соответственно остальные критерии поиска вполне можно ограничить так, чтобы получить удобоваримый результат. Это подразумевается под "заставлять".

Т.о. детальная постановка задачи сильно уменьшает необходимость реализации универсальных решений.
softwarerТут как всегда правило 10/90. Иначе говоря, 10% пользователей любой программы без этой функциональности будут страдать Ну что же. Придется прикинуть трудозатраты на реализацию универсального решения, подумать о вышесказанном и решить нужно ли удовлетворять хотелки 10% пользователей. softwarerЗвать программиста она будет, если нужного ей жесткого фильтра нет. В том то и беда, что ПМСМ она будет звать программиста в любом случае. Я очень скептически отношусь к т.н. "продвинутым пользователям" и их возможностям, а главное желанию разбираться в проблемах, не касающихся их напрямую. softwarerТо есть первичная задача программиста - не дать пользователю сделать то, что ему нужно? Первичная задача программиста не дать пользователю сделать то, что противоречит организации бизнеса в целом. У меня пользователь (рядовой сотрудник бэк офиса) как-то хотел получить кредитный портфель по всему банку. Ему очень было нужно.
iscrafm Топики можно закрывать после 2-го сообщения обычно. Дальше начинается флейм на любые темы, только не по теме топика :) Ну это флеймогонные темы такие, специальные. Все нормально.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198355
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovЯ так и знал, что всплывет постраничная выборка. Я не так чтобы совсем отвергаю этот механизм, но считаю что он есть суть решение проблемы, к-ю мы сами себе создаем, позволяя пользователю вводить _любые_ параметры запроса.
Хм. Видите ли, наша работа собственно заключается в том, чтобы "позволять пользователю" то, что ему надо. И если мы собираемся запретить что-то не потому, что это вредно, а потому, что мы не хотим или не можем этого делать, мы обязаны испытывать при этом такие же эмоции, которые испытывает врач, ампутируя ногу, которую он должен был бы вылечить.

Alexey KudinovНу что он будет делать с этой выборкой ? Правильно. Листая страницы,
Нет, неправильно. Чаще всего он посмотрит на получившуюся выборку, и если нужно, уточнит ее - может быть, добавит условия в фильтр, может быть, запустит поиск (по сути тот же фильтр). Листать он будет, если выборка окажется достаточно скромной по размерам.

Alexey KudinovА я считаю, что нужно _заставлять_ пользователей делать такие фильтры, чтобы результат запроса был в рамках здравого смысла.
Это возможно только в простых случаях. Все равно как показать Вам структуру большой БД и заставить предсказывать кардинальность запросов - либо в ряде случаев Вам придется давать оценку типа "от тысячи до миллиона", либо будете ошибаться на порядок-другой.

Alexey KudinovИ каждый раз при повторном плотном общении с пользователями выяснялось, что в данном конкретном режиме им на самом деле нужен поиск по 3-5, ну 10 параметрам и не более.
Если Вы прочитаете мое первое письмо в этой теме, обнаружите, что я с этим вполне согласен. Вопрос в том, что это совершенно не эквивалентно "жестким фильтрам". Соответственно перестаю понимать, что Вы собственно оспариваете.

Alexey KudinovСоответственно остальные критерии поиска вполне можно ограничить так, чтобы получить удобоваримый результат.
А вот это нисколько не есть истина. Особенно если пользователь еще не успел выучить наизусть информацию в БД и не способен предсказать, насколько ограничит выборку условие либо комбинация условий.

Пользователь идет достаточно просто: нарисовал фильтр. Получилось мало - берет. Получилось много - придумывает, что еще ограничить. Через две-три итерации находит нужное.

Alexey KudinovТ.о. детальная постановка задачи сильно уменьшает необходимость реализации универсальных решений.
Необходимость реализации универсальных решений обусловлена главным образом тем, что это много эффективнее, нежели реализовывать частные решения. Когда мне потребовалось реализовать универсальный фильтр для весьма специфической ситуации - я сделал его примерно за день; не самый продвинутый, но поверьте, вполне приличный. То есть для приложения, например, в 50 форм он уже окупится.

Другой момент - универсальный фильтр позволяет приемлимо по трудозатратам добавить возможности, которые в частных скорее всего не появятся из-за трудоемкости. Это уже приятный и полезный бонус, но необходимостью является только для тех, кто хочет делать качественный продукт.

То же, о чем Вы говорили чуть выше - эта универсальная реализация должна быть настраиваемой. То есть тупо и неэффективно вываливать, например, все поля из запроса или таблицы и рисовать по ним QBE (хотя по цена/качество такой метод и неплох, но вот по качеству вообще....)

Alexey KudinovНу что же. Придется прикинуть трудозатраты на реализацию универсального решения, подумать о вышесказанном и решить нужно ли удовлетворять хотелки 10% пользователей.
Безусловно. Поэтому позволю себе уточнить себе начальную фразу: речь идет не о "коробочности", но об ожидаемом количестве пользователей приложения (и их трудозатратах на обход отсутствия нужного фильтра).

Alexey KudinovВ том то и беда, что ПМСМ она будет звать программиста в любом случае. Я очень скептически отношусь к т.н. "продвинутым пользователям" и их возможностям, а главное желанию разбираться в проблемах, не касающихся их напрямую.
Хм. Алексей, поверите честному слову - НУ НЕ ЗВАЛИ МЕНЯ. НЕ ЗВАЛИ. При этом этой функциональностью пользовались - говорю так потому, что просили доработок и сообщали о проблемах. В частности, ухитрились творить такие сложные фильтры, что программа начала вляпываться в ограничение Win95 на 8192 оконных хандла (это звучит бредово, но реально было - на комбобокс три хандла, строка фильтра на семь комбобоксов, три-четыре сложных фильтра в открытых окнах - и тютю, cannot create window).

Alexey KudinovПервичная задача программиста не дать пользователю сделать то, что противоречит организации бизнеса в целом.
Имхо, первичная задача все же - дать сделать то, что организации бизнеса соответствует. Но и Вашей, и моей постановке задачи гибкие фильтры соответствуют.

Alexey KudinovУ меня пользователь (рядовой сотрудник бэк офиса) как-то хотел получить кредитный портфель по всему банку.
Ну так при чем тут фильтр? Роман пока так и не собрался рассказать, как страшные фильтры пробивают хорошую защиту. Лично я затрудняюсь понять, как инструмент ограничения ограниченной выборки может эту выборку расширить (разумеется, без грубых ошибок в системе безопасности).
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198368
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Alexey KudinovНу что он будет делать с этой выборкой ? Правильно. Листая страницы,
Нет, неправильно. Чаще всего он посмотрит на получившуюся выборку, и если нужно, уточнит ее - может быть, добавит условия в фильтр, может быть, запустит поиск (по сути тот же фильтр). А это как повезет. Либо додумается добавить/изменить условия, либо будет листать, матерясь на "тупую софтину". Но это даже и не важно. Суть в том, что он будет _искать_ в первоначальной выборке. И я считаю, что эту первоначальную выборку надо постараться сразу максимально сузить.
softwarer Alexey KudinovИ каждый раз при повторном плотном общении с пользователями выяснялось, что в данном конкретном режиме им на самом деле нужен поиск по 3-5, ну 10 параметрам и не более. Если Вы прочитаете мое первое письмо в этой теме, обнаружите, что я с этим вполне согласен. Вопрос в том, что это совершенно не эквивалентно "жестким фильтрам". Соответственно перестаю понимать, что Вы собственно оспариваете. Я не оспариваю. Я лишь призываю разумно ограничивать возможности пользователей в построении запросов и не давать возможность вводить все, что взбредет в голову. Я не знаю, что в вашем представлении "жесткий фильтр", т.е. видимо проблема в терминологии, ну т.е. как обычно.
softwarerНеобходимость реализации универсальных решений обусловлена главным образом тем, что это много эффективнее, нежели реализовывать частные решения. Я уверен, что вы и сами прекрасно знаете, что это далеко не всегда.
softwarerХм. Алексей, поверите честному слову - НУ НЕ ЗВАЛИ МЕНЯ. НЕ ЗВАЛИ.. Ну что же, вам повезло. Еще в самом начале моей карьеры, я видел как программист сделал универсальный фильтр и его каждый раз звали, чтобы он его настроил. Это "хороший" пример. Есть и "плохой". Я видел как сделаным фильтром вообще никто не пользовался, а просили просто по разному ограничить выборки в разных режимах. Наверное фильтры плохие были.
softwarerНу так при чем тут фильтр? Это была иллюстрация к необходимости удовлетворять нужды пользователей softwarerРоман пока так и не собрался рассказать, как страшные фильтры пробивают хорошую защиту У меня есть некоторые идеи относительно того, что имел ввиду Роман, но лучше действильно подождать его ответа.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198411
%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%
Гость
softwarer Да нет проблем. Введите вот такой фильтр и сохраните его как фильтр по умолчанию

Да нет проблем. За $1000 мы сделаем соответствующую доработку

Да нет проблем, Вы только учтите, что это уже аналитическая отчетность. За $100'000 мы

Вариант без енотов неправильный. А вообще я не понял, субж про конструктор запросов или про фильтр по выборке.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198643
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To iscrafm:насчет BO я только за :).Плохого ничего не имею:)С учетом того,что сами подобное написали то только приветствуем. Правда потом контора купила сама BO,но пользователям уже неохота переучиваться.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198669
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переношу в разразработку информационных систем. Там пусть решают что с ней делать.
Согласны?
Обсуждалось все уже это неоднократно и на MSSQL и в учетных системах.
Как к таковому проектированию БД тема отношения не имеет. Сразу наверное надо было...
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198695
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerОпять же, "универсального фильтра", который позволит найди счет по условию на его позицию (скажем, "в счете есть товар такой-то") как правило не наблюдается, все сплошь тупейший QBE.
Поиск счета, в котором есть указанный товар - это и есть тупейший QBE. И он покрывает n% потребностей юзеров, остальное - заранее написанными запросами-отчетами.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34198832
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov iscrafm Alexey KudinovЦенность и применимость универсальных фильтров примерно такая же.очень ценная вещь Для вас да. Я согласен с Романом, что "настраиваемые пользователем серверные фильтры - для коробочных решений". Поэтому сразу скажу, что я не говорю о коробочных решениях.

И я тоже о коробочных решениях не говорю. И автор. Ценность универсализации таких механизмов как фильтрация, а также других процедур работы с данными от этого меньше не становится.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199039
Сорри. Долго не отвечал. Сижу дома на модеме...

Почитав... сам уж и незнаю что добавить...
Из меня рвётся какая-то фраза... самое сложное её сформулировать...

Скажу так:
1. СУБД одолело понятие Типа Реквизита.
2. СУБД одолело Связь сущностей (!!! О! Как громко звучит!)
3. Распределённых Баз
... прочее на что у меня сейчас не хвататет фантазии

Почему? Потому, что всегда мысль движется в сторону разбиения задачи на более меньшие участки по которым следует проводить работу.

Задача: Как связать сущность Общество, Человек!

Здесь мы применили достаточно абстрактные понятия и Громкие слова. Но можем реализовать описанную задачу т.к. опустившись на Уровень таблиц. Это всего-лишь
2 таблицы
-Общества
--Имеет ключ "ДНК общества"
-Человеки
-- Таблица человеков имеет первичный ключ - Код ДНК индивидуума.

И валяй чё хош. Хоть считай сколько "М" сколько "Ж". Сколько больных/здоровых... Успевай только реквизиты добавлять...

Что есть Фильтр!
Средство отбора тех самых Сущностей...
Что есть сущность - в самом низу это всегда 2 типа:
Строка (blob - это много строк объединённых в "пакет")
Число (дата нормально представляется в long, Дата/Время в double, boolean - ну, в общем ясно)
Есть ограниченный ряз операций:
>,<,=,начинается С, содержит.

Ну неужели у мудрого All нет мыслей как свести задачу Фильтрации/Поиска на уровень структуры.
Связи
Уникальность значений
Проверка допустимых значений
...
могём, а это нет...


p.s. текст напоминает какой-то бред. Сам вижу... Ну, уж сорри :-) Куда-то в эту сторону я думаю и ничинал тему.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199134
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мне пришлось сделать фильтр на 20 таблиц :) И х с ними пусть выбирают, что хотят.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199208
Сахават ЮсифовВот мне пришлось сделать фильтр на 20 таблиц :) И х с ними пусть выбирают, что хотят.

О! Процесс идёт!
Вот как понимаю. Есть Фильтр, задаются его парамерты, сохраняются. Он именуется.
И В след раз пользователь лезет в раздел созданных фильтров. Выбирает имя и видит данные!
Когда Шеф просит Новый отчёт. Мы не лезем в Базу рисовать новый SQL запрос. Просто берём мастер, подбираем параметры, сохраняем, именуем и просим $100000000000000 за то, что потребовалось снести сложные изменения в БД.

А вот самое интересно как Вы его реализовали на уровне таблиц.
Есть выражения <>= и пр. Как храним
Как разбираемся с типом поля и допустимыми значениями (Дата строка число перечисление...)
Как храним готовый запрос. Строкой? В отдельной табл.?

Спасибо :-)
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199243
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль среды Сахават ЮсифовВот мне пришлось сделать фильтр на 20 таблиц :) И х с ними пусть выбирают, что хотят.

О! Процесс идёт!
Вот как понимаю. Есть Фильтр, задаются его парамерты, сохраняются. Он именуется.
И В след раз пользователь лезет в раздел созданных фильтров. Выбирает имя и видит данные!
Когда Шеф просит Новый отчёт. Мы не лезем в Базу рисовать новый SQL запрос. Просто берём мастер, подбираем параметры, сохраняем, именуем и просим $100000000000000 за то, что потребовалось снести сложные изменения в БД.

А вот самое интересно как Вы его реализовали на уровне таблиц.
Есть выражения <>= и пр. Как храним
Как разбираемся с типом поля и допустимыми значениями (Дата строка число перечисление...)
Как храним готовый запрос. Строкой? В отдельной табл.?

Спасибо :-)

Тут случай простой был. Все таблицы имеют ИД сотрудника.
Выбирают поля типа "сколько молодых баб живет в таком то районе, которые учились (сидели) в МГУ". Формируется динSQL, дин. таблица, подключется грид, а там печать халявная.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199370
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль средыДень добрый!
Направление мысли:
При работе с СУБД всегда есть необходимость чё-нить искать.

==== по всей СУБД?

Проклятущие пользователи всегда хотят разномастных выборок.

===== по всей СУБД?

Для удовлетворения страждущих я, всегда, рисую формочку, с Громким именем "Фильтр",

==== или "Построитель запросов"?

на которой распологаю поля ввода дат, чисел, строк, перечислений...
Одно плохо - всегда моё творение является острозаточенным под Данный Конкретный проект.

Вопрос: Нет-ли у великого All каких-либо наработок, мыслей по вопросу создания фильтра с прицелом на универсальность решения.
- универсальное решение - построитель SQL текста (дорого)
- все остальные заточены под структуру данных
- фильтр это не то что выше (это ушедшие на клиент записи (без Join) не показываются на экране). Делают библиотеки клиента в автомате.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199377
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovА это как повезет. Либо додумается добавить/изменить условия, либо будет листать, матерясь на "тупую софтину".
Хм. Скажу так: с гибким фильтром у пользователя как минимум есть шанс "добавить условие и не материться на тупую софтину". С жестким фильтром кроме мата вариантов нет.

Alexey KudinovИ я считаю, что эту первоначальную выборку надо постараться сразу максимально сузить.
Это из серии маловыполнимых в общем случае благих пожеланий. Когда пользователь точно знает, что он хочет, он с первого раза устанавливает фильтр, возвращающий одну единственную нужную запись. Но так получается далеко не всегда.

Alexey KudinovЯ лишь призываю разумно ограничивать возможности пользователей в построении запросов и не давать возможность вводить все, что взбредет в голову.
Cогласен, возможно вопрос в терминологии, в понимании "разумно".

Alexey Kudinov softwarerНеобходимость реализации универсальных решений обусловлена главным образом тем, что это много эффективнее, нежели реализовывать частные решения. Я уверен, что вы и сами прекрасно знаете, что это далеко не всегда.
В данном конкретном случае, для которого я привел цифру чуть ниже.

Alexey KudinovЕще в самом начале моей карьеры, я видел как программист сделал универсальный фильтр и его каждый раз звали, чтобы он его настроил. Это "хороший" пример. Есть и "плохой". Я видел как сделаным фильтром вообще никто не пользовался, а просили просто по разному ограничить выборки в разных режимах. Наверное фильтры плохие были.
Согласен, все бывает. Бывают окна и приложения, которым фильтры вообще не нужны.

Alexey KudinovЭто была иллюстрация к необходимости удовлетворять нужды пользователей
Это скорее вопрос, что есть нужда пользователя, а что есть глупость-неграмотность его же.

модПоиск счета, в котором есть указанный товар - это и есть тупейший QBE.
Нет. Тупейший QBE - если счет ищется только по полям счета (заголовка счета).

модИ он покрывает n% потребностей юзеров,
Согласен. Вопрос в величине n и стоимости обхождения без 100-n.

модостальное - заранее написанными запросами-отчетами.
Хм. Вы уже второй человек в этом топике, который зачем-то сводит фильтры к отчетам. Нафига? Вот объясните, какого хрена мне - пользователю - запрашивать какой-то отчет только затем, чтобы распечатать его, по очереди искать указанные в нем документы, например по номерам счетов и что-то с ними делать, аккуратно вычеркивая номера с бумажки?
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199383
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Делают библиотеки клиента в автомате.
например ADOCommand в виде COM от MS
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199398
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль средыНу неужели у мудрого All нет мыслей как свести задачу Фильтрации/Поиска на уровень структуры.
Этих мыслей - хоть попой кушай. Говорили уже, в начале топика: не нужно это. Так появляется слишком много левых, ненужных практически вариантов, среди которых пользователю становится проблематично отыскать нужные. Разработчик, настраивая фильтр для работы в конкретном месте, должен оставить те возможности, которые будут реально востребованы. Внутренняя реализация при этом может и должна быть универсальной, опираться на те самую метаинформацию, просто потому, что это лучше: дешевле и надежнее с точки зрения реализации.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199474
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль среды Для удовлетворения страждущих я, всегда, рисую формочку, с Громким именем "Фильтр", на которой распологаю поля ввода дат, чисел, строк, перечислений...
Одно плохо - всегда моё творение является острозаточенным под Данный Конкретный проект.

Вопрос: Нет-ли у великого All каких-либо наработок, мыслей по вопросу создания фильтра с прицелом на универсальность решения.
еще раз :) Посмотрите устройство PSC (aka Dream Filter, aka...). Он содержит готовые механизмы для создания всего того, о чем Вы говорите и много дополнительных полезных функций. Вы какой инструмент используете для разработки?
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34199681
iscrafm Мысль среды Для удовлетворения страждущих я, всегда, рисую формочку, с Громким именем "Фильтр", на которой распологаю поля ввода дат, чисел, строк, перечислений...
Одно плохо - всегда моё творение является острозаточенным под Данный Конкретный проект.

Вопрос: Нет-ли у великого All каких-либо наработок, мыслей по вопросу создания фильтра с прицелом на универсальность решения.
еще раз :) Посмотрите устройство PSC (aka Dream Filter, aka...). Он содержит готовые механизмы для создания всего того, о чем Вы говорите и много дополнительных полезных функций. Вы какой инструмент используете для разработки?

Спасибо. Я записываю, записываю и, разумеется, все советы и отсылы к Готовым решениям посмотрю.

Пользую ORACLE и ряд прочего...

TO softwarer:
Внутренняя реализация при этом может и должна быть универсальной, опираться на те самую метаинформацию, просто потому, что это лучше: дешевле и надежнее с точки зрения реализации.

Спасибо.
Если правильно понял. То... Так наверное скажу.
Я и спрашивал о том где бы взять/как написать Нечто, во что можно, исходя из, конкретной задачи Впихнуть Метаданные.

Под финал:
Нет ничего лучше построителя запросов.
Один раз написал интерфейс.
Один раз написал табл. для хранения допустивых параметров и отношений
Один раз описал табл. для хранения готовых запросов.

В след. раз в новый проект впихиваем таблицы с известной структурой. В интерфейс вешаем готовую форму...

Как это сделать - это уже техника... :-)
Спасибо.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34200948
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerТупейший QBE - если счет ищется только по полям счета (заголовка счета).
На экране: поля заголовка счета + поля строки счета - все пусто - заполняем что хотим - выполняем - получаем список нужных счетов - Тупейший QBE.
зы. про отчеты действительно не в тему.
...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34201147
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
- универсальное решение - построитель SQL текста (дорого)
- все остальные заточены под структуру данных
- фильтр это не то что выше (это ушедшие на клиент записи (без Join) не показываются на экране). Делают библиотеки клиента в автомате.

- а та форма и есть построитель SQL текста.
- можно сделать очень даже автоматом анализирую отношения. Не так все это сложно.
- там получается резульат до 20 Join.
- допольнительная фильтрация и группировка от devex.

Вот код этого куска.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
        private void goButton_Click(object sender, EventArgs e)
        {
// Формирование запроса

            treeList2.CloseEditor();
            treeList2.EndCurrentEdit();

            DevExpress.XtraTreeList.Nodes.TreeListNode nodeLast = treeList2.MoveLast();
            DevExpress.XtraTreeList.Nodes.TreeListNode node = treeList2.MoveFirst();

            string[] table = new string[treeList2.Nodes.Count];
            bool[] tableV = new bool[treeList2.Nodes.Count];
            StringBuilder sb = new StringBuilder();
            StringBuilder sbk = new StringBuilder();
            int i =  0 ;

            if (node != null)
            {
                while (true)
                {
                    if (node.ParentNode == null)
                    {
                        table[i] = "[" + node.GetDisplayText(treeList2.Columns["Поля таблиц"]) + "]";
                        i++;
                    }
                    else
                    {
                        if (node.GetValue(treeList2.Columns["Вывести"]) != null)
                        {
                            if (node.GetValue(treeList2.Columns["Вывести"]).ToString() == "1")
                            {
                                sb.Append(table[i -  1 ] + ".[" + node.GetDisplayText(treeList2.Columns["Поля таблиц"]) + "]");
                                sb.Append(",");
                                tableV[i -  1 ] = true;
                            }
                        }
// Кусок подлежит доработке по части семантического анализа критериев и поисковых шаблонов
                        if ((node.GetValue(treeList2.Columns["Критерий"]) != null) &&
                            (node.GetValue(treeList2.Columns["Поисковые данные"]) != null))
                        {
//                            if ((node.GetDisplayText(treeList2.Columns["Критерий"]) != string.Empty) &&
//                                (node.GetDisplayText(treeList2.Columns["Поисковые данные"]) != string.Empty))
                            if (node.GetDisplayText(treeList2.Columns["Критерий"]) != string.Empty)
                            {
                                sbk.Append("(" + table[i -  1 ] + ".[" + node.GetDisplayText(treeList2.Columns["Поля таблиц"]) + "]" +
                                       node.GetDisplayText(treeList2.Columns["Критерий"]) +
                                       node.GetDisplayText(treeList2.Columns["Поисковые данные"]) + ") and ");
                                tableV[i -  1 ] = true;
                            }
                        }
//------------------------
                    }

                    if (node.Id.Equals(nodeLast.Id))
                    {
                        if (sb.Length >  0 )
                        {
                            sb.Replace(",", "", sb.Length -  1 ,  1 );
                            sb.Insert( 0 , "Select [Сотрудник].ИД,");

                            int k =  0 ;
                            sb.Append(" from ");
                            for (int j =  0 ; j < tableV.Length; j++)
                            {
                                if ((j ==  0 ) || (tableV[j]))
                                {
                                    sb.Append(table[j] + ",");
                                    k++;
                                }
                            }
                            if (k >  0 )
                            {
                                sb.Replace(",", "", sb.Length -  1 ,  1 );
                            }

                            if (k >  1 )
                            {
                                sb.Append(" where ");

                                for (int j =  1 ; j < tableV.Length; j++)
                                {
                                    if (tableV[j])
                                    {
                                        sb.Append("(" + table[ 0 ] + ".ИД="+table[j] + ".Сотрудник_ИД) and ");
                                    }
                                }
                                sb.Replace(" and ", "", sb.Length -  5 ,  5 );
                            }

                            if (sbk.Length >  0 )
                            {
                                sbk.Replace(" and ", "", sbk.Length -  5 ,  5 );
                                if (k ==  1 )
                                {
                                    sb.Append(" where");
                                }
                                else
                                {
                                    sb.Append(" and");
                                }
                                sb.Append(" " + sbk.ToString());
                            }
                        }

                        break;
                    }

                    node = treeList2.MoveNext();
                }
            }

            treeList2.CollapseAll();
            treeList2.MoveFirst();

// Формирование ДатаТейбл
            if (sb.Length >  0 )
            {
                System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.HRConnectionString);
                System.Data.SqlClient.SqlDataAdapter adp = new System.Data.SqlClient.SqlDataAdapter(sb.ToString(), con);
                con.Open();
                DataTable dt = new DataTable("Результат");
                adp.Fill(dt);
                con.Close();
                gridControl4.DataSource = dt.DefaultView;
                gridView4.PopulateColumns();
                gridView4.Columns["ИД"].Visible = false;
                gridControl4.Focus();
            }
            else
            {
                DataTable dt = new DataTable("Результат");
                gridControl4.DataSource = dt.DefaultView;
                gridView4.PopulateColumns();
            }
        }


...
Рейтинг: 0 / 0
Фильтр универсальное решение
    #34201256
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль среды...При работе с СУБД всегда есть необходимость чё-нить искать. Проклятущие пользователи всегда хотят разномастных выборок. Для удовлетворения страждущих я, всегда, рисую формочку, с Громким именем "Фильтр", на которой распологаю поля ввода дат, чисел, строк, перечислений...Одно плохо - всегда моё творение является острозаточенным под Данный Конкретный проект.Вопрос: Нет-ли у великого All каких-либо наработок, мыслей по вопросу создания фильтра с прицелом на универсальность решения.

приходилось делать следующее...
в формочке фильтра показывались связи, ограничения (если то показываем, то это уже засерили для выбора), поля, таблицы...пользователь выбирал из имеющегося...инфа бралась с одной-двух таблиц, где описывалась необходимая инфа...плюс к этому вспомогательная инфа типа поле показа, поле сортировки, преобразование данных (енумерэйт какой нить), куда прижимаем, связи между таблицами (пути связи - таблицы и поля связи) и куча ышо всякой инфы...

я не буду спорить по поводу секьюритей, правильно ли это и прочее...
но чертовски удобно сапортить, добавляя при модификации БД данные в такую таблицу (ну ессесвенно проверять нуна)..а не спуская план на программеров, тестировщиков, инсталяторщиков, сапортчиков и т.д...
время...время господа..время - деньги...

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Фильтр универсальное решение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]