|
01.02.2007, 16:20 | #1 |
злыдень
|
УжОс! Многа букв.
И слава богу что нет.. Я одного не понимаю чем этот изврат, которого нет, лучше хранимок и триггеров которые везде есть уже n десятков лет ??? Неужели программировать в родном "последовательно-процедурном" стиле не приятнее на порядок??? Вот как выглядит типичная обработка на firebird, по моему все понятно без слов: Код: AS declare variable znak integer; declare variable sumnds double precision; BEGIN IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_Z_PROVODKA_ID,1); /* Перед подстановкой в основную считаем параметры осн записи и рассчитаем себестоимость*/ if (new.id_pribyl<>0) then /* Прибыли */ begin select first 1 data, skladkod, statuskod, celkod from Z_PRIBYL where Z_PRIBYL.id = NEW.id_pribyl into new.data, new.skladprihod, new.status, new.typeoper; select result from f_valuta_calc(new.summaval,new.data,new.valutakod) into new.summaprihod; new.summaoper = new.summaprihod; end if (new.id_ubytok<>0) then/* Убытки */ begin select first 1 data, skladkod, statuskod, celkod from Z_UBYTOK where Z_UBYTOK.id = NEW.id_ubytok into new.data, new.skladrashod, new.status, new.typeoper; select result from z_ostatok_stoim(new.status,new.tovarkod,new.skladrashod,new.kolnov * (-1)) into new.summarashod; new.summaoper = new.summarashod; end if (new.id_perem <> 0) then /*Перемещения*/ begin select first 1 dataprih, datarash, skladrashodkod, skladprihodkod, statuskod, celkod from Z_PEREM where Z_PEREM.id = new.id_perem into new.data,new.datarashod, new.skladrashod, new.skladprihod, new.status, new.typeoper; select result from z_ostatok_stoim(new.status,new.tovarkod,new.skladrashod,new.kolnov * (-1)) into new.summarashod; new.summaprihod = (-1)*new.summarashod; new.summaoper = new.summarashod; end if (new.id_zpnakl <> 0) then /* Закупка */ begin select first 1 data, skladkod, statuskod, celkod, postkod, valutakod from zp_nakl where zp_nakl.id = NEW.id_zpnakl into new.data, new.skladprihod, new.status, new.typeoper, new.postkod, new.valutakod; select result from f_valuta_calc((new.summaval-new.summands),new.data,new.valutakod) into new.summaprihod; UPDATE ZP_NAKL SET SUMMA = SUMMA + new.summaprihod WHERE (ID = new.id_zpnakl); select result from f_valuta_calc(new.summands,new.data,new.valutakod) into new.summaoper; UPDATE ZP_NAKL SET SUMMANDS = SUMMANDS + new.summaoper WHERE (ID = new.id_zpnakl); new.summaoper = new.summaprihod; end if (new.id_prnakl <> 0) then /* Продажа */ begin select first 1 data, skladkod, statuskod, celkod, klientkod, valutakod from pr_nakl where pr_nakl.id = NEW.id_prnakl into new.data, new.skladrashod, new.status, new.typeoper, new.klientkod, new.valutakod; select result from f_valuta_calc(new.summaval-new.summands,new.data,new.valutakod) into new.summaoper; select result from z_ostatok_stoim(new.status,new.tovarkod,new.skladrashod,new.kolnov * (-1)) into new.summarashod; select result from f_valuta_calc(new.summands,new.data,new.valutakod) into sumnds; UPDATE PR_NAKL SET SUMMA = SUMMA + new.summaoper, SUMMANDS = SUMMANDS + :sumnds WHERE (ID = new.id_prnakl); end if (new.kolnov = 0) then exit; /* Контроль */ if ((new.tovarkod is null) or (new.skladprihod is null AND new.skladrashod is null)) then execute procedure ERROR('Проводки в никуда быть не может'); /* Собственно тригер */ /* Приход:"+", Расход:"-" */ if (new.status > 0) then znak = 1; else znak = (-1); /*Возвраты*/ if (not (new.skladprihod is null)) then begin new.kolprihod = new.kolnov; execute procedure z_ostatok_calc (new.tovarkod,new.skladprihod,new.kolprihod,new.summaprihod,:znak,new.status); end if (not (new.skladrashod is null)) then begin new.kolrashod = new.kolnov*(-1); execute procedure z_ostatok_calc (new.tovarkod,new.skladrashod,new.kolrashod,new.summarashod,:znak,new.status); end /* Обновим статусы*/ if (new.status = 1) then new.ZAAVKA = new.kolnov; else if (new.status = 2) then new.ZAKAZ = new.kolnov; else if (new.status = 3) then new.REZERV = new.kolnov; else if (new.status = 4) then new.PUT = new.kolnov; else if (new.status = 5) then new.ZAVER6ENO = new.kolnov; END
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
Теги |
amount, запрос (query), как правильно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|