Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Добавление данных в несколько таблиц


Автор: Fishb1 13.2.2009, 17:29
Здравствуйте.

У меня есть база данных складского учета.
В ней 3 таблицы.
таб1-таблица приход материалов;
таб2-склад;
таб3-списание материалов;

По логике должно работать так:
Приходит материал(таб 1) , далле данные из таблицы таб1 должны добавляться в таблицу таб2, но если какие материалы из таб1 совпадают с материалами из таб2, то должны просто суммироваться, а не добавляться как новая запись. Списание материала должно проводится примерно так, таблица таб3 должна брать данные о материале из таблицы таб2(с помощью полей подстановок) при этом количесво которое указано в таб3 должно отниматься от количества из таб2.

На практике не знаю как сделать,помогите пожалуйста.

Если что то не понятно пишите.

Автор: Akina 13.2.2009, 17:34
Цитата(Fishb1 @  13.2.2009,  18:29 Найти цитируемый пост)
В ней 3 таблицы.
таб1-таблица приход материалов;
таб2-склад;
таб3-списание материалов;

Это безобразие - размазывание одной сущности по трём таблицам и хранение переопределённых данных.

Автор: Fishb1 13.2.2009, 17:37
Посоветуйте пожалйста как лучше сделать.

Автор: Akina 13.2.2009, 17:42
Одна таблица. В ней - материал и вид операции (приход, расход) - причём типов прихода/расхода может быть несколько (закупка или возврат из цеха, выдача в работу или списание, и т.п.), для этого существует отдельная таблица операций. А текущие остатки считаются простейшим запросом. 
И всё, собсно...

Автор: Fishb1 13.2.2009, 17:49
Цитата(Akina @ 13.2.2009,  17:42)
В ней - материал и вид операции (приход, расход) - причём типов прихода/расхода может быть несколько (закупка или возврат из цеха, выдача в работу или списание, и т.п.), 

Вы имеете ввиду приход/расход делать в одной таблицы, только при это в отдельном поле указывать причину?

Автор: FINANSIST 13.2.2009, 18:35
Цитата

В ней 3 таблицы.
таб1-таблица приход материалов;
таб2-склад;
таб3-списание материалов;

ААА, КАКОЙ УЖАС!!! smile 
читайте матчасть по нормализации баз данных

Вариант структуры № 1  (как пример)
Код

Дата операции| Приход | Расход | Субконто1(напр.Цена Поставки)| Субконто2(напр.Номер партии)|Субконто3(напр.Наименование SKU, лучше ID SKU)|Субконто4(напр.ID поставщика)|.......СубконтоN|

Вариант 2 совмещаем  аналитики Приход/Расход в одну "Оборот", притоки оформляем знаками + ;оттоки  -
Код

Дата операции| Оборот | Субконто1(напр.Цена Поставки)| Субконто2(напр.Номер партии)|Субконто3(напр.Наименование SKU, лучше ID SKU)|Субконто4(напр.ID поставщика)|.......СубконтоN|

От ID аналитик связка к Primary Key Справочников соответствующих аналитик
Рассчитать начальные и конечные сальдовки при такой структуре - ну вообще никаких проблем!
Сальдо начальное на 31/12/2008 ( то бишь остатки на складе) по Варианту 2
Код

select Sum(Оборот) AS  Остаток на складе, ЦенаПоставки, ДатаОперации, НаименованиеSKU from ОБОРОТЫНАСКЛАДЕ WHERE НаименованиеSKU="Водка" and ДатаОперации<'31/12/2008';

Оборот Водки за новогодние праздники (12 го кажется кончились)
Код

select Sum(Оборот) AS  Обороты на складе, ЦенаПоставки, ДатаОперации, НаименованиеSKU from ОБОРОТЫНАСКЛАДЕ WHERE НаименованиеSKU="Водка" and ДатаОперации between '31/12/2008' and '12/01/2009';

Сальдо конечное
Код

select Sum(Оборот) AS  Остаток на складе, ЦенаПоставки, ДатаОперации, НаименованиеSKU from ОБОРОТЫНАСКЛАДЕ WHERE НаименованиеSKU="Водка" and ДатаОперации<'13/01/2009';

Можно результаты запросов воткнуть в отдельную таблицу а ля "РегистрыОстатков"
(Поступал так, когда было необходимо хранить дополнительные агрегированные расчёты по всем аналитикам для формирования OLAP-кубов)






Автор: bopoha 13.2.2009, 18:39
Fishb1, любые правила нарушать можно, если вы знаете зачем вы их нарушаете.

В Вашем случае я бы действительно обошелся 2-я таблицами.
1-я таблица - накладкная
Код накладной (счетчик)
Номер накладной
... '-- др. поля накладной

3-я Таблица товар 
Код товара 
Код накладной  (счетчик)
Код наименования товара
Количество товара
Количество списанного товара
Сумма за единицу
'-- прочите поля


3-я таблица - наименования товара
Код наименования товара
Наименование товара

В результате списание товара сводится к увеличению "Количество списанного товара" до значения поля "Количество товара". То, что товар повторяется нет ничего страшного. Главное учет!

P.S. В моем случае поле "Количество списанного товара" разделилось на два: Зарезервировано и Списано. Что очень удобно!

Автор: Fishb1 14.2.2009, 11:21
Спасибо большое за помощь. 
Буду делать на двухтаблицах, так действительно проще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)