Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Вопрос по триггерам   Найти похожие ветки 

 
jiny   (2004-09-04 13:54) [0]

При создании расходной накладной ,создается временная таблица списка итуда забивают товар. При этом в этой таблице созданы 2 триггер (перед вставкой и перед удалением товара из временной таблицы. Таким образом, попадая во временную таблицу, выбранное кол-во резервируется в справочнике товаров и никто не сможет взять больше положенного
(по формуле остаток потенциальный = остаток текущий - резерв)
После удаления записи во временной таблице - резерв снимается.
Воброс такой :
нужно ли в теле триггера комитить произведенные изменения в таблице товаров, так как при работе 6 пользователей происходит какой то глюк(то ли при зависании , либо еще что-то) и резервирование иногда не происходит.
НУЖНО ЛИ КОМИТИТЬ В ТРИГГЕРЕ ? и как это делается, если на банальное COMMIT триггер ругается

create trigger ..... for .... active before insert/delete
as
begin
update .... set .... where ...;
commit;
end


 
atruhin ©   (2004-09-04 14:58) [1]

А что в IB появились временные таблицы?


 
Zacho ©   (2004-09-04 16:16) [2]

Никаких commit и rollback в DSQL нет, так же, как нет и "временных" таблиц в IB.
Триггер работает в контексте той транзакции, в которой он был инициирован.
Советую изучить http://www.ibase.ru/develop.htm


 
DrPass ©   (2004-09-04 21:50) [3]


> НУЖНО ЛИ КОМИТИТЬ В ТРИГГЕРЕ ?

А КАК ты собрался это делать?


 
atruhin ©   (2004-09-05 15:45) [4]

>так как при работе 6 пользователей происходит какой то глюк
Так может он и происходит от того что ты считаеш временными таблицами?


 
PEAKTOP ©   (2004-09-06 03:21) [5]

Когда-то подобную .... приходилось писать. Решалась задача так.
1) на форме есть IBQuery, и все операции с данными (вставка, удаление и т.п.) идут через SQL запросы или команды.

2) Условно считаем, что в базе есть следующие таблицы:
справочник товаров,
справочник мест хранения,
регистр остатков товаров по местам хранения,
журнал накладных,
табличная часть накладных.
У КАЖДОЙ записи журнала накладных есть столбец-флаг "накладная проведена".

3) При вставке новой записи в "журнал накладных" (то есть заводится навая накладная)производится Commit у IBQuery.Transaction.

4) При добавлении(изменении, удалении) новой записи в табличную часть докумета производится Commit. Соответственно, при помощи триггеров и IBEvents достаточно легко расчитать и показать на всех клиентах текущие остатки товаров, которые равны
 ОстатокТовара = ОстатокВРегистре - ЗарезервированныеВНепроведенныхНакладных;

5) При закрытии формы редактирования докумета у юзера спрашивается "Провести документ ?". Если да, то ставится "флаг докумет проведен"=ИСТИНА. Также можно проведенный документ сделать "непроведенным". На таблице "журнал документов" висит триггер на операцию UPDATE, который в зависимости от нового значения столбца "флаг документ проведен" расходует товар из "регистра остатков" или возвращает его на место. То есть фактически товар расходуется только в этом месте.


 
Рамиль ©   (2004-09-06 08:59) [6]

Расход надо делать не по накладной, а по ордерам. Т. е. набивается накладная с резервом, а при фактическом отпуске товара создаются ордера и уменьшаются остатки.


 
MVA   (2004-09-06 10:10) [7]

Попробуй создать две транзакции: одну на накладную, вторую - для изменения остатков. При добавлении/изменении строки изменяй остаток и коммить второй транзакцией. Но при отмене редактирования накладной надо вернуть все остатки на место, коммит второй транзакции и ролбек первой.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
3-1094060707
Maverick
2004-09-01 21:45
2004.10.03
ODAC


1-1095255024
NeyroSpace
2004-09-15 17:30
2004.10.03
TTreeView. Сделал свою отрисовку в CustomDraw. Осталась


10-1040933797
stikriz
2002-12-26 23:16
2004.10.03
Меня разводят как пацана или мои товарищи сошли с ума ?


1-1095162299
Skip
2004-09-14 15:44
2004.10.03
Список свойств и событий...как?


14-1095076029
Sergey13
2004-09-13 15:47
2004.10.03
Президент совершил революцию в системе выборов