powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных для склада
18 сообщений из 18, страница 1 из 1
База данных для склада
    #37537604
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста! Есть у кого-нибудь готовая база данных для склада? Для курсача надо!
мыло: nikishist@mail.ru
...
Рейтинг: 0 / 0
База данных для склада
    #37537627
Aristokrat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SenZhermen,

Кладовщики (КодСотрудника,Ф,И,О,),
МатОтветст (КодМО,КодСотрудника)
Товар(НоменклатурныйНомерТовара,НаименованиеТовара,Цена),
Склад(НомерСклада,НоменклатурныйНомерТовара,КоличествоТовараНаСкладе),
Контрагент(КодКонтрагента,Наименование,ОКПО, Код плательщика НДС, РасчетныйСчет,МФО),
Банк (МФО,НаименованиеБанка),
Накладная (КодНакладной, НомерНакладной,ДатаНакладной, КодКонтрагента,КодМО,ВидОперации(сдал,получил), КодСотрудника,КодТовара,Количество)
в таблицу Накладная идут связи из остальных таблиц по одноименным столбцам

База в access, для курсача не западло и ручками в mssql импортировать :)
взято отсюда cyberforum.ru
...
Рейтинг: 0 / 0
База данных для склада
    #37537685
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, но таблицы в ms sql я уже сделал, но у меня проблема по части написания процедур всяких и т.п.
В принципе, мне бы очень помогло, если бы вы мне подсказали как сделать процедуру, которая будет выводит кол-во товаров на начало дня и на конец. А так же, что бы остаток на конец предыдущего дня воспринимался как остаток на начало следующего.
Заранее, спасибо!
...
Рейтинг: 0 / 0
База данных для склада
    #37537691
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня следующие сущности: приходный оредер ( дата, номер, id ордера), списко приходного ордера( id ордера, id товара, кол-во товара), товар ( id товара, название товара, ед. изм., id товарной группы, цена, id склада), акт о списании и расходный оредер идентичны приходному ордеру, списки акта о списании и расходного оредера идентичны списку приходного ордера. так же еще есть склад, товараня группа и итого. в итого должны быть дата, остаток на начало и остаток на конец. вот в принципе с этим итого я и мучаюсь.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
База данных для склада
    #37537871
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenZhermenСпасибо большое, но таблицы в ms sql я уже сделал, но у меня проблема по части написания процедур всяких и т.п.
В принципе, мне бы очень помогло, если бы вы мне подсказали как сделать процедуру, которая будет выводит кол-во товаров на начало дня и на конец. А так же, что бы остаток на конец предыдущего дня воспринимался как остаток на начало следующего.
Заранее, спасибо!

Я такие задачки на собеседование спрашиваю, когда рекрутов нанимаю.
Если не умеют даже прикинуть, то дело шлак.
С ходу есть как минимум 2 решения.
У Вас какой курс?
...
Рейтинг: 0 / 0
База данных для склада
    #37538216
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про склад хорошо знает прапорщик (старшина).
Это который в армии. Надо у него поспрашивать.
...
Рейтинг: 0 / 0
База данных для склада
    #37539203
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volochkova, тогда вам наверняка не составит труда предложить мне эти два решения, за что буду очень признателен. Я надеюсь, что ваш пост не был просто направлен на то, чтобы указать на мое невежество.
LSV, смешно.
...
Рейтинг: 0 / 0
База данных для склада
    #37539637
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenZhermenVolochkova, тогда вам наверняка не составит труда предложить мне эти два решения, за что буду очень признателен. Я надеюсь, что ваш пост не был просто направлен на то, чтобы указать на мое невежество.
LSV, смешно.

Мне то как раз легко.
Жаль что Вы даже курс не указали. Про ваше якобы что то там мне не интересно.
Меня больше волнует, что от года к году качество выпускников сильно страдает... а местами ИТ да со знанием финансов вообще не найти...

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

