|
|
|
| помогите пожалуйста, объясняю свои формы...
есть форма СКЛАД и есть форма ПРОДАЖИ, как мне сделать чтоб когда я выбирал товар и количество,оно проверялось хватает ли этого товара на складе,если нет то выводило ошибку и сбрасывала на 0 введеное число,если хватало,то просто дальше заполнялось....
я с этим мучаюсь долго,у меня получается проверка,но например у меня на складе 100 штук,а продаю 200,то у меня он не говорит что не хватает,а просто идет дальше а в склад уже потом вписывает -100...
подскажите чем сможете...
ВОТ база http://slil.ru/29120550 | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=251661636&Itemid=35
Help по Dblookup | |
|
| |
|
|
|
| иии???смысл вопроса был в другом.... | |
|
| |
|
|
|
|
...есть форма СКЛАД и есть форма ПРОДАЖИ...
|
1. Нету их там нифига!
2. Выкладывамые файлы следует архивировать.
3. Перед архивированием следует сжать базу данных.
После сжатия и архивирования размер архива 87 кб, вместо 3,3 Mб. | |
|
| |
|
|
|
| блин прости...косячнул...хотел например написать....формы Склад предприятия и Отправка топлива на станции...вот такие...принцип такой же | |
|
| |
|
|
|
|
вот такие...принцип такой же
|
э-э-э-э | |
|
| |
|
|
|
| ну имею виде принцип работы...отправляем топливо, вычитается со склада.... сделать чтоб нельзя было отправить больше чем есть.... | |
|
| |
|
|
|
| Ванька, если честно, то все как-то печально внутри.
Хорошо-бы, для начала, сварганить приличную Data Model.
Рекомендую привлечь для этого специалиста, например Explorer-а : )
Ну и почитать про именования объектов БД, посмотреть приличные варианты форм и т.д.
Успехов.
Что касается самого вопроса, то надо написать функцию проверки остатков данного товара на складе, перед обновлением поля формы с количеством вызывать ее, и по возвращенному ей результату выполнять описанные действия. | |
|
| |
|
|
|
| понимаю что не фонтан...но и денег платить специалисту нету.... а не подскажеш какую фунцию писать??? просто я пробывал макрос на кнопку сделать с таким условием
[Forms]![Склад предприятия]![Количество топлива склада]>=[Forms]![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива]
пробывал в ВБА писать такое
Private Sub Количество_топлива_AfterUpdate()
If Forms.[Склад предприятия)]![Количество топлива склада]= < Forms![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива] Then
MsgBox ("нельзя продать больше , чем имеем")
Forms.Undo
Exit Sub
End If
End Sub
все равно нормально не пашет....иногда норм а иногда пишет типо норм а на складе уже минус.. | |
|
| |
|
|
|
| Ну форма для функции не нужна.
Нужно получить остаток товара на складе, osmor предложил вам вариант использования для этого доменных функций, как самый простой.
В вашем случае (при беглом просмотре) это будут разница значений двух функций DSum к таблицам "Поступление (подробно)" и "Отправка(подробнее)" с фильтром по полю "Код_топлива".
Пусть функция эту разницу и возвращает, а в процедуре Form_BeforeUpdate, ее вызываем и сравниваем с введенным в поле "количество топлива" значением и делаем "выводы".
Аргумент Cancel процедуры нам поможет, в случае "перебора". | |
|
| |
|
|
|
| Забыл вот еще что: при расчете остатка надо учитывать дату(+время?), на которую считается остаток. | |
|
| |
|
|
|
| дата ненужна вроде...ну там же расчитывается так... остаток+поступило- выбыло, и надо чтоб каждый раз остаток обновлялся....ну я вроде нашел как сделать,вопросик еще, как написать в ВБА операции,по обновлению формы, тока так чтоб кнопка на одной форме,а обновлялась другая.... | |
|
| |
|
|
|
| Вот самый простой вариант, не без недостатков:
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
|
| |
|
| |
|
|
|
| ну еще вопрос и просьба...а можно ли на одну кнопку две операции???
и как переделать макрос в операцию ВБА с таким условием
[Формы]![Склад предприятия]![Количество топлива склада ]>=[Формы]![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива]
если правильно то вывести сообщение Топливо хватает и продолжить заполнение, а если не хватает то сообщение Не хватает топливо,вернуть прежнее число(которое до внесения была,т.е. 0)
и как предыдущую операцию и это соединить?? | |
|
| |
|
|
|
| Ванька, ну неправильно это все.
Этот алгоритм сравнения значений с значениями поля формы не учитывает марку топлива.
Когда открывается форма "Склад предприятия", текущей записью является "верхняя".
Какая там марка топлива? Да ХЗ.
Сегодня одна, завтра другая, потому как порядок сортировки в запросе не прописан.
Далее идет сравнение со значением поля количества, а марка топлива не учитывается.
Поэтому (в том числе) периодически и врет этот способ.
Форма не нужна!
Получай остатки через доменные функции или рекордсеты. Там в можно учитывать марку топлива. | |
|
| |
|
|
|
| я половинку не понял)) объясни по проще)) но когда я отсылаю топливо или приходит оно,оно же приходит по марке...я же выбераю марку и потом кол-во,поэтому она нормально считается..в чем косяк?))) | |
|
| |
|
|
|
| Вот условие макроса:
[Формы]![Отправка топлива на станции]![Отправка(подробнее) подчиненная форма]![Количество топлива]<[Формы]![Склад предприятия]![Количество топлива склада ]
|
На ленточной/табличной форме отображаются несколько записей набора данных.
При считывании значений полей, считываются значения текущей записи.
Остаток какой марки топлива отображает текущая запись формы? Ответ: А я ХЗ.
Причем это абсолютно не зависит от той марки топлива, которую выбрали в форме
"Отправка(подробнее) подчиненная форма".
Получается, что идет сравнение остатков разных марок топлива в 2 случаях из трех, поскольку пока три марки топлива. | |
|
| |
|
|
|
|
остаток+поступило- выбыло
|
остаток = поступило-выбыло, вообще-то :) | |
|
| |
|
|
|
| неее...как же так.... остаток на начало периода(или поставку) + что поступило сейчас и минус что выбыло сейчас....типо остаток на конец периода | |
|
| |
|
|
|
| какого периода - с очередной инвентаризации? тогда да.
если остаток скидывать в архив без инвентаризации, сложно будет корректно исправлять данные прошлых периодов - ошибки ввода, не проведенные транзакции и т.п. | |
|
| |
|
|
|
| неее...например так...
вот на складе по 100 каждого товара,нам пришел товар на 200 и мы отдали 100 получается 100(склад)+200(пришло)-100(отдали)=200 на складе, тут еще пришло300 и ушло 200 200(склад)+300(пришло)-200(ушло)= 300 на складе....вот так | |
|
| |
|
|
|
| А нафига прописывать остатки по складу после каждой транзакции?
Остатки можно получать запросами на момент потребности в значениях этих остатков.
Когда транзакций много, и для получения остатков запросами требуется большое время, используют остатки на периоды. Это отдельная технология со своими нюансами.
В данном случае, это лишнее.
Остаток=ВесьПриход-ВесьРасход по марке топлива на конкретную дату (она есть в документе). | |
|
| |
|
|
|
| а если допустим заполняем документ(допустим накладную) на отправку топлива, тут сразу отправляем еще....а если сразу проверять не будет и вычитать не будет,то уйдем в минус... | |
|
| |
|
|
|
| Ну так и считаем остатки по марке топлива "на лету".
Допустим:
Первый документ-отправка на сегодня 500 л. топлива Марки "95"
Считаем: Всего Прихода топлива Марки "95" 20100 л., всего расход 18000 л. Текущий остаток 2100 л.
ОК, есть столько на складе.
Второй документ-отправка на сегодня к примеру 800 л. топлива Марки "95"
Считаем: Всего Прихода топлива Марки "95" 20100 л., всего расход 18500 л. Текущий остаток 1600 л.
ОК, есть столько на складе.
Третий документ-отправка на сегодня к примеру 1000 л. топлива Марки "95"
Считаем: Всего Прихода топлива Марки "95" 20100 л., всего расход 19300 л. Текущий остаток 800 л.
СТОЯТЬ!, нет столько на складе.
Но!
Мы здесь имеем значения текущих остатков.
А документы, к примеру, могут "правиться/создаваться" задним числом.
То есть к примеру, Сегодня с утра привезли марки "95" 5000 л. Было в остатке на утро сегодня (вечер вчера) 100 л.
Если создавать/править документ за вчерашний день у нас сейчас благополучно будет считать остаток 5100 л., поскольку дату мы не учитываем при расчете остатка, а реально на вечер вчера было 100 л.
Это к тому, что остатки надо считать на дату создания/изменения документа (+ возможно надо учитывать и время) . | |
|
| |
|
|
|
| я снова немного не понял....а если допустим только отправляем,но не приходило...значит сразу стопорит...или только пришло,надо чтоб занес на склад... | |
|
| |
|
|
|
| Как это только отправляем, но не приходило?
Отправляем то, чего нет?
Первым учетным документом в БД будет ввод остатков на начало учета.
Отправлять будем из того, что ввели в остатки на начало учета.
Пришло => оформляем приход, остатки увеличились. | |
|
| |
|
|
|
| блин честно я незнаю как это сделать....
все никак не получается...мог бы по полнее объяснить что делать?? если легче будет пиши в асю 491426752.... блин дипломка накрывается....на этой фигне уже дней 5 сижу... | |
|
| |
|
|
|
| Господа вы чего творите - так и раззориться не долго
Топливо в крупных объемах хранится и перевозится в единицах массы т.е. в тоннах и кг.
и на заправку топливо поступает в тоннах и хранится так же а вот продается в литрах
вся бяка в коэффициенте объемного расширения
посему знать остаток топлива вплоть до миллилитра - это утопия
там еще есть коэффициент испарения (усушка - утруска)
между прочим из-за этого заправлять авто (мото) лучше утром
зы в советские времена работа на АЗС (оператором) считалась высокодоходным местом именно из-за этих неточностей | |
|
| |
|
|
|
|
|
| да не просто надо....так че там как замутить проверкутолько по подролбнее))
Спасибо больше Сергею(snipe) он мне сделал все по этому вопросу | |
|
| |
|
|
|
|
Прошу прощения, конечно Dlookup, Dcount и Dsum
Dblookup - это из lotus прилипло | |
|
| |
|
20 Кб. |
|
| Попробуй типа как-то так. В данном примере можно замутить мульку типа получение товара в разное время по разной цене, продажа из какой партии и т.д. тогда будет сложнее. В данном случае берем товар, делаем групповичок [Товар];[Sum-Количество] из таблы Товар на складе. Потом групповичок с таблы расход. [Товар];[Sum-Расхода]. В запросе выводим Товар и разность [Sum-Количество]-[Sum-Расхода]. Выводим это все в список, показывая только первое поле. Второе - разность, выводим в отдельное поле на форме [В наличии]. Ну а дальше продажа. В свободное поле вводим цифирь, и если она больше остатка - мат на выходе. Если меньше - появляется кнопарь "продать". При нажатии запрос на добавление добавляет в таблу продаж товар и сколько продаем. Групповички сделают свое дело. Обновили список и все. | |
|
| |