Очень часто приложение на MS Access пишется для учёта чего-либо (денег или товаров). Казалось бы, всё просто -- как в школьной задаче: в одну труду втекает (приход/получение ценностей), в другую утекает (расход/выдача ценностей). Но чаще, чем хотелось бы, такая программа через год-полтора после старта начинает работать как генератор случайных чисел. Где же подводный камень?
Всё дело в том, что в школе, рассказывая про бассейн и две трубы, забыли рассказать, что они подтекают и засоряются. Т.е. приходы и расходы могут реально произойти, но в программу не внестись (и наоборот). Причины невнесения реальной операции в программу достаточно очевидны -- неполадки компьютера/сети, похмелье, проверка -- "заметят или не заметят", несоответствие количества в упаковке реальному и т.п. Менее очевидны причины вноса операции, в реальности не происходившей. Как правило, это внос операции заранее. Получили по факсу перечень товаров, который к нам едет -- ну и вколотили его а базу, чтоб не делать это в спешке. Или представим, что нам согласились выдать деньги, и мы, чтоб курьеру распечатать приходник, вбили операцию. А с получением денег всегда могут возникнуть проблемы...
Кроме того, есть проблема чисто техническая. Чем больше операций, тем дольше приходится считать приход и расход.
Я предлагаю следующие решения:
1. Реализация операции ревизия. Вносится реальное количество с составлением документа. И при расчёте остатка разница прихода и расхода прибавится к количеству, зафиксированному в последней ревизии.
2. В расчёт остатка должны попадать только те операции, которые помечены как произведённые. |