Задать вопрос
yarhosting
@yarhosting
Заказывайте программинг: PHP,SQL, JS,jQuery,Joomla

Как правильно считать остатки в денежной форме?

Есть таблицы покупка, продажа (дата, количество, цена, id номенклатуры)
Как узнать остаток на дату?

Остаток в количественном виде считается просто купили - продали, и легко выводится в разрезе по номенклатуре.

Но вот остаток в денежной форме?

Количество товара в последних партиях * их цену, за исключением не полной партии, там считать пропорционально количеству.

Как это реализовать на SQL
Или хотя бы логику

Хотелось бы партионный учёт, но в голову приходит только вариант с мнооожеством sql запросами в цикле

Select nomenclarure_id по приходу

Далее в цикле по каждой номенклатуре находить количество расхода
далее делать запрос на выборку последних партий из прихода на остаток, складывать в цикле все партии кроме последней умножая количество на сумму,

Последнюю партию, т.к. она может быть не целой считать пропорционально остатку.

Получается количество SQL запросов минимум = количество номенклатуры * 2. Хотелось бы меньше...

У маленького магазинчика 100 товаров, это уже 200 запросов. Придется городить Ajax, чтобы не вылететь по таймауту
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Гм.. а в чем непонятность?
Если речь о партионном учете - т.е. в каждой продаже фигурирет отсыл на конкретную партию покупки - то собственно вычитая из отбора покупок до нужной даты отбор продаж до этой же даты через связку партий - получим остатки по каждой конкретной партии. Сумма произведений остатков в каждой партии на цену покупки - и даст сумму остатков.
Если учет по среднему - то трактовок может быть несколько:
- глобальное среднее по всем партиям прихода до нужной даты умножаем на количественный остаток (это попроще)
- закладываемся на FIFO и тогда вначале исключаем обнулившиеся "партии" (по хронологии поступления) и потом для оставшегося считаем среднее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы