|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=45&msg=39296765&tid=1613118]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 369ms |
total: | 516ms |
0 / 0 |