Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Работа со записями в БД  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
Уважаемые Гуру!

Просьба помочь мне.

сейчас при оприходовании товара себестоимость складывается и на единицу товара себестоимость получается среденей.

пример
оприходовал 10 шт по 5 р , стало 10 штук за 50 р,

запись в БД
товар колво с/с общ
1 10 50

потом оприходовал 10 шт по 10 р, стало 20 за 150, т.е. с/с ед. стало равно 7,5

товар колво с/с общ
1 20 150


но такой подход не очень нравится

а, охота чтобы в базе сохранялись оприходования отдельными строкам, чтобы не смешивать с/с по разным оприходованиям, т.е.

товар колвос/с общ №оприход
1 10 50 1
1 10 100 2

но в таком случае возникет задача, как "продовать"?

т.е. раньше это была одна строка в БД и продажа не составляла труда, т.к. вычитывалась необходимое кол-во и рассчитовалась себестоимость остатка,

например, после продажи 15 шт строка становилась такой:


товар колво с/с общ
1 5 37.5

а в новой концепции надо чтобы стало так

товар колво с/с общ №оприход
1 0 0 1
1 5 50 2


т.е вычитывается максимум из первого оприходования и только после этого переходим к следующему оприходованию

Посоветуйте, пожалуйста, как правильно и красиво реализовать такую штуку?
13 дек 12, 14:44    [13625979]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
_djХомяГ
Guest
1 Каждый приход товара, новая партия - соответственно храните его в разрезе партийности
2 Продавайте по принципу FIFO LIFO (по номеру партии к примеру)
13 дек 12, 14:51    [13626054]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
_djХомяГ,

если у меня не 2, а 3 и более оприходования, то в предлагаемом вами методе оприходования, кроме первой и последней потеряют свою истинную себестомость?

принципы FIFO LIFO, как и средний применять не хочу.
13 дек 12, 14:57    [13626114]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
_djХомяГ
Guest
Так вашей хотелкой вы и реализовали списание по FIFO реализовав 10 шт прихода(партии) 1 по себестоимоси 5 руб и 5 штук партии 2 по себестоимости 10 руб
13 дек 12, 15:03    [13626197]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
ilshatkin,

а каким боком ваши задачи соотносятся с работой сиквела?
Вопрос имхо исключительно проектирования, а не разработки.

по задаче, перед продажей по фифо находите максимальную себестоимость нужного количества товаров и расчитываете стоимость
13 дек 12, 15:05    [13626212]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
_djХомяГ
Так вашей хотелкой вы и реализовали списание по FIFO реализовав 10 шт прихода(партии) 1 по себестоимоси 5 руб и 5 штук партии 2 по себестоимости 10 руб


сорри, загнался((. так и есть FIFO

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

на входе товар и количество

115


в базе записи

товар колво с/с общ №оприход
1 10 50 1
1 10 100 2


после

товар колво с/с общ №оприход
1 0 0 1
1 5 50 2
13 дек 12, 15:15    [13626317]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
WarAnt
ilshatkin,

а каким боком ваши задачи соотносятся с работой сиквела?
Вопрос имхо исключительно проектирования, а не разработки.

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


соотносятся с работой сиквела так как прошу помочь с кодом запроса

совет Ваш не понял, напишите, пожалуйста, подробнее что имели в виду
13 дек 12, 15:17    [13626337]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
_djХомяГ
Guest
Нужно реалтзовать логику с нараст итогом Например какой партии сколько списать логика следующая:
-----надо продать 15 штук
declare @to_sale table(itemid int,qty int)
insert into @to_sale 
select 1,15


-----на складе 2 партии товара 
declare @store table(itemid int,qty int,partid int)
insert into @store
select 1,10,1
union all
select 1,10,2
;with cte 
as
(
   select itemid,partid,qty,(select sum(qty) from @store s1 where s.itemid=s1.itemid and s.partid>=s1.partid) as tot
   from @store s 
)

-------списываем с хранилища 
select 
  case when s.qty-(tot-c.qty)>c.qty then c.qty 
       when s.qty-(tot-c.qty)<0      then 0
       else s.qty-(tot-c.qty)
  end     , 
  c.itemid,c.partid
from cte c join @to_sale s 
on c.itemid=s.itemid

Как то так
13 дек 12, 15:40    [13626550]     Ответить | Цитировать Сообщить модератору
 Re: Работа со записями в БД  [new]
_djХомяГ
Guest
торопился забыл order by itemid,partid
13 дек 12, 21:40    [13628881]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить