a6d7ea0b2f
versione TK 2.4 inclusione schema voc x tabella lingue e vocabolario
156 lines
6.8 KiB
Transact-SQL
156 lines
6.8 KiB
Transact-SQL
|
|
/***************************************
|
|
* STORED stp_registraMovMag
|
|
*
|
|
* Salva il movimento di magazzino indicato
|
|
*
|
|
* Steamware, S.E.L.
|
|
* mod: 2010.10.15
|
|
*
|
|
****************************************/
|
|
CREATE PROCEDURE BatchQueue.stp_registraMovMag
|
|
(
|
|
@NOMUS NVARCHAR(50), -- è il nome utente
|
|
@CDCAU NVARCHAR(2), -- è la causale del movimento
|
|
@CDPAR NVARCHAR(15), -- codice particolare
|
|
@CDMAG NVARCHAR(2), -- codice magazzino
|
|
@QTMOV NUMERIC(9,2), -- quantità movimento
|
|
@DAMOV NVARCHAR(8), -- data 8 cifre aaaammgg Data Movimento
|
|
@RIFFO NVARCHAR(8) -- cod UDC compresso
|
|
)
|
|
AS
|
|
-- Movimentazioni Magazzino di Massa
|
|
|
|
-- FILE TEKAL MWMV260F ( MWMV230F x TEST )
|
|
-- FILE POSS ???..... ( MWMV230F x TEST )
|
|
|
|
-- LIBR. TEST MAZZT_DTV3
|
|
-- LIBR. EFFETTIVA TEKAL TEKA_DATV3
|
|
-- LIBR. EFFETTIVA POSS ????
|
|
|
|
/* -- Variabili per test senza Stored
|
|
DECLARE @NOMUS NVARCHAR(50), -- è il nome utente
|
|
@CDCAU NVARCHAR(2), -- è la causale del movimento
|
|
@CDPAR NVARCHAR(15), -- codice particolare
|
|
@CDMAG NVARCHAR(2), -- codice magazzino
|
|
@QTMOV NUMERIC(9,2), -- quantità movimento ATTENZIONE QUESTA E' SBAGLIATA SULLA STORED
|
|
@DAMOV NVARCHAR(8), -- data 8 cifre aaaammgg
|
|
@RIFFO NVARCHAR(8) -- cod UDC compresso
|
|
|
|
-- SETTO LE VARIABILI DI PROVA PER TEST
|
|
SET @NOMUS = N'PIPPO'
|
|
SET @CDCAU = N'01'
|
|
SET @CDPAR = N'P00528503817'
|
|
SET @CDMAG = N'54'
|
|
SET @QTMOV = 1234567.51
|
|
SET @DAMOV = N'20100101'
|
|
SET @RIFFO = N'UDCPROVA'
|
|
*/
|
|
|
|
DECLARE @SQL AS NVARCHAR(4000);
|
|
DECLARE @SqlOK AS INT;
|
|
DECLARE @As400File AS NVARCHAR(50) = '';
|
|
DECLARE @As400Linked AS NVARCHAR(50) = ''; -- Linked Server AS400
|
|
|
|
SET @SqlOk = 0; -- variabile test se in errore
|
|
-- Verificare prima se è già stato inserito? usare in RIFFO idxBatch?
|
|
|
|
-- allineo il CDMAG a destra con zeri a SX mod. 07/09/2012
|
|
SET @CDMAG = RIGHT('00' + LTRIM(RTRIM(@CDMAG)), 2);
|
|
-- metto il particolare in Maiuscolo altrimenti ACG lo scarta
|
|
SET @CDPAR = UPPER(@CDPAR);
|
|
|
|
-- In base al nome del DB e della stored recupero il Linked Server e file di AS400
|
|
SET @As400Linked = ( SELECT dbo.f_getLikedAS400(DB_NAME()) );
|
|
SET @As400File = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME() , OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID) ) )
|
|
-- SET @As400File = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME(), 'stp_registraMovMag' ) );
|
|
|
|
-- Eseguo l'istruzione inserimento movimento verso AS400 con controllo errori
|
|
BEGIN TRY
|
|
|
|
-- TEST per generare errore
|
|
-- SET @XDTPRO = 99999920100723 -- data 8 cifre aaaammgg
|
|
|
|
-- ==============================================================
|
|
-- Creo l'istruzione SQL e faccio chiamata su AS400
|
|
-- ==============================================================
|
|
|
|
SET @SQL = N'INSERT INTO OPENQUERY(' + @As400Linked
|
|
SET @SQL = @SQL + N', ''SELECT NOMUS, CDCAU, CDPAR, CDMAG, QTMOV, DAMOV, RIFFO'
|
|
SET @SQL = @SQL + ' FROM ' + @As400File + ''') '
|
|
SET @SQL = @SQL + 'VALUES ( @NOMUS , @CDCAU , @CDPAR , @CDMAG , @QTMOV , @DAMOV , @RIFFO )'
|
|
|
|
-- Eseguo il comando T-SQL verso AS400
|
|
EXEC sp_executesql @SQL, N'@NOMUS NVARCHAR(50)
|
|
,@CDCAU NVARCHAR(2)
|
|
,@CDPAR NVARCHAR(15)
|
|
,@CDMAG NVARCHAR(2)
|
|
,@QTMOV NUMERIC(9,2)
|
|
,@DAMOV NVARCHAR(8)
|
|
,@RIFFO NVARCHAR(8)' -- Definizione Parametri
|
|
,@NOMUS , @CDCAU , @CDPAR , @CDMAG , @QTMOV , @DAMOV , @RIFFO
|
|
|
|
-- EXEC @SqlOK = sp_executesql @SQL se faccio così non mi valorizza la variabile se da errore
|
|
|
|
/* --VECCHIA INSERT
|
|
INSERT INTO OPENQUERY( AS400XXX,
|
|
'SELECT NOMUS , CDCAU , CDPAR , CDMAG , QTMOV , DAMOV , RIFFO
|
|
FROM MAZZT_DTV3.MWMV230F' )
|
|
VALUES ( @NOMUS , @CDCAU , @CDPAR , @CDMAG , @QTMOV , @DAMOV , @RIFFO )
|
|
*/
|
|
END TRY
|
|
BEGIN CATCH
|
|
-- PRINT ERROR_NUMBER()
|
|
SET @SqlOK = ERROR_NUMBER();
|
|
|
|
-- Uso RAISERROR mandare in errore la procedura e x per tornare le info sull'errore originale che ha portato l'esecuzione nel blocco CATCH
|
|
-- DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT;
|
|
-- SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
|
|
-- RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState); -- Se non uso RAISERROR la procedura non mi da errore es. se schedulata
|
|
END CATCH
|
|
|
|
-- Test di lettura - Modifica 06/09/2012
|
|
IF @SqlOK = 0
|
|
BEGIN
|
|
|
|
SET @SqlOK = -1; -- lo rimetto a 0 solo se lettura è OK
|
|
-- Controllo che il record sia stato inserito in modo corretto su AS400
|
|
DECLARE @SQL2 AS NVARCHAR(4000);
|
|
DECLARE @LettoOk AS INT;
|
|
|
|
SET @SQL2 = N'SELECT @LettoOk = COUNT(*) FROM OPENQUERY(' + @As400Linked
|
|
SET @SQL2 = @SQL2 + N', ''SELECT RIFFO FROM ' + @As400File
|
|
SET @SQL2 = @SQL2 + ' WHERE '
|
|
SET @SQL2 = @SQL2 + ' NOMUS = ''''' + @NOMUS + '''''' -- Utente
|
|
SET @SQL2 = @SQL2 + ' AND CDCAU = ''''' + @CDCAU + '''''' -- Causale
|
|
SET @SQL2 = @SQL2 + ' AND CDPAR = ''''' + @CDPAR + '''''' -- Particolare
|
|
SET @SQL2 = @SQL2 + ' AND CDMAG = ''''' + @CDMAG + '''''' -- Magazzino
|
|
SET @SQL2 = @SQL2 + ' AND QTMOV = ' + CAST(@QTMOV AS NVARCHAR(15)) -- Qta
|
|
SET @SQL2 = @SQL2 + ' AND DAMOV = ' + @DAMOV + '' -- Data
|
|
SET @SQL2 = @SQL2 + ' AND RIFFO = ''''' + @RIFFO + '''''' -- Riferimento ( UDC )
|
|
SET @SQL2 = @SQL2 + ''' ) '
|
|
|
|
EXEC sp_executesql @SQL2, N'@LettoOk INT OUTPUT', @LettoOk OUTPUT;
|
|
|
|
-- Se non trovo record Movimento UDC lo imposto come errore -2 altrimenti tutto OK
|
|
IF @LettoOk = 0 SET @SqlOK = -2; ELSE SET @SqlOK = 0;
|
|
END
|
|
-- Fine Modifica - Modifica 06/09/2012
|
|
|
|
-- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK
|
|
INSERT INTO RawData.AS400_Comandi
|
|
SELECT GETDATE(), 'stp_registraMovMag',
|
|
@SQL + ' parametri :'
|
|
+ @NOMUS + ',' + @CDCAU + ',' + @CDPAR + ',' + @CDMAG + ',' + CONVERT(VARCHAR(20) , @QTMOV) + ',' + @DAMOV + ',' + @RIFFO, @SqlOk
|
|
|
|
RETURN @SqlOK;
|
|
|
|
/* TEST e DELETE
|
|
SELECT * FROM OPENQUERY( AS400XXX, 'SELECT NOMUS ,CDCAU ,CDPAR ,CDMAG ,QTMOV ,DAMOV ,RIFFO FROM MAZZ_DATV3.MWMV230F' )
|
|
|
|
DELETE
|
|
OPENQUERY( AS400XXX, 'SELECT * FROM MAZZT_DTV3.MWMV230F WHERE NOMUS = ''PIPPO'' ')
|
|
|
|
DELETE AS400XXX.A60220DC.MAZZT_DTV3.MWMV230F WHERE NOMUS_CANCELLA = 'UTENTEGMW1'
|
|
*/
|