Hej ostatnio popełniłem takie oto zapytanie:
declare @temptable2 as table
(WarehouseID nvarchar(128)
, WarehouseSymbol nvarchar(128)
, ArticleCode nvarchar(128)
, ArticleName nvarchar(128)
, LotId int
, ArticleBasicUnit nvarchar(128)
, DeliveryNumberString nvarchar(128)
, Quantity int
, Value int
, UnitPrice int
, TotalValue int
, DeliveryDate nvarchar(128)
, SystemCurrencySymbol nvarchar(128)
, LackQuantity nvarchar(128)
, ArticleId int
)
INSERT INTO @temptable2
EXEC Storage.StocksOnDate @WarehouseIDs='2',@Date=@DATADO ,@ShowDelivery=1,@ArticleGroup=1,@FilterExpression=NULL
select * into #temp3
from
(select si.ArticleID ,si.Code, si.Name, sum (si.Quantity) ilosc_SPRZEDANA
, Year (sh.StoreOperationDate) Rok
, month (sh.StoreOperationDate) Miesiac
, sum(si.finalprice*si.quantity) wartosc
from SecSales.Headers sh
join Sales.ItemRows si on si.HeaderID=sh.id
join CompanyStructure.CompanyUnits cu on cu.CompanyUnitID=sh.CompanyUnitId
JOIN DT.DocumentTypes DT ON DT.ID = sh.DocumentTypesID
JOIN DT.States DS on sh.DocumentStateID = DS.ID
where cu.Name='Lamel Technology' and dt.Code='MM-' and ds.StateType<>32
and sh.StoreOperationDate >= @DATAOD
and sh.StoreOperationDate <=@DATADO
group by si.Code, si.Name,si.ArticleID
, Year (sh.StoreOperationDate)
, month (sh.StoreOperationDate)
) x
select
-- t.code Kod_WG, t.Name Nazwa_WG,
t.Rok, t.Miesiac,
t.Code Kod_surowca,sa.name Nazwa_surowca,
a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id
,0 stan_mag
,0 wart_mag
,t.code code, sa.name name
from #temp3 t
--r.ArticleCode is null
join
(select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru from
SecAttributes.AttributeClasses ac
join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
join Dic_Articles aa on aa.id=a.ObjectID
where
ac.AttributeClassID=@ATRYBUT
and a.ObjectTypeID=35 ) a on a.ObjectID=t.articleid
join Dic_Articles sa on sa.id=t.articleid
group by t.Rok, t.Miesiac, t.Code,
sa.name ,sa.id,
a.Nazwa_Atrybutu,a.Wartosc_Atrybutu
union all
select x.*, isnull(s1.ilosc_mag,0) stan_mag, isnull(s1.wartosc_mag,0) wart_mag, isnull(s1.Code,x.Kod_surowca) Kod, isnull(s1.name, x.Nazwa_surowca) Nazwa
from
(select
-- t.code Kod_WG, t.Name Nazwa_WG,
0 Rok , 0 Miesiac, t.Code Kod_surowca,
sa.name Nazwa_surowca,
a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id
from #temp3 t
--r.ArticleCode is null
join
(select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru from
SecAttributes.AttributeClasses ac
join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
join Dic_Articles aa on aa.id=a.ObjectID
where
ac.AttributeClassID=@ATRYBUT
and a.ObjectTypeID=35 ) a on a.ObjectID=t.ArticleID
join Dic_Articles sa on sa.id=t.ArticleId
group by
sa.name ,sa.id, t.Code,
a.Nazwa_Atrybutu,a.Wartosc_Atrybutu ) x
full outer join ( select l.ArticleID, xyz.Quantity ilosc_mag , xyz.TotalValue wartosc_mag,DA.Code, da.Name
from Storage.Lots l
join Storage.Stocks ss on ss.LotID=l.LotID
join dic_articles da on da.Id=l.ArticleID
join @temptable2 xyz on xyz.ArticleCode=Code
join
(select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru from
SecAttributes.AttributeClasses ac
join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
join Dic_Articles aa on aa.id=a.ObjectID
where
ac.AttributeClassID=@ATRYBUT
and a.ObjectTypeID=35) a on a.ObjectID=l.ArticleID
where ss.IsLack=0 and ss.Quantity>0 and ss.WarehouseID=2
group by l.ArticleID, da.Code, da.name, xyz.quantity, xyz.totalvalue) s1 on s1.ArticleID=x.id
--order by t.Name, t.Code
drop table #temp3
Odpowiada ono za rotację towarów na magazynie, wg przesunięć z magazynu jednego na każdy pozostały. Na początek wywoływana jest procedura, która generuje stan magazynu na wybrany dzień i wrzucane jest wszystko do tabelki tymczasowej.
Raport wygląda tak jak w załączeniu.
I nie wiem jak rozwiązać dwie rzeczy, teraz jeśli towar rotuje to jego stan jest wrzucany w kolumny '0', a ten co nie rotował to w pierwsze kolumny, których miesiąc jest określany jako puste. Czego brakuje mi w kodzie, żeby to ładnie było segregowane? Chyba, ze przekombinowałem cała strukturę ;)
Druga sprawa, zmodyfikowałem trochę powyższy kod, aby obsługiwał inny magazyn w trochę innym zakresie. W sumie wyrzuciłem jeden warunek z WHERE (dokładnie ten ac.AttributeClassID=@ATRYBUT) oraz zmieniłem magazyn i dodałem warunek między, którymi magazynami przesunięcia ma wybierać. Niestety w kolumnie '0' kod zaczął mi pokazywać pięciokrotność wartości magazynu:
declare @temptable2 as table
(
WarehouseID nvarchar(128)
, WarehouseSymbol nvarchar(128)
, ArticleCode nvarchar(128)
, ArticleName nvarchar(128)
, LotId int
, ArticleBasicUnit nvarchar(128)
, DeliveryNumberString nvarchar(128)
, Quantity int
, Value int
, UnitPrice int
, TotalValue int
, DeliveryDate nvarchar(128)
, SystemCurrencySymbol nvarchar(128)
, LackQuantity nvarchar(128)
, ArticleId int
)
INSERT INTO @temptable2
EXEC Storage.StocksOnDate @WarehouseIDs='15',@Date=@DATADO ,@ShowDelivery=1,@ArticleGroup=1,@FilterExpression=NULL
select * into #temp3
from
(select si.ArticleID ,si.Code, si.Name, sum (si.Quantity) ilosc_SPRZEDANA
, Year (sh.StoreOperationDate) Rok
, month (sh.StoreOperationDate) Miesiac
, sum(si.finalprice*si.quantity) wartosc
from SecSales.Headers sh
join Sales.ItemRows si on si.HeaderID=sh.id
join CompanyStructure.CompanyUnits cu on cu.CompanyUnitID=sh.CompanyUnitId
JOIN DT.DocumentTypes DT ON DT.ID = sh.DocumentTypesID
JOIN DT.States DS on sh.DocumentStateID = DS.ID
where cu.Name='Lamel Technology' and dt.Code='MM-' and ds.StateType<>32 and sh.SourceStoreID='15' and sh.TargetStoreID='16'
and sh.StoreOperationDate >= @DATAOD
and sh.StoreOperationDate <=@DATADO
group by si.Code, si.Name,si.ArticleID
, Year (sh.StoreOperationDate)
, month (sh.StoreOperationDate)
) x
select
-- t.code Kod_WG, t.Name Nazwa_WG,
t.Rok, t.Miesiac,
t.Code Kod_surowca,sa.name Nazwa_surowca,
a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id
,0 stan_mag
,0 wart_mag
,t.code code, sa.name name
from #temp3 t
--r.ArticleCode is null
join
(select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru from
SecAttributes.AttributeClasses ac
join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
join Dic_Articles aa on aa.id=a.ObjectID
where
a.ObjectTypeID=35 ) a on a.ObjectID=t.articleid
join Dic_Articles sa on sa.id=t.articleid
group by t.Rok, t.Miesiac, t.Code,
sa.name ,sa.id,
a.Nazwa_Atrybutu,a.Wartosc_Atrybutu
union all
select x.*, isnull(s1.ilosc_mag,0) stan_mag, isnull(s1.wartosc_mag,0) wart_mag, isnull(s1.Code,x.Kod_surowca) Kod, isnull(s1.name, x.Nazwa_surowca) Nazwa
from
(select
-- t.code Kod_WG, t.Name Nazwa_WG,
0 Rok , 0 Miesiac, t.Code Kod_surowca,
sa.name Nazwa_surowca,
a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id
from #temp3 t
--r.ArticleCode is null
join
(select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru from
SecAttributes.AttributeClasses ac
join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
join Dic_Articles aa on aa.id=a.ObjectID
where
a.ObjectTypeID=35 ) a on a.ObjectID=t.ArticleID
join Dic_Articles sa on sa.id=t.ArticleId
group by
sa.name ,sa.id, t.Code,
a.Nazwa_Atrybutu,a.Wartosc_Atrybutu ) x
full outer join ( select l.ArticleID, xyz.Quantity ilosc_mag , xyz.TotalValue wartosc_mag,DA.Code, da.Name
from Storage.Lots l
join Storage.Stocks ss on ss.LotID=l.LotID
join dic_articles da on da.Id=l.ArticleID
join @temptable2 xyz on xyz.ArticleID=l.ArticleID
join
(select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru from
SecAttributes.AttributeClasses ac
join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
join Dic_Articles aa on aa.id=a.ObjectID
where
a.ObjectTypeID=35) a on a.ObjectID=l.ArticleID
where ss.IsLack=0 and ss.Quantity>0 and ss.WarehouseID=15
group by l.ArticleID, da.Code, da.name, xyz.quantity, xyz.totalvalue) s1 on s1.ArticleID=x.id
--order by t.Name, t.Code
drop table #temp3
Może uda się Wam wskazać gdzie popełniam błąd...
- raport.png (79 KB) - ściągnięć: 87