таблицы один-ко-многим - проверка суммы
Alexus12
Дата: 08.08.2005 14:08:20
есть две таблицы с отношениями один-ко-многим:
главная - документ
подчиненная - его детали (товары по позициям)
(примером подобия может служить счет-фактура - заголовок документа и таблица)
проблема:
сумма по полю "сумма к оплате" записей подчиненной таблицы должна идти
с полем "сумма" главной таблицы для каждого документа.
как сделать такое ограничение? только на уровне интерфейса или возможно на уровне таблиц? хранимка?
p.s. убрать поле "сумма" из главной таблицы и считать каждый раз сумму по документу из подчиненной - и таким образом избавиться от проблемы не могу: создатель у документа один, а создатель данных подтаблицы другой.
alex-ls
Дата: 08.08.2005 14:10:53
триггером можно, из триггера процедуру вызвать, если сложные условия
Alexus12
Дата: 08.08.2005 14:37:11
триггером каким? на insert/update/delete в подчиненную таблицу?
а что и как говорить в нем юзеру?
I_L_U_H_A
Дата: 08.08.2005 14:40:08
говорить также, как и везде
raise_application_error
I_L_U_H_A
Дата: 08.08.2005 14:48:35
гы-гы...
грамотный совет... триггером :))
он же будет срабатывать каждый раз, когда будешь вставлять детализацию...
соответсвенно если в заголовке прописана одна сумма и разбита на 5 частей...
то ты никогда не получишь корректный результат...
сумма = сумма1 + сумма2 + ... + суммаN
т.к. сумма будет совпадать только для последней строки....
Интересная у тебя задачка...
Моя в свое время решалась просто - убрать из главной таблы сумму...
В твоем случае, т.к. этого сделать нельзя - либо делать отдельный отчет о несоответствии сумм, либо вначале вставлять подчиненные строки, а только потом - главную и менять подчиненным ссылку на главную...
Но при этом нельзя делать ссылку из дочерней таблы not null...
а это уже грозит другими проблемами :)
andreymx
Дата: 08.08.2005 15:08:51
Alexus12 |
есть две таблицы с отношениями один-ко-многим: главная - документ подчиненная - его детали (товары по позициям) (примером подобия может служить счет-фактура - заголовок документа и таблица)
проблема: сумма по полю "сумма к оплате" записей подчиненной таблицы должна идти с полем "сумма" главной таблицы для каждого документа.
как сделать такое ограничение? только на уровне интерфейса или возможно на уровне таблиц? хранимка?
p.s. убрать поле "сумма" из главной таблицы и считать каждый раз сумму по документу из подчиненной - и таким образом избавиться от проблемы не могу: создатель у документа один, а создатель данных подтаблицы другой. |
Тут где-то уже противоречие: как создатель документа и создатель данных одновременно запишут данные? В момент записи шапки строк-то еще нет?
Alexus12
Дата: 08.08.2005 15:17:37
автор |
В момент записи шапки строк-то еще нет? |
именно 8(
то есть или нет деталей совсем, или их сумма бьется с полем главной
как проверить???
Alexus12
Дата: 08.08.2005 15:23:50
видимо, есть выход через сессионные таблицы+хранимку:
хранимка проверит соответствие итога полю суммы и запостит детали или отвергнет их
есть только одна пакость - два юзера могут идти по документам и повторять работу друг друга 8(((
плюс усложнится правка деталей - не просто смотреть на таблицу деталей, а выгружать в сессионную 8(
andreymx
Дата: 08.08.2005 15:24:18
Alexus12 |
автор | В момент записи шапки строк-то еще нет? |
именно 8( то есть или нет деталей совсем, или их сумма бьется с полем главной
как проверить??? |
Проверять одновременно количество строк и сумму
если количество строк=0, то сумма по барабану (Null)
andreymx
Дата: 08.08.2005 15:29:51
1. Триггер'а(ы) на BeforeEachRowUpdateDeleteInsert + AfterStatementUpdateDeleteInsert + переменные пакетов (для строк)
2. Триггер'а(ы) на BeforeEachRowUpdateDeleteInsert (для шапок)