6cnitymi Опубликовано 8 сентября, 2021 Жалоба Поделиться Опубликовано 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 механики, но почему бы и нет? Система простая, открытая, а иметь все под рукой было бы идеально. Заранее, спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 сентября, 2021 Жалоба Поделиться Опубликовано 9 сентября, 2021 Если работает и правильно считает, то и хорошо, пользуйтесь. Переживать за ресурсы сервера при сложном запросе, по-моему, не стоит, ведь запрос это выполняется в админке, то есть довольно редко по масштабам работы сервера. Если же хотите надежности, то проводите эксперименты, создав базу большого объема и замеряя время работы запроса. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.