powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Склад. Партионность и Многоскладовость.
4 сообщений из 4, страница 1 из 1
Склад. Партионность и Многоскладовость.
    #34296576
Фотография popotam2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже вторую неделю не могу сообразить как сделать следующее.
1. Бухгалтерия использует списание по средней цене, но так как много перемещений между складами (в реальности - просто кабинеты одного помещения), расчет средней цены я хочу переложить на самый конец - на списание.
2. Для реализации этой задачи - решаю сделать партионный учет.

Структура БД, относящаяся к складу

-- Шапка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 create table Store_Docs (
  UID bigint identity not null,
  OpertationType bigint, -- 0 поступление, 1 перемещение, 2 списание
  OperationDate smalldatetime,
  SourceStore bigint, --- Ссылка на справочник "Складов"
  DestinationStore bigint, --- Ссылка на справочник "Складов"
  Sender bigint, --- Ссылка на справочник "Сотрудники"
  Recipient bigint --- Ссылка на справочник "Сотрудники"
)
-- Строки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table Store_Records (
   UID bigint identity not null,
   PID bigint, --- Ссылка на UID Store_Docs
   Tovar_UID bigint,  --- Ссылка на справочник "Товары"
   Income_Amount  float,
   Income_Price float,
   Outcome_Amount float,
   Outcome_Price float)

Нужно иметь возможность откатить любую операцию, ну или не откатить а "Ой а я позавчера не 10 штук переместила, а 20".
Нужно иметь текущий баланс по каждому из складов в любой момент, кол-во товара и сумма. Нужно знать приход и расход каждого товара за период с суммами.
Цена поступившего товара до самого последнего момента (списание) не меняется.

Пусть будут такие данные:

UID=1
Код: plaintext
1.
2.
 insert into store_docs (  OpertationType ,  OperationDate ,  SourceStore ,  DestinationStore,  Sender   Sender bigint) 
 values ( 0 , '10.01.2007', NULL,  1 ,  5 ,  6 ) 
UID=2
Код: plaintext
1.
2.
 insert into store_docs (  OpertationType ,  OperationDate ,  SourceStore ,  DestinationStore,  Sender   Sender bigint) 
 values ( 0 , '11.01.2007', NULL,  1 ,  5 ,  6 ) 
UID=3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 insert into store_docs (  OpertationType ,  OperationDate ,  SourceStore ,  DestinationStore,  Sender   Sender bigint) 
 values ( 0 , '12.01.2007', NULL,  1 ,  5 ,  6 ) 


 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 1 ,  10 ,   100 ,  120 ,  0 ,  0 )

 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 2 ,  10 ,   200 ,  130 ,  0 ,  0 )

 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 3 ,  10 ,   300 ,  105 ,  0 ,  0 )

т.е. за 3 дня было три поступления на основной склад.

Перемещаем

UID=4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 insert into store_docs (  OpertationType ,  OperationDate ,  SourceStore ,  DestinationStore,  Sender   Sender bigint) 
 values ( 1 , '13.01.2007',  1 ,  2 ,  6 ,  9 ) 

 -- Запишем как поступление
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   350 ,  ??? ,  0 ,  0 )

 -- Запишем как перемещение на другой склад, т.е. уход
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   0 ,   0 ,  350 , ????)


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


-- Запишем поступление на склад получатель
Код: plaintext
1.
2.
3.
4.
5.
6.
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   100 ,   120 ,  0 ,  0 )
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   200 ,   130 ,  0 ,  0 )
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   50 ,   105 ,  0 ,  0 )

-- Уберем со склада источника

Код: plaintext
1.
2.
3.
4.
5.
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   0 ,   0 ,  100 ,  120 )
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   0 ,   0 ,  200 ,  130 )
 insert into store_records ( PID,  Tovar_UID ,   Income_Amount,   Income_Price , Outcome_Amount ,   Outcome_Price )
 ( 4 ,  10 ,   0 ,   0 ,  50 ,  105 )


Но как тогда при перемещении еще раз этого товара - узнать, что товары по 120 и 130 рублей уже полностью перемещены, а вот по цене 105 есть, и отпускать нужно по этой цене? Уважаемые, помогите разобраться!

Может я неправильно спроектировал?
...
Рейтинг: 0 / 0
Склад. Партионность и Многоскладовость.
    #34296621
Фотография popotam2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать отчет при такой структуре?


Кол-во на начало; Сумма на начало; Приход на период; Сумма приход; Расход за период; Сумма расход; Остаток на конец; Сумма на конец
...
Рейтинг: 0 / 0
Склад. Партионность и Многоскладовость.
    #34298385
Фотография barry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
popotam2 пишет:
> Но как тогда при перемещении еще раз этого товара - узнать, что товары
> по 120 и 130 рублей уже полностью перемещены, а вот по цене 105 есть, и
> отпускать нужно по этой цене? Уважаемые, помогите разобраться!
>
> Может я неправильно спроектировал?

У меня например склад реализован жестко по партиям. Структура примерно
такая же, но в расходной партии товара есть ссылка на исходную позицию
по приходу. Проблем с определением входной цены нет. В вашем случае, как
я понял, такой связи нет и непонятно из какой входной партии расходуется
товар?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Склад. Партионность и Многоскладовость.
    #34298816
jikez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем поля
Income_Amount float,
Income_Price float,
Outcome_Amount float,
Outcome_Price float


может расход делать с минусом? так и остаток считать проще
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Склад. Партионность и Многоскладовость.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]