Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2016, 06:31   #1
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
Вопрос Как хранить в бд 2 значения одного поля

В бд (Interbase 2009, Firebird 2.5) есть таблица покупки. В записях покупки есть поле А. До какого-то момента если в A хранил, например, число 10, после этого момента(стал ндс-плательщиком) в старых записях вместо A(10) уже надо хранить 8.47(A-18%). Когда делается новая покупка тогда всё в порядке, делается приход новым значением поля A(8.47), но как сохранить старые записи покупки, которые куплены до этого момента, старым значением в А(10) , а после этого момента- новым значением (8.47)?
Например:
Запись покупки:

Код:
Income_Id    IncomeDate    IncomeQty    A
1000          01/05/2016    100        10
Запись продажи до какого-то момента(до 01/01/2017):
Код:
Sale_Id  IncomeId  SaleDate      SaleQty  SalePrice
1          1000    05/08/2016      5           25 
2          1000    01/09/2016      7           25

Надо изъять из старых записей продажи Price, а из записи покупки -A и вычислять Price-A, т.е. 25-10=15

После какого-то момента(01/01/2017), когда из старой записи продаю товар, надо вычислять Price-A, т.е. 25-8.47

Код:
Sale_Id   Income_Id  SaleDate      SaleQty  SalePrice
3           1000      10/01/2017      20         25
но в запись покупки хранится старое значение(10), посколько это старая покупка.
Если переписывать поле A новым значением, тогда A искажается для старых продаж, когда продал за 10!

Последний раз редактировалось delphi159; 10.11.2016 в 20:04.
delphi159 вне форума Ответить с цитированием
Старый 10.11.2016, 09:40   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
в бд 2 значения одного поля
Цитата:
До какого-то момента если в A хранил, например, число 10,
Цитата:
после этого момента(стал ндс-плательщиком) в старых записях A уже надо хранить 8.47(A-18%)
1. хранить старую (т.е. ничего не делать) и делать Вычислимое поле в расчетах
Код:
case when date<RegDate then A-A*0.18 else A end
2. ВТОРОЕ поле (пересчитанная дата) и ОПЯТЬ же вычислимое поле
2.1. второе поле для СПРАВОЧНОГО хранения ИСХОДНОЙ (некорректированной) суммы.

3. опять другое поле, но с немного другим смыслом СУММА коррекции(НДС)
и опять в расчетах использовать ВЫЧИСЛИМОЕ поле
Код:
sum -summNDS as corrSumm
короче говоря переходить на ВЫЧИСЛЕНИЯ правильной суммы в запросах.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.11.2016 в 09:43.
evg_m вне форума Ответить с цитированием
Старый 10.11.2016, 21:34   #3
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

evg_m, а если обойти без вычисления? например так:
В таблице Income добавить varchar поле "Changed", который принимает значения 0 или 1.
Ещё кроме Cost1, Vat1 (себестоимость и ндс до изменения) добавить Cost2, Vat2 (себестоимость и ндс после изменения).
При включении галочки "облагаюсь ндс-ом" в Cost2 и Vat2 запишет новые цифра.

вид старой партии покупки, на которые есть остатки:
Код:
Income_id Goods_id  Cost1  Vat1  Cost2   Vat2  Changed
1          1234      10      0   8.47    1.53    1
а в запросе:
Код:
Case Income.changed=0 then изъять Cost1,Vat1  Else изъять Cost2, Vat2
Ваше мнение?

Последний раз редактировалось delphi159; 10.11.2016 в 22:44.
delphi159 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать автозаполнение поля в DbGrid в зависимости от значения другого поля Gul'ka БД в Delphi 3 21.10.2016 20:26
как получить значение поля грид на основе значения другого lookUp поля malayka БД в Delphi 0 21.04.2010 19:06
Перетаскивание значения одного поля в другое inret Общие вопросы Delphi 3 09.05.2008 15:26
Присвоение значения одного поля другому frai БД в Delphi 2 20.09.2007 15:03