|
su.dbms- SU.DBMS ---------------------------------------------------------------------- From : Sergey Pratch 2:5020/400 23 Aug 2002 21:50:26 To : Igor Kuhtin Subject : Hа: Hа: Отчеты -------------------------------------------------------------------------------- Hi! "Igor Kuhtin" <Igor.Kuhtin@p2.f3000.n464.z2.fidonet.org> сообщил/сообщила в новостях следующее: news:1030102966@p2.f3000.n464.z2.fidonet.ftn... > Привет Sergey! > SP> F_ОстаткиHаКонец=SELECT(Остатки) + LeftJoinWithGroup(Двжение*Знак) > > О! Королева в восхищении!!! (с) > > А если операция прихода прошла по товару, не имеющим остатков на стартовую > дату остатков? Твой LeftJoin ее не увидит. Об этом нужно было раньше позаботится, что бы у тебя для любого товара было сальдо, хотя бы с 0. Hа худой конец можн сделать Full Outer Join. > > Может для примера кинешь запрос считающий себестоимость для производства??? Лови, думаешь легче станет: -- Copyright (c) LtawaSoft 1998, 1999, 2000..2002 -- @Dt дата, на которую производится расчет остатков, -- @Schet счет, по которому производится расчет, -- @ID ИД объекта налитичиеского учета, если отсутствует -- расчет идет по всему счету -- @Tovar код товара, если отсутствует - выдаются остатки по всем товарам, -- @Pred код предприятия, по балансу которого производится расчет CREATE PROCEDURE КСУ_ОстаткиБазовый @Dt DATETIME=NULL, @Schet udtSchet=NULL, @ID INT=NULL, @Tovar INT=NULL, @Pred INT=NULL AS IF @Pred IS NULL SELECT TOP 1 @Pred=ID FROM [Предприятия] DECLARE @CurrDt DATETIME SET @CurrDt = convert(datetime, floor(convert(float, GetDate()))); IF @Dt IS NULL SET @Dt = @CurrDt ELSE IF @Dt>@CurrDt SET @Dt = @CurrDt SELECT Ost.Счет, Ost.АналитикаID, Ost.Товар, Ost.Цена, Ost.[Текущий остаток]-ISNULL(Prihod.ПриходПосле,0)+ISNULL(Rashod.РасходПосле,0) AS [Остаток] FROM [Товары-остатки] Ost LEFT JOIN ( -- Расчет прихода товаров SELECT Dv.Дебет AS Счет, Dv.ДебетID AS АналитикаID, Dv.Товар, Dv.Цена, SUM(Dv.Количество) AS ПриходПосле FROM [Документы-проводки] Dv INNER JOIN [Документы] Doc ON (Dv.Предприятие=Doc.Предприятие) AND (Dv.Документ=Doc.ID) WHERE (Dv.Предприятие=@Pred) AND ((Dv.Дебет=@Schet) OR (@Schet IS NULL)) AND ((Dv.ДебетID=@ID) OR (@ID IS NULL)) AND ((Dv.Товар=@Tovar) OR (@Tovar IS NULL)) AND (Doc.Дата>@Dt) AND (Dv.КСУЗнак>=0) AND (Dv.Товар IS NOT NULL) AND (Dv.Цена IS NOT NULL) GROUP BY Dv.Дебет, Dv.ДебетID, Dv.Товар, Dv.Цена ) Prihod ON (Ost.Счет=Prihod.Счет) AND (Ost.АналитикаID=Prihod.АналитикаID) AND (Ost.Товар=Prihod.Товар) AND (Ost.Цена=Prihod.Цена) LEFT JOIN ( -- Расчет расхода товаров SELECT Dv.Кредит AS Счет, Dv.КредитID AS АналитикаID, Dv.Товар, Dv.Цена, SUM(Dv.Количество) AS РасходПосле FROM [Документы-проводки] Dv INNER JOIN [Документы] Doc ON (Dv.Предприятие=Doc.Предприятие) AND (Dv.Документ=Doc.ID) WHERE (Dv.Предприятие=@Pred) AND ((Dv.Кредит=@Schet) OR (@Schet IS NULL)) AND ((Dv.КредитID=@ID) OR (@ID IS NULL)) AND ((Dv.Товар=@Tovar) OR (@Tovar IS NULL)) AND (Doc.Дата>@Dt) AND (Dv.КСУЗнак<=0) AND (Dv.Товар IS NOT NULL) AND (Dv.Цена IS NOT NULL) GROUP BY Dv.Кредит, Dv.КредитID, Dv.Товар, Dv.Цена ) Rashod ON (Ost.Счет=Rashod.Счет) AND (Ost.АналитикаID=Rashod.АналитикаID) AND (Ost.Товар=Rashod.Товар) AND (Ost.Цена=Rashod.Цена) WHERE (Ost.Предприятие=@Pred) AND ((Ost.Счет=@Schet) OR (@Schet IS NULL)) AND ((Ost.АналитикаID=@ID) OR (@ID IS NULL)) AND ((Ost.Товар=@Tovar) OR (@Tovar IS NULL)) RETURN GO -- С уважением, Сергей Прач ================= Please, send you private mail to: s_pratch@mail.ru --- ifmail v.2.15dev5 * Origin: LtawaSoft (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms/1678657d2883c.html, оценка из 5, голосов 10
|