Страница 1 из 2
Триггер на обновление данных
Добавлено: 18 апр 2011, 11:12
Marisha_P
Подскажите, пожалуйста, как правильно написать триггер. Не понимаю связи таблиц

Модуль - Спецоснастка- Акт на списание. Мне нужно обновлять значение поля "Работник" значением поля "Работник" из внешнего атрибута позиции спецификации.
СREATE OR REPLACE TRIGGER GAL."MRK_mbpmove_atribut"
after insert, UPDATE,delete
ON GAL.attrnam
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
:NEW.PERSONS.FIO:=gal.attrnam.name;
end;
Re: Триггер на обновление данных
Добавлено: 18 апр 2011, 11:28
Marisha_P
конечно переменной Persons.fio надо присваивать не attrnam.name ( здесь хранистя само наименование внешного атрибута - "Работник"), а значение TAV. Откуда оно берется?
Re: Триггер на обновление данных
Добавлено: 18 апр 2011, 12:51
RAJAH
Значения атрибутов хранятся в таблице ATTRVAL.
Примерно так, наверное, будет:
Код: Выделить всё
select vstring
from attrval
where
((
<нрек позиции, откуда ссылка на атрибуты> == crec and
<нрек атрибута (attrnam.nrec)> == cattrnam and
<код таблицы, откуда ссылка на атрибут> == wtable
));
Re: Триггер на обновление данных
Добавлено: 18 апр 2011, 13:00
n0where
RAJAH
Тригер вроде MS SQL, галактические принципы работать не будут.
Наверно лучше докомпиляцией или алгоритмом после/до оприходывания, чем изменением тригеров.
Re: Триггер на обновление данных
Добавлено: 18 апр 2011, 13:39
Marisha_P
Докомпиляцией не получится, версия Галактики старая:((((
А как этот алгоритм будет отрабатывать в момент выбора атрибута? он же должен при каждом изменении обновлять спецификацию акта...
Re: Триггер на обновление данных
Добавлено: 18 апр 2011, 14:10
RAJAH
n0where писал(а):RAJAH
Тригер вроде MS SQL, галактические принципы работать не будут.
В vipprogr.chm целый подраздел есть - "Триггеры". Там примерно описано, как средствами VIP триггер повесить.
Marisha_P писал(а):А как этот алгоритм будет отрабатывать в момент выбора атрибута?
vipprogr.chm писал(а):Вызовы триггеров осуществляются системой до и после вставки, изменении и удалении записи в БД.
, т.е., можно применять различные конструкции с использованием
before-after и
insert-update-delete
Re: Триггер на обновление данных
Добавлено: 18 апр 2011, 17:18
oiko
Марина изложите все-таки задачу поподробней.
Откуда вы хотите брать ФИО сотрудника и куда его записывать.
Сам триггер написать несложно.
И зачем вообще заниматься таким безобразием.
Re: Триггер на обновление данных
Добавлено: 19 апр 2011, 07:42
Marisha_P
Мне нужно в акте на списание (модуль "Спецоснастка") обновлять значение поля "Работник" спецификации акта значением поля "Работник" (внешний атрибут позиции спецификации) при каждом изменении значения атрибута....Нужно это дело бухгалтерии

Re: Триггер на обновление данных
Добавлено: 19 апр 2011, 09:08
n0where
Marisha_P писал(а):Мне нужно в акте на списание (модуль "Спецоснастка") обновлять значение поля "Работник" спецификации акта значением поля "Работник" (внешний атрибут позиции спецификации) при каждом изменении значения атрибута....Нужно это дело бухгалтерии

А зачем дублирование полей? и заморочка по ним?
даже логику не понимаю.
1. В акте поле работник может быть один, а в спецификации во внешнем атрибуте (или же в стандартном поле) может быть что угодно.
2. В MBPIN есть данные по Работнику, если вы списываете MBPMOVE (MBPOUT), то списываете приходы,
при этом Логичней было бы не заполнять данные по работнику в шапке и брать поле работник со спецификации (MBPIN), т. к. в акте в шапке это поле нужно только для фильтрации в картотеке карточек спецодежы, оснастке.
Ещё на заметку.
Модуль спецоснастки советую не использовать, если у вас по документу Накладная МЦ - СпецОснастка, спецодежда, проводки берутся из ордеров и методика списания - средние цены. Т.к. в спецоснастку цена попадает с накладной, а не с ордера.
Re: Триггер на обновление данных
Добавлено: 19 апр 2011, 11:51
Marisha_P
А я логику понять уже давно и не пытаюсь

Поставили задачу - хотят, чтобы было так и никак иначе... Надо делать
Re: Триггер на обновление данных
Добавлено: 19 апр 2011, 12:27
n0where
Marisha_P писал(а):А я логику понять уже давно и не пытаюсь

Поставили задачу - хотят, чтобы было так и никак иначе... Надо делать
Предполагаю, единственным требованием - настроена проводка так. Её просто надо перенастроить и все. ))) Проблем будет меньше.
Наверно нужно объяснить, что делать триггерами не целесообразно, т.к. уменьшится производительность и тп и тп...
Тем более есть стандартное решение.
Re: Триггер на обновление данных
Добавлено: 19 апр 2011, 14:33
oiko
Тормозни, тебе задачу некорректно поставили.
А то таблицу Persons будешь при помощи attrval апдейтить.
Re: Триггер на обновление данных
Добавлено: 05 май 2011, 14:04
Marisha_P
C горем пополам написан триггер вот такого вида
CREATE OR REPLACE TRIGGER GAL."MRK_mbpout_rab"
before insert or Update or delete ON "GAL"."ATTRVAL" FOR EACH ROW
WHEN (
(( old.fwtable=2002) or ( 2002 = new.fwtable)) and (new.fcattrnam = '800100000000039D')
)
declare
rabotnik varchar2(16);
old_new_vcomp varchar2(16);
old_new_crec varchar2(16);
BEGIN
begin
select pc.fnrec into rabotnik
from gal.persons PERS, gal.perscard pc, gal.lschet ls
where
(
PC.fCLSCHET = ls.fnrec and
LS.fTPERSON =pers.fnrec and
pers.fnrec = :new.fvcomp);
exception
when others then return;
end;
update gal.mbpin set fcpers = rabotnik
where fnrec in
(select fcmbpin from gal.mbpout where :new.fcrec = fnrec);
END;
/
вопрос такой - данный триггер изменяет значение поля "Работник" только когда выходишь из акта, перемещаешься на другой акт, возвращаешься и тогда только оно становится видимым в спецификации. Это как то можно изменить?:))
Re: Триггер на обновление данных
Добавлено: 05 май 2011, 15:31
edward_K
поскольку снаряды у вас не той системы то никак.
Re: Триггер на обновление данных
Добавлено: 05 май 2011, 16:32
n0where
вопрос такой - данный триггер изменяет значение поля "Работник" только когда выходишь из акта, перемещаешься на другой акт, возвращаешься и тогда только оно становится видимым в спецификации. Это как то можно изменить?:))
Нажимаешь кнопочку обновить экран
