AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.02.2007, 16:20   #1  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Gustav Посмотреть сообщение
Не хватает явно! Увы, много чего не хватает...
УжОс! Многа букв.
И слава богу что нет.. Я одного не понимаю чем этот изврат, которого нет, лучше хранимок и триггеров которые везде есть уже 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), как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
SUM по Amount в Query. С динамическими фильтрами по Grid Poleax DAX: Программирование 8 25.09.2008 16:04
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Отчет "Запасы в наличии" evb DAX: Программирование 19 17.01.2008 07:37
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
select sum(amount) from временная таблица ATimTim DAX: Программирование 6 11.06.2004 14:16
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:28.