|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Занимаюсь разработкой структуры базы данных для Интернет-магазина. Сейчас занимаюсь разработкой таблиц для хранения заказа, отдельных позиций заказа и прочей информации, относящейся к заказу. (Сразу хочу сказать, что речь идет о Голландии.) Для каждой позиции заказа нужно хранить цену, процентную ставку НДС и рассчитанный НДС. Не могу решить, как лучше хранить цену позиции заказа. Разные позиции заказа могут иметь разное значение процентной ставки НДС (в зависимости от группы НДС, к которой принадлежит товар). При этом база данных должна использоваться как магазинами типа Business-to-Customer (B2C), так и магазинами типа Business-to-Business (B2B). B2C - магазин, в котором покупают обычные покупатели. Пример - обычный супермаркет. B2B - магазин, в котором покупают компании. Например, оптовый магазин, в котором покупают розничные магазины. В фактуре B2C-магазина цена показана с учетом НДС, в фактуре B2C-магазина цена показана без учета НДС. (НДС показывается отдельно о обоих случаях). Соответственно, в B2C-магазине покупатель видит цены с учетом НДС, а в B2B-магазине без учета НДС. И еще: первоначальная цена товара (которую устанавливает администратор магазина) может быть как с учетом НДС, так и без учета НДС. Для B2C-магазинов удобнее задавать цену с НДС, а для B2B-магазинов без учета НДС. То есть в таблице цен в БД цена может хранится как с учетом НДС, так и без него. Думаю о таких вариантах хранения цены (я имею в виду цену в таблице, где хранятся позиции заказа). Все цены округленные до второго знака после запятой (используется SQL Server 2008, тип данных Decimal(10, 2)): 1. Цена + НДС; % НДС; величина НДС (округленная) 2. Цена без НДС; % НДС; величина НДС (округленная) 3. Цена + НДС; цена без НДС; % НДС. Величину НДС не хранить (можно рассчитать на основе двух цен). 4. Цена без НДС или Цена + НДС; флаг, показывающий, включен НДС в цену или нет; % НДС; величина НДС (округленная). При этом следует иметь в виду, что процентная ставка НДС для позиции заказа может измениться после того, как заказ создан и оплачен. Например, покупатель заказал в магазине телевизор 30 декабря и тут же оплатил заказ. Товара в тот момент на складе нет, он будет поставлен через две недели. 1 января изменился % НДС для этой группы товаров. Фактура выписывается в момент отправки товара покупателю, уже с новым значением процентной ставки НДС. При этом величина цены товара + НДС должна остаться неизменной (производится пересчет, то есть величины цены товара без НДС и величина НДС становятся другими, но их сумма остается неизменной). Вопрос на засыпку: какой метод хранения цены позиции заказа является наилучшим с точки зрения простоты использования, минимизации ошибок округления и т.д. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2010, 19:31 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Flying Dutchman Цена (округленная); Сумма (округленная); % НДС; величина НДС (округленная) Храните так, чтобы минимизировать число делений (они порождают округления). Операции: Сложение, Вычитание безопасны с точки зрения округления. Операция Умножение безопасна если у вас одна валюта, но потенциально может привести к переполнению. Операция Умножение опасна с точки зрения округления, если у вас используются разные валюты с курсом, в котором знаков больше, чем в бухгалтерии (обычно курсы содержат 4 знака после запятой, а финансы считаются с точностью до 2х знаков). Кроме того, учитывайте, что в качестве налогов может выступать не только НДС А также в одном заказе могут встречаться несколько налогов (например, НДС и акциз) Поэтому рекомендую следующие две таблицы: Таблица операций : Код операции; Сумма (округленная); Сумма Налогов (окр); Валюта; Сумма в валюте операции (окр); Сумма Налогов в валюте операции (окр); [опционально - Цена (окр)]. Таблица налогов : Код операции; Код налога; Сумма налога (окр); Валюта; Сумма налога в валюте операции (окр). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2010, 20:07 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Flying DutchmanВопрос на засыпку: какой метод хранения цены позиции заказа является наилучшим с точки зрения простоты использования, минимизации ошибок округления и т.д. ? Имхо наиболее безгеморройный в общем случае метод - храните первичку. Информацию в том виде, в каком она внесена и "работает". - Если в декабре клиент заплатил 30 сребреников - напишите в таблицу "30 сребреников". - Если в январе программа решила, что НДС=10% - модифицируйте запись на "ставка=10%", и опционально можно записать "НДС=3 сребреника". - Итд. Для НДС, суммы без НДС и так далее - можно делать вычисляемые поля, можно делать view, можно ещё как - это уже вопрос десятый. Главное - не терять первичку и плясать от неё. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 00:13 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Подозреваю, что ставка НДС не меняется каждый день. Значит описанная ситуация, когда нужно подгонять цену под итоговую сумму, достаточно редкая. Может всё же хранить цену без НДС? "Накрутить" процент всё же проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 09:37 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Наверное такие вопросы нужно у заказчика узнать С уважением, Naf ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 09:50 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Если в отчетности нужны обе, то явно хранить обе цифры. В противном случае будет трудно избежать тормозов и неточности пересчетов и округлений. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 10:38 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
LSVЕсли в отчетности нужны обе, то явно хранить обе цифры. В противном случае будет трудно избежать тормозов и неточности пересчетов и округлений.А этого вообще как-то можно избежать?.. А вообще, правильно сказали - у заказчика уточнить. Мало ли, что там требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 10:41 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Flying Dutchman Вопрос на засыпку: какой метод хранения цены позиции заказа является наилучшим с точки зрения простоты использования, минимизации ошибок округления и т.д. ? Товар Цена Тип(Вид)НДС Цена_с_НДС Тип(Вид)НДС - это не ставка в общем случае. Не знаю, как для интернет-магазина, но для бухгалтерии может иметь значение не только %% но именно - вид НДС. В Украине, к примеру, есть варианты: с НДС 0% и без НДС - и как ни смешно, это разные вещи с точки зрения учета и дальнейшего отнесения затрат. Цена_с_НДС - уже округленная - увы, надо хранить. В идеале было бы 4 после запятой и банковское округление - тогда нивелируется ошибка округления, а не накапливается. Но кто ж позволит 0,005 округлять к 0, а не к 0,01 ? :) SQL Server 2008, тип данных Decimal(10, 2) - а что у этого типа с округлениями при выполнении операций? Если не ок, то какой-то целочисленный возможно лучше, хотя и напряжно потом все время при визуализаии отделять копейки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 12:36 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
тип Decimal(10, 2) для валюты не очень хорош. А ну как в японию проект портировть придётся? Лучше хранить целое число и единицу измерение - копейки, центы, пенсы и т.п. или их производные. % НДС неудачное решение. Лучше иметь тип налога, точнее метода расчёта налога, или группы налогов. Причём для розницы налог может расчитываться от цены с налогом, а для организаций от цены без налога, т.е. налог один а методов расчёта два. Для отчётности скорее всего понадобится цена без налогов и цена со всеми налогами. Но в целом тут ситуация зависит от форм отчётности. Если потребуется выделить ещё какой нибудь налог, типа налога с продаж, то придётся заводить ещё одну ячейку (т.е. решеие должно быть легко адаптируемо под изменения в законе). Для розницы может быть бессмысленно хранить цену без налога для каждой позиции, потому как в данном случае налог может расчитываться от общей суммы за месяц. В общем тоже от закона зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 13:11 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
John 3VoltaLSVЕсли в отчетности нужны обе, то явно хранить обе цифры. В противном случае будет трудно избежать тормозов и неточности пересчетов и округлений.А этого вообще как-то можно избежать?.. А вообще, правильно сказали - у заказчика уточнить. Мало ли, что там требуется.1. Полностью избежать не получиться, но уменьшить гемор в 10раз - да. 2. У заказчика глупо спрашивать. Ему нужен конечный результат. Его наши техн.проблемы округления мало колышут. Он даже не поймет вопроса. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 15:22 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
softwarer Имхо наиболее безгеморройный в общем случае метод - храните первичку. Информацию в том виде, в каком она внесена и "работает". А что такое "первичка" ? А то я давно уже эмигрировал и в русских терминах не разбираюсь. softwarer - Если в декабре клиент заплатил 30 сребреников - напишите в таблицу "30 сребреников". - Если в январе программа решила, что НДС=10% - модифицируйте запись на "ставка=10%", и опционально можно записать "НДС=3 сребреника". - Итд. Так и собираюсь, но в этом случае еще собираюсь хранить старое значение цены и НДС (пока это не нужно, но кто его знает, может, в будущем понадобится). softwarer Для НДС, суммы без НДС и так далее - можно делать вычисляемые поля, можно делать view, можно ещё как - это уже вопрос десятый. Главное - не терять первичку и плясать от неё. "Первичка" в этом случае - это исходная цена товара, я правильно понимаю ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 17:21 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
mazzy Храните так, чтобы минимизировать число делений (они порождают округления). Операции: Сложение, Вычитание безопасны с точки зрения округления. Операция Умножение безопасна если у вас одна валюта, но потенциально может привести к переполнению. Операция Умножение опасна с точки зрения округления, если у вас используются разные валюты с курсом, в котором знаков больше, чем в бухгалтерии (обычно курсы содержат 4 знака после запятой, а финансы считаются с точностью до 2х знаков). Хотя используем в магазине несколько валют, но пересчета из одной валюты в другую не делаем (просто храним для одного и того же товара нескоько цен в разных валютах). mazzy Кроме того, учитывайте, что в качестве налогов может выступать не только НДС А также в одном заказе могут встречаться несколько налогов (например, НДС и акциз) Ну, с этим у нас в Голландии просто (по крайней мене, для Интернет-магазина) - имеется только НДС трех видов: 0%, 6% и 19%. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 17:46 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
John 3VoltaПодозреваю, что ставка НДС не меняется каждый день. Значит описанная ситуация, когда нужно подгонять цену под итоговую сумму, достаточно редкая. Может всё же хранить цену без НДС? "Накрутить" процент всё же проще. Исходную цену не всегда удобно хранить без НДС. В B2C-магазине удобнее задавать цену сразу с НДС, потому что: 1. Администратору магазина так удобнее, потому что это та цена, которую видит покупатель. 2. %НДС может измениться, и в этом случае цену придется пересчитать, чтобы цена + НДС (для покупателя) осталась той же. Хотя это и редко происходит, но все же лишняя работа. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 18:06 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
NafНаверное такие вопросы нужно у заказчика узнать С уважением, Naf Заказчику нужно, чтобы все было реализовано максимально гибко и удобно для разных ситуаций, используемых сейчас, и для всех других ситуаций еще не известных, которые могут появиться в будущем . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 18:09 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
DataFlower Но кто ж позволит 0,005 округлять к 0, а не к 0,01 ? :) Хорошая мысль, надо не забыть использовать при вычислениях. DataFlower SQL Server 2008, тип данных Decimal(10, 2) - а что у этого типа с округлениями при выполнении операций? Реализовано стандартное математическое округление. Например, для Код: plaintext 1.
и для Код: plaintext 1. 2.
результат будет 2.35. В этом смысле Microsoft непоследователен - например, в C# реализовано банковское округление. В следующем примере Код: plaintext 1. 2.
результат будет 2.34. DataFlower Если не ок, то какой-то целочисленный возможно лучше, хотя и напряжно потом все время при визуализаии отделять копейки. С целочисленным тоже не все просто - при округлении просто отбрасывается дробная часть: Результатом Код: plaintext 1.
будет 3, а не 4, как надо бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 18:25 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
mcureenabтип Decimal(10, 2) для валюты не очень хорош. А ну как в Японию проект портировть придётся? Лучше хранить целое число и единицу измерение - копейки, центы, пенсы и т.п. или их производные. Для Японии можно просто дробную часть всегда устанавливать в 0. Мне кажется, в этом случае проблем быть не должно. В остальных случаях использовать Decimal(10, 2). Правда, в 1995 году (не знаю, как сейчас) была одна валюта, которая состояла не из 100 частей, а из 1000. Но это у какой-то экзотической страны. mcureenab % НДС неудачное решение. Лучше иметь тип налога, точнее метода расчёта налога, или группы налогов. У нас так и сделано - есть несколько групп НДС с разными процентами, каждый товар принадлежит к какой-то группе. Но при создании заказа для каждой позиции заказа сохраняется текущее значение % НДС для этого товара - на всякий случай, вдруг в будущем значение %НДС в таблице групп НДС по какой-нибудь причине изменится (или товар перейдет в другую группу). mcureenab Причём для розницы налог может расчитываться от цены с налогом, а для организаций от цены без налога, т.е. налог один а методов расчёта два. У нас так и происходит - для розницы (B2C) цена товара хранится с НДС, а для организаций (B2B) - без НДС. Конкретнее, магазины могут быть 3-х типов 1. B2C - все цены хранятся с НДС. 2. B2B - все цены хранятся без НДС. 3. B2B и B2C - каждый из покупателей принадлежит к одной из групп. Каждая группа задает тип покупателя - либо B2B (организация), либо B2C (розница). Для каждой группы имеется своя цена товара. Цена для группы B2C хранится с НДС, для группы B2B - без НДС. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 19:10 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Flying DutchmanВ остальных случаях использовать Decimal(10, 2). Традиционное деление фунта :) Всерьёз к этому сейчас относиться не стоит, но поразмышлять интересно. Явно завязываться на тип магазина неверно. Лучше говорить о прайсах для определённых категорий покупателей. Впрочем, не исключаю, что тип магазина как раз и определяет выбор прайса. Как пример - нерезиденты. Я в этом не спец., но вроде как нерезиденты платят налог у себя в стране. Типа Duty free. Выходит для нерезидентов нужен ещё один тип магазина? Хммм... Ещё есть тонкость - как считать налог (отчасти уже озвученная для розничных покупателей). По каждой позиции или по итогу. И даже по каждой позиции налог можно считать с единицы товара, а можно со всей партии. Если расчёт по итогу, то для B2B хранить цену единицы товара с НДС можно только чтобы сориентировать клиента в примерной цене товара. Когда формируется счёт, нужно брать цену без НДС, считать итог, и с него брать НДС. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2010, 20:01 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Насоветовать можно много, все же полагаю ТС стоит пошерстить законодательство Нидерландов на предмет налогооблагаемой базы и расчета налогов. Могу предположить что стандартно для буржуев позиции заказа группируются по ставке, далее рассчитывается общая сумма по каждой ставке и мажется на отдельные позиции заказа. Думаю в этом случае в строках удобно хранить признак "цена включает НДС", цену единицы, ставку НДС - это скажем так базовые поля. Ну расчетный - сумма без НДС, сумма с НДС, сумма НДС. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2010, 00:58 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Flying Dutchman"Первичка" в этом случае - это исходная цена товара, я правильно понимаю ? Первичка - это не цена, это стоимость (сумма). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2010, 14:23 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
Flying Dutchman"Первичка" в этом случае - это исходная цена товара, я правильно понимаю ? "Первичка" - это исходные данные, цифры, данные снаружи. Скажем: - Продавец установил отпускную цену 30 сребреников/иисус (предположим, включая ндс). Один объективный факт. - НДС равен 10%. Другой объективный факт. - Покупатель приобрёл двух с половиной иисусов за 75 сребреников. Третий объективный факт. Вот эти четыре числа - 30, 0.1, 2.5 и 75 - точно и в первую очередь надо хранить. Остальное можно хранить, можно считать на лету, но танцевать надо стараться от печки, от этих четырёх чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2010, 14:36 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
softwarer - Продавец установил отпускную цену 30 сребреников/иисус (предположим, включая ндс). Один объективный факт. ... Можно добавить ещё факт: - Продавец уплатил в бюджет НДС 2.73 сребреников по обратной ставке 10%. Когда расчитал/уплатил, нужно ставку и сумму НДС тоже сохранять, по факту. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2010, 19:20 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
mcureenabsoftwarer - Продавец установил отпускную цену 30 сребреников/иисус (предположим, включая ндс). Один объективный факт. ... Можно добавить ещё факт: - Продавец уплатил в бюджет НДС 2.73 сребреников по обратной ставке 10%. Когда расчитал/уплатил, нужно ставку и сумму НДС тоже сохранять, по факту. +1 а валовый доход записывать в сумме без НДС! (кажется :) уже не помню точно) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2010, 19:43 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
mcureenabМожно добавить ещё факт: - Продавец уплатил в бюджет НДС 2.73 сребреников по обратной ставке 10%. 6.83 ;-) mcureenabКогда расчитал/уплатил, нужно ставку и сумму НДС тоже сохранять, по факту. Да, именно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2010, 20:19 |
|
Хранение цены товара: с НДС или без ?
|
|||
---|---|---|---|
#18+
"Ломаю голову" - как "выкручиваться"? Накладная поставщика (ТОРГ-12 от 1С) цены без НДС - итог по накладной "бухгалтерски" неверен. Демо по одной позиции: Колбаса краковская. цена 199.99 * кол-во 1.072 = сумма_без_ндс 214.39 (214.38928), с НДС 252.98 (252.97935...) (у поставщика 252.99) У меня цены с НДС. цена 235.99 (235.98888...) * кол-во 1.072 = сумма_с_ндс 252.98 И так по десятку позиций. В результате несовпадение на несколько копеек по всем видам итогов документа (НДС, СУММА_БЕЗ_НДС, СУММА_С_НДС). Шуткой предложил указывать цены и суммы с точностью 12 знаков, т.е. цена 235.9888801431 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2010, 22:46 |
|
|
start [/forum/topic.php?fid=33&msg=36459589&tid=1548374]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 421ms |
0 / 0 |