Inquiridor
Openquery

Pergunta
-
Boa noite,
preciso de uma help urgente....tenha a storade procedure abaixo em openquery, e a mesma não pode ser executada por meio de openquery, tem q ser por update..
Grato e no aguardo,
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO/*-----------------------------------------------------------------------------------*/
/* Empresa : DBACorp */
/* Arquivo : - */
/* Descricao : Executa carga INFORMIX lendo informacoes no SQL SERVER */
/* Modulo : - */
/* Parametros Externos : NÃO */
/* Alteracoes Efetuadas : Tratamento de datas (o sap naum aceita null) */
/* DATA AUTOR / SIGLA DETALHAMENTO */
/* --------- ---------------------------- ----------------------- */
/* 28/12/05 Breno Tozo */
/* 17/10/06 Rodrigo Salviatto Alterado estrutura para gravar os pedidos*/
/* um a uma com seus respectivos itens. */
/* 18/10/06 Rodrigo Salviatto Alterado estrutura para gravar os */
/* bloqueios baseado nos pedidos */
/*-----------------------------------------------------------------------------------*/ALTER PROCEDURE Prc_UPPEDIDOEITENS AS
DECLARE @v_mandit as char (3)
--variaveis uppedido
DECLARE @v_CCODIGOCLIENTE as char (16)
DECLARE @v_CCODIGOEMPRESA as char (2)
DECLARE @v_CCODIGOPEDIDO as char (20)
DECLARE @v_CCODIGOTIPOPEDIDO as char (4)
DECLARE @v_CCODIGOPEDIDOORIGINAL as char (20)
DECLARE @v_LENTREGABONIFICACAO as numeric (1)
DECLARE @v_LCODIGOVENDOR as numeric (1)
DECLARE @v_LORCAMENTO as numeric (1)
DECLARE @v_CCODIGOENDERECOENTREGA as char (14)
DECLARE @v_CCODIGOENDERECOCOBRANCA as char (14)
DECLARE @v_DEMISSAO as datetime
DECLARE @v_DTRANSMISSAO as datetime
DECLARE @v_DFATURAMENTO as datetime
DECLARE @v_DENTREGA as datetime
DECLARE @v_LDATAFATURAMENTO as numeric (1)
DECLARE @v_COBSERVACAO as varchar (343)
DECLARE @v_NVALORTOTAL as numeric (15,2)
DECLARE @v_NTOTALIPI as numeric (15,2)
DECLARE @v_NTOTALICMS as numeric (15,2)
DECLARE @v_NTOTALSUBSTRIBUTARIA as numeric (15,2)
DECLARE @v_NTOTALMERCADORIA as numeric (15,2)
DECLARE @v_NTOTALRECEITALIQUIDA as numeric (15,2)
DECLARE @v_NPESOTOTAL as numeric (12,3)
DECLARE @v_CCODIGOVERBA as char (4)
DECLARE @v_CCODIGODEPOSITO as char (4)
DECLARE @v_CTIPOFRETE as char (1)
DECLARE @v_CCODIGOSTATUSPEDIDO as char (2)
DECLARE @v_CCODIGOPEDIDOCLIENTE as char (22)
DECLARE @v_LBLOQUEIO as numeric (1)
DECLARE @v_LBLOQUEIOCOMERCIAL as numeric (1)
DECLARE @v_CCODIGOCOMERCIAL as char (8)
DECLARE @v_DCHEGADARO as datetime
DECLARE @v_DTRANSMISSAOERP as datetime--variaveis item pedido
DECLARE @v_iCCODIGOCLIENTE as char (16)
DECLARE @v_iCCODIGOEMPRESA as char (2)
DECLARE @v_iCCODIGOPEDIDO as char (20)
DECLARE @v_iCSEQUENCIAITEM as char (4)
DECLARE @v_iCCODIGOPRODUTO as char (8)
DECLARE @v_iNQUANTIDADE as numeric (6, 0)
DECLARE @v_iNQUANTIDADEBM as numeric (6, 0)
DECLARE @v_iNDESCONTONF as numeric (5, 2) DECLARE @v_iNVALORUNITARIO as numeric (12,2)
DECLARE @v_iNVALORTOTAL as numeric (12,2)
DECLARE @v_iCUN as char (2)
DECLARE @v_iCCODIGOCONDICAOPAGAMENTO as char (4)
DECLARE @v_iNPERCENTUALDESCONTOBM as numeric (7,4)
DECLARE @v_iNPESO as numeric (12,4)
DECLARE @v_iCCODIGOTABELAPRECO as char (3)
DECLARE @v_iNVALORTABELAPRECO as numeric (12,2)
DECLARE @v_iDVALIDADEINICIAL as datetime
DECLARE @v_iDVALIDADEFINAL as datetime
DECLARE @v_iDLIMITE as datetime
DECLARE @v_iNDESCONTONFTATICA as numeric (5,2)
DECLARE @v_iNPERCENTUALDESCONTOBMTATICA as numeric (7,4)
DECLARE @v_iNDESCONTOADICIONALTATICA as numeric (5,2)
DECLARE @v_iDTRANSMISSAOERP as datetime--variaveis pedido bloqueio
DECLARE @v_pCCODIGOCLIENTE char (16)
DECLARE @v_pCCODIGOEMPRESA char (2)
DECLARE @v_pCCODIGOPEDIDO char (20)
DECLARE @v_pCSEQUENCIAITEM char (4)
DECLARE @v_pCOBSERVACAO varchar (300)
DECLARE @v_pDLIBERACAO datetime
DECLARE @v_pCCODIGOCOMERCIAL char (8)
DECLARE @v_pDTRANSMISSAOERP datetime
DECLARE @v_pCCODIGOSEQUENCIA char (4)DECLARE @v_DEMISSAOFNL varchar(8)
DECLARE @v_DTRANSMISSAOFNL varchar(8)
DECLARE @v_DFATURAMENTOFNL varchar(8)
DECLARE @v_DENTREGAFNL varchar(8)
DECLARE @v_DCHEGADAROFNL varchar(8)DECLARE @v_iDVALIDADEINICIALFNL varchar(8)
DECLARE @v_iDVALIDADEFINALFNL varchar(8)
DECLARE @v_iDLIMITEFNL varchar(8)
DECLARE @v_DataliberacaoFNL varchar(8)-- ******************************************************************
-- PEDIDO
-- ******************************************************************
/* Declara o cursor C1 ( table UPPEDIDOS no Sqlserver ), obtendo todos os registros que possuem
a coluna dtransmissaoerp = NULL */
DECLARE C1 CURSOR SCROLL KEYSET OPTIMISTIC FOR
SELECT CCODIGOCLIENTE
, CCODIGOEMPRESA
, CCODIGOPEDIDO
, CCODIGOTIPOPEDIDO
, CCODIGOPEDIDOORIGINAL
, LENTREGABONIFICACAO
, LCODIGOVENDOR
, LORCAMENTO
, CCODIGOENDERECOENTREGA
, CCODIGOENDERECOCOBRANCA
, DEMISSAO
, DTRANSMISSAO
, DFATURAMENTO
, DENTREGA
, LDATAFATURAMENTO
, COBSERVACAO
, NVALORTOTAL
, NTOTALIPI
, NTOTALICMS
, NTOTALSUBSTRIBUTARIA
, NTOTALMERCADORIA
, NTOTALRECEITALIQUIDA
, NPESOTOTAL
, CCODIGOVERBA
, CCODIGODEPOSITO
, CTIPOFRETE
, CASE CCODIGOSTATUSPEDIDO WHEN null THEN '00' ELSE isnull(CCODIGOSTATUSPEDIDO,'') END AS CCODIGOSTATUSPEDIDO
, CCODIGOPEDIDOCLIENTE
, LBLOQUEIO
, LBLOQUEIOCOMERCIAL
, CCODIGOCOMERCIAL
, DCHEGADARO
, DTRANSMISSAOERP
FROM UPPEDIDO
WHERE DTRANSMISSAOERP IS NULL
ORDER BY CCODIGOCLIENTE,CCODIGOPEDIDO
SELECT @v_mandit = '500'
OPEN C1FETCH NEXT FROM C1 INTO @v_CCODIGOCLIENTE
, @v_CCODIGOEMPRESA
, @v_CCODIGOPEDIDO
, @v_CCODIGOTIPOPEDIDO
, @v_CCODIGOPEDIDOORIGINAL
, @v_LENTREGABONIFICACAO
, @v_LCODIGOVENDOR
, @v_LORCAMENTO
, @v_CCODIGOENDERECOENTREGA
, @v_CCODIGOENDERECOCOBRANCA
, @v_DEMISSAO
, @v_DTRANSMISSAO
, @v_DFATURAMENTO
, @v_DENTREGA
, @v_LDATAFATURAMENTO
, @v_COBSERVACAO
, @v_NVALORTOTAL
, @v_NTOTALIPI
, @v_NTOTALICMS
, @v_NTOTALSUBSTRIBUTARIA
, @v_NTOTALMERCADORIA
, @v_NTOTALRECEITALIQUIDA
, @v_NPESOTOTAL
, @v_CCODIGOVERBA
, @v_CCODIGODEPOSITO
, @v_CTIPOFRETE
, @v_CCODIGOSTATUSPEDIDO
, @v_CCODIGOPEDIDOCLIENTE
, @v_LBLOQUEIO
, @v_LBLOQUEIOCOMERCIAL
, @v_CCODIGOCOMERCIAL
, @v_DCHEGADARO
, @v_DTRANSMISSAOERPSET XACT_ABORT ON
SET REMOTE_PROC_TRANSACTIONS ON
/* rsalviatto (2006/10/18 ) - Abre o loop, caso existam registros no cursor e este pedido nao
exista no SAP/Informix para evitar erro de duplicidade */
WHILE (@@FETCH_STATUS = 0) AND NOT EXISTS (SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO
FROM OPENQUERY(sap,'SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO
FROM sapr3.ZSFATB0056')
Where codcliente = @v_ccodigocliente
and codempresa = @v_ccodigoempresa
and codpedido = @v_ccodigopedido)
BEGIN
-- Define as variáveis do PEDIDO
SET @v_DEMISSAOFNL = NULL
SET @v_DTRANSMISSAOFNL = NULL
SET @v_DFATURAMENTOFNL = NULL
SET @v_DENTREGAFNL = NULL
SET @v_DCHEGADAROFNL = NULLSET @v_DEMISSAOFNL = CONVERT(VARCHAR,YEAR(@v_DEMISSAO)) +
+ CASE (LEN(MONTH(@v_DEMISSAO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_DEMISSAO)) ELSE CONVERT(VARCHAR, MONTH(@v_DEMISSAO)) END
+ CASE (LEN(DAY(@v_DEMISSAO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_DEMISSAO)) ELSE CONVERT(VARCHAR, DAY(@v_DEMISSAO)) ENDSET @v_DTRANSMISSAOFNL = CONVERT(VARCHAR,YEAR(@v_DTRANSMISSAO))+
+ CASE (LEN(MONTH(@v_DTRANSMISSAO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_DTRANSMISSAO)) ELSE CONVERT(VARCHAR, MONTH(@v_DTRANSMISSAO)) END
+ CASE (LEN(DAY(@v_DTRANSMISSAO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_DTRANSMISSAO)) ELSE CONVERT(VARCHAR, DAY(@v_DTRANSMISSAO)) ENDSET @v_DFATURAMENTOFNL = CONVERT(VARCHAR,YEAR(@v_DFATURAMENTO))
+ CASE (LEN(MONTH(@v_DFATURAMENTO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_DFATURAMENTO)) ELSE CONVERT(VARCHAR, MONTH(@v_DFATURAMENTO)) END
+ CASE (LEN(DAY(@v_DFATURAMENTO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_DFATURAMENTO)) ELSE CONVERT(VARCHAR, DAY(@v_DFATURAMENTO)) ENDIF @v_DENTREGA is not null
BEGIN
SET @v_DENTREGAFNL = CONVERT(VARCHAR,YEAR(@v_DENTREGA))
+ CASE (LEN(MONTH(@v_DENTREGA))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_DENTREGA)) ELSE CONVERT(VARCHAR, MONTH(@v_DENTREGA)) END
+ CASE (LEN(DAY(@v_DENTREGA))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_DENTREGA)) ELSE CONVERT(VARCHAR, DAY(@v_DENTREGA)) ENDEND
ELSE SET @v_DENTREGAFNL = @v_DFATURAMENTOFNL
SET @v_DCHEGADAROFNL = CONVERT(VARCHAR,YEAR(@v_DCHEGADARO))
+ CASE (LEN(MONTH(@v_DCHEGADARO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_DCHEGADARO)) ELSE CONVERT(VARCHAR, MONTH(@v_DCHEGADARO)) END
+ CASE (LEN(DAY(@v_DCHEGADARO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_DCHEGADARO)) ELSE CONVERT(VARCHAR, DAY(@v_DCHEGADARO)) END-- Insert na tabela do INFORMIX - cabeçalho do PEDIDO
INSERT OPENQUERY(sap, 'SELECT
mandt
, codcliente
, codempresa
, codpedido
, codtipopedido
, codpedoriginal
, bonificacao
, codvendor
, orcamento
, codendentrega
, codendcobranca
, emissao
, transmissao
, faturamento
, entrega
, dtfaturamento
, observacao
, valortotal
, totalipi
, totalicms
, totalsubtribut
, totalmercadoria
, totalrecliquida
, pesototal
, ccodigoverba
, coddeposito
, codtpfrete
, statuspedido
, codpedidocliente
, bloqueio
, bloqcomercial
, codcomercial
, chegadaro FROM sapr3.ZSFATB0056')
VALUES(@v_mandit
, @v_CCODIGOCLIENTE
, @v_CCODIGOEMPRESA
, @v_CCODIGOPEDIDO
, @v_CCODIGOTIPOPEDIDO
, @v_CCODIGOPEDIDOORIGINAL
, @v_LENTREGABONIFICACAO
, @v_LCODIGOVENDOR
, @v_LORCAMENTO
, @v_CCODIGOENDERECOENTREGA
, @v_CCODIGOENDERECOCOBRANCA
, @v_DEMISSAOFNL
, @v_DTRANSMISSAOFNL
, @v_DFATURAMENTOFNL
, @v_DENTREGAFNL
, @v_LDATAFATURAMENTO
, @v_COBSERVACAO
, @v_NVALORTOTAL
, @v_NTOTALIPI
, @v_NTOTALICMS
, @v_NTOTALSUBSTRIBUTARIA
, @v_NTOTALMERCADORIA
, @v_NTOTALRECEITALIQUIDA
, @v_NPESOTOTAL
, @v_CCODIGOVERBA
, @v_CCODIGODEPOSITO
, @v_CTIPOFRETE
, @v_CCODIGOSTATUSPEDIDO
, @v_CCODIGOPEDIDOCLIENTE
, @v_LBLOQUEIO
, @v_LBLOQUEIOCOMERCIAL
, @v_CCODIGOCOMERCIAL
, @v_DCHEGADAROFNL
)
BEGIN TRAN
--Atualiza os registros do SQLSERVER que foram migrados para o SAP.
UPDATE UPPEDIDO
SET DTRANSMISSAOERP = getdate()
WHERE DTRANSMISSAOERP IS NULL
AND CCODIGOEMPRESA=@v_CCODIGOEMPRESA
AND CCODIGOCLIENTE=@v_CCODIGOCLIENTE
AND CCODIGOPEDIDO=@v_CCODIGOPEDIDO
-- Verifica se ocorreu algum erro no UPDATE
IF (@@ERROR = 0)
COMMIT TRAN
ELSE
ROLLBACK TRAN-- ******************************************************************
-- ITEM DO PEDIDO
-- ******************************************************************
/* Declara o cursor C2 ( table UPPEDIDOSITEMX no Sqlserver ), obtendo todos os registros que possuem
a coluna dtransmissaoerp = NULL e que refere-se aos pedidos*/
DECLARE C2 CURSOR SCROLL KEYSET OPTIMISTIC FOR
SELECT CCODIGOCLIENTE
, CCODIGOEMPRESA
, CCODIGOPEDIDO
, CSEQUENCIAITEM
, CCODIGOPRODUTO
, NQUANTIDADE
, NQUANTIDADEBM
, NDESCONTONF
, NVALORUNITARIO
, NVALORTOTAL
, CUN
, CCODIGOCONDICAOPAGAMENTO
, NPERCENTUALDESCONTOBM
, NPESO
, CCODIGOTABELAPRECO
, NVALORTABELAPRECO
, DVALIDADEINICIAL
, DVALIDADEFINAL
, DLIMITE
, NDESCONTONFTATICA
, NPERCENTUALDESCONTOBMTATICA
, NDESCONTOADICIONALTATICA
, DTRANSMISSAOERP
FROM UPPEDIDOITEMX
WHERE DTRANSMISSAOERP IS NULL
AND CCODIGOEMPRESA=@v_CCODIGOEMPRESA
AND CCODIGOCLIENTE=@v_CCODIGOCLIENTE
AND CCODIGOPEDIDO=@v_CCODIGOPEDIDO
ORDER BY CCODIGOCLIENTE,CCODIGOPEDIDOOPEN C2
FETCH NEXT FROM C2 INTO @v_iCCODIGOCLIENTE
, @v_iCCODIGOEMPRESA , @v_iCCODIGOPEDIDO
, @v_iCSEQUENCIAITEM
, @v_iCCODIGOPRODUTO
, @v_iNQUANTIDADE
, @v_iNQUANTIDADEBM
, @v_iNDESCONTONF
, @v_iNVALORUNITARIO
, @v_iNVALORTOTAL
, @v_iCUN
, @v_iCCODIGOCONDICAOPAGAMENTO
, @v_iNPERCENTUALDESCONTOBM
, @v_iNPESO
, @v_iCCODIGOTABELAPRECO
, @v_iNVALORTABELAPRECO
, @v_iDVALIDADEINICIAL
, @v_iDVALIDADEFINAL
, @v_iDLIMITE
, @v_iNDESCONTONFTATICA
, @v_iNPERCENTUALDESCONTOBMTATICA
, @v_iNDESCONTOADICIONALTATICA
, @v_iDTRANSMISSAOERP
WHILE (@@FETCH_STATUS = 0)
BEGIN-- Define as variáveis da tabela PEDIDO ITEM
SET @v_iDVALIDADEINICIALFNL = null
SET @v_iDVALIDADEFINALFNL = null
SET @v_iDLIMITEFNL = nullSET @v_iDVALIDADEINICIALFNL = CONVERT(VARCHAR,YEAR(@v_iDVALIDADEINICIAL)) +
+ CASE (LEN(MONTH(@v_iDVALIDADEINICIAL))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_iDVALIDADEINICIAL)) ELSE CONVERT(VARCHAR, MONTH(@v_iDVALIDADEINICIAL)) END
+ CASE (LEN(DAY(@v_iDVALIDADEINICIAL))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_iDVALIDADEINICIAL)) ELSE CONVERT(VARCHAR, DAY(@v_iDVALIDADEINICIAL)) ENDSET @v_iDVALIDADEFINALFNL = CONVERT(VARCHAR,YEAR(@v_iDVALIDADEFINAL)) +
+ CASE (LEN(MONTH(@v_iDVALIDADEFINAL))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_iDVALIDADEFINAL)) ELSE CONVERT(VARCHAR, MONTH(@v_iDVALIDADEFINAL)) END
+ CASE (LEN(DAY(@v_iDVALIDADEFINAL))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_iDVALIDADEFINAL)) ELSE CONVERT(VARCHAR, DAY(@v_iDVALIDADEFINAL)) ENDSET @v_iDLIMITEFNL = CONVERT(VARCHAR,YEAR(@v_iDLIMITE)) +
+ CASE (LEN(MONTH(@v_iDLIMITE))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_iDLIMITE)) ELSE CONVERT(VARCHAR, MONTH(@v_iDLIMITE)) END
+ CASE (LEN(DAY(@v_iDLIMITE))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_iDLIMITE)) ELSE CONVERT(VARCHAR, DAY(@v_iDLIMITE)) ENDINSERT OPENQUERY(sap, 'SELECT
mandt
, codcliente
, codempresa
, codpedido
, sequencialitem
, codproduto
, quantidade
, qtdebm
, descontonf
, valorunitario
, valortotal
, cun
, codcondpagto
, percdescbm
, peso
, codtabelapreco
, VALORTABELAPRECO
, validadeinicial
, validadefinal
, limite
, desctatica
, percdescbmtatica
, descadctatica
FROM SAPR3.ZSFATB0057')
VALUES( @v_mandit
, @v_iCCODIGOCLIENTE
, @v_iCCODIGOEMPRESA
, @v_iCCODIGOPEDIDO
, @v_iCSEQUENCIAITEM
, @v_iCCODIGOPRODUTO
, @v_iNQUANTIDADE
, @v_iNQUANTIDADEBM
, @v_iNDESCONTONF
, @v_iNVALORUNITARIO
, @v_iNVALORTOTAL
, @v_iCUN
, @v_iCCODIGOCONDICAOPAGAMENTO
, @v_iNPERCENTUALDESCONTOBM
, @v_iNPESO
, @v_iCCODIGOTABELAPRECO
, @v_iNVALORTABELAPRECO
, @v_iDVALIDADEINICIALFNL
, @v_iDVALIDADEFINALFNL
, @v_iDLIMITEFNL
, @v_iNDESCONTONFTATICA
, @v_iNPERCENTUALDESCONTOBMTATICA
, @v_iNDESCONTOADICIONALTATICA
)
BEGIN TRAN
--Atualiza data de envio ao SAP
UPDATE UPPEDIDOITEMX
SET DTRANSMISSAOERP = getdate()
WHERE DTRANSMISSAOERP IS NULL
AND CCODIGOEMPRESA=@v_ICCODIGOEMPRESA
AND CCODIGOCLIENTE=@v_ICCODIGOCLIENTE
AND CCODIGOPEDIDO=@v_ICCODIGOPEDIDO
-- Verifica se ocorreu algum erro na execucao da procedure
IF (@@ERROR = 0)
COMMIT TRAN
ELSE
ROLLBACK TRAN
-- Busca o proximo item do pedido
FETCH NEXT FROM C2 INTO @v_iCCODIGOCLIENTE
, @v_iCCODIGOEMPRESA
, @v_iCCODIGOPEDIDO
, @v_iCSEQUENCIAITEM
, @v_iCCODIGOPRODUTO
, @v_iNQUANTIDADE
, @v_iNQUANTIDADEBM
, @v_iNDESCONTONF
, @v_iNVALORUNITARIO
, @v_iNVALORTOTAL
, @v_iCUN
, @v_iCCODIGOCONDICAOPAGAMENTO
, @v_iNPERCENTUALDESCONTOBM
, @v_iNPESO
, @v_iCCODIGOTABELAPRECO
, @v_iNVALORTABELAPRECO
, @v_iDVALIDADEINICIAL
, @v_iDVALIDADEFINAL
, @v_iDLIMITE
, @v_iNDESCONTONFTATICA
, @v_iNPERCENTUALDESCONTOBMTATICA
, @v_iNDESCONTOADICIONALTATICA
, @v_iDTRANSMISSAOERP
END
-- Fecha o cursor dos itens para reiniciar no proximo pedido
CLOSE C2
DEALLOCATE C2-- ALTERACAO NO BLOQUEIO
-- ******************************************************************
-- PEDIDO BLOQUEIO
-- ******************************************************************
/* Declara o cursor C1 buscando os dados na tabela do INFORMIX */
DECLARE C3 CURSOR SCROLL KEYSET OPTIMISTIC FOR
SELECT CCODIGOCLIENTE
, CCODIGOEMPRESA
, CCODIGOPEDIDO
, CSEQUENCIAITEM
, COBSERVACAO
, DLIBERACAO
, CCODIGOCOMERCIAL
, DTRANSMISSAOERP
, CCODIGOSEQUENCIA
FROM UPPEDIDOBLOQUEIO
WHERE DTRANSMISSAOERP IS NULL
AND CCODIGOEMPRESA=@v_CCODIGOEMPRESA
AND CCODIGOCLIENTE=@v_CCODIGOCLIENTE
AND CCODIGOPEDIDO=@v_CCODIGOPEDIDO
ORDER BY CCODIGOCLIENTEOPEN C3
FETCH NEXT FROM C3 INTO @v_pCCODIGOCLIENTE
, @v_pCCODIGOEMPRESA
, @v_pCCODIGOPEDIDO
, @v_pCSEQUENCIAITEM
, @v_pCOBSERVACAO
, @v_pDLIBERACAO
, @v_pCCODIGOCOMERCIAL
, @v_pDTRANSMISSAOERP
, @v_pCCODIGOSEQUENCIA
IF EXISTS (SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO, ITEM, SEQUENCIALITEM
FROM OPENQUERY(sap,'SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO, ITEM, SEQUENCIALITEM
FROM sapr3.ZSFATB0058')
Where codcliente = @v_Pccodigocliente
and codempresa = @v_Pccodigoempresa
and codpedido = @v_Pccodigopedido
and item = @v_pCSEQUENCIAITEM
and sequencialitem = @v_pCCODIGOSEQUENCIA)
FETCH NEXT FROM C3 INTO @v_pCCODIGOCLIENTE
, @v_pCCODIGOEMPRESA
, @v_pCCODIGOPEDIDO
, @v_pCSEQUENCIAITEM
, @v_pCOBSERVACAO
, @v_pDLIBERACAO
, @v_pCCODIGOCOMERCIAL
, @v_pDTRANSMISSAOERP
, @v_pCCODIGOSEQUENCIAWHILE (@@FETCH_STATUS = 0) AND NOT EXISTS (SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO, ITEM, SEQUENCIALITEM
FROM OPENQUERY(sap,'SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO, ITEM, SEQUENCIALITEM
FROM sapr3.ZSFATB0058')
Where codcliente = @v_ccodigocliente
and codempresa = @v_ccodigoempresa
and codpedido = @v_ccodigopedido
and item = @v_pCSEQUENCIAITEM
and sequencialitem = @v_pCCODIGOSEQUENCIA)
BEGIN
-- Definie as variáveis da tabela BLOQUEIO PEDIDOS
SET @v_DataliberacaoFNL = NULL
IF @v_pDLIBERACAO IS NULL set @v_pDLIBERACAO = getdate()
SET @v_DataliberacaoFNL = CONVERT(VARCHAR,YEAR(@v_pDLIBERACAO)) +
+ CASE (LEN(MONTH(@v_pDLIBERACAO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, MONTH(@v_pDLIBERACAO)) ELSE CONVERT(VARCHAR, MONTH(@v_pDLIBERACAO)) END
+ CASE (LEN(DAY(@v_pDLIBERACAO))) WHEN 1 THEN '0' + CONVERT(VARCHAR, DAY(@v_pDLIBERACAO)) ELSE CONVERT(VARCHAR, DAY(@v_pDLIBERACAO)) END
-- Insert na tabela de pedidos bloqueados no Informix
print 'bloqueio'
print @v_pCCODIGOCLIENTE
print @v_pCCODIGOEMPRESA
print @v_pCCODIGOPEDIDO
INSERT OPENQUERY(sap, 'SELECT
mandt
, codcliente
, codempresa
, codpedido
, item
, observacao
, liberacao
, codcomercial
, sequencialitem
FROM sapr3.ZSFATB0058')
VALUES( @v_mandit
, @v_pCCODIGOCLIENTE
, @v_pCCODIGOEMPRESA
, @v_pCCODIGOPEDIDO
, @v_pCSEQUENCIAITEM
, @v_pCOBSERVACAO
, @v_DataliberacaoFNL --CONVERT(varchar, @v_pDLIBERACAO,12)
, @v_pCCODIGOCOMERCIAL
, @v_pCCODIGOSEQUENCIA
)
-- Atualiza data de envio ao SAP
BEGIN TRAN
UPDATE UPPEDIDOBLOQUEIO
SET DTRANSMISSAOERP = getdate()
WHERE DTRANSMISSAOERP IS NULL
AND CCODIGOEMPRESA=@v_PCCODIGOEMPRESA
AND CCODIGOCLIENTE=@v_PCCODIGOCLIENTE
AND CCODIGOPEDIDO=@v_PCCODIGOPEDIDO
-- Verifica se ocorreu algum erro na execucao da procedure
IF (@@ERROR = 0)
COMMIT TRAN
ELSE
ROLLBACK TRAN
-- Busca novos registros
FETCH NEXT FROM C3 INTO @v_pCCODIGOCLIENTE
, @v_pCCODIGOEMPRESA
, @v_pCCODIGOPEDIDO
, @v_pCSEQUENCIAITEM
, @v_pCOBSERVACAO
, @v_pDLIBERACAO
, @v_pCCODIGOCOMERCIAL
, @v_pDTRANSMISSAOERP
, @v_pCCODIGOSEQUENCIA/*IF EXISTS (SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO, ITEM, SEQUENCIALITEM
FROM OPENQUERY(sap,'SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO, ITEM, SEQUENCIALITEM
FROM sapr3.ZSFATB0058')
Where codcliente = @v_ccodigocliente
and codempresa = @v_Ccodigoempresa
and codpedido = @v_ccodigopedido
and item = @v_pCSEQUENCIAITEM
and sequencialitem = @v_pCCODIGOSEQUENCIA)
FETCH NEXT FROM C3 INTO @v_pCCODIGOCLIENTE
, @v_pCCODIGOEMPRESA
, @v_pCCODIGOPEDIDO
, @v_pCSEQUENCIAITEM
, @v_pCOBSERVACAO
, @v_pDLIBERACAO
, @v_pCCODIGOCOMERCIAL
, @v_pDTRANSMISSAOERP
, @v_pCCODIGOSEQUENCIA */
ENDCLOSE C3
DEALLOCATE C3
-- ALTERACAO NO BLOQUEIO
--Busca o proximo pedido para reiniciar o loop
FETCH NEXT FROM C1 INTO @v_CCODIGOCLIENTE
, @v_CCODIGOEMPRESA
, @v_CCODIGOPEDIDO
, @v_CCODIGOTIPOPEDIDO
, @v_CCODIGOPEDIDOORIGINAL
, @v_LENTREGABONIFICACAO
, @v_LCODIGOVENDOR
, @v_LORCAMENTO
, @v_CCODIGOENDERECOENTREGA
, @v_CCODIGOENDERECOCOBRANCA
, @v_DEMISSAO
, @v_DTRANSMISSAO
, @v_DFATURAMENTO
, @v_DENTREGA
, @v_LDATAFATURAMENTO
, @v_COBSERVACAO
, @v_NVALORTOTAL
, @v_NTOTALIPI
, @v_NTOTALICMS
, @v_NTOTALSUBSTRIBUTARIA
, @v_NTOTALMERCADORIA
, @v_NTOTALRECEITALIQUIDA
, @v_NPESOTOTAL
, @v_CCODIGOVERBA
, @v_CCODIGODEPOSITO
, @v_CTIPOFRETE
, @v_CCODIGOSTATUSPEDIDO
, @v_CCODIGOPEDIDOCLIENTE
, @v_LBLOQUEIO
, @v_LBLOQUEIOCOMERCIAL
, @v_CCODIGOCOMERCIAL
, @v_DCHEGADARO
, @v_DTRANSMISSAOERP-- Verifica se pedido já existe no SAP/Informix
IF EXISTS (SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO
FROM OPENQUERY(sap,'SELECT CODCLIENTE, CODEMPRESA, CODPEDIDO
FROM sapr3.ZSFATB0056')
Where codcliente = @v_ccodigocliente
and codempresa = @v_ccodigoempresa
and codpedido = @v_ccodigopedido)
FETCH NEXT FROM C1 INTO @v_CCODIGOCLIENTE
, @v_CCODIGOEMPRESA
, @v_CCODIGOPEDIDO
, @v_CCODIGOTIPOPEDIDO
, @v_CCODIGOPEDIDOORIGINAL
, @v_LENTREGABONIFICACAO
, @v_LCODIGOVENDOR
, @v_LORCAMENTO
, @v_CCODIGOENDERECOENTREGA
, @v_CCODIGOENDERECOCOBRANCA
, @v_DEMISSAO
, @v_DTRANSMISSAO
, @v_DFATURAMENTO
, @v_DENTREGA
, @v_LDATAFATURAMENTO
, @v_COBSERVACAO
, @v_NVALORTOTAL
, @v_NTOTALIPI
, @v_NTOTALICMS
, @v_NTOTALSUBSTRIBUTARIA
, @v_NTOTALMERCADORIA
, @v_NTOTALRECEITALIQUIDA
, @v_NPESOTOTAL
, @v_CCODIGOVERBA
, @v_CCODIGODEPOSITO
, @v_CTIPOFRETE
, @v_CCODIGOSTATUSPEDIDO
, @v_CCODIGOPEDIDOCLIENTE
, @v_LBLOQUEIO
, @v_LBLOQUEIOCOMERCIAL
, @v_CCODIGOCOMERCIAL
, @v_DCHEGADARO
, @v_DTRANSMISSAOERP
END
CLOSE C1
DEALLOCATE C1SET XACT_ABORT OFF
SET REMOTE_PROC_TRANSACTIONS OFF
-- FimGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOsábado, 28 de abril de 2007 03:14
Todas as Respostas
-
Fabio,
Dá uma olhada no BOL e pesquisa o comando "update". É relativamente tranquilo, só vai dar um trabalhinho. :-)segunda-feira, 30 de abril de 2007 01:10