|
16 Кб. |
|
| наверное просто, но не пойму, как организовать програмно, хотя алгоритм ясен
в базе 2 таблицы:
Расчеты и Заказы связанные один ко многим
таблица Расчеты содержит кучу сохраненных расчетов
нужно, чтобы юзер на ленточной форме ставя флажоки формировал заказ из тех или иных просчетов (это может быть или одна позиция или несколько выбранных)
при этом нужно в таблице Заказы сформировать ОДНУ запись с новым номером заказа, ну и этот номер заказа впихнуть в таблицу Расчеты
буду признателен за предложенные варианты | |
|
| |
|
|
|
| А "расчёты"
это уже готовая отдельная таблица с фиксированно набранными данными? | |
|
| |
|
|
21 Кб. |
|
| может так? | |
|
| |
|
|
|
| не..не то
это класический способ построения форм на основе таблиц
так, вот мой вариант (пока не полный)..
1. кликаем на нужные нам флажки (таким образом выбираем именно те расчеты, которые должны быть в заказе)
изврат, который тут понадобился выглядит так:
Private Sub Выбрать_В_Заказ_Click()
DoCmd.GoToRecord , , acNext
DoCmd.GoToRecord , , acPrevious
End Sub
|
зачем это нужно - для того, чтобы в таблице Расчеты обязательно поставился флажок в True, иначе нужно было бы кликать на соседнем поле мышкой
2. В таблице Заказы нужно создать новую запись. Ничего другого не придумал, как скинуть в табл. Заказы, например, КодКлиента из табл. Расчеты. Таким образом мы получим новую запись (новый заказ с новым номером) и новый номер отобразим в поле заголовка ленточной формы
Новый_№_Заказа = DMax("[№_Заказа]", "Заказы")
|
критерием выбора записей в табл. Расчеты является:
- Выбрать_В_Заказ=true и №_Заказа - Is Null (т.е. те, которые мы только что выбрали)
весь код на кнопке "Сформировать заказ" выглядит так:
Private Sub Сформировать_Заказ_Click()
DoCmd.RunSQL "INSERT INTO Заказы ( КодКлиента )" _
& "SELECT DISTINCT Расчеты.КодКлиента FROM Расчеты WHERE (((Расчеты.№_Заказа) Is Null) AND ((Расчеты.Выбрать_В_Заказ)=Yes));"
Новый_№_Заказа = DMax("[№_Заказа]", "Заказы")
End Sub
|
| |
|
| |
|
|
|
| что мне не нравится в этом варианте, так это то, что данные в таблицу Заказы записываются из табл. Расчеты.
поскольку программа многопользовательская, то велика вероятность того, что один юзер поставит галочки на своих расчетах и пойдет пить кофе (а заказ формировать будет потом, после кофепития), а в это время второй юзер начнет ставить галки на своих расчетах и начнет формировать заказ. Так вот в заказ второго юзера попадут помимо его собственных расчетов и расчеты первого юзера
так что мои вышеприведенные выкладки не годятся | |
|
| |
|
|
|
| тогда может подскажите, как в таблицу Заказы сбрасывать не из Табл. Расчеты, а прямо с ленточной формы и именно с тех строк, где Выбрать_В_Заказ=True
и второе - в поля табл. Расчеты, после формирования записи в табл. Заказы, вставить вновьсформированный №_Заказа, чтобы обеспечить целостность данных... | |
|
| |
|
|
|
| Добавить в таблицу Расчеты IDManager.
Фильтр по IDManager в форме.
Менеджер будет видеть в форме только свои расчеты, следовательно, поставить галочки в "чужих" расчетах не сможет. | |
|
| |
|
|
|
|
Private Sub Выбрать_В_Заказ_Click()
DoCmd.GoToRecord , , acNext
DoCmd.GoToRecord , , acPrevious
End Sub
|
Вместо этого, при нажатии на кнопку "СформироватьЗаказ" первым делом - Me.Refresh | |
|
| |
|
|
|
| ага...это работает
спасибо | |
|
| |
|
28 Кб. |
|
| Добавить в таблицу Расчеты IDManager.
Фильтр по IDManager в форме.
Менеджер будет видеть в форме только свои расчеты, следовательно, поставить галочки в "чужих" расчетах не сможет.
не Lukas...
дело ж не в том, что свои или не свои заказы, а в том, что запрос на добавление
Private Sub Сформировать_Заказ_Click()
DoCmd.RunSQL "INSERT INTO Заказы ( КодКлиента )" _
& "SELECT DISTINCT Расчеты.КодКлиента FROM Расчеты WHERE (((Расчеты.№_Заказа) Is Null) AND ((Расчеты.Выбрать_В_Заказ)=Yes));"
Новый_№_Заказа = DMax("[№_Заказа]", "Заказы")
End Sub
|
оперирует с данными в таблице Расчеты
эмм...
ну вот прикрутил к сообщению, что описал выше...с учетом Me.Refresh, о котором писал Lukas в последующем своем сообщении | |
|
| |
|
|
|
| 1. А что мешает дополнить в условия отбора запроса критерий по IDManager?
2. Вариант №2. Использовать вместо ленточной формы с флажками - ListBox с мультивыбором. | |
|
| |
|
|
|
| 1 - не подойдет, т.к расчет делал Вася, а Вася сейчас не работает(уволился, ушел в отпуск , заболел и т.д., вместо него Петя делает заказ на основе Васиных расчетов...
2 - не совсем понял, сорри((
3 - а есть ли вариант, поставив галочки в форме, но в таблицу их пока не записывать., а записать их по кнопке "Сформировать заказ"?
а?
добавил: хотя..может 1-й пункт и прокатит
щас покручу его.... | |
|
| |
|
|
|
| по 3. Временная таблица?
п.2. Одиночная форма, на ней список с множественным выбором. Поле Выбрать_в_заказ не нужно.
Источник строк списка - Расчеты без №_Заказа.
По нажатии кнопки - проверка, выбрано ли что, составление строки выбранных №_Расчета, использование ее в формировании условий запроса (IN...)
по п.1. За то время, что прошло со дня расчета Васей, который заболел (уволился, загорает на канарах), цены на расходники (доставку, работу) выросли(упали), и его расчет, кроме как в топку, никуда не годен. Расчет должен осуществляться реал-тайм, на момент составления договора (подписания заказа). Все предварительные расчеты не более чем декларация о намерениях, ну и тренировка для менеджера.
| |
|
| |