Kopiowanie załączników

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Kopiowanie załączników

Post autor: VIkking »

Witam,

czy ktoś może pomoże jak skopiować załącznik z OS do ZS. Jak biorę OS i przekształcam w ZS to nie kopiuję załączników.
Nawet coś napisałem triggera na bazie ale zawiesza program:

Kod: Zaznacz cały

ALTER TRIGGER [CDN].[ZamNag_kopijzalacznik]
  ON [CDN].[ZamNag]
  FOR UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @zamgidnumber INT
DECLARE @zamgidtyp INT
DECLARE @licznik INT
DECLARE @obinumer INT
DECLARE @numerzal INT
SET @zamgidnumber = (SELECT ZaN_GIDNumer FROM inserted)
SET @zamgidtyp = (SELECT ZaN_GIDTyp FROM inserted)


IF EXISTS (SELECT DOZ_ZRDNumer FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer WHERE ZaN_GIDNumer = @zamgidnumber AND ZaN_GIDTyp =@zamgidtyp )
BEGIN
	IF EXISTS (SELECT DAO_ObiNumer FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer WHERE ZaN_GIDNumer = @zamgidnumber AND ZaN_GIDTyp =@zamgidtyp)
	BEGIN
	SET IDENTITY_INSERT CDN.DaneObiekty ON
	SET @licznik = (SELECT TOP 1 DAO_ZalID FROM CDN.DaneObiekty ORDER BY DAO_ZalID DESC)+1
	/*SET @obinumer = (SELECT TOP 1 DAO_ObiNumer FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE (ZaN_GIDTyp=@zamgidtyp AND ZaN_GIDNumer=@zamgidnumber))*/
	SET @numerzal = (SELECT TOP 1 DAO_DABId FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE (ZaN_GIDTyp=@zamgidtyp AND ZaN_GIDNumer=@zamgidnumber))
	INSERT INTO CDN.DaneObiekty (DAO_DABId,	DAO_ObiTyp,	DAO_ObiNumer,	DAO_ObiLp,	DAO_ObiSubLp,	DAO_Domyslna,	DAO_Blokada,	DAO_PPPrawa,	DAO_PKPrawa	,DAO_eSklep	,DAO_iMall,	DAO_MobSpr,	DAO_BI	,DAO_Systemowa,	DAO_Pozycja,	DAO_Retail,	DAO_ZalID	,DAO_WMSZarzadzanie,	DAO_WMSMagazynier	,DAO_CzasModyfikacji)
	VALUES (@numerzal,960, @zamgidnumber,0,0,0,0,0,0,0,0,0,0,0,1,0,@licznik,0,0,0)
	SET IDENTITY_INSERT CDN.DaneObiekty OFF
	END
END
END
ktoś kiedyś spotkał się z czymś takim?

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Kopiowanie załączników

Post autor: VIkking »

