Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Problemy i pomysły związane z funkcjonowaniem modułu Sprzedaż

Moderator: mikey

Janusz
Posty: 9
Rejestracja: 26 lut 2010, 15:13
Rola: Konsultant CDN XL

Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Post autor: Janusz »

Potrzebuję zrobić kopiowanie atrybutów z pozycji ZS na pozycje ZZ.
Taki kod:

Kod: Zaznacz cały

SELECT Atr_Wartosc, Atr_AtrTyp, Atr_AtrFirma,Atr_AtrNumer, Atr_AtrLp 
FROM CDN.Atrybuty
JOIN CDN.ZamElem as ZS ON Atr_ObiTyp = ZS.ZaE_GIDTyp AND Atr_ObiNumer = ZS.ZaE_GIDNumer and Atr_ObiLp = ZS.ZaE_gidlp AND Atr_AtkID = {ATO_ATKID}
JOIN CDN.ZamZamLinki ON [ZZL_ZSGidTyp] = ZS.ZaE_GIDTyp AND [ZZL_ZSGidNumer] = ZS.ZaE_GIDNumer AND [ZZL_ZSGidLp] = ZS.ZaE_GIDLp
JOIN CDN.ZamElem as ZZ ON [ZZL_ZZGidTyp] = ZZ.ZaE_GIDTyp AND [ZZL_ZZGidNumer] = ZZ.ZaE_GIDNumer AND [ZZL_ZZGidLp] = ZZ.ZaE_GIDLp
where {filtrsql}
niestety nie chce działać :(

Przejrzałem poprzednie posty związane z kopiowaniem, ale odnoszę wrażenie, że jest to za każdym razem trochę "macanie". Czy ktoś mógłby wyjaśnić JAK to działa?

Poniższy kod:

Kod: Zaznacz cały

SELECT Atr_Wartosc, Atr_AtrTyp, Atr_AtrFirma,Atr_AtrNumer, Atr_AtrLp FROM 
CDN.Atrybuty
JOIN CDN.ZamElem as ZS ON Atr_ObiTyp = ZS.ZaE_GIDTyp AND Atr_ObiNumer = ZS.ZaE_GIDNumer and Atr_ObiLp = ZS.ZaE_gidlp 
join CDN.traselem  on trs_zlcNumer=ZS.ZaE_GIDNumer and trs_zlcTyp=ZS.ZaE_GIDTyp and trs_zlclp=ZS.ZaE_gidlp 
join CDN.traElem  on trs_gidNumer=trE_GIDNumer and trs_GIDTyp=trE_GIDTyp and trs_gidlp=tre_gidlp
where  Atr_AtkID = {ATO_ATKID}  and {filtrsql}
kopiuje atrybuty z pozycji ZS na pozycje WZ i jest OK.

P.S. W tym poście http://cdn.3lance.pl/viewtopic.php?f=13&t=2141 Paweł podaje przykład kopiowania z pozycji ZS na pozycji WM. Działa w przypadku WM. Ale uwaga na ZWM!!! Ponieważ (niekonsekwentnie) ZWM sortuje pozycje wydań, to atrybuty przepisują się nie do tych pozycji (bo pozycja docelowa dostaje inny numer Lp).

Awatar użytkownika
wacek
Posty: 714
Rejestracja: 27 paź 2008, 18:04
Rola: Administrator CDN XL
Lokalizacja: Łódzkie

Re: Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Post autor: wacek »

Było już gdzieś na forum, masz dwie takie same tabele w zapytaniu tylko nadałeś im aliasy a {FiltrSQL} zwraca dane dla jednej z nich bez aliasu.
Zobacz tak:

Kod: Zaznacz cały

SELECT Atr_Wartosc, Atr_AtrTyp, Atr_AtrFirma, Atr_AtrNumer, Atr_AtrLp
FROM CDN.Atrybuty
JOIN CDN.ZamElem AS ZS ON Atr_ObiTyp=ZS.ZaE_GIDTyp AND Atr_ObiNumer=ZS.ZaE_GIDNumer AND Atr_ObiLp=ZS.ZaE_GIDLp AND Atr_AtkId={Ato_AtkID}
JOIN CDN.ZamZamLinki ON ZZL_ZSGidTyp=ZS.ZaE_GIDTyp AND ZZL_ZSGidNumer=ZS.ZaE_GIDNumer AND ZZL_ZSGidLp=ZS.ZaE_GIDLp
JOIN CDN.ZamElem AS ZZ ON ZZL_ZZGidTyp=ZZ.ZaE_GIDTyp AND ZZL_ZZGidNumer=ZZ.ZaE_GIDNumer AND ZZL_ZZGidLp=ZZ.ZaE_GIDLp
WHERE ZZ.ZaE_GIDNumer IN (SELECT ZaE_GIDNumer FROM CDN.ZamElem WHERE {FiltrSQL})
Pozdrawiam,
Robert

select convert(varchar(100),0x637a6173616d69207069737aea2074752067b375706f7479203a29)

Janusz
Posty: 9
Rejestracja: 26 lut 2010, 15:13
Rola: Konsultant CDN XL

Re: Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Post autor: Janusz »

WIELKIE DZIĘKI! Działa! :)

