|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Здравствуйте. Подскажите пожалуйста - В табличной форме одно из полей - поле со списком связанное с таблицей в которой может быть несколько сотен записей. Выбирать значение из списка заманаешься. Фильтровать по вводимым символам тоже не выход, особенно если не знаешь что имеется в исходной таблице. Наилучшим выходом вижу выбор из вспомогательной формы в которой можно было бы вывести записи в виде какого-то структурированного списка. Но как это сделать представляю плохо -т.к. в базах данных вообще и программировании в частности не очень хорошо разбираюсь к сожалению. Видимо должна быть какая-то всплывающая форма с передачей значения из это формы по клику мышкой, или по кнопке в исходное поле. Может кто-нибудь показать пример подобного решения? Или предложить что-нибудь более подходящее? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 03:22 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Для удобства вам надо разбивать информацию на "составляющие" и хранить в разных таблицах, связанных между собой с отношением "один ко многим". В форме ставите несколько полей со списком, каждый из которых берёт данные из своей таблицы с ограничением по другим полям со списком. Грубый пример: есть зал с кучей народа, одним списком. Вы сделали разбивку и теперь последовательно выбираете критерии: мужчина/женщина, старик/взрослый/ребёнок, брюнет/шатен/блондин. Таким образом выбором пары категорий вы быстро определите маленький список, в котором легко найдёте искомое. Такой тип разбивки, если не ошибаюсь, вы можете изучить в "Борее". Если дадите пример пары записей из вашего поля, попробую подсказать критерии разбивки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 06:19 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Ну и вдогонку еще, что бы отдельную тему не создавать - на форме имеется две подчиненные формы. При перемещении по записям одной подчиненной формы записи другой должны фильтроваться. Поставил на событие Текущая запись одной подформы код типа: Код: vbnet 1. 2. 3. 4.
Но при первой загрузке основной формы выдается ошибка чтения/записи. Если же ее игнорировать то далее все работает нормально. В чем проблема? И как ее избежать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 06:27 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Спасибо. Я понимаю о чем вы. Теорию плотно читал, в том числе и на этом форуме. Практики нет. Таблицы уже вроде как разбил и схему данных сделал. Вопрос по выбору из поля со списком которое связано с уже готовой таблицей. Ее дальше разбивать некуда. Ну например таблица "поставщики". В форме "счета" имеется поле со списком в котором выбираются поставщики, а их много. Ну или в том же счете есть "товары/услуги", для которых существует отдельная таблица - перечень. И там позиций еще больше чем в таблице поставщиков. Выбор в "счетах" (вернее в "составе счета") реализован так же через поле со списком. Неудобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 06:37 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristВ чем проблема? И как ее избежать?Есть старый трюк. На Главной форме добавляешь поле (невидимое), в него прописываешь в данных "=ИмяСубформыСодержащейВедущуюФорму.Form!iEquipment" , естественно используешь свои названия. Потом в свойствах у контрола подчинённая форма, который содержит ведомую форму, в "подчинённых полях" ( LinkChildFields ) указываешь " iEquipment ", а в "основные поля" ( LinkMasterFields ) имя твоего текстового поля. Всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 06:41 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 06:42 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
ПанургЕсть старый трюк. Обалдеть. Сработало! Спасибо! Еще бы по основному вопросу такое простое решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 06:59 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristЕще бы по основному вопросу такое простое решение. тебе же предложили вполне решение 19582336 . В любом случае нужно что-то делать со списком - разбить на блоки. А выводить это уже потом, связанные списки там будут или форма. Я как-то даже в выпадающий список дерево (TreeView) запихивал... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 07:14 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabrist, смотрю образец вашего счёта, поле "Наименование". И ясно вижу, что ни разу инфа в этом поле не "Ее дальше разбивать некуда". Или мы друг друга не поняли ;) У вас кроме неудобства визуального - перегруз таблиц дублирующейся инфой. Например, пример разбивки: тип оборудования (условно): Конденсатор; Заклёпка; Эл.двигатель. В отдельной таблице - маркировка, один или два параметра. Вот у меня компьютерный магазин - там вообще на 4 категории разбито. В большинстве случаев - хватает три категории. Вот визуальный пример реализации (поле "Изготовитель" раскрыто для наглядности: А на второй картинке - образец схемы: ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 07:44 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Tarasios, упс, первая картинка отвалилась, кидаю заново ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 07:45 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
по нескольким полям ты легко находишь нужную позицию, а уже в отчётах или где там надо она легко "сшивается" по необходимости из нескольких полей в одну строчку ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 07:48 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristВыбирать значение из списка заманаешься. На форме дополнительно чек бокс и поле фильтра В запросе источнике записей списка добавить сам чек бокс из формы поставить две пары условий: Если чек бокс Да то у фильтруемого поля условие Like "*" & поле фильтра & "*" Если чек бокс Нет то у фильтруемого поля нет условия В событиях после обновления чек бокса и поля фильтра поставить Requery на Список Результаты превзойдут все ожидания... DecabristНо при первой загрузке основной формы выдается ошибка чтения/записи. Если же ее игнорировать то далее все работает нормально. В чем проблема? И как ее избежать? Ответ в самом вопросе: Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:04 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
vmag, [b] в коде зачеркнуть везде (хотел выделить жирным) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:05 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
[quot Tarasios]Decabrist, смотрю образец вашего счёта, поле "Наименование". И ясно вижу, что ни разу инфа в этом поле не "Ее дальше разбивать некуда". /quot] Это бухгалтерская таблица (или того кто будет заниматься учетом прихода/расхода). Я одно время работал с бухгалтерами и понял одно - как им ни делай они будут вносить так как написано в документе. В одну строку. И им наплевать на то что это, где это и т.п. Кроме того таки данное поле основано на запросе, в котором поля [наименование] и [единицы измерения] суммируются. Разделение по колонкам, так как у вас происходит дальше, на уровне технического специалиста. Вот у него уже четко все разбито по наименованиям/обозначениям/единицам измерения/характеристиками и т.п. Давайте приведу другой пример... из того же что и выше: ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:08 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Вот из той же серии как это выглядит в форме с регистрацией счетов, и как это выглядит в таблице. Вы видите что поле является суммой полей [наименование] и [город] Выбирать отдельно город, а затем фирму поставщика - не факт что тот кто будет это делать знает в каком именно городе находится эта фирам. Выбирать фирму - не факт что не найдется одноименных. Поэтому сделано так. Допустим поставщиков несколько сотен... да пусть даже десятков. И что крутить их в поле со списком до тех пор пока не найдется нужное? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:17 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
и таблица: ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:17 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Ну а вот на минуточку таблица технического специалиста, как раз так как вы говорили. И это разные таблицы с бухгалтерией - потому что те внести могут абы как (как в счете указали так и будет), а у технаря все будет четко и однозначно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:24 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
vmag На форме дополнительно чек бокс и поле фильтра В запросе источнике записей списка добавить сам чек бокс из формы поставить две пары условий: Если чек бокс Да то у фильтруемого поля условие Like "*" & поле фильтра & "*" Если чек бокс Нет то у фильтруемого поля нет условия В событиях после обновления чек бокса и поля фильтра поставить Requery на Список Вариант хороший. А с всплывающей формой, в которой нашел, ткнул кнопку и оно в списке отобразилось никак? А вдруг тут же еще и добавить новую запись надо в ту же форму? Я вот к чему подвожу. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 09:35 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabrist, Дословно не помню, но как-то так:"если в таблице поле имеет одно и то же значение во многих записях-её следует разбить" Посмотрите как это сделает мастер анализа таблиц. Кстати об этом Вам уже говорили 19582336 ("Эл.двигатель" в поле "наименование") ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 11:51 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristВариант хороший. А с всплывающей формой, в которой нашел, ткнул кнопку и оно в списке отобразилось никак? А вдруг тут же еще и добавить новую запись надо в ту же форму? Я вот к чему подвожу. Да всё так же, и на подводной лодке тоже будет работать, можно галочку даже не использовать, а в выражение добавить это же поле поиска, если в поле поиска NULL, то без условия отбора, а если есть значение, то его же (поле) и в условие отбора. Просто есть вопрос и есть совет, рассказывать про всплывающие формы, параллельно работающие формы и т.д. как-то в планы не входит... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2016, 18:46 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Хорошо давайте так сформулирую конкретную задачу. Необходимо 1. по правой кнопке мыши на поле со списком и выборе соответствующей команды меню вывести форму с таблицей, к которой привязано это поле со списком. Затем, после выбора нужной позиции во всплывшей форме мышкой, либо по кнопке на той же форме - форма должна закрыться, а выбранная позиция должна отобразится в поле со списком. основной вопрос здесь не столько вывод формы, это понятно DoCmd OpenForm сколько о том как передать значение в исходный список. 2. Та же задача что и в п.1 но вместо выбора надо добавить новую запись в исходную таблицу, которая затем должна отразится в поле со списком. помимо вопроса выше, здесь добавляется новая проблема. В поле со списком новая запись отсутствует, до тех пор пока я не закрою форму, и не открою ее заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2016, 09:43 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
sdkuDecabrist, Дословно не помню, но как-то так:"если в таблице поле имеет одно и то же значение во многих записях-её следует разбить" Посмотрите как это сделает мастер анализа таблиц. Кстати об этом Вам уже говорили 19582336 ("Эл.двигатель" в поле "наименование") А кто вам сказал что это значение не вынесено в отдельную таблицу? ;) Ну вообще да, не вынесено. Т.к. "эл.двигатель" это частный и достаточно редкий случай и видно их друг за другом несколько записей только потому что внес их туда друг за другом за один раз. Таких отдельных частных случаев хватает конечно (заклепки, провода и т.п), но я пока не вижу смысла делать для этого целую отдельную таблицу наименований. А вот поле "группа" - к примеру как раз таки отдельная таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2016, 09:50 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabristосновной вопрос здесь не столько вывод формы, это понятно DoCmd OpenForm сколько о том как передать значение в исходный список. Добавлю. Я могу написать код в котором по событию (клик мышки, клик кнопки) будет меняться значение поля в конкретной форме. Через обращение CurrentProject.Allforms Но мне кажется это фиговый выход. Т.к. эту форму, как отдельную я потом не использую - она будет пытаться изменить значение поля в заданной, возможно даже закрытой на тот момент форме. Ну не программист, извините. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2016, 10:01 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabrist, думается мне, что вам будет удобнее сделать так. В форме делаете "Поле1", куда вводится часть наименования (что помнится) товара или фирмы (смотря, какой список поле обслуживает). Рядом в форме разместите небольшой "Список", строк на 10-15. Именно элемент список, а не поле со списком. В этом списке отображается результат выборки данных по совпадающей части с значением поля "Поле1". Конструкция с Like это делает элементарно. То есть, вводите в "Поле1" буковки до тех пор, пока по всё большему совпадению в "Список" выборка данных не сократится до нескольких строчек. После чего уже не трудно тыкнуть в нужную запись и обработать её. Таким образом вы избавляетесь вообще от прокрутки (хотя Список можно снабдить вертикальным скроллом) и получаете возможность фильтрации и поиска. Другой вариант, кардинальный. Если у вас уже фактически есть нормально заведённая база с удобной и правильной разбивкой данных по полям, то идя на поводу у бухгалтерии, вы делаете дурную и никому не нужную работу. Бухгалтерия - это участок, который просто ОБСЛУЖИВАЕТ некое предприятие, причём ОБЯЗАНА вести свою работу по критериями и стандартам этого предприятия. И в масштабах предприятия тупо не выгодно, а порой и вредно подстраиваться под тупые хотелки каждого отдельного участка. Понятно, что бухгалтерия любой конторы - та ещё мафия, которая свято стоит на страже своих "свобод" и привычек ;) Но тут уже зависит от руководства. Если вы предоставили руководству логичный и грамотный анализ проблемы, с уже готовым решением (в данном случае - если вы объяснили руководству принципы и плюсы общей стандартизации), но руководству либо пофигу, либо он идёт на поводу бухгалтерии - то вам ничего не светит в этой конторе. Даже являясь убер-программистом, вы никогда не сможете обеспечить реализацию очередной хотелки очередной ленивой тушки и потом синхронизировать с остальными хотелками ;) Мало того, ваш эпический труд никогда (от слова вообще) не будет оценён под достоинству. А неизбежные косяки в ваших стараниях будут подаваться руководству как ваша персональная тупость и криворукость. И поверьте - все минусы перехода на другую работу в сумме дадут гораздо меньше геммора ;) Если коротко, то простая логика выглядит так: Если где то есть кучка принципиальных серунов, любящих гадить мимо унитаза, то варианты действий у вас такие: 1. Бегать и постоянно за ними всё подчищать, придумывая автоматизацию этого процесса ;) 2. Дать по башке этой кучке избранных, которые "так привыкли и не собираются ничего менять", заставив делать как надо и куда надо. Можно самому, если хватает умений, либо через директора. 3. Поменять серунов на нормальных, которые обязуются и могут выполнять правила предприятия 4. Уйти в другую команду, оставив руководителя с его командой избранных. По роду своей работы, прошлой и настоящей, я очень много работаю с начальством, бухгалтерами, и остальными работниками. И стараюсь донести руководству, что автоматизация (магазинов, например), это не просто замена калькулятора на компьютер, а вообще другой подход плюс тотальный контроль на каждом участке. Сколько слёз, соплей и истерик мне довелось увидеть... (Даже когда у себя в магазине делал автоматизацию - хватило за глаза. Зато позволило выявить механизмы вороства). Что характерно: где руководство ХОЧЕТ иметь нормальный процесс и МОЖЕТ напрячь людей - резко падает кол-во непоняток, недостач, криков, скандалов и наездов на "тупого программиста, у которого программа сама что то не так делает". А есть конторы, где каждый переучёт сопровождается перекрикиванием руководства (давай плати!) и виноватых (ничего не знаю, оно само, а у меня дети/кредит/больная мама и т.д.). И не смотря на всяческие ухищрения с моей стороны как программиста на предмет выявления и отслеживания махинаций персонала - из года в год одни и те же лица, одни и те же "аргументы" с обеих сторон, только суммы растут ;) Как то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 01:21 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Tarasios, вы в 1С работали? Вы видели каким образом туда вносятся данные о товарах? Я понимаю разные формы там могут быть наверное (сам я в 1С не работал). Но вот только что ходил в соответствующий отдел смотрел как и что туда вносится. Два поля "Наименование" и "Полное наименование". В "Полное наименование" хреначат просто фффсё. И никого не колышат мои хотелки. Это система. И она точно такая же на других предприятиях. Вы мне уволится предлагаете? ))) Кажется это самый распространенный совет на этом форуме. Я не говорю что эта система правильная, и я буду делать только так и никак иначе, я просто пытаюсь к ней приспособиться но в конечном итоге сделать так как мне надо. И я это сделаю. Нужны не отвлеченные рассуждения, а конкретные ответы на конкретный вопрос, который я задал одним сообщением выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 04:42 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
тремя сообщениями выше ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 05:06 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabrist, так я дал своё видение реализации ответа на ваш вопрос. Или надо с конкретным работающим примером? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 05:33 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Не нужно, я понял. Мне кажется со списками будет все громоздко. Особенно если подобных полей не одно. Вообще хотелось какую-то вариативность. Хочет пользователь - набирает в поле сочетание символов, по этим символам содержимое поля фильтруется. Я так уже делал когда-то. Не знает что ищет - желает посмотреть - правый клик мышкой по полю со списком, меню, открываем форму со всеми значениями (присоединенными к полю со списком) так как они записаны в базе. Скроллит, находит что нужно, тыкает - форма закрывается, а значение остается в поле со списком. Ну или не находит и добавляет новую запись, которая затем и отображается в поле со списком. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:25 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
По последнему варианту хрен знает как это правильно сделать, не понятно как передавать значение из формы в форму так что бы потом проблем не было, но реализовать так хотелось бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:27 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
TarasiosИменно элемент список, а не поле со списком А чем лучше просто список выпадающего списка? Только место занимает. Я давно использую для выбора из огромных списков со сложными названиями класс для комбобокса, который реализует гуглоподобный поиск при вводе: начинаем набирать текст в комбобоксе, после заданного минимального числа символов (обычно 2) включается таймер, и как только пользователь превысил заданную паузу, список автоматически раскрывается, показывая только элементы, содержащие введенные символы. Далее, если пользователь ввел пробел и продолжил ввод, то поиск идет уже по двум элементам и так далее. Если в списке остался только один элемент, то он может быть выбран автоматически, в зависимости от настроек класса. Быстродействие такого способа очень хорошее - даже на разделенной базе с бэкэнодом на сетевом диске при общем количестве элементов порядка 10000 задержек практически не заметно. Если нужно, могу поделиться классом, цепляется двумя командами к любому комбобоксу. Ну и запрос для комбобокса должен быть сделан по определенным правилам. Если пользователь вообще не знает, с чего начать при выборе данных, может просто раскрыть полный список и посмотреть, что там, но это не удобно для очень больших списков, поэтому можно реализовать своего рода помощь начинающему: по даблклику на комбобоксе открываем справочную форму с базовыми элементами, после выбора одного или нескольких базовых элементов подставляем в комбобокс ключевые элементы и раскрываем список, он будет содержать строки только с выбранными ключевыми элементами ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:30 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabristне понятно как передавать значение из формы в форму так что бы потом проблем не было А какие проблемы с передачей? Я использую для передачи параметров между формами OpenArgs для передачи входящих параметров, где параметры идут в виде списка "ключ1=значение1|ключ2=значение2", принимающая форма открывается в виде модального диалога. Если в коде предполагается открывать диалог более одного раза, то создаю функцию, если один раз, то просто напрямую. Обратная передача параметров - диалог не закрывается, а делается невидимым, выполнение кода продолжается после команды открытия формы, там мы считываем возвращаемые параметры из полей формы или из созданных там свойств и закрываем диалог. Ссылку на открывающую форму в открываемую при необходимости также передаю через текст в OpenArgs - в виде текстового пути "форма>подформа>подформа". Это, правда, не работает с формами, открытыми как инстанс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:50 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
MrShin, интересный подход. Может даже, он идеален. И если выложите в доступ, буду благодарен. Но может выявиться некое противоречие: если мы исходим из того, что пользователь - не мы с вами, а является типичной бухгалтершей (условно), стремление которой к изучению новых методик стремится к нулю (а может - и сама способность к изучению), то такой подход может оказаться для неё слишком сложен. Это же изучить и осознать, что надо начинать набирать часть слова (а его ещё и вспомнить ведь надо, а там тысячи позиций), потом нажать пробел, потом опять буковки тыкать... А потом тыкать на найденное значение... А ещё ведь есть альтернативный способ поиска, скроллингом, а это ещё позиции знаний, которые надо изучить ;) Уверен, что вам встречалось множество таких юзеров, с реакций на необходимость что то менять и учить - даже если для вас это элементарно - от простых слёз до откровенного саботажа ;) Тут уже вопрос к психологам, но факт есть факт: подавляющее кол-во людей все силы готовы потратить на защиту от изменений своего маленького и привычного мирка, даже если эти изменения ничтожны и реально им на пользу пойдут ;) Потому то я где то и ратую за реализацию замены длинного списка с пусть даже с хитрым поиском - на последовательный выбор по иерархии (Группа, подгруппа, позиция): максимум примитивизма, простейший алгоритм действий, максимум защиты от левых движений пользователя. В каждом блоке - выбор из небольшого списка (если получается все равно слишком много позиций в одной категории - значит, надо ещё больше дробить, добавлять кол-во веток иерархии). Во всяком случае, такой метод много раз испытан и вопросов не возникает. Ну разве что некоторые привыкли к пользованию классическим "деревом". ПыСы: пока не протестируешь всё на "бибизянках", то есть - юзерах, и не получишь их отзывы - любое самое идеальное решение - является просто предметом академического спора программеров ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 07:09 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Вот пример. Описание в заголовке класса. Окно таймера используется для того, чтобы не использовать таймер основного окна, т.к. он может быть занят другими задачами. Приложениями, использующими этот контрол пользуются операторы, далекие от ИТ, типа бухгалтерии или склада, проблем с освоением не возникало, достаточно сказать в двух словах как пользоваться или подсказку для контрола заполнить ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 11:03 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Пришлось на некоторое время прерваться.. MrShin А какие проблемы с передачей? Я использую для передачи параметров между формами OpenArgs для передачи входящих параметров, где параметры идут в виде списка "ключ1=значение1|ключ2=значение2", принимающая форма открывается в виде модального диалога. К сожалению я в программировании не силен. Программирую что-то когда необходимость вынуждает. С этим параметром не работал ни разу, и пока не очень представляю как его использовать в моем случае. Еще судя по вашему описанию - вы подразумеваете нечто другое. Принимающей формой у меня является как раз инициирующая запрос форма. Т.е. например имеем на форме комбобокс на которые повешено 100500 значений. Работать с таким "списком" нормально не возможно. Отчасти это решаемо путем фильтрации списка при вводе символов пользователем, но если пользователь не знает что ищет - это не решение проблемы. Необходимо по какому то действию (двойной щелчек на контроле) - вывести форму со списком всех значений, а так же с элементами управления, фильтрации, группировки и т.п. Здесь ничего сложного не вижу - по событию (двойной клик мышкой) DoCmd.OpenForm. А вот дальше мне не понятно. Ну нашел пользователь нужную ему запись - ткнул на нее... как сделать так что бы эта запись отобразилась теперь на первой, инициирующей форме в комбобоксе? Вообще нужно ли для этой операции создавать полностью отдельную форму? Я надеялся использовать независимо существующую форму для просмотра и редактирования списка. Ваш пример с комбобоксом скачал и проверил, у меня выдает ошибку и требует переделать код под 64х битную систему. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 05:36 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Пока сделал так: Инициирующая форма с комбобоксом, по двойному клику мышкой на контроле: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Форма со списком элементов комбобокса по двойному клику мышкой на контролах всех полей (знаю что криво, но лучше пока не придумал, так что бы клик срабатывал на всей записи в любом поле единой процедурой не получается): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Как бы еще добавить в код проверку открыта ли форма в виде диалога, или самостоятельно. Так что бы при открытии самостоятельной формы никаких действий по скрытию формы не производить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 08:28 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristНу нашел пользователь нужную ему запись - ткнул на нее... как сделать так что бы эта запись отобразилась теперь на первой, инициирующей форме в комбобоксе? Я обычно для модальных диалогов, которые должны возвращать одно или несколько значений использую функции, подобные той, что приведена ниже. В основной форме по двойному щелчку вызываем эту функцию, если она вернула истину, то присваиваем измененную переменную комбобоксу. В диалоге вместо закрытия скрываем его, закрывается он уже в функции, после получения необходимых данных из диалога: Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 09:43 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristКак бы еще добавить в код проверку открыта ли форма в виде диалога, или самостоятельно. Проверьте, есть ли Parent у формы. Есл есть, то она открыта как субформа: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 09:47 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristВаш пример с комбобоксом скачал и проверил, у меня выдает ошибку и требует переделать код под 64х битную систему. Добавил поддержку 64 бит ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:06 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
MrShin, Я правильно понял форма открытая как acDialog уже является подчиненной, и имеет родительскую (Parent) форму? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:14 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:19 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristЯ правильно понял форма открытая как acDialog уже является подчиненной, и имеет родительскую (Parent) форму? Нет, это отдельная форма, acDialog обеспечивает только модальность этого окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:37 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Т.е. в данном случае проверить в каком режиме открыта форма нельзя? В принципе не вопрос, я могу сделать копию существующей формы со списком модифицировать ее в части взаимодействия с вызывающей формой и использовать эту копию в данной конкретной ситуации. Приложение очень маленькое, путаницы в дальнейшем быть не должно. Но такой подход, думается, не корректен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:43 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristА вот дальше мне не понятно. Ну нашел пользователь нужную ему запись - ткнул на нее... как сделать так что бы эта запись отобразилась теперь на первой, инициирующей форме в комбобоксе?Вот, увидев впервые на работе, подумал, что ленточные формы с окошком на каждом поле с выбором вида фильтра (начинается, кончается, входит, равно, не равно...) и самого значения фильтра, а также с галочками сортировки по каждому полю - простая и чрезмерная угодливость заказчику. А на практике, где ежемесячно сотни тысяч записей, где данными пользуются разные службы и подразделения, оказалось совсем даже удачно. Конечно же, предусмотрены рабочие формы для имеющих права редактирования, отчеты по отобранным значениям, экспорт в Excell, просмотр самого фильтра в текстовом виде и т.д. и т.п. И комбобоксы оказались совсем ненужными по сравнению с этими окошками. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 11:21 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1613118]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 365ms |
total: | 526ms |
0 / 0 |