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

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

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


JaneKate

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


JaneKate

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


JaneKate

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


JaneKate

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