Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Функция для получения остатка на дату : Супермаг Плюс (Супермаг 2000)

12.11.2024 9:50


19.09.2024 12:51
А под каким пользователем вы это запускаете?
У него есть права на запуск этой процедуры?
19.09.2024 12:56
Цитата:
Mtirt А под каким пользователем вы это запускаете?
У него есть права на запуск этой процедуры?
Хм, не пришло в голову, что такая ошибка может быть связана с правами пользователя. Попытаюсь выяснить (кажется все наши аналитики пользуются этим единым аккаунтом)
19.09.2024 20:26
Цитата:
накалякал что-то такое страшное и медленное
Да, я тоже ужаснулся.

Программисты Супермага давно все это оптимизировали.

Остатки на дату есть регистр SMGOODS минус (минус на минус :) -- да, я тоже "порадовался" читабельности этого подзапроса) все документы от текущего дня до нужной даты.

sql:
SQL код:
 INSERT INTO TTRemains (StoreLoc, Article, Quantity)
     (SELECT Location, Article, Quantity
       FROM (select TG.Location, TG.Article, -SUM(TG.Quantity) Quantity
             from (SELECT AL.Location, AL.Article, SUM(AL.Quantity) Quantity
                     FROM (SELECT D.LocationTo Location,
                                  S.Article,
                                  SUM(S.Quantity) Quantity
                             FROM SmDocuments D, SmSpec S
                            WHERE D.DocType = S.DocType
                              and D.ID = S.DocID
                              and D.LocationTo = v_dep.id
                              and D.DocState >= 2
                              and D.CreatedAt >
                                  c.dat
                            GROUP BY D.LocationTo, S.Article
                           UNION ALL
                           SELECT D.LocationFrom Location,
                                  S.Article,
                                  SUM(-S.Quantity) Quantity
                             FROM SmDocuments D, SmSpec S
                            WHERE D.DocType = S.DocType
                              and D.ID = S.DocID
                              and D.LocationFrom = v_dep.id
                              and D.DocState >= 2
                              and D.CreatedAt >
                                  c.dat
                            GROUP BY D.LocationFrom, S.Article) AL
                    GROUP BY AL.Location, AL.Article
                   HAVING SUM(AL.Quantity) <> 0
                   UNION ALL
                   SELECT smg.StoreLoc, smg.Article, -Quantity
                     FROM SMGoods smg
                    WHERE smg.Quantity <> 0
                      and smg.StoreLoc = v_dep.id) TG
            group by TG.Location, TG.Article
           having SUM(TG.Quantity) <> 0)); 
Часовой пояс GMT +3, время: 09:50.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.