set xact_abort on go begin transaction go alter table RigheListePrelievo_AS add DataBatch datetime go exec sp_addextendedproperty 'MS_Description', 'dataora di caricamento batch verso AS', 'SCHEMA', 'dbo', 'TABLE', 'RigheListePrelievo_AS', 'COLUMN', 'DataBatch' go set ANSI_NULLS on go /***************************************** * STORED stp_processaCodaMovimPackList * * Processa la coda delle packing list e chiama procedura x salvataggio dato su AS400 * * Steamware, S.E.L. * mod: 2010.10.22 * ****************************************/ alter PROCEDURE BatchQueue.stp_processaCodaMovimPackList AS -- BOZZA DA VERIFICARE E COMPLETARE A CURA MAZZUCCONI!!! -- campi x cursore e valorizzazione riga a riga DECLARE @IdxRiga INT DECLARE @CodLista NVARCHAR(12) DECLARE @CodListaPre NVARCHAR(12) DECLARE @CodStab CHAR(2) DECLARE @UDC NVARCHAR(15) DECLARE @Particolare NVARCHAR(15) DECLARE @CodImb NVARCHAR(15) DECLARE @Matr INT DECLARE @Tipo NVARCHAR(2) DECLARE @Dest NVARCHAR(10) DECLARE @Qta INT DECLARE @PesoNet NUMERIC(7,3) DECLARE @PesoLor NUMERIC(7,3) DECLARE @Stato CHAR(1) DECLARE @Data NVARCHAR(8) DECLARE @ScritturaRigaOK AS INT -- Flag errore su riga ritornato da Stored che va su As400 0 = Ok SET @ScritturaRigaOK = 0; DECLARE @ScritturaASOK AS INT -- Flag errore Packing generale su Stored che va su As400 0 = Ok SET @ScritturaASOK = 0; -- qui è meglio usare una tabella temporanea o ancor meglio una variabile tabella x pochi -- record per non bloccare le tabelle sottostanti -- query con un cursore x processare tutte le righe di Packing che sono ancora da inviare ad AS400 ( DataBatch IS NULL ) DECLARE RigaPackList CURSOR LOCAL FOR SELECT IdxRiga, CodLista FROM v_datiPackingList ORDER BY CodLista -- setto il codice stabilimento da inviare ad AS... VERIFICARE!!! SET @CodStab = '05'; -- imposto prima codListaPre a vuoto... SET @CodListaPre = ''; -- inizio cursore caricando le righe OPEN RigaPackList FETCH NEXT FROM RigaPackList INTO @IdxRiga , @CodLista SET @CodListaPre = @CodLista WHILE @@FETCH_STATUS = 0 BEGIN -- controllo ci sia almento una riga di Packing ( PER ME NON SERVE ) IF (SELECT COUNT(IdxRiga) FROM v_datiPackingList WHERE IdxRiga = @IdxRiga) > 0 BEGIN -- carico valori che mi servono SELECT @Particolare=pl.Particolare, @UDC=UDC, @CodImb=pl.CodImballo, @Matr = pl.matrUdc, @Tipo=pl.tipo, @Dest=pl.Destinatario, @Qta=ABS(pl.Qta), @PesoNet=pl.PesoNetto, @PesoLor=pl.PesoTot, @Stato=pl.Stato, @Data=dbo.dateToAsFormat(pl.data), @CodLista=pl.CodLista FROM v_datiPackingList pl WHERE IdxRiga = @IdxRiga -- Eseguo la stored che registra la Packing List con le righe sue righe EXECUTE @ScritturaRigaOK = BatchQueue.stp_registraPackList @CodStab, @UDC, @Particolare , @CodImb , @Matr , @Tipo , @Dest , @Qta , @PesoNet , @PesoLor , @Stato , @Data -- se scrittura riga è ok allora salvo sulla riga la data di invio... così poi non la rivedo tra quelle da processare... IF @ScritturaRigaOK = 0 UPDATE RigheListePrelievo_AS SET DataBatch = GETDATE() WHERE IdxRiga = @IdxRiga; -- Se scrittura Riga Packing non ok metto Flag Packing list non Ok IF @ScritturaRigaOK <> 0 SET @ScritturaASOK = @ScritturaRigaOK FETCH NEXT FROM RigaPackList INTO @IdxRiga , @CodLista -- controllo: se la lista precedente è diversa dall'attuale la indico come scaricata (precedente) IF(@CodListaPre <> @CodLista) BEGIN -- ATTENZIONE!!! Qui è da controllare perchè lo faccio una sola volta per la -- lista e non per riga prelievo ... boh non so se ok ... se UDC già presente in As400 errore 7343 IF @ScritturaASOK = 0 UPDATE ElencoListePrelievo_AS SET DataBatch = GETDATE() WHERE CodLista = @CodListaPre; ELSE SET @ScritturaASOK = 0; -- resetto il flag di controllo -- cambio il cod pre da confrontare SET @CodListaPre = @CodLista END END END -- Aggiorno anche l'ultima lista prelievo -- **** è corretto ??? se poi ricarico tutto il Packing list che succede??? -- x gli UDC già in AS400 da errore 7343 IF @ScritturaASOK = 0 -- OR @ScritturaASOK = 7343 ??? UPDATE ElencoListePrelievo_AS SET DataBatch = GETDATE() WHERE CodLista = @CodLista -- registro la data del movimento BATCH dell'ultima lista processata -- se c'è un errore mi rimane aperto il cursore? nn dovrebbe perchè LOCAL CLOSE RigaPackList DEALLOCATE RigaPackList RETURN go alter VIEW v_datiPackingList AS SELECT dbo.ElencoListePrelievo_AS.CodLista, dbo.RigheListePrelievo_AS.IdxRiga, dbo.ElencoCartellini.UDC, dbo.ElencoListePrelievo_AS.Particolare, dbo.ElencoCartellini.CodImballo, CAST(RIGHT(LTRIM(dbo.RigheListePrelievo_AS.UDC), 6) AS INT) AS matrUdc, CASE WHEN (dbo.ElencoListePrelievo_AS.CodTipoLista = '03-TerWip') THEN 'FO' ELSE 'CL' END AS tipo, dbo.ElencoListePrelievo_AS.Destinatario, dbo.ElencoCartellini.Qta, ROUND(dbo.ElencoCartellini.PesoTot - dbo.ElencoCartellini.Tara, 3) AS PesoNetto, ROUND(dbo.ElencoCartellini.PesoTot, 3) AS PesoTot, 'P' AS Stato, GETDATE() AS data, dbo.RigheListePrelievo_AS.DataBatch FROM dbo.ElencoListePrelievo_AS INNER JOIN dbo.RigheListePrelievo_AS ON dbo.ElencoListePrelievo_AS.CodLista = dbo.RigheListePrelievo_AS.CodLista INNER JOIN dbo.ElencoCartellini ON dbo.RigheListePrelievo_AS.UDC = dbo.ElencoCartellini.UDC WHERE (dbo.RigheListePrelievo_AS.DataBatch IS NULL) go exec sp_updateextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] Begin DesignProperties = Begin PaneConfigurations = Begin PaneConfiguration = 0 NumPanes = 4 Configuration = "(H (1[40] 4[20] 2[20] 3) )" End Begin PaneConfiguration = 1 NumPanes = 3 Configuration = "(H (1 [50] 4 [25] 3))" End Begin PaneConfiguration = 2 NumPanes = 3 Configuration = "(H (1 [50] 2 [25] 3))" End Begin PaneConfiguration = 3 NumPanes = 3 Configuration = "(H (4 [30] 2 [40] 3))" End Begin PaneConfiguration = 4 NumPanes = 2 Configuration = "(H (1 [56] 3))" End Begin PaneConfiguration = 5 NumPanes = 2 Configuration = "(H (2 [66] 3))" End Begin PaneConfiguration = 6 NumPanes = 2 Configuration = "(H (4 [50] 3))" End Begin PaneConfiguration = 7 NumPanes = 1 Configuration = "(V (3))" End Begin PaneConfiguration = 8 NumPanes = 3 Configuration = "(H (1[56] 4[18] 2) )" End Begin PaneConfiguration = 9 NumPanes = 2 Configuration = "(H (1 [75] 4))" End Begin PaneConfiguration = 10 NumPanes = 2 Configuration = "(H (1[66] 2) )" End Begin PaneConfiguration = 11 NumPanes = 2 Configuration = "(H (4 [60] 2))" End Begin PaneConfiguration = 12 NumPanes = 1 Configuration = "(H (1) )" End Begin PaneConfiguration = 13 NumPanes = 1 Configuration = "(V (4))" End Begin PaneConfiguration = 14 NumPanes = 1 Configuration = "(V (2))" End ActivePaneConfig = 0 End Begin DiagramPane = Begin Origin = Top = 0 Left = 0 End Begin Tables = Begin Table = "ElencoListePrelievo_AS" Begin Extent = Top = 6 Left = 38 Bottom = 367 Right = 238 End DisplayFlags = 280 TopColumn = 0 End Begin Table = "ElencoCartellini" Begin Extent = Top = 14 Left = 658 Bottom = 376 Right = 828 End DisplayFlags = 280 TopColumn = 0 End Begin Table = "RigheListePrelievo_AS" Begin Extent = Top = 5 Left = 353 Bottom = 200 Right = 557 End DisplayFlags = 280 TopColumn = 0 End End End Begin SQLPane = End Begin DataPane = Begin ParameterDefaults = "" End Begin ColumnWidths = 15 Width = 284 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 Width = 1500 End End Begin CriteriaPane = Begin ColumnWidths = 11 Column = 1440 Alias = 900 Table = 1170 Output = 720 Append = 1400 NewValue = 1170 SortType = 1350 SortOrder = 1410 GroupBy = 1350 Filter = 1350 Or = 1350 Or = 1350 Or = 1350 End End End ', 'SCHEMA', 'dbo', 'VIEW', 'v_datiPackingList' go commit go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(291, GETDATE()) GO