locked
Openquery RRS feed

  • 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 C1

     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               

     SET 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   = NULL

          SET @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)) END

          SET @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)) END

                 SET @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)) END

                 IF @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)) END

                 END
                 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,CCODIGOPEDIDO

     OPEN 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          = null

          SET @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)) END

          SET @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)) END

          SET @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)) END

          INSERT 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 CCODIGOCLIENTE

     OPEN 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_pCCODIGOSEQUENCIA

     WHILE (@@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 */
             END

       CLOSE 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 C1

       SET XACT_ABORT OFF
       SET REMOTE_PROC_TRANSACTIONS OFF
    -- Fim

     

     

     

    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO

     

    sá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