Выставление счетов против цитирования или оценки - PullRequest
22 голосов
/ 29 апреля 2010

Если счета-фактуры могут быть аннулированы, следует ли их использовать в качестве предложений?

У меня есть Invoices таблицы, созданные из инвентаря, связанного с Job или Order. Я мог бы иметь таблицу Quotes в качестве промежуточного звена между инвентарем и счетами, но мне кажется, что у меня были бы дублированные структуры данных и логика только для того, чтобы обработать «Это цитата?» бит.

С точки зрения бизнеса, кавычки отличаются от счетов-фактур: цитата отправляется до начала предприятия, а счет-фактура отправляется после его завершения и оплаты, но как это представить в моем хранилище и модель.

  • Что такое элегантный способ хранения и управления котировками и счетами в базе данных?

Редактировать: указано Job === Order для этого конкретного экземпляра.

Ответы [ 5 ]

16 голосов
/ 29 апреля 2010

Есть 3 подхода:

  1. Хранить счета-фактуры и предложения в отдельных таблицах.

    Это хороший дизайн, если счета-фактуры и кавычки имеют несколько полей в двух экземплярах (в противном случае используйте вариант № 3 с 3 таблицами), и если между ними есть отношения 1-многие или многие-многие (для 1-1 используйте вариант № 2).

    Это также хороший выбор, если общепринято, что «общая» информация между ними может фактически изменяться, когда кавычка становится счетом (хотя некоторые из этих мутаций должны быть правильно обработаны с помощью отдельных полей / таблиц, таких как примененные скидки, и т.д ...).

    Небольшая вариация этой опции, очевидно, необходима, когда несколько кавычек превращаются в один (или несколько) счетов. Это добавляет третью таблицу, которая является отображением между набором цитат и счетом (или набором счетов, если это усложняется) для них.

  2. Сохраните их в одной таблице с дополнительным флагом «Счет или квитанция» и любыми дополнительными полями из обоих сохраненных. Это можно сделать либо с помощью счетов-фактур и кавычек в отдельных строках, либо с помощью совместного использования строк (при этом флаг также имеет значение «оба»).

    Последний (одна и та же строка может быть как счет-фактура, так и цитата) - хороший выбор , если они сопоставлены с 1 по 1 , и есть несколько полей, которые различают два.

    Первый (отдельные строки для счетов-фактур и кавычек) в целом не очень хороший дизайн, и его лучше делать с параметрами # 3 или # 1.

  3. Имеется 3 таблицы: одна для общих полей между двумя, а две - только для счетов и только для кавычек.

    Это хороший выбор, если счета-фактуры и кавычки отображаются 1-1, или если их 1-много, но каждый из многих счетов-фактур имеет одинаковые значения полей для любых общих полей. В противном случае используйте # 1.

    Небольшое изменение этой опции может быть сделано, когда несколько кавычек превращаются в один счет. Это добавляет 4-ую таблицу, которая является отображением между набором кавычек и счетом (или набором счетов, если это усложняется) для них. Опять же, здесь предполагается, что существует значительная часть общей информации между всеми цитатами и счетами, связанными / объединенными вместе, в противном случае просто перейдите с # 1.

8 голосов
/ 29 апреля 2010

Котировки больше похожи на заказы. Я видел несколько систем дистрибуции / розничной торговли с таблицей заказов, в которой есть логический флаг с именем что-то вроде IsQuote. Это может показаться простым, поскольку превращать цитату в заказ тривиально. Мне никогда не нравилось это, потому что заказы, которые выходят из кавычек, не всегда точно так, как указано. В результате такие системы теряют информацию, которая может быть полезна (например, отчет, в котором сравниваются кавычки с заказами). Поэтому я предпочитаю системы, в которых таблицы предложений и заказов примерно одинаковы, но разделены. В системах распределения это часто приводит к таким таблицам, как OrderHeader, OrderLine (относится к таблице товаров / запасов), QuoteHeader и QuoteLine. У вас также может быть таблица для моделирования отношений, в которой одна цитата может отображаться на несколько заказов.

Счета обычно являются результатом заказов. Иногда на один счет выставляется более одного заказа. Например, есть случаи, когда я видел, как компании ежемесячно выставляют счета своим хорошим клиентам. Я также видел, как это работает иначе, когда крупный заказ с несколькими отправлениями выставляется по нескольким счетам (по одному на каждую поставку).

Наконец, платежи обычно имеют много-много-многократную связь со счетом. Иногда один платеж покрывает несколько счетов. Иногда один счет оплачивается парой платежей.

3 голосов
/ 04 июля 2012

[Отдельный продукт и услуги игнорируются, для простоты.]

A коммерческое предложение - это предложение о продаже товара по цене во временном окне (диапазоне дат) другой стороне. Этот актив еще не должен существовать. Вы можете указать на спецификации актива (товара).

Котировка должна истечь в какой-то момент, и может быть принята или не принята до истечения срока действия.

A заказ на продажу - это обязательство продать товар по цене на дату другой стороне. Он может быть создан из принятой цитаты.

В заказе или предложении могут быть указаны условия оплаты, например, «Вы можете заплатить нам через 30 дней после доставки».

Заказ может быть на товар, которого еще нет (вы продаете товар, а не актив). Может быть, вы строите это. Может, ты купишь его у кого-то другого.

Заказ на продажу приводит к закупке (взять из инвентаря, изготовления или покупки) физического актива, а затем отгрузке физического актива, который может или не может конец в доставке. Иногда клиент «позвонит» продавцу, чтобы забрать актив.

Вообще говоря, актив должен быть переведен , прежде чем вы сможете считать строку заказа как доход (это зависит от условий доставки, может быть при отгрузке, доставке или доставке). между ними). ​​

Заказ на продажу может быть отменен (например, в некоторых отраслях есть периоды охлаждения).

A счет-фактура - это запрос на оплату за заказанные товары. Это может произойти до доставки, при доставке или после доставки, или вообще не произойти (например, в очереди в McDonald's). В заказе может быть один или несколько счетов, и счет может быть выставлен на несколько заказов.

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

1 голос
/ 29 апреля 2010

В последней системе, над которой я работал, единственной разницей между кавычками и счетами-фактурами (в терминах db) был флаг на таблице, который указывал, была ли кавычка принята клиентом (в этот момент было сгенерировано другое утверждение с все та же информация за исключением того, что это был счет, а не цитата)

1 голос
/ 29 апреля 2010

Я бы порекомендовал быть максимально гибким. Используйте следующие таблицы

Таблица заданий, таблица счетов, таблица предложений

В своей таблице счетов и таблицах предложений сохраните идентификатор задания, присвойте ему индекс и создайте ограничение внешнего ключа. Оставьте кластерный индекс по идентификатору котировки и идентификатору счета.

...