Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Фсё! Запутался в трех соснах!
 
 автор: Скорп   (22.11.2008 в 23:34)   личное сообщение
16 Кб.
 
 

наверное просто, но не пойму, как организовать програмно, хотя алгоритм ясен

в базе 2 таблицы:
Расчеты и Заказы связанные один ко многим

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

при этом нужно в таблице Заказы сформировать ОДНУ запись с новым номером заказа, ну и этот номер заказа впихнуть в таблицу Расчеты

буду признателен за предложенные варианты

  Ответить  
 
 автор: час   (23.11.2008 в 11:32)   личное сообщение
 
 

А "расчёты"
это уже готовая отдельная таблица с фиксированно набранными данными?

  Ответить  
 
 автор: Скорп   (23.11.2008 в 13:33)   личное сообщение
 
 

да, готовая

  Ответить  
 
 автор: час   (23.11.2008 в 17:44)   личное сообщение
21 Кб.
 
 

может так?

  Ответить  
 
 автор: Скорп   (23.11.2008 в 18:25)   личное сообщение
 
 

не..не то
это класический способ построения форм на основе таблиц

так, вот мой вариант (пока не полный)..

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

  Ответить  
 
 автор: Скорп   (23.11.2008 в 18:32)   личное сообщение
 
 

что мне не нравится в этом варианте, так это то, что данные в таблицу Заказы записываются из табл. Расчеты.
поскольку программа многопользовательская, то велика вероятность того, что один юзер поставит галочки на своих расчетах и пойдет пить кофе (а заказ формировать будет потом, после кофепития), а в это время второй юзер начнет ставить галки на своих расчетах и начнет формировать заказ. Так вот в заказ второго юзера попадут помимо его собственных расчетов и расчеты первого юзера

так что мои вышеприведенные выкладки не годятся

  Ответить  
 
 автор: Скорп   (23.11.2008 в 18:37)   личное сообщение
 
 

тогда может подскажите, как в таблицу Заказы сбрасывать не из Табл. Расчеты, а прямо с ленточной формы и именно с тех строк, где Выбрать_В_Заказ=True

и второе - в поля табл. Расчеты, после формирования записи в табл. Заказы, вставить вновьсформированный №_Заказа, чтобы обеспечить целостность данных...

  Ответить  
 
 автор: Lukas   (23.11.2008 в 18:40)   личное сообщение
 
 

Добавить в таблицу Расчеты IDManager.
Фильтр по IDManager в форме.
Менеджер будет видеть в форме только свои расчеты, следовательно, поставить галочки в "чужих" расчетах не сможет.

  Ответить  
 
 автор: Lukas   (23.11.2008 в 18:46)   личное сообщение
 
 


Private Sub Выбрать_В_Заказ_Click()
DoCmd.GoToRecord , , acNext
DoCmd.GoToRecord , , acPrevious
End Sub 

Вместо этого, при нажатии на кнопку "СформироватьЗаказ" первым делом - Me.Refresh

  Ответить  
 
 автор: Скорп   (23.11.2008 в 20:42)   личное сообщение
 
 

ага...это работает
спасибо

  Ответить  
 
 автор: Скорп   (23.11.2008 в 20:43)   личное сообщение
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 в последующем своем сообщении

  Ответить  
 
 автор: Lukas   (23.11.2008 в 21:39)   личное сообщение
 
 

1. А что мешает дополнить в условия отбора запроса критерий по IDManager?

2. Вариант №2. Использовать вместо ленточной формы с флажками - ListBox с мультивыбором.

  Ответить  
 
 автор: Скорп   (23.11.2008 в 22:09)   личное сообщение
 
 

1 - не подойдет, т.к расчет делал Вася, а Вася сейчас не работает(уволился, ушел в отпуск , заболел и т.д., вместо него Петя делает заказ на основе Васиных расчетов...

2 - не совсем понял, сорри((

3 - а есть ли вариант, поставив галочки в форме, но в таблицу их пока не записывать., а записать их по кнопке "Сформировать заказ"?
а?

добавил: хотя..может 1-й пункт и прокатит
щас покручу его....

  Ответить  
 
 автор: Lukas   (23.11.2008 в 22:47)   личное сообщение
 
 

по 3. Временная таблица?

п.2. Одиночная форма, на ней список с множественным выбором. Поле Выбрать_в_заказ не нужно.
Источник строк списка - Расчеты без №_Заказа.
По нажатии кнопки - проверка, выбрано ли что, составление строки выбранных №_Расчета, использование ее в формировании условий запроса (IN...)

по п.1. За то время, что прошло со дня расчета Васей, который заболел (уволился, загорает на канарах), цены на расходники (доставку, работу) выросли(упали), и его расчет, кроме как в топку, никуда не годен. Расчет должен осуществляться реал-тайм, на момент составления договора (подписания заказа). Все предварительные расчеты не более чем декларация о намерениях, ну и тренировка для менеджера.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList