From 5846caecdcaab15de89bbf84a123331015b5904b Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Wed, 19 Feb 2014 12:03:26 +0100 Subject: [PATCH] update progetto C2P del DB x vedere correttamente il nuovo datapac... --- C2P_Project/C2P_Project.sqlproj | 1 + C2P_Project/bin/Release/C2P_Project.dacpac | Bin 0 -> 87616 bytes C2P_Project/bin/Release/C2P_Project.dll | Bin 0 -> 3584 bytes .../bin/Release/C2P_Project_Create.sql | 11544 +++++ C2P_Project/obj/Debug/C2P_Project.dll | Bin 3584 -> 3584 bytes .../C2P_Project.sqlproj.FileListAbsolute.txt | 4 + C2P_Project/obj/Debug/Model.xml | 38116 ++++++++++++++++ 7 files changed, 49665 insertions(+) create mode 100644 C2P_Project/bin/Release/C2P_Project.dacpac create mode 100644 C2P_Project/bin/Release/C2P_Project.dll create mode 100644 C2P_Project/bin/Release/C2P_Project_Create.sql create mode 100644 C2P_Project/obj/Debug/Model.xml diff --git a/C2P_Project/C2P_Project.sqlproj b/C2P_Project/C2P_Project.sqlproj index 0d229c5..85aaf9c 100644 --- a/C2P_Project/C2P_Project.sqlproj +++ b/C2P_Project/C2P_Project.sqlproj @@ -196,5 +196,6 @@ + \ No newline at end of file diff --git a/C2P_Project/bin/Release/C2P_Project.dacpac b/C2P_Project/bin/Release/C2P_Project.dacpac new file mode 100644 index 0000000000000000000000000000000000000000..e0e8e1b63c24820186a72989d4c5f0dda0d9de1f GIT binary patch literal 87616 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

_{ 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�%JuE09 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 @separator + SET @str_out = @str_in + @separator ; + ELSE + SET @str_out = @str_in ; + + -- calcolo il numero di elementi della nella stringa + SET @Occurrences = ( (DATALENGTH( REPLACE(@str_out, @separator, @separator+'#')) - DATALENGTH(@str_out)) ) / 2 + + -- se l'elemento richiesto esiste proseguo altrimenti ritorno NULL + IF @Occurrences >= @PosizValue AND @PosizValue <> 0 + BEGIN + + SET @tmpStr = @str_out ; + SET @Counter = 1 ; + + WHILE @Counter <= @PosizValue + BEGIN + SET @Counter = @Counter + 1 ; + SET @str_out = SUBSTRING( @tmpStr, 1, CHARINDEX(@separator,@tmpStr) - 1) ; + -- metto via il resto della stringa + SET @tmpStr = SUBSTRING( @tmpStr, CHARINDEX(@separator,@tmpStr) + DATALENGTH(@separator)/2, 4000) ; + + IF DATALENGTH(@tmpStr) = 0 + BREAK + END + + -- pulisco da caratteri NON voluti + --SET @str_out = REPLACE(@str_out, char(13), '') ; -- carriage return + --SET @str_out = REPLACE(@str_out, char(10), '') ; -- line feed + --SET @str_out = REPLACE(@str_out, char(9), '') ; -- tab + --SET @str_out = LTRIM ( RTRIM (@str_out) ) ; -- blank + END + ELSE + SET @str_out = NULL ; + + RETURN @str_out + +END +GO +PRINT N'Creating [dbo].[f_dtFromRaw]...'; + + +GO +-- ============================================= +-- Author: S.E.Locatelli +-- Create date: 2013.11.28 +-- Description: Conversione datetime da yyyyMMddHHmmssnn +-- ============================================= +CREATE FUNCTION f_dtFromRaw +( + -- Add the parameters for the function here + @origDt nvarchar(50) +) +RETURNS datetime +AS +BEGIN + DECLARE @output datetime + DECLARE @strDt NVARCHAR(50) + + SELECT @strDt = LEFT(@origDt, 4) + '-' + SUBSTRING(@origDt, 5,2 ) + '-' + SUBSTRING(@origDt, 7,2 ) + ' ' + SUBSTRING(@origDt, 9,2 ) + ':' + SUBSTRING(@origDt, 11,2 ) + ':' + SUBSTRING(@origDt, 13,2 ) + '.' + SUBSTRING(@origDt, 15,2 ) +'0' + + SELECT @output = CONVERT(DATETIME, @strDt, 121) + + RETURN @output + +END +GO +PRINT N'Creating [dbo].[f_trim]...'; + + +GO +/*************************************** +* FUNCTION f_trim +* +* trim completo: LTRIM(RTRIM(...)) +* +* Steamware, S.E.L. +* mod: 2013.05.10 +* +****************************************/ +create FUNCTION [dbo].[f_trim] (@string NVARCHAR(MAX)) +RETURNS NVARCHAR(MAX) AS +BEGIN + + -- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character + RETURN LTRIM(RTRIM(@string)) + + +END +GO +PRINT N'Creating [dbo].[f_getCodPackag_OLD]...'; + + +GO + + +-- ============================================= +-- Author: S.E.Locatelli +-- Create date: 2014.01.15 +-- Description: Recupera CodPackage dato CodItem e CodClient secondo albero decisionale +-- SOSTITUITA da fun Table-value f_getDataCodPackag in QL_Update +-- ============================================= +CREATE FUNCTION [dbo].[f_getCodPackag_OLD] +( + @CodItem NVARCHAR(50), + @CodClient NVARCHAR(50) +) +RETURNS NVARCHAR(50) +AS +BEGIN + DECLARE @output NVARCHAR(50) + DECLARE @trovati INT = 0 + -- setup iniziale: imposto a zero... + SET @output = '0' + + SELECT @trovati = COUNT(*) FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + IF(@trovati > 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + + RETURN @output + +END +GO +PRINT N'Creating [dbo].[f_getDataCodPackag]...'; + + +GO + + + +-- ============================================= +-- Author: Steamware +-- Create date: 2014-01-30 +-- Description: Ritorna l'imballo e i dati associati +-- ============================================= +CREATE FUNCTION [dbo].[f_getDataCodPackag] +( + @CodItem NVARCHAR(50), + @CodClient NVARCHAR(50) +) +RETURNS +@Table TABLE +( + [CodItem] [nvarchar](50) NOT NULL, + [CodClient] [nvarchar](50) NOT NULL, + [CodPackag] [nvarchar](50) NOT NULL, + [TotQta] [decimal](18, 3) NOT NULL, + [Weight] [decimal](18, 6) NOT NULL, + [Tare] [decimal](18, 6) NOT NULL, + [NumImb] [decimal](9, 6) NOT NULL, + [Durata] [decimal](18, 6) NOT NULL, + [LivPackag] [nvarchar](50) NOT NULL, + [LivPackagDet] [nvarchar](50) NOT NULL +) +AS +BEGIN + + DECLARE @output NVARCHAR(50) + DECLARE @trovati INT = 0 + -- setup iniziale: imposto a zero... + SET @output = '0' + + + SELECT @trovati = COUNT(*) FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + IF(@trovati > 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Client-Package', @CodItem + '-' + @CodClient + '-' + CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE IF EXISTS ( SELECT * FROM Package2Item WHERE CodItem = @CodItem ) + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Package', @CodItem + '-' + CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 'ND', 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Package', CodPackag + FROM dbo.Package2 WHERE CodPackag = 0 + END + + RETURN +END +GO +PRINT N'Creating [dbo].[v_selItems]...'; + + +GO +CREATE VIEW dbo.v_selItems +AS +SELECT CodItem AS value, ItemDescr + ' [' + CodItem + ']' AS label +FROM dbo.ItemDet +WHERE (CodItem <> '') +GO +PRINT N'Creating [dbo].[v_selClient]...'; + + +GO +CREATE VIEW dbo.v_selClient +AS +SELECT CodClient AS value, ClientName + ' [' + CodClient + ']' AS label +FROM dbo.ClientDet +WHERE (CodClient <> '') +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q]...'; + + +GO +CREATE VIEW dbo.v_QuoteFull_Q +AS +SELECT Vers, QuoteType, CodQuote, QuoteRev, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, + CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice, DiesExpLife, DiesEOLife, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, + PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, + SellCost01, RefCost01, SellCost04, RefCost04, WSR01, MSR01, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, FVC + RawMatFullCost AS P_FVC, + FC4UG01 + OH4UG01 AS CPS, FC4UG01 + OH4UG01 + FVC + RawMatFullCost AS P_CPS, FC4UG04 + FVC + RawMatFullCost AS P_FC4UG04, FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost, + FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost AS P_FullCost, Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS MinPrice, Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) + AS P_MinPrice, PriceOff + RawMatFullCost AS P_PriceOff, FVC + FC4UG01 + OH4UG01 + FC4UG04 - PriceOff AS NetMar, (PriceOff - FVC) / (FC4UG01 + OH4UG01 + FC4UG04) AS FCShield, (PRMWeight - PTare) + * (PriceOff + RawMatFullCost) / PWeight AS PckSur +FROM dbo.QuoteFull_Q +GO +PRINT N'Creating [dbo].[stp_QL_update]...'; + + +GO + + + + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.01.22 +-- Description: aggiorna le tabelle QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + + -- dichiaro valori da recuperare + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + -- ITEM + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @CodifProfilo NVARCHAR(50) = '' -- Cod. Profilo + DECLARE @ClasseMerc NVARCHAR(50) = '' + DECLARE @CodClientAssoc NVARCHAR(50) = '' + + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettositĆ  all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettositĆ  all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + DECLARE @PTotQta DECIMAL(18,3) = 0 -- Qta Kg Tot Imballati + DECLARE @PDurata DECIMAL(18,6) = 0 -- Tempo d'imballaggio + DECLARE @PLiv NVARCHAR(50) = '' -- Livello Search dati Imballo + DECLARE @PLivDett NVARCHAR(50) = '' -- Key Livello Search Dati Imballo + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '' -- codice ZONA + DECLARE @TranspCost DECIMAL(9,6) -- costo di trasporto + DECLARE @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + -- default: validitĆ  ĆØ true! + SET @valid = 1 + + -- ================================================= + -- CREAZIONE TEMP TABLE + -- ================================================= + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + + CREATE TABLE #Quoteparam + ( + Quotetype CHAR( 1 ) NOT NULL, + Codquote BIGINT NOT NULL, + Quoterev INT NOT NULL, + Nump INT IDENTITY( 1,1 ) NOT NULL, + Processnum NVARCHAR( 50 ) NOT NULL, + Descr NVARCHAR( 50 ) NOT NULL, + Parameter NVARCHAR( 100 ) NOT NULL, + --PRIMARY KEY + -- ( NumP ASC, QuoteType ASC, CodQuote ASC, QuoteRev ASC ) WITH (PAD_INDEX = ON, FILLFACTOR = 90 ) + ); + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + + CREATE TABLE #QuoteWorkInt + ( + QuoteType CHAR(1) NOT NULL, + CodQuote BIGINT NOT NULL, + QuoteRev INT NOT NULL, + NumWI INT IDENTITY(1,1) NOT NULL, + ProcessNum NVARCHAR(50) NOT NULL, + CodPlant NVARCHAR(50) NOT NULL, + Class01 NVARCHAR(50) NOT NULL DEFAULT (''), + Class02 NVARCHAR(50) NOT NULL DEFAULT (''), + Class03 NVARCHAR(50) NOT NULL DEFAULT (''), + Class04 NVARCHAR(50) NOT NULL DEFAULT (''), + Class05 NVARCHAR(50) NOT NULL DEFAULT (''), + NetProd DECIMAL(9, 3) NOT NULL DEFAULT ((0)), + WSR DECIMAL(9, 8) NOT NULL DEFAULT ((0)), + MSR DECIMAL(9, 8) NOT NULL DEFAULT ((0)), + DSR DECIMAL(9, 8) NOT NULL DEFAULT ((0)), + FC4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + VC4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + OH4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + SC4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + -- campi calcolati + WYR AS ((1)-WSR), + MYR AS ((1)-MSR), + DYR AS ((1)-DSR), + WCR AS ((1)/((1)-WSR)), + MCR AS ((1)/((1)-MSR)), + DCR AS ((1)/((1)-DSR)), + valid BIT NOT NULL DEFAULT((1)), + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + + CREATE TABLE #QuoteOC + ( + QuoteType CHAR(1) NOT NULL, + CodQuote BIGINT NOT NULL, + QuoteRev INT NOT NULL, + NumEx INT IDENTITY(1,1) NOT NULL, + ProcessNum NVARCHAR(50) NOT NULL, + CodPlant NVARCHAR(50) NOT NULL, + Class01 NVARCHAR(50) NOT NULL DEFAULT (''), + Class02 NVARCHAR(50) NOT NULL DEFAULT (''), + Class03 NVARCHAR(50) NOT NULL DEFAULT (''), + Class04 NVARCHAR(50) NOT NULL DEFAULT (''), + Class05 NVARCHAR(50) NOT NULL DEFAULT (''), + TotQty DECIMAL(18, 6) NOT NULL DEFAULT ((1)), + TotCost DECIMAL(18, 6) NOT NULL DEFAULT ((0)), + Quota DECIMAL(18, 6) NOT NULL DEFAULT ((1)), + C4UG AS ((TotCost*Quota)/TotQty), + valid BIT NOT NULL DEFAULT ((1)) + ) + + -- =================================== + -- INIZIO TRANSAZIONE + -- =================================== + SET XACT_ABORT ON; + BEGIN TRAN + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + + -- elimino quote PARAMETRI! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni ESTERNE! + DELETE FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni INTERNE + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id + INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione ĆØ una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = Weight, @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc ) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet + WHERE ClientDet.CodClient = @CodClientAssoc + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(100) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(100) , @KgTeo ) ) + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR ĆØ NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che ĆØ il + -- primo Update/insert/delete su tabelle non temporanee delete a parte + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se ĆØ 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG( ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo ĆØ OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita ĆØ OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife > 0) + BEGIN + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + END + ELSE + BEGIN + SET @DiesPriceLife = 0 -- metto a zero il DiesPriceLife + SET @valid = 0 -- indico che valore non ĆØ valido ( ND excel ) + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', CONVERT(NVARCHAR(100), @DiesPrice) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', CONVERT(NVARCHAR(100), @DiesExpLife) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', CONVERT(NVARCHAR(100), @DiesEOLife) ) + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perchĆ© la differenza ĆØ minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR ) + -- inserisco costi per VENDITA + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR ) + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchĆØ la maggior parte dei calcoli li ho giĆ  fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', CONVERT(NVARCHAR(100), @PRMWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', CONVERT(NVARCHAR(100), @PWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', CONVERT(NVARCHAR(100), @PTare) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', CONVERT(NVARCHAR(100), @PTareStRatio ) ) + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + COMMIT TRAN; + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END +GO +PRINT N'Creating [dbo].[stp_TD_upsert]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.17 +-- Description: Crea TabDifett (tabella difettositĆ ) +-- ============================================= +CREATE PROCEDURE [dbo].[stp_TD_upsert] +( + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + + BEGIN TRAN + + SET NOCOUNT ON; + + -- svuoto tabella... + TRUNCATE TABLE TabDifett + + -- riempio di nuovo valori! + INSERT INTO TabDifett + SELECT + dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant as KeyAMI + , pl.ProcessNum + , dd.CodItem, pl.RawMat, pl.CodPlant + , SUM(NumOUT) as TotOUT + , SUM(NumIN) as TotIn + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum IN ('02', '04') + AND pl.okDi = 1 + -- and pl.EventType=1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.RawMat, pl.CodPlant, pl.ProcessNum + ORDER BY dd.CodItem, pl.RawMat, pl.ProcessNum--, SUM(NumOUT) DESC + + -- salvo nuova revisione dati di produzione... + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fasi 02/03 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_esplodiVocab]...'; + + +GO +-- ============================================= +-- Author: S.E.Locatelli +-- Create date: 2011-10-24 +-- Description: +-- ============================================= +create PROCEDURE stp_esplodiVocab +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + -- svuoto vocabolario + DELETE FROM ZZZ_VocabExpl + + -- carico termini ITA + INSERT INTO ZZZ_VocabExpl(Lemma,IT) + SELECT Lemma, Traduzione AS IT + FROM Vocabolario + WHERE Lingua = 'IT' + + -- update termini ENG + UPDATE ZZZ_VocabExpl + SET EN=ISNULL(v.Traduzione,ve.EN) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='EN' + + -- update termini BRA + UPDATE ZZZ_VocabExpl + SET BR=ISNULL(v.Traduzione,ve.BR) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='BR' + + -- update termini CHN + UPDATE ZZZ_VocabExpl + SET CN=ISNULL(v.Traduzione,ve.CN) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='CN' + + -- update termini CHN + UPDATE ZZZ_VocabExpl + SET MX=ISNULL(v.Traduzione,ve.MX) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='MX' + + -- update termini CHN + UPDATE ZZZ_VocabExpl + SET PL=ISNULL(v.Traduzione,ve.PL) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='PL' + + +END +GO +PRINT N'Creating [dbo].[stp_VSItem_SearchLike]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.02.18 +-- Description: Ricerca items +-- ============================================= +create PROCEDURE [dbo].stp_VSItem_SearchLike +( + @value NVARCHAR(50) +) + +AS +SET NOCOUNT ON; + +SELECT value + ,label +FROM v_selItems +WHERE (value LIKE '%' + @value + '%') + OR (label LIKE '%' + @value + '%') +GO +PRINT N'Creating [dbo].[stp_QL_fullDataSearch]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QL_fullDataSearch +-- +-- Author: Steamware +-- Create date: 2014.02.11 +-- Description: Recupera tutti i dati dalle tab QuoteList x avere schema con ricerca x cliente, item, materiale +-- ============================================= +create PROCEDURE [dbo].[stp_QL_fullDataSearch] ( + @CodClient NVARCHAR(50) = '' + , @CodItem NVARCHAR(50) = '' + , @RawMat NVARCHAR(50) = '' + ) +AS +SET NOCOUNT ON + +-- calcolo con aggiunta campi sommati... +SELECT * +FROM v_QuoteFull_Q +WHERE CodClient = CASE WHEN ISNULL(@CodClient,'') = '' THEN CodClient ELSE @CodClient END + AND CodItem = CASE WHEN ISNULL(@CodItem,'') = '' THEN CodItem ELSE @CodItem END + AND RawMat = CASE WHEN ISNULL(@RawMat,'') = '' THEN RawMat ELSE @RawMat END + +RETURN +GO +PRINT N'Creating [dbo].[stp_VSCli_SearchLike]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.02.11 +-- Description: Ricerca clienti +-- ============================================= +CREATE PROCEDURE [dbo].stp_VSCli_SearchLike +( + @value NVARCHAR(50) +) + +AS +SET NOCOUNT ON; + +SELECT value + ,label +FROM v_selClient +WHERE (value LIKE '%' + @value + '%') + OR (label LIKE '%' + @value + '%') +GO +PRINT N'Creating [dbo].[stp_QL_update_07_02]...'; + + +GO + + + + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.01.22 +-- Description: aggiorna le tabelle QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update_07_02] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + + -- dichiaro valori da recuperare + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + -- ITEM + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @CodifProfilo NVARCHAR(50) = '' -- Cod. Profilo + DECLARE @ClasseMerc NVARCHAR(50) = '' + DECLARE @CodClientAssoc NVARCHAR(50) = '' + + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettositĆ  all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettositĆ  all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + DECLARE @PTotQta DECIMAL(18,3) = 0 -- Qta Kg Tot Imballati + DECLARE @PDurata DECIMAL(18,6) = 0 -- Tempo d'imballaggio + DECLARE @PLiv NVARCHAR(50) = '' -- Livello Search dati Imballo + DECLARE @PLivDett NVARCHAR(50) = '' -- Key Livello Search Dati Imballo + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '' -- codice ZONA + DECLARE @TranspCost DECIMAL(9,6) -- costo di trasporto + DECLARE @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + -- default: validitĆ  ĆØ true! + SET @valid = 1 + + -- ================================================= + -- CREAZIONE TEMP TABLE + -- ================================================= + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + + CREATE TABLE #QuoteParam + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumP] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [Descr] [nvarchar](50) NOT NULL, + [Parameter] [nvarchar](100) NOT NULL, + --PRIMARY KEY + -- ( [NumP] ASC, [QuoteType] ASC, [CodQuote] ASC, [QuoteRev] ASC ) WITH (PAD_INDEX = ON, FILLFACTOR = 90 ) + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + + CREATE TABLE #QuoteWorkInt + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumWI] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [NetProd] [decimal](9, 3) NOT NULL DEFAULT ((0)), + [WSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [MSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [DSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [FC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [VC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [OH4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [SC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [WYR] AS ((1)-[WSR]), + [MYR] AS ((1)-[MSR]), + [DYR] AS ((1)-[DSR]), + [WCR] AS ((1)/((1)-[WSR])), + [MCR] AS ((1)/((1)-[MSR])), + [DCR] AS ((1)/((1)-[DSR])), + [valid] [bit] NOT NULL DEFAULT((1)), + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + + CREATE TABLE #QuoteOC + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumEx] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [TotQty] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [TotCost] [decimal](18, 6) NOT NULL DEFAULT ((0)), + [Quota] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [C4UG] AS (([TotCost]*[Quota])/[TotQty]), + [valid] [bit] NOT NULL DEFAULT ((1)) + ) + + -- =================================== + -- INIZIO TRANSAZIONE + -- =================================== + SET XACT_ABORT ON; + BEGIN TRAN + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + + -- elimino quote PARAMETRI! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni ESTERNE! + DELETE FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni INTERNE + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id + INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione ĆØ una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = [Weight], @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet WHERE ClientDet.CodClient = @CodClientAssoc + --FROM dbo.ItemDet + --INNER JOIN dbo.ClientDet ON ItemDet.Class03 = ClientDet.CodClient + --WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(50) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(50) , @KgTeo ) ) + + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR ĆØ NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttivitĆ  netta nella fase imballo +-- UPDATE qwi +-- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END +-- FROM #QuoteWorkInt qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA +-- WHERE qwi.ProcessNum = '04' -- solo imballo + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- ADESSO LO FACCIO GIA' NELLA FUNZIONE DI RECUPERO DATI PACKAGE f_getDataCodPackag + ---- Se ProduttivitĆ  netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + --IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + -- BEGIN + -- UPDATE qwi + -- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + -- FROM #QuoteWorkInt qwi + -- INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + -- WHERE qwi.ProcessNum = '04' -- solo imballo + -- END + + -- salvo numero imballatori + --SELECT @NumImb = ISNULL(NumImb,0) + --FROM dbo.TabImbArt + --WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che ĆØ il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se ĆØ 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo ĆØ OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita ĆØ OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che ĆØ sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita ĆØ OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perchĆ© la differenza ĆØ minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchĆØ la maggior parte dei calcoli li ho giĆ  fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END +GO +PRINT N'Creating [dbo].[stp_QL_fullDataAll]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QL_fullDataAll +-- +-- Author: Steamware +-- Create date: 2014.02.07 +-- Description: Recupera tutti i dati di tutte le offerte salvate +-- ============================================= +CREATE PROCEDURE dbo.stp_QL_fullDataAll + +AS +SELECT * +FROM v_QuoteFull_Q +ORDER BY CodQuote DESC + +RETURN +GO +PRINT N'Creating [dbo].[stp_packageCost]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: stp_packageCost +-- SOSTITUITA da query + funzione +-- ============================================= +CREATE PROCEDURE [dbo].[stp_packageCost] +( + @CodItem NVARCHAR(50) = '', + @CodClient NVARCHAR(50) = '', + @CodPackag NVARCHAR(50) = '', + @PDesc NVARCHAR(50) OUTPUT, + @RMWeight DECIMAL(9,4) OUTPUT, + @Weight DECIMAL(9,4) OUTPUT, + @Tare DECIMAL(9,4) OUTPUT, + @PackCost DECIMAL(9,6) OUTPUT, + @TareStRat DECIMAL(9,4) OUTPUT +) +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @trovati INT = 0, + @RMCost DECIMAL(9,3) + + -- calcolo RMCost e RMWeight da tab PackageDet + SELECT @RMCost = RMCost, @RMWeight = RMWeight, @PDesc= PackagDesc + FROM PackagDet + WHERE CodPackag = @CodPackag + + -- Calcolo peso e tara da selezione gerarchica + SELECT @trovati = COUNT(*) + FROM Package2ItemClient WHERE CodItem = @CodItem AND CodClient = @CodClient AND CodPackag = @CodPackag + + IF(@trovati > 0) + -- primo tentativo: cerco il package dato SIA Cliente che Item che Package + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2ItemClient WHERE CodItem = @CodItem AND CodClient = @CodClient AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM e package + BEGIN + SELECT @trovati = COUNT(*) FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + IF(@trovati > 0) + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + BEGIN + SELECT @Weight = [Weight], @Tare = Tare + FROM Package2 WHERE CodPackag = @CodPackag + END + END + + + -- faccio ultimi calcoli! + SELECT @PackCost = @RMCost / @Weight, @TareStRat = (@RMWeight - @Tare) / @Weight + +END +GO +PRINT N'Creating [dbo].[stp_QL_fullDataUpdate]...'; + + +GO + +-- ============================================= +-- STORED PROCEDURE stp_QL_fullDataUpdate +-- +-- Author: Steamware +-- Create date: 2014.01.27 +-- Description: Recupera tutti i dati dalle tab QuoteList x avere schema x report/gestioen web +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_fullDataUpdate] ( + @QuoteType CHAR(1) = 'Q' + , @CodQuote BIGINT = 0 + , @QuoteRev INT = 0 + , @DoUpdate CHAR(1) = 'N' -- se si debba fare ricalcolo Y/N + ) +AS +SET NOCOUNT ON + +/* va rifatta struttura: +* +* tab temporanea +* calcolo parametri +* salvataggio in QuoteList dei 3 valori di sunto +* calcolo dei valori aggregati e restituzione riga risultati finali +* +* ATTENZIONE NON CONTROLLA IL CAMPO VALID DEVE ESSERE SEMPRE 1 PER ESSERE VALIDO +* +*/ + + + + +--DECLARE @FullCost DECIMAL(9,6) +-- , @MinPrice DECIMAL(9,6) +IF (@DoUpdate = 'Y') +BEGIN + EXEC stp_QL_update @QuoteType + , @CodQuote + , @QuoteRev +END + + +-- inserire in tabelle: QuoteFull_Q (quotazioni/preventivi) +-- inserire in tabelle: QuoteFull_R (resoconto di commessa) +-- inserire in tabelle: QuoteFull_S (simulazioni) + +-- elimino eventuale temp table... +IF OBJECT_ID('tempdb..#TempFullData') IS NOT NULL + DROP TABLE #TempFullData; + + +-- Costruisco la "superselect" di tutti i valori necessari... + +-- ================================================= +-- PIVOT TABELLA QuoteParameter +-- ================================================= +;WITH ctePivotQuoteP +AS ( + SELECT * + FROM ( + SELECT QuoteType + , CodQuote + , QuoteRev + , Descr + , Parameter + FROM dbo.QuoteParam + WHERE CodQuote = @CodQuote + AND QuoteType = @QuoteType + AND QuoteRev = @QuoteRev + ) AS SourceTable + + PIVOT(MIN(Parameter) FOR Descr IN ( + ItemDescr + , CodifProfilo + , ClasseMerc + , CodClientAssoc + , ClientNameAssoc + , CodDiesGroup + , TipoDies + , DiamDies + , HoleNumDies + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAM + , KeyAMIL + , NumSMED + , KgTeo + , KgProdotti + , QuotaMan + , DiesPrice + , DiesExpLife + , DiesEOLife + , PkgDesc + , PRMWeight + , PWeight + , PTare + , TareStRatio + , LivPackage + , LivPackageDett + ) + ) AS PivotData +), +-- ================================================= +-- PIVOT TABELLA QuoteOC +-- ================================================= +ctePivotQuoteOC AS ( + SELECT * + FROM ( + SELECT QuoteType + , CodQuote + , QuoteRev + , Class01 + ProcessNum AS ClassProc + , C4UG + FROM dbo.QuoteOC + WHERE CodQuote = @CodQuote + AND QuoteType = @QuoteType + AND QuoteRev = @QuoteRev + ) AS SourceTable + PIVOT(SUM(C4UG) FOR ClassProc IN + ( EE01 + , GAS01 + , MATRICE01 + , VENDITA01 + , ROTTAME01 + , VENDITA04 + , ROTTAME04 + , IMBALLO04 + , TRASPORTI04 + , PROVVIGIONI04 + ) + ) AS PivotData +) +-- ================================================= +-- MAIN Select Tabella con INTO temp table +-- ================================================= +SELECT 'V14.1' AS Vers + , QL.QuoteType + , QL.CodQuote + , QL.QuoteRev + , QL.CodClient + , CD.ClientName + , QL.CodItem + , QL.CodItemGroup + , QL.RawMat + , QL.UnitWeight + , QL.BatchQty + , QL.CodInco + , QL.KeyAM + , QL.Note + , QL.PriceOff + , pQP.CodClientAssoc + , pQP.ClientNameAssoc + , pQP.ItemDescr + , pQP.CodifProfilo + , pQP.ClasseMerc + , pQP.TipoDies + , pQP.CodDiesGroup + , pQP.DiamDies + , pQP.HoleNumDies + , pQP.DiesPrice + , pQP.DiesExpLife + , pQP.DiesEOLife + , pQP.NumDiesInList + , pQP.NumDiesExaust + , pQP.CodPlant + , pQP.KeyAMIL + , pQP.KgTeo + , pQP.NumSMED + , pQP.QuotaMan + , pQP.PRMWeight + , pQP.PWeight + , pQP.PTare + , pQP.LivPackage + , pQP.LivPackageDett + , QRM.RawMatCost + , QRM.RawMatExtraCost + , QRM.RawMatCost + QRM.RawMatExtraCost AS RawMatFullCost -- fare campo calcolato ?!? + , QRM.CodPackag + , pQP.PkgDesc + , QRM.FSR + , ISNULL(pQOC.PROVVIGIONI04, 0) AS ProvvCost + , ISNULL(pQOC.EE01, 0) AS EECost + , ISNULL(pQOC.GAS01, 0) AS GasCost + , ISNULL(pQOC.MATRICE01, 0) AS DiesCost + , ISNULL(pQOC.IMBALLO04, 0) AS PackCost + , ISNULL(pQOC.TRASPORTI04, 0) AS TranspCost + , ISNULL(pQOC.VENDITA01, 0) AS SellCost01 + , ISNULL(pQOC.ROTTAME01, 0) AS RefCost01 + , ISNULL(pQOC.VENDITA04, 0) AS SellCost04 + , ISNULL(pQOC.ROTTAME04, 0) AS RefCost04 + , QWI01.WSR AS WSR01 + , QWI01.MSR AS MSR01 + , QWI01.NetProd AS NetProd01 + , QWI01.FC4UG AS FC4UG01 + , QWI01.VC4UG AS VC4UG01 + , QWI01.OH4UG AS OH4UG01 + , QWI01.SC4UG AS SC4UG01 + , 1 - (QWI01.DYR * QWI02.DYR * QWI03.DYR * QWI04.DYR) AS DSR + , QWI04.NetProd AS NetProd04 + , QWI04.FC4UG AS FC4UG04 + , QWI04.VC4UG AS VC4UG04 + , ISNULL(pQOC.VENDITA01, 0) + ISNULL(pQOC.ROTTAME01, 0) + ISNULL(pQOC.VENDITA04, 0) + ISNULL(pQOC.ROTTAME04, 0) + ISNULL(pQOC.EE01, 0) + ISNULL(pQOC.GAS01, 0) + ISNULL(pQOC.MATRICE01, 0) + ISNULL(pQOC.IMBALLO04, 0) + ISNULL(pQOC.PROVVIGIONI04, 0) + ISNULL(pQOC.TRASPORTI04, 0) + QWI01.VC4UG + QWI04.VC4UG + QWI01.SC4UG AS FVC + , PD.Charge + +INTO #TempFullData -- carico in temp table +FROM dbo.QuoteList AS QL + +INNER JOIN dbo.ClientDet CD + ON QL.CodClient = CD.CodClient + +INNER JOIN ctePivotQuoteP AS pQP + ON QL.QuoteType = pQP.QuoteType + AND QL.CodQuote = pQP.CodQuote + AND QL.QuoteRev = pQP.QuoteRev + +INNER JOIN dbo.QuoteRM AS QRM + ON QL.QuoteType = QRM.QuoteType + AND QL.CodQuote = QRM.CodQuote + AND QL.QuoteRev = QRM.QuoteRev + AND QL.rawmat = QRM.RawMat + +INNER JOIN ctePivotQuoteOC AS pQOC + ON QL.QuoteType = pQOC.QuoteType + AND QL.CodQuote = pQOC.CodQuote + AND QL.QuoteRev = pQOC.QuoteRev + +INNER JOIN dbo.QuoteWorkInt AS QWI01 + ON QL.QuoteType = QWI01.QuoteType + AND QL.CodQuote = QWI01.CodQuote + AND QL.QuoteRev = QWI01.QuoteRev + AND QWI01.ProcessNum = '01' +INNER JOIN dbo.QuoteWorkInt AS QWI02 + ON QL.QuoteType = QWI02.QuoteType + AND QL.CodQuote = QWI02.CodQuote + AND QL.QuoteRev = QWI02.QuoteRev + AND QWI02.ProcessNum = '02' +INNER JOIN dbo.QuoteWorkInt AS QWI03 + ON QL.QuoteType = QWI03.QuoteType + AND QL.CodQuote = QWI03.CodQuote + AND QL.QuoteRev = QWI03.QuoteRev + AND QWI03.ProcessNum = '03' +INNER JOIN dbo.QuoteWorkInt AS QWI04 + ON QL.QuoteType = QWI04.QuoteType + AND QL.CodQuote = QWI04.CodQuote + AND QL.QuoteRev = QWI04.QuoteRev + AND QWI04.ProcessNum = '04' +INNER JOIN dbo.PlantsDet AS PD + ON PD.CodPlant = pQP.CodPlant + +---- salvo i dati dell'ordine: FullCost, MinPrice, PriceOff (se zero lo pongo uguale a MinPrice) +--UPDATE QuoteList +--SET FullCost = @FullCost +-- , MinPrice = @MinPrice +-- , PriceOff = CASE WHEN ISNULL(PriceOff,0) = 0 THEN @MinPrice ELSE PriceOff END +--WHERE QuoteType = @QuoteType +-- AND CodQuote = @CodQuote +-- AND QuoteRev = @QuoteRev + +IF @QuoteType = 'Q' + BEGIN + IF OBJECT_ID('QuoteFull_Q') IS NULL -- DROP TABLE QuoteFull_Q + SELECT * INTO dbo.QuoteFull_Q FROM #TempFullData + ELSE + BEGIN + --DELETE dbo.QuoteFull_Q WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + DELETE dbo.QuoteFull_Q WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + INSERT dbo.QuoteFull_Q + SELECT * FROM #TempFullData + END + END + +ELSE IF @QuoteType = 'R' + BEGIN + IF OBJECT_ID('QuoteFull_R') IS NULL -- DROP TABLE QuoteFull_R + SELECT * INTO dbo.QuoteFull_R FROM #TempFullData + ELSE + BEGIN + INSERT dbo.QuoteFull_R + SELECT * FROM #TempFullData + END + END + +ELSE IF @QuoteType = 'S' + BEGIN + IF OBJECT_ID('QuoteFull_S') IS NULL -- DROP TABLE QuoteFull_S + SELECT * INTO dbo.QuoteFull_S FROM #TempFullData + ELSE + BEGIN + INSERT dbo.QuoteFull_S + SELECT * FROM #TempFullData + END + END + +-- elimino temp table... +IF OBJECT_ID('tempdb..#TempFullData') IS NOT NULL + DROP TABLE #TempFullData + +RETURN +GO +PRINT N'Creating [dbo].[stp_QL_update_SAM]...'; + + +GO + + + + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.13 +-- Description: aggiorna tabella QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update_SAM] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + SET XACT_ABORT ON; + + BEGIN TRAN + + -- dichiaro valori da recuperare + DECLARE @cont INT = 0 -- contatore x numeri consecutivi... + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettositĆ  all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettositĆ  all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '', -- codice ZONA + @TranspCost DECIMAL(9,6), -- costo di trasporto + @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + + -- default: validitĆ  ĆØ true! + SET @valid = 1 + + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + -- elimino parametri! + DELETE + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni interne! + DELETE + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino preventivamente OtherCosts giĆ  inseriti! + DELETE + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni esterne! + DELETE + FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- recupero da dati dell'offerta il valore del package scelto + SELECT @CodPackag = CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + + -- inserisco note sull'articolo + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ItemDescr', @ItemDescr) + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClienteAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodDiesGroup', @CodDiesGroup) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'TipoDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'DiamDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'HoleNumDies', @strTemp) + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + + -- inserisco lavorazione estrusione! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'CodPlant', @CodPlant + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAM', @KeyAM + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAMIL', @KeyAMIL + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'NumCambi', @NumSMED + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KgTeo', @KgTeo + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'HoleNum', @HoleNum + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'KgProdotti', SUM(KgTeo) + FROM QuoteList ql + INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR ĆØ NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM dbo.QuoteWorkInt qwi + INNER JOIN RawMatDet rmd ON qwi.Class03 = rmd.RawMat + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- inserisco lavorazione incestatura! + INSERT INTO QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco lavorazione imballo! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo produttivitĆ  netta nella fase imballo + UPDATE qwi + SET NetProd = ti.TotOut/ ti.Durata + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabImbArt ti ON qwi.Class04 = ti.KeyA + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'NumImballatori', @NumImb + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase di imballo! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + + + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO dbo.QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ROW_NUMBER() OVER(ORDER BY CodUtil ASC) AS Row, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se ĆØ 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo ĆØ OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita ĆØ OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = 1 -- metto 1 kg che ĆØ sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita ĆØ OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x matrice + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesPrice', @DiesPrice + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesExpLife', @DiesExpLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesEOLife', @DiesEOLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @VCF01 = @OCF01 + VC4UG + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perchĆ© la differenza ĆØ minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco parametri calcolati x imballaggio + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PkgDesc', @PkgDesc + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'RMWeight', @PRMWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PWeight', @PWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PTare', @PTare + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'TareStRatio', @PTareStRatio + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_TPS_upsert]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.13 +-- Description: Crea TabProdSc (tabella produttivitĆ /scarti) +-- ============================================= +CREATE PROCEDURE [dbo].[stp_TPS_upsert] +( + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + + BEGIN TRAN + + SET NOCOUNT ON; + + -- svuoto tabella... + TRUNCATE TABLE TabProdSc + + -- riempio di nuovo valori! + INSERT INTO TabProdSc + SELECT + dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + , dd.CodDiesGroup + , dd.CodItem + '-' + pl.RawMat as KeyAM + , dd.CodItem, pl.RawMat, pl.CodPlant, dd.HoleNum + , 0 as NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) as KgTeorici + , SUM(QtyIN) as KgLordi + , SUM(Duration) AS Durata + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + AND pl.okPr = 1 AND pl.okSc = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- calcolo cambi SMED + + -- con cte + ; WITH cteCambiPre + AS + ( + SELECT + ROW_NUMBER() OVER(ORDER BY CodPlant, EventStart ASC) AS Row, + CodPlant, RawMat, EventStart, ProcessNum, CodDies, CodClient, OrderNum, BatchNum + FROM ProductionLog pl + WHERE pl.ProcessNum='01' and pl.EventType=1 + AND pl.okPr = 1 AND pl.okSc = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + ) + , cteCambi + AS + ( + SELECT dd.CodItem + '-' + a.RawMat + '-' + a.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + , dd.CodDiesGroup + , a.* + --, b.Row + --, ISNULL(b.Row, 0) AS Cambio -- se 0 c'ĆØ cambio + --, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 + , CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 + FROM cteCambiPre AS a + LEFT JOIN cteCambiPre AS b + ON a.Row-1 = b.Row + AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies + INNER JOIN DiesDet dd ON a.CodDies=dd.CodDies + WHERE b.Row IS NULL -- se voglio vedere solo i cambi + --ORDER BY a.CodPlant, a.EventStart + ) + UPDATE tps + SET NumSMED = cc.NumSMED + FROM TabProdSc tps + INNER JOIN ( + SELECT KeyAMIL, CodDiesGroup, SUM(Cambio2) as NumSMED + FROM cteCambi + GROUP BY KeyAMIL, CodDiesGroup + --ORDER BY KeyAMIL, CodDiesGroup + ) AS cc + ON tps.KeyAMIL= cc.KeyAMIL AND tps.CodDiesGroup = cc.CodDiesGroup + + + +-- -- altro metodo, forse + veloce... +-- DROP TABLE test + +-- CREATE TABLE [dbo].[test]( +-- [Row] [bigint] IDENTITY(1,1) NOT NULL, +-- [CodPlant] [nvarchar](50) NOT NULL, +-- [EventStart] [datetime] NOT NULL, +-- [ProcessNum] [nvarchar](50) NOT NULL, +-- [CodDies] [nvarchar](50) NOT NULL, +-- [CodClient] [nvarchar](50) NOT NULL, +-- [OrderNum] [nvarchar](50) NOT NULL, +-- [BatchNum] [nvarchar](50) NOT NULL, +-- CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED +-- ( +-- [Row] ASC +-- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +-- ) ON [PRIMARY] + + +-- INSERT INTO TEST +-- SELECT CodPlant, EventStart, ProcessNum, CodDies, CodClient, OrderNum, BatchNum +-- FROM ProductionLog pl +-- WHERE pl.ProcessNum='01' and pl.EventType=1 +-- ORDER BY CodPlant, EventStart + +---- SELECT * FROM Test + +-- SELECT a.* +-- , b.Row +-- , ISNULL(b.Row, 0) AS Cambio -- se 0 c'ĆØ cambio +-- , CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 +-- FROM test AS a +-- LEFT JOIN test AS b +-- ON a.Row - 1 = b.Row -- aggancio record precedente +-- AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies +-- WHERE b.Row IS NULL -- solo i cambi +-- ORDER BY a.CodPlant, a.EventStart + + + + -- salvo nuova revisione dati di produzione... + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione fase 01 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_TI_upsert]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.20 +-- Description: Crea TabImb (tabella imballi) +-- NON SERVE PIU' le due tabelle sono state inglobate in Package2/Item/Client +-- ============================================= +CREATE PROCEDURE [dbo].[stp_TI_upsert] +( + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + + BEGIN TRAN + + SET NOCOUNT ON; + + -- svuoto tabella... + TRUNCATE TABLE TabImbArt + TRUNCATE TABLE TabImbGrp + + -- riempio di nuovo valori x articolo! + INSERT INTO TabImbArt + SELECT + dd.CodItem as KeyA + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(QtyOUT) AS TotOut + , SUM(Duration) AS Durata + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem + ORDER BY dd.CodItem + + + -- riempio di nuovo valori x gruppo imballo! + INSERT INTO TabImbGrp + SELECT + pl.CodPackag + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(QtyOUT) AS TotOut + , SUM(Duration) AS Durata + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY pl.CodPackag + ORDER BY pl.CodPackag + + -- salvo nuova revisione dati di produzione... + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END +GO +PRINT N'Creating [voc].[stp_insNewLemma]...'; + + +GO +/************************************* +* STORED PROCEDURE stp_insNewLemma +* +* elimina record anagrafica classe prodotto +* +* mod : 14/05/2012 +* aut : S.E. Locatelli +**************************************/ +CREATE PROCEDURE [voc].[stp_insNewLemma] +( + @lemma NVARCHAR(50), + @traduzione NVARCHAR(500) +) +AS + +-- elimino se c'era giĆ ... +DELETE +FROM Vocabolario +WHERE lemma = @lemma + +-- inserisco x tutte le lingue attive... +INSERT INTO Vocabolario +SELECT lingua, @lemma, @traduzione +FROM Lingue + +SELECT * +FROM Vocabolario +WHERE lemma = @lemma + +RETURN +GO +PRINT N'Creating [ext].[stp_mergePackage2ItemClient]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in Package2ItemClient da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2ItemClient] +( + @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLog' -- carico da tracciato produzione + BEGIN + MERGE INTO Package2ItemClient AS Target + USING ( + --SELECT dd.CodItem, plr.CodClient, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + --FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + --GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + SELECT + dd.CodItem + , pl.CodClient + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttivitĆ  imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM dbo.ProductionLog pl + INNER JOIN dbo.DiesDet dd ON pl.CodDies=dd.CodDies + + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodClient, pl.CodPackag + + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodClient, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2PackageClient AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2Item]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2Item] +( + @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLog' -- carico da tracciato produzione + BEGIN + MERGE INTO Package2Item AS Target + USING ( + --SELECT dd.CodItem, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + --FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + --GROUP BY dd.CodItem, plr.CodPackag + SELECT + dd.CodItem + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttivitĆ  imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodPackag + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeItemDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in ItemDet da dati ProductionLogRaw/ItemsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeItemDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + --MERGE INTO ItemDet AS Target + --USING (SELECT DISTINCT CodItem FROM ext.ProductionLogRaw) + -- AS Source + --ON Target.CodItem = Source.CodItem + ----WHEN MATCHED THEN + ---- UPDATE SET ClientName = Source.ClientName + --WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, '#### - ' + CodItem, '', 0, '') + --OUTPUT $action INTO @SummaryOfChanges; + select 1 + END + ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + BEGIN + MERGE INTO ItemDet AS Target + USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup, Class01, Class02, Class03, Class04, Class05 FROM ext.ItemsRaw) + AS Source + ON Target.CodItem = Source.CodItem + WHEN MATCHED THEN + UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup, Class01 = Source.Class01, Class02 = Source.Class02, Class03 = Source.Class03, Class04 = Source.Class04, Class05 = Source.Class05 + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup, Class01, Class02, Class03, Class04, Class05) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup, Class01, Class02, Class03, Class04, Class05) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeClientDet]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in ClientDet da dati ProductionLogRaw/ClientsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeClientDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ClientsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO ClientDet AS Target + USING (SELECT DISTINCT CodClient FROM ext.ProductionLogRaw) + AS Source + ON Target.CodClient = Source.CodClient + --WHEN MATCHED THEN + -- UPDATE SET ClientName = Source.ClientName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) VALUES (CodClient, '#### - ' + CodClient, '', '', '', '', '', '') + OUTPUT $action INTO @SummaryOfChanges; + + END + ELSE IF @source = 'ClientsRaw' -- carico da anagrafica + BEGIN + MERGE INTO ClientDet AS Target + USING (SELECT DISTINCT CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone FROM ext.ClientsRaw) + AS Source + ON Target.CodClient = Source.CodClient + WHEN MATCHED THEN + UPDATE SET ClientName = Source.ClientName, CodAg = Source.CodAg, ZipCode = Source.ZipCode, City = Source.City, [State] = Source.[State], Nation = Source.Nation, TranspZone = Source.TranspZone + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) VALUES (CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeDiesDet]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in DiesDet da dati ProductionLogRaw/DiesRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeDiesDet] + +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + SET XACT_ABORT ON + + BEGIN tran + + -- ======================================= + -- ora aggiungiamo eventuali item mancanti + -- ======================================= + MERGE INTO ItemDet AS Target + USING (SELECT DISTINCT CodItem FROM ext.DiesRaw) + AS Source + ON Target.CodItem = Source.CodItem + --WHEN MATCHED THEN + -- UPDATE SET ClientName = Source.ClientName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, '#### - ' + CodItem, '', 0, '') + OUTPUT $action INTO @SummaryOfChanges; + + -- ======================================= + -- ora carico i dati delle singole matrici + -- ======================================= + MERGE INTO DiesDet AS Target + USING (SELECT CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active FROM ext.DiesRaw) + AS Source + ON Target.CodDies = Source.CodDies + WHEN MATCHED THEN + UPDATE SET HoleNum = Source.HoleNum, CodItem = Source.CodItem, CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, ExpLife = Source.ExpLife, ActLife = Source.ActLife, Active = Source.Active + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active) VALUES (CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active) + OUTPUT $action INTO @SummaryOfChanges; + + -- ================================================= + -- Carico i dati dei GRUPPI DI MATRICI ( DiesGroupDet ) + -- nel caso debbano essere integrati vanno caricati nella tabella ext.DiesGroupRaw + -- ================================================= + MERGE INTO dbo.DiesGroupDet AS Target + USING ( + SELECT CodDiesGroup + , ISNULL ( AVG( Price ),0) AS Price -- prezzo medio ( valori nulli non considerati ) + , COUNT (*) AS QtyTot -- N. Matrici nel gruppo + , COUNT ( CASE Active WHEN 0 THEN 1 END ) AS QtyEOL -- Qta Matrici rottamate + , ISNULL( AVG( ExpLife ), 0 ) AS ExpLife -- Vita stimata matrice ( iniziale ) + , ISNULL( AVG ( CASE WHEN Active = 0 AND ActLife > 5000 THEN ActLife END ),0 ) AS EOLLife -- solo Matrici rottamate e vita > 5000KG + FROM dbo.DiesDet + GROUP BY CodDiesGroup + ) AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, QtyTot = Source.QtyTot + , QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + , DateMod = GETDATE(), UserMod = 'IMPORT_DiesRaw' + + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod ,UserMod ) + VALUES ( CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'IMPORT_DiesRaw' ) -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + + ---- a questo punto calcolo il VERO update dalle inforamzioni di dbo.DiesDet --> dbo.DiesGroupDet + --MERGE INTO dbo.DiesGroupDet AS Target + --USING ( + -- SELECT coddiesgroup, + -- Avg(Isnull(price, 0)) AS Price, + -- Count(*) AS QtyTot, + -- Count(*) - Sum(Active) AS QtyEOL, + -- Avg(Isnull(ExpLife, 0.1)) AS ExpLife, -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + -- Sum(Isnull(ActLife * (1 - Active), 0)) / (Count(*) - Sum(Active)) AS EOLLife + -- FROM dbo.DiesDet + -- WHERE ActLife > 5000 + -- GROUP BY CodDiesGroup + -- HAVING Count(*) > Sum(Active) -- ci siano rottamate + -- ) + -- AS Source + --ON Target.CodDiesGroup = Source.CodDiesGroup + --WHEN MATCHED THEN + -- UPDATE SET Price = Source.Price, QtyTot = Source.QtyTot, QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + --OUTPUT $action INTO @SummaryOfChanges; + + COMMIT tran + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeTranspCostDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.16 +-- Description: Procedura per import dati in ClientDet da dati ProductionLogRaw/ClientsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeTranspCostDet] +( + @source NVARCHAR(20) = 'TranspCostRaw' -- nome della tabella sorgente tra ProductionLogRaw e ClientsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'TranspCostRaw' -- carico da anagrafica + BEGIN + MERGE INTO TranspCostDet AS Target + USING (SELECT DISTINCT TranspZone, TranspCost FROM ext.TranspCostRaw) + AS Source + ON Target.TranspZone = Source.TranspZone + WHEN MATCHED THEN + UPDATE SET TranspCost = Source.TranspCost + WHEN NOT MATCHED BY TARGET THEN + INSERT (TranspZone, TranspCost) VALUES (TranspZone, TranspCost) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2]...'; + + +GO + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2] +( + @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLog' -- carico da tracciato produzione + BEGIN + MERGE INTO Package2 AS Target + USING ( + --SELECT plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + --FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + --GROUP BY plr.CodPackag + SELECT + pl.CodPackag + , SUM(QtyOUT) AS TotQta +-- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + + -- dati produttivitĆ  imballo + , ROUND(SUM(QtyOUT * QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + -- , SUM(QtyOUT) AS TotOut -- unificata a TotQta + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' -- cmq filtro righe con package VUOTO + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY pl.CodPackag + ) + AS Source + ON Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_filterProductionLogRow]...'; + + +GO + + +-- ============================================= +-- Author: +-- Create date: 2013.11.29 +-- Description: Procedura per pulizia dati della tabella ext.ProductionLogRaw +-- +-- Use: +-- EXECUTE ext.stp_filterProductionLogRow 0 -- selezione record +-- EXECUTE ext.stp_filterProductionLogRow 1 -- cancellazione record +-- +-- SELECT * FROM tmp.ExcludeCondFilter -- Tabella con i filtri +-- SELECT * FROM ext.ProductionLogRaw_KO -- Tabella dove eseguo delete +-- +-- ============================================= +CREATE PROCEDURE [ext].[stp_filterProductionLogRow] +( + @flgDelete AS TINYINT = 0 -- 0 = solo select 1 = fa delete +) +AS +BEGIN + +-- DECLARE @flgDelete AS TINYINT = 1; -- 0 + + DECLARE @Sql AS NVARCHAR(MAX) = ''; + DECLARE @TotRighe AS INT = 0; + DECLARE @Riga AS INT = 1; + DECLARE @WhereCond AS NVARCHAR(4000); + + IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL + DROP TABLE #tmpTable + + -- creo sql di base x select o delete + IF @flgDelete = 0 -- voglio fare solo select + SET @Sql = 'SELECT * FROM ext.ProductionLogRaw WHERE 1=0' -- per test + ELSE + SET @Sql = 'DELETE FROM ext.ProductionLogRaw + WITH (TABLOCK) + OUTPUT deleted.* INTO ext.ProductionLogRaw_KO -- salvo i record cancellati in tabella KO + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat, CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags ) + WHERE 1=0' + + -- carico in tabella i filtri ( record da cancellare ) + SELECT ROW_NUMBER() OVER ( ORDER BY TableName, FieldName) AS Riga, * + INTO #tmpTable + FROM tmp.ExcludeCondFilter + WHERE TableName = 'ProductionLogRaw' + + SET @TotRighe = @@ROWCOUNT; + + -- accodo le condizioni di where allo statement iniziale ( collegate con OR ) + IF @TotRighe > 0 + BEGIN + WHILE @Riga <= @TotRighe + BEGIN + SELECT @WhereCond = WhereCond FROM #tmpTable WHERE Riga = @Riga + + SET @Sql = @Sql + ' OR ' + @WhereCond; + SET @Riga = @Riga + 1; + END + END + + -- Ritorno la select eseguita + SELECT @Sql + -- ======================================================= + -- Eseguo la select/delete e ritorno i record elaborati + -- ======================================================= + EXEC sp_executesql @Sql + SELECT @@ROWCOUNT + +-- SELECT * FROM ext.ProductionLogRaw_KO + + IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL + DROP TABLE #tmpTable +END +GO +PRINT N'Creating [ext].[stp_mergePackagDet]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in PackagDet da dati ProductionLogRaw/PackagRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackagDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e PackagRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO PackagDet AS Target + USING (SELECT DISTINCT CodPackag FROM ext.ProductionLogRaw) + AS Source + ON Target.CodPackag = Source.CodPackag + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, PackagDesc, RMCost, RMWeight) VALUES (CodPackag, '#### - ' + CodPackag, 0, 0) + OUTPUT $action INTO @SummaryOfChanges; + + END + ELSE IF @source = 'PackagRaw' -- carico da anagrafica + BEGIN + MERGE INTO PackagDet AS Target + USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight FROM ext.PackagRaw) + AS Source + ON Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, PackagDesc, RMCost, RMWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeDiesGroupDet]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.08 +-- Description: Procedura per import dati in DiesDet da dati DiesGroupRaw +-- Il caricamento principale avviene tramite DiesRaw, questa +-- serve solo per completare i dati mancanti +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeDiesGroupDet] + +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + SET XACT_ABORT ON + + BEGIN TRAN + + -- vado ad aggiornare i dati dei gruppi di matrici SOLO x i campi <> 0 ( li ritengo come non passati ) + MERGE INTO dbo.DiesGroupDet AS Target + USING ( SELECT * FROM ext.DiesGroupRaw ) + AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET Price = CASE Source.Price WHEN 0 THEN Target.Price ELSE Source.Price END + , QtyTot = CASE Source.QtyTot WHEN 0 THEN Target.QtyTot ELSE Source.QtyTot END + , QtyEOL = CASE Source.QtyEOL WHEN 0 THEN Target.QtyEOL ELSE Source.QtyEOL END + , ExpLife = CASE Source.ExpLife WHEN 0 THEN Target.ExpLife ELSE Source.ExpLife END + , EOLLife = CASE Source.EOLLife WHEN 0 THEN Target.EOLLife ELSE Source.EOLLife END + , DateMod = GETDATE() + , UserMod = 'UPDATE_DiesGroupRaw' + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod, UserMod ) + VALUES ( Source.CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'INSERT_DiesGroupRaw' ) +-- VALUES ( CodDiesGroup, 0, 1, 0, 0.1, 0.1 ) -- mi da errori in calcoli successivi altrimenti con 0 a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + COMMIT TRAN + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeCost2Plant]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.03 +-- Description: Procedura per import dati in Cost2Plant da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeCost2Plant] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO Cost2Plant AS Target + USING (SELECT DISTINCT CodPlant, ProcessNum FROM ext.ProductionLogRaw) + AS Source + ON Target.CodPlant = Source.CodPlant + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPlant, ProcessNum) VALUES (CodPlant, ProcessNum) + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'PackagRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO PackagDet AS Target + -- USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight FROM ext.PackagRaw) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight, Tare = Source.Tare, FullWeight = Source.FullWeight + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePlantsDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.03 +-- Description: Procedura per import dati in PlantsDet da dati ProductionLogRaw +-- ============================================= +create PROCEDURE [ext].[stp_mergePlantsDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e PackagRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO PlantsDet AS Target + USING (SELECT DISTINCT CodPlant FROM ext.ProductionLogRaw) + AS Source + ON Target.CodPlant = Source.CodPlant + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPlant, Descript) VALUES (CodPlant, '#### - ' + CodPlant) + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'PackagRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO PackagDet AS Target + -- USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight FROM ext.PackagRaw) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight, Tare = Source.Tare, FullWeight = Source.FullWeight + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeAgentsDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.03 +-- Description: Procedura per import dati in AgentsDet da dati ClientsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeAgentsDet] +( + @source NVARCHAR(20) = 'ClientsRaw' -- nome della tabella sorgente tra ProductionLogRaw e AgentssRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ClientsRaw' -- carico da anagrafica + BEGIN + MERGE INTO AgentsDet AS Target + USING (SELECT DISTINCT CodAg FROM ext.ClientsRaw) + AS Source + ON Target.CodAg = Source.CodAg + --WHEN MATCHED THEN + -- UPDATE SET AgentsName = Source.AgentsName, CodAg = Source.CodAg, ZipCode = Source.ZipCode, City = Source.City, [State] = Source.[State], Nation = Source.Nation + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodAg, Firstname, Lastname, QuotaProvvAg) VALUES (CodAg, '#### - '+ CodAg, '#### - ' + CodAg, 0) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_updateProductionLog]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in ProductionLog da dati ProductionLogRaw +-- +-- ATTENZIONE: dato l'intervallo temporale in ext.ProductionLogRaw eventuali dati precedenti in dbo.ProductionLog saranno eliminati +-- ============================================= +CREATE PROCEDURE [ext].[stp_updateProductionLog] + +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @deleted INT = 0 + ,@inserted INT = 0 + ,@fromDate DATETIME = GETDATE() + ,@toDate DATETIME = GETDATE() + + -- primo step: calcolo inizio/fine periodo... + SELECT @fromDate=MIN(EventStart), @toDate=MAX(EventStart) FROM ext.ProductionLogRaw + + + -- secondo step: elimino dal tracciato tutti i dati dal periodo indicato + DELETE FROM dbo.ProductionLog + WHERE EventStart BETWEEN @fromDate AND @toDate + + SELECT @deleted = ISNULL(@@ROWCOUNT,0) + + -- inserisco i nuovi dati + INSERT INTO dbo.ProductionLog + SELECT * FROM ext.ProductionLogRaw + + SELECT @inserted = ISNULL(@@ROWCOUNT,0) + + -- riporto in output quanto eliminato/inserito + SELECT @deleted as RecDeleted, @inserted as RecInserted + +END +GO +PRINT N'Creating [ext].[stp_mergeRawMat]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in PackagDet da dati ProductionLogRaw/PackagRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeRawMat] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e PackagRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO RawMatDet AS Target + USING (SELECT DISTINCT RawMat FROM ext.ProductionLogRaw) + AS Source + ON Target.RawMat = Source.RawMat + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (RawMat, ProcCost, ProcYield, CSR) VALUES (RawMat, 0, 0, 0) + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'PackagRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO PackagDet AS Target + -- USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight FROM ext.PackagRaw) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight, Tare = Source.Tare, FullWeight = Source.FullWeight + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2_OLD]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2_OLD] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + ---- Create a temporary table variable to hold the output actions. + --DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- -- import con MERGE... verifico tipo di caricamento richiesto! + --IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + -- BEGIN + -- MERGE INTO Package2 AS Target + -- USING ( + -- SELECT plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + -- GROUP BY plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, TotQty, [Weight], Tare) VALUES (CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2Item_OLD]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2Item_OLD] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + ---- Create a temporary table variable to hold the output actions. + --DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- -- import con MERGE... verifico tipo di caricamento richiesto! + --IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + -- BEGIN + -- MERGE INTO Package2Item AS Target + -- USING ( + -- SELECT dd.CodItem, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + -- GROUP BY dd.CodItem, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2ItemClient_OLD]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in Package2ItemClient da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2ItemClient_OLD] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + ---- Create a temporary table variable to hold the output actions. + --DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- -- import con MERGE... verifico tipo di caricamento richiesto! + --IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + -- BEGIN + -- MERGE INTO Package2ItemClient AS Target + -- USING ( + -- SELECT dd.CodItem, plr.CodClient, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + -- GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodClient, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2PackageClient AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END +GO +PRINT N'Creating [tmp].[importClientsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +CREATE PROCEDURE [tmp].[importClientsRaw] +( + @fileType NVARCHAR(50) = 'ClientsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ClientsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.ClientsRaw + + -- carico dati bulk! + BULK INSERT tmp.ClientsRaw + FROM 'e:\test\ClientsRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorClients.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorClients.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.ClientsRaw + + END + +END +GO +PRINT N'Creating [tmp].[importItemsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +CREATE PROCEDURE [tmp].[importItemsRaw] +( + @fileType NVARCHAR(50) = 'ItemsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ItemsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.ItemsRaw + + -- carico dati bulk! + BULK INSERT tmp.ItemsRaw + FROM 'e:\test\ItemsRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorItems.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorItems.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.ItemsRaw + + END + +END +GO +PRINT N'Creating [tmp].[importDiesGroupRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +CREATE PROCEDURE [tmp].[importDiesGroupRaw] +( + @fileType NVARCHAR(50) = 'DiesGroupRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesGroupRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.DiesGroupRaw + + -- carico dati bulk! + BULK INSERT tmp.DiesGroupRaw + FROM 'e:\test\DiesGroupRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDiesGroup.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDiesGroup.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.DiesGroupRaw + + END + +END +GO +PRINT N'Creating [tmp].[importTranspCostRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.16 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +create PROCEDURE [tmp].[importTranspCostRaw] +( + @fileType NVARCHAR(50) = 'TranspCostRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'TranspCostRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.TranspCostRaw + + -- carico dati bulk! + BULK INSERT tmp.TranspCostRaw + FROM 'e:\test\TranspCostRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorTranspCost.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorTranspCost.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.TranspCostRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertDiesRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per conversione e tipizzazione dati da tmp a ext x DiesRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertDiesRaw] +( + @fileType NVARCHAR(50) = 'DiesRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.DiesRaw + + -- inserisco con cast valori... + INSERT ext.DiesRaw + WITH (TABLOCK) + ( CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active ) + SELECT + CodDies, + CAST(ISNULL(HoleNum,0) AS INT) AS HoleNum, + CodItem, + CodDiesGroup, + CAST( CAST( REPLACE( '0' + Price,',','.' )AS float )AS decimal( 9,3 )) AS Price, + CAST( CAST( REPLACE( '0' + ExpLife,',','.' )AS float )AS decimal( 9,2 )) AS ExpLife, + CAST( CAST( REPLACE( '0' + ActLife,',','.' )AS float )AS decimal( 9,2 )) AS ActLife, + CAST(ISNULL(Active,0) AS INT) AS Active + FROM tmp.DiesRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.DiesRaw + END + +END +GO +PRINT N'Creating [tmp].[convertClientsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x ClientsRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertClientsRaw] +( + @fileType NVARCHAR(50) = 'ClientsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ClientsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.ClientsRaw + + -- inserisco con cast valori... + INSERT ext.ClientsRaw + WITH (TABLOCK) + ( CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) + SELECT + CodClient, + ClientName, + CodAg, + ZipCode, + City, + [State], + Nation, + TranspZone + FROM tmp.ClientsRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.ClientsRaw + END + +END +GO +PRINT N'Creating [tmp].[importDiesRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +create PROCEDURE [tmp].[importDiesRaw] +( + @fileType NVARCHAR(50) = 'DiesRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.DiesRaw + + -- carico dati bulk! + BULK INSERT tmp.DiesRaw + FROM 'e:\test\DiesRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDies.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDies.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.DiesRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertItemsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x ItemsRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertItemsRaw] +( + @fileType NVARCHAR(50) = 'ItemsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ItemsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.ItemsRaw + + -- inserisco con cast valori... + INSERT ext.ItemsRaw + WITH (TABLOCK) + ( CodItem, ItemDescr, UnitWeight, CodPlant, CodItemGroup, Class01, Class02, Class03, Class04, Class05 ) + SELECT DISTINCT + CodItem, + ItemDescr, + CAST( CAST( REPLACE( '0' + UnitWeight,',','.' )AS float )AS decimal( 9,3 )) AS UnitWeight, + CodPlant, + CodItemGroup, + Class01, + Class02, + Class03, + Class04, + Class05 + FROM tmp.ItemsRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.ItemsRaw + END + +END +GO +PRINT N'Creating [tmp].[convertDiesGroupRaw]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.08 +-- Description: Procedura per conversione e tipizzazione dati da tmp a ext x DiesGroupRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertDiesGroupRaw] +( + @fileType NVARCHAR(50) = 'DiesGroupRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesGroupRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.DiesGroupRaw + + -- inserisco con cast valori... + INSERT ext.DiesGroupRaw + WITH (TABLOCK) + ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife) + SELECT + CodDiesGroup, + CAST( CAST( REPLACE( '0' + REPLACE(Price,'.',''),',','.' ) AS float )AS decimal( 9,3 )) AS Price, + CAST(ISNULL(QtyTot,0) AS INT) AS QtyTot, + CAST(ISNULL(QtyEOL,0) AS INT) AS QtyEOL, + CAST( CAST( REPLACE( '0' + REPLACE(ExpLife,'.',''),',','.' ) AS float )AS decimal( 9,2 )) AS ExpLife, + CAST( CAST( REPLACE( '0' + REPLACE(EOLLife,'.',''),',','.' ) AS float )AS decimal( 9,2 )) AS EOLLife + FROM tmp.DiesGroupRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.DiesGroupRaw + END + +END +GO +PRINT N'Creating [tmp].[convertPackagRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x PackagRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertPackagRaw] +( + @fileType NVARCHAR(50) = 'PackagRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'PackagRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.PackagRaw + + -- inserisco con cast valori... + INSERT ext.PackagRaw + WITH (TABLOCK) + ( CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight ) + SELECT + CodPackag, + PackagDesc, + CAST( CAST( REPLACE( '0' + RMCost,',','.' )AS float )AS decimal( 9,3 )) AS RMCost, + CAST( CAST( REPLACE( '0' + RMWeight,',','.' )AS float )AS decimal( 9,4 )) AS RMWeight, + CAST( CAST( REPLACE( '0' + Tare,',','.' )AS float )AS decimal( 9,4 )) AS Tare, + CAST( CAST( REPLACE( '0' + FullWeight,',','.' )AS float )AS decimal( 9,4 )) AS FullWeight + FROM tmp.PackagRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.PackagRaw + END + +END +GO +PRINT N'Creating [tmp].[importPackagRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +create PROCEDURE [tmp].[importPackagRaw] +( + @fileType NVARCHAR(50) = 'PackagRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'PackagRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.PackagRaw + + -- carico dati bulk! + BULK INSERT tmp.PackagRaw + FROM 'e:\test\PackagRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorPackag.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorPackag.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.PackagRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertProductionLogRaw]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertProductionLogRaw] +( + @fileType NVARCHAR(50) = 'ProductionLogRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ProductionLogRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.ProductionLogRaw + + -- inserisco con cast valori... + INSERT ext.ProductionLogRaw + WITH (TABLOCK) + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat, CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags, okPr, okQM, okSc, okDi ) + + SELECT + dbo.f_dtFromRaw( EventStart ) AS EventStart, -- record nulli sono giĆ  stati cancellati + dbo.f_dtFromRaw( EventEnd ) AS EventEnd, -- record nulli sono giĆ  stati cancellati + dbo.f_trim(ISNULL(CodPlant ,'')), + dbo.f_trim(ISNULL(ProcessNum ,'')), + dbo.f_trim(ISNULL(NrPos ,'')), + dbo.f_trim(ISNULL(CodDies ,'')), + dbo.f_trim(ISNULL(CodClient ,'')), + dbo.f_trim(ISNULL(OrderNum ,'')), + dbo.f_trim(ISNULL(BatchNum ,'')), + dbo.f_trim(ISNULL(ProcessType,'')), + dbo.f_trim(ISNULL(EventType ,'')), + dbo.f_trim(ISNULL(RawMat ,'')), + dbo.f_trim(ISNULL(CodPackag ,'')), + CAST( CAST( REPLACE( '0' + ISNULL(QtyIN,'') ,',','.' ) AS float ) AS decimal( 18,4 )) AS QtyIN, + CAST( CAST( REPLACE( '0' + ISNULL(QtyOUT,''),',','.' ) AS float ) AS decimal( 18,4 )) AS QtyOUT, + CAST( CAST( REPLACE( '0' + ISNULL(QtyEXT,''),',','.' ) AS float ) AS decimal( 18,4 )) AS QtyEXT, + CAST( ISNULL(NumIN ,'') AS int )AS NumIN, + CAST( ISNULL(NumOUT ,'') AS int )AS NumOUT, + CAST( CAST( REPLACE( '0' + ISNULL(QuotaPlant,''),',','.' ) AS float )AS decimal( 9,4 )) AS QuotaPlant, + CAST( CAST( REPLACE( '0' + ISNULL(QuotaMan,''),',','.' ) AS float )AS decimal( 9,4 )) AS QuotaMan, + dbo.f_trim(ISNULL(Tags ,'')), + okPr, + okQM, + okSc, + okDi + FROM tmp.ProductionLogRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.ProductionLogRaw + END + +END +GO +PRINT N'Creating [tmp].[importProductionLogRaw]...'; + + +GO + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per import dati in tabelal tmp da file csv +-- +-- TRUNCATE TABLE tmp.ProductionLogRaw_KO +-- +-- ============================================= +CREATE PROCEDURE [tmp].[importProductionLogRaw] +( + @fileType NVARCHAR(50) = 'ProductionLogRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ProductionLogRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.ProductionLogRaw + + -- carico dati bulk! + BULK INSERT tmp.ProductionLogRaw + FROM 'e:\test\ProductRaw.csv' + + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorProduct.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorProduct.log', CODEPAGE = '1252') + + -- =============================================================================== + -- pulisco l tabella dai record con chiave duplicata ( se doppi li elimino tutti ) + -- =============================================================================== + SET XACT_ABORT ON; + BEGIN TRAN + + -- salvo i dati con chiave duplicata + INSERT INTO tmp.ProductionLogRaw_KO + SELECT Prod.*, GETDATE() FROM tmp.ProductionLogRaw AS Prod + INNER JOIN + ( + SELECT EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + FROM tmp.ProductionLogRaw + GROUP BY EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + HAVING COUNT(*)>1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- Cancello i record con chiave duplicata + DELETE Prod + WITH (TABLOCK) + FROM tmp.ProductionLogRaw AS Prod + INNER JOIN + ( + SELECT EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + FROM tmp.ProductionLogRaw + GROUP BY EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + HAVING COUNT(*)>1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- =============================================================================== + -- pulisco la tabella dai record con date non corrette + -- =============================================================================== + DELETE FROM tmp.ProductionLogRaw + WITH (TABLOCK) + OUTPUT deleted.* INTO tmp.ProductionLogRaw_KO -- salvo i record cancellati in tabella KO + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat + , CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags, okPr, okQM, okSc, okDi ) + WHERE EventStart >= EventEnd + OR CONVERT( BIGINT , EventStart ) + 68000000000000 <= EventEnd -- record che darebbero errore poi nel datediff > 68 anni + OR EventStart IS NULL + OR EventEnd IS NULL + +-- SELECT * FROM tmp.ProductionLogRaw_KO + + --ROLLBACK + COMMIT + + SELECT COUNT(*) AS RecordsIn FROM tmp.ProductionLogRaw + + END +END +GO +PRINT N'Creating [tmp].[convertTranspCostRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x TranspCostRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertTranspCostRaw] +( + @fileType NVARCHAR(50) = 'TranspCostRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'TranspCostRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.TranspCostRaw + + -- inserisco con cast valori... + INSERT ext.TranspCostRaw + WITH (TABLOCK) + (TranspZone, TranspCost) + SELECT + TranspZone, + MAX(CAST( CAST( REPLACE( '0' + TranspCost,',','.' )AS float )AS decimal( 18,9 ))) AS TranspCost + FROM tmp.TranspCostRaw + GROUP BY TranspZone + + SELECT COUNT(*) as RecordsIn FROM ext.TranspCostRaw + END + +END +GO +PRINT N'Creating [dbo].[stp_QL_fullData]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QL_fullData +-- +-- Author: Steamware +-- Create date: 2014.01.27 +-- Description: Recupera tutti i dati dalle tab QuoteList x avere schema x report/gestioen web +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_fullData] ( + @QuoteType CHAR(1) = 'Q' + , @CodQuote BIGINT = 0 + , @QuoteRev INT = 0 + , @DoUpdate CHAR(1) = 'N' -- se si debba fare ricalcolo Y/N + ) +AS +SET NOCOUNT ON + +EXEC stp_QL_fullDataUpdate @QuoteType + , @CodQuote + , @QuoteRev + , @DoUpdate + +---- calcolo con aggiunta campi sommati... +--SELECT * +-- , FVC + RawMatFullCost AS P_FVC +-- , FC4UG01 + OH4UG01 AS CPS +-- , FC4UG01 + OH4UG01 + FVC + RawMatFullCost AS P_CPS +-- , FC4UG04 + FVC + RawMatFullCost AS P_FC4UG04 +-- , FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost +-- , FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost AS P_FullCost +-- , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS MinPrice +-- , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) AS P_MinPrice +-- , PriceOff + RawMatFullCost AS P_PriceOff +-- , (FVC + FC4UG01 + OH4UG01 + FC4UG04) - PriceOff AS NetMar +-- , (PriceOff - FVC) / (FC4UG01 + OH4UG01 + FC4UG04) AS FCShield +-- , (PRMWeight - Ptare) * (PriceOff + RawMatFullCost) / Pweight AS PckSur +--FROM QuoteFull_Q +--WHERE QuoteType = @QuoteType +-- AND CodQuote = @CodQuote +-- AND QuoteRev = @QuoteRev + +-- calcolo con aggiunta campi sommati... +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + +RETURN +GO +PRINT N'Creating [dbo].[stp_QuoteFull_Q_update]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Create date: 2014.02.07 +-- Description: update valori tab QuoteList +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QuoteFull_Q_update] ( + @Original_QuoteType CHAR(1) = 'Q' + ,@Original_CodQuote BIGINT = 0 + ,@Original_QuoteRev INT = 0 + ,@PriceOff DECIMAL(9, 6) = 0 + ) +AS +BEGIN + +-- aggiorno valori! + UPDATE QuoteList + SET PriceOff = @PriceOff + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev +END +GO +PRINT N'Creating [dbo].[stp_zzz_scratch]...'; + + +GO + + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.20 +-- Description: Procedure x calcoli e test import dati e prove varie +-- ============================================= +CREATE PROCEDURE [dbo].[stp_zzz_scratch] +AS +BEGIN + + -- dichiaro e imposto periodo di calcolo dei valori + -- andrĆ  impostato in una tabella e mi determinerĆ  la versione dei dati + DECLARE @dateFrom AS DateTime; + DECLARE @dateTo AS DateTime; + + SET @dateFrom = '20100101' + SET @dateTo = '20130929' + + -- ========================================== + -- IMPORTAZIONE DATI CSV + -- ========================================== + exec tmp.importProductionLogRaw + exec tmp.importClientsRaw + exec tmp.importTranspCostRaw + exec tmp.importItemsRaw + exec tmp.importPackagRaw + exec tmp.importDiesRaw + -- questo sotto va fatto solo se ci sono dati da integrare in DiesRaw + exec tmp.importDiesGroupRaw + + select top 10 * FROM tmp.ProductionLogRaw + select * FROM tmp.ClientsRaw + select * FROM tmp.ItemsRaw + select * FROM tmp.PackagRaw + select * FROM tmp.DiesRaw + select * FROM tmp.DiesGroupRaw + + -- Se ci sono record con Item doppi li cancello???? + SELECT CodItem,COUNT(*) as qty + FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + GROUP BY CodItem + having COUNT(*)>1 + + delete from tmp.ItemsRaw + where CodItem IN + ( + SELECT CodItem + FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + GROUP BY CodItem + having COUNT(*)>1 + ) + + + -- ========================================== + -- CARICO DATI IN RAW ( da Char a Tipi corretti ) + -- ========================================== + exec tmp.convertClientsRaw + exec tmp.convertTranspCostRaw + exec tmp.convertItemsRaw + exec tmp.convertProductionLogRaw + exec tmp.convertPackagRaw + exec tmp.convertDiesRaw + + -- necessario se integriamo i dati x i gruppi di matrici con un file + exec tmp.convertDiesGroupRaw + + select top 10 * FROM ext.ProductionLogRaw + select * FROM ext.ClientsRaw + select * FROM ext.ItemsRaw + select * FROM ext.PackagRaw + select * FROM ext.DiesRaw + SELECT * FROM ext.DiesGroupRaw + + -- elimino a mano dato con oltre 68 anni di evento... + select * + --delete + from ext.ProductionLogRaw + where DATEDIFF(YEAR,EventStart,EventEnd)> 10 + + exec ext.stp_mergeAgentsDet + exec ext.stp_mergeClientDet 'ProductionLogRaw' + exec ext.stp_mergeClientDet 'ClientsRaw' + exec ext.stp_mergeTranspCostDet 'TranspCostRaw' + exec ext.stp_mergePlantsDet + exec ext.stp_mergeCost2Plant + exec ext.stp_mergeItemDet 'ItemsRaw' + exec ext.stp_mergePackagDet 'ProductionLogRaw' -- 'PackagRaw' + exec ext.stp_mergePackage2ItemClient 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2Item 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2 'ProductionLog', @dateFrom, @dateTo + + exec ext.stp_mergeDiesDet + -- se ricarico diesgroup... ricarico solo i campi che nel file sono <> '' + exec ext.stp_mergeDiesGroupDet + + exec ext.stp_mergeRawMat + exec ext.stp_updateProductionLog + + ---- aggiorno quota agenti a 0.037 + ----update AgentsDet set quotaperc=0.0374 + + + SELECT DISTINCT dr.CodItem FROM ext.DiesRaw dr LEFT OUTER JOIN ItemDet id ON dr.CodItem = id.CodItem + where id.CodItemGroup is null + + select * from ClientDet + select * from ItemDet + select * from Package2ItemClient + select * from Package2Item + select * from Package2 + select * from PackagDet + select * from DiesGroupDet where EOLLife > 0 + select * from DiesDet + select * from DiesGroupDet + select * from AgentsDet + select * from PlantsDet + select * from Cost2Plant + select * from utilities + select top 100 * from ProductionLog + + --update tmp.ProductionLogRaw + --set + -- okPr = 1 + -- , okDi = 1 + -- , okQM = 1 + -- , okSc = 1 + + select distinct ProcessNum from ProductionLog + + select top 10 * from ext.ProductionLogRaw + + + ---- fix errore packaging + --update tmp.ProductionLogRaw + --SET CodPackag='4' + --where CodPackag LIKE '%4%' and CodPackag <> '4' + --select * from tmp.ProductionLogRaw where CodPackag LIKE '%4%' and CodPackag <> '4' + + SELECT p.CodDies, CodItem, CodClient, CodPackag, p.* FROM ext.ProductionLogRaw AS p + LEFT JOIN dbo.DiesDet AS d ON p.CodDies = d.CodDies + WHERE CodItem IS NULL + + + + -- parte CALCOLI!!! + + select * from QuoteList + + select * from ClientDet where CodClient='05000001048' + + select * from itemdet + where CodItem like '1PT00102%' + + select * from RawMatDet + + + --Q 1312130001 0 05000001048 1PT00102 A 7020 7673,400 1000 CPT NULL NULL NULL NULL + + SELECT --TOP 10 + dd.CodItem, pl.RawMat, dd.CodItem + '-' + pl.RawMat as KeyAM, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ,dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + ,0 as NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) as KgTeorici, SUM(Duration) AS Durata + ,ISNULL(SUM(QtyOUT),0)/ISNULL(SUM(Duration), 1) as ProduttTeo + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- ========================================== + -- re-insert dei dati di produzione x statistiche + -- ========================================== + exec stp_TPS_upsert @dateFrom, @dateTo + exec stp_TD_upsert @dateFrom , @dateTo +-- exec stp_TI_upsert @dateFrom , @dateTo -- adesso sono giĆ  calcolati e inseriti in Package2 / Package2Item + + -- ========================================== + -- salvo nuova revisione dati di produzione... + -- Va messa in ogni procedura di update con 'procedura' e versione anno-mese-giorno + -- ========================================== + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + + select * from RevHistory + + -- simulazione tempo di calcolo: circa 50/sec + ---- aggiornamento dei dati dell'offerta in oggetto + --DECLARE @tick DATETIME, + -- @idx INT = 100 + --SET @tick = GETDATE() + --WHILE @idx > 0 + --BEGIN + -- EXEC stp_QL_update 'Q', 1312130001, 0 + -- SELECT @idx = @idx - 1 + --END + --SELECT GETDATE() - @tick as tempo + + DECLARE @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 1312130001, + @QuoteRev INT = 0 + + EXEC stp_QL_update @QuoteType, @CodQuote, @QuoteRev + SELECT * FROM QuoteList WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteRM WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkInt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkExt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteOC WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteParam WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + + select top 10 * from ItemDet + + SELECT * FROM RawMatDet + + SELECT top 10 * FROM TabProdSc + SELECT top 10 * FROM TabDifett +-- SELECT * FROM TabImbArt +-- SELECT * FROM TabImbGrp + SELECT * FROM PackagDet + SELECT * FROM Package2 + + ---- test gestione selezione CodPackag corretto + --SELECT TOP 5 * FROM Package2ItemClient + --SELECT TOP 5 * FROM Package2Item + --SELECT TOP 5 * FROM Package2 + + SELECT dbo.f_getCodPackag('1EL00005', '05000001048') + --SELECT dbo.f_getCodPackag('1AN00001', '05000000137') + + + +END +GO +PRINT N'Creating [dbo].[stp_QL_update_30_01]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.01.22 +-- Description: aggiorna le tabelle QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update_30_01] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + + -- dichiaro valori da recuperare + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettositĆ  all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettositĆ  all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '', -- codice ZONA + @TranspCost DECIMAL(9,6), -- costo di trasporto + @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + -- default: validitĆ  ĆØ true! + SET @valid = 1 + + -- ================================================= + -- CREAZIONE TEMP TABLE + -- ================================================= + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + + CREATE TABLE #QuoteParam + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumP] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [Descr] [nvarchar](50) NOT NULL, + [Parameter] [nvarchar](100) NOT NULL, + --PRIMARY KEY + -- ( [NumP] ASC, [QuoteType] ASC, [CodQuote] ASC, [QuoteRev] ASC ) WITH (PAD_INDEX = ON, FILLFACTOR = 90 ) + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + + CREATE TABLE #QuoteWorkInt + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumWI] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [NetProd] [decimal](9, 3) NOT NULL DEFAULT ((0)), + [WSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [MSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [DSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [FC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [VC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [OH4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [SC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [WYR] AS ((1)-[WSR]), + [MYR] AS ((1)-[MSR]), + [DYR] AS ((1)-[DSR]), + [WCR] AS ((1)/((1)-[WSR])), + [MCR] AS ((1)/((1)-[MSR])), + [DCR] AS ((1)/((1)-[DSR])), + [valid] [bit] NOT NULL DEFAULT((1)), + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + + CREATE TABLE #QuoteOC + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumEx] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [TotQty] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [TotCost] [decimal](18, 6) NOT NULL DEFAULT ((0)), + [Quota] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [C4UG] AS (([TotCost]*[Quota])/[TotQty]), + [valid] [bit] NOT NULL DEFAULT ((1)) + ) + + -- =================================== + -- INIZIO TRANSAZIONE + -- =================================== + SET XACT_ABORT ON; + BEGIN TRAN + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + + -- elimino lavorazioni esterne! + DELETE + FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- recupero da dati dell'offerta il valore del package scelto + SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + + -- e aggiorno QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ItemDet INNER JOIN ClientDet ON ItemDet.Class03=ClientDet.CodClient + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant', @CodPlant + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- tolto: ĆØ duplicato di HoleNumDies + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNum', @HoleNum + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR ĆØ NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttivitĆ  netta nella fase imballo + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- Se ProduttivitĆ  netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + BEGIN + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + WHERE qwi.ProcessNum = '04' -- solo imballo + END + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM dbo.TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- calcolo i costi legati alla fase di imballo! + -- QUI VA FATTO CALCOLO PUNTUALE SU quotaPlant tramite Articolo-Cliente / Articolo / Packaging + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che ĆØ il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se ĆØ 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo ĆØ OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita ĆØ OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che ĆØ sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita ĆØ OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC WITH (NOLOCK) + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perchĆ© la differenza ĆØ minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CANCELLO E CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- elimino e carico parametri! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam WITH (NOLOCK) + + -- elimino e carico lavorazioni interne! + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt WITH (NOLOCK) + + -- elimino e carico OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC WITH (NOLOCK) + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END +GO +PRINT N'Creating [dbo].[QuoteParam].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn ĆØ incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[NumP].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'NumP'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo risorsa (e lavorazione): 01 .. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_Q].[PriceOff].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo Offerto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_Q', @level2type = N'COLUMN', @level2name = N'PriceOff'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Altri costi (diretti-indiretti)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn ĆØ incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[NumEx].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo del costo OTHER', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'NumEx'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo risorsa (e lavorazione): 01 .. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 01, tipo di costo : +- UTIL (EE/GAS) +- ROTTAME (costo rifusione + quota perdita x ri-vendita) +- CONS +- TRASP +- PROVV +- EXTRA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class02].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 02, codice di ricerca per tipo di costo extra, es se consumabili ĆØ codice matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class02'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class03].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 03', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class03'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class04].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class04'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class05].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 05', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class05'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[TotQty].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'quantitĆ  totale di riferimento', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'TotQty'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[TotCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo totale di riferimento', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'TotCost'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Quota].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quota di impiego', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Quota'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[C4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo pro quota di impiego (per matrici, imballi,...)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'C4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn ĆØ incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[NumWI].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'NumWI'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo risorsa (e lavorazione): estrusione/imballo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 01, ARTICOLO + MATERIALE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class02].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 02, codice di ricerca per prod - es cod imballo o Chiave di ricerca Articolo/ClasseArt + RawMat+ Impianto + NumLuci', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class02'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class03].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 03, tipo imballo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class03'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class04].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class04'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class05].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 05', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class05'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[NetProd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Produttivita netta (teorica) kg/h', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'NetProd'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[WSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Work Scrape Ratio, percentuale scarto della lavorazione (tecnico)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'WSR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[MSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Material Scrape Ratio, percentuale scarto legato alla MP (cesoia x alx)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'MSR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[DSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Scrape Ratio, percentuale scarto per difettositĆ  prodotto (qualitĆ )', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'DSR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[FC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Fixed Cost FOR Unit of Good, quota dei costi fissi per unitĆ  di prodotto finito (Copertura Costo Struttura e Linea)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'FC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[VC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Variables Cost FOR Unit of Good, quota dei costi variabili per unitĆ  di prodotto finito (Costo del personale x Alx)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'VC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[OH4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'OH Cost FOR Unit of Good, quota dei costi Over Head per unitĆ  di prodotto finito', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'OH4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[SC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Setup Cost FOR Unit of Good, quota dei costi di setup per unitĆ  di prodotto finito (costo cambio matrice x Alx)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'SC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[WYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Work Yield Ratio, percentuale RESA della lavorazione (tecnico), 1 - scarto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'WYR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[MYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Material Yield Ratio, percentuale RESA legato alla MP (cesoia x alx), 1 - scarto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'MYR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[DYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Yield Ratio, percentuale RESA per difettositĆ  prodotto (qualitĆ ), 1 - scarto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'DYR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[WCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Work Conversion Ratio, Messa a Cento, 1 / RESA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'WCR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[MCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Material Conversion Ratio, Messa a Cento, 1 / RESA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'MCR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[DCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Conversion Ratio, Messa a Cento, 1 / RESA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'DCR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn ĆØ incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[NumWE].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'NumWE'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[EWC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'External Work Cost FOR Unit of Good, quota dei costi fissi per unitĆ  di prodotto finito (Copertura Costo Struttura e Linea)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'EWC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[UM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'UnitĆ  di misura di riferimento per il costo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'UM'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn ĆØ incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'classe raggruppamento (es complessitĆ  disegno)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[UnitWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso espresso come g/m (grammi / metro)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'UnitWeight'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[BatchQty].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'QuantitĆ  lotto kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'BatchQty'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodInco].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Codice Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodInco'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[PriceOff].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo Offerto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'PriceOff'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdDate].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data dell''ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdDate'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdNum'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdRow].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'riga ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdRow'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdPrice].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo finale ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdPrice'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[TotQta].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'QuantitĆ  totale lavorata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'TotQta'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[Weight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'Weight'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[EventStart].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'inizio evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'EventStart'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[EventEnd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'fine evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'EventEnd'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice fase, da qui si crea anagrafica fasi distinct', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodDies'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[OrderNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'rif codice ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'OrderNum'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[BatchNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice lotto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'BatchNum'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[ProcessType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice del TIPO di fase, x raggruppamento funzionale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'ProcessType'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[EventType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo evento: produzione, prova, guasto, setup...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'EventType'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodPackag].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice imballo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodPackag'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QtyIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QtyIN'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QtyOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QtyOUT'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QtyEXT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale dbora che fa parte dell''OUT, es imballi/tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QtyEXT'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[NumIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'NumIN'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[NumOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'NumOUT'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QuotaPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota macchina per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QuotaPlant'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QuotaMan].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota uomo per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QuotaMan'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[Tags].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'categorie LIBERE, separatore #', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'Tags'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[Duration].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata espressa in ore', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'Duration'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttivitĆ ', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettositĆ ', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[TotQta].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'QuantitĆ  totale lavorata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'TotQta'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[Weight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'Weight'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [dbo].[PackagDet].[RMCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Raw Material Cost - costo dei materiali', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PackagDet', @level2type = N'COLUMN', @level2name = N'RMCost'; + + +GO +PRINT N'Creating [dbo].[PackagDet].[RMWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PackagDet', @level2type = N'COLUMN', @level2name = N'RMWeight'; + + +GO +PRINT N'Creating [dbo].[PlantsDet].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PlantsDet', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[PlantsDet].[Descript].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'descrizione impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PlantsDet', @level2type = N'COLUMN', @level2name = N'Descript'; + + +GO +PRINT N'Creating [dbo].[PlantsDet].[Charge].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Over Head costo €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PlantsDet', @level2type = N'COLUMN', @level2name = N'Charge'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[RevType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo di revisione indicata coem S.C.P --> in C = costi di contab industriale, P = da ProductionLog, S = Sistema di calcolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'RevType'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[RevNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'incrementale del numero di revisione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'RevNum'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[DateRev].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data revisione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'DateRev'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[Description].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'descrizione revisione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'Description'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[CodDiesGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice CLASSE matrice, es tipo + diametro', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'CodDiesGroup'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[Price].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'prezzo di acquisto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'Price'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[QtyTot].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Totale matrici del gruppo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'QtyTot'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[QtyEOL].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero rottamate nel gruppo (End Of Life)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'QtyEOL'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[ExpLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attesa in kg PREVISTA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'ExpLife'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[EOLLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attuale (delle rottamate, media) in kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'EOLLife'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice fase, da qui si crea anagrafica fasi distinct', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[FC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo Fissi €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'FC'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[VC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costi Variabili €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'VC'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[OH].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Over Head costo €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'OH'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[SC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costoSETUP €/cambio per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'SC'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[QuotaPlantStd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota macchina per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'QuotaPlantStd'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[QuotaManStd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota uomo per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'QuotaManStd'; + + +GO +PRINT N'Creating [dbo].[TabProdSc].[ProdTeo].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'produttivitĆ  teorica (kgTeorici / durata h)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TabProdSc', @level2type = N'COLUMN', @level2name = N'ProdTeo'; + + +GO +PRINT N'Creating [dbo].[TabProdSc].[ScTec].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto tecnico: 1 - (KgTeorici/ISNULL(KgLordi,1))', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TabProdSc', @level2type = N'COLUMN', @level2name = N'ScTec'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Client Details Table', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[ClientName].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ragione Sociale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'ClientName'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[ZipCode].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cap', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'ZipCode'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[City].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cittĆ ', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'City'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[State].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'stato/provincia', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'State'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[Nation].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'nazione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'Nation'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[Lastname].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Cognome', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'Lastname'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[Firstname].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Nome', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'Firstname'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[QuotaProvvAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Provvigione come €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'QuotaProvvAg'; + + +GO +PRINT N'Creating [dbo].[Utilities].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo unitario per unitĆ  di PF (€/kg)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities'; + + +GO +PRINT N'Creating [dbo].[Utilities].[CodUtil].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice dell''utility (Energia elettrica / gas)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities', @level2type = N'COLUMN', @level2name = N'CodUtil'; + + +GO +PRINT N'Creating [dbo].[Utilities].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[Utilities].[UnitCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo al kg per impianto ed utility', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities', @level2type = N'COLUMN', @level2name = N'UnitCost'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[CodDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'CodDies'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[CodDiesGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice CLASSE matrice, es tipo + diametro; nota: massima numerositĆ  pari a numero articoli, minima numerositĆ  1', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'CodDiesGroup'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[Price].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'prezzo di acquisto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'Price'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[TestCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo di prove e correzioni', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'TestCost'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[ExpLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attesa in kg PREVISTA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'ExpLife'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[ActLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attuale (delle rottamate, media) in kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'ActLife'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[Active].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Stato: 1 = disponibile, 0 = rottamata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'Active'; + + +GO +PRINT N'Creating [dbo].[Incoterms].[CodInco].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Codice Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Incoterms', @level2type = N'COLUMN', @level2name = N'CodInco'; + + +GO +PRINT N'Creating [dbo].[Incoterms].[Descript].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Descrizione Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Incoterms', @level2type = N'COLUMN', @level2name = N'Descript'; + + +GO +PRINT N'Creating [dbo].[Incoterms].[HasTC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Indica se ha costi di trasporto (1) o non lil ha (0)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Incoterms', @level2type = N'COLUMN', @level2name = N'HasTC'; + + +GO +PRINT N'Creating [dbo].[TranspCostDet].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TranspCostDet', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [dbo].[TranspCostDet].[TranspCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costi di traporto €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TranspCostDet', @level2type = N'COLUMN', @level2name = N'TranspCost'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn ĆØ incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[NumRM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'NumRM'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[RawMatCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo della MP €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'RawMatCost'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[RawMatExtraCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo degli extra della MP €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'RawMatExtraCost'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[FCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tasso di conversione TOTALE, messa al cento, quantitĆ  di MP necessaria per produrre un unitĆ  di prodotto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'FCR'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[FYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'FULL Yield Ratio, percentuale RESA TOTALE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'FYR'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[FSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'FULL Scrape Ratio, percentuale scarto TOTALE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'FSR'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Item Details Table', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[UnitWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso espresso come g/m (grammi / metro)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'UnitWeight'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'classe raggruppamento (es complessitĆ  disegno)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [dbo].[v_selItems].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[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 = "ItemDet" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 254 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 4635 + 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', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selItems'; + + +GO +PRINT N'Creating [dbo].[v_selItems].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selItems'; + + +GO +PRINT N'Creating [dbo].[v_selClient].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[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 = "ClientDet" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 258 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 4290 + 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', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selClient'; + + +GO +PRINT N'Creating [dbo].[v_selClient].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selClient'; + + +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[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 = "QuoteFull_Q" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 136 + Right = 221 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + 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', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q'; + + +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q'; + + +GO +PRINT N'Creating [dbo].[Package2].[TotQta].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'QuantitĆ  totale lavorata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2', @level2type = N'COLUMN', @level2name = N'TotQta'; + + +GO +PRINT N'Creating [dbo].[Package2].[Weight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2', @level2type = N'COLUMN', @level2name = N'Weight'; + + +GO +PRINT N'Creating [dbo].[Package2].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ProcCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo del processo di rifusione €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ProcCost'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ProcYield].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'resa del processo di rifusione %', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ProcYield'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[CSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Cut Scrape Ratio, percentuale scarto cesoia', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'CSR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[SSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scrape Sell Ratio, percentuale di vendita dello scarto (0-100)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'SSR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[SSVA].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scrape Sell Value - ABSOLUTE, valore di vendita dello scarto ASSOLUTO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'SSVA'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[SSVR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scrape Sell Value - RELATIVE come valore % del valore lega', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'SSVR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ExtraMatCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo extra di acquisto del materiale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ExtraMatCost'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ExtraServCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo extra dei servizi sul materiale (es ultrasuoni)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ExtraServCost'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[ClientName].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ragione Sociale', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ClientName'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[ZipCode].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cap', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ZipCode'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[City].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cittĆ ', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'City'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[State].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'stato/provincia', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'State'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[Nation].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'nazione', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'Nation'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[EventStart].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'inizio evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'EventStart'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[EventEnd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'fine evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'EventEnd'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice fase, da qui si crea anagrafica fasi distinct', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice matrice', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodDies'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[OrderNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'rif codice ordine', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'OrderNum'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[BatchNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice lotto', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'BatchNum'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[ProcessType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice del TIPO di fase, x raggruppamento funzionale', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'ProcessType'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[EventType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo evento: produzione, prova, guasto, setup...', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'EventType'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodPackag].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice imballo', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodPackag'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QtyIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QtyIN'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QtyOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QtyOUT'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QtyEXT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale extra che fa parte dell''OUT, es imballi/tara', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QtyEXT'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[NumIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'NumIN'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[NumOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'NumOUT'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QuotaPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota macchina per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QuotaPlant'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QuotaMan].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota uomo per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QuotaMan'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[Tags].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'categorie LIBERE, separatore #', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'Tags'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttivitĆ ', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettositĆ ', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttivitĆ ', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettositĆ ', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [ext].[ItemsRaw].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [ext].[ItemsRaw].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'calsse raggruppamento (es complessitĆ  disegno)', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [ext].[ItemsRaw].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[RMCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Raw Material Cost - costo dei materiali', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMCost'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[RMWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg peso medio', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMWeight'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg tara standard', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[FullWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso medio del pacco (compelssivo)', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'FullWeight'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttivitĆ ', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettositĆ ', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[ClientName].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ragione Sociale', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ClientName'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[ZipCode].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cap', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ZipCode'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[City].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cittĆ ', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'City'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[State].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'stato/provincia', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'State'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[Nation].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'nazione', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'Nation'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [tmp].[ItemsRaw].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [tmp].[ItemsRaw].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'calsse raggruppamento (es complessitĆ  disegno)', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [tmp].[ItemsRaw].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttivitĆ ', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettositĆ ', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[RMCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Raw Material Cost - costo dei materiali', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMCost'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[RMWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg peso medio', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMWeight'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg tara standard', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[FullWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso medio del pacco (compelssivo)', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'FullWeight'; + + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'Update complete.'; + + +GO diff --git a/C2P_Project/obj/Debug/C2P_Project.dll b/C2P_Project/obj/Debug/C2P_Project.dll index fce6500737bc01fc810a866b15a56d419891a087..567e39844dc83f1c91cba29febc09affbb26470e 100644 GIT binary patch delta 50 zcmZpWX^@%F!F;iqWn=eFW`UjQzij7ET;sas-_w))Q_3IzR04_ F2>==>6Y2l} diff --git a/C2P_Project/obj/Debug/C2P_Project.sqlproj.FileListAbsolute.txt b/C2P_Project/obj/Debug/C2P_Project.sqlproj.FileListAbsolute.txt index c047c8d..61fbc38 100644 --- a/C2P_Project/obj/Debug/C2P_Project.sqlproj.FileListAbsolute.txt +++ b/C2P_Project/obj/Debug/C2P_Project.sqlproj.FileListAbsolute.txt @@ -3,3 +3,7 @@ C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\C2P_Project.pdb C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug\C2P_Project.dll C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug\C2P_Project.pdb +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\Model.xml +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\refactor.xml +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\postdeploy.sql +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\predeploy.sql diff --git a/C2P_Project/obj/Debug/Model.xml b/C2P_Project/obj/Debug/Model.xml new file mode 100644 index 0000000..ecc13ed --- /dev/null +++ b/C2P_Project/obj/Debug/Model.xml @@ -0,0 +1,38116 @@ + + +

