set ANSI_NULLS on; go /*************************************** * FUNCTION f_calcDestOdette * * Compongo il primo campo delle odette ( campo_2 ) x il destinatario/molo * * Steamware, S.E.L. * mod: 14/05/2013 * ****************************************/ create FUNCTION f_odetteCalcDest (@INEND VARCHAR(50) , @CCDMOL VARCHAR(50), @CCDPTR VARCHAR(50), @CDINB VARCHAR(50), @CRAGCL VARCHAR(50) , @TELND VARCHAR(50) ) RETURNS NVARCHAR(50) AS BEGIN DECLARE @answ NVARCHAR(50) = '' DECLARE @destP1A NVARCHAR(50) = '' DECLARE @destP2A NVARCHAR(50) = '' DECLARE @destP1 NVARCHAR(50) = '' DECLARE @destP2 NVARCHAR(50) = '' DECLARE @destP3 NVARCHAR(50) = '' -- Se il campo INEND è vuoto devo prendere sempre gli altri campi CCDMOL e CCDPTR SET @destP1A = CASE WHEN (SUBSTRING(@INEND,1,30)) = '' THEN (@CCDMOL) ELSE dbo.f_trim(SUBSTRING(@INEND,16,15)) END SET @destP2A = CASE WHEN (SUBSTRING(@INEND,1,30)) = '' THEN (@CCDPTR) ELSE dbo.f_trim(SUBSTRING(@INEND,1,15)) END SET @destP1 = CASE WHEN (@CDINB) <> '' THEN @destP1A ELSE (@CCDMOL) END SET @destP2 = CASE WHEN (@CDINB) <> '' THEN @destP2A ELSE (@CCDPTR) END -- solo se BMW metto /S SET @destP3 = CASE WHEN @CRAGCL = '13' OR ( @CDINB <> '' AND SUBSTRING(@TELND,19,2) = '13') THEN '/S' ELSE '' END IF @destP1 + @destP2 <> '' SET @answ = @destP1 + '/' + @destP2 + @destP3 ELSE SET @answ = '' RETURN @answ END go /*************************************** * FUNCTION f_odetteCalcNAEL * * Compongo il primo campo delle odette campo 14 ( Change Index ) o codice NAEL + esponente di modifica particolare ) * * Steamware, S.E.L. * mod: 14/05/2013 * ****************************************/ create FUNCTION f_odetteCalcNAEL (@CRAGCL VARCHAR(50) , @TELND VARCHAR(50), @ECDNAE VARCHAR(50),@ECDNA1 VARCHAR(50) ,@EESPMD VARCHAR(50), @OCDODM VARCHAR(50) ) RETURNS NVARCHAR(50) AS BEGIN DECLARE @answ NVARCHAR(50) = '' DECLARE @codNaelP1 NVARCHAR(50) = '' DECLARE @codNaelP2 NVARCHAR(50) = '' DECLARE @codNaelP3 NVARCHAR(50) = '' -- Se il cliente è BMW calcolo campi x NAEL SET @codNaelP1 = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN dbo.f_trim(@ECDNAE) ELSE '' END SET @codNaelP2 = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN dbo.f_trim(@ECDNA1) ELSE '' END SET @codNaelP3 = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN dbo.f_trim(@EESPMD) ELSE '' END SET @answ = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN 'ZI:'+ @codNaelP1 + ' ' + @codNaelP2 + ' AI:'+ @codNaelP3 ELSE @OCDODM -- se non BMW END RETURN @answ END go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /***************************************** * STORED stp_ODETTE_updateVal * * effettua aggiornamento valori etichetta Odette * * Steamware, S.E.L. * mod: 2011.04.28 * ****************************************/ alter PROCEDURE stp_ODETTE_updateVal ( @UDC NVARCHAR(50), @ragSocCli NVARCHAR(50), @indirCli NVARCHAR(50), @capCittCli NVARCHAR(50), @ragSocDest NVARCHAR(50), @indirDest NVARCHAR(50), @capCittDest NVARCHAR(50), @pesoNetto NVARCHAR(50), @pesoLordo NVARCHAR(50), @numColli NVARCHAR(50), @disPart NVARCHAR(50), @descPart NVARCHAR(50), @codPart NVARCHAR(50), @codImb NVARCHAR(50), @codMaz NVARCHAR(50), @codNael NVARCHAR(50), @codAQP NVARCHAR(50) ) AS -- COMMIT TRAN -- update valori (sovrascrivo...) UPDATE Odette SET Campo1_2 = @ragSocCli, Campo1_3 = @indirCli, Campo1_4 = @capCittCli, Campo2_2 = @ragSocDest, Campo2_3 = @indirDest, Campo2_4 = @capCittDest, Campo5_2 = @pesoNetto, Campo6_2 = @pesoLordo, Campo7_2 = @numColli, Campo8_2 = @disPart, Campo8_3 = @disPart, Campo10_2 = @descPart, Campo11_1_2 = @codPart, Campo11_1_3 = @codPart, Campo11_2_2 = @codImb, Campo11_2_3 = @codImb, Campo12_2 = @codMaz, Campo12_3 = @codMaz, Campo14_2 = @codNael, Campo16_5 = ISNULL(@codAQP,'') WHERE CampoUDC = @UDC RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /***************************************** * STORED stp_ODETTE_caricaDatiBollaEtichettaOdette * * carica i dati x odette dai valori delel tab lette da as400 (rimpiazza procedura c#) * * Steamware, S.E.L. * mod: 2011.04.28 * ****************************************/ alter PROCEDURE stp_ODETTE_caricaDatiBollaEtichettaOdette ( @CodCS NVARCHAR(2), @UDC NVARCHAR(50), @numBolla NVARCHAR(6), @dataBolla NVARCHAR(8), @CodMag NVARCHAR(2), @GrpBolla NVARCHAR(1), @Particolare NVARCHAR(15) ) AS SET NOCOUNT ON /* Dichiarazione variabili iniziale */ DECLARE @ragSocCli NVARCHAR(50) = '' DECLARE @indirCli NVARCHAR(50) = '' DECLARE @capCittCli NVARCHAR(50) = '' DECLARE @destinatario NVARCHAR(50) = '' DECLARE @ragSocDest NVARCHAR(50) = '' DECLARE @indirDest NVARCHAR(50) = '' DECLARE @capCittDest NVARCHAR(50) = '' DECLARE @peso NUMERIC(7,3) = 0 DECLARE @pesoNetto NVARCHAR(50) = '' DECLARE @pesoLordo NVARCHAR(50) = '' DECLARE @numColli NVARCHAR(50) = '' DECLARE @disPart NVARCHAR(50) = '' DECLARE @descPart NVARCHAR(50) = '' DECLARE @codPart NVARCHAR(50) = '' DECLARE @codImb NVARCHAR(50) = '' DECLARE @codMaz NVARCHAR(50) = '' DECLARE @codNael NVARCHAR(50) = '' DECLARE @codNaelP1 NVARCHAR(50) = '' DECLARE @codNaelP2 NVARCHAR(50) = '' DECLARE @codNaelP3 NVARCHAR(50) = '' DECLARE @codAQP NVARCHAR(50) = '' -- altre variabili accessorie DECLARE @trovati INT = 0 DECLARE @qtaUdc INT = 1 -- in primis recupero la riga di dati da AS400... SELECT @trovati = COUNT(*) FROM RawData.BORI202J WHERE CDMFS = @CodMag AND GRBOS = @GrpBolla AND NRBOS = @numBolla AND DTBOS = @DataBolla AND CDARS = @Particolare -- carico i dati dell'UDC SELECT @qtaUdc = Qta FROM ElencoCartellini WHERE UDC = @UDC -- proseguo solo se ho trovato la bolla! IF(@trovati > 0) BEGIN SELECT TOP 1 -- campo 1 indirizzo destinazione cliente ( Receiver ) @ragSocCli = CASE WHEN dbo.f_trim(CDINB) <> '' AND @CodCS <> 'TK' THEN dbo.f_trim(RA1ND) ELSE dbo.f_trim(RASCL) END ,@indirCli = CASE WHEN dbo.f_trim(CDINB) <> '' AND @CodCS <> 'TK' THEN dbo.f_trim(RA2ND) ELSE dbo.f_trim(INDCL) END ,@capCittCli = CASE WHEN dbo.f_trim(CDINB) <> '' AND @CodCS <> 'TK' THEN dbo.f_trim(CAPND) + ' ' + dbo.f_trim(CITND) ELSE dbo.f_trim(CAPCL) + ' ' + dbo.f_trim(LOCCL) + ' ' +dbo.f_trim(PROCL) END -- campo 2 punto di rifornimento / molo / uso ( Destination ) -- ATTENZIONE NON POSSO TESTARE QUI LE VARIABILI MA SOLO ASSEGNARLE!!! NEL CASE LE VALUTA SEMPRE VUOTE ,@destinatario = dbo.f_odetteCalcDest( dbo.f_trim(INEND), dbo.f_trim(CCDMOL), dbo.f_trim(CCDPTR), dbo.f_trim(CDINB), dbo.f_trim(CRAGCL), dbo.f_trim(TELND) ) -- Leggo i dati che mi servono dopo nel caso il destinatario sia vuoto ( VEDI DOPO SELECT ) ,@ragSocDest = dbo.f_trim(RA1ND) ,@indirDest = dbo.f_trim(RA2ND) ,@capCittDest = dbo.f_trim(CAPND) + ' ' + dbo.f_trim(CITND) -- campo 5_2 peso netto ( Net Weight ) ,@peso = CASE WHEN ISNULL(EPLAVO,0) <= 0 THEN EPNETT ELSE EPLAVO END ,@pesoNetto = CONVERT(NVARCHAR(50), CONVERT(INT , FLOOR( @peso * @qtaUdc ) ) ) -- campo 6_2 peso lordo (Gross Weight) ,@pesoLordo = CONVERT(NVARCHAR(50), CONVERT(INT, FLOOR( PELDB / NRC1B ) ) ) -- campo 7 numero colli (Nr. Boxes) ,@numColli = CONVERT(NVARCHAR(50), 1) -- imposto n. colli del cartellino odette fisso = 1 -- ,@numColli = CONVERT(NVARCHAR(50), NRC1B) -- campo 8 disegno particolare ( Part Number ) ,@disPart = dbo.f_trim(ECMM01) -- campo 10 Descrizione particolare ( Description ) ,@descPart = dbo.f_trim(DEPAR) -- campo 11_1 Codice particolare (non stampato) ,@codPart = dbo.f_trim(CDARS) -- campo 11_2 Codice imballo per il cliente ( Logistics Reference ) ,@codImb = dbo.f_trim(FCDI01) -- campo 12 Codice Mazzucconi/Tekal/Possidonio per il cliente ( Supplier ) ,@codMaz = CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN CASE WHEN dbo.f_trim(CDINB) <> '' AND dbo.f_trim(PERND) <> '' THEN dbo.f_trim(PERND) WHEN dbo.f_trim(CDINB) = '' AND dbo.f_trim(CCDET1) <> '' THEN dbo.f_trim(CCDET1) ELSE dbo.f_trim(CCFOE1) END ELSE dbo.f_trim(CCFOE1) END -- campo 14 codice NAEL + esponente di modifica particolare ( Change Index ) ,@codNael = dbo.f_odetteCalcNAEL ( dbo.f_trim(CRAGCL),dbo.f_trim(TELND),dbo.f_trim(ECDNAE),dbo.f_trim(ECDNA1), dbo.f_trim(EESPMD),dbo.f_trim(OCDODM) ) --,@codNaelP1 = CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN dbo.f_trim(ECDNAE) ELSE '' END --,@codNaelP2 = CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN dbo.f_trim(ECDNA1) ELSE '' END --,@codNaelP3 = CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN dbo.f_trim(EESPMD) ELSE '' END --,@codNael = CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN 'ZI:'+ @codNaelP1 + ' ' + @codNaelP2 + ' AI:'+ @codNaelP3 ELSE OCDODM END -- campo 16_5 AQP ( controllo qualità ) ,@codAQP = dbo.f_trim(ECLAQP) FROM RawData.BORI202J WHERE CDMFS = @CodMag AND GRBOS = @GrpBolla AND NRBOS = @numBolla AND DTBOS = @DataBolla AND CDARS = @Particolare -- Se nella destinazione non trovo nulla utilizzo i dati in RA1ND RA2ND CAPND CITND ( simile indirizzo cliente ) IF @destinatario = '' SET @destinatario = @ragSocDest ELSE BEGIN -- vuoto i campi necessari solo se destinatario NON è vuoto ( in questo caso compilo solo prima riga ) SET @indirDest = '' SET @capCittDest = '' END -- SELECT @UDC, @ragSocCli, @indirCli, @capCittCli, @destinatario, @indirDest, @capCittDest, @pesoNetto, @pesoLordo, @numColli, @disPart, @descPart, @codPart, @codImb, @codMaz, @codNael, @codAQP EXEC stp_ODETTE_updateVal @UDC, @ragSocCli, @indirCli, @capCittCli, @destinatario, @indirDest, @capCittDest, @pesoNetto, @pesoLordo, @numColli, @disPart, @descPart, @codPart, @codImb, @codMaz, @codNael, @codAQP END RETURN go commit; go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(550, GETDATE()) GO SELECT TOP 5 * FROM LogUpdateDb ORDER BY Versione DESC GO