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

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

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

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

Я такие задачки на собеседование спрашиваю, когда рекрутов нанимаю.
Если не умеют даже прикинуть, то дело шлак.
С ходу есть как минимум 2 решения.
У Вас какой курс?
...
Рейтинг: 0 / 0
22.11.2011, 11:24
    #37538216
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для склада
Про склад хорошо знает прапорщик (старшина).
Это который в армии. Надо у него поспрашивать.
...
Рейтинг: 0 / 0
22.11.2011, 19:02
    #37539203
SenZhermen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для склада
Volochkova, тогда вам наверняка не составит труда предложить мне эти два решения, за что буду очень признателен. Я надеюсь, что ваш пост не был просто направлен на то, чтобы указать на мое невежество.
LSV, смешно.
...
Рейтинг: 0 / 0
23.11.2011, 02:50
    #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
23.11.2011, 19:48
    #37541349
SenZhermen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для склада
Volochkova, чем хуже качество выпускников, тем ценнее Вы как специалист)
А я как раз и являюсь тем выпускником с плохим качеством, что и заметно.
А судя по студентам двух специальностей на нашей кафедре, которые связаны как раз с ИТ в экономической сфере, за 5 лет из нас не получилось ни экономистов, ни программистов.

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

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

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

К сожалению мой штатный медиум в отпуске.
Где процедура?
Где Ваши данные?
...
Рейтинг: 0 / 0
26.11.2011, 15:59
    #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
27.11.2011, 12:39
    #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
27.11.2011, 20:18
    #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
28.11.2011, 02:19
    #37547045
Volochkova
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для склада
SenZhermen,

Я помню, как сдавала на права.... Дала честное слово.. что пока не научусь ездить, за руль авто на коробке не сяду )
Давайте так...
Или Вы сюда постите скрипты на таблички ну и на данные и саму процедуру или процесс затянется на года..
...
Рейтинг: 0 / 0
28.11.2011, 02:23
    #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
28.11.2011, 18:19
    #37548585
SenZhermen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для склада
Все, почнил) Теперь остаток пишется, но он просто суммирует и то что пришло, и то что ушло заэту дату! А как сделать ,что бы из прихода расход вычитался и в остаток записывался?
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных для склада / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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