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

Форум: MS ACCESS

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

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

 
 

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

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

тема: остатки и продажа
 
 автор: Ванька   (12.05.2010 в 17:26)   личное сообщение
 
 

помогите пожалуйста, объясняю свои формы...
есть форма СКЛАД и есть форма ПРОДАЖИ, как мне сделать чтоб когда я выбирал товар и количество,оно проверялось хватает ли этого товара на складе,если нет то выводило ошибку и сбрасывала на 0 введеное число,если хватало,то просто дальше заполнялось....
я с этим мучаюсь долго,у меня получается проверка,но например у меня на складе 100 штук,а продаю 200,то у меня он не говорит что не хватает,а просто идет дальше а в склад уже потом вписывает -100...
подскажите чем сможете...
ВОТ база http://slil.ru/29120550

  Ответить  
 
 автор: osmor   (12.05.2010 в 17:55)   личное сообщение
 
 

http://hiprog.com/index.php?option=com_content&task=view&id=251661636&Itemid=35
Help по Dblookup

  Ответить  
 
 автор: Ванька   (12.05.2010 в 18:05)   личное сообщение
 
 

иии???смысл вопроса был в другом....

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


...есть форма СКЛАД и есть форма ПРОДАЖИ...


1. Нету их там нифига!
2. Выкладывамые файлы следует архивировать.
3. Перед архивированием следует сжать базу данных.

После сжатия и архивирования размер архива 87 кб, вместо 3,3 Mб.

  Ответить  
 
 автор: Ванька   (12.05.2010 в 18:56)   личное сообщение
 
 

блин прости...косячнул...хотел например написать....формы Склад предприятия и Отправка топлива на станции...вот такие...принцип такой же

  Ответить  
 
 автор: Explorer   (12.05.2010 в 18:59)   личное сообщение
 
 


вот такие...принцип такой же


э-э-э-э

  Ответить  
 
 автор: Ванька   (12.05.2010 в 19:03)   личное сообщение
 
 

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

  Ответить  
 
 автор: Lukas   (12.05.2010 в 19:57)   личное сообщение
 
 

Ванька, если честно, то все как-то печально внутри.
Хорошо-бы, для начала, сварганить приличную Data Model.
Рекомендую привлечь для этого специалиста, например Explorer-а : )
Ну и почитать про именования объектов БД, посмотреть приличные варианты форм и т.д.
Успехов.
Что касается самого вопроса, то надо написать функцию проверки остатков данного товара на складе, перед обновлением поля формы с количеством вызывать ее, и по возвращенному ей результату выполнять описанные действия.

  Ответить  
 
 автор: Ванька   (12.05.2010 в 20:15)   личное сообщение
 
 

понимаю что не фонтан...но и денег платить специалисту нету.... а не подскажеш какую фунцию писать??? просто я пробывал макрос на кнопку сделать с таким условием

[Forms]![Склад предприятия]![Количество топлива склада]>=[Forms]![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива]


пробывал в ВБА писать такое
Private Sub Количество_топлива_AfterUpdate()
If Forms.[Склад предприятия)]![Количество топлива склада]= < Forms![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива] Then
MsgBox ("нельзя продать больше , чем имеем")
Forms.Undo
Exit Sub
End If
End Sub


все равно нормально не пашет....иногда норм а иногда пишет типо норм а на складе уже минус..

  Ответить  
 
 автор: Lukas   (12.05.2010 в 20:56)   личное сообщение
 
 

Ну форма для функции не нужна.
Нужно получить остаток товара на складе, osmor предложил вам вариант использования для этого доменных функций, как самый простой.
В вашем случае (при беглом просмотре) это будут разница значений двух функций DSum к таблицам "Поступление (подробно)" и "Отправка(подробнее)" с фильтром по полю "Код_топлива".
Пусть функция эту разницу и возвращает, а в процедуре Form_BeforeUpdate, ее вызываем и сравниваем с введенным в поле "количество топлива" значением и делаем "выводы".
Аргумент Cancel процедуры нам поможет, в случае "перебора".

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

Забыл вот еще что: при расчете остатка надо учитывать дату(+время?), на которую считается остаток.

  Ответить  
 
 автор: ванька   (12.05.2010 в 22:27)   личное сообщение
 
 

дата ненужна вроде...ну там же расчитывается так... остаток+поступило- выбыло, и надо чтоб каждый раз остаток обновлялся....ну я вроде нашел как сделать,вопросик еще, как написать в ВБА операции,по обновлению формы, тока так чтоб кнопка на одной форме,а обновлялась другая....

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