И так... на входе у Вас две даты, причем Дата 1 <= Дата 2 и ID Склада ( @D1 smalldatetime, @D2 smalldatetime, @SkladID smallint
Также есть следующие таблицы
Даты везде без часов и минут. Т.е. дата это 2011-11-01...

SP_Product - ( ProductID int, ParentID int, PrName varchar(200) ) - Справочник товаров
REG_ProductMove ( RegData smalldatetime, SkladID smallint, ProductID int, CO tinyint, Rest decimal(12,4)) - Регистр движения товаров по складам
CO - Com/OutCome - 1 Приход. 0 Выбытие. За битовое поле агитацию разводить не надо.
Rest - всегда >= 0

1. Left JOIN (Подзапросы)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Select
      p.ProductID,
      p.PrName,
      ISNULL(RestBegin.A1, 0 ) As KolProdBegin, 
      ISNULL(RestCome.A2, 0 ) As KolProdCome,
      ISNULL(RestOutCome.A3, 0 ) As KolProdOutCome,
      ISNULL(RestBegin.A4, 0 ) As KolProdEnd

From
SP_Product p 
LEFT JOIN
 ( Select ProductID, Sum(Rest ) As A1 From REG_ProductMove Where SkladID = @SkladID and RegData <@D1  Group by ProductID) As RestBegin on p.ProductID = RestBegin.ProductID

LEFT JOIN
 ( Select ProductID, Sum(Rest ) As A2 From REG_ProductMove Where SkladID = @SkladID and RegData >=@D1 And RegData <=@D2 And CO =  1  Group by ProductID  ) As RestCome on
p.ProductID = RestCome.ProductID
LEFT JOIN
 ( Select ProductID, Sum(Rest ) As A3 From REG_ProductMove Where SkladID = @SkladID and RegData >=@D1 And RegData <=@D2 And CO =  0  Group by ProductID  ) As RestOutCome on
p.ProductID = RestOutCome.ProductID
LEFT JOIN
 ( Select ProductID, Sum(Rest ) As A4 From REG_ProductMove Where SkladID = @SkladID and RegData <=@D2 Group by ProductID ) As RestEnd on 
p.ProductID = RestEnd.ProductID

Order by
          p.PrName

2. Второй вариант ( мне самой так нравится больше)
"Эффект сыра"



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Create table #report_tmp (ProductID, A1, A2, A3, A4)

Insert into #report_tmp (ProductID, A1, A2, A3, A4)
Select ProductID, Sum(Rest ) As A1,  0 ,  0 ,  0  From REG_ProductMove Where SkladID = @SkladID and RegData <@D1 Group by ProductID

Insert into #report_tmp (ProductID, A1, A2, A3, A4)
Select ProductID,  0 , Sum(Rest ) As A2,  0 ,  0   From REG_ProductMove Where SkladID = @SkladID and RegData >=@D1 And RegData <=@D2 And CO =  1   Group by ProductID

Insert into #report_tmp (ProductID, A1, A2, A3, A4)
Select ProductID,  0 ,  0 ,  Sum(Rest ) As A3,  0  From REG_ProductMove Where SkladID = @SkladID and RegData >=@D1 And RegData <=@D2 And CO =  0   Group by ProductID

Insert into #report_tmp (ProductID, A1, A2, A3, A4)
Select ProductID,  0 , 0 , 0 , Sum(Rest ) As A4 From REG_ProductMove Where SkladID = @SkladID and RegData <=@D2 Group by ProductID


Select
      p.ProductID,
      p.PrName,
      Rest.KolProdBegin ,
      Rest.KolProdCome,
      Rest.KolProdOutCome,
      Rest.KolProdEnd
From
SP_Product p 
Inner Join (Select ProductID, Sum(A1) As KolProdBegin , Sum(A2) As KolProdCome, Sum(A3) As KolProdOutCome, Sum(A4) As KolProdEnd From #report_tmp  Group by ProductID) As Rest on p.ProductID = Rest.ProductID


Drop table #report_tmp 


Черновики собственно вот они.
Далее пошли нюансы.
1. В Варианте 1 выводится весь каталог. Чтобы фильтрануть только те, по которым есть остатки или движения то надо добавить

Where
ISNULL(RestBegin.A1,0) + ISNULL(RestCome.A2,0) + ISNULL(RestOutCome.A3,0) + ISNULL(RestBegin.A4,0) >0

2. Почему именно left join. Потому что можно получить ситуацию, что товара не было на остатках, его купили и продали. Если это попадает в период @D1, @D2 то с inner join получится ой.

3. Если надо вывести весь каталог в Варианте 2 то финальный INNER JOIN меняется на LEFT


В тексте могут быть очепятки.... но логика думаю понятна.

В принципе лет 10 тому обратно два решения мне с ходу выдавали.
Интерес к рекрут появлялся когда он мог сказать
1) при каких условиях данные отчеты могли показывать некорректные данные. А именно, остаток на конец периода может не быть равным сумме остатка на начало сумма всех приходов и минус все расходы.
2) Как, изменив код процедуры ( а это все процедура) можно решить проблему номер 1) и повысить скорость работы работы отчета.
...
Рейтинг: 0 / 0
База данных для склада
    #37541349
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volochkova, чем хуже качество выпускников, тем ценнее Вы как специалист)
А я как раз и являюсь тем выпускником с плохим качеством, что и заметно.
А судя по студентам двух специальностей на нашей кафедре, которые связаны как раз с ИТ в экономической сфере, за 5 лет из нас не получилось ни экономистов, ни программистов.

