powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
12 сообщений из 12, страница 1 из 1
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37216632
dogalev1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два блока. Первый блок (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 сохранилась только после первого раза , а потом не менялась.


Оч много букв, кому интересно высказывайте свои методы. Буду благодарен.
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37216783
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем такие сложности, и глобал ни к чему..

таблица склад: id товара, кол-во
таблица заказы: id заказа, id товара, кол-во

заказываем товар (выбираем из списка скажем), ставим кол-во, проверяем со складом, если ок, заказ уходит (commit)..
если требуется изменить кол-во в заказе, открываем этот же заказ, меняем кол-во, проверяем на складе по id товара в заказах отличного от текущего .. смысл понятен?
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37216898
Maratus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dogalev1983,
А если мониторы будут заказывать сразу два человека.
Их у Вас 10. Один заказывает 7, а другой 8.
Как будете справляться с такой ситуацией?
:GLOBAL.KOL_OLD здесь не поможет.
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37216955
Maratus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если обойтись одним триггером WHEN-VALIDATE_RECORD без глобальной переменной.
IF((:SKLAD.кол-во на складе - :SKLAD.вводимое число)<0) then
message ('Нельзя!')
raise form_trigger_failure;
END IF;
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217328
dogalev1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maratusdogalev1983,
А если мониторы будут заказывать сразу два человека.
Их у Вас 10. Один заказывает 7, а другой 8.
Как будете справляться с такой ситуацией?
:GLOBAL.KOL_OLD здесь не поможет.

тут проще! заказывает всегда только один человек-менеджер. Он один и работает со всей этой формой.
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217330
dogalev1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratusА если обойтись одним триггером WHEN-VALIDATE_RECORD без глобальной переменной.
IF((:SKLAD.кол-во на складе - :SKLAD.вводимое число)<0) then
message ('Нельзя!')
raise form_trigger_failure;
END IF;

Ну такой триггер имеется. На блоке SKLAD рядом с полем КОЛ-ВОстоит поле ДСПшное для заказа, где проставляется кол-во, которое хотим заказать. Там работает уже такая проверка. Если заказываем меньше, чем есть на складе, то заказ уходит в таблицу-блок HISTORY/
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217336
dogalev1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKEзачем такие сложности, и глобал ни к чему..

таблица склад: id товара, кол-во
таблица заказы: id заказа, id товара, кол-во

заказываем товар (выбираем из списка скажем), ставим кол-во, проверяем со складом, если ок, заказ уходит (commit)..
если требуется изменить кол-во в заказе, открываем этот же заказ, меняем кол-во, проверяем на складе по id товара в заказах отличного от текущего .. смысл понятен?
извини..не очень понял
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217662
dogalevs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения. так все работает нормально.
Чот взабламутил я народ.

Просто на блоке ИСТОРИИ после каждого изменения кол-вa, если не выдает ошибку - надо сохранять.
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217682
dogalevs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВОПРОС В ДРУГОМ сейчас ругается на commit в Триггер WHEN-VALIDATE-ITEM. куда б его вставить?
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217736
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно при переходе на новую запись или элемент делать commit в триггерах when-new-record(item)-instance
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37217757
dogalevs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алымов АнатолийМожно при переходе на новую запись или элемент делать 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;
========================================
...
Рейтинг: 0 / 0
Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
    #37218122
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В статье и предлагается использовать триггер WHEN-NEW-ITEM-INSTANCE в нем проверять есть ли изменения и если есть, выполнять нужные действия.
Можно например так:
Код: plaintext
1.
2.
3.
if :SYSTEM.BLOCK_STATUS='CHANGED' then
	commit_form;
end if;
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Математич штучка. Триггер.Выручайте, уважаемые форумчане!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]