Вот самый простой вариант, не без недостатков:

Private Sub btnRequery_Click()
    Const FORM_NAME As String = "frm2"
    If CurrentProject.AllForms(FORM_NAME).IsLoaded Then
        Forms(FORM_NAME).Requery
    End If
End Sub

  Ответить  
 
 автор: Ванька   (12.05.2010 в 22:45)   личное сообщение
 
 

ну еще вопрос и просьба...а можно ли на одну кнопку две операции???

и как переделать макрос в операцию ВБА с таким условием
[Формы]![Склад предприятия]![Количество топлива склада ]>=[Формы]![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива]

если правильно то вывести сообщение Топливо хватает и продолжить заполнение, а если не хватает то сообщение Не хватает топливо,вернуть прежнее число(которое до внесения была,т.е. 0)

и как предыдущую операцию и это соединить??

  Ответить  
 
 автор: Lukas   (12.05.2010 в 23:15)   личное сообщение
 
 

Ванька, ну неправильно это все.
Этот алгоритм сравнения значений с значениями поля формы не учитывает марку топлива.
Когда открывается форма "Склад предприятия", текущей записью является "верхняя".
Какая там марка топлива? Да ХЗ.
Сегодня одна, завтра другая, потому как порядок сортировки в запросе не прописан.
Далее идет сравнение со значением поля количества, а марка топлива не учитывается.
Поэтому (в том числе) периодически и врет этот способ.
Форма не нужна!
Получай остатки через доменные функции или рекордсеты. Там в можно учитывать марку топлива.

  Ответить  
 
 автор: Ванька   (12.05.2010 в 23:19)   личное сообщение
 
 

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

  Ответить  
 
 автор: Lukas   (12.05.2010 в 23:28)   личное сообщение
 
 

Вот условие макроса:

[Формы]![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива]<[Формы]![Склад предприятия]![Количество топлива склада ]

На ленточной/табличной форме отображаются несколько записей набора данных.
При считывании значений полей, считываются значения текущей записи.
Остаток какой марки топлива отображает текущая запись формы? Ответ: А я ХЗ.
Причем это абсолютно не зависит от той марки топлива, которую выбрали в форме
"Отправка(подробнее) подчиненная форма".
Получается, что идет сравнение остатков разных марок топлива в 2 случаях из трех, поскольку пока три марки топлива.

  Ответить  
 
 автор: Explorer   (12.05.2010 в 22:40)   личное сообщение
 
 


остаток+поступило- выбыло



остаток = поступило-выбыло, вообще-то :)

  Ответить  
 
 автор: Ванька   (12.05.2010 в 22:46)   личное сообщение
 
 

неее...как же так.... остаток на начало периода(или поставку) + что поступило сейчас и минус что выбыло сейчас....типо остаток на конец периода

  Ответить  
 
 автор: Explorer   (12.05.2010 в 22:54)   личное сообщение
 
 

какого периода - с очередной инвентаризации? тогда да.

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

  Ответить  
 
 автор: ванька   (12.05.2010 в 23:06)   личное сообщение
 
 

неее...например так...
вот на складе по 100 каждого товара,нам пришел товар на 200 и мы отдали 100 получается 100(склад)+200(пришло)-100(отдали)=200 на складе, тут еще пришло300 и ушло 200 200(склад)+300(пришло)-200(ушло)= 300 на складе....вот так

  Ответить  
 
 автор: Lukas   (12.05.2010 в 23:37)   личное сообщение
 
 

А нафига прописывать остатки по складу после каждой транзакции?
Остатки можно получать запросами на момент потребности в значениях этих остатков.
Когда транзакций много, и для получения остатков запросами требуется большое время, используют остатки на периоды. Это отдельная технология со своими нюансами.
В данном случае, это лишнее.
Остаток=ВесьПриход-ВесьРасход по марке топлива на конкретную дату (она есть в документе).

  Ответить  
 
 автор: Ванька   (13.05.2010 в 00:00)   личное сообщение
 
 

а если допустим заполняем документ(допустим накладную) на отправку топлива, тут сразу отправляем еще....а если сразу проверять не будет и вычитать не будет,то уйдем в минус...

  Ответить  
 
 автор: Lukas   (13.05.2010 в 00:54)   личное сообщение
 
 

Ну так и считаем остатки по марке топлива "на лету".
Допустим:
Первый документ-отправка на сегодня 500 л. топлива Марки "95"
Считаем: Всего Прихода топлива Марки "95" 20100 л., всего расход 18000 л. Текущий остаток 2100 л.
ОК, есть столько на складе.

