6cnitymi Posted September 8, 2021 Report Share Posted September 8, 2021 Добрый день, давно стояла необходимость в учете остатков и себестоимости товара. Решил попробовать реализовать в самой симпле. По аналогии с заказами и продажами (таблица с перечнем товаров заказа), создал еще две таблицы- поставки и закупки (перечень товаров в поставке). Механику и 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 механики, но почему бы и нет? Система простая, открытая, а иметь все под рукой было бы идеально. Заранее, спасибо! Quote Link to post Share on other sites
phukortsin Posted September 9, 2021 Report Share Posted September 9, 2021 Если работает и правильно считает, то и хорошо, пользуйтесь. Переживать за ресурсы сервера при сложном запросе, по-моему, не стоит, ведь запрос это выполняется в админке, то есть довольно редко по масштабам работы сервера. Если же хотите надежности, то проводите эксперименты, создав базу большого объема и замеряя время работы запроса. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.