Jump to content

Recommended Posts

Добрый день, давно стояла необходимость в учете остатков и себестоимости товара.
Решил попробовать реализовать в самой симпле. По аналогии с заказами и продажами (таблица с перечнем товаров заказа), создал еще две таблицы- поставки и закупки (перечень товаров в поставке). Механику и api реализовал по аналогии с продажами (Orders). В админке сделал отдельное окно для поставок. Так же, добавил таблицу для складов, и в таблицы поставок и заказов добавил столбец warehouse_id, для контроля склада.
всё работает хорошо - поставки сохраняются в поставки, заказы клиентов в заказы клиентов.
Задумка в следующем - реализовать механику,подобную сервису МойСклад: что бы остатки и себестоимость товара просчитывались и выводились динамически, а не хранились в базе данных.

Набросал код запроса:

SELECT DATE, amount, price, order_id, stock - amount AS stock from (select DATE, product, variant, amount, price, order_id,
    (case when product=@prod then @costnew:=(case when amount>0 then (@costnew*@ost+amount*price)/(@stock+amount) 
                                                              else @costnew end)
                            else @costnew:=price END) costnew,
    (case when product=@prod then @stock:=@stock+amount else @stock:=amount END) stock,
    @prod:=product
  FROM ((SELECT pu.product_id AS product, pu.variant_id AS variant, pu.amount AS amount, pu.price AS price, pr.date, pr.warehouse_id, 0 AS order_id FROM s_purchases AS pu LEFT JOIN s_procurements AS pr ON pr.id=pu.order_id WHERE pr.date<(SELECT DATE FROM s_orders WHERE id=3)) 
  UNION (SELECT s.product_id AS product, s.variant_id AS variant, -s.amount AS amount, s.price AS price, o.date, o.warehouse_id, order_id FROM s_sales AS s LEFT JOIN s_orders AS o ON o.id=s.order_id WHERE o.date<=(SELECT DATE FROM s_orders WHERE id=3))) dat,(select @prod:=0, @stock:=0, @costnew:=0.0) u
  order by product,DATE) d

  ORDER BY DATE DESC LIMIT 10

Логика запроса - соединить таблицу закупок товаров и таблицу продаж товаров, и на основе этой общей таблицы получить остаток и себестоимость товара в заказе на конкретную дату (дату заказа).
Хотелось бы услышать мнение местных профессионалов - на сколько это хорошее решение, и не аукнится ли оно мне со временем/ростом количества заказов? Если же решение не из лучших, быть может кто-то сможет предложить более грамотное решение?
И, да, я понимаю, что симпла это CMS, и может не совсем рационально пихать в нее CRM и WMS механики, но почему бы и нет? Система простая, открытая, а иметь  все под рукой было бы идеально.
Заранее, спасибо!

Link to post
Share on other sites

Если работает и правильно считает, то и хорошо, пользуйтесь.

Переживать за ресурсы сервера при сложном запросе, по-моему, не стоит, ведь запрос это выполняется в админке, то есть довольно редко по масштабам работы сервера. Если же хотите надежности, то проводите эксперименты, создав базу большого объема и замеряя время работы запроса.

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...