Выбор значений из справочника

JaneKate

Здравствуйте!Есть форма, куда пользователь вносит данные о новой покупке.Необходимо сделать так, что бы по нажатию некоторой кнопки на этой форме появилялась другая форма вида "datasheet" (таблица), в которой отображался бы весь список возможных товаров (справочник товаров) и юзер по двойному нажатию на строку с нужным товаром выбирал таким способом покупаемый товар, после чего форма со справчоником товаров закрывалась и в форме новой покупки отобразились данные о выбраном товаре.З.Ы. Такое чувство, что вопрос очень тривиален..., но никак не могу найти решения. Спасибо!
24 ответа

JaneKate

JaneKate, ты Новый Год не отмечаешь???


JaneKate

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


JaneKate

постановка задачи изначально не правильная.берешся за реализацию, а первоначально надо продумать , как будет работать оператор, попробуй поставить задачу иначе.решений тут куча, но если не можешь найти - значит не правильно ставишь вопрос, первоначально для себя.
дык, ТС, как раз так и описывает "ситуацию", как со стороны "пользователя"/оператораи, имхо, ТС когда-то "видел 1Це", вот и такое представление о решении (я не говорю, что плохое, - просто "1совское")---
Такое чувство, что вопрос очень тривиален...,
он (вопрос) - не сложный, но "он" просто не такой "элементарный" как это было бы в 1С - там бы вы просто указали полю, что это "выбор из заданного справочника", и всё "программирование"в Аксе, таки, 3-и строки кода написать прийдётся :)1>> по нажатию некоторой кнопки на этой форме появилялась другая форма вида "datasheet" (таблица), в которой отображался бы весь список возможных товаров (справочник товаров)
docmd.openform "ФормаСправочника", acFormDS, , , , acDialog
2>> юзер по двойному нажатию на строку с нужным товаром выбирал таким способом покупаемый товар, после чего форма со справчоником товаров закрывалась и в форме новой покупки отобразились данные о выбраном товарев "двойному нажатию на строку с нужным товаром "
With Forms!ЦелеваяФорма
.Recordset.addnew
.КодТовара = Me.КодТовара
end with
docmd.close acform, me.name
3всё


JaneKate

2 qwerty112Все-таки в 1це есть что-то хорошее!!!А как выбрать товар не двойным кликом, а ENTERом?


JaneKate

Спасибо!Только вот не пойму, зачем добавлять ід в рекордсет, во-первых, все работает и без рекордсет'а, во-вторых, если юзер выбрал товар, но решил выбрать другой, то записать этот другой в рекордсет не удается, очевидно его нужно как-то очистить, что не удается.


JaneKate

Спасибо!Только вот не пойму, зачем добавлять ід в рекордсет, во-первых, все работает и без рекордсет'а, во-вторых, если юзер выбрал товар, но решил выбрать другой, то записать этот другой в рекордсет не удается, очевидно его нужно как-то очистить, что не удается.
нет в моём коде "добавлять ід в рекордсет"это (выделил)
With Forms!ЦелеваяФорма
.Recordset.addnew
.КодТовара = Me.КодТовара
end with
просто переход на "новую" строку в целевой форме>> если юзер выбрал товар, но решил выбрать другойну, да, в таком случае - переходить на новую запись ненужно, уберите


JaneKate

2 qwerty112Все-таки в 1це есть что-то хорошее!!!А как выбрать товар не двойным кликом, а ENTERом?
дык, "хорошее" - есть, конечно"структурный", так сказать, подход, который в 1с используется (разделение на справочники / документы / регистры) - это даже "очень хорошо",в учётной системе, я по другому и не представляю как бы можно было делать ...но этот "ихний язык", эти "объекты" всегда и везде, "на ровном месте", это "кручение" рекордсета вечное, что бы найти/перейти на нужную запись - это "полный ахтунг" !зыно я только с 7.7. дело имел,говорят в 8.х - получше стало, так что "в серьёз" меня воспринимать не нужно :))


JaneKate

но я только с 7.7. дело имел,говорят в 8.х - получше стало, так что "в серьёз" меня воспринимать не нужно :))
Я тоже.Так как же ENTERом строку выбрать?


JaneKate

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


JaneKate

Я тоже.Так как же ENTERом строку выбрать?
Me.KeyPreview = True
Private Sub Form_KeyPress(KeyAscii As Integer)
 If KeyAscii = 13 Then
 MsgBox "!"
 End If
End Sub


JaneKate

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


JaneKate

А количество записей в комбике случайно не имеет предел?
Даже если и да, он гораздо больше, чем то количество записей, при котором становится банально неудобно пользоваться хоть комбобоксом, хоть отдельной формой. Если записей очень много, то надо подумать о механизме поиска, о котором пока ничего не спрашивалось.


JaneKate

Даже если и да, он гораздо больше, чем то количество записей, при котором становится банально неудобно пользоваться хоть комбобоксом, хоть отдельной формой. Если записей очень много, то надо подумать о механизме поиска, о котором пока ничего не спрашивалось.
да, так оно и есть, если исходить из "заказа" ТС ("другая форма вида "datasheet" (таблица), в которой отображался бы весь список возможных товаров (справочник товаров)")но и в этом случае, плюсы в подходе с формой выбора есть :- на форме нет "тяжелого" ПСС, а есть только поле с "Наименованием", поэтому форма будет загружатся значит.быстрее,а чаще всего форму открывают на просмотр, а не на ввод/редактирование- на форме могут быть несколько однотипных полей выбора (билет - "станция отправления" / "станция получения")соотв. или 2-а "тяжелых" ПСС или одна форма выбора, работу с которой, в конце концов, можно оформить в виде функции и использовать везде (единообразно, короче)нуу, и если забить на тезис с "другая форма вида "datasheet" (таблица)", а сделать "нормальную" форму с фильтрами, (а в случае со спр.Товаров - с деревом группТоваров), то и работать будет пользователю по-проще - всё сводится к "мышкокликам" - никакой "писанины" или поиска по 100500 записям в ПСС


JaneKate

Все работает. Спасибо!Но вот новая проблема:в базе есть таблица "другое", где хранятся названия назначений товаров, типы улиц (улица, проспект, бульвар и т.д.), разные там значения, короче, всякие дополнительные данные, собранные в один справочник. Эта таблица связана с несколькоми другими таблицами.На форме есть поле, которое отображает назначение выбранного товара и поле, которое отображает тип улицы отделения, где находится товар, оба значения берутся с одной талицы "другое", но никак не удается на одной форме отображать и то и другое из этой таблицы, отображается что-то одно в двух полях, как разделить эти миры и народы? Разные манипуляции с синонимами приводят к ошибкам.Спасибо!


JaneKate

Все работает. Спасибо!Но вот новая проблема:в базе есть таблица "другое", где хранятся названия назначений товаров, типы улиц (улица, проспект, бульвар и т.д.), разные там значения, короче, всякие дополнительные данные, собранные в один справочник. Эта таблица связана с несколькоми другими таблицами....
нужно эту таблицу добавить в запрос-источник формы столько раз, сколько разных "типов" "другого" она должна оторбразитьзы
где хранятся названия назначений товаров, типы улиц..., разные там значения
вообще, подходец - "не очень" ...что вы этим выиграть собрались ? - вам ограничили кол-во созд.таблиц ?


JaneKate

qwerty112,База досталась в наследство...


JaneKate

нужно эту таблицу добавить в запрос-источник формы столько раз, сколько разных "типов" "другого" она должна оторбразитьзывообще, подходец - "не очень" ...что вы этим выиграть собрались ? - вам ограничили кол-во созд.таблиц ?
Я пробовал добавлять (при этом таблица получает к имени инкремент), но потом начинают возникать ошибки в том числе "Join key of table 'XXX' not in recordset".


JaneKate

Я пробовал добавлять (при этом таблица получает к имени инкремент), но потом начинают возникать ошибки в том числе "Join key of table 'XXX' not in recordset".
нуу, плохо, чо ...где запрос ?!


JaneKate

я ведь не зря так ответил.потому как, если поставить вопрос по-другому будет и решение другое, более правильное .а так ТС сделает , и будет нечто подобное 1С.а в 1С выбрать товар - я б сказал очень затратно по времени.я давно рекламирую поиск по like для таких целей. (даже выкладывал функцию lik)прошу поверить на слово, а Odess подтвердит.недавно проверял на выборе товара из 700 000 наименований - практически "многовенно"


JaneKate

нуу, плохо, чо ...где запрос ?!
Все отлично, разобрался сам, хотя пару раз форма рушилась.Спасибо за помощь! Приятно, что на форуме есть люди которые могут просто помочь.


JaneKate

я ведь не зря так ответил.потому как, если поставить вопрос по-другому будет и решение другое, более правильное .а так ТС сделает , и будет нечто подобное 1С.а в 1С выбрать товар - я б сказал очень затратно по времени.я давно рекламирую поиск по like для таких целей. (даже выкладывал функцию lik)прошу поверить на слово, а Odess подтвердит.недавно проверял на выборе товара из 700 000 наименований - практически "многовенно"
Дайте ссылочку, а то в форме справочнике товаров хочу реализовать поиск таким образом, что бы юзер в одно поле ввел отрывки слов искомых объектов и в итоге получмл совпадающие данные. Например юзер ввел: "велос крас карб" и в итоге получил 2 результата- товар: велосипед; цвет: красный; рама: карбон; производитель: Shimano- товар: велосипед; цвет: красный; рама: карбон; производитель: Comanche


JaneKate

Чем не угодил обычный комбобокс?
В случае отсутствия элемента в справочнике (появился новый товар) его можно сразу добавить в справочник. При использовании комбобокса надо открывать форму и добавлять туда.


JaneKate

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


JaneKate

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