|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
Приветствую форумчан! Не попадалось ли вот такое ТЗ кому-либо: Есть заявки клиентов на приобретение продукции, Есть факт продажи (т.е. клиент может заказать кучу всего, но на самом деле покупать не всегда все то, что заказал). Ну и есть оплата. При чём тут полный зоопарк: клиент может осуществить 100% предоплату, или частичную предоплату, или вообще после поставки в течение n-дней с момента отгрузки. А ещё бывают и такие клиенты, которым дают под консигнацию, т.е. клиент оплатит только ту часть, которую реализовал. Ну а если не реализовал на 100%, может частично вернуть нереализованный товар вместо оплаты. При чем клиент может оплатить так, как ему вздумается. В смысле какие-то месяцы он в плюсе (т.е. оплатил больше, чем получил товар), а какие-то месяцы этот же клиент может быть и в минусе (получил больше товара, чем заплатил). Весь этот зоопарк надо как-то учитывать. В требовании ТЗ есть такой пункт, система должна формировать отчёт по непогашенным счетам-фактурам с указанием срока погашения (в смысле на такую дату общая задолженность по всем клиентам составил N сумму). С заявками и фактической продажей более или менее все ясно, в принципе там нет проблем. А вот продажу и оплату "как-то подружить" да так, чтобы в любое время вытащить список должников в удобной форме, а также список клиентов, которым предприятие должно отгружать товар, вот с этим собственно проблема. Наилучшую схему пока не придумал. Как оптимизировать, чтобы при расчёты не загружать по максимуму сервер? Мне нужен совет гуру. Thanks in advance. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2013, 16:12 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
Извиняйте, что с задержкой. Бываю нерегулярно, под собой последнее время - совсем редко. Залогинился в кои-то веки, залез в сообщения - тут выплыло :) Была похожая ситуация. Вкраце, имеем. Делаются Заказы. Формируем заказ (заказ товара у Поставщика (Приходные накладные) на Склад и/или товар есть на Складе) Готовые заказы отдаём Клиенту (Расходные накладные (р/н)). Клиент может вернуть товар на Склад (Возвратные накладные). (Там ещё много вариантов: утилизация, возврат брака, возможный возврат поставщику за деньги и т. д., но это тонкости) Это всё движение товара. Теперь по движению денюжки. У клиента есть Баланс. Он может внести сумму на Баланс, может забрать переплату. Делается Движение средств: Когда, кто, чем за что заплатил. Т. е., упрощённо, Движение средств либо привязано к документу (предоплата Заказа, Выставление счёта за р/н, оплата р/н), либо операции внесения/возврата денег. Здесь и отлавливаются долги, и те, у кого положительный Баланс. Неоплаченные заказы видно сразу. Если за заказ была переплата - оплата вносится двумя записями (если не было предоплат): одна - покрывает р/н, остаток вносится как внесение средств на Баланс (там, конечно, есть привязка откуда пошло это внесение, но это лишние тонкости). Опять же Клиент может оплатить либо средствами (частью средств) с Баланса (если он положителен), либо деньгами. У меня было очень большое упрощение - в одной р/н могли находиться товары из одного заказа (хотя самих р/н на заказ могло быть много). Без этого упрощения система несколько усложнится, но тоже реализуемо. Звиняйте, сумбурно. Много чего недорассказал (много тонкостей конкретного заказчика) - но общая картина, надеюсь, понятна. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 19:15 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
advОпять же Клиент может оплатить либо с вечера не получилось понять, подумал с утра наверстаю... да уж куда там... мда-а-а-а-а-а... сумбурненько... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 09:35 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
полиномadvОпять же Клиент может оплатить либо с вечера не получилось понять, подумал с утра наверстаю... да уж куда там... мда-а-а-а-а-а... сумбурненько...:) Торопился, звиняйце. Тут надо было быть подробнее. В Балансе у Клиента возможны варианты (есть ещё, но они нас уведут от сути): Внесение средств Возврат средств Предоплата заказа Оплата р/н Последние 2 варианта в случае переплаты дробятся на Оплату + Внесение средств (переплата). Соответственно тем, что внесено и можно оплачивать заказы или часть заказов. Тогда Внесённые средства спишутся на оплату и Баланс уменьшится на сумму оплаты (это опять же кратко:) Можно оплатить сразу деньгами, в этом случае в баланс внесётся Оплата р/н №.... Т. е. ещё проще: у Клиента есть виртуальный кошелёк, который можно пополнять Внесением средств и переплатой заказов. С него можно забирать деньги (возврат). Все действия прописываются в Движении средств, там записи и по действиям с кошельком, и выставленные на оплату счета, и сами оплаты. Так и вот: Оплачивать счёт можно сразу - в простейшем случае в Балансе будет две записи: р/н (в расходе, допустим 100) Оплата р/н: 100 Можно заранее внести средства (опять же в простейшем случае), записи 3: Внесение средств (приход 100) р/н (расход 100) Оплата р/н: (приход 100) (со ссылкой каким Внесением расплатились и обнулением этого внесения) Можно переплатить: р/н (расход 100) Оплата р/н: 150 дробится на ----- Оплата р/н (приход): 100 ----- Внесение средств (приход): 50 (этим и можно оплатить последующие заказы) Так менее сумбурненько? :) зы. Убежал на неопределённое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 12:22 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
Можно сделать чуть проще и системнее. Внесение средств. Вывод средств. Перечисление средств на заказ. При перечислении указывается, на какой заказ перечислено. Перечислено может быть только на один заказ. Может быть перечислена сумма не на всю сумму заказа а на его часть. Тогда оплата заказа будет учитываться как две записи - Внесение и сразу же перечисление средста на заказ. На самом деле все это уже давно было и продумано и придумано. То же самое касается и получения товаров по заказу. Заказ может придти частями. Может придти одна посылка на остаток предыдущего заказа и начало поставки следующего. Матчинг и заказов, оплат и поставок - всегда многие ко многим. С одной стороны - матчинг олат с заказами через промкжуточную таблицу, реализующую М:М, с другой стороны - то же самое для материальных поставок. Получается симметричная конструкция. Все это можно (нужно) учитывать на одних и тех же таблицах. Движение денег и товаров не отличаются друг от друга. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 13:32 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
П-Л, можно и по-другому :) Когда нужно. Я же не всю схему расписал. И заказы приходят частями, и отгружаются частями, и оплачиваются частями, и возврат частями, и откаты частями, и так далее частями :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 14:51 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
П-ЛПолучается симметричная конструкция. Все это можно (нужно) учитывать на одних и тех же таблицах. Движение денег и товаров не отличаются друг от друга. и еще создать отдельную таблицу - для бозона Хиггса и прочей подобной ерунды для необходимой компенсации возможных нарушений симметрии... впрочем для большинства случаев этими возможными нарушениями можно пренебречь ах, да... http://upload.wikimedia.org/wikipedia/commons/1/1c/CMS_Higgs-event.jpg?uselang=ru ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 01:15 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
Не стал создавать топик. Решил продолжить его. В данный момент пишу новую базу для производства. Столкнулся с одной проблемой, пока не могу придумать подходящую схему. Есть таблица "Продукция", где размещаю весь список всех видов готовой продукции. Есть таблица "Расходные материалы", там весь список всех видов сырья и прочих расходных материалов. Есть также таблица "Норма расходов", где находится информация о видах и количествах сырья / расходных материалов, необходимых для производства на одну единицу готовой продукции. Структура таблицы "Норма расходов" примерно такая: 1) Код готовой продукции 2) Код расходного материала 3) Количество расходного материала и ещё несколько полей. Так, если мне известно сколько произвели продукцию за сутки, то по норме расходов я могу подсчитать сколько сырья израсходовали (если конечно норма не нарушена). Всё бы ничего, да только проблема закралась. Есть взаимозаменяющие расходные материалы. Скажем, вместо расходного материала "А", использовали "Б" и "В" в разных пропорциях (в бумажном варианте нормы расходов прямо так и пишут, вместо "А" можно использовать "Б" и "В"). Бывают также более сложные замены: вместо "А", "Б", "В" можно использовать "Г", "Д", "Е" и т.д. Как мне учесть всё это в "Нормах расходов"? Какую структуру таблицу сделать, чтобы потом по факту сравнить не вышли ли за рамки нормы расходов? Да и вся это аналитика также нужна будет при составлении прогноза на будущий период. За какую-либо прогрессивную идею благодарю заранее!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:23 |
|
Вопрос по проектированию БД
|
|||
---|---|---|---|
#18+
studieren, Упрощенная схема: 1. То, что сейчас есть считать фактом. 2. Добавить ещё одну ветку типа таблица "нормы" - код готовой продукции - код материала - норма (количество) и врулить в неё: 1. норму "А" + нормы аналгов: 2. норму "Б" 3. норму "В" и так для всех основных и замещаемых материалов для каждого вида изделия... Потом просто: - выдернул из факта реальное количество ("А" или "Б" с "В"....) за изделие - выдернул тоже самое из норм по (коду изделия и задействованным "А" или "Б" с "В"....) (факт не должен превышать заданные нормы) Полная схема: Две таблицы: код изделия + варианты его исполнения в вариантах исполнения описать все возможные комбинации с нормами, например: Для изделия Х: вариант 1: - килограмм компонента "А" Вариант 2: - пол кило "Б" - пол кило "В" При анализе норм анализировать не только нормы Основных материалов и их заместителей, но и рецептуру согласно варианту исполнения... Полная схема сложнее, но не допускает отклонение от рецептуры (нельзя будет списать одновременно компонент "А" совместно с его заменителями "Б" и "В" при изготовлении одного изделия) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 23:49 |
|
|
start [/forum/topic.php?fid=45&startmsg=38476909&tid=1614053]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 148ms |
0 / 0 |