Огромное спасибо за подробное разъяснение! Буду пробовать, обязательно опишусь об успехах. Еще раз спасибо за помощь!
...
Рейтинг: 0 / 0
База данных для склада
    #37541705
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenZhermenVolochkova, чем хуже качество выпускников, тем ценнее Вы как специалист)
А я как раз и являюсь тем выпускником с плохим качеством, что и заметно.
А судя по студентам двух специальностей на нашей кафедре, которые связаны как раз с ИТ в экономической сфере, за 5 лет из нас не получилось ни экономистов, ни программистов.

Огромное спасибо за подробное разъяснение! Буду пробовать, обязательно опишусь об успехах. Еще раз спасибо за помощь!

ИТ это как paintball. Это командная игра. Думаю Вы понимание про что я.
Один за всех все не сделает и не переделает.
Удачи.
...
Рейтинг: 0 / 0
База данных для склада
    #37545027
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volochkova, попробовал оба варианта. Создал процедуру, в обоих случаях таблицу выводит, но значения по всем пунктам - 0. Регистр движения товаров по складам заполнил, конечно же. Ума не приложу в чем дело.
Правда пока делал во многом разобрался! Спасибо, вам!
...
Рейтинг: 0 / 0
База данных для склада
    #37545328
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenZhermenVolochkova, попробовал оба варианта. Создал процедуру, в обоих случаях таблицу выводит, но значения по всем пунктам - 0. Регистр движения товаров по складам заполнил, конечно же. Ума не приложу в чем дело.
Правда пока делал во многом разобрался! Спасибо, вам!

К сожалению мой штатный медиум в отпуске.
Где процедура?
Где Ваши данные?
...
Рейтинг: 0 / 0
База данных для склада
    #37545621
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процедура:

@D1 smalldatetime,
@D2 smalldatetime,
@ID_SKLAD smallint
as
Select
t.ID_TOV,
t.NAME_TOV,
ISNULL(RestBegin.A1,0) As KolProdBegin,
ISNULL(RestCome.A2,0) As KolProdCome,
ISNULL(RestOutCome.A3,0) As KolProdOutCome,
ISNULL(RestEnd.A4,0) As KolProdEnd

From
dbo.TOV as t
LEFT JOIN
( Select ID_TOV, Sum(REST ) As A1 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG <@D1 Group by ID_TOV) As RestBegin on t.ID_TOV = RestBegin.ID_TOV

LEFT JOIN
( Select ID_TOV, Sum(REST ) As A2 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG >=@D1 And DATA_REG <=@D2 And CO = 1 Group by ID_TOV ) As RestCome on
t.ID_TOV = RestCome.ID_TOV
LEFT JOIN
( Select ID_TOV, Sum(REST ) As A3 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG >=@D1 And DATA_REG <=@D2 And CO = 0 Group by ID_TOV ) As RestOutCome on
t.ID_TOV = RestOutCome.ID_TOV
LEFT JOIN
( Select ID_TOV, Sum(REST ) As A4 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG <=@D2 Group by ID_TOV ) As RestEnd on
t.ID_TOV = RestBegin.ID_TOV

Order by
t.NAME_TOV


Таблица товаров: http://s017.radikal.ru/i428/1111/b7/cd2b76801fb7.jpg

Таблица регистра движения товаров: http://s49.radikal.ru/i123/1111/30/f15260afd6a3.jpg

Результат выполнения процедуры: http://s16.radikal.ru/i191/1111/34/0133dd33edb6.jpg

Единственное ,что меня смущает (и может в этом и ест mrjhtym всех проблем), мне кажется, я неправильно задаю дату, не в том формате или что-то. на 24.11.2001 - выдает ошибку, не нравится .2011 . C 2011-11-24 не нравится "-". Если пишу 24.11? то показывает таблицу с нулями.
...
Рейтинг: 0 / 0
База данных для склада
    #37546314
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы так сказала....
Так еще идею не портили )

1. Скрипты на создание таблиц... где?
2. Скрипт на заполнение данными?
3. С датами вообще жесть...
А если так
Код: plaintext
1.
2.
declare @d1 smalldatetime 
declare @d2 smalldatetime 
Select @d1 = '2011-11-24', @d2 = '2011-11-24'

У меня есть подозрения что у Вас формат даты - русский

Код: plaintext
1.
2.
declare @d1 smalldatetime 
declare @d2 smalldatetime 
Select @d1 = convert(smalldatetime, '2011-11-24', 101 ), @d2 = convert(smalldatetime, '2011-11-24', 101 )

И запускать процедуру

Код: plaintext
Exec Itog2 @d1, @d2 , @IDSklad = чего то там

p.s. В целом... Ваша структура.... сильно коробит.... Видимо старею.
...
Рейтинг: 0 / 0
База данных для склада
    #37546780
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VolochkovaЯ бы так сказала....
Так еще идею не портили )

Я старался) Ну ладно уж, это мои самые первые шаги в ms sql!)

C датой разобрался. При вызове процедуры теперь таблица с количеством товаров возвращаеся. Но остаток не считается.
К примеру: http://s017.radikal.ru/i404/1111/f1/434ff07edeb9.jpg
По сути, в 4-ой строке остаток должен быть равен 30. Не говоря уже о том ,что везде в остатке ноль пишет.
Или вот: http://s017.radikal.ru/i435/1111/1f/50e25a96749e.jpg
Почему-то аж три строчки с одним и тем же товаром и занчением.
...
Рейтинг: 0 / 0
База данных для склада
    #37547045
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenZhermen,

Я помню, как сдавала на права.... Дала честное слово.. что пока не научусь ездить, за руль авто на коробке не сяду )
Давайте так...
Или Вы сюда постите скрипты на таблички ну и на данные и саму процедуру или процесс затянется на года..
...
Рейтинг: 0 / 0
База данных для склада
    #37547048
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До чего молодеШЬ пошла!!! ....
даже списать толком и то не умеют!!!!!
У него кол-во на конец периода некорректный....


Select
t.ID_TOV,
t.NAME_TOV,
ISNULL(RestBegin.A1,0) As KolProdBegin,
ISNULL(RestCome.A2,0) As KolProdCome,
ISNULL(RestOutCome.A3,0) As KolProdOutCome,
ISNULL(RestEnd.A4,0) As KolProdEnd

From
dbo.TOV as t
LEFT JOIN
( Select ID_TOV, Sum(REST ) As A1 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG <@D1 Group by ID_TOV) As RestBegin on t.ID_TOV = RestBegin.ID_TOV

LEFT JOIN
( Select ID_TOV, Sum(REST ) As A2 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG >=@D1 And DATA_REG <=@D2 And CO = 1 Group by ID_TOV ) As RestCome on
t.ID_TOV = RestCome.ID_TOV
LEFT JOIN
( Select ID_TOV, Sum(REST ) As A3 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG >=@D1 And DATA_REG <=@D2 And CO = 0 Group by ID_TOV ) As RestOutCome on
t.ID_TOV = RestOutCome.ID_TOV
LEFT JOIN
( Select ID_TOV, Sum(REST ) As A4 From dbo.REGISTR Where ID_SKLAD = @ID_SKLAD and DATA_REG <=@D2 Group by ID_TOV ) As RestEnd on
t.ID_TOV = RestBegin .ID_TOV

Order by
t.NAME_TOV

Блин.. ну уж списывать то в ВУЗЕ должны были научиться
...
Рейтинг: 0 / 0
База данных для склада
    #37548585
SenZhermen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, почнил) Теперь остаток пишется, но он просто суммирует и то что пришло, и то что ушло заэту дату! А как сделать ,что бы из прихода расход вычитался и в остаток записывался?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных для склада
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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