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

Бизнес анализ. Получение данных с помощью SELECT. : Супермаг Плюс (Супермаг 2000)

22.11.2024 23:20


05.07.2011 16:57
Добрый день!
Встала задача - реализовать в бизнес-анализе аналог супермаговского отчета "График расчета с поставщиками". Соответсвенно, необходимо отбирать документы, отсрочки, тип отсрочки, задолженность.
За основу берем модель движение артикула по документам. добавляем необходимые поля отсрочки, типа отсрочки в виде формул, отсрочка=CL.PaymentDelay, тип = decode(CL.SupplierFlags, 0, 'б/дней', 'к/дней' )
Проблема возникла с долгом, пишем формулу ДОЛГ=
select dd.DEBT
from supermag.SMWayBillsIn dd
where
dd.ID = D.DocID
Ставим применить к формуле функцию сумму
и при выполнении получаем ошибку


***** Результирующий запрос *****
SELECT (CL.Name),round((CL.PaymentDelay),4),(decode(CL.SupplierFlags, 0, 'б/дней', 'к/дней' )),trunc((D.CreateDat)),(D.DocID),round((SUM(D.TotalPrice)),4),round((SUM(select dd.DEBT

from supermag.SMWayBillsIn dd

where

dd.ID = D.DocID)),4)
FROM SVAMovementArt D,SVCompanies CL
WHERE D.ClientIndex=CL.ID(+) and D.CreateDat between to_date('01.07.2011','DD.MM.YYYY') and to_date('05.07.2011','DD.MM.YYYY') and ((D.OpCode=0 and D.UserOp is null))
GROUP BY trunc((D.CreateDat)),(D.DocID),(CL.Name),(decode(CL.SupplierFlags, 0, 'б/дней', 'к/дней' )),round((CL.PaymentDelay),4)
ORDER BY 1 ASC
ORA-00936: отсутствует выражение
--
Или вариант
***** Результирующий запрос *****

SELECT (CL.Name),trunc((D.CreateDat)),(D.DocID),round((SUM(D.TotalPrice)),4),round((select dd.DEBT

from supermag.SMWayBillsIn dd

where

dd.ID = D.DocID),4)
FROM SVAMovementArt D,SVCompanies CL
WHERE D.ClientIndex=CL.ID(+) and D.CreateDat between to_date('01.07.2011','DD.MM.YYYY') and to_date('05.07.2011','DD.MM.YYYY') and ((D.OpCode=0 and D.UserOp is null))
GROUP BY trunc((D.CreateDat)),(D.DocID),(CL.Name),round((select dd.DEBT

from supermag.SMWayBillsIn dd

where

dd.ID = D.DocID),4)
ORA-22818: выражения подзапросов здесь запрещены

Подскажите, какую формулу прописать для долга. Если ставим без применить к формуле функцию, то долг выводится, но получается по каждому артикулу из документа строка выводится, что не есть гуд.
05.07.2011 17:45
А нельзя как-нибудь привести всё это в читаемый вид?
Запросы выделить тегами, в самих запросах условия как-нибудь красиво отформатировать?
05.07.2011 17:53
Да в принципе с этим уже разобрался, путем создания функции. Поэтому интересует принцип - если в формуле указывается напрямую запрос select и ставится применить к формуле функцию, то бизнес анализ это не переваривает. Есть какой то способ этого избежать, помимо создания функций ?

И еще возник вопрос - можно ли как то банковские дни в календарные перевести ?
есть ли стандартные функции для этого ?
05.07.2011 18:28
в функциях супермага нашел
REP_GETPAYMENTDATE
и DAYISWORK, вторая возвращает 1 если нерабочий и 2 если рабочий. первая - не знаю даже какие аргументы у нее.
05.07.2011 21:14
Цитата:
Starter Да в принципе с этим уже разобрался, путем создания функции. Поэтому интересует принцип - если в формуле указывается напрямую запрос select и ставится применить к формуле функцию, то бизнес анализ это не переваривает. Есть какой то способ этого избежать, помимо создания функций ?
Попробуй select в круглые скобки обернуть.
( select .. from .. where .. )
Первый "***** Результирующий запрос *****" в таком виде работает (в самом СМ не проверял)
06.07.2011 10:23
Первый работает, а второй нет. я так понимаю, ему не нравится то, что в GROUP BY используется Select, интересно, почему тогда в первом случае при генерации SELECT бизнес анализ не добавляет в GROUP BY этот самый запрос, а во втором добавляет.
Есть у кого мысли на этот счет ?
И может кто из гуру напишет код, как имея число дней отсрочки, тип отсрочки, дату накладной и функцию определения рабочий это день или нет (DAYISWORK) определить дату платежа ?
Часовой пояс GMT +3, время: 23:20.

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