+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + + RETURN @output + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Client-Package', @CodItem + '-' + @CodClient + '-' + CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE IF EXISTS ( SELECT * FROM Package2Item WHERE CodItem = @CodItem ) + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Package', @CodItem + '-' + CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 'ND', 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Package', CodPackag + FROM dbo.Package2 WHERE CodPackag = 0 + END + + RETURN +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @separator + SET @str_out = @str_in + @separator ; + ELSE + SET @str_out = @str_in ; + + -- calcolo il numero di elementi della nella stringa + SET @Occurrences = ( (DATALENGTH( REPLACE(@str_out, @separator, @separator+'#')) - DATALENGTH(@str_out)) ) / 2 + + -- se l'elemento richiesto esiste proseguo altrimenti ritorno NULL + IF @Occurrences >= @PosizValue AND @PosizValue <> 0 + BEGIN + + SET @tmpStr = @str_out ; + SET @Counter = 1 ; + + WHILE @Counter <= @PosizValue + BEGIN + SET @Counter = @Counter + 1 ; + SET @str_out = SUBSTRING( @tmpStr, 1, CHARINDEX(@separator,@tmpStr) - 1) ; + -- metto via il resto della stringa + SET @tmpStr = SUBSTRING( @tmpStr, CHARINDEX(@separator,@tmpStr) + DATALENGTH(@separator)/2, 4000) ; + + IF DATALENGTH(@tmpStr) = 0 + BREAK + END + + -- pulisco da caratteri NON voluti + --SET @str_out = REPLACE(@str_out, char(13), '') ; -- carriage return + --SET @str_out = REPLACE(@str_out, char(10), '') ; -- line feed + --SET @str_out = REPLACE(@str_out, char(9), '') ; -- tab + --SET @str_out = LTRIM ( RTRIM (@str_out) ) ; -- blank + END + ELSE + SET @str_out = NULL ; + + RETURN @str_out + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) + -- primo tentativo: cerco il package dato SIA Cliente che Item che Package + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2ItemClient WHERE CodItem = @CodItem AND CodClient = @CodClient AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM e package + BEGIN + SELECT @trovati = COUNT(*) FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + IF(@trovati > 0) + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + BEGIN + SELECT @Weight = [Weight], @Tare = Tare + FROM Package2 WHERE CodPackag = @CodPackag + END + END + + + -- faccio ultimi calcoli! + SELECT @PackCost = @RMCost / @Weight, @TareStRat = (@RMWeight - @Tare) / @Weight + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione è una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = Weight, @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc ) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet + WHERE ClientDet.CodClient = @CodClientAssoc + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(100) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(100) , @KgTeo ) ) + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee delete a parte + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG( ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife > 0) + BEGIN + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + END + ELSE + BEGIN + SET @DiesPriceLife = 0 -- metto a zero il DiesPriceLife + SET @valid = 0 -- indico che valore non è valido ( ND excel ) + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', CONVERT(NVARCHAR(100), @DiesPrice) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', CONVERT(NVARCHAR(100), @DiesExpLife) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', CONVERT(NVARCHAR(100), @DiesEOLife) ) + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR ) + -- inserisco costi per VENDITA + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR ) + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchè la maggior parte dei calcoli li ho già fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', CONVERT(NVARCHAR(100), @PRMWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', CONVERT(NVARCHAR(100), @PWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', CONVERT(NVARCHAR(100), @PTare) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', CONVERT(NVARCHAR(100), @PTareStRatio ) ) + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + COMMIT TRAN; + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione è una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = [Weight], @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet WHERE ClientDet.CodClient = @CodClientAssoc + --FROM dbo.ItemDet + --INNER JOIN dbo.ClientDet ON ItemDet.Class03 = ClientDet.CodClient + --WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(50) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(50) , @KgTeo ) ) + + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttività netta nella fase imballo +-- UPDATE qwi +-- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END +-- FROM #QuoteWorkInt qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA +-- WHERE qwi.ProcessNum = '04' -- solo imballo + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- ADESSO LO FACCIO GIA' NELLA FUNZIONE DI RECUPERO DATI PACKAGE f_getDataCodPackag + ---- Se Produttività netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + --IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + -- BEGIN + -- UPDATE qwi + -- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + -- FROM #QuoteWorkInt qwi + -- INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + -- WHERE qwi.ProcessNum = '04' -- solo imballo + -- END + + -- salvo numero imballatori + --SELECT @NumImb = ISNULL(NumImb,0) + --FROM dbo.TabImbArt + --WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchè la maggior parte dei calcoli li ho già fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- recupero da dati dell'offerta il valore del package scelto + SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + + -- e aggiorno QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ItemDet INNER JOIN ClientDet ON ItemDet.Class03=ClientDet.CodClient + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant', @CodPlant + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- tolto: è duplicato di HoleNumDies + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNum', @HoleNum + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttività netta nella fase imballo + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- Se Produttività netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + BEGIN + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + WHERE qwi.ProcessNum = '04' -- solo imballo + END + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM dbo.TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- calcolo i costi legati alla fase di imballo! + -- QUI VA FATTO CALCOLO PUNTUALE SU quotaPlant tramite Articolo-Cliente / Articolo / Packaging + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC WITH (NOLOCK) + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CANCELLO E CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- elimino e carico parametri! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam WITH (NOLOCK) + + -- elimino e carico lavorazioni interne! + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt WITH (NOLOCK) + + -- elimino e carico OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC WITH (NOLOCK) + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + + -- inserisco note sull'articolo + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ItemDescr', @ItemDescr) + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClienteAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodDiesGroup', @CodDiesGroup) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'TipoDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'DiamDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'HoleNumDies', @strTemp) + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + + -- inserisco lavorazione estrusione! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'CodPlant', @CodPlant + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAM', @KeyAM + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAMIL', @KeyAMIL + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'NumCambi', @NumSMED + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KgTeo', @KgTeo + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'HoleNum', @HoleNum + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'KgProdotti', SUM(KgTeo) + FROM QuoteList ql + INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM dbo.QuoteWorkInt qwi + INNER JOIN RawMatDet rmd ON qwi.Class03 = rmd.RawMat + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- inserisco lavorazione incestatura! + INSERT INTO QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco lavorazione imballo! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo produttività netta nella fase imballo + UPDATE qwi + SET NetProd = ti.TotOut/ ti.Durata + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabImbArt ti ON qwi.Class04 = ti.KeyA + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'NumImballatori', @NumImb + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase di imballo! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + + + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO dbo.QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ROW_NUMBER() OVER(ORDER BY CodUtil ASC) AS Row, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x matrice + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesPrice', @DiesPrice + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesExpLife', @DiesExpLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesEOLife', @DiesEOLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @VCF01 = @OCF01 + VC4UG + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco parametri calcolati x imballaggio + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PkgDesc', @PkgDesc + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'RMWeight', @PRMWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PWeight', @PWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PTare', @PTare + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'TareStRatio', @PTareStRatio + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + delete from tmp.ItemsRaw + where CodItem IN + ( + SELECT CodItem + FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + GROUP BY CodItem + having COUNT(*)>1 + ) + + + -- ========================================== + -- CARICO DATI IN RAW ( da Char a Tipi corretti ) + -- ========================================== + exec tmp.convertClientsRaw + exec tmp.convertTranspCostRaw + exec tmp.convertItemsRaw + exec tmp.convertProductionLogRaw + exec tmp.convertPackagRaw + exec tmp.convertDiesRaw + + -- necessario se integriamo i dati x i gruppi di matrici con un file + exec tmp.convertDiesGroupRaw + + select top 10 * FROM ext.ProductionLogRaw + select * FROM ext.ClientsRaw + select * FROM ext.ItemsRaw + select * FROM ext.PackagRaw + select * FROM ext.DiesRaw + SELECT * FROM ext.DiesGroupRaw + + -- elimino a mano dato con oltre 68 anni di evento... + select * + --delete + from ext.ProductionLogRaw + where DATEDIFF(YEAR,EventStart,EventEnd)> 10 + + exec ext.stp_mergeAgentsDet + exec ext.stp_mergeClientDet 'ProductionLogRaw' + exec ext.stp_mergeClientDet 'ClientsRaw' + exec ext.stp_mergeTranspCostDet 'TranspCostRaw' + exec ext.stp_mergePlantsDet + exec ext.stp_mergeCost2Plant + exec ext.stp_mergeItemDet 'ItemsRaw' + exec ext.stp_mergePackagDet 'ProductionLogRaw' -- 'PackagRaw' + exec ext.stp_mergePackage2ItemClient 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2Item 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2 'ProductionLog', @dateFrom, @dateTo + + exec ext.stp_mergeDiesDet + -- se ricarico diesgroup... ricarico solo i campi che nel file sono <> '' + exec ext.stp_mergeDiesGroupDet + + exec ext.stp_mergeRawMat + exec ext.stp_updateProductionLog + + ---- aggiorno quota agenti a 0.037 + ----update AgentsDet set quotaperc=0.0374 + + + SELECT DISTINCT dr.CodItem FROM ext.DiesRaw dr LEFT OUTER JOIN ItemDet id ON dr.CodItem = id.CodItem + where id.CodItemGroup is null + + select * from ClientDet + select * from ItemDet + select * from Package2ItemClient + select * from Package2Item + select * from Package2 + select * from PackagDet + select * from DiesGroupDet where EOLLife > 0 + select * from DiesDet + select * from DiesGroupDet + select * from AgentsDet + select * from PlantsDet + select * from Cost2Plant + select * from utilities + select top 100 * from ProductionLog + + --update tmp.ProductionLogRaw + --set + -- okPr = 1 + -- , okDi = 1 + -- , okQM = 1 + -- , okSc = 1 + + select distinct ProcessNum from ProductionLog + + select top 10 * from ext.ProductionLogRaw + + + ---- fix errore packaging + --update tmp.ProductionLogRaw + --SET CodPackag='4' + --where CodPackag LIKE '%4%' and CodPackag <> '4' + --select * from tmp.ProductionLogRaw where CodPackag LIKE '%4%' and CodPackag <> '4' + + SELECT p.CodDies, CodItem, CodClient, CodPackag, p.* FROM ext.ProductionLogRaw AS p + LEFT JOIN dbo.DiesDet AS d ON p.CodDies = d.CodDies + WHERE CodItem IS NULL + + + + -- parte CALCOLI!!! + + select * from QuoteList + + select * from ClientDet where CodClient='05000001048' + + select * from itemdet + where CodItem like '1PT00102%' + + select * from RawMatDet + + + --Q 1312130001 0 05000001048 1PT00102 A 7020 7673,400 1000 CPT NULL NULL NULL NULL + + SELECT --TOP 10 + dd.CodItem, pl.RawMat, dd.CodItem + '-' + pl.RawMat as KeyAM, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ,dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + ,0 as NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) as KgTeorici, SUM(Duration) AS Durata + ,ISNULL(SUM(QtyOUT),0)/ISNULL(SUM(Duration), 1) as ProduttTeo + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- ========================================== + -- re-insert dei dati di produzione x statistiche + -- ========================================== + exec stp_TPS_upsert @dateFrom, @dateTo + exec stp_TD_upsert @dateFrom , @dateTo +-- exec stp_TI_upsert @dateFrom , @dateTo -- adesso sono già calcolati e inseriti in Package2 / Package2Item + + -- ========================================== + -- salvo nuova revisione dati di produzione... + -- Va messa in ogni procedura di update con 'procedura' e versione anno-mese-giorno + -- ========================================== + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + + select * from RevHistory + + -- simulazione tempo di calcolo: circa 50/sec + ---- aggiornamento dei dati dell'offerta in oggetto + --DECLARE @tick DATETIME, + -- @idx INT = 100 + --SET @tick = GETDATE() + --WHILE @idx > 0 + --BEGIN + -- EXEC stp_QL_update 'Q', 1312130001, 0 + -- SELECT @idx = @idx - 1 + --END + --SELECT GETDATE() - @tick as tempo + + DECLARE @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 1312130001, + @QuoteRev INT = 0 + + EXEC stp_QL_update @QuoteType, @CodQuote, @QuoteRev + SELECT * FROM QuoteList WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteRM WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkInt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkExt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteOC WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteParam WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + + select top 10 * from ItemDet + + SELECT * FROM RawMatDet + + SELECT top 10 * FROM TabProdSc + SELECT top 10 * FROM TabDifett +-- SELECT * FROM TabImbArt +-- SELECT * FROM TabImbGrp + SELECT * FROM PackagDet + SELECT * FROM Package2 + + ---- test gestione selezione CodPackag corretto + --SELECT TOP 5 * FROM Package2ItemClient + --SELECT TOP 5 * FROM Package2Item + --SELECT TOP 5 * FROM Package2 + + SELECT dbo.f_getCodPackag('1EL00005', '05000001048') + --SELECT dbo.f_getCodPackag('1AN00001', '05000000137') + + + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '')]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '')]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + BEGIN + WHILE @Riga <= @TotRighe + BEGIN + SELECT @WhereCond = WhereCond FROM #tmpTable WHERE Riga = @Riga + + SET @Sql = @Sql + ' OR ' + @WhereCond; + SET @Riga = @Riga + 1; + END + END + + -- Ritorno la select eseguita + SELECT @Sql + -- ======================================================= + -- Eseguo la select/delete e ritorno i record elaborati + -- ======================================================= + EXEC sp_executesql @Sql + SELECT @@ROWCOUNT + +-- SELECT * FROM ext.ProductionLogRaw_KO + + IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL + DROP TABLE #tmpTable +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5000 THEN ActLife END ),0 ) AS EOLLife -- solo Matrici rottamate e vita > 5000KG + FROM dbo.DiesDet + GROUP BY CodDiesGroup + ) AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, QtyTot = Source.QtyTot + , QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + , DateMod = GETDATE(), UserMod = 'IMPORT_DiesRaw' + + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod ,UserMod ) + VALUES ( CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'IMPORT_DiesRaw' ) -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + + ---- a questo punto calcolo il VERO update dalle inforamzioni di dbo.DiesDet --> dbo.DiesGroupDet + --MERGE INTO dbo.DiesGroupDet AS Target + --USING ( + -- SELECT coddiesgroup, + -- Avg(Isnull(price, 0)) AS Price, + -- Count(*) AS QtyTot, + -- Count(*) - Sum(Active) AS QtyEOL, + -- Avg(Isnull(ExpLife, 0.1)) AS ExpLife, -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + -- Sum(Isnull(ActLife * (1 - Active), 0)) / (Count(*) - Sum(Active)) AS EOLLife + -- FROM dbo.DiesDet + -- WHERE ActLife > 5000 + -- GROUP BY CodDiesGroup + -- HAVING Count(*) > Sum(Active) -- ci siano rottamate + -- ) + -- AS Source + --ON Target.CodDiesGroup = Source.CodDiesGroup + --WHEN MATCHED THEN + -- UPDATE SET Price = Source.Price, QtyTot = Source.QtyTot, QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + --OUTPUT $action INTO @SummaryOfChanges; + + COMMIT tran + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 ( li ritengo come non passati ) + MERGE INTO dbo.DiesGroupDet AS Target + USING ( SELECT * FROM ext.DiesGroupRaw ) + AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET Price = CASE Source.Price WHEN 0 THEN Target.Price ELSE Source.Price END + , QtyTot = CASE Source.QtyTot WHEN 0 THEN Target.QtyTot ELSE Source.QtyTot END + , QtyEOL = CASE Source.QtyEOL WHEN 0 THEN Target.QtyEOL ELSE Source.QtyEOL END + , ExpLife = CASE Source.ExpLife WHEN 0 THEN Target.ExpLife ELSE Source.ExpLife END + , EOLLife = CASE Source.EOLLife WHEN 0 THEN Target.EOLLife ELSE Source.EOLLife END + , DateMod = GETDATE() + , UserMod = 'UPDATE_DiesGroupRaw' + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod, UserMod ) + VALUES ( Source.CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'INSERT_DiesGroupRaw' ) +-- VALUES ( CodDiesGroup, 0, 1, 0, 0.1, 0.1 ) -- mi da errori in calcoli successivi altrimenti con 0 a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + COMMIT TRAN + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + --GROUP BY plr.CodPackag + SELECT + pl.CodPackag + , SUM(QtyOUT) AS TotQta +-- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + + -- dati produttività imballo + , ROUND(SUM(QtyOUT * QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + -- , SUM(QtyOUT) AS TotOut -- unificata a TotQta + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' -- cmq filtro righe con package VUOTO + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY pl.CodPackag + ) + AS Source + ON Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + -- GROUP BY plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, TotQty, [Weight], Tare) VALUES (CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + --GROUP BY dd.CodItem, plr.CodPackag + SELECT + dd.CodItem + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttività imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodPackag + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + -- GROUP BY dd.CodItem, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + --GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + SELECT + dd.CodItem + , pl.CodClient + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttività imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM dbo.ProductionLog pl + INNER JOIN dbo.DiesDet dd ON pl.CodDies=dd.CodDies + + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodClient, pl.CodPackag + + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodClient, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2PackageClient AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + -- GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodClient, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2PackageClient AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in C = costi di contab industriale, P = da ProductionLog, S = Sistema di calcolo']]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- Cancello i record con chiave duplicata + DELETE Prod + WITH (TABLOCK) + FROM tmp.ProductionLogRaw AS Prod + INNER JOIN + ( + SELECT EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + FROM tmp.ProductionLogRaw + GROUP BY EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + HAVING COUNT(*)>1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- =============================================================================== + -- pulisco la tabella dai record con date non corrette + -- =============================================================================== + DELETE FROM tmp.ProductionLogRaw + WITH (TABLOCK) + OUTPUT deleted.* INTO tmp.ProductionLogRaw_KO -- salvo i record cancellati in tabella KO + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat + , CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags, okPr, okQM, okSc, okDi ) + WHERE EventStart >= EventEnd + OR CONVERT( BIGINT , EventStart ) + 68000000000000 <= EventEnd -- record che darebbero errore poi nel datediff > 68 anni + OR EventStart IS NULL + OR EventEnd IS NULL + +-- SELECT * FROM tmp.ProductionLogRaw_KO + + --ROLLBACK + COMMIT + + SELECT COUNT(*) AS RecordsIn FROM tmp.ProductionLogRaw + + END +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file