środa, 8 grudnia 2010

Zestawienie modułów XL

W przeciwieństwie do Optimy, XL nie przechowuje wartości Bool w osobnych kolumnach dla każdego modułu zaznaczonego na operatorze, a jedynie określa dane moduły za pomocą jednej wartości liczbowej. Zapewne jest gdzieś procedura, która to zwraca, niemniej jednak jako Pan "zrób to sam" napisałem kawałek kodu, który zwróci nam zestawienie analogiczne jak Optimowa tabela.

DECLARE @Wynik TABLE
(Ope_GID INT,
Ope_Ident VARCHAR(50),
Ope_Nazwisko VARCHAR(50),
Place INT,
Produkcja INT,
Adm_Oddzialow INT,
Serwis INT,
Zamowienia INT,
Administrator INT,
CRM INT,
BI INT,
Srodki INT,
Kompletacja INT,
Ksiegowosc INT,
Sprzedaz INT
)
DECLARE @OpeGID INT
DECLARE @OpeIdent VARCHAR(10)
DECLARE @OpeNazwisko VARCHAR(100)
DECLARE @OpeModuly INT

DECLARE @Place INT
DECLARE @Produkcja INT
DECLARE @Adm_Oddzialow INT
DECLARE @Serwis INT
DECLARE @Zamowienia INT
DECLARE @Administrator INT
DECLARE @CRM INT
DECLARE @BI INT
DECLARE @Srodki INT
DECLARE @Kompletacja INT
DECLARE @Ksiegowosc INT
DECLARE @Sprzedaz INT




DECLARE k CURSOR
FOR
SELECT Ope_GIDNumer, Ope_IDENT, Ope_Nazwisko, Ope_Moduly
FROM CDN.OpeKarty
WHERE Ope_Zablokowane = 0


OPEN k

FETCH NEXT FROM k
INTO @OpeGID, @OpeIdent, @OpeNazwisko, @OpeModuly

WHILE @@FETCH_STATUS = 0
BEGIN

IF @OpeModuly >= 67108864
BEGIN
SET @Place = 1
SET @OpeModuly = @OpeModuly - 67108864
END
ELSE
BEGIN
SET @Place = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 262144
BEGIN
SET @Produkcja = 1
SET @OpeModuly = @OpeModuly - 262144
END
ELSE
BEGIN
SET @Produkcja = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 4096
BEGIN
SET @Adm_Oddzialow = 1
SET @OpeModuly = @OpeModuly - 4096
END
ELSE
BEGIN
SET @Adm_Oddzialow = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 1024
BEGIN
SET @Serwis = 1
SET @OpeModuly = @OpeModuly - 1024
END
ELSE
BEGIN
SET @Serwis = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 512
BEGIN
SET @Zamowienia = 1
SET @OpeModuly = @OpeModuly - 512
END
ELSE
BEGIN
SET @Zamowienia = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 128
BEGIN
SET @Administrator = 1
SET @OpeModuly = @OpeModuly - 128
END
ELSE
BEGIN
SET @Administrator = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 64
BEGIN
SET @CRM = 1
SET @OpeModuly = @OpeModuly - 64
END
ELSE
BEGIN
SET @CRM = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 16
BEGIN
SET @BI = 1
SET @OpeModuly = @OpeModuly - 16
END
ELSE
BEGIN
SET @BI = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 8
BEGIN
SET @Srodki = 1
SET @OpeModuly = @OpeModuly - 8
END
ELSE
BEGIN
SET @Srodki = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 4
BEGIN
SET @Kompletacja = 1
SET @OpeModuly = @OpeModuly - 4
END
ELSE
BEGIN
SET @Kompletacja = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 2
BEGIN
SET @Ksiegowosc = 1
SET @OpeModuly = @OpeModuly - 2
END
ELSE
BEGIN
SET @Ksiegowosc = 0
END
----------------------------------------------------------------------------------------------------------------
IF @OpeModuly >= 1
BEGIN
SET @Sprzedaz = 1
SET @OpeModuly = @OpeModuly - 1
END
ELSE
BEGIN
SET @Sprzedaz = 0
END
----------------------------------------------------------------------------------------------------------------
INSERT INTO @Wynik
SELECT
@OpeGID,
@OpeIdent,
@OpeNazwisko ,
@Place,
@Produkcja,
@Adm_Oddzialow,
@Serwis,
@Zamowienia,
@Administrator,
@CRM,
@BI,
@Srodki,
@Kompletacja,
@Ksiegowosc,
@Sprzedaz

FETCH NEXT FROM k INTO @OpeGID, @OpeIdent, @OpeNazwisko, @OpeModuly
END

CLOSE k
DEALLOCATE k

SELECT Ope_Ident, Ope_Nazwisko, Place, Produkcja, Adm_Oddzialow, Serwis, Zamowienia, Administrator, CRM, BI, Srodki,
Kompletacja,Ksiegowosc,Sprzedaz
FROM @Wynik
ORDER BY Ope_Ident
Komu się to przyda ? Myślę, że niejedna osoba mając mirsz-marsz z loginami (niekiedy jeden użytkownik ma 2-3 loginy w zależności od potrzeb)  będzie kiedyś chciała uporządkować swoje dotychczasowe osiągnięcia w zaznaczaniu fistaszków na kartach operatorów, a wtedy takie zestawienie będzie jak znalazł.

Oczywiście, ostatnie zapytanie w kodzie wymaga modyfikacji, tak aby osiągnąć efekt, który będzie nas interesować w danej chwili, aczkolwiek samo generowanie tabeli modułów uważam za wykonane :P

Brak komentarzy:

Prześlij komentarz