Zmodyfikowałem kod i wydaje się ok ale dalej wywala że naruszam:
Szczegóły operacji:
Operacja zmiany obiektu ZamNag o identyfikatorze (8224:538976288:538976288:8224.
Identyfikator operacji: UstawAktywny-2.
Błąd: Naruszenie podreguły PRIMARY KEY ograniczenia „DAO_Primary”. Nie można wstawić zduplikowanego klucza w obiekcie „CDN.DaneObiekty”. Wartość zduplikowanego klucza to (318, 960, 112943, 0, 0).
Wykonywanie instrukcji zostało przerwane. (23000), Naruszenie podreguły PRIMARY KEY ograniczenia „DAO_Primary”. Nie można wstawić zduplikowanego klucza w obiekcie „CDN.DaneObiekty”. Wartość zduplikowanego klucza to (318, 960, 112943, 0, 0).
Wykonywanie instrukcji zostało przerwane..

Kod: Zaznacz cały

ALTER TRIGGER [CDN].[ZamNag_kopijzalacznik]
  ON [CDN].[ZamNag]
  FOR UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @zamgidnumber INT
DECLARE @zamgidtyp INT
DECLARE @licznik INT
DECLARE @ZANTYP INT
DECLARE @numerzal INT
DECLARE @obinumer INT
SET @zamgidnumber = (SELECT ZaN_GIDNumer FROM inserted WHERE  ZaN_ZamTyp = 1280 )
SET @zamgidtyp = (SELECT ZaN_GIDTyp FROM inserted WHERE  ZaN_ZamTyp = 1280  )
SET @ZANTYP = (SELECT ZAN_zamtyp FROM inserted)
BEGIN
IF EXISTS (SELECT * FROM CDN.DokZwiazane  WHERE DOZ_DOKNumer = @zamgidnumber  )
SET @obinumer = (SELECT TOP 1 DOZ_ZRDNumer FROM CDN.DokZwiazane WHERE DOZ_DOKNumer = @zamgidnumber )
BEGIN
	IF EXISTS (SELECT * FROM CDN.DaneObiekty  WHERE DAO_ObiNumer = @obinumer )
	BEGIN
	SET IDENTITY_INSERT CDN.DaneObiekty ON
	SET @licznik = (SELECT TOP 1 DAO_ZalID FROM CDN.DaneObiekty ORDER BY DAO_ZalID DESC)+1
	/*SET @obinumer = (SELECT TOP 1 DAO_ObiNumer FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE (ZaN_GIDTyp=@zamgidtyp AND ZaN_GIDNumer=@zamgidnumber))*/
	SET @numerzal = (SELECT TOP 1 DAO_DABId FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE  DAO_ObiNumer=@obinumer )
	INSERT INTO CDN.DaneObiekty (DAO_DABId,	DAO_ObiTyp,	DAO_ObiNumer,	DAO_ObiLp,	DAO_ObiSubLp,	DAO_Domyslna,	DAO_Blokada,	DAO_PPPrawa,	DAO_PKPrawa	,DAO_eSklep	,DAO_iMall,	DAO_MobSpr,	DAO_BI	,DAO_Systemowa,	DAO_Pozycja,	DAO_Retail,	DAO_ZalID	,DAO_WMSZarzadzanie,	DAO_WMSMagazynier	,DAO_CzasModyfikacji)
	VALUES (@numerzal,960, @zamgidnumber,0,0,0,0,0,0,0,0,0,0,0,1,0,@licznik,0,0,0)
	SET IDENTITY_INSERT CDN.DaneObiekty OFF
	END
END
END
END

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Kopiowanie załączników

Post autor: praiser »

wygląda, że trigger ma w zmiennej @zamgidnumber gidnumer oferty a nie zamówienia dlatego dubluje się primary key.

trigger jest for update więc może lepiej dodać warunek np. na odbuforowanie ? if update (zan_stan).

@licznik nie potrzebnie jest liczony bo dao_zalid to pole auto increment

taki jak poniżej u mnie działa ale to trigger na 1 załącznik (select top1). insert musiałby być typu insert into ... select , który doda wszystkie pasujące do głównego klucza

Kod: Zaznacz cały

ALTER TRIGGER [CDN].[ZamNag_kopijzalacznik]
  ON [CDN].[ZamNag]
  FOR UPDATE
AS
BEGIN

DECLARE @zamgidnumber INT
DECLARE @zamgidtyp INT
DECLARE @licznik INT
DECLARE @ZANTYP INT
DECLARE @numerzal INT
DECLARE @obinumer INT

SET NOCOUNT ON

IF UPDATE (Zan_Stan)
BEGIN

IF EXISTS (select 1 from inserted where Zan_Stan=3)
BEGIN

SET @zamgidnumber = (SELECT ZaN_GIDNumer FROM inserted WHERE ZaN_ZamTyp = 1280 )
SET @zamgidtyp = (SELECT ZaN_GIDTyp FROM inserted WHERE  ZaN_ZamTyp = 1280  )
SET @ZANTYP = (SELECT ZAN_zamtyp FROM inserted)

BEGIN
IF EXISTS (SELECT * FROM CDN.DokZwiazane  WHERE DOZ_DOKNumer = @zamgidnumber  )
SET @obinumer = (SELECT TOP 1 DOZ_ZRDNumer FROM CDN.DokZwiazane WHERE DOZ_DOKNumer = @zamgidnumber )
BEGIN
	IF EXISTS (SELECT * FROM CDN.DaneObiekty  WHERE DAO_ObiNumer = @obinumer )
	BEGIN
	
	SET @numerzal = (SELECT TOP 1 DAO_DABId FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE  DAO_ObiNumer=@obinumer )
	INSERT INTO CDN.DaneObiekty (DAO_DABId,	DAO_ObiTyp,	DAO_ObiNumer,	DAO_ObiLp,	DAO_ObiSubLp,	DAO_Domyslna,	DAO_Blokada,	DAO_PPPrawa,	DAO_PKPrawa	,DAO_eSklep	,DAO_iMall,	DAO_MobSpr,	DAO_BI	,DAO_Systemowa,	DAO_Pozycja,	DAO_Retail,	DAO_WMSZarzadzanie,	DAO_WMSMagazynier	,DAO_CzasModyfikacji)
	VALUES (@numerzal,960, @zamgidnumber,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0)

	END
END
END
END
END
END
--------------------------------
Pozdrawiam
WW

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Kopiowanie załączników

Post autor: VIkking »

Witam,

działa. Tak podejrzewałem ale to nie jest to czego ludzie oczekują. W taki razie muszę jakoś przechwycić ten GIDNUMBER ZS w momencie przekształcania z OS

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Kopiowanie załączników

Post autor: VIkking »

Kod: Zaznacz cały

ALTER TRIGGER [CDN].[ZamNag_kopijzalacznik]
  ON [CDN].[ZamNag]
  AFTER INSERT
AS
BEGIN

DECLARE @zamgidnumber INT
DECLARE @numerzal INT
DECLARE @obinumer INT

SET NOCOUNT ON

IF EXISTS (SELECT 1 FROM inserted WHERE ZaN_ZamTyp = 1280)

BEGIN

SET @zamgidnumber = (SELECT ZaN_GIDNumer FROM inserted WHERE ZaN_ZamTyp = 1280 )

BEGIN
IF EXISTS (SELECT * FROM CDN.DokZwiazane  WHERE DOZ_DOKNumer = @zamgidnumber  )
SET @obinumer = (SELECT TOP 1 DOZ_ZRDNumer FROM CDN.DokZwiazane WHERE DOZ_DOKNumer = @zamgidnumber )

BEGIN
	IF EXISTS (SELECT * FROM CDN.DaneObiekty  WHERE DAO_ObiNumer = @obinumer )

	BEGIN
	--SET IDENTITY_INSERT CDN.DaneObiekty ON
	SET @numerzal = (SELECT TOP 1 DAO_DABId FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE  DAO_ObiNumer=@obinumer )
	INSERT INTO CDN.DaneObiekty (DAO_DABId,	DAO_ObiTyp,	DAO_ObiNumer,	DAO_ObiLp,	DAO_ObiSubLp,	DAO_Domyslna,	DAO_Blokada,	DAO_PPPrawa,	DAO_PKPrawa	,DAO_eSklep	,DAO_iMall,	DAO_MobSpr,	DAO_BI	,DAO_Systemowa,	DAO_Pozycja,	DAO_Retail,	DAO_WMSZarzadzanie,	DAO_WMSMagazynier	,DAO_CzasModyfikacji)
	VALUES (@numerzal,960, @zamgidnumber,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0)
	--SET IDENTITY_INSERT CDN.DaneObiekty OFF

	END
END
END
END
END
W teorii powinno działać
1. Sprawdź czy na ZAMNag jest rekord typu ZS
2. Przypisz do zmiennej ten ZS
3. Sprawdź czy ma powiązania z jakimkolwiek dokumentem
4. Przypisz GIDNUMER powiązanego dokumentu do zmienej
5. Sprawdź czy są załączniki
Nie rozumiem czemu nie idzie teraz...

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Kopiowanie załączników

Post autor: VIkking »

Ok udało się utalić że na tabeli ZamNag nie da się tego zrobić wynika to z procesu tworzenia ZS z OS. Nie chce mi się tłumaczyć ale już na ZamElem już da się tylko nie wiem czemu nie łapie mi INSERTA:

Kod: Zaznacz cały

ALTER TRIGGER [CDN].[ZamElem_kopsnijzalacznik]
  ON [CDN].[ZamElem]
  AFTER  INSERT
AS
BEGIN
DECLARE @zamgidnumber INT
DECLARE @zamgidtyp INT
DECLARE @obinumer INT
SET @zamgidnumber = (SELECT ZaE_GIDNumer FROM inserted LEFT JOIN CDN.ZamNag ON ZamNag.ZaN_GIDNumer = inserted.ZaE_GIDNumer WHERE ZaN_ZamTyp = 1280)
BEGIN
IF EXISTS (SELECT * FROM CDN.DokZwiazane  WHERE DOZ_DOKNumer = @zamgidnumber  )

SET @obinumer = (SELECT TOP 1 DOZ_ZRDNumer FROM CDN.DokZwiazane WHERE DOZ_DOKNumer  = @zamgidnumber )

BEGIN
	IF EXISTS (SELECT * FROM CDN.DaneObiekty  WHERE DAO_ObiNumer = @obinumer )
	BEGIN
	
	/*SET @obinumer = (SELECT TOP 1 DAO_ObiNumer FROM CDN.ZamNag LEFT JOIN CDN.DokZwiazane ON DOZ_DOKNumer=ZaN_GIDNumer AND DOZ_DOKTyp= ZaN_GIDTyp 
		LEFT JOIN CDN.DaneObiekty ON DAO_ObiTyp = DOZ_ZRDTyp AND DAO_ObiNumer =DOZ_ZRDNumer
			WHERE (ZaN_GIDTyp=@zamgidtyp AND ZaN_GIDNumer=@zamgidnumber))*/
	IF NOT EXISTS (SELECT * FROM CDN.DaneObiekty  WHERE DAO_ObiNumer = @zamgidnumber)
	BEGIN
	SET IDENTITY_INSERT CDN.DaneObiekty ON
	INSERT INTO CDN.DaneObiekty (DAO_DABId,	DAO_ObiTyp,	DAO_ObiNumer,	DAO_ObiLp,	DAO_ObiSubLp,	DAO_Domyslna,	DAO_Blokada,	DAO_PPPrawa,	DAO_PKPrawa	,DAO_eSklep	,DAO_iMall,	DAO_MobSpr,	DAO_BI	,DAO_Systemowa,	DAO_Pozycja,	DAO_Retail,	DAO_ZalID	,DAO_WMSZarzadzanie,	DAO_WMSMagazynier	,DAO_CzasModyfikacji)
	SELECT DAO_DABId ,	960 ,	@zamgidnumber ,	DAO_ObiLp,	DAO_ObiSubLp,	DAO_Domyslna,	DAO_Blokada,	DAO_PPPrawa,	DAO_PKPrawa	,DAO_eSklep	,DAO_iMall,	DAO_MobSpr,	DAO_BI	,DAO_Systemowa,	DAO_Pozycja,	DAO_Retail,	DAO_ZalID, DAO_WMSZarzadzanie,	DAO_WMSMagazynier	,  DAO_CzasModyfikacji FROM CDN.DaneObiekty WHERE DAO_ObiNumer = @obinumer
	SET IDENTITY_INSERT CDN.DaneObiekty OFF
	END
	
	END
END
END
END

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Kopiowanie załączników

Post autor: VIkking »

Cannot insert duplicate key row in object 'CDN.DaneObiekty' with unique index 'DAO_ZalID'. The duplicate key value is (276).
Jak to obejść?

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Kopiowanie załączników

Post autor: praiser »

nie wstawiaj rekordu DAO_ZalID, to UNIQE auto_incerement
--------------------------------
Pozdrawiam
WW

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Kopiowanie załączników

Post autor: VIkking »

Dzięki działa i trzeba było zrobić to na ZamElem bo na ZamNagu w momencie przekształcania z OS do ZS nie uda się złapać gidnumber OS.

ODPOWIEDZ