Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
1-1095444973
Antonmm2
2004-09-17 22:16
2004.10.03
ImageList


3-1094385566
Koala
2004-09-05 15:59
2004.10.03
Помогите с ХП


3-1094036403
Andrey
2004-09-01 15:00
2004.10.03
Создание псевдонима при инсталяции


4-1093075611
kblc
2004-08-21 12:06
2004.10.03
MCI


6-1090591822
Skyhawk
2004-07-23 18:10
2004.10.03
Как зайти в систему на удаленном компьютере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский