|
|
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
Есть два блока. Первый блок (SKLAD) - справочник-данные по изделию (допустим монитор). Например 10 различных записей. Помимо характеристик монитора тут еще показывается сколько этих мониторов есть в наличии, то есть на складе. На этом блоке мы проставляем кол-во, которое хотим заказать. И эти данные помещаются во второй блок. К примеру..Монитор№1 на склдае 10 штук...ставим в дсп-поле что хотим заказать 8. Это все ушло во второй блок. Второй блок это История, здесь показывается те же данные по Монитору и кол-во штук, которые заказали (8). Здесь можно корректировать данные по кол-ву, которое мы хотим заказать. Ну допустим передумали, не 8 хотим, а 5. Здесь самое важное не заказать больше чем есть на складе. Так вот реализована сейчас такая проверка. Тригерра на поле КОЛ-ВО в Блоке2 (HISTORY) 1) PRE-TEXT-ITEM declare kol_old number (15,2); begin :GLOBAL.kol_old := :HISTORY.kol; end; 2) WHEN-VALIDATE-ITEM IF :SKLAD.DSP_KOL + :GLOBAL.KOL_OLD<:SKLAD.DSP_KOL THEN message ('Iaee?ea iaiuoa!'); message (' '); RAISE FORM_TRIGGER_FAILURE; end if; Так же имеется триггер на БЛОКЕ SKLAD POST-QUERY (здесь после заказа кол-ва сразу пересчитывается наличие - например было 10...заказали 8...8 ушло в Блок HISTORY а на блоке SKLAD где тролько что было 10...чик пересчиталось и стало 2) а выглядет так: if cc=0 then :SKLAD.DSP_KOL := :SKLAD.KOL; end if; if cc>0 then select :SKLAD.KOL - SUM(HISTORY.KOL) into :SKLAD.DSP_KOL from HISTORY where HISTORU.Monitor_id=:SKLAD.monitor_id end if; Сейчас работает так: Например На Складе 10 штук. Заказал 8. Иду в историю . Меняю заказанное кол-во с 8 на 15. Срабатывает ошибка. Мол нет столько на складе, дружище. А если я, закажу 10...а потом сразу 11, то уже не сругается. Хотя должно бы. Так как переменная GLOBAL.KOL_OLD запомнит знаечение 10... и будет уже так: 2+10<11 что согласно триггеру не даст никаких сообщений, что неверно. Мне то есть надо чтобы GLOBAL.KOL_OLD сохранилась только после первого раза , а потом не менялась. Оч много букв, кому интересно высказывайте свои методы. Буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 15:33 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
зачем такие сложности, и глобал ни к чему.. таблица склад: id товара, кол-во таблица заказы: id заказа, id товара, кол-во заказываем товар (выбираем из списка скажем), ставим кол-во, проверяем со складом, если ок, заказ уходит (commit).. если требуется изменить кол-во в заказе, открываем этот же заказ, меняем кол-во, проверяем на складе по id товара в заказах отличного от текущего .. смысл понятен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 16:34 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
dogalev1983, А если мониторы будут заказывать сразу два человека. Их у Вас 10. Один заказывает 7, а другой 8. Как будете справляться с такой ситуацией? :GLOBAL.KOL_OLD здесь не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 17:17 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
А если обойтись одним триггером WHEN-VALIDATE_RECORD без глобальной переменной. IF((:SKLAD.кол-во на складе - :SKLAD.вводимое число)<0) then message ('Нельзя!') raise form_trigger_failure; END IF; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 17:34 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
Maratusdogalev1983, А если мониторы будут заказывать сразу два человека. Их у Вас 10. Один заказывает 7, а другой 8. Как будете справляться с такой ситуацией? :GLOBAL.KOL_OLD здесь не поможет. тут проще! заказывает всегда только один человек-менеджер. Он один и работает со всей этой формой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 20:57 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
MaratusА если обойтись одним триггером WHEN-VALIDATE_RECORD без глобальной переменной. IF((:SKLAD.кол-во на складе - :SKLAD.вводимое число)<0) then message ('Нельзя!') raise form_trigger_failure; END IF; Ну такой триггер имеется. На блоке SKLAD рядом с полем КОЛ-ВОстоит поле ДСПшное для заказа, где проставляется кол-во, которое хотим заказать. Там работает уже такая проверка. Если заказываем меньше, чем есть на складе, то заказ уходит в таблицу-блок HISTORY/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 21:00 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
mRdUKEзачем такие сложности, и глобал ни к чему.. таблица склад: id товара, кол-во таблица заказы: id заказа, id товара, кол-во заказываем товар (выбираем из списка скажем), ставим кол-во, проверяем со складом, если ок, заказ уходит (commit).. если требуется изменить кол-во в заказе, открываем этот же заказ, меняем кол-во, проверяем на складе по id товара в заказах отличного от текущего .. смысл понятен? извини..не очень понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2011, 21:05 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
Прошу прощения. так все работает нормально. Чот взабламутил я народ. Просто на блоке ИСТОРИИ после каждого изменения кол-вa, если не выдает ошибку - надо сохранять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2011, 07:22 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
ВОПРОС В ДРУГОМ сейчас ругается на commit в Триггер WHEN-VALIDATE-ITEM. куда б его вставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2011, 07:46 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
Можно при переходе на новую запись или элемент делать commit в триггерах when-new-record(item)-instance ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2011, 08:57 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
Алымов АнатолийМожно при переходе на новую запись или элемент делать commit в триггерах when-new-record(item)-instance видел такую реализациб в интернете: http://www.foxbase.ru/Oracle-Forms/kak-oboyti-frm-40737-illegal-restricted-procedure-goblock-in-when-validate-item-trigger.htm в синтаксисе где ошибка в этом скрипте(не пинайте начинающий) ======================================== CREATE OR REPLACE PROCEDURE P_SKLAD_REFR IS BEGIN go_block('SKLAD'); execute_query; END P_SKLAD_REFR; ======================================== ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2011, 09:20 |
|
||
|
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
|
|||
|---|---|---|---|
|
#18+
В статье и предлагается использовать триггер WHEN-NEW-ITEM-INSTANCE в нем проверять есть ли изменения и если есть, выполнять нужные действия. Можно например так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2011, 12:08 |
|
||
|
|

start [/forum/search_topic.php?author=ils-abs&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 441ms |
| total: | 722ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...