IMPORTAR DANFE VIA XML
Pessoal é o seguinte:
Estive observando o XML das Danfe e vi que neles constam Dados do Emitente (Que no caso seriam o fornecedor no meu sistema), os produtos e as faturas
Gostaria de criar uma Procedure no SQl Server, onde eu passasse a variável XML com o conteúdo do arquivo e ele populasse as tabelas fornecedores, Entradas e Contas a pagar, sem ter que escrever código no VB. Isso deixaria meu aplicativo mais leve, pois não possuiria os códigos de importação da Danfe e eu poderia usar os valiosos recursos do SQL server
Alguém tem alguma dica?
Estive observando o XML das Danfe e vi que neles constam Dados do Emitente (Que no caso seriam o fornecedor no meu sistema), os produtos e as faturas
Gostaria de criar uma Procedure no SQl Server, onde eu passasse a variável XML com o conteúdo do arquivo e ele populasse as tabelas fornecedores, Entradas e Contas a pagar, sem ter que escrever código no VB. Isso deixaria meu aplicativo mais leve, pois não possuiria os códigos de importação da Danfe e eu poderia usar os valiosos recursos do SQL server
Alguém tem alguma dica?
Este artigo mostra como fazer o que você quer. Leia-o bem, com atenção que vai conseguir fazer, é bem simples.
Andei dando uma olhada no link....tem muita coisa que pode me ajudar aqui
Vou tentar montar algo
Se conseguir, posto a procedure aqui
Vou tentar montar algo
Se conseguir, posto a procedure aqui
Gente:
Como eu havia dito em outra oportunidade, estou postando uma rotina em SqlServer que lê um xml de uma Nota Fiscal
Cadastra o fornecedor caso ele não exista
Lança as faturas nas contas a pagar
Cadastra a Nota e os itens da nota
Vale a pena conferir, para os amantes do sql server
Como eu havia dito em outra oportunidade, estou postando uma rotina em SqlServer que lê um xml de uma Nota Fiscal
Cadastra o fornecedor caso ele não exista
Lança as faturas nas contas a pagar
Cadastra a Nota e os itens da nota
Vale a pena conferir, para os amantes do sql server
Create Procedure [dbo].[ImportarXML](@TEXTXML VarChar(Max),
@CODFCN TINYINT) as
Declare @XML XML
Declare @Doc Int
DECLARE @MSG VARCHAR(5000)
DECLARE @CODFRM TINYINT
DECLARE @MASCARA TINYINT
DECLARE @ULTPRECO TINYINT = 0 --1 - USAR ÚLTIMO PREÇO DE VENDA, 0 - NÃO USAR
DECLARE @SUPRIMEZEROS TINYINT
Begin
SELECT @MASCARA = MASCARA, @SUPRIMEZEROS = SUPRIMEZEROS FROM GERAIS
IF @MASCARA IS NULL SET @MASCARA = 0
IF @SUPRIMEZEROS IS NULL SET @SUPRIMEZEROS = 0
--REMOÇÃO DOS CARACTERES ESPECIAIS
SET @TEXTXML = REPLACE(@TEXTXML,[ô]Ê[ô],[ô]E[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]Ã[ô],[ô]I[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]á[ô],[ô]a[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]ó[ô],[ô]o[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]ã[ô],[ô]a[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]ç[ô],[ô]c[ô])
SET @XML =Cast(@TEXTXML as XML)
SET @XML = CAST(replace(CAST(@XML AS VARCHAR(MAX)), [ô]xmlns=[Ô]http://www.portalfiscal.inf.br/nfe[Ô][ô], [ô][ô]) AS XML)
-- BEGIN TRANSACTION TRANS1
-- BEGIN TRY
EXEC SP_XML_PREPAREDOCUMENT @DOC OUTPUT, @XML
DECLARE @CNPJDEST VARCHAR(19)
declare @NOMEDEST VARCHAR(100)
--VERIFICO SE O DESTINATÃRIO PERTENCE A ALGUMA EMPRESA CADASTRADA
SELECT @CNPJDEST = a.b.value([ô]CNPJ[1][ô], [ô]VarChar(14)[ô]),@NOMEDEST = a.b.value([ô]xNome[1][ô], [ô]VarChar(100)[ô])
FROM @XML.nodes([ô]//NFe/infNFe/dest[ô]) A(b)
IF @CNPJDEST IS NULL BEGIN
SET @MSG = [ô]Não foi localizado o CNPJ do destinatário no XML da Nota Fiscal a ser importada...[ô]
RAISERROR(@MSG, 16, 1)
RETURN
END
SET @CNPJDEST = DBO.FormatarCNPJ(@CNPJDEST)
IF NOT EXISTS(SELECT CODFRM FROM FIRMAS WHERE CGC = @CNPJDEST) BEGIN
SET @MSG = [ô]O CNPJ informado na nota fiscal é [ô] + @CNPJDEST + [ô] - [ô] + @NOMEDEST + [ô] e esse CNPJ não pertence a nenhuma empresa cadastrada no Sistema...[ô]
RAISERROR(@MSG, 16, 1)
RETURN
END
SELECT @CODFRM = CODFRM FROM FIRMAS WHERE CGC = @CNPJDEST
--FINAL DA VERIFICAÇÃO
SELECT @ULTPRECO = GRADE FROM GERAIS --VERIFICA SE é PARA USAR O ÚLTIMO PREÇO VENDIDO
IF @ULTPRECO IS NULL SET @ULTPRECO = 0
--PEGO OS DADOS DO FORNECEDOR DA NOTA FISCAL
DECLARE @CNPJFRN VARCHAR(19), @NOMEFRN VARCHAR(75), @NOMEFANT VARCHAR(75), @INSCREST VARCHAR(15), @ENDER VARCHAR(50)
DECLARE @NUM VARCHAR(15), @BAIRRO VARCHAR(50), @CIDADE VARCHAR(50), @CEP VARCHAR(9), @UF VARCHAR(2), @FONE VARCHAR(19)
DECLARE @EMAIL VARCHAR(50), @CODCITY INT, @CODUF TINYINT, @CODFRN INT
SELECT @CNPJFRN = a.b.value([ô]../CNPJ[1][ô], [ô]VarChar(14)[ô]),@NOMEFRN=a.b.value([ô]../xNome[1][ô], [ô]VarChar(75)[ô]), @NOMEFANT =
a.b.value([ô]../xFant[1][ô], [ô]VarChar(75)[ô]) , @INSCREST=a.b.value([ô]../IE[1][ô],[ô]VarChar(15)[ô]), @ENDER = a.b.value([ô]xLgr[1][ô],
[ô]VarChar(50)[ô]), @NUM = a.b.value([ô]nro[1][ô],[ô]VarChar(15)[ô]), @BAIRRO = a.b.value([ô]xBairro[1][ô],[ô]VarChar(50)[ô]), @CIDADE =
a.b.value([ô]xMun[1][ô],[ô]VarChar(50)[ô]), @UF = a.b.value([ô]UF[1][ô],[ô]VarChar(2)[ô]),@CEP = a.b.value([ô]CEP[1][ô],[ô]VarChar(9)[ô]), @FONE
= a.b.value([ô]fone[1][ô],[ô]VarChar(19)[ô]), @CODCITY =a.b.value([ô]cMun[1][ô],[ô]Int[ô]) FROM @XML.nodes([ô]//infNFe/emit/enderEmit[ô]) A(b)
SET @CNPJFRN = DBO.FormatarCNPJ(@CNPJFRN)
IF NOT @CEP IS NULL and len(@CEP) > 0 SET @CEP = DBO.FormatarCEP(@CEP)
IF NOT @CODCITY IS NULL SET @CODUF = CAST(SUBSTRING(CAST(@CODCITY AS VARCHAR(8)),1,2) AS TINYINT)
IF NOT @FONE IS NULL SET @FONE = DBO.FormatarFone(@FONE)
IF @NOMEFANT IS NULL SET @NOMEFANT = @NOMEFRN
--VERIFICO SE O FORNECEDOR ESTÃ CADASTRADO NO BANCO DE DADOS
UPDATE FORNECEDORES SET NOME = @NOMEFANT, RAZAO = @NOMEFRN, InscrEst = @INSCREST, ENDERECO = @ENDER, NUM = @NUM, BAIRRO =
@BAIRRO, CIDADE = @CIDADE, UF = @UF, CEP = @CEP, FONE = @FONE, CODCITY = @CODCITY, CODUF = @CODUF, DATAMUD = GETDATE(),
FLAG = 0, COMPUTADOR = HOST_NAME() WHERE CGC = @CNPJFRN
IF @@ROWCOUNT = 0 BEGIN
SELECT @CODFRN = MAX(CODFRN)+1 FROM FORNECEDORES
IF @CODFRN IS NULL SET @CODFRN = 1
INSERT INTO FORNECEDORES (CodFrn, NOME, RAZAO, CGC, INSCREST, ENDERECO,NUM,BAIRRO, CIDADE, UF, CEP, FONE, CODCITY, CODUF)
VALUES(@CODFRN, @NOMEFANT, @NOMEFRN, @CNPJFRN, @INSCREST, @ENDER, @NUM,@BAIRRO,@CIDADE,@UF,@CEP, @FONE, @CODCITY, @CODUF)
END ELSE BEGIN
SELECT @CODFRN = CODFRN FROM FORNECEDORES WHERE CGC = @CNPJFRN
END
----------------------------------------------------------------------------------------------------------------------
--CADASTRO DA NOTA FIDCAL DE ENTRADA
----------------------------------------------------------------------------------------------------------------------
DECLARE @CODNOT INT,@NUMNOTA VARCHAR(9), @SERIE VARCHAR(3),@TIPO TINYINT,@DATAEMIS SMALLDATETIME, @CHAVE VARCHAR(44)
DECLARE @CODNAT VARCHAR(50), @BASEICMS SMALLMONEY, @VALORICMS SMALLMONEY, @BASESUB SMALLMONEY, @PIS SMALLMONEY
DECLARE @VALORSUB SMALLMONEY, @TOTALPROD MONEY,@FRETE SMALLMONEY,@SEGURO SMALLMONEY,@IPI SMALLMONEY,@TOTALNOTA MONEY
DECLARE @OUTRADESP SMALLMONEY, @DESCONTO SMALLMONEY, @COFINS SMALLMONEY, @DEMI SMALLDATETIME
SELECT @NUMNOTA=a.b.value([ô]nNF[1][ô],[ô]VarChar(9)[ô]),@SERIE=a.b.value([ô]serie[1][ô],[ô]VarChar(3)[ô]), @TIPO=a.b.value([ô]tpNF[1][ô]
,[ô]tinyint[ô]),@CODNAT = a.b.value([ô]natOp[1][ô],[ô]VarChar(50)[ô]), @DATAEMIS = a.b.value([ô]dhEmi[1][ô],[ô]SmallDateTime[ô]), @DEMI =
a.b.value([ô]dEmi[1][ô],[ô]SmallDateTime[ô]) FROM @XML.nodes([ô]//infNFe/ide[ô]) A(b)
DECLARE @XMLTX varchar(max)
SET @XMLTX = CAST(@xml as varchar(Max))
SET @CHAVE = SUBSTRING(@xmltx,charindex([ô]Id=[ô],@XMLTX )+7,44)
-- SET @CHAVE = (SELECT @XML.value([ô](//infProt/chNFe)[1][ô],[ô]VARCHAR(100)[ô]))
SELECT @TOTALNOTA = a.b.value([ô]vNF[1][ô],[ô]money[ô]),@FRETE = a.b.value([ô]vFrete[1][ô],[ô]smallmoney[ô]), @SEGURO=a.b.value([ô]vSeg
[1][ô],[ô]smallmoney[ô]),@DESCONTO= a.b.value([ô]vDesc[1][ô],[ô]smallmoney[ô]), @BASEICMS = a.b.value([ô]vBC[1][ô],[ô]smallmoney[ô]), @IPI=
a.b.value([ô]vIPI[1][ô],[ô]smallmoney[ô]),@OUTRADESP = a.b.value([ô]vOutro[1][ô],[ô]smallmoney[ô]),@VALORICMS = a.b.value([ô]vICMS[1][ô],
[ô]smallmoney[ô]),@BASESUB = a.b.value([ô]vBCST[1][ô],[ô]smallmoney[ô]), @VALORSUB = a.b.value([ô]vST[1][ô],[ô]smallmoney[ô]), @TOTALPROD
= a.b.value([ô]vProd[1][ô],[ô]smallmoney[ô]) FROM @XML.nodes([ô]//infNFe/total/ICMSTot[ô]) A(b)
IF @DATAEMIS IS NULL SET @DATAEMIS = @DEMI
UPDATE NOTASREP SET NUMNOTA = @NUMNOTA, CODFRN = @CODFRN, CGCDEST =@CNPJDEST, SERIE = @SERIE, TIPO = @TIPO, CODFCN =
@CODFCN, DATAEMIS=@DATAEMIS, CODNAT= @CODNAT, BASEICMS=@BASEICMS, VALORICMS = @VALORICMS, BASESUB= @BASESUB, VALORSUB
= @VALORSUB, TOTALPROD = @TOTALPROD, FRETE = @FRETE, SEGURO = @SEGURO, IPI = @IPI, OUTRADESP = @OUTRADESP, DESCONTO =
@DESCONTO, TOTALNOTA =@TOTALNOTA, CHAVE = @CHAVE, FLAG = 0, DATAMUD = GETDATE() WHERE NUMNOTA = @NUMNOTA AND CODFRN =
@CODFRN
IF @@ROWCOUNT = 0 BEGIN
INSERT INTO NOTASREP(NUMNOTA, CODFRN, CGCDEST, SERIE, TIPO,CODFCN, DATAEMIS, DATAENTRA, CODNAT, BASEICMS, VALORICMS,
BASESUB, VALORSUB, TOTALPROD, FRETE, SEGURO, IPI, OUTRADESP, DESCONTO, TOTALNOTA, MARGEM, CONHFRETE, CODDES, CHAVE)
VALUES(@NUMNOTA, @CODFRN, @CNPJDEST, @SERIE, @TIPO, @CODFCN, @DATAEMIS, GETDATE(), @CODNAT, @BASEICMS, @VALORICMS,
@BASESUB, @VALORSUB, @TOTALPROD, @FRETE, @SEGURO, @IPI, @OUTRADESP, @DESCONTO, @TOTALNOTA, 0, 0, 0, @CHAVE)
SELECT @CODNOT = @@IDENTITY
END ELSE BEGIN
SELECT @CODNOT = CODIGO FROM NOTASREP WHERE NUMNOTA = @NUMNOTA AND CODFRN = @CODFRN
--RETORNO A NOTA FISCAL, POIS A MESMA JÃ ESTÃ CADASTRADA
EXEC DBO.LISTANOTAREP @CodNot
RETURN
END
----------------------------------------------------------------------------------------------------------------------
--INSERÇÃO DOS PRODUTOS DA NOTA FISCAL
----------------------------------------------------------------------------------------------------------------------
DECLARE VCURSOR CURSOR FOR SELECT * FROM Openxml(@DOC,[ô]//infNFe/det[ô]) WITH ([Item] INT [ô]@nItem[ô],[CodBar]
VarChar(13) [ô]./prod/cProd[ô], [CodEan] VarChar(13) [ô]./prod/cEAN[ô],[Nome] VarChar(100) [ô]./prod/xProd[ô],[NCMS]
VarChar(8) [ô]./prod/NCM[ô],[CFOP] VarChar(4) [ô]./prod/CFOP[ô],[UN] VarChar(2) [ô]./prod/uCom[ô],[Qtde] Real [ô]./prod/qCom[ô],
[Custo] Real [ô]./prod/vUnCom[ô], [Total] Real [ô]./prod/vProd[ô], [Descto] REAL [ô]./prod/vDesc[ô],[B Icms] Real [ô]./imposto/ICMS//vBC[ô],[Aliq Icms] Real
[ô]./imposto/ICMS//pICMS[ô],[V Icms] Real [ô]./imposto/ICMS//vICMS[ô], [B CST] Real [ô]./imposto/ICMS//vBCST[ô], [A CST]
Real [ô]./imposto/ICMS//pICMSST[ô],[V CST] Real [ô]./imposto/ICMS//vICMSST[ô],[Orig] Varchar(1) [ô]./imposto/ICMS//orig[ô],
[CST] Varchar(3) [ô]./imposto/ICMS//CST[ô], [CST IPI] Int [ô]./imposto/IPI//CST[ô],[VBC IPI] Real [ô]./imposto/IPI//vBC[ô],
[AL IPI] Real [ô]./imposto/IPI//pIPI[ô],[V IPI] Real [ô]./imposto/IPI//vIPI[ô] ,[CST PIS] int [ô]./imposto/PIS//CST[ô],
[VBC PIS] Real [ô]./imposto/PIS//vBC[ô],[AL PIS] Real [ô]./imposto/PIS//pPIS[ô] ,[V PIS] Real [ô]./imposto/PIS//vPIS[ô],
[CSTCOF]Real[ô]./imposto/COFINS//CST[ô],[ALCOF]Real[ô]./imposto/COFINS//pCOFINS[ô],[VCOF]Real[ô]./imposto/COFINS//vCOFINS[ô],
[CSOSN] Varchar(3) [ô]./imposto/ICMS//CSOSN[ô],[VPMC] Real [ô]./prod/med/vPMC[ô])
DECLARE @CODNOTA VARCHAR(13), @CODEAN VARCHAR(13), @NOME VARCHAR(60)
DECLARE @ITEM INT, @CSTIPI INT, @CSTPIS INT
DECLARE @UN VARCHAR(2), @ORIG VARCHAR(1), @ORI VARCHAR(3), @CFOP VARCHAR(5), @NCMS VARCHAR(8), @CSOSN VARCHAR(3)
DECLARE @QTDE REAL, @CUSTO REAL, @TOTAL REAL, @BICMS REAL, @ALIQICMS REAL, @VICMS REAL, @BCST REAL, @ALIQCST REAL
DECLARE @VCST REAL, @VBCIPI REAL, @ALIQIPI REAL, @VIPI REAL, @VBCPIS REAL, @ALIQPIS REAL, @VPIS REAL, @CSTCOF REAL
DECLARE @ALIQCOF REAL, @VCOF REAL, @DESCTO REAL, @FRETEP REAL, @SEGUROP REAL, @OUTRASP REAL, @VPMC REAL
OPEN VCURSOR
FETCH NEXT FROM VCURSOR INTO @ITEM, @CODNOTA, @CODEAN, @NOME, @NCMS, @CFOP, @UN, @QTDE, @CUSTO, @TOTAL, @DESCTO, @BICMS,
@ALIQICMS, @VICMS, @BCST, @ALIQCST, @VCST, @ORIG, @ORI, @CSTIPI, @VBCIPI, @ALIQIPI,
@VIPI, @CSTPIS, @VBCPIS, @ALIQPIS, @VPIS, @CSTCOF, @ALIQCOF, @VCOF, @CSOSN, @VPMC
WHILE(@@FETCH_STATUS = 0) BEGIN
DECLARE @CST VARCHAR(4) = @ORIG
IF NOT @ORI IS NULL
SET @CST = @CST + @ORI
ELSE
SET @CST = @CST + @CSOSN
--print @codnota
--VERIFICO SE O PRODUTO JÃ FOI COMPRADO E EXISTE NA TABELA RELACAO
DECLARE @CODBAR VARCHAR(13) = [ô][ô]
DEC
@CODFCN TINYINT) as
Declare @XML XML
Declare @Doc Int
DECLARE @MSG VARCHAR(5000)
DECLARE @CODFRM TINYINT
DECLARE @MASCARA TINYINT
DECLARE @ULTPRECO TINYINT = 0 --1 - USAR ÚLTIMO PREÇO DE VENDA, 0 - NÃO USAR
DECLARE @SUPRIMEZEROS TINYINT
Begin
SELECT @MASCARA = MASCARA, @SUPRIMEZEROS = SUPRIMEZEROS FROM GERAIS
IF @MASCARA IS NULL SET @MASCARA = 0
IF @SUPRIMEZEROS IS NULL SET @SUPRIMEZEROS = 0
--REMOÇÃO DOS CARACTERES ESPECIAIS
SET @TEXTXML = REPLACE(@TEXTXML,[ô]Ê[ô],[ô]E[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]Ã[ô],[ô]I[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]á[ô],[ô]a[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]ó[ô],[ô]o[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]ã[ô],[ô]a[ô])
SET @TEXTXML = REPLACE(@TEXTXML,[ô]ç[ô],[ô]c[ô])
SET @XML =Cast(@TEXTXML as XML)
SET @XML = CAST(replace(CAST(@XML AS VARCHAR(MAX)), [ô]xmlns=[Ô]http://www.portalfiscal.inf.br/nfe[Ô][ô], [ô][ô]) AS XML)
-- BEGIN TRANSACTION TRANS1
-- BEGIN TRY
EXEC SP_XML_PREPAREDOCUMENT @DOC OUTPUT, @XML
DECLARE @CNPJDEST VARCHAR(19)
declare @NOMEDEST VARCHAR(100)
--VERIFICO SE O DESTINATÃRIO PERTENCE A ALGUMA EMPRESA CADASTRADA
SELECT @CNPJDEST = a.b.value([ô]CNPJ[1][ô], [ô]VarChar(14)[ô]),@NOMEDEST = a.b.value([ô]xNome[1][ô], [ô]VarChar(100)[ô])
FROM @XML.nodes([ô]//NFe/infNFe/dest[ô]) A(b)
IF @CNPJDEST IS NULL BEGIN
SET @MSG = [ô]Não foi localizado o CNPJ do destinatário no XML da Nota Fiscal a ser importada...[ô]
RAISERROR(@MSG, 16, 1)
RETURN
END
SET @CNPJDEST = DBO.FormatarCNPJ(@CNPJDEST)
IF NOT EXISTS(SELECT CODFRM FROM FIRMAS WHERE CGC = @CNPJDEST) BEGIN
SET @MSG = [ô]O CNPJ informado na nota fiscal é [ô] + @CNPJDEST + [ô] - [ô] + @NOMEDEST + [ô] e esse CNPJ não pertence a nenhuma empresa cadastrada no Sistema...[ô]
RAISERROR(@MSG, 16, 1)
RETURN
END
SELECT @CODFRM = CODFRM FROM FIRMAS WHERE CGC = @CNPJDEST
--FINAL DA VERIFICAÇÃO
SELECT @ULTPRECO = GRADE FROM GERAIS --VERIFICA SE é PARA USAR O ÚLTIMO PREÇO VENDIDO
IF @ULTPRECO IS NULL SET @ULTPRECO = 0
--PEGO OS DADOS DO FORNECEDOR DA NOTA FISCAL
DECLARE @CNPJFRN VARCHAR(19), @NOMEFRN VARCHAR(75), @NOMEFANT VARCHAR(75), @INSCREST VARCHAR(15), @ENDER VARCHAR(50)
DECLARE @NUM VARCHAR(15), @BAIRRO VARCHAR(50), @CIDADE VARCHAR(50), @CEP VARCHAR(9), @UF VARCHAR(2), @FONE VARCHAR(19)
DECLARE @EMAIL VARCHAR(50), @CODCITY INT, @CODUF TINYINT, @CODFRN INT
SELECT @CNPJFRN = a.b.value([ô]../CNPJ[1][ô], [ô]VarChar(14)[ô]),@NOMEFRN=a.b.value([ô]../xNome[1][ô], [ô]VarChar(75)[ô]), @NOMEFANT =
a.b.value([ô]../xFant[1][ô], [ô]VarChar(75)[ô]) , @INSCREST=a.b.value([ô]../IE[1][ô],[ô]VarChar(15)[ô]), @ENDER = a.b.value([ô]xLgr[1][ô],
[ô]VarChar(50)[ô]), @NUM = a.b.value([ô]nro[1][ô],[ô]VarChar(15)[ô]), @BAIRRO = a.b.value([ô]xBairro[1][ô],[ô]VarChar(50)[ô]), @CIDADE =
a.b.value([ô]xMun[1][ô],[ô]VarChar(50)[ô]), @UF = a.b.value([ô]UF[1][ô],[ô]VarChar(2)[ô]),@CEP = a.b.value([ô]CEP[1][ô],[ô]VarChar(9)[ô]), @FONE
= a.b.value([ô]fone[1][ô],[ô]VarChar(19)[ô]), @CODCITY =a.b.value([ô]cMun[1][ô],[ô]Int[ô]) FROM @XML.nodes([ô]//infNFe/emit/enderEmit[ô]) A(b)
SET @CNPJFRN = DBO.FormatarCNPJ(@CNPJFRN)
IF NOT @CEP IS NULL and len(@CEP) > 0 SET @CEP = DBO.FormatarCEP(@CEP)
IF NOT @CODCITY IS NULL SET @CODUF = CAST(SUBSTRING(CAST(@CODCITY AS VARCHAR(8)),1,2) AS TINYINT)
IF NOT @FONE IS NULL SET @FONE = DBO.FormatarFone(@FONE)
IF @NOMEFANT IS NULL SET @NOMEFANT = @NOMEFRN
--VERIFICO SE O FORNECEDOR ESTÃ CADASTRADO NO BANCO DE DADOS
UPDATE FORNECEDORES SET NOME = @NOMEFANT, RAZAO = @NOMEFRN, InscrEst = @INSCREST, ENDERECO = @ENDER, NUM = @NUM, BAIRRO =
@BAIRRO, CIDADE = @CIDADE, UF = @UF, CEP = @CEP, FONE = @FONE, CODCITY = @CODCITY, CODUF = @CODUF, DATAMUD = GETDATE(),
FLAG = 0, COMPUTADOR = HOST_NAME() WHERE CGC = @CNPJFRN
IF @@ROWCOUNT = 0 BEGIN
SELECT @CODFRN = MAX(CODFRN)+1 FROM FORNECEDORES
IF @CODFRN IS NULL SET @CODFRN = 1
INSERT INTO FORNECEDORES (CodFrn, NOME, RAZAO, CGC, INSCREST, ENDERECO,NUM,BAIRRO, CIDADE, UF, CEP, FONE, CODCITY, CODUF)
VALUES(@CODFRN, @NOMEFANT, @NOMEFRN, @CNPJFRN, @INSCREST, @ENDER, @NUM,@BAIRRO,@CIDADE,@UF,@CEP, @FONE, @CODCITY, @CODUF)
END ELSE BEGIN
SELECT @CODFRN = CODFRN FROM FORNECEDORES WHERE CGC = @CNPJFRN
END
----------------------------------------------------------------------------------------------------------------------
--CADASTRO DA NOTA FIDCAL DE ENTRADA
----------------------------------------------------------------------------------------------------------------------
DECLARE @CODNOT INT,@NUMNOTA VARCHAR(9), @SERIE VARCHAR(3),@TIPO TINYINT,@DATAEMIS SMALLDATETIME, @CHAVE VARCHAR(44)
DECLARE @CODNAT VARCHAR(50), @BASEICMS SMALLMONEY, @VALORICMS SMALLMONEY, @BASESUB SMALLMONEY, @PIS SMALLMONEY
DECLARE @VALORSUB SMALLMONEY, @TOTALPROD MONEY,@FRETE SMALLMONEY,@SEGURO SMALLMONEY,@IPI SMALLMONEY,@TOTALNOTA MONEY
DECLARE @OUTRADESP SMALLMONEY, @DESCONTO SMALLMONEY, @COFINS SMALLMONEY, @DEMI SMALLDATETIME
SELECT @NUMNOTA=a.b.value([ô]nNF[1][ô],[ô]VarChar(9)[ô]),@SERIE=a.b.value([ô]serie[1][ô],[ô]VarChar(3)[ô]), @TIPO=a.b.value([ô]tpNF[1][ô]
,[ô]tinyint[ô]),@CODNAT = a.b.value([ô]natOp[1][ô],[ô]VarChar(50)[ô]), @DATAEMIS = a.b.value([ô]dhEmi[1][ô],[ô]SmallDateTime[ô]), @DEMI =
a.b.value([ô]dEmi[1][ô],[ô]SmallDateTime[ô]) FROM @XML.nodes([ô]//infNFe/ide[ô]) A(b)
DECLARE @XMLTX varchar(max)
SET @XMLTX = CAST(@xml as varchar(Max))
SET @CHAVE = SUBSTRING(@xmltx,charindex([ô]Id=[ô],@XMLTX )+7,44)
-- SET @CHAVE = (SELECT @XML.value([ô](//infProt/chNFe)[1][ô],[ô]VARCHAR(100)[ô]))
SELECT @TOTALNOTA = a.b.value([ô]vNF[1][ô],[ô]money[ô]),@FRETE = a.b.value([ô]vFrete[1][ô],[ô]smallmoney[ô]), @SEGURO=a.b.value([ô]vSeg
[1][ô],[ô]smallmoney[ô]),@DESCONTO= a.b.value([ô]vDesc[1][ô],[ô]smallmoney[ô]), @BASEICMS = a.b.value([ô]vBC[1][ô],[ô]smallmoney[ô]), @IPI=
a.b.value([ô]vIPI[1][ô],[ô]smallmoney[ô]),@OUTRADESP = a.b.value([ô]vOutro[1][ô],[ô]smallmoney[ô]),@VALORICMS = a.b.value([ô]vICMS[1][ô],
[ô]smallmoney[ô]),@BASESUB = a.b.value([ô]vBCST[1][ô],[ô]smallmoney[ô]), @VALORSUB = a.b.value([ô]vST[1][ô],[ô]smallmoney[ô]), @TOTALPROD
= a.b.value([ô]vProd[1][ô],[ô]smallmoney[ô]) FROM @XML.nodes([ô]//infNFe/total/ICMSTot[ô]) A(b)
IF @DATAEMIS IS NULL SET @DATAEMIS = @DEMI
UPDATE NOTASREP SET NUMNOTA = @NUMNOTA, CODFRN = @CODFRN, CGCDEST =@CNPJDEST, SERIE = @SERIE, TIPO = @TIPO, CODFCN =
@CODFCN, DATAEMIS=@DATAEMIS, CODNAT= @CODNAT, BASEICMS=@BASEICMS, VALORICMS = @VALORICMS, BASESUB= @BASESUB, VALORSUB
= @VALORSUB, TOTALPROD = @TOTALPROD, FRETE = @FRETE, SEGURO = @SEGURO, IPI = @IPI, OUTRADESP = @OUTRADESP, DESCONTO =
@DESCONTO, TOTALNOTA =@TOTALNOTA, CHAVE = @CHAVE, FLAG = 0, DATAMUD = GETDATE() WHERE NUMNOTA = @NUMNOTA AND CODFRN =
@CODFRN
IF @@ROWCOUNT = 0 BEGIN
INSERT INTO NOTASREP(NUMNOTA, CODFRN, CGCDEST, SERIE, TIPO,CODFCN, DATAEMIS, DATAENTRA, CODNAT, BASEICMS, VALORICMS,
BASESUB, VALORSUB, TOTALPROD, FRETE, SEGURO, IPI, OUTRADESP, DESCONTO, TOTALNOTA, MARGEM, CONHFRETE, CODDES, CHAVE)
VALUES(@NUMNOTA, @CODFRN, @CNPJDEST, @SERIE, @TIPO, @CODFCN, @DATAEMIS, GETDATE(), @CODNAT, @BASEICMS, @VALORICMS,
@BASESUB, @VALORSUB, @TOTALPROD, @FRETE, @SEGURO, @IPI, @OUTRADESP, @DESCONTO, @TOTALNOTA, 0, 0, 0, @CHAVE)
SELECT @CODNOT = @@IDENTITY
END ELSE BEGIN
SELECT @CODNOT = CODIGO FROM NOTASREP WHERE NUMNOTA = @NUMNOTA AND CODFRN = @CODFRN
--RETORNO A NOTA FISCAL, POIS A MESMA JÃ ESTÃ CADASTRADA
EXEC DBO.LISTANOTAREP @CodNot
RETURN
END
----------------------------------------------------------------------------------------------------------------------
--INSERÇÃO DOS PRODUTOS DA NOTA FISCAL
----------------------------------------------------------------------------------------------------------------------
DECLARE VCURSOR CURSOR FOR SELECT * FROM Openxml(@DOC,[ô]//infNFe/det[ô]) WITH ([Item] INT [ô]@nItem[ô],[CodBar]
VarChar(13) [ô]./prod/cProd[ô], [CodEan] VarChar(13) [ô]./prod/cEAN[ô],[Nome] VarChar(100) [ô]./prod/xProd[ô],[NCMS]
VarChar(8) [ô]./prod/NCM[ô],[CFOP] VarChar(4) [ô]./prod/CFOP[ô],[UN] VarChar(2) [ô]./prod/uCom[ô],[Qtde] Real [ô]./prod/qCom[ô],
[Custo] Real [ô]./prod/vUnCom[ô], [Total] Real [ô]./prod/vProd[ô], [Descto] REAL [ô]./prod/vDesc[ô],[B Icms] Real [ô]./imposto/ICMS//vBC[ô],[Aliq Icms] Real
[ô]./imposto/ICMS//pICMS[ô],[V Icms] Real [ô]./imposto/ICMS//vICMS[ô], [B CST] Real [ô]./imposto/ICMS//vBCST[ô], [A CST]
Real [ô]./imposto/ICMS//pICMSST[ô],[V CST] Real [ô]./imposto/ICMS//vICMSST[ô],[Orig] Varchar(1) [ô]./imposto/ICMS//orig[ô],
[CST] Varchar(3) [ô]./imposto/ICMS//CST[ô], [CST IPI] Int [ô]./imposto/IPI//CST[ô],[VBC IPI] Real [ô]./imposto/IPI//vBC[ô],
[AL IPI] Real [ô]./imposto/IPI//pIPI[ô],[V IPI] Real [ô]./imposto/IPI//vIPI[ô] ,[CST PIS] int [ô]./imposto/PIS//CST[ô],
[VBC PIS] Real [ô]./imposto/PIS//vBC[ô],[AL PIS] Real [ô]./imposto/PIS//pPIS[ô] ,[V PIS] Real [ô]./imposto/PIS//vPIS[ô],
[CSTCOF]Real[ô]./imposto/COFINS//CST[ô],[ALCOF]Real[ô]./imposto/COFINS//pCOFINS[ô],[VCOF]Real[ô]./imposto/COFINS//vCOFINS[ô],
[CSOSN] Varchar(3) [ô]./imposto/ICMS//CSOSN[ô],[VPMC] Real [ô]./prod/med/vPMC[ô])
DECLARE @CODNOTA VARCHAR(13), @CODEAN VARCHAR(13), @NOME VARCHAR(60)
DECLARE @ITEM INT, @CSTIPI INT, @CSTPIS INT
DECLARE @UN VARCHAR(2), @ORIG VARCHAR(1), @ORI VARCHAR(3), @CFOP VARCHAR(5), @NCMS VARCHAR(8), @CSOSN VARCHAR(3)
DECLARE @QTDE REAL, @CUSTO REAL, @TOTAL REAL, @BICMS REAL, @ALIQICMS REAL, @VICMS REAL, @BCST REAL, @ALIQCST REAL
DECLARE @VCST REAL, @VBCIPI REAL, @ALIQIPI REAL, @VIPI REAL, @VBCPIS REAL, @ALIQPIS REAL, @VPIS REAL, @CSTCOF REAL
DECLARE @ALIQCOF REAL, @VCOF REAL, @DESCTO REAL, @FRETEP REAL, @SEGUROP REAL, @OUTRASP REAL, @VPMC REAL
OPEN VCURSOR
FETCH NEXT FROM VCURSOR INTO @ITEM, @CODNOTA, @CODEAN, @NOME, @NCMS, @CFOP, @UN, @QTDE, @CUSTO, @TOTAL, @DESCTO, @BICMS,
@ALIQICMS, @VICMS, @BCST, @ALIQCST, @VCST, @ORIG, @ORI, @CSTIPI, @VBCIPI, @ALIQIPI,
@VIPI, @CSTPIS, @VBCPIS, @ALIQPIS, @VPIS, @CSTCOF, @ALIQCOF, @VCOF, @CSOSN, @VPMC
WHILE(@@FETCH_STATUS = 0) BEGIN
DECLARE @CST VARCHAR(4) = @ORIG
IF NOT @ORI IS NULL
SET @CST = @CST + @ORI
ELSE
SET @CST = @CST + @CSOSN
--print @codnota
--VERIFICO SE O PRODUTO JÃ FOI COMPRADO E EXISTE NA TABELA RELACAO
DECLARE @CODBAR VARCHAR(13) = [ô][ô]
DEC
LARE @QTDEMB REAL
-- IF NOT @CODEAN IS NULL AND @CODEAN <> [ô][ô] BEGIN
SELECT @CODBAR = CODBAR, @QTDEMB = QtdEmb FROM RELACAO WHERE CODCAD = @CODNOTA AND CODFRN = @CODFRN
-- END
IF @MASCARA = 0 BEGIN
IF @CODBAR IS NULL OR @CODBAR = [ô][ô] SET @CODBAR = @CODEAN
IF @SUPRIMEZEROS = 1 BEGIN
WHILE SUBSTRING(@CODBAR,1,1) = [ô]0[ô] BEGIN
SET @CODBAR = SUBSTRING(@CODBAR,2,LEN(@CODBAR)-1)
END
END
END
IF @QTDEMB IS NULL SET @QTDEMB = 1
IF @QTDEMB = 0 SET @QTDEMB = 1
SET @CFOP = DBO.FormatarCfop(@CFOP)
IF @DESCTO IS NULL SET @DESCTO = 0
IF @FRETEP IS NULL SET @FRETEP = 0
IF @OUTRASP IS NULL SET @OUTRASP = 0
IF @SEGUROP IS NULL SET @SEGUROP = 0
IF @VIPI IS NULL SET @VIPI = 0
IF @vBCipi IS NULL SET @VBCIPI = 0
IF @ALIQIPI IS NULL SET @ALIQIPI = 0
IF @VPIS IS NULL SET @VPIS = 0
IF @VCOF IS NULL SET @VCOF = 0
IF @ALIQPIS IS NULL SET @ALIQPIS = 0
IF @ALIQCOF IS NULL SET @ALIQCOF = 0
IF @VBCPIS IS NULL SET @VBCPIS = 0
IF @VICMS IS NULL SET @VICMS = 0
IF @BICMS IS NULL SET @BICMS = 0
IF @BCST IS NULL SET @BCST = 0
IF @ALIQICMS IS NULL SET @ALIQICMS = 0
IF @VCST IS NULL SET @VCST = 0
IF @ALIQCST IS NULL SET @ALIQCST = 0
DECLARE @CUSTOREAL SMALLMONEY = @CUSTO+@VIPI+@VCST+@FRETEP+@OUTRASP+@SEGUROP-(@DESCTO/@QTDE)
DECLARE @NOMECAD VARCHAR(50) = @NOME
DECLARE @PRECOANT SMALLMONEY = 0
DECLARE @PRECOATUAL SMALLMONEY = 0
--VERIFICO SE O PRODUTO ESTÃ CADASTRADO NO BANCO DE DADOS
SET @NOME = REPLACE(@NOME,[ô]>[ô],[ô]>[ô])
IF @CODBAR <> [ô][ô] BEGIN
SELECT @NOMECAD = P.NOME, @PRECOANT = E.PRECO FROM (PRODUTOS P LEFT jOIN ESTOQUE E ON P.CODBAR = E.CODBAR AND E.CODFRM = @CODFRM) WHERE P.CODBAR = @CODBAR
IF @NOMECAD IS NULL SET @NOMECAD = @NOME
IF @PRECOANT IS NULL SET @PRECOANT = 0
END
IF @ULTPRECO = 1 BEGIN
IF @VPMC IS NULL
SET @PRECOATUAL = @PRECOANT
ELSE
SET @PRECOATUAL = @VPMC
END
UPDATE ITENSREP SET NUMNOTA=@NUMNOTA, REFER=@CODBAR, NOMEFRN=@NOME, CFOP=@CFOP, CST=@CST, UN=@UN, CAIXAS =@QTDE,
DESCTO = @DESCTO, VALOR = @CUSTO, BICMS=@BICMS, VICMS = @VICMS, VIPI =@VIPI, CSTIPI = @CSTIPI, VBCIPI = @VBCIPI,
ALIQIPI = @ALIQIPI, NCMS = @NCMS, CSTPIS = @CSTPIS, VPIS = @VPIS, CSTCOFINS = @CSTCOF, VCOFINS = @VCOF, CODFCN =
@CODFCN,BICMSUBST = @BCST,ALIQICMS = @ALIQICMS,VICMSUBST = @VCST, ALIQPIS = @ALIQPIS, ALIQCOF = @ALIQCOF, VBCPIS
= @VBCPIS, ALIQMVA = @ALIQCST, FRETE = @FRETEP, SEGURO = @SEGUROP, OUTRAS = @OUTRASP, CUSTOREAL = @CUSTOREAL
WHERE CODNOT = @CODNOT AND CODBAR = @CODNOTA AND ITEM = @ITEM
IF @@ROWCOUNT = 0 BEGIN
INSERT INTO ITENSREP(CODNOT, NUMNOTA, ITEM, CODBAR, REFER, NOMEFRN, NOME, CFOP, CST, UN, CAIXAS, QTDCXA, QTDE,
QTDDESD,DESCTO,VALOR,BICMS,VICMS,VIPI, CSTIPI, VBCIPI, ALIQIPI, NCMS, CSTPIS, VPIS, CSTCOFINS, VCOFINS,CODFCN,
BICMSUBST, ALIQICMS, VICMSUBST, ALIQPIS, ALIQCOF, VBCPIS, ALIQMVA, FRETE, SEGURO, OUTRAS, TIPOCOM, CUSTOREAL,
CUSTOLOJA, LANCOU, DATAENTRA, CONHFRETE, PRECOATUAL, PRECOANT) VALUES(@CODNOT, @NUMNOTA, @ITEM,@CODNOTA,@CODBAR,@NOME, @NOMECAD, @CFOP, @CST, @UN, @QTDE, @QTDEMB, @QTDE*@QTDEMB,
0, @DESCTO, @CUSTO, @BICMS, @VICMS, @VIPI, @CSTIPI, @VBCIPI, @ALIQIPI, @NCMS, @CSTPIS, @VPIS, @CSTCOF, @VCOF,
@CODFCN, @BCST, @ALIQICMS,@VCST, @ALIQPIS, @ALIQCOF,@VBCPIS,@ALIQCST, @FRETEP, @SEGUROP, @OUTRASP,1,@CUSTOREAL,
@CUSTOREAL, 0, GETDATE(), 0, @PRECOATUAL, @PRECOANT)
END
--FIM DA PESQUISA
--PRINT @CST
FETCH NEXT FROM VCURSOR INTO @ITEM, @CODNOTA, @CODEAN, @NOME, @NCMS, @CFOP, @UN, @QTDE, @CUSTO, @TOTAL, @DESCTO, @BICMS,
@ALIQICMS, @VICMS, @BCST, @ALIQCST, @VCST, @ORIG, @ORI, @CSTIPI, @VBCIPI, @ALIQIPI,
@VIPI, @CSTPIS, @VBCPIS, @ALIQPIS, @VPIS, @CSTCOF, @ALIQCOF, @VCOF, @CSOSN, @VPMC
END
CLOSE VCURSOR
DEALLOCATE VCURSOR
---------------------------------------------------------------------------------------------
--PEGAR AS PRESTAÇÕES DO CARTÃO
---------------------------------------------------------------------------------------------
DECLARE XCURSOR CURSOR FOR SELECT * FROM Openxml(@DOC,[ô]//infNFe/cobr/dup[ô]) WITH ([Numero] VarChar(15) [ô]nDup[ô],
[DataVenc] SmallDateTime [ô]dVenc[ô],[Valor] SmallMoney [ô]vDup[ô])
DECLARE @NumDupl VARCHAR(15), @VencDupl SmallDateTime, @ValDupl SmallMoney
OPEN XCURSOR
FETCH NEXT FROM XCURSOR INTO @NumDupl, @VencDupl, @ValDupl
DECLARE @NDUP INT = 1
WHILE(@@FETCH_STATUS = 0) BEGIN
-- PRINT @NUMDUPL
IF @NumDupl IS NULL SET @NumDupl = @NUMNOTA + [ô]-[ô] + CAST(@NDUP AS VARCHAR(5))
UPDATE ITENSDESDOBRA SET CODFRN = @CODFRN, CODFRM = @CODFRM, VALOR = @VALDUPL, DATAVENC = @VENCDUPL WHERE NUMERO = @NUMDUPL
IF @@ROWCOUNT = 0
INSERT INTO ITENSDESDOBRA (NUMERO, DATAVENC, VALOR, CODFRN, CODFRM, CODDOC, TAXAS, DESCTO, CODDES)
VALUES(@NUMDUPL, @VENCDUPL, @VALDUPL, @CODFRN, @CODFRM, 1, 0, 0, 0)
FETCH NEXT FROM XCURSOR INTO @NumDupl, @VencDupl, @ValDupl
SET @NDUP = @NDUP + 1
END
CLOSE XCURSOR
DEALLOCATE XCURSOR
----------------------------------------------------------------------------------
EXEC SP_XML_REMOVEDOCUMENT @DOC
-- GRAVO O CONTEÚDO DO ARQUIVO XML
UPDATE NOTASREPXML SET CHAVE = @CHAVE, [XML] = CAST(@XML AS VARCHAR(MAX)) WHERE CODNOT = @CODNOT
IF @@ROWCOUNT = 0
INSERT INTO NOTASREPXML(CODNOT, CHAVE, [XML]) VALUES(@codnot, @chave, Cast(@XML as varchar(max)))
EXEC DBO.LISTANOTAREP @CodNot
End
-- IF NOT @CODEAN IS NULL AND @CODEAN <> [ô][ô] BEGIN
SELECT @CODBAR = CODBAR, @QTDEMB = QtdEmb FROM RELACAO WHERE CODCAD = @CODNOTA AND CODFRN = @CODFRN
-- END
IF @MASCARA = 0 BEGIN
IF @CODBAR IS NULL OR @CODBAR = [ô][ô] SET @CODBAR = @CODEAN
IF @SUPRIMEZEROS = 1 BEGIN
WHILE SUBSTRING(@CODBAR,1,1) = [ô]0[ô] BEGIN
SET @CODBAR = SUBSTRING(@CODBAR,2,LEN(@CODBAR)-1)
END
END
END
IF @QTDEMB IS NULL SET @QTDEMB = 1
IF @QTDEMB = 0 SET @QTDEMB = 1
SET @CFOP = DBO.FormatarCfop(@CFOP)
IF @DESCTO IS NULL SET @DESCTO = 0
IF @FRETEP IS NULL SET @FRETEP = 0
IF @OUTRASP IS NULL SET @OUTRASP = 0
IF @SEGUROP IS NULL SET @SEGUROP = 0
IF @VIPI IS NULL SET @VIPI = 0
IF @vBCipi IS NULL SET @VBCIPI = 0
IF @ALIQIPI IS NULL SET @ALIQIPI = 0
IF @VPIS IS NULL SET @VPIS = 0
IF @VCOF IS NULL SET @VCOF = 0
IF @ALIQPIS IS NULL SET @ALIQPIS = 0
IF @ALIQCOF IS NULL SET @ALIQCOF = 0
IF @VBCPIS IS NULL SET @VBCPIS = 0
IF @VICMS IS NULL SET @VICMS = 0
IF @BICMS IS NULL SET @BICMS = 0
IF @BCST IS NULL SET @BCST = 0
IF @ALIQICMS IS NULL SET @ALIQICMS = 0
IF @VCST IS NULL SET @VCST = 0
IF @ALIQCST IS NULL SET @ALIQCST = 0
DECLARE @CUSTOREAL SMALLMONEY = @CUSTO+@VIPI+@VCST+@FRETEP+@OUTRASP+@SEGUROP-(@DESCTO/@QTDE)
DECLARE @NOMECAD VARCHAR(50) = @NOME
DECLARE @PRECOANT SMALLMONEY = 0
DECLARE @PRECOATUAL SMALLMONEY = 0
--VERIFICO SE O PRODUTO ESTÃ CADASTRADO NO BANCO DE DADOS
SET @NOME = REPLACE(@NOME,[ô]>[ô],[ô]>[ô])
IF @CODBAR <> [ô][ô] BEGIN
SELECT @NOMECAD = P.NOME, @PRECOANT = E.PRECO FROM (PRODUTOS P LEFT jOIN ESTOQUE E ON P.CODBAR = E.CODBAR AND E.CODFRM = @CODFRM) WHERE P.CODBAR = @CODBAR
IF @NOMECAD IS NULL SET @NOMECAD = @NOME
IF @PRECOANT IS NULL SET @PRECOANT = 0
END
IF @ULTPRECO = 1 BEGIN
IF @VPMC IS NULL
SET @PRECOATUAL = @PRECOANT
ELSE
SET @PRECOATUAL = @VPMC
END
UPDATE ITENSREP SET NUMNOTA=@NUMNOTA, REFER=@CODBAR, NOMEFRN=@NOME, CFOP=@CFOP, CST=@CST, UN=@UN, CAIXAS =@QTDE,
DESCTO = @DESCTO, VALOR = @CUSTO, BICMS=@BICMS, VICMS = @VICMS, VIPI =@VIPI, CSTIPI = @CSTIPI, VBCIPI = @VBCIPI,
ALIQIPI = @ALIQIPI, NCMS = @NCMS, CSTPIS = @CSTPIS, VPIS = @VPIS, CSTCOFINS = @CSTCOF, VCOFINS = @VCOF, CODFCN =
@CODFCN,BICMSUBST = @BCST,ALIQICMS = @ALIQICMS,VICMSUBST = @VCST, ALIQPIS = @ALIQPIS, ALIQCOF = @ALIQCOF, VBCPIS
= @VBCPIS, ALIQMVA = @ALIQCST, FRETE = @FRETEP, SEGURO = @SEGUROP, OUTRAS = @OUTRASP, CUSTOREAL = @CUSTOREAL
WHERE CODNOT = @CODNOT AND CODBAR = @CODNOTA AND ITEM = @ITEM
IF @@ROWCOUNT = 0 BEGIN
INSERT INTO ITENSREP(CODNOT, NUMNOTA, ITEM, CODBAR, REFER, NOMEFRN, NOME, CFOP, CST, UN, CAIXAS, QTDCXA, QTDE,
QTDDESD,DESCTO,VALOR,BICMS,VICMS,VIPI, CSTIPI, VBCIPI, ALIQIPI, NCMS, CSTPIS, VPIS, CSTCOFINS, VCOFINS,CODFCN,
BICMSUBST, ALIQICMS, VICMSUBST, ALIQPIS, ALIQCOF, VBCPIS, ALIQMVA, FRETE, SEGURO, OUTRAS, TIPOCOM, CUSTOREAL,
CUSTOLOJA, LANCOU, DATAENTRA, CONHFRETE, PRECOATUAL, PRECOANT) VALUES(@CODNOT, @NUMNOTA, @ITEM,@CODNOTA,@CODBAR,@NOME, @NOMECAD, @CFOP, @CST, @UN, @QTDE, @QTDEMB, @QTDE*@QTDEMB,
0, @DESCTO, @CUSTO, @BICMS, @VICMS, @VIPI, @CSTIPI, @VBCIPI, @ALIQIPI, @NCMS, @CSTPIS, @VPIS, @CSTCOF, @VCOF,
@CODFCN, @BCST, @ALIQICMS,@VCST, @ALIQPIS, @ALIQCOF,@VBCPIS,@ALIQCST, @FRETEP, @SEGUROP, @OUTRASP,1,@CUSTOREAL,
@CUSTOREAL, 0, GETDATE(), 0, @PRECOATUAL, @PRECOANT)
END
--FIM DA PESQUISA
--PRINT @CST
FETCH NEXT FROM VCURSOR INTO @ITEM, @CODNOTA, @CODEAN, @NOME, @NCMS, @CFOP, @UN, @QTDE, @CUSTO, @TOTAL, @DESCTO, @BICMS,
@ALIQICMS, @VICMS, @BCST, @ALIQCST, @VCST, @ORIG, @ORI, @CSTIPI, @VBCIPI, @ALIQIPI,
@VIPI, @CSTPIS, @VBCPIS, @ALIQPIS, @VPIS, @CSTCOF, @ALIQCOF, @VCOF, @CSOSN, @VPMC
END
CLOSE VCURSOR
DEALLOCATE VCURSOR
---------------------------------------------------------------------------------------------
--PEGAR AS PRESTAÇÕES DO CARTÃO
---------------------------------------------------------------------------------------------
DECLARE XCURSOR CURSOR FOR SELECT * FROM Openxml(@DOC,[ô]//infNFe/cobr/dup[ô]) WITH ([Numero] VarChar(15) [ô]nDup[ô],
[DataVenc] SmallDateTime [ô]dVenc[ô],[Valor] SmallMoney [ô]vDup[ô])
DECLARE @NumDupl VARCHAR(15), @VencDupl SmallDateTime, @ValDupl SmallMoney
OPEN XCURSOR
FETCH NEXT FROM XCURSOR INTO @NumDupl, @VencDupl, @ValDupl
DECLARE @NDUP INT = 1
WHILE(@@FETCH_STATUS = 0) BEGIN
-- PRINT @NUMDUPL
IF @NumDupl IS NULL SET @NumDupl = @NUMNOTA + [ô]-[ô] + CAST(@NDUP AS VARCHAR(5))
UPDATE ITENSDESDOBRA SET CODFRN = @CODFRN, CODFRM = @CODFRM, VALOR = @VALDUPL, DATAVENC = @VENCDUPL WHERE NUMERO = @NUMDUPL
IF @@ROWCOUNT = 0
INSERT INTO ITENSDESDOBRA (NUMERO, DATAVENC, VALOR, CODFRN, CODFRM, CODDOC, TAXAS, DESCTO, CODDES)
VALUES(@NUMDUPL, @VENCDUPL, @VALDUPL, @CODFRN, @CODFRM, 1, 0, 0, 0)
FETCH NEXT FROM XCURSOR INTO @NumDupl, @VencDupl, @ValDupl
SET @NDUP = @NDUP + 1
END
CLOSE XCURSOR
DEALLOCATE XCURSOR
----------------------------------------------------------------------------------
EXEC SP_XML_REMOVEDOCUMENT @DOC
-- GRAVO O CONTEÚDO DO ARQUIVO XML
UPDATE NOTASREPXML SET CHAVE = @CHAVE, [XML] = CAST(@XML AS VARCHAR(MAX)) WHERE CODNOT = @CODNOT
IF @@ROWCOUNT = 0
INSERT INTO NOTASREPXML(CODNOT, CHAVE, [XML]) VALUES(@codnot, @chave, Cast(@XML as varchar(max)))
EXEC DBO.LISTANOTAREP @CodNot
End
Junte os dois tópicos anteriores ou seja, cole o segundo no final do primeiro
Seguem tb as funções abaixo, que fazem parte da rotina
Create Procedure [dbo].[ListaNotaRep](@Codigo Int) AS
--FUNÇÃO PARA MOSTRAR OS DADOS DE UMA NOTA FISCAL DE ENTRADA
BEGIN
IF @CODIGO > 0 BEGIN
SELECT N.Codigo, N.CgcDest, N.NumNota, N.CodFrn,
(Case N.CodFcn when 0 Then [ô][ô] else N.CodFcn End) as CodFcn, ISNULL(N.CodNat,[ô][ô]) as CodNat,
N.Serie,
dbo.Formatar(N.TotalNota,[ô].[ô],[ô],[ô]) as TotalNota,
(Case when N.DataEntra IS NULL then [ô][ô] else DBO.SoData(N.DataEntra) end) as DataEntra,
dbo.SoData(N.DataEmis) as DataEmis,
Dbo.Formatar(N.TotalProd,[ô].[ô],[ô],[ô]) as TotalProd,
Dbo.Formatar(N.BaseIcms,[ô].[ô],[ô],[ô]) as BaseIcms,
Dbo.Formatar(N.ValorIcms,[ô].[ô],[ô],[ô]) as ValorIcms,
Dbo.formatar(N.Seguro,[ô].[ô],[ô],[ô]) as Seguro,
dbo.Formatar(N.Frete,[ô].[ô],[ô],[ô]) as Frete,
(case when N.ConhFrete IS NULL Then [ô][ô] else dbo.formatar(N.ConhFrete,[ô].[ô],[ô],[ô]) End) as ConhFrete,
isnull(X.Nome, [ô][ô]) as NomeFrn,
dbo.formatar(N.BaseSub,[ô].[ô],[ô],[ô]) as BaseSub,
Dbo.Formatar(N.ValorSub,[ô].[ô],[ô],[ô]) as ValorSub,
Dbo.Formatar(N.IPI,[ô].[ô],[ô],[ô]) as IPI,
Dbo.Formatar(N.OutraDesp,[ô].[ô], [ô],[ô]) as OutraDesp, N.PIS, N.COFINS,
Dbo.Formatar(N.Desconto,[ô].[ô],[ô],[ô]) as Desconto, N.Chave, N.Tipo, F.Apelido, N.ConhFrete,
Isnull(P.Apelido,[ô][ô]) as ApelidoFrm,
(Case When (K.Chave IS NULL) Then 1 Else 2 End) as CodLanc,
(Case When K.Chave IS NULL Then [ô]NOTA FISCAL DIGITADA MANUALMENTE[ô] ELSE [ô]NOTA FISCAL IMPORTADA: CHAVE: [ô] + K.CHAVE END) AS TipoLanc,
(Case (Select Count(CodBar) from ItensRep where Flag = 0 and Lancou = 0 and CodNot = @Codigo) When 0 Then [ô]Jà LANÇADA[ô] else [ô]EM DIGITAÇÃO[ô] End) as NaoLanc
From ((((NotasRep N Left Join NotasRepXML as K On N.Codigo = K.CodNot) Left Join Funcionarios F on N.CodFcn = F.CodFcn) Left Join Fornecedores
X on N.CodFrn = X.CodFrn) Left Join Firmas P on N.CGCDest = P.CGC) Where N.Codigo = @Codigo;
Select I.Codigo, I.CodBar, I.Refer, I.Nome, I.CFOP, I.CST, I.Caixas, I.Qtde, I.QtdCxa, I.Valor, I.Descto, I.CST, I.QtdDesd,
I.BIcms, I.VIcms, I.AliqIPI, I.VIPI, I.AliqIcms, I.Seguro, I.Frete, I.Outras, I.CustoReal, I.PrecoAnt, I.Margem, I.CustoLoja,
I.PrecoAtual, I.VPis, I.VCofins, I.CstPis, I.CstCofins, I.NCMS, I.UN, I.VbcIPI, I.VIcmSubst, I.DifIcms, I.BIcmSubst, P.CodBar as CodPrd,
I.TipoCom From (ItensRep I Left Join Produtos P on I.Refer = P.CodBar) Where I.Flag = 0 and I.CodNot = @CODIGO order by Codigo;
END ELSE BEGIN
RAISERROR([ô]A Nota Fiscal informada não consta no Banco de Dados do Sistema ou não foi informada...[ô], 16, 1)
RETURN
END
END
Create FUNCTION [dbo].[Formatar](@Valor Numeric(18,4),@SepMilhar char(1),@SepDecimal Char(1))
Returns Varchar(50) AS
Begin
Declare @Inteiro int, @Texto varchar(50), @ValorDecimal varchar(04)
Set @Texto = RTrim(Cast(@Valor as varchar(50)))
Set @Inteiro = Cast(@Valor as Integer)
Set @ValorDecimal = SubString(@Texto,Len(@Texto)-3,2)
If Len(abs(@Inteiro)) = 1
Set @Texto = Cast(@Inteiro as varchar(10)) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 2
Set @Texto = Cast(@Inteiro as varchar(10)) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 3
Set @Texto = Cast(@Inteiro as varchar(10)) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 4
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 5
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,2) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),3,5) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 6
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),4,7) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 7
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),5,7) + @SepDecimal + @ValorDecimal
Return @Texto
End
Te larga uma nota prontinha na tela, sem precisar escrever uma linha de código sequer no teu sistema
Foi muito [Ô]foda[Ô] desenvolver tudo isso
Mas valeu a pena
Seguem tb as funções abaixo, que fazem parte da rotina
Create Procedure [dbo].[ListaNotaRep](@Codigo Int) AS
--FUNÇÃO PARA MOSTRAR OS DADOS DE UMA NOTA FISCAL DE ENTRADA
BEGIN
IF @CODIGO > 0 BEGIN
SELECT N.Codigo, N.CgcDest, N.NumNota, N.CodFrn,
(Case N.CodFcn when 0 Then [ô][ô] else N.CodFcn End) as CodFcn, ISNULL(N.CodNat,[ô][ô]) as CodNat,
N.Serie,
dbo.Formatar(N.TotalNota,[ô].[ô],[ô],[ô]) as TotalNota,
(Case when N.DataEntra IS NULL then [ô][ô] else DBO.SoData(N.DataEntra) end) as DataEntra,
dbo.SoData(N.DataEmis) as DataEmis,
Dbo.Formatar(N.TotalProd,[ô].[ô],[ô],[ô]) as TotalProd,
Dbo.Formatar(N.BaseIcms,[ô].[ô],[ô],[ô]) as BaseIcms,
Dbo.Formatar(N.ValorIcms,[ô].[ô],[ô],[ô]) as ValorIcms,
Dbo.formatar(N.Seguro,[ô].[ô],[ô],[ô]) as Seguro,
dbo.Formatar(N.Frete,[ô].[ô],[ô],[ô]) as Frete,
(case when N.ConhFrete IS NULL Then [ô][ô] else dbo.formatar(N.ConhFrete,[ô].[ô],[ô],[ô]) End) as ConhFrete,
isnull(X.Nome, [ô][ô]) as NomeFrn,
dbo.formatar(N.BaseSub,[ô].[ô],[ô],[ô]) as BaseSub,
Dbo.Formatar(N.ValorSub,[ô].[ô],[ô],[ô]) as ValorSub,
Dbo.Formatar(N.IPI,[ô].[ô],[ô],[ô]) as IPI,
Dbo.Formatar(N.OutraDesp,[ô].[ô], [ô],[ô]) as OutraDesp, N.PIS, N.COFINS,
Dbo.Formatar(N.Desconto,[ô].[ô],[ô],[ô]) as Desconto, N.Chave, N.Tipo, F.Apelido, N.ConhFrete,
Isnull(P.Apelido,[ô][ô]) as ApelidoFrm,
(Case When (K.Chave IS NULL) Then 1 Else 2 End) as CodLanc,
(Case When K.Chave IS NULL Then [ô]NOTA FISCAL DIGITADA MANUALMENTE[ô] ELSE [ô]NOTA FISCAL IMPORTADA: CHAVE: [ô] + K.CHAVE END) AS TipoLanc,
(Case (Select Count(CodBar) from ItensRep where Flag = 0 and Lancou = 0 and CodNot = @Codigo) When 0 Then [ô]Jà LANÇADA[ô] else [ô]EM DIGITAÇÃO[ô] End) as NaoLanc
From ((((NotasRep N Left Join NotasRepXML as K On N.Codigo = K.CodNot) Left Join Funcionarios F on N.CodFcn = F.CodFcn) Left Join Fornecedores
X on N.CodFrn = X.CodFrn) Left Join Firmas P on N.CGCDest = P.CGC) Where N.Codigo = @Codigo;
Select I.Codigo, I.CodBar, I.Refer, I.Nome, I.CFOP, I.CST, I.Caixas, I.Qtde, I.QtdCxa, I.Valor, I.Descto, I.CST, I.QtdDesd,
I.BIcms, I.VIcms, I.AliqIPI, I.VIPI, I.AliqIcms, I.Seguro, I.Frete, I.Outras, I.CustoReal, I.PrecoAnt, I.Margem, I.CustoLoja,
I.PrecoAtual, I.VPis, I.VCofins, I.CstPis, I.CstCofins, I.NCMS, I.UN, I.VbcIPI, I.VIcmSubst, I.DifIcms, I.BIcmSubst, P.CodBar as CodPrd,
I.TipoCom From (ItensRep I Left Join Produtos P on I.Refer = P.CodBar) Where I.Flag = 0 and I.CodNot = @CODIGO order by Codigo;
END ELSE BEGIN
RAISERROR([ô]A Nota Fiscal informada não consta no Banco de Dados do Sistema ou não foi informada...[ô], 16, 1)
RETURN
END
END
Create FUNCTION [dbo].[Formatar](@Valor Numeric(18,4),@SepMilhar char(1),@SepDecimal Char(1))
Returns Varchar(50) AS
Begin
Declare @Inteiro int, @Texto varchar(50), @ValorDecimal varchar(04)
Set @Texto = RTrim(Cast(@Valor as varchar(50)))
Set @Inteiro = Cast(@Valor as Integer)
Set @ValorDecimal = SubString(@Texto,Len(@Texto)-3,2)
If Len(abs(@Inteiro)) = 1
Set @Texto = Cast(@Inteiro as varchar(10)) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 2
Set @Texto = Cast(@Inteiro as varchar(10)) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 3
Set @Texto = Cast(@Inteiro as varchar(10)) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 4
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 5
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,2) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),3,5) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 6
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),4,7) + @SepDecimal + @ValorDecimal
If Len(abs(@Inteiro)) = 7
Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),5,7) + @SepDecimal + @ValorDecimal
Return @Texto
End
Te larga uma nota prontinha na tela, sem precisar escrever uma linha de código sequer no teu sistema
Foi muito [Ô]foda[Ô] desenvolver tudo isso
Mas valeu a pena
Tópico encerrado , respostas não são mais permitidas