[ОТВЕТИТЬ]
Опции темы
06.10.2010 11:04  
blondbf
Накидал вот тут две функции:
Код:
CREATE OR REPLACE FUNCTION RemainsAtDate (
  s_article IN SMCard.article%TYPE,
  s_date IN SMDocuments.createdat%TYPE,
  s_storeloc IN SMStoreLocations.id%TYPE
) RETURN SMSpec.quantity%TYPE
IS
  o_quantity SMSpec.quantity%TYPE;
BEGIN
SELECT SUM(q)
  INTO o_quantity
  FROM (
    (SELECT SMSpec.quantity AS q FROM SMSpec, SMDocuments
      WHERE
       SMSpec.doctype = SMDocuments.doctype AND
       SMSpec.docid = SMDocuments.id AND
       SMDocuments.locationto = s_storeloc AND
       SMSpec.article = s_article AND
       SMDocuments.docstate = 3 AND
       SMDocuments.createdat <= s_date
    )
    UNION ALL
    (SELECT (0 - SMSpec.quantity) AS q FROM SMSpec, SMDocuments
      WHERE
       SMSpec.doctype = SMDocuments.doctype AND
       SMSpec.docid = SMDocuments.id AND
       SMDocuments.locationfrom = s_storeloc AND
       SMSpec.article = s_article AND
       SMDocuments.docstate = 3 AND
       SMDocuments.createdat <= s_date));
  return o_quantity;
END;
/

Код:
CREATE OR REPLACE FUNCTION RemainsAtDate2 (
  s_article IN SMCard.article%TYPE,
  s_date IN SMDocuments.createdat%TYPE,
  s_storeloc IN SMStoreLocations.id%TYPE
) RETURN SMSpec.quantity%TYPE
IS
  o_quantity SMSpec.quantity%TYPE;
BEGIN
  SELECT
    (SELECT SUM(SMSpec.quantity) FROM SMSpec, SMDocuments
      WHERE
       SMSpec.doctype = SMDocuments.doctype AND
       SMSpec.docid = SMDocuments.id AND
       SMDocuments.locationto = s_storeloc AND
       SMSpec.article = s_article AND
       SMDocuments.docstate = 3 AND
       SMDocuments.createdat <= s_date
    )
    -
    (SELECT SUM(SMSpec.quantity) FROM SMSpec, SMDocuments
      WHERE
       SMSpec.doctype = SMDocuments.doctype AND
       SMSpec.docid = SMDocuments.id AND
       SMDocuments.locationfrom = s_storeloc AND
       SMSpec.article = s_article AND
       SMDocuments.docstate = 3 AND
       SMDocuments.createdat <= s_date)
  INTO o_quantity FROM DUAL;
  return o_quantity;
END;
/

Считаю сумму остатков в месте хранения на какую-нибудь дату: вторая функция выдаёт количество больше чем первая. Не вижу ошибки, помогите найти?
 
06.10.2010 11:08  
Mtirt
Навскидку, не смотрела я твои функции, smspec может быть как цена поставки, так и цена продажи. Как ты их складывать собираешься?
 
06.10.2010 11:15  
blondbf
> Навскидку, не смотрела я твои функции, smspec может быть как цена поставки, так и цена продажи. Как ты из складывать собираешься?
Там не цены, количества.

Вобщем то нашёл затык: если к примеру не было ни одного расхода, только приходы, то во второй функции SUM() во второй даже нуля не вернёт, результат работы вычитания будет неопределён.
 
06.10.2010 13:56  
LexaP
Скорее всего есть акты потерь/обнаружений, влияющие на остатки.
В них не заполняются locationto и locationfrom, поэтому они в ваших функциях не учитываются
 
06.10.2010 13:59  
LexaP
извиняюсь фигню написал, не дочитал первый пост
 
06.10.2010 13:59  
Mtirt
А как акты потерь и обнаружений влияют на остатки?
Это какое-то новое слово в учете...
 
 
Опции темы



Часовой пояс GMT +3, время: 23:26.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.