W dniu 2017-07-05 o 13:30, wloochacz pisze:
> W dniu 2017-06-20 o 15:20, Adam pisze:
> /ciach/
>
>> Natomiast Symfonia czy jakieś tam Inserty mają oprócz tego, co
>> napisałeś jeszcze sporo innych problemów. Najpoważniejsze: brak
>> spójności systemu. Bywa u klientów, że towar zostanie pobrany na
>> dokument, a nie zejdzie ze stanu magazynowego.
>>
>> W przypadku Optimy, CDN-XL czy Enovy - o spójność baz danych dbają
>> triggery.
> No popatrz, mam bazę Enovy (stan na rok 2015, ale nie sadzę aby były aż
> tak poważne zmiany) pod ręką i nie ma w niej ani jednego triggera.
> Tak wszystko co piszesz poniżej w kontekście Enovy, nie jest prawdziwe...
Aż zobaczyłem do jakiejś bazy:
name id xtype uid info status base_schema_ver replinfo parent_obj crdate
ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel
refdate version deltrig instrig updtrig seltrig category cache
AdresyWWW_INTERFACEUPDATE 2151103 TR 1 0 0 0 0 85575343 2016-08-10
15:24:11.603 0 0 0 TR 0 8 0 2016-08-10 15:24:11.603 0 85575343 0 0 0 0 0
Zaplaty_INTERFACEDELETE 7723130 TR 1 0 0 0 0 1636916903 2016-08-10
15:24:13.190 0 0 0 TR 0 8 0 2016-08-10 15:24:13.190 0 1636916903 0 0 0 0 0
Nieobecnosci_INTERFACEDELETE 11199140 TR 1 0 0 0 0 733245667 2016-08-10
15:24:12.517 0 0 0 TR 0 8 0 2016-08-10 15:24:12.517 0 733245667 0 0 0 0 0
tr_bi_pik_UmowaHistorie 13959126 TR 1 0 0 0 0 1963870063 2016-08-10
15:24:01.140 0 0 0 TR 0 8 0 2016-08-10 15:24:01.140 0 1963870063 0 0 0 0 0
DefDokumentow_INTERFACEDELETE 14675150 TR 1 0 0 0 0 690101499 2016-08-10
15:24:11.947 0 0 0 TR 0 8 0 2016-08-10 15:24:11.947 0 690101499 0 0 0 0 0
Attachments_INTERFACEUPDATE 18151160 TR 1 0 0 0 0 533576939 2016-08-10
15:24:11.607 0 0 0 TR 0 8 0 2016-08-10 15:24:11.607 0 533576939 0 0 0 0 0
ZasInnyPlatnik_INTERFACEDELETE 23723187 TR 1 0 0 0 0 1700917131
2016-08-10 15:24:13.193 0 0 0 TR 0 8 0 2016-08-10 15:24:13.193 0
1700917131 0 0 0 0 0
OcenyArkusze_INTERFACEDELETE 27199197 TR 1 0 0 0 0 1181247263 2016-08-10
15:24:12.520 0 0 0 TR 0 8 0 2016-08-10 15:24:12.520 0 1181247263 0 0 0 0 0
tr_bi_pik_ZajKomornicze 29959183 TR 1 0 0 0 0 1060914851 2016-08-10
15:24:01.147 0 0 0 TR 0 8 0 2016-08-10 15:24:01.147 0 1060914851 0 0 0 0 0
DefElementow_INTERFACEDELETE 30675207 TR 1 0 0 0 0 754101727 2016-08-10
15:24:11.953 0 0 0 TR 0 8 0 2016-08-10 15:24:11.953 0 754101727 0 0 0 0 0
BasicDocs_INTERFACEUPDATE 34151217 TR 1 0 0 0 0 853578079 2016-08-10
15:24:11.607 0 0 0 TR 0 8 0 2016-08-10 15:24:11.607 0 853578079 0 0 0 0 0
ZbiegiPracyIRodz_INTERFACEDELETE 39723244 TR 1 0 0 0 0 1956918043
2016-08-10 15:24:13.197 0 0 0 TR 0 8 0 2016-08-10 15:24:13.197 0
1956918043 0 0 0 0 0
OcenyPracownikow_INTERFACEDELETE 43199254 TR 1 0 0 0 0 1501248403
2016-08-10 15:24:12.523 0 0 0 TR 0 8 0 2016-08-10 15:24:12.523 0
1501248403 0 0 0 0 0
tr_bi_pik_ZajKomorniczeHis 45959240 TR 1 0 0 0 0 1124915079 2016-08-10
15:24:01.153 0 0 0 TR 0 8 0 2016-08-10 15:24:01.153 0 1124915079 0 0 0 0 0
DefElementowOcen_INTERFACEDELETE 46675264 TR 1 0 0 0 0 818101955
2016-08-10 15:24:11.957 0 0 0 TR 0 8 0 2016-08-10 15:24:11.957 0
818101955 0 0 0 0 0
BudzetyProjektu_INTERFACEUPDATE 50151274 TR 1 0 0 0 0 1045578763
2016-08-10 15:24:11.610 0 0 0 TR 0 8 0 2016-08-10 15:24:11.610 0
1045578763 0 0 0 0 0
ZestawieniaKS_INTERFACEDELETE 55723301 TR 1 0 0 0 0 129435535 2016-08-10
15:24:13.200 0 0 0 TR 0 8 0 2016-08-10 15:24:13.200 0 129435535 0 0 0 0 0
PrzedmiotySzkol_Zakres_FK_RELATION 57103294 TR 1 0 0 0 0 1814297523
2016-08-10 15:24:11.157 0 0 0 TR 0 8 0 2016-08-10 15:24:11.157 0
1814297523 0 0 0 0 0
OcenyRealizacje_INTERFACEDELETE 59199311 TR 1 0 0 0 0 1565248631
2016-08-10 15:24:12.527 0 0 0 TR 0 8 0 2016-08-10 15:24:12.527 0
1565248631 0 0 0 0 0
DefElemOcenPrac_INTERFACEDELETE 62675321 TR 1 0 0 0 0 882102183
2016-08-10 15:24:11.960 0 0 0 TR 0 8 0 2016-08-10 15:24:11.960 0
882102183 0 0 0 0 0
DaneKnt_INTERFACEUPDATE 66151331 TR 1 0 0 0 0 1877581727 2016-08-10
15:24:11.610 0 0 0 TR 0 8 0 2016-08-10 15:24:11.610 0 1877581727 0 0 0 0 0
itd - 490 rekordów.
Optimka ma 272, CDN-XL ma 852.
Zresztą do XL masz dokumentację, podsyłałem Ci kiedyś.
>
>> Albo cała transakcja (w znaczeniu ścieżki logicznej zdarzeń)
>> przejdzie, albo cała zostanie wycofana. Nawet, gdybym grzebał
>> bezpośrednio w tabelach z danymi, transakcje są spójne, albo trigger
>> nie pozwoli zmienić pola, gdy pozostałe warunki nie są zachowane.
>> Jest to bardzo dobre dla serwisantów.
> Dobre dla serwisantów?
> A co to za serwisant, który grzebie w bazie nie wiedząc jakie będę tego
> konsekwencje dla całego systemu?
>
> Taki "serwisant" niech lepiej trzyma lepkie łapki blisko siebie...
E, tam, nie przesadzaj.
Przykładowy trigger dotyczący elementu transakcji (np. faktury) poniżej.
Myślisz, że bez triggera ktoś by to zapamiętał?
GO
/****** Object: Trigger [CDN].[TraElem_InsertUpdateDelete_Trigger]
Script Date: 07/05/2017 15:13:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [CDN].[TraElem_InsertUpdateDelete_Trigger]
ON [CDN].[TraElem]
FOR INSERT, UPDATE, DELETE
AS
IF (SELECT TOP 1 TrE_TypDokumentu FROM inserted where TrE_TypDokumentu =
301) = 301
BEGIN
DECLARE @EFakturaTrNId int
Declare dodane Cursor Local Fast_Forward For
Select TrE_TrNId
From inserted
Open Dodane
While 1=1
Begin
Fetch Next From Dodane InTo
@EfakturaTrNID
If @@Fetch_Status <> 0 Break
IF exists (SELECT * FROM CDN.TraNag WHERE TrN_TrNid = @EfakturaTrNId
AND TrN_DabID IS NOT NULL AND TrN_TypDokumentu = 301 and
TrN_EfakturaGUID IS NOT NULL)
AND Exists (SELECT tre_treid FROM inserted where tre_cenat = 0 and
tre_trnid = @EfakturaTrNId)
BEGIN
RaisError ('Nie można modyfikować e-faktury', 16,1)
RollBack Tran
Return
END
END
END
-- jesli zmienimy lppow na proformie to trzeba tez na wz do nich
nalezacych
IF exists (SELECT TrE_TypDokumentu FROM inserted where TrE_TypDokumentu
in (308,309,320) )
BEGIN
IF UPDATE( TrE_LpPow )
AND NOT UPDATE( TrE_TrEId )
AND NOT UPDATE( TrE_TrNId )
AND NOT UPDATE( TrE_ZwrId )
AND NOT UPDATE( TrE_TrEIdProd )
AND NOT UPDATE( TrE_TypDokumentu )
AND NOT UPDATE( TrE_Aktywny )
AND NOT UPDATE( TrE_DataDok )
AND NOT UPDATE( TrE_DataOpe )
AND NOT UPDATE( TrE_TwrId )
AND NOT UPDATE( TrE_Stawka )
AND NOT UPDATE( TrE_Flaga )
AND NOT UPDATE( TrE_Zrodlowa )
AND NOT UPDATE( TrE_TwCNumer )
AND NOT UPDATE( TrE_TypNB )
AND NOT UPDATE( TrE_Cena0 )
AND NOT UPDATE( TrE_Rabat )
AND NOT UPDATE( TrE_CenaW )
AND NOT UPDATE( TrE_CenaT )
AND NOT UPDATE( TrE_Ilosc )
AND NOT UPDATE( TrE_Jm )
AND NOT UPDATE( TrE_JmZ )
AND NOT UPDATE( TrE_JmCalkowite )
AND NOT UPDATE( TrE_JmPrzelicznikL )
AND NOT UPDATE( TrE_JmPrzelicznikM )
AND NOT UPDATE( TrE_IloscJM )
AND NOT UPDATE( TrE_WartoscNetto )
AND NOT UPDATE( TrE_WartoscBrutto )
AND NOT UPDATE( TrE_Cena0WD )
AND NOT UPDATE( TrE_CenaWWD )
AND NOT UPDATE( TrE_WartoscNettoWal )
AND NOT UPDATE( TrE_WartoscBruttoWal )
AND NOT UPDATE( TrE_KosztUslugi)
AND NOT UPDATE (TrE_Atr1_DeAId)
AND NOT UPDATE (TrE_Atr1_Kod)
AND NOT UPDATE (TrE_Atr1_Wartosc)
AND NOT UPDATE (TrE_Atr2_DeAId)
AND NOT UPDATE (TrE_Atr2_Kod)
AND NOT UPDATE (TrE_Atr2_Wartosc)
AND NOT UPDATE (TrE_Atr3_DeAId)
AND NOT UPDATE (TrE_Atr3_Kod)
AND NOT UPDATE (TrE_Atr3_Wartosc)
AND NOT UPDATE (TrE_Atr4_DeAId)
AND NOT UPDATE (TrE_Atr4_Kod)
AND NOT UPDATE (TrE_Atr4_Wartosc)
AND NOT UPDATE (TrE_Atr5_DeAId)
AND NOT UPDATE (TrE_Atr5_Kod)
AND NOT UPDATE (TrE_Atr5_Wartosc)
BEGIN
set nocount on
DECLARE
@TrE_TrEId1 INT,
@TrN_Rodzaj1 INT,
@TrE_TrNId1 INT,
@TrE_TypDokumentu1 INT,
@TrE_LpPow1 INT,
@TrE_TrEId2 INT,
@PFzRO int,
@TrE_TrEIdRO INT,
@TrE_LpPow2 INT,
@TrE_TrEIdWZ INT
DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId, TrE_TrNId, TrE_LpPow, TrE_TypDokumentu
FROM inserted
ORDER BY TrE_TrNId, TrE_Lp
OPEN Dodawane
WHILE 1=1
BEGIN
FETCH NEXT FROM Dodawane INTO @TrE_TrEId1, @TrE_TrNId1,
@TrE_LpPow1, @TrE_TypDokumentu1
IF @@FETCH_STATUS <> 0 BREAK
SELECT TOP 1
@TrN_Rodzaj1 = TrN_Rodzaj
FROM cdn.TraNag
JOIN cdn.TraElem ON TrN_TrNId = TrE_TrNId AND TrE_TrEId =
@TrE_TrEId1
IF (UPDATE (TrE_LpPow) and @TrE_TypDokumentu1 = 320)
begin
SELECT TOP 1 @TrE_TrEIdWZ = a.TrE_TrEId
FROM CDN.TraElem a
JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND
TrR_FaTyp =320 AND TrR_TrNTyp NOT IN (317,309,320)
JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND
a.TrE_Lppow = b.TrE_LpPow
JOIN CDN.tranag on TrR_TrNId = TrN_TrNID
WHERE b.TrE_TrEId = @TrE_TrEId1 AND TrN_Rodzaj not in
(302200,302202) AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM
CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEId1)
AND a.TrE_TrEId not in (SELECT TeR_ParentId FROM
CDN.TraElemRelacje WHERE TeR_ChildId = @TrE_TrEId1)
ORDER BY TrR_TrRId DESC
INSERT INTO CDN.TraElemRelacje
(TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga)
SELECT TOP 1
b.TrE_TypDokumentu,b.TrE_TrEId,a.TrE_TypDokumentu,a.TrE_TrEId,0
FROM CDN.TraElem a
JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND
TrR_FaTyp =320 AND TrR_TrNTyp NOT IN (317,309,320)
JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND
a.TrE_Lppow = b.TrE_LpPow
JOIN CDN.tranag on TrR_TrNId = TrN_TrNID
WHERE b.TrE_TrEId = @TrE_TrEId1 AND TrN_Rodzaj not in
(302200,302202) AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM
CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEId1)
AND a.TrE_TrEId not in (SELECT TeR_ParentId FROM
CDN.TraElemRelacje WHERE TeR_ChildId = @TrE_TrEId1)
ORDER BY TrR_TrRId DESC
select @PFzRO = a.Trr_TrNId from cdn.tranagrelacje a
where a.TrR_FaId =@TrE_TrNId1 AND a.Trr_TrNTyp =308 AND
a.Trr_FaTyp =320
if @PFzRO > 0
begin
select @TrE_TrEIdRO = 0, @TrE_TrEId2 = 0
create table #RO (TrE_TrEIdRO int ,TrE_TrEIdFA int)
insert into #RO(TrE_TrEIdRO)
select TeR_ChildId from cdn.traelemrelacje where TeR_ParentId =
@TrE_TrEId1 and TeR_ParentTyp = 320 and TeR_ChildTyp = 308
insert into #RO(TrE_TrEIdRO)
select TeR_ParentId from cdn.traelemrelacje where TeR_ChildId =
@TrE_TrEId1 and TeR_ChildTyp = 320 and TeR_ParentTyp = 308
select top 1 @TrE_TrEId2 = TeR_ChildId from cdn.traelemrelacje where
TeR_ParentId = @TrE_TrEId1 and TeR_ParentTyp = 320 and TeR_ChildTyp in
(302,306)
and TeR_ChildId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE
TeR_ParentId in (select TrE_TrEIdRO from #RO)) order by ter_terid desc
if @TrE_TrEId2 = 0
select top 1 @TrE_TrEId2 = TeR_ParentId from cdn.traelemrelacje where
TeR_ChildId = @TrE_TrEId1 and TeR_ChildTyp = 320 and TeR_ParentTyp in
(302,306)
and TeR_ParentId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje
WHERE TeR_ParentId in (select TrE_TrEIdRO from #RO)) order by ter_terid desc
if @TrE_TrEId2 <> 0
begin
update #RO set TrE_TrEIdFA = @TrE_TrEId2
insert into CDN.TraElemRelacje
(TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga)
select 308,TrE_TrEIdRO,TrE_TypDokumentu,TrE_TrEIdFA,0 from #RO join
cdn.traelem on TrE_TrEIdFA = TrE_TrEId--where TrE_TrEID = @TrE_TrEId2
--select 308,@TrE_TrEIdRO,TrE_TypDokumentu,@TrE_TrEId2,0 from
cdn.traelem where TrE_TrEID = @TrE_TrEId2
exec [CDN].[UstawRezerwacje] @TrE_TrEId2,0,0
end
drop table #RO
/*
select @TrE_LpPow2 = TrE_Lppow
FROM Cdn.TraElem
where TrE_TreId = @TrE_TrEId1
select @TrE_TrEIdRO = tre_treid from cdn.traelem where tre_trnid =
@PFzRO and tre_lppow = @TrE_LpPow2
SELECT TOP 1 @TrE_TrEId2 = a.TrE_TrEId
FROM CDN.TraElem a
JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp IN
(308,309) AND TrR_TrNTyp NOT IN (317,309,308,320)
JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow =
@TrE_Lppow1
WHERE b.TrE_TrEId = @TrE_TrEIdRO AND a.TrE_TrEId not in (SELECT
TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEIdRO)
ORDER BY TrR_TrRId DESC
INSERT INTO CDN.TraElemRelacje
(TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga)
SELECT TOP 1
b.TrE_TypDokumentu,b.TrE_TrEId,a.TrE_TypDokumentu,a.TrE_TrEId,0
FROM CDN.TraElem a
JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp IN
(308,309) AND TrR_TrNTyp NOT IN (317,309,308,320)
JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow =
@TrE_Lppow1
WHERE b.TrE_TrEId = @TrE_TrEIdRO AND a.TrE_TrEId not in (SELECT
TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEIdRO)
ORDER BY TrR_TrRId DESC
exec [CDN].[UstawRezerwacje] @TrE_TrEId2,0,0
*/
end
end
/*IF (UPDATE (TrE_LpPow) and @TrN_Rodzaj1 = 320009)
BEGIN
UPDATE a SET a.TrE_LppowRel = d.TrE_Lppow
FROM Cdn.TraElem a
JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1
where a.TrE_TreId = @TrE_TrEId1
END*/
IF (UPDATE (TrE_LpPow) and @TrN_Rodzaj1 in (320000,320009))
BEGIN
UPDATE a SET a.TrE_Lppow = d.TrE_Lppow
FROM Cdn.TraElem a
JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1
where a.TrE_TreId = @TrE_TrEId1
--poprawa zgłoszenia 150109
UPDATE a SET a.TrE_LppowRel = a.TrE_Lppow ,a.TrE_Lppow =
@TrE_Lppow1 FROM Cdn.TraElem a
JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1
join cdn.traelemrelacje on TeR_ChildId = a.tre_treid and
TeR_ParentId = @TrE_TrEId1 and TeR_ChildTyp = 306
join cdn.tranag WZ on a.tre_trnid = WZ.trn_trnid
join cdn.tranagrelacje on trr_faid = WZ.trn_trnid and TrR_TrNTyp = 302
join cdn.traelem b on b.tre_trnid = TrR_TrNId and b.tre_treid =
@TrE_TrEIdWZ
--poprawa zgłoszenia 154645
UPDATE a SET a.TrE_LppowRel = a.TrE_Lppow ,a.TrE_Lppow =
@TrE_Lppow1 FROM Cdn.TraElem a
where a.tre_zwrid in(
select a.tre_treid FROM Cdn.TraElem a
JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1
join cdn.traelemrelacje on TeR_ChildId = a.tre_treid and
TeR_ParentId = @TrE_TrEId1 and TeR_ChildTyp = 306
join cdn.tranag WZ on a.tre_trnid = WZ.trn_trnid
join cdn.tranagrelacje on trr_faid = WZ.trn_trnid and TrR_TrNTyp = 302
join cdn.traelem b on b.tre_trnid = TrR_TrNId and b.tre_treid =
@TrE_TrEIdWZ)
--UPDATE a SET a.TrE_LppowRel = a.TrE_Lppow ,a.TrE_Lppow =
@TrE_Lppow1
--FROM Cdn.TraElem a
--JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1 and
a.TrE_Lppow = d.TrE_Lppow and a.TrE_TwrId = d.TrE_TwrId
--JOIN CDN.TraNagRelacje ON d.TrE_TrnId = TrR_FaId
--WHERE TrR_TrNTyp = 306 AND a.TrE_TrnId = TrR_TrNId
END
IF (UPDATE (TrE_LpPow) and @TrE_TypDokumentu1 in (308,309))
BEGIN
SELECT TOP 1 @TrE_TrEId2 = a.TrE_TrEId
FROM CDN.TraElem a
JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND
TrR_FaTyp IN (308,309) AND TrR_TrNTyp NOT IN (317,309,308,320)
JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND
a.TrE_Lppow = b.TrE_LpPow
WHERE b.TrE_TrEId = @TrE_TrEId1 AND a.TrE_TrEId not in
(SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId =
@TrE_TrEId1)
ORDER BY TrR_TrRId DESC
INSERT INTO CDN.TraElemRelacje
(TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga)
SELECT TOP 1
b.TrE_TypDokumentu,b.TrE_TrEId,a.TrE_TypDokumentu,a.TrE_TrEId,0
FROM CDN.TraElem a
JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND
TrR_FaTyp IN (308,309) AND TrR_TrNTyp NOT IN (317,309,308)
JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND
a.TrE_Lppow = b.TrE_LpPow
WHERE b.TrE_TrEId = @TrE_TrEId1 AND a.TrE_TrEId not in
(SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId =
@TrE_TrEId1)
AND a.TrE_TrEId not in (SELECT TeR_ParentId FROM
CDN.TraElemRelacje WHERE TeR_ChildId = @TrE_TrEId1) and b.TrE_LppowRel
is not null
ORDER BY TrR_TrRId DESC
UPDATE CDN.TraElem SET TrE_Lppow =
TrE_LppowRel,TrE_LppowRel = NULL WHERE TrE_TrEId = @TrE_TrEId1 and
TrE_LppowRel is not null
exec [CDN].[UstawRezerwacje] @TrE_TrEId2,0,0
END
END
CLOSE Dodawane
DEALLOCATE Dodawane
set nocount off
END
end
IF exists (SELECT TrE_TypDokumentu FROM inserted where TrE_TypDokumentu
= 311 ) or exists (SELECT TrE_TypDokumentu FROM deleted where
TrE_TypDokumentu = 311 )
BEGIN
set nocount on
DECLARE
@TrE_TrEIdAI INT
DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId
FROM inserted
ORDER BY TrE_TrNId, TrE_Lp
OPEN Dodawane
WHILE 1=1
BEGIN
FETCH NEXT FROM Dodawane INTO @TrE_TrEIdAI
IF @@FETCH_STATUS <> 0 BREAK
If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update
(TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod)
Or Update (TrE_Atr2_Wartosc)
Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update
(TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod)
Or Update (TrE_Atr4_Wartosc)
Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update
(TrE_Atr5_Wartosc))
BEGIN
DELETE FROM Cdn.TraElemAtr WHERE Tra_TrEId =@TrE_TrEIdAI
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,1,TrE_Atr1_DeAId,TrE_Atr1_Kod,TrE_Atr1_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr1_DeAId>0 AND
TrE_Atr1_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,2,TrE_Atr2_DeAId,TrE_Atr2_Kod,TrE_Atr2_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr2_DeAId>0 AND
TrE_Atr2_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,3,TrE_Atr3_DeAId,TrE_Atr3_Kod,TrE_Atr3_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr3_DeAId>0 AND
TrE_Atr3_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,4,TrE_Atr4_DeAId,TrE_Atr4_Kod,TrE_Atr4_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr4_DeAId>0 AND
TrE_Atr4_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,5,TrE_Atr5_DeAId,TrE_Atr5_Kod,TrE_Atr5_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr5_DeAId>0 AND
TrE_Atr5_DeAId is not NULL
END
END
CLOSE Dodawane
DEALLOCATE Dodawane
set nocount off
return
end
-- uruchamiamy procedurę obsługi zasobów, jesli są podmieniane
jakiekolwiek pola za wyjatkiem TrE_LpPow
IF ( UPDATE( TrE_LpPow )
OR UPDATE( TrE_Lp )
OR UPDATE( TrE_PodmiotTyp )
OR UPDATE( TrE_PodId )
OR UPDATE( TrE_KatId )
OR UPDATE( TrE_TwrNazwa )
OR UPDATE( TrE_TwrEAN )
OR UPDATE( TrE_TwrNumerKat )
OR UPDATE( TrE_TwrKod )
OR UPDATE( TrE_TwrOpis )
OR UPDATE( TrE_KosztKGO )
OR UPDATE( TrE_TwrSWW )
OR UPDATE( TrE_Prog )
OR UPDATE( TrE_UpustTyp )
OR UPDATE( TrE_Upust )
OR UPDATE( TrE_UpustKnt )
OR UPDATE( TrE_UpustKntTyp )
OR UPDATE( TrE_Waluta )
OR UPDATE( TrE_KursNumer )
OR UPDATE( TrE_KursL )
OR UPDATE( TrE_KursM )
OR UPDATE( TrE_WartoscZakupuWylicz )
OR UPDATE (TrE_Atr1_DeAId)
OR UPDATE (TrE_Atr1_Kod)
OR UPDATE (TrE_Atr1_Wartosc)
OR UPDATE (TrE_Atr2_DeAId)
OR UPDATE (TrE_Atr2_Kod)
OR UPDATE (TrE_Atr2_Wartosc)
OR UPDATE (TrE_Atr3_DeAId)
OR UPDATE (TrE_Atr3_Kod)
OR UPDATE (TrE_Atr3_Wartosc)
OR UPDATE (TrE_Atr4_DeAId)
OR UPDATE (TrE_Atr4_Kod)
OR UPDATE (TrE_Atr4_Wartosc)
OR UPDATE (TrE_Atr5_DeAId)
OR UPDATE (TrE_Atr5_Kod)
OR UPDATE (TrE_Atr5_Wartosc)
OR UPDATE (TrE_WartoscTymczasowa)
OR UPDATE (TrE_ZTwID)
OR UPDATE (TrE_ZTwGlowny)
OR UPDATE (TrE_ZestawWiazanie)
OR UPDATE (TrE_zTwKod)
OR UPDATE (TrE_TwrTyp)
OR UPDATE (TrE_TwrKodDostawcy)
OR UPDATE (TrE_DoZwrotu)
)
AND NOT UPDATE( TrE_TrEId )
AND NOT UPDATE( TrE_TrNId )
AND NOT UPDATE( TrE_ZwrId )
AND NOT UPDATE( TrE_TrEIdProd )
-- AND NOT UPDATE( TrE_Lp )
AND NOT UPDATE( TrE_TypDokumentu )
AND NOT UPDATE( TrE_Aktywny )
AND NOT UPDATE( TrE_DataDok )
AND NOT UPDATE( TrE_DataOpe )
-- AND NOT UPDATE( TrE_PodmiotTyp )
-- AND NOT UPDATE( TrE_PodID )
-- AND NOT UPDATE( TrE_KatID )
AND NOT UPDATE( TrE_TwrId )
-- AND NOT UPDATE( TrE_TwrNazwa )
-- AND NOT UPDATE( TrE_TwrEAN )
-- AND NOT UPDATE( TrE_TwrNumerKat )
-- AND NOT UPDATE( TrE_TwrKod )
-- AND NOT UPDATE( TrE_TwrOpis )
-- AND NOT UPDATE( TrE_TwrSWW )
AND NOT UPDATE( TrE_Stawka )
AND NOT UPDATE( TrE_Flaga )
AND NOT UPDATE( TrE_Zrodlowa )
AND NOT UPDATE( TrE_TwCNumer )
AND NOT UPDATE( TrE_TypNB )
AND NOT UPDATE( TrE_Cena0 )
AND NOT UPDATE( TrE_Rabat )
AND NOT UPDATE( TrE_CenaW )
-- AND NOT UPDATE( TrE_Waluta )
-- AND NOT UPDATE( TrE_KursNumer )
-- AND NOT UPDATE( TrE_KursL )
-- AND NOT UPDATE( TrE_KursM )
AND NOT UPDATE( TrE_CenaT )
AND NOT UPDATE( TrE_Ilosc )
AND NOT UPDATE( TrE_Jm )
AND NOT UPDATE( TrE_JmZ )
AND NOT UPDATE( TrE_JmCalkowite )
AND NOT UPDATE( TrE_JmPrzelicznikL )
AND NOT UPDATE( TrE_JmPrzelicznikM )
AND NOT UPDATE( TrE_IloscJM )
AND NOT UPDATE( TrE_WartoscNetto )
AND NOT UPDATE( TrE_WartoscBrutto )
AND NOT UPDATE( TrE_Cena0WD )
AND NOT UPDATE( TrE_CenaWWD )
AND NOT UPDATE( TrE_WartoscNettoWal )
AND NOT UPDATE( TrE_WartoscBruttoWal )
AND NOT UPDATE( TrE_MagId )
-- AND NOT UPDATE( TrE_Prog )
-- AND NOT UPDATE( TrE_UpustTyp )
-- AND NOT UPDATE( TrE_Upust )
-- AND NOT UPDATE( TrE_UpustKnt )
-- AND NOT UPDATE( TrE_UpustKntTyp )
AND NOT UPDATE( TrE_KosztUslugi)
AND NOT UPDATE (TrE_WyborDostaw)
BEGIN
set nocount on
If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update
(TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod)
Or Update (TrE_Atr2_Wartosc)
Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update
(TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod)
Or Update (TrE_Atr4_Wartosc)
Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update
(TrE_Atr5_Wartosc))
begin
DECLARE
@TrE_TrEIdAtr INT
DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId
FROM inserted
ORDER BY TrE_TrNId, TrE_Lp
OPEN Dodawane
WHILE 1=1
BEGIN
FETCH NEXT FROM Dodawane INTO @TrE_TrEIdAtr
IF @@FETCH_STATUS <> 0 BREAK
If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update
(TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod)
Or Update (TrE_Atr2_Wartosc)
Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update
(TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod)
Or Update (TrE_Atr4_Wartosc)
Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update
(TrE_Atr5_Wartosc))
BEGIN
DELETE FROM Cdn.TraElemAtr WHERE Tra_TrEId =@TrE_TrEIdAtr
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,1,TrE_Atr1_DeAId,TrE_Atr1_Kod,TrE_Atr1_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr1_DeAId>0 AND
TrE_Atr1_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,2,TrE_Atr2_DeAId,TrE_Atr2_Kod,TrE_Atr2_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr2_DeAId>0 AND
TrE_Atr2_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,3,TrE_Atr3_DeAId,TrE_Atr3_Kod,TrE_Atr3_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr3_DeAId>0 AND
TrE_Atr3_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,4,TrE_Atr4_DeAId,TrE_Atr4_Kod,TrE_Atr4_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr4_DeAId>0 AND
TrE_Atr4_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,5,TrE_Atr5_DeAId,TrE_Atr5_Kod,TrE_Atr5_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr5_DeAId>0 AND
TrE_Atr5_DeAId is not NULL
END
END
CLOSE Dodawane
DEALLOCATE Dodawane
end
set nocount off
GOTO KOMUNIKAT
end
DECLARE
@MyIdentity INT, -- niezwykle ważne dla ProdElem
-- zmienne pomocnicze dla kursora
@TrE_TrEId INT,
@TrE_TrNId INT,
@TrE_ZwrId INT,
@TrE_Lp INT,
@TrE_LpPow INT,
@TrE_TypDokumentu SMALLINT,
@TrE_Aktywny SMALLINT,
@TrE_DataDok DATETIME,
@TrE_DataOpe DATETIME,
@TrE_TwrId INT,
@TrE_TwrKod NVarchar(40),
@TrE_TwrNazwa NVarchar(255),
@TrE_Stawka DECIMAL(5,2),
@TrE_CenaW DECIMAL(15,2),
@TrE_CenaWWD DECIMAL(15,2),
@TrE_CenaT DECIMAL(15,2),
@TrE_Waluta NVarchar(3),
@TrE_KursNumer INT,
@TrE_KursL DECIMAL(15,4),
@TrE_KursM DECIMAL(5,0),
@TrE_Ilosc DECIMAL(15,4),
@TrE_WartoscNetto DECIMAL(15,2),
@TrE_WartoscBrutto DECIMAL(15,2),
@TrE_WartoscZakupu DECIMAL(15,2),
@TrE_JMPrzelicznikL DECIMAL(15,2),
@TrE_JMPrzelicznikM DECIMAL( 7,0),
@TrE_IloscJM DECIMAL(15,4),
@TrE_PodmiotTyp INT,
@TrE_PodId INT,
@TrE_KosztUslugi DECIMAL(15,2),
@TrE_TypNB TINYINT,
@Tre_WyborDostaw TINYINT,
@TrE_IFA24Mag INT,
@Tre_MagId INT,
@TrE_KosztUslugiZDok DECIMAL(15,2),
-- zmienne z naglowka dla poprawnego zbudowania subelementu
@TrN_TrNId INT,
@TrN_FaId INT,
@TrN_ZwrId INT,
@TrN_Rodzaj INT,
@TrN_Bufor SMALLINT,
@TrN_MagZrdId INT,
@TrN_MagDocId INT,
@TrN_DataDok DATETIME,
@TrN_DataWys DATETIME,
@TrN_DataOpe DATETIME,
@TrN_TrSTyp SMALLINT,
@TrN_TypNB TINYINT,
@TrN_PodmiotTyp INT,
@TrN_PodId INT,
@TrN_Centrala TINYINT,
@TrN_Waluta NVarchar(3),
@TrN_KursNumer INT,
@TrN_KursL DECIMAL(15,4),
@TrN_KursM DECIMAL(5,0),
@WalutaSys NVarchar(3),
@TrN_DekId INT,
@TrN_NumerPelny NVarchar(31),
-- zmienne dla dokumentu pierwotnego
@TrN_TrNId_Old INT,
@TrN_TrNId_PAdoFA_Old INT,
@TrN_FaId_Old INT,
@TrE_TrEId_Old INT,
-- zmienne dla kreowanego subelementu
@TrS_TrSId INT,
@TrS_TrEId INT,
@TrS_TrSIdDost INT,
@TrS_ZwrId INT,
@TrS_TwrId INT,
@TrS_MagId INT,
@TrS_Rodzaj INT,
@TrS_Typ INT,
@TrS_Metoda INT,
@TrS_DataOpe DATETIME,
@TrS_Ilosc DECIMAL(15,4),
@TrS_Wartosc DECIMAL(15,2),
@TrS_Cena DECIMAL(15,2),
@TrS_Termin DATETIME,
-- zmienne pomocnicze dla metody
@QUAN INT,
@Metoda INT,
@ZawszeBraki INT,
@ZezwalajMimoRez INT,
@DataZamowienia INT,
-- zmienne pomocnicze symulacji marży
@Marza_Sym_Ostatnia INT,
@Marza_Sym_Srednia INT,
-- Pomocnicza dla kursora
@TrS_TrSId_K INT,
@TrS_TrEId_K INT,
-- zmienna dla aktualizacji ceny zakupu i marz
@TwC_TwCId INT,
@TwC_TwCNumer INT,
@TwC_Wartosc DECIMAL(15,2),
@TwC_Marza DECIMAL(15,2), -- potrzebna, zeby zbadać, czy
nie jest za duża
@TwC_MarzaWStu DECIMAL(15,2), -- potrzebna, zeby zbadać, czy
nie jest za duża
@TwC_Waluta NVarchar(3),
@TwC_Typ SMALLINT,
@Twr_Typ SMALLINT,
@Twr_KosztUslugiTyp SMALLINT,
@Twr_KosztUslugi DECIMAL(15,2),
@Twr_Stawka DECIMAL(5,2),
@Twr_KursL DECIMAL(15,4),
@Twr_KursM DECIMAL(5,0),
@Twr_KosztUslugiNew DECIMAL(15,2),
@Twr_KosztUslugiWalNew DECIMAL(15,2),
@Waluta NVarchar(3),
@KursNumer INT,
@KursL DECIMAL(15,4),
@KursM DECIMAL(5,0),
@CenaW_New DECIMAL(15,2),
-- aktualizacja ceny zakupu przy zapisie MM-OL
@Aktualizuj_CenaZ_MMOL TINYINT,
-- dla liczenia wzoru na marże cen sprzedaży, gdy aktualizacja jest
na "Nie"
@CenaZakupuNew DECIMAL(15,2),
@CenaZakupuNewPLN DECIMAL(15,2),
@CenaZakupuNewWal DECIMAL(15,2),
-- dla dostaw
@DostIloscRecordowReal int,
@DostIloscRecordow int,
@DostIloscRecordowDodanych int,
@DostTrS_Ilosc decimal(15,4),
@DostTrS_TrSId int,
@ResztaWartosc DECIMAL(15,2),
-- pomocnicze dla komunikatu
@Data_Dost DATETIME,
@Komunikat NVarchar(250)
SET NOCOUNT ON
-- ustawienie komunikatu
SET @Komunikat = ''
-- symbol waluty systemowej
SET @WalutaSys = ( SELECT SUBSTRING(Fir_Wartosc,1,3) FROM cdn.Firma
WHERE Fir_Numer = 3 )
-- elementy kasowane jesli wybordostawy = 2 to nie robimy nic
DECLARE @TrE TABLE ( TrEId INT )
INSERT INTO @TrE ( TrEId ) SELECT TrE_TrEId FROM deleted
IF EXISTS(SELECT TrS_WyborDostaw FROM cdn.TraSElem JOIN @TrE ON TrEId
= TrS_TrEId WHERE ISNULL(TrS_WyborDostaw,0) = 2)
RETURN
DELETE cdn.TraSElem FROM cdn.TraSElem JOIN @TrE ON TrEId = TrS_TrEId
-- WHERE TrS_TrEId IN ( SELECT TrE_TrEId FROM deleted ) -- = @TrE_TrEId
IF NOT EXISTS ( SELECT * FROM inserted ) AND EXISTS ( SELECT * FROM
deleted )
BEGIN
DECLARE
@TrE_TrEId3 INT,
@TrE_TypDok3 INT
DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId, TrE_TypDokumentu
FROM deleted
ORDER BY TrE_TrEId
OPEN Dodawane
WHILE 1=1
BEGIN
FETCH NEXT FROM Dodawane INTO @TrE_TrEId3, @TrE_TypDok3
IF @@FETCH_STATUS <> 0 BREAK
EXEC [CDN].[UstawRezerwacje] @TrE_TrEId3, 1,@TrE_TypDok3
DELETE CDN.TraElemRelacje WHERE TeR_ParentTyp=@TrE_TypDok3 and
TeR_ParentId=@TrE_TrEId3
DELETE CDN.TraElemRelacje WHERE TeR_ChildTyp=@TrE_TypDok3 and
TeR_ChildId=@TrE_TrEId3
END
CLOSE Dodawane
DEALLOCATE Dodawane
DELETE CDN.TraSElem WHERE TRS_TrEIdWydania in(SELECT TrE_TrEId
FROM deleted)
END
-- elementy kasowane trzeba skasowac atrybuty
--IF EXISTS ( SELECT * FROM deleted )
-- BEGIN
-- DELETE FROM Cdn.TraElemAtr WHERE TrA_TrEId in (SELECT
TrE_TrEId FROM deleted)
-- END
-- Metoda rozliczania magazynu
IF EXISTS ( SELECT * FROM inserted )
BEGIN
SET @Metoda = ( SELECT TOP 1 ISNULL( Fir_Wartosc,1 ) FROM
cdn.Firma WHERE Fir_Numer = 1352 )
SET @QUAN = ( SELECT TOP 1 ISNULL( Fir_Wartosc,0 ) FROM
cdn.Firma WHERE Fir_Numer = 1485 )
END
-- elementy dodawane
DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId, TrE_TrNId, TrE_ZwrId, TrE_Lp, TrE_TypDokumentu,
TrE_Aktywny, TrE_DataDok, TrE_DataOpe, TrE_TwrId, TrE_TwrKod, TrE_Stawka ,
TrE_CenaW, TrE_CenaWWD, TrE_CenaT, TrE_Waluta,
TrE_KursNumer, TrE_KursL, TrE_KursM, TrE_Ilosc, TrE_WartoscNetto,
TrE_WartoscBrutto,
TrE_JMPrzelicznikL, TrE_JMPrzelicznikM, TrE_PodmiotTyp,
TrE_PodId, TrE_LpPow, TrE_IloscJM, TrE_TypNB, Tre_WyborDostaw,
Tre_MagID, TrE_IFA24Mag, TrE_KosztUslugi
FROM inserted
ORDER BY TrE_TrNId, TrE_Lp
OPEN Dodawane
WHILE 1=1
BEGIN
FETCH NEXT FROM Dodawane INTO @TrE_TrEId, @TrE_TrNId,
@TrE_ZwrId, @TrE_Lp, @TrE_TypDokumentu, @TrE_Aktywny, @TrE_DataDok,
@TrE_DataOpe, @TrE_TwrId, @TrE_TwrKod, @TrE_Stawka,
@TrE_CenaW, @TrE_CenaWWD,
@TrE_CenaT, @TrE_Waluta, @TrE_KursNumer, @TrE_KursL, @TrE_KursM,
@TrE_Ilosc, @TrE_WartoscNetto, @TrE_WartoscBrutto,
@TrE_JMPrzelicznikL,
@TrE_JMPrzelicznikM, @TrE_PodmiotTyp, @TrE_PodId, @TrE_LpPow,
@TrE_IloscJM, @TrE_TypNB, @Tre_WyborDostaw, @TrE_MagId, @TrE_IFA24Mag ,
@TrE_KosztUslugiZDok
IF @@FETCH_STATUS <> 0 BREAK
-- Zmiana towaru musimy usunąć relacje na elementach
IF UPDATE( TrE_TwrId )
BEGIN
IF NOT EXISTS (SELECT TrE_TwrId FROM deleted WHERE
@TrE_TrEId = TrE_TrEId AND @TrE_TwrId = TrE_TwrId)
BEGIN
DECLARE
@TrE_TrEIdWiNi1 INT,
@TrE_TypWiNi1 INT
DECLARE Kasowane CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId, TrE_TypDokumentu
FROM deleted
ORDER BY TrE_TrEId
OPEN Kasowane
WHILE 1=1
BEGIN
FETCH NEXT FROM Kasowane INTO @TrE_TrEIdWiNi1, @TrE_TypWiNi1
IF @@FETCH_STATUS <> 0 BREAK
DELETE CDN.TraElemRelacje WHERE TeR_ParentTyp=@TrE_TypWiNi1 and
TeR_ParentId=@TrE_TrEIdWiNi1
DELETE CDN.TraElemRelacje WHERE TeR_ChildTyp=@TrE_TypWiNi1 and
TeR_ChildId=@TrE_TrEIdWiNi1
END
CLOSE Kasowane
DEALLOCATE Kasowane
END
END
-- Sprawdzenie zgodności przeliczników i ilości
IF (( @TrE_JMPrzelicznikL = @TrE_JMPrzelicznikM AND
@TrE_Ilosc <> @TrE_IloscJM)
OR ( @TrE_JMPrzelicznikL <> @TrE_JMPrzelicznikM AND
@TrE_Ilosc = @TrE_IloscJM))
AND (@TrE_Ilosc<>0 AND @TrE_IloscJM<>0)
BEGIN
SET @Komunikat = 'Zapis niemożliwy ! Dla towaru ' +
@TrE_TwrKod + ' przeliczniki miar niezgodne z ilościami ! '
IF @Komunikat <> '' GOTO KOMUNIKAT
END
-- Przepisujemy z PA na FA czy wybor dostaw
IF @TrE_TypDokumentu = 302
update FA set FA.TrE_WyborDostaw = PA.TrE_WyborDostaw from
cdn.TraElem FA left join cdn.TraElem PA on FA.TrE_PATrEID = PA.TrE_TrEID
where FA.TrE_TrEId = @TrE_TrEId AND FA.TrE_PATrEID > 0
-- Niezwykle istotne ze wzglednu na prawidlowy FK dla ProdElem
po wykonaniu triggera
SET @MyIdentity = @@IDENTITY
-- Odczytanie z naglowka informacji potrzebnych do zbudowania
subelementu i decyzji o sposobie aktualizowania ceny zakupu
SELECT TOP 1
@TrN_TrNId = TrN_TrNId,
@TrN_FaId = case when TrN_TypDokumentu= 313 or
TrN_TypDokumentu= 314 then CDN.TraNagRelacjeFaId (TrN_TrNID,0,2 ) else
CDN.TraNagRelacjeFaId (TrN_TrNID,0,0 ) end ,
--@TrN_FaId = TrN_FaId,
@TrN_ZwrId = TrN_ZwrId,
@TrN_Rodzaj = TrN_Rodzaj,
@TrN_Bufor = TrN_Bufor,
@TrN_MagZrdId = TrN_MagZrdId,
@TrN_MagDocId = TrN_MagDocId,
@TrN_DataDok = TrN_DataDok,
@TrN_DataWys = TrN_DataWys,
@TrN_DataOpe = TrN_DataOpe,
@TrN_TrSTyp = ISNULL(TrN_TrSTyp,3),
@TrN_TypNB = TrN_TypNB,
@TrN_PodmiotTyp = TrN_PodmiotTyp,
@TrN_PodId = TrN_PodId,
@TrN_Centrala = TrN_Centrala,
@TrN_Waluta = TrN_Waluta,
@TrN_KursNumer = TrN_KursNumer,
@TrN_KursL = TrN_KursL,
@TrN_KursM = TrN_KursM
FROM cdn.TraNag
JOIN cdn.TraElem ON TrN_TrNId = TrE_TrNId AND TrE_TrEId =
@TrE_TrEId
-- ustalenie symbolu waluty, jeśli jest to waluta systemowa
IF ( @TrN_Waluta = '' OR @TrN_Waluta = @WalutaSys ) AND
@TrN_KursL=1 AND @TrN_KursM = 1
SET @TrN_Waluta = @WalutaSys
-- Sprawdzenie zgodności podmiotu między nagłówkiem i elementem
(ZB)
If IsNull(@TrN_PodmiotTyp, 0) <> IsNull(@TrE_PodmiotTyp, 0) Or
IsNull(@TrN_PodId, 0) <> IsNull(@TrE_PodId, 0)
Update CDN.TraElem Set TrE_PodmiotTyp = @TrN_PodmiotTyp,
TrE_PodId = @TrN_PodId Where TrE_TrEId = @TrE_TrEId
-- Ustalenie metody rozliczania magazynu dla dodawanego elementu
IF @QUAN = 1 AND @TrE_DataOpe > ( SELECT
ISNULL(MAX(TrN_DataOpe),0) FROM cdn.TraNag WHERE TrN_Rodzaj = 310005 )
SET @Metoda = 4
-- ustawiamy lppow dla wz jesli zmienia sie lppow na proformie
IF (Update (TrE_LpPow) and @TrN_Rodzaj in (320000,320009))
BEGIN
UPDATE a SET a.TrE_Lppow = @TrE_Lppow
FROM Cdn.TraElem a
join deleted d on d.TrE_Treid = @TrE_TrEId and a.TrE_lppow =
d.TrE_lppow and a.TrE_TwrId = d.TrE_TwrId
JOIN CDN.TraNagRelacje ON d.TrE_TrnId = TrR_FaId
--JOIN Cdn.TraNag c ON d.TrE_TrnId = c.TrN_RelTrnId
WHERE TrR_FaTyp = 306 AND a.TrE_TrnId = TrR_TrNId
--WHERE c.TrN_TypDokumentu = 306 and a.TrE_TrnId = c.TrN_TrNId
END
If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update
(TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod)
Or Update (TrE_Atr2_Wartosc)
Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update
(TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod)
Or Update (TrE_Atr4_Wartosc)
Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update
(TrE_Atr5_Wartosc))
BEGIN
DELETE FROM Cdn.TraElemAtr WHERE Tra_TrEId =@TrE_TrEId
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,1,TrE_Atr1_DeAId,TrE_Atr1_Kod,TrE_Atr1_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr1_DeAId>0 AND
TrE_Atr1_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,2,TrE_Atr2_DeAId,TrE_Atr2_Kod,TrE_Atr2_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr2_DeAId>0 AND
TrE_Atr2_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,3,TrE_Atr3_DeAId,TrE_Atr3_Kod,TrE_Atr3_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr3_DeAId>0 AND
TrE_Atr3_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,4,TrE_Atr4_DeAId,TrE_Atr4_Kod,TrE_Atr4_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr4_DeAId>0 AND
TrE_Atr4_DeAId is not NULL
INSERT INTO Cdn.TraElemAtr SELECT
Tre_TreId,5,TrE_Atr5_DeAId,TrE_Atr5_Kod,TrE_Atr5_Wartosc FROM
Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr5_DeAId>0 AND
TrE_Atr5_DeAId is not NULL
END
-- Kreowanie subelementów jest podejmowane tylko w
uzasadnionych przypadkach
-- Anulowane
IF @TrE_Aktywny = 0
BEGIN
DELETE FROM CDN.TrasElemDost WHERE TsD_TrEId = @TrE_TrEID
-- Kasujemy rezerwacje na subelementach dla RO/ZD i ich relacje
exec [CDN].[UstawRezerwacje] @TrE_TrEId, 1, @TrE_TypDokumentu
DELETE CDN.TraSElem WHERE TRS_TrEIdWydania = @TrE_TrEId
DELETE CDN.TraElemRelacje WHERE
TeR_ParentTyp=@TrE_TypDokumentu and TeR_ParentId = @TrE_TrEId
DELETE CDN.TraElemRelacje WHERE
TeR_ChildTyp=@TrE_TypDokumentu and TeR_ChildId = @TrE_TrEId
IF @TrN_Rodzaj IN (302006,302004)
begin
update WZ set WZ.TrE_LpPow = FA.TrE_LpPow from cdn.traelem WZ
left join cdn.tranagrelacje on WZ.TrE_TrNId = TrR_TrNId and
TrR_FaTyp = 305 and TrR_TrNTyp= 306
left join cdn.TraElem PA on PA.TrE_TrNId = TrR_FaId
left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID
where FA.TrE_TrEId = @TrE_TrEId AND WZ.TrE_Lppow = PA.TrE_LpPow
and FA.TrE_PATrEID > 0
update PA set PA.TrE_LpPow = FA.TrE_LpPow from cdn.TraElem PA
left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID where
FA.TrE_TrEId = @TrE_TrEId AND FA.TrE_PATrEID > 0
end
--PA z Pobraniem- >FA -> Korekta nie zwraca na magazyn
IF @TrN_Rodzaj IN (302006) AND @TrN_Bufor = 0
begin
--update TraS set trs_treid = @TrE_TrEId from cdn.TraSElem TraS
join cdn.TraElem on tre_treid = trs_treid where TrE_TrNId = @TrN_FaId
and TrE_LpPow = @tre_lppow and TrE_TypDokumentu != 304 --usługa złozona
RW nie przepinamy.
update TraS set trs_treid = FA.TrE_TrEId from cdn.TraSElem TraS
left join cdn.TraElem PA on PA.TrE_TrEID = TraS.TrS_TrEId
left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID
where FA.TrE_TrEId = @TrE_TrEId and PA.TrE_TypDokumentu != 304
--usługa złozona RW nie przepinamy.
update TraS set tsd_treid = FA.TrE_TrEId from cdn.TraSElemDost TraS
left join cdn.TraElem PA on PA.TrE_TrEID = TraS.Tsd_TrEId
left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID
where FA.TrE_TrEId = @TrE_TrEId and PA.TrE_TypDokumentu != 304
--usługa złozona RW nie przepinamy.
end
CONTINUE
END
/*
-- FZ z PZ, FZKI z PZKI akceptowane trwale lub w buforze
IF @TrN_Rodzaj IN ( 301004, 301005 ) AND @TrN_Bufor IN ( 0, 1 )
begin
-- Sprawdzenie, czy należy aktualizować cenę zakupu na MM-OL
-- Rodzaj marży: 0 = "od stu", 1 = "w stu"
IF @TrN_Rodzaj = 301004
AND @TrE_Ilosc > 0
AND @TrN_Bufor IN ( 0 )
BEGIN
SELECT
@Twr_Typ = Twr_Typ,
@Twr_KosztUslugiTyp = Twr_KosztUslugiTyp,
@Twr_KosztUslugi = Twr_KosztUslugi,
@Twr_Stawka = Twr_Stawka,
@Twr_KursL = Twr_KursL,
@Twr_KursM = Twr_KursM
FROM cdn.Towary
WHERE Twr_TwrId = @TrE_TwrId
IF @TrN_Waluta = @WalutaSys
BEGIN
SET @Waluta = @TrE_Waluta
SET @KursNumer = @TrE_KursNumer
SET @KursL = @TrE_KursL
SET @KursM = @TrE_KursM
SET @CenaW_New = @TrE_CenaW
END
-- parametry waluty z nagłówka
ELSE
BEGIN
SET @Waluta = @TrN_Waluta
SET @KursNumer = @TrN_KursNumer
SET @KursL = @TrN_KursL
SET @KursM = @TrN_KursM
SET @CenaW_New = @TrE_CenaWWD
END
-- parametry kursu waluty dla towaru lub usługi z typem
kwotowym
IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 )
UPDATE cdn.Towary SET
Twr_Waluta = @Waluta,
Twr_KursNumer = @KursNumer,
Twr_KursL = @KursL,
Twr_KursM = @KursM
WHERE Twr_TwrId = @TrE_TwrId
-- koszt usługi ( usługa i typ kosztu kwotowy )
IF @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1
BEGIN
-- od netto
IF @TrE_TypNB = 1
BEGIN
SET @Twr_KosztUslugiNew = @TrE_CenaT
SET @Twr_KosztUslugiWalNew = @CenaW_New
END
-- od brutto
ELSE IF @TrE_TypNB = 2
BEGIN
SET @Twr_KosztUslugiNew = @TrE_CenaT - ROUND (
@TrE_CenaT * @TrE_Stawka / (100 + @TrE_Stawka) , 2 )
SET @Twr_KosztUslugiWalNew = @CenaW_New - ROUND (
@CenaW_New * @TrE_Stawka / (100 + @TrE_Stawka) , 2 )
END
UPDATE cdn.Towary SET
Twr_KosztUslugi = @Twr_KosztUslugiNew,
Twr_KosztUslugiWal = @Twr_KosztUslugiWalNew
WHERE Twr_TwrId = @TrE_TwrId
END
-- Kursor po cenach dla towaru lub usługi z kosztem kwotowym:
-- aktualizacja ceny zakupu (TwC_TwCNumer = 1)
-- aktualizacja marży dla cen sprzedaży z aktualizacją
ustawiną na "Nie" ( TwC_TwCNumer <> 1 AND TwC_Aktualizacja = 0 )
IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 )
BEGIN
DECLARE TwrCeny CURSOR LOCAL FAST_FORWARD FOR
SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta,
TwC_Wartosc, TwC_Typ
FROM cdn.TwrCeny
WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer = 1
UNION ALL
SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta,
TwC_Wartosc, TwC_Typ
FROM cdn.TwrCeny
WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer <> 1
AND TwC_Aktualizacja = 0
OPEN TwrCeny
WHILE 1=1
BEGIN
FETCH NEXT FROM TwrCeny INTO @TwC_TwCNumer,
@TwC_TwCId, @TwC_Waluta, @TwC_Wartosc, @TwC_Typ
IF @@FETCH_STATUS <> 0 BREAK
-- aktualizacja ceny zakupu
IF @TwC_TwCNumer = 1
BEGIN
-- od netto
IF @TrE_TypNB = 1
IF @TwC_Typ = 1
SET @TwC_Wartosc = @CenaW_New * (
@TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL )
ELSE
SET @TwC_Wartosc = ( @CenaW_New + ROUND(
@CenaW_New * @TrE_Stawka / 100, 2 ) ) * ( @TrE_JMPrzelicznikM /
@TrE_JMPrzelicznikL )
-- od brutto
ELSE IF @TrE_TypNB = 2
IF @TwC_Typ = 1
SET @TwC_Wartosc = ( @CenaW_New - ROUND(
@CenaW_New * @TrE_Stawka / ( 100+@TrE_Stawka), 2 ) ) * (
@TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL )
ELSE
SET @TwC_Wartosc = @CenaW_New * (
@TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL )
UPDATE cdn.TwrCeny SET
TwC_Wartosc = @TwC_Wartosc,
TwC_Waluta = @Waluta
WHERE TwC_TwCId = @TwC_TwCId
SET @CenaZakupuNew = @TwC_Wartosc
SET @CenaZakupuNewWal = @CenaZakupuNew
SET @CenaZakupuNewPLN = @CenaZakupuNew *
@KursL/@KursM
END -- @TwC_TWCNumer = 1
-- aktualizacja marż dla cen sprzedaży
-- tylko wtedy, gdy waluta zakupu i sprzedaży są
równe lub gdy waluta sprzedazy jest systemowa
ELSE IF @TwC_TwCNumer <> 1 AND ( @TwC_Waluta =
@Waluta OR @TwC_Waluta = @WalutaSys )
BEGIN
-- cena sprzedaży brutto - obliczamy jej
reprezentację netto
IF @TwC_Typ = 2
SET @TwC_Wartosc = @TwC_Wartosc - ROUND(
@TwC_Wartosc * @Twr_Stawka / ( 100 + @Twr_Stawka), 2 )
-- marża "od stu" i "w stu"
IF @CenaZakupuNew <> 0
BEGIN
-- jeśli waluta zakupu i sprzedaży są
równe, to bierzemy cenę zakupu w walucie dokumentu
-- w przeciwnym przypadku, gdy cena
sprzedaży jest w walucie systemowej, to bierzemy cenę zakupu w walucie
systemowej
IF @TwC_Waluta = @WalutaSys AND @Waluta <>
@WalutaSys
SET @CenaZakupuNew = @CenaZakupuNewPLN
ELSE
SET @CenaZakupuNew = @CenaZakupuNewWal
SET @TwC_Marza = ( ( @TwC_Wartosc /
@CenaZakupuNew ) - 1 ) * 100
IF ( @TwC_Marza = -100 ) OR (
@CenaZakupuNew = @TwC_Wartosc )
SET @TwC_MarzaWStu = 100
ELSE IF @TwC_Wartosc = 0
SET @TwC_MarzaWStu = -100
ELSE
SET @TwC_MarzaWStu = 100 * @TwC_Marza /
( 100 + @TwC_Marza )
IF @TwC_Marza > 99999.99 SET
@TwC_Marza = 99999.99
IF @TwC_MarzaWStu > 99999.99 SET
@TwC_MarzaWStu = 99999.99
IF @TwC_Marza < - 99999.99 SET
@TwC_Marza = -99999.99
IF @TwC_MarzaWStu < - 99999.99 SET
@TwC_MarzaWStu = -99999.99
END
IF @TwC_Marza IS NOT NULL AND
@TwC_MarzaWStu IS NOT NULL
UPDATE cdn.TwrCeny SET
TwC_Marza = @TwC_Marza,
TwC_MarzaWStu = @TwC_MarzaWStu
WHERE TwC_TwCId = @TwC_TwCId
END
END -- kursor TwrCeny
CLOSE TwrCeny
DEALLOCATE TwrCeny
END -- Towar lub usługa z kosztem kwotowym
END -- aktualizacji ostatniej ceny zakupu
CONTINUE
end
*/
--dla 149306 mimo ze FAWZ to trzeba ustawić rezerwację
IF UPDATE( TrE_Ilosc ) and @TrN_Rodzaj = 302004 and exists(
SELECT Twr_Typ FROM cdn.Towary WHERE Twr_TwrId =
@TrE_TwrId and Twr_Typ = 0)
EXEC [CDN].[UstawRezerwacje] @TrE_TrEId,0,@TrE_TypDokumentu
-- FA z WZ, PA z WZ, FAKI z WZKI, PAKI z WZ, FZKI z PZ, AI, AI
z PW/RW, RO z PA, RO z FA, RO z WZ akceptowane trwale, PF z FA, PF z RO
IF @TrN_Rodzaj IN ( 302004, 305004, 302005, 305005, 301005,
311000, 311001, 308008, 308009, 308010, 320008, 320009, 320000 ) AND
@TrN_Bufor IN ( 0 ) and @TrE_TypDokumentu != 304
CONTINUE
-- ZD konwertowane do PZ/FZ
IF @TrN_Rodzaj IN ( /*309000,*/ 309008, 309009 ) --AND
@TrN_FaId IS NOT NULL
CONTINUE
-- FZKW, PZKW w buforze
IF @TrN_Rodzaj IN ( 301002, 307002, 310002, 301006,
307006,303002,307003, 307011 ) AND @TrN_Bufor IN ( 1 )
CONTINUE
-- RO, ZD z pzeznaczeniem do centrali XL
IF @TrN_Rodzaj IN ( 308000, 309000 ) AND @TrN_Centrala IN ( 1 )
CONTINUE
-- FA z PA z buforze
IF @TrN_Rodzaj IN (302006) AND @TrN_Bufor = 1
CONTINUE
-- PWP - pierwszy przebieg (TrE_Aktywny = 1 - nie liczymy
zasobów, najpierw RWS musi wyliczyć koszt)
IF @TrE_TypDokumentu IN (317) AND @TrE_Aktywny = 1
CONTINUE
-- PWP - drugi przebieg (TrE_Aktywny = 2 - liczymy zsoby,
PdE_Wartosc są już policzone)
IF @TrE_TypDokumentu IN (317) AND @TrE_Aktywny = 2
BEGIN
UPDATE cdn.TraElem SET TrE_Aktywny = 1 WHERE TrE_TrEId =
@TrE_TrEId
SET @TrE_Aktywny = 1
END
-- przeksztalcenia ZD do PZ, RO do FA/PA/WZ, PA do FA, PF do
FS, PF do RO, ZD do FZ
-- skasowanie subelementów zamowieniowych/rezerwacyjnych z
dokumentu pierwotnego
/* IF @TrN_Rodzaj IN ( 307010, 302008, 305008, 306008, 306010,
302006, 302009, 308011, 301011 )
BEGIN
SET @TrN_FaId_Old = ( SELECT TOP 1 TrN_TrNId FROM
cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId )
-- tablica nagłówków do przeglądnięcia i skasowania subelemntów
DECLARE @TrN_TrNId_Prw TABLE (TrN_TrNId INT)
INSERT INTO @TrN_TrNId_Prw SELECT TrN_TrNId FROM cdn.TraNag
JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId
WHERE TrR_FaId = @TrN_FaId_Old
DECLARE E CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId
FROM cdn.TraElem
WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM @TrN_TrNId_Prw
) -- AND TrE_TwrId = @TrE_TwrId
OPEN E
WHILE 1=1
BEGIN
FETCH NEXT FROM E INTO @TrE_TrEId_Old
IF @@FETCH_STATUS <> 0 BREAK
-- skasowanie subelementów z dokumentu pierwotnego
DELETE FROM cdn.TraSElem WHERE TrS_TrEId =
@TrE_TrEId_Old
END
CLOSE E
DEALLOCATE E
END*/
IF @TrN_Rodzaj IN ( 306010, 302006, 302009, 308011 )
BEGIN
DELETE FROM cdn.TraSElem WHERE TrS_TrEId in (SELECT TrE_TrEId
FROM cdn.TraElem
WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM cdn.TraNag
JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId
WHERE TrR_FaId = @TrE_TrNId and trn_typdokumentu = 320
and trn_trstyp = 3) )
/*
SET @TrN_FaId_Old = ( SELECT TOP 1 TrN_TrNId FROM
cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId )
-- tablica nagłówków do przeglądnięcia i skasowania subelemntów
DECLARE @TrN_TrNId_Prw TABLE (TrN_TrNId INT)
INSERT INTO @TrN_TrNId_Prw SELECT TrN_TrNId FROM cdn.TraNag
JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId
WHERE TrR_FaId = @TrN_FaId_Old
DECLARE E CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId
FROM cdn.TraElem
WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM @TrN_TrNId_Prw
) -- AND TrE_TwrId = @TrE_TwrId
OPEN E
WHILE 1=1
BEGIN
FETCH NEXT FROM E INTO @TrE_TrEId_Old
IF @@FETCH_STATUS <> 0 BREAK
-- skasowanie subelementów z dokumentu pierwotnego
DELETE FROM cdn.TraSElem WHERE TrS_TrEId =
@TrE_TrEId_Old
END
CLOSE E
DEALLOCATE E*/
END
/*IF @TrN_Rodzaj IN ( 307010, 302008, 305008, 306008, 301011 )
BEGIN
SET @TrN_FaId_Old = ( SELECT TOP 1 TrN_TrNId FROM
cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId )
-- tablica nagłówków do przeglądnięcia i skasowania subelemntów
DECLARE @TrN_TrNId_Prw1 TABLE (TrN_TrNId INT)
INSERT INTO @TrN_TrNId_Prw1 SELECT TrN_TrNId FROM cdn.TraNag
JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId
WHERE TrR_FaId = @TrN_FaId_Old
DECLARE E CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId
FROM cdn.TraElem
WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM
@TrN_TrNId_Prw1 ) -- AND TrE_TwrId = @TrE_TwrId
OPEN E
WHILE 1=1
BEGIN
FETCH NEXT FROM E INTO @TrE_TrEId_Old
IF @@FETCH_STATUS <> 0 BREAK
-- skasowanie subelementów z dokumentu pierwotnego
--DELETE FROM cdn.TraSElem WHERE TrS_TrEId =
@TrE_TrEId_Old
END
CLOSE E
DEALLOCATE E
END*/
-- przed trwalym zapisem skasowanie subelemntów z dokumentu
konwertowanego
-- nie można przepinać zasobów, ponieważ na dokumencie
pierwotnym mogą być usługi, które zaburzaja LP
-- WZ z FA, WZ z PA, WZKI z FA, WZKI z PA, PZ z FZ, PZKI z
FZKI, WZ z RO
--
IF @TrN_Rodzaj IN ( /*306004, 306006,*/ 306005, 306007,
/*307004,*/ 307005 /*, 306008*/ )
EXEC CDN.KasujTraSElemZDokZrodlowych @TrN_TrNId, @TrN_Rodzaj,
@TrN_FaId
/* -- ZG 9.0
BEGIN
SET @TrN_TrNId_Old = ( SELECT TrN_FaId FROM cdn.TraNag
WHERE TrN_TrNId = @TrE_TrNId )
-- przypadek szczególny - FA z PA nie przechodzi przez
302006, tylko od razu dostaje 302004
SET @TrN_TrNId_PAdoFA_Old = ( SELECT ISNULL(TrN_FaId,0)
FROM cdn.TraNag WHERE TrN_TrNId = @TrN_TrNId_Old AND TrN_Rodzaj = 302004 )
-- ooptymalizacja 8.5
DECLARE @TrN TABLE ( TrNId INT )
INSERT INTO @TrN ( TrNId ) SELECT @TrN_TrNId_Old
INSERT INTO @TrN ( TrNId ) SELECT @TrN_TrNId_PAdoFA_Old
INSERT INTO @TrN ( TrNId ) SELECT TrN_TrNId FROM cdn.TraNag
WHERE TrN_ZwrId = @TrN_TrNId_Old
DECLARE E CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId
FROM cdn.TraElem
JOIN @TrN ON TrNId = TrE_TrNId
AND TrE_TwrId = @TrE_TwrId
OPEN E
WHILE 1=1
BEGIN
FETCH NEXT FROM E INTO @TrE_TrEId_Old
IF @@FETCH_STATUS <> 0 BREAK
-- subelementy ze starego elemntu sa kasowane
-- najpierw korekcyjne PZKW, które wskazują na
kasowane subelemnty
DECLARE SKR CURSOR LOCAL FAST_FORWARD FOR
SELECT K.TrS_TrSId, K.TrS_TrEId, TrN_DekId,
TrN_NumerPelny
FROM cdn.TraSElem P LEFT OUTER JOIN cdn.TraSElem K
WITH ( INDEX = TrSZwrot) ON P.TrS_TrSId =
K.TrS_ZwrId
JOIN cdn.TraElem ON TrE_TrEId = K.TrS_TrEId
JOIN cdn.TraNag ON TrN_TrNId = TrE_TrNId
WHERE K.TrS_Rodzaj = 306072 AND P.TrS_TrEId =
@TrE_TrEId_Old
OPEN SKR
WHILE 1=1
BEGIN
FETCH NEXT FROM SKR INTO @TrS_TrSId_K,
@TrS_TrEId_K, @TrN_DekId, @TrN_NumerPelny
IF @@FETCH_STATUS <> 0 BREAK
IF @TrN_DekId IS NOT NULL
BEGIN
SET @Komunikat = 'Zapis niemożliwy
! Dokument korekcyjny WZKK (' + @TrN_NumerPelny + '), na którym musi
zostać zmodyfikowany koszt jest już zaksięgowany ! '
IF @Komunikat <> '' GOTO KOMUNIKAT
END
DELETE FROM cdn.TraSElem WHERE
TrS_TrSId = @TrS_TrSId_K
EXEC CDN.sp_AktualizujWZKK @TrS_TrEId_K
END
CLOSE SKR
DEALLOCATE SKR
-- teraz właściwy subelemnt z pierwotnego
DELETE FROM cdn.TraSElem WHERE TrS_TrEId =
@TrE_TrEId_Old
END
CLOSE E
DEALLOCATE E
END
*/
-- zainicjowanie typu
SET @TrS_Typ = -1
-- dokumenty w buforze
IF @TrN_Bufor = 1
BEGIN
-- FZ, PW, PZ z ZD, BO, PWP, ZD, PW z AI, FZ z ZD
IF @TrN_Rodzaj IN ( 301000, 303000, 307000, 307010,
310000, 317000, 309000, 303010, 312010, 301011, 301050, 313000, 313004 )
SET @TrS_Typ = 4
-- FA, FA z RO, PA, PA z RO
IF @TrN_Rodzaj IN ( 302000, 302008, 305000, 305008, 318000,
302009, 320000 )
SET @TrS_Typ = @TrN_TrSTyp
IF @TrN_Rodzaj IN ( 302004,305004 ) and @TrE_TypDokumentu = 304
SET @TrS_Typ = @TrN_TrSTyp
-- FA z WZ dla elementów dodanych
IF @TrN_Rodzaj IN ( 302004 ) AND @TrE_LpPow < 0
SET @TrS_Typ = @TrN_TrSTyp
-- RO, RO z PF
IF @TrN_Rodzaj IN ( 308000, 308011 )
SET @TrS_Typ = 3
-- RW, WZ, WZ z FA, WZ z PA, MM, RW z AI
IF @TrN_Rodzaj IN ( 304000, 304006, 304004,304008, 306000,
306004, 306006, 312000,312008, 304010, 306008, 306010, 312100, 314000,
314004, 314006 )
SET @TrS_Typ = 2
-- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI, RWKI, WZKI w buforze
IF @TrN_Rodzaj IN ( 302001, 302005, 305001, 305005,
304001, 306001, 314001, 318001 ) AND @TrN_Bufor IN ( 1 )
SET @TrS_Typ = 4
-- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI, RWKI, WZKI w
buforze dla ilości dodatnich
IF @TrN_Rodzaj IN ( 302001, 302005, 305001, 305005, 318001
) AND @TrN_Bufor IN ( 1 ) AND @TrE_Ilosc > 0
BEGIN
DECLARE @TrN_TrSTyp_Pierw INT
-- dla nie RWSK z dokumentu pierwotnego
IF @TrN_Rodzaj <> 318001
SELECT TOP 1
@TrN_TrSTyp_Pierw = ISNULL(MAX(TrN_TrSTyp),0)
FROM cdn.TraNag
JOIN cdn.TraElem ON TrE_TrNId = TrN_TrNId
WHERE TrE_TrEId = @TrE_ZwrId
-- dla RWSK ze skojarzonego dokumentu PWPK
ELSE
SELECT TOP 1
@TrN_TrSTyp_Pierw = ISNULL(MAX(PWP_N.TrN_TrSTyp),0)
FROM cdn.TraNag RWS_N
JOIN cdn.TraElem RWS_E ON RWS_E.TrE_TrNId =
RWS_N.TrN_TrNId
JOIN cdn.TraNag PWP_N ON PWP_N.TrN_TrNId =
RWS_N.TrN_FaId
WHERE RWS_E.TrE_TrEId = @TrE_TrEId
-- jeśli na pierwotnym nie jest ustawione "pobranie",
to z pierwotnego
IF @TrN_TrSTyp_Pierw = 2
SET @TrS_Typ = @TrN_TrSTyp_Pierw
ELSE
SET @TrS_Typ = 3
END
-- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI w buforze dla
ilości dodatnich
IF @TrN_Rodzaj IN ( 306001, 314001 ) AND @TrN_Bufor IN ( 1
) AND @TrE_Ilosc > 0
SET @TrS_Typ = 2
-- FZKI, FZKI z PZKI, PWKI, PZKI, BOMKI w buforze
IF (@TrN_Rodzaj IN ( 301001, 301005, 303001, 307001,
310001, 313001, 317001 ) AND @TrN_Bufor IN ( 1 )) or (@TrN_Rodzaj =
301051 AND @TrN_Bufor = 1 and not exists (select * from cdn.TraNag
where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005))
SET @TrS_Typ = 3
-- FZKI, FZKI z PZKI, PWKI, PZKI, BOMKI w buforze dla
ilości dodatnich
IF (@TrN_Rodzaj IN ( 301001, 301005, 303001, 307001,
310001, 313001, 317001) AND @TrN_Bufor IN ( 1 ) AND @TrE_Ilosc > 0) or
(@TrN_Rodzaj = 301051 AND @TrN_Bufor = 1 AND @TrE_Ilosc > 0 and not
exists (select * from cdn.TraNag where TrN_FaId = @TrN_TrNId and
TrN_Rodzaj = 307005))
SET @TrS_Typ = 4
END
-- dokumenty zaakceptowane trwale
ELSE IF @TrN_Bufor = 0
BEGIN
-- FZ, FZKI, FZKI z PZKI, ZD, FZ z ZD
IF @TrN_Rodzaj IN ( 301000, 301001, 301005, 309000, 301011,
301050) or (@TrN_Rodzaj = 301051 and not exists (select * from
cdn.TraNag where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005))
SET @TrS_Typ = 4
-- PW, PWKI, PZ, PZ z FZ, PZKI, PZKI z FZKI, PZKW, PZKW z
FZKW, PZ z ZD, BO, PWP, PW z AI, BOMKI, BOMKW
IF @TrN_Rodzaj IN ( 303000, 303001, 303002, 307000, 307004,
307001, 307005, 307002, 307003, 307011, 307006, 307010, 310000, 317000,
303010, 310001, 310002, 312010, 313000, 313001, 313002, 313004, 317001 )
SET @TrS_Typ = 1
-- FAKI, PAKI - subelement o typie z dokumentu pierwotnego
IF @TrN_Rodzaj IN ( 302001, 305001 )
SET @TrS_Typ = ISNULL( ( SELECT MAX(TrS_Typ) FROM
cdn.TraElem JOIN cdn.TraSElem ON TrS_TrEId = TrE_TrEId WHERE TrE_TrEId =
@TrE_ZwrId ), 0 )
-- FA, FA z WZ, PA, FA z RO, PA z RO, PF, PF z FA, PF z RO,
FA z PF
IF @TrN_Rodzaj IN ( 302000, 302006, 305000, 302008, 305008,
320000, 320008, 320009, 302009 )
SET @TrS_Typ = @TrN_TrSTyp
IF @TrN_Rodzaj IN ( 302004,305004 ) and @TrE_TypDokumentu = 304
SET @TrS_Typ = @TrN_TrSTyp
-- FA z WZ dla elementów dodanych
IF @TrN_Rodzaj IN ( 302004 ) AND @TrE_LpPow < 0
SET @TrS_Typ = @TrN_TrSTyp
-- RO, FA z RO, PA z RO
IF @TrN_Rodzaj IN ( 308000, 308011 )
SET @TrS_Typ = 3
-- RW, RWKI, WZ, WZKI, WZ z FA, WZ z PA, WZKI, WZKI z FAKI,
WZKI z PAKI, MM, RWS, RW z AI
IF @TrN_Rodzaj IN ( 304000, 304006, 304004,304008, 304001,
306000, 306004, 306006, 306001, 306005, 306007, 312000,312008, 318000,
304010, 306008, 306010, 312100, 314000, 314001, 314004, 314006, 318001 )
SET @TrS_Typ = 2
END
-- Jesli nie ustawiono prawidlowego typu - nie kreujemy
subelementow
IF @TrS_Typ NOT IN ( 1, 2, 3, 4 )
CONTINUE
-- Update wartości i cen elementu dla PWP - ( musi być przed
ustawieniem subelementu - jest już RWS )
IF @TrE_TypDokumentu = 317
BEGIN
SET @TrE_WartoscZakupu = ( SELECT
ISNULL(SUM(PdE_WartoscZakupu),0) FROM cdn.ProdElem WHERE PdE_TrEId =
@TrE_TrEId )
UPDATE cdn.TraElem SET
TrE_WartoscNetto = @TrE_WartoscZakupu,
TrE_WartoscBrutto = ROUND(@TrE_WartoscZakupu * ( ( 100
+ TrE_Stawka ) / 100 ), 2 ),
TrE_WartoscNettoWal = @TrE_WartoscZakupu,
TrE_WartoscBruttoWal = ROUND(@TrE_WartoscZakupu * ( ( 100
+ TrE_Stawka ) / 100 ), 2 ),
TrE_Rabat = 0,
TrE_CenaT = CASE TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_IloscJM END,
TrE_CenaW = CASE TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_IloscJM END ,
TrE_Cena0 = CASE TrE_Ilosc WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_Ilosc END ,
TrE_CenaWWD = CASE TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_IloscJM END,
TrE_Cena0WD = CASE TrE_Ilosc WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_Ilosc END,
TrE_Waluta = @WalutaSys,
TrE_KursNumer = 0,
TrE_KursL = 1,
TrE_KursM = 1
WHERE TrE_TrEId = @TrE_TrEId
-- Wczytanie poprawionych wartości
SELECT
@TrE_WartoscNetto = @TrE_WartoscZakupu,
@TrE_CenaT = CASE @TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / @TrE_IloscJM END,
@TrE_CenaW = CASE @TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / @TrE_IloscJM END,
@TrE_CenaWWD = CASE @TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / @TrE_IloscJM END,
@TrE_Waluta = @WalutaSys,
@TrE_KursNumer = 0,
@TrE_KursL = 1,
@TrE_KursM = 1
END
-- wartosci pozostalych pol
SET @TrS_TrSId = ( SELECT ISNULL(MAX(TrS_TrSId),0) FROM
cdn.TraSElem ) + 1
SET @TrS_TrEId = @TrE_TrEId
SET @TrS_TrSIdDost = NULL
SET @TrS_ZwrId = NULL
SET @TrS_TwrId = @TrE_TwrId
SET @TrS_MagId = CASE WHEN @TrN_Rodzaj <> 312010 THEN
CASE WHEN @TrE_MagId is null THEN @TrN_MagZrdId ELSE @TrE_MagId END ELSE
@TrN_MagDocId END
SET @TrS_Rodzaj = @TrN_Rodzaj
SET @TrS_Metoda = @Metoda
SET @TrS_DataOpe = @TrE_DataOpe
SET @TrS_Ilosc = @TrE_Ilosc
SET @TrS_Wartosc = 0
SET @TrS_Cena = @TrE_CenaT
SET @TrS_Termin = NULL
-- dostawy
IF @TrS_Typ = 1
BEGIN
SET @TrS_Wartosc = @TrE_WartoscNetto
SET @TrS_Cena = case when @TrE_Ilosc <> 0 THEN
@TrE_WartoscNetto / @TrE_Ilosc ELSE @TrS_Wartosc END
END
-- Zwykłe dostawy PZ, PZ z FZ, PW, BO, PZ z ZD, PWP, PW z AI, MM-OL
IF @TrS_Rodzaj IN ( 307000, 307004, 303000, 310000, 307010,
317000, 303010, 312010, 313000, 313004 )
BEGIN
-- TrS_TrSIdDost i TrS_ZwrId
SET @TrS_TrSIdDost = @TrS_TrSId
SET @TrS_ZwrId = NULL
END
-- Korekty ilościowe dostaw PZKI, PZKI z FZKI, PWKI, PZKW,
BOMKI, BOMKW
IF @TrS_Rodzaj IN ( 307001, 307005, 303001, 303002, 307002,
310001, 310002, 307003, 307011, 307006, 313001, 313002, 317001 )
BEGIN
SELECT
@TrS_TrSIdDost = TrS_TrSIdDost,
@TrS_Cena = TrS_Cena,
@TrS_ZwrId = TrS_TrSId
FROM cdn.TraSElem
WHERE TrS_TrSId = ( -- TrS_TrSId pierwotnej dostawy
SELECT TOP 1 A.TrS_TrSId
FROM cdn.TraSElem A
JOIN cdn.TraElem B ON B.TrE_TrEId =
A.TrS_TrEId
WHERE B.TrE_TrEId = @TrE_ZwrId
)
END
-- Dostawa i QUAN - zerowa cena i wartosc subelementu
IF @TrS_Typ = 1 AND @TrS_Metoda = 4
BEGIN
SET @TrS_Wartosc = 0
SET @TrS_Cena = 0
END
-- daty dla rezerwacji i zamowien
-- Rezerwacja - bufor
IF @TrN_Rodzaj IN ( 308000, 308011 ) -- AND @TrN_Bufor = 1
BEGIN
SET @TrS_Termin = @TrN_DataWys
END
/*
-- Rezerwacja - zapis trwaly (rezerwacja bezterminowa)
IF @TrN_Rodzaj IN ( 308000 ) AND @TrN_Bufor = 0
SET @TrS_DataOpe = NULL --@TrE_DataDok
*/
-- Zamówienie - bufor i zapis trwaly
IF @TrN_Rodzaj IN ( 309000 )
BEGIN
SELECT @DataZamowienia = ISNULL(MAX(Fir_Wartosc),2) FROM
cdn.Firma WHERE Fir_Numer = 2075
IF @DataZamowienia = 2
SET @TrS_DataOpe = @TrN_DataWys
END
-- odwrotne ilosci dla korekt w buforze
-- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI, FZKI, FZKI z PZKI,
PWKI, RWKI, WZKI, PZKI, BOMKI w buforze
IF (@TrN_Rodzaj IN ( 302001, 302005, 305001, 305005, 301001,
301005, 303001, 304001, 306001, 307001, 310001, 313001, 314001, 318001,
317001) AND @TrN_Bufor IN ( 1 ) AND @TrS_Typ IN ( 3, 4 ) AND @TrS_Ilosc
< 0 )
or (@TrN_Rodzaj = 301051 AND @TrN_Bufor IN ( 1 ) AND @TrS_Typ
IN ( 3, 4 ) AND @TrS_Ilosc < 0 and not exists (select * from cdn.TraNag
where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005) )
BEGIN
SET @TrS_Ilosc = - @TrE_Ilosc
/* IF @TrS_Typ IN ( 3, 4 ) AND @TrS_Ilosc < 0
SELECT
@TrS_Typ = CASE @TrS_Typ WHEN 4 THEN 3 ELSE 4 END,
@TrS_Ilosc = -@TrS_Ilosc
*/
END
-- insert subelemntu i procedura aktualizacji wartości zakupu
(subelement dodawany tylko dla towaru)
-- odczytanie typu karty (towar/usługa) oraz typu kosztu usługi
i stawki VAT dla późniejszej aktualizacji ceny zakupu
SELECT
@Twr_Typ = Twr_Typ,
@Twr_KosztUslugiTyp = Twr_KosztUslugiTyp,
@Twr_KosztUslugi = Twr_KosztUslugi,
@Twr_Stawka = Twr_Stawka,
@Twr_KursL = Twr_KursL,
@Twr_KursM = Twr_KursM
FROM cdn.Towary
WHERE Twr_TwrId = @TrE_TwrId
-- Kontrola ilosci przed dodaniem subelemntu
IF @Twr_Typ = 1 AND (( @TrS_Typ = 1 AND @TrS_Ilosc < 0 ) OR (
@TrS_Typ = 2 AND @TrS_Ilosc > 0 )) AND @TrE_IFA24Mag = 0
BEGIN
SELECT @ZawszeBraki = ISNULL(MAX(Fir_Wartosc),0) FROM
cdn.Firma WHERE Fir_Numer = 1536
if (SELECT ISNULL(MAX(Fir_Wartosc),0) FROM cdn.Firma WHERE Fir_Numer
= 1970) = 1 or (SELECT ISNULL(MAX(Fir_Wartosc),0) FROM cdn.Firma WHERE
Fir_Numer = 1776) = 1
select @ZezwalajMimoRez = 1
else
select @ZezwalajMimoRez = 0
--SELECT @ZezwalajMimoRez = ISNULL(MAX(Fir_Wartosc),0) FROM
cdn.Firma WHERE Fir_Numer = 1970
IF ((@TrS_Rodzaj IN (305001,302001,306001,302000,302009, 305000,
306000,304000,302008, 305008, 306008,304008) AND @TrS_Typ = 2)
and exists (select * from deleted join inserted on deleted.TrE_TrEID
= inserted.TrE_TrEID and inserted.TrE_TrEID = @TrE_TrEId and
deleted.tre_ilosc >= inserted.tre_ilosc and deleted.TrE_DataOpe =
inserted.TrE_DataOpe))
or
((@TrS_Rodzaj IN ( 306004,306006) AND @TrS_Typ = 2) and exists
(select TrN_TrSTyp from cdn.tranag join cdn.tranagrelacje on trr_faid=
trn_trnid and trr_trnid = @TrE_TrNID where TrN_TrSTyp =2))
SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId,
@TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 3)
ELSE
IF ((@TrS_Rodzaj IN (302008, 305008, 306008,304008,312008) AND
@TrS_Typ = 2)
OR (@TrS_Rodzaj =306010 AND @TrS_Typ = 2 and exists(select
trr_trrid from cdn.tranagrelacje where trr_trnid = @trn_trnid and
Trr_fatyp = 308 ))
OR (@TrS_Rodzaj =302009 AND @TrS_Typ = 2 and exists(select
trr_trrid from cdn.tranagrelacje where trr_trnid = @trn_trnid and
Trr_fatyp = 308 ))
OR (@TrS_Rodzaj =306004 AND @TrS_Typ = 2 and exists(select
trr_trrid from cdn.tranagrelacje where trr_trnid = @trn_trnid and
Trr_fatyp = 308 )))
and not exists (select * from deleted join inserted on
deleted.TrE_TrEID = inserted.TrE_TrEID and inserted.TrE_TrEID =
@TrE_TrEId and deleted.tre_ilosc < inserted.tre_ilosc)
IF @ZezwalajMimoRez = 1 and(@TrS_rodzaj in
(306008,306010,306004,304008,312008) or (@TrS_rodzaj in (302009) AND
@TrS_Typ = 2) or (@TrS_rodzaj in (302008) AND @TrS_Typ = 2) or
(@TrS_rodzaj in (305008) AND @TrS_Typ = 2))
SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId,
@TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 2 )
ELSE
SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId,
@TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 1 )
else
SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId,
@TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 0)
IF @Komunikat <> '' GOTO KOMUNIKAT
END
-- Marze symulowane dla FA, PA, FA z PA, RWS (symulacja poprzez
ustawienie wartosci na subelemencie rezerwacyjnym)
IF @Twr_Typ = 1 AND @TrS_Typ IN ( 3, 4 )
BEGIN
SET @Marza_Sym_Ostatnia = ( SELECT TOP 1
ISNULL(Fir_Wartosc,0) FROM cdn.Firma WHERE Fir_Numer = 1481 )
SET @Marza_Sym_Srednia = ( SELECT TOP 1
ISNULL(Fir_Wartosc,0) FROM cdn.Firma WHERE Fir_Numer = 1482 )
-- Marze symulowane tylko dla elementów z subelementami
rezerwacyjnymi - poprawa wartosći na subelementach rezerwacyjnych
IF @Marza_Sym_Ostatnia = 1 OR @Marza_Sym_Srednia = 1
BEGIN
-- w każdym przypadku symulwoana wg ostatniej ceny zakupu
SET @TrS_Wartosc = @TrE_Ilosc * ( SELECT
ROUND(ISNULL(TwC_Wartosc,0)*(@Twr_KursL/@Twr_KursM),2) FROM cdn.TwrCeny
WHERE TwC_TwrId = @TrS_TwrId AND TwC_TwCNumer = 1 )
-- jeśli marża ze średniej z zasobów i nie brakuje zasobów
IF @Marza_Sym_Srednia = 1
IF ( SELECT ISNULL(SUM(TwZ_Ilosc),0) FROM
cdn.TwrZasoby WHERE TwZ_TwrId = @TrS_TwrId ) <> 0
SET @TrS_Wartosc = @TrE_Ilosc * ( SELECT
ISNULL(SUM(TwZ_Wartosc)/SUM(TwZ_Ilosc),0) FROM cdn.TwrZasoby WHERE
TwZ_TwrId = @TrS_TwrId )
SET @TrS_Cena = CASE @TrS_Ilosc WHEN 0 THEN 0 ELSE
@TrS_Wartosc / @TrS_Ilosc END
END
END
-- Liczenie kosztu usługi dla RWS (na pozostałych wewnętrznych
koszt usługi jest zapisywany z obiektu)
IF @Twr_Typ = 0 AND @TrE_TypDokumentu = 318 and
@TrE_KosztUslugiZDok = 0
BEGIN
IF @Twr_KosztUslugiTyp = 1
SET @TrE_KosztUslugi = ROUND( @TrE_Ilosc *
@Twr_KosztUslugi, 2 )
ELSE IF @Twr_KosztUslugiTyp = 2
SET @TrE_KosztUslugi = ROUND( @TrE_WartoscNetto *
@Twr_KosztUslugi / 100, 2 )
UPDATE cdn.TraElem SET TrE_KosztUslugi = @TrE_KosztUslugi
WHERE TrE_TrEId = @TrE_TrEId
END
-- AVCO - przed dodaniem subelementu dostawczego lub kosztowego
sprawdzić date ostatniej modyfikacji zasobu
IF @TrS_Metoda = 3 AND @TrS_Typ IN ( 1, 2 )
BEGIN
SET @Data_Dost = ( SELECT ISNULL(TwZ_Data,'1800-01-01')
FROM cdn.TwrZasoby WHERE TwZ_TwrId = @TrS_TwrId AND TwZ_MagId =
@TrS_MagId AND TwZ_TrSIdDost IS NULL )
IF @TrS_DataOpe < @Data_Dost
BEGIN
-- jeśli kontrola daty ostatniej modyfiakcji zasobu
zaznaczona
IF ( SELECT TOP 1
ISNULL(MAX(SUBSTRING(Fir_Wartosc,1,1)),0) FROM cdn.Firma WHERE Fir_Numer
= 1688 ) = 0
BEGIN
SET @Komunikat = 'Zapis niemożliwy ! Dla towaru ' +
@TrE_TwrKod + ' data ostatniej modyfikacji zasobu (' + CONVERT(
NVarchar(10), @Data_Dost, 120 ) + ') jest późniejsza niż data transakcji
(' + CONVERT( NVarchar(10), @TrS_DataOpe, 120 ) + ')'
IF @Komunikat <> '' GOTO KOMUNIKAT
END
END
END
-- ustawienia korekty wartosci dla PZ z dostawami
SET @DostIloscRecordow = 0
SET @DostIloscRecordowReal = 0
IF @TrS_Rodzaj IN ( 307002,307006,310002,303002,307003, 307011)
BEGIN
SELECT @DostIloscRecordowReal =count(A.TrS_TrSId)
FROM cdn.TraSElem A
JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId
WHERE B.TrE_TrEId = @TrE_ZwrId
END
IF @DostIloscRecordowReal > 1
BEGIN
SELECT @DostIloscRecordow =count(A.TrS_TrSId)
FROM cdn.TraSElem A
JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId
JOIN (SELECT A.TrS_TrSId,
abs(ISNULL(A.TrS_Ilosc,0))-abs(ISNULL(B.TrS_Ilosc,0)) as Roznica
FROM cdn.TraSElem A
LEFT OUTER JOIN cdn.TraSElem B ON A.TrS_TrSId =
B.TrS_ZwrId
WHERE A.TrS_Typ = 1 AND A.TrS_TrEId = @TrE_ZwrId) AS C ON
C.TrS_TrSId = A.TrS_TrSId
WHERE B.TrE_TrEId = @TrE_ZwrId AND C.Roznica > 0
SELECT @DostTrS_Ilosc =
(SELECT ISNULL(sum(TrS_Ilosc),0) FROM cdn.TraSElem WHERE
Trs_Typ = 1 AND TrS_TrEId = @TrE_ZwrId)
+
(SELECT ISNULL(sum(TrS_Ilosc),0) FROM cdn.TraSElem WHERE
Trs_Typ = 1 AND TrS_Zwrid
in(SELECT TrS_TrSId FROM cdn.TraSElem WHERE Trs_Typ = 1
AND TrS_TrEId = @TrE_ZwrId ))
SET @DostIloscRecordowDodanych = 1
SET @ResztaWartosc = @TrE_WartoscNetto
DECLARE DostawyKorektaWartosci CURSOR LOCAL FAST_FORWARD FOR
SELECT A.TrS_TrSId
FROM cdn.TraSElem A
JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId
JOIN (SELECT A.TrS_TrSId,
abs(ISNULL(A.TrS_Ilosc,0))-abs(ISNULL(B.TrS_Ilosc,0)) AS Roznica
FROM cdn.TraSElem A
LEFT OUTER JOIN (SELECT B.TrS_ZwrId,
SUM(ISNULL(B.TrS_Ilosc,0)) as TrS_Ilosc
FROM cdn.TraSElem A
LEFT OUTER JOIN cdn.TraSElem B ON
A.TrS_TrSId = B.TrS_ZwrId WHERE A.TrS_Typ = 1 AND A.TrS_TrEId =
@TrE_ZwrId AND B.TrS_ZwrId IS NOT NULL
GROUP BY B.TrS_ZwrId) B ON
A.TrS_TrSId = B.TrS_ZwrId
WHERE A.TrS_Typ = 1 AND A.TrS_TrEId = @TrE_ZwrId)
AS C ON C.TrS_TrSId = A.TrS_TrSId
WHERE B.TrE_TrEId = @TrE_ZwrId AND c.roznica > 0
OPEN DostawyKorektaWartosci
WHILE 1=1
BEGIN
FETCH NEXT FROM DostawyKorektaWartosci INTO @DostTrS_TrSId
IF @@FETCH_STATUS <> 0 BREAK
IF @DostIloscRecordowDodanych = @DostIloscRecordow
SELECT
@TrS_TrSIdDost = TrS_TrSIdDost,
@TrS_Cena = TrS_Cena,
@TrS_Wartosc = @ResztaWartosc,
@TrS_ZwrId = TrS_TrSId
FROM cdn.TraSElem
WHERE TrS_TrSId = @DostTrS_TrSId
ELSE
SELECT
@TrS_TrSIdDost = MAX(TrS_TrSIdDost),
@TrS_Cena = MAX(TrS_Cena),
@TrS_Wartosc = ROUND(
(@TrE_WartoscNetto/@DostTrS_Ilosc)*SUM(TrS_Ilosc),2),
@TrS_ZwrId = MIN(TrS_TrSId)
FROM cdn.TraSElem
WHERE TrS_TrSId = @DostTrS_TrSId OR TrS_ZwrID =
@DostTrS_TrSId
SET @DostIloscRecordowDodanych =
@DostIloscRecordowDodanych + 1
SET @ResztaWartosc = @ResztaWartosc - @TrS_Wartosc
--select @TrS_TrSId, @TrS_TrEId, @TrS_TrSIdDost,
@TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj, @TrS_Typ, @TrS_Metoda,
@TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc as wartosc, @TrS_Cena,
@TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor
EXECUTE CDN.AktualizujTraSElem @TrS_TrSId, @TrS_TrEId,
@TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj,
@TrS_Typ, @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc,
@TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor
END
CLOSE DostawyKorektaWartosci
DEALLOCATE DostawyKorektaWartosci
UPDATE cdn.TraElem SET TrE_KosztUslugi = 0 WHERE TrE_TrEId =
@TrE_TrEId
END
-- dodanie subelemntu (towary lub usługi gdy dokumenty rozchodowe )
IF @Twr_Typ = 1 AND ISNULL(@Tre_WyborDostaw,0) = 0 AND
@DostIloscRecordowReal < 2 AND @TrE_IFA24Mag = 0
BEGIN
EXECUTE CDN.AktualizujTraSElem @TrS_TrSId, @TrS_TrEId,
@TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj,
@TrS_Typ, @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc,
@TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor
UPDATE cdn.TraElem SET TrE_KosztUslugi = 0 WHERE TrE_TrEId
= @TrE_TrEId
END
-- dodanie subelemntu dla rezerwacji (usługi)
IF @Twr_Typ = 0
BEGIN
IF @TrS_Rodzaj IN ( 307010, 302008, 305008, 306008,
301011 , 306004, 307004, 302009, 302004, 306010,304000,304008,312008,312100)
EXEC [CDN].[UstawRezerwacje] @TrS_TrEId,0,0
IF @TrE_TypDokumentu IN ( 308, 309)
BEGIN
SET @TrS_Typ = @TrS_Typ + 10
EXECUTE CDN.AktualizujTraSElem @TrS_TrSId, @TrS_TrEId,
@TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj,
@TrS_Typ , @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc,
@TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor
END
END
-- Update wartości i cen elementu dla dokumentów wewnętrznych
IF @TrE_TypDokumentu IN ( 304, 312, 318 ) AND @TrN_Rodzaj NOT
IN ( 312010 )
BEGIN
SET @TrE_WartoscZakupu = ( SELECT TrE_WartoscZakupu FROM
cdn.TraElem WHERE TrE_TrEId = @TrE_TrEId )
UPDATE cdn.TraElem SET
TrE_WartoscNetto = @TrE_WartoscZakupu,
TrE_WartoscBrutto = ROUND(@TrE_WartoscZakupu * ( ( 100
+ TrE_Stawka ) / 100 ), 2 ),
TrE_WartoscNettoWal = @TrE_WartoscZakupu,
TrE_WartoscBruttoWal = ROUND(@TrE_WartoscZakupu * ( ( 100
+ TrE_Stawka ) / 100 ), 2 ),
TrE_Rabat = 0,
TrE_CenaT = CASE TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_IloscJM END,
TrE_CenaW = CASE TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_IloscJM END ,
TrE_Cena0 = CASE TrE_Ilosc WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_Ilosc END ,
TrE_CenaWWD = CASE TrE_IloscJM WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_IloscJM END,
TrE_Cena0WD = CASE TrE_Ilosc WHEN 0 THEN 0
ELSE @TrE_WartoscZakupu / TrE_Ilosc END,
TrE_Waluta = @WalutaSys,
TrE_KursNumer = 0,
TrE_KursL = 1,
TrE_KursM = 1
WHERE TrE_TrEId = @TrE_TrEId
END
-- Aktualizacja ceny zakupu towaru i kosztu usługi na karcie
magazynowej dla każdego elementu PWP
-- Jeśli waluta dokumentu (naglowka) jest systemowa, to zmiana
ceny zakupu na podstawie waluty elemetnu
-- parametry waluty z elementu
IF @TrN_Waluta = @WalutaSys
BEGIN
SET @Waluta = @TrE_Waluta
SET @KursNumer = @TrE_KursNumer
SET @KursL = @TrE_KursL
SET @KursM = @TrE_KursM
SET @CenaW_New = @TrE_CenaW
END
-- parametry waluty z nagłówka
ELSE
BEGIN
SET @Waluta = @TrN_Waluta
SET @KursNumer = @TrN_KursNumer
SET @KursL = @TrN_KursL
SET @KursM = @TrN_KursM
SET @CenaW_New = @TrE_CenaWWD
END
/*
-- Sprawdzenie, czy należy aktualizować cenę zakupu na MM-OL
IF @TrN_Rodzaj = 312010
SELECT TOP 1 @Aktualizuj_CenaZ_MMOL = CONVERT(TINYINT,
ISNULL(Fir_Wartosc,0)) FROM cdn.Firma WHERE Fir_Numer = 1758
-- Rodzaj marży: 0 = "od stu", 1 = "w stu"
IF ( @TrE_TypDokumentu IN ( 310, 303, 307, 301, 317, 313 ) OR (
@TrN_Rodzaj = 312010 AND @Aktualizuj_CenaZ_MMOL = 1 ) )
AND @TrE_Ilosc > 0
AND @TrN_Bufor IN ( 0 )
BEGIN
-- parametry kursu waluty dla towaru lub usługi z typem
kwotowym
IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 )
UPDATE cdn.Towary SET
Twr_Waluta = @Waluta,
Twr_KursNumer = @KursNumer,
Twr_KursL = @KursL,
Twr_KursM = @KursM
WHERE Twr_TwrId = @TrE_TwrId
-- koszt usługi ( usługa i typ kosztu kwotowy )
IF @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1
BEGIN
-- od netto
IF @TrE_TypNB = 1
BEGIN
SET @Twr_KosztUslugiNew = @TrE_CenaT
SET @Twr_KosztUslugiWalNew = @CenaW_New
END
-- od brutto
ELSE IF @TrE_TypNB = 2
BEGIN
SET @Twr_KosztUslugiNew = @TrE_CenaT - ROUND (
@TrE_CenaT * @TrE_Stawka / (100 + @TrE_Stawka) , 2 )
SET @Twr_KosztUslugiWalNew = @CenaW_New - ROUND (
@CenaW_New * @TrE_Stawka / (100 + @TrE_Stawka) , 2 )
END
UPDATE cdn.Towary SET
Twr_KosztUslugi = @Twr_KosztUslugiNew,
Twr_KosztUslugiWal = @Twr_KosztUslugiWalNew
WHERE Twr_TwrId = @TrE_TwrId
END
-- Kursor po cenach dla towaru lub usługi z kosztem kwotowym:
-- aktualizacja ceny zakupu (TwC_TwCNumer = 1)
-- aktualizacja marży dla cen sprzedaży z aktualizacją
ustawiną na "Nie" ( TwC_TwCNumer <> 1 AND TwC_Aktualizacja = 0 )
IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 )
BEGIN
DECLARE TwrCeny CURSOR LOCAL FAST_FORWARD FOR
SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta,
TwC_Wartosc, TwC_Typ
FROM cdn.TwrCeny
WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer = 1
UNION ALL
SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta,
TwC_Wartosc, TwC_Typ
FROM cdn.TwrCeny
WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer <> 1
AND TwC_Aktualizacja = 0
OPEN TwrCeny
WHILE 1=1
BEGIN
FETCH NEXT FROM TwrCeny INTO @TwC_TwCNumer,
@TwC_TwCId, @TwC_Waluta, @TwC_Wartosc, @TwC_Typ
IF @@FETCH_STATUS <> 0 BREAK
-- aktualizacja ceny zakupu
IF @TwC_TwCNumer = 1
BEGIN
-- od netto
IF @TrE_TypNB = 1
IF @TwC_Typ = 1
SET @TwC_Wartosc = @CenaW_New * (
@TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL )
ELSE
SET @TwC_Wartosc = ( @CenaW_New + ROUND(
@CenaW_New * @TrE_Stawka / 100, 2 ) ) * ( @TrE_JMPrzelicznikM /
@TrE_JMPrzelicznikL )
-- od brutto
ELSE IF @TrE_TypNB = 2
IF @TwC_Typ = 1
SET @TwC_Wartosc = ( @CenaW_New - ROUND(
@CenaW_New * @TrE_Stawka / ( 100+@TrE_Stawka), 2 ) ) * (
@TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL )
ELSE
SET @TwC_Wartosc = @CenaW_New * (
@TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL )
UPDATE cdn.TwrCeny SET
TwC_Wartosc = @TwC_Wartosc,
TwC_Waluta = @Waluta
WHERE TwC_TwCId = @TwC_TwCId
SET @CenaZakupuNew = @TwC_Wartosc
SET @CenaZakupuNewWal = @CenaZakupuNew
SET @CenaZakupuNewPLN = @CenaZakupuNew *
@KursL/@KursM
END -- @TwC_TWCNumer = 1
-- aktualizacja marż dla cen sprzedaży
-- tylko wtedy, gdy waluta zakupu i sprzedaży są
równe lub gdy waluta sprzedazy jest systemowa
ELSE IF @TwC_TwCNumer <> 1 AND ( @TwC_Waluta =
@Waluta OR @TwC_Waluta = @WalutaSys )
BEGIN
-- cena sprzedaży brutto - obliczamy jej
reprezentację netto
IF @TwC_Typ = 2
SET @TwC_Wartosc = @TwC_Wartosc - ROUND(
@TwC_Wartosc * @Twr_Stawka / ( 100 + @Twr_Stawka), 2 )
-- marża "od stu" i "w stu"
IF @CenaZakupuNew <> 0
BEGIN
-- jeśli waluta zakupu i sprzedaży są
równe, to bierzemy cenę zakupu w walucie dokumentu
-- w przeciwnym przypadku, gdy cena
sprzedaży jest w walucie systemowej, to bierzemy cenę zakupu w walucie
systemowej
IF @TwC_Waluta = @WalutaSys AND @Waluta <>
@WalutaSys
SET @CenaZakupuNew = @CenaZakupuNewPLN
ELSE
SET @CenaZakupuNew = @CenaZakupuNewWal
SET @TwC_Marza = ( ( @TwC_Wartosc /
@CenaZakupuNew ) - 1 ) * 100
IF ( @TwC_Marza = -100 ) OR (
@CenaZakupuNew = @TwC_Wartosc )
SET @TwC_MarzaWStu = 100
ELSE IF @TwC_Wartosc = 0
SET @TwC_MarzaWStu = -100
ELSE
SET @TwC_MarzaWStu = 100 * @TwC_Marza /
( 100 + @TwC_Marza )
IF @TwC_Marza > 99999.99 SET
@TwC_Marza = 99999.99
IF @TwC_MarzaWStu > 99999.99 SET
@TwC_MarzaWStu = 99999.99
IF @TwC_Marza < - 99999.99 SET @TwC_Marza = -99999.99
IF @TwC_MarzaWStu < - 99999.99 SET
@TwC_MarzaWStu = -99999.99
END
IF @TwC_Marza IS NOT NULL AND
@TwC_MarzaWStu IS NOT NULL
UPDATE cdn.TwrCeny SET
TwC_Marza = @TwC_Marza,
TwC_MarzaWStu = @TwC_MarzaWStu
WHERE TwC_TwCId = @TwC_TwCId
END
END -- kursor TwrCeny
CLOSE TwrCeny
DEALLOCATE TwrCeny
END -- Towar lub usługa z kosztem kwotowym
END -- aktualizacji ostatniej ceny zakupu
IF @MyIdentity IS NOT NULL
BEGIN
SET IDENTITY_INSERT cdn.Idn ON
INSERT INTO cdn.Idn (i) VALUES (@MyIdentity)
SET IDENTITY_INSERT cdn.Idn OFF
DELETE FROM cdn.Idn WHERE i = @MyIdentity --WiNi
END
*/
END
CLOSE Dodawane
DEALLOCATE Dodawane
-- KosztUslugi = 0 dla towarów
UPDATE CDN.TraElem SET TrE_KosztUslugi = 0 WHERE TrE_TrEId IN (select
TrE_TrEId FROM inserted join cdn.towary on inserted.tre_twrid =
twr_twrid and twr_typ = 1)
-- sprawdzenie towaru z elementu po modyfikacjach dla dodawanych i
kasowanych
DECLARE EKI CURSOR LOCAL FAST_FORWARD FOR
SELECT TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod, TrE_TwrNazwa
FROM (
SELECT TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod,
TrE_TwrNazwa
FROM deleted where ISNULL(Tre_WyborDostaw,0) = 0
UNION ALL
SELECT TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod,
TrE_TwrNazwa
FROM inserted where ISNULL(Tre_WyborDostaw,0) = 0
) AS TrE_ERR
GROUP BY TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod, TrE_TwrNazwa
OPEN EKI
WHILE 1=1
BEGIN
FETCH NEXT FROM EKI INTO @TrE_TrEId, @TrE_TwrId, @TrE_DataOpe,
@TrE_TwrKod,@TrE_TwrNazwa
IF @@FETCH_STATUS <> 0 BREAK
SET @Komunikat = CDN.TwrZasobyErr ( @TrE_TrEId, @TrE_TwrId,
@TrE_TwrKod,@TrE_TwrNazwa, @TrE_DataOpe )
IF @Komunikat <> '' GOTO KOMUNIKAT
END
CLOSE EKI
DEALLOCATE EKI
-- Wyswietlenie komunikatu i rollback całej transakcji
KOMUNIKAT:
IF @Komunikat <> ''
BEGIN
RAISERROR( '%s', 16, 1, @Komunikat)
ROLLBACK TRAN
SET NOCOUNT OFF
RETURN
END
SET NOCOUNT OFF
>
>> Przykład z życia: pad prądu w środku wpisywania dokumentu. W różnych
>> systemach następuje rozjazd pomiędzy stanami handlowymi a stanami
>> magazynowymi, natomiast w Optimie/XL/Enovie praktycznie nigdy. Znam
>> tylko kilka zgłoszonych przypadków przez blisko 20 lat.
> Zatem mylisz transakcję bazodanową (która została wycofana, po padł
> prąd), ze spójnością danych logicznych zapewnioną przez triggery, po
> stronie bazy danych.
> I tak przez blisko 20 lat :P
>
Być może mylę - nie przeczę.
Bazodanowa - to jak coś w rodzaju TTS w Novellu?
Ale to chyba na innym poziomie, niż logiczna spójność. Muszę doczytać.
Jakiś link?
--
Pozdrawiam.
Adam