Второй документ-отправка на сегодня к примеру 800 л. топлива Марки "95"
Считаем: Всего Прихода топлива Марки "95" 20100 л., всего расход 18500 л. Текущий остаток 1600 л.
ОК, есть столько на складе.

Третий документ-отправка на сегодня к примеру 1000 л. топлива Марки "95"
Считаем: Всего Прихода топлива Марки "95" 20100 л., всего расход 19300 л. Текущий остаток 800 л.
СТОЯТЬ!, нет столько на складе.

Но!
Мы здесь имеем значения текущих остатков.
А документы, к примеру, могут "правиться/создаваться" задним числом.
То есть к примеру, Сегодня с утра привезли марки "95" 5000 л. Было в остатке на утро сегодня (вечер вчера) 100 л.
Если создавать/править документ за вчерашний день у нас сейчас благополучно будет считать остаток 5100 л., поскольку дату мы не учитываем при расчете остатка, а реально на вечер вчера было 100 л.
Это к тому, что остатки надо считать на дату создания/изменения документа (+ возможно надо учитывать и время) .

  Ответить  
 
 автор: Ванька   (13.05.2010 в 01:12)   личное сообщение
 
 

я снова немного не понял....а если допустим только отправляем,но не приходило...значит сразу стопорит...или только пришло,надо чтоб занес на склад...

  Ответить  
 
 автор: Lukas   (13.05.2010 в 01:20)   личное сообщение
 
 

Как это только отправляем, но не приходило?
Отправляем то, чего нет?
Первым учетным документом в БД будет ввод остатков на начало учета.
Отправлять будем из того, что ввели в остатки на начало учета.

Пришло => оформляем приход, остатки увеличились.

  Ответить  
 
 автор: Ванька   (13.05.2010 в 01:28)   личное сообщение
 
 

блин честно я незнаю как это сделать....

все никак не получается...мог бы по полнее объяснить что делать?? если легче будет пиши в асю 491426752.... блин дипломка накрывается....на этой фигне уже дней 5 сижу...

  Ответить  
 
 автор: snipe   (13.05.2010 в 04:04)   личное сообщение
 
 

Господа вы чего творите - так и раззориться не долго
Топливо в крупных объемах хранится и перевозится в единицах массы т.е. в тоннах и кг.
и на заправку топливо поступает в тоннах и хранится так же а вот продается в литрах
вся бяка в коэффициенте объемного расширения
посему знать остаток топлива вплоть до миллилитра - это утопия
там еще есть коэффициент испарения (усушка - утруска)
между прочим из-за этого заправлять авто (мото) лучше утром

зы в советские времена работа на АЗС (оператором) считалась высокодоходным местом именно из-за этих неточностей

  Ответить  
 
 автор: час   (13.05.2010 в 08:09)   личное сообщение
 
 

в советские времена
Человеку просто надо складскую программу без региональных особенностей - дипломка.......

  Ответить  
 
 автор: Explorer   (13.05.2010 в 10:05)   личное сообщение
 
 

в теме :)

  Ответить  
 
 автор: Ванька   (13.05.2010 в 11:16)   личное сообщение
 
 

да не просто надо....так че там как замутить проверкутолько по подролбнее))


Спасибо больше Сергею(snipe) он мне сделал все по этому вопросу

  Ответить  
 
 автор: osmor   (13.05.2010 в 08:10)   личное сообщение
 
 

Help по Dblookup


Прошу прощения, конечно Dlookup, Dcount и Dsum

Dblookup - это из lotus прилипло

  Ответить  
 
 автор: Гоблин   (16.05.2010 в 17:55)   личное сообщение
20 Кб.
 
 

Попробуй типа как-то так. В данном примере можно замутить мульку типа получение товара в разное время по разной цене, продажа из какой партии и т.д. тогда будет сложнее. В данном случае берем товар, делаем групповичок [Товар];[Sum-Количество] из таблы Товар на складе. Потом групповичок с таблы расход. [Товар];[Sum-Расхода]. В запросе выводим Товар и разность [Sum-Количество]-[Sum-Расхода]. Выводим это все в список, показывая только первое поле. Второе - разность, выводим в отдельное поле на форме [В наличии]. Ну а дальше продажа. В свободное поле вводим цифирь, и если она больше остатка - мат на выходе. Если меньше - появляется кнопарь "продать". При нажатии запрос на добавление добавляет в таблу продаж товар и сколько продаем. Групповички сделают свое дело. Обновили список и все.

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