Janusz
Posty: 9
Rejestracja: 26 lut 2010, 15:13
Rola: Konsultant CDN XL

Re: Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Post autor: Janusz »

Robert,
za wcześnie się ucieszyłem :(
Jednak nadal nie działa tak jak trzeba. Atrybuty się już kopiują (bo faktycznie nie było żadnego "punktu zaczepienia")
Ale niestety brakuje jeszcze odwołania do (chyba...) lp.
Widać to jak jest np. na 1 pozycji ZS 2 atrybuty a na 2 pozycji inna ilość.
No i wartości się też źle przenoszą...

Czy dobrze kombinuję, że {filtr SQL} to jest to co widać jak się zrobi Ctrl+Wykrzyknik?
Tylko w moim przypadku powinno się odwoływać do pozycji ZS czy ZZ?

Z góry dzięki za pociągnięcie tematu.

Awatar użytkownika
wacek
Posty: 714
Rejestracja: 27 paź 2008, 18:04
Rola: Administrator CDN XL
Lokalizacja: Łódzkie

Re: Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Post autor: wacek »

Janusz pisze:Widać to jak jest np. na 1 pozycji ZS 2 atrybuty a na 2 pozycji inna ilość.
No i wartości się też źle przenoszą...
Nie rozumiem, opisz dokładniej.
Janusz pisze:Czy dobrze kombinuję, że {filtr SQL} to jest to co widać jak się zrobi Ctrl+Wykrzyknik?
Tak.
Janusz pisze:Tylko w moim przypadku powinno się odwoływać do pozycji ZS czy ZZ?
ZZ.
Puść to zapytanie na bazie, zamień {Ato_AtkID} na numer atrybutu, {FiltrSQL} na to co zwraca Ctrl+! dla pozycji ZZ i powinieneś sam dojść do rozwiązania.

Tak na szybko, jeżeli to problem z LP pozycji to zobacz tak:

Kod: Zaznacz cały

SELECT Atr_Wartosc, Atr_AtrTyp, Atr_AtrFirma, Atr_AtrNumer, Atr_AtrLp
FROM CDN.Atrybuty
JOIN CDN.ZamElem AS ZS ON Atr_ObiTyp=ZS.ZaE_GIDTyp AND Atr_ObiNumer=ZS.ZaE_GIDNumer AND Atr_ObiLp=ZS.ZaE_GIDLp AND Atr_AtkId={Ato_AtkID}
JOIN CDN.ZamZamLinki ON ZZL_ZSGidTyp=ZS.ZaE_GIDTyp AND ZZL_ZSGidNumer=ZS.ZaE_GIDNumer AND ZZL_ZSGidLp=ZS.ZaE_GIDLp
JOIN CDN.ZamElem AS ZZ ON ZZL_ZZGidTyp=ZZ.ZaE_GIDTyp AND ZZL_ZZGidNumer=ZZ.ZaE_GIDNumer AND ZZL_ZZGidLp=ZZ.ZaE_GIDLp
WHERE ZZ.ZaE_GIDTyp IN (SELECT ZaE_GIDTyp FROM CDN.ZamElem WHERE {FiltrSQL})
AND ZZ.ZaE_GIDNumer IN (SELECT ZaE_GIDNumer FROM CDN.ZamElem WHERE {FiltrSQL})
AND ZZ.ZaE_GIDLp IN (SELECT ZaE_GIDLp FROM CDN.ZamElem WHERE {FiltrSQL})
Pozdrawiam,
Robert

select convert(varchar(100),0x637a6173616d69207069737aea2074752067b375706f7479203a29)

Janusz
Posty: 9
Rejestracja: 26 lut 2010, 15:13
Rola: Konsultant CDN XL

Re: Kopiowanie atrybutów pozycji ZS na pozycje ZZ

Post autor: Janusz »

Jeszcze raz dziękuję. Działa już poprawnie.

Jedna obserwacja: nabrałem się na działanie akcji ODCZYT przy przypisywaniu atrybutów.
Jak jest wybrana akcja ODCZYT to tak naprawdę atrybut nie dodaje się przy tworzeniu dokumentu! Dopiero jak chcemy zajrzeć czy faktycznie jest, to się tworzy (bo następuje ODCZYT rekordu!). Ale gdybyśmy chcieli zrobić jakiś wydruk, filtr albo zestawieni - nie zadziała bo atrybutu nie ma :(
Jak zrobiłem akcję DODANIE - działa już całkiem tak jak chciałem (czyli atrybuty w bazie tworzą się bez względu na to czy je sprawdzę czy nie).

Następna zagadka w osobnym wątku :)
Jeśli możesz - podpowiedz coś proszę.

ODPOWIEDZ