POST DESTINADO A TÉCNICOS DA VR SYSTEM! NÃO ENVIAR AOS PARCEIROS.
SEMPRE REALIZEM O BACKUP ANTES DE EXECUTAR QUALQUER COMANDO!

O mercos sincroniza apenas clientes e transportadoras (Tipo 'C' e "T'). A ordem de sincronia é pela data cadastro dos clientes e os clientes inativos não são sincronizados

Como padrão, deixe DESMARCADO para bloquear CNPJ repetido e os campos do cadastro como obrigatórios, para não retornar erro na sync. Caso desmarque essa opção no Mercos, vai permitir a sincronia de CNPJ's duplicados

imagem_20240628_142615795.png

Abaixo alguns selects e updates para conferir e corrigir alguns possíveis erros.

cliente sem id mercos

select
	IdMercos,DataCadastro,Codigo,nome,FisicaJuridica,cnpj,Fantasia,Inscricao,Obs,CEP,Endereco,Numero,Complemento,Bairro,Cidade,UF,Fone1,Fone2,Email
from Cli_For
where
	inativo = 0 
	AND STATUS = 0
	AND TIPO ='C'
	AND IdMercos = 0
order by
	DataCadastro
  

cliente com id mercos

select
	IdMercos,DataCadastro,Codigo,nome,FisicaJuridica,cnpj,Fantasia,Inscricao,Obs,CEP,Endereco,Numero,Complemento,Bairro,Cidade,UF,Fone1,Fone2,Email
from Cli_For
where
	inativo = 0
	AND STATUS = 0 
	AND TIPO ='C'
	AND IdMercos <> 0
order by
		IdMercos desc
  

transportadora sem id mercos

select
	IdMercos,DataCadastro,DataAlteracao,Codigo,nome,Obs,Cidade,UF,Fone1,Fone2
from Cli_For
where
	inativo = 0 
	AND STATUS = 0 
	AND TIPO = 'T'
	AND IdMercos = 0
order by
	DataCadastro
  


O Mercos não aceita caracteres especiais no campo nome

verificar clientes com caractere especial no nome

select
	IdMercos,DataCadastro,Codigo,nome,FisicaJuridica,cnpj,Fantasia,Inscricao,Obs,CEP,Endereco,Numero,Complemento,Bairro,Cidade,UF,Fone1,Fone2,Email
from Cli_For
where
	inativo = 0 
	AND STATUS = 0 
	AND TIPO IN ('C','T')
	AND PATINDEX('%[!#$&()*+,-./:;<=>?{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¿ÆÐרÞß÷ø]%', Nome) > 0
  


retirar caracteres especiais do nome

update Cli_For
SET nome = (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(nome,char(33), ''),char(34), ''),char(35), ''),char(36), ''),char(37), ''),char(38), 'E'),char(39), ''),char(40), ''),char(41), ''),char(42), ''),char(43), ''),char(44), ''),char(45), ''),char(46), ''),char(47), ''),char(58), ''),char(59), ''),char(60), ''),char(61), ''),char(62), ''),char(63), ''),char(64), 'A'),char(94), ''),char(95), ''),char(93), ''),char(92), ''),char(91), ''),char(96), ''),char(123), ''),char(124), ''),char(125), ''),char(126), ''),char(127), ''),char(128), 'E'),char(130), ''),char(131), 'f'),char(132), ''),char(133), ''),char(134), ''),char(135), ''),char(136), ''),char(137), ''),char(138), 'S'),char(139), ''),char(140), ''),char(142), 'Z'),char(145), ''),char(146), ''),char(147), ''),char(148), ''),char(149), ''),char(150), ''),char(151), ''),char(152), ''),char(153), ''),char(154), 's'),char(155), ''),char(156), ''),char(158), 'z'),char(159), 'Y'),char(160), ''),char(161), 'i'),char(162), 'c'),char(163), 'E'),char(164), ''),char(165), ''),char(166), ''),char(168), ''),char(169), ''),char(170), 'a'),char(171), ''),char(172), ''),char(173), ''),char(174), 'R'),char(175), ''),char(176), ''),char(177), ''),char(180), ''),char(181), 'u'),char(182), ''),char(183), ''),char(184), ''),char(186), 'o'),char(187), ''),char(188), ''),char(189), ''),char(190), ''),char(191), ''),char(198), 'E'),char(208), 'D'),char(215), 'x'),char(216), 'O'),char(248), 'o'),char(247), ''),char(222), 'b'),char(223), 'B'),char(241), 'n'),char(240), 'd'),char(230), 'e'))
WHERE 
	inativo = 0
	AND STATUS = 0
	AND TIPO IN ('C','T')
	AND IdMercos <> 0
	AND (PATINDEX('%[!#$%&()*+,-./:;<=>?{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¿ÆÐרÞß÷ø]%', Nome) > 0)
  


O Mercos valida se o CPF ou CNPJ é realmente válido. Ao salvar o cadastro do cliente no Etrade é possível verificar se é válido ou não, mas caso o CNPJ esteja cessado não irá retornar, sendo preciso verificar no Sintegra.

Rode um select para identificar se o campo CNPJ/CPF possui menos caracteres que o correto

cnpj

SELECT CNPJ FROM Cli_For
WHERE len (CNPJ) <> 14
			AND FisicaJuridica = 'J'  
  

cpf

SELECT CNPJ FROM Cli_For
WHERE len (CNPJ) <> 11
			AND FisicaJuridica = 'F' 
  

Não são aceitos caracteres ('.','-','/') no campo CNPJ

remover caracteres do CNPJ/CPF

UPDATE Cli_For
SET CNPJ = REPLACE(REPLACE(REPLACE(CNPJ, '.', ''), '-', ''), '/', '')
WHERE
	CNPJ LIKE '%.%' OR CNPJ LIKE '%-%' OR CNPJ LIKE '%/%' AND
	AND inativo = 0 
	AND STATUS = 0 
	AND TIPO in ('C','T') 
  


Não é aceito o caractere (-) no campo CEP

remover caractere (-) do cep

UPDATE Cli_For
SET CEP = REPLACE(CEP, '-', '')
WHERE CEP LIKE '%-%'
	AND inativo = 0
	AND STATUS = 0 
	AND TIPO in ('C','T')
  

CEPS que não tenham número (0 a 9) informados ou com menos de 8 dígitos também não são permitidos

verificar ceps com menos de 8 dígitos ou sem números

select
	IdMercos,DataCadastro,Codigo,nome,FisicaJuridica,cnpj,Fantasia,Inscricao,Obs,CEP,Endereco,Numero,Complemento,Bairro,Cidade,UF,Fone1,Fone2,Email
from Cli_For
where
	inativo = 0
	AND STATUS = 0
	AND TIPO in ('C','T')
	AND CEP <>''
	AND (CEP NOT LIKE '%[0-9]%' OR  LEN (CEP) < 8)
  

O Mercos verifica se o CEP é realmente válido, normalmente CEPs genéricos, com final "000", não são aceitos. Crie um campo personalizado e jogue os CEPS para lá. Verifique qual o campo foi criado, no caso do comando utilizamos o OSIdentificador2

transferir cep pro campo osidentificador2 e limpar o campo cep

update Cli_For set OsIdentificador2 = CEP where CEP like '%000';
update Cli_For set CEP ='' where OsIdentificador2 like '%000'
  


Caso tenha alguma informação no campo UF que não seja uma UF válida é retornado erro, use esse select para filtrar e corrija no cadastro.

verificar uf inválida

select
	IdMercos,DataCadastro,Codigo,nome,FisicaJuridica,cnpj,Fantasia,Inscricao,Obs,CEP,Endereco,Numero,Complemento,Bairro,Cidade,UF,Fone1,Fone2,Email
from Cli_For
where
	inativo = 0 
	AND STATUS = 0 ND
	AND TIPO in ('C','T')
  AND UF NOT IN ('AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA', 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN', 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO')
	AND UF <>''
  


Não é aceito espaço em branco no começo e fim do campo. O comando abaixo retira esses espaços dos campos Nome, CNPJ, Fantasia, Inscricao, Obs, CEP, Endereco, Numero, Complemento, Bairro, Cidade, UF, Fone1, Fone2, Email

retirar espaços no início e no fim

UPDATE Cli_For
SET Nome = LTRIM(Nome), CNPJ = ltrim(cnpj), Fantasia = ltrim(fantasia), Inscricao = ltrim(inscricao), obs = ltrim(obs), cep = ltrim(cep), Endereco = ltrim(endereco), Numero = ltrim(numero), Complemento = ltrim(Complemento), Bairro = ltrim(bairro), cidade = ltrim(cidade), uf = ltrim(uf), fone1 = ltrim(fone1), fone2 = ltrim(fone2), Email = ltrim(email)
WHERE   inativo = 0 
	AND STATUS = 0 
	AND TIPO in ('C','T') 
	and (nome LIKE ' %' AND Nome <>'') 
	or (cnpj LIKE ' %' AND cnpj <>'') 
	or (fantasia LIKE ' %' AND Fantasia <>'') 
	or (Inscricao LIKE ' %' AND Inscricao<>'') 
	or (obs LIKE ' %' AND obs <>'') 
	or (cep LIKE ' %' AND cep <>'') 
	or (endereco LIKE ' %' AND endereco <>'') 
	or (numero LIKE ' %' AND numero <>'') 
	or (complemento LIKE ' %' AND complemento <>'') 
	or (bairro LIKE ' %' AND bairro <>'') 
	or (cidade LIKE ' %' AND cidade<>'') 
	or (uf LIKE ' %' AND uf <>'') 
	or (fone1 LIKE ' %' AND fone1 <>'') 
	or (fone2 LIKE ' %' AND fone2 <>'') 
	or (Email LIKE ' %' AND email <>'') ;

UPDATE Cli_For SET Nome = RTRIM(Nome), CNPJ = RTRIM(cnpj), Fantasia = RTRIM(fantasia), Inscricao = RTRIM(inscricao), obs = RTRIM(obs), cep = RTRIM(cep), Endereco = RTRIM(endereco), Numero = RTRIM(numero), Complemento = RTRIM(Complemento), Bairro = RTRIM(bairro), cidade = RTRIM(cidade), uf = RTRIM(uf), fone1 = RTRIM(fone1), fone2 = RTRIM(fone2), Email = RTRIM(email) WHERE inativo = 0 AND STATUS = 0 AND TIPO in ('C','T') and (nome LIKE '% ' AND Nome <>'') or (cnpj LIKE '% ' AND cnpj <>'') or (fantasia LIKE '% ' AND Fantasia <>'') or (Inscricao LIKE '% ' AND Inscricao<>'') or (obs LIKE '% ' AND obs <>'') or (cep LIKE '% ' AND cep <>'') or (endereco LIKE '% ' AND endereco <>'') or (numero LIKE '% ' AND numero <>'') or (complemento LIKE '% ' AND complemento <>'') or (bairro LIKE '% ' AND bairro <>'') or (cidade LIKE '% ' AND cidade<>'') or (uf LIKE '% ' AND uf <>'') or (fone1 LIKE '% ' AND fone1 <>'') or (fone2 LIKE '% ' AND fone2 <>'') or (Email LIKE '% ' AND email <>'') ;



No campo e-mail só é aceito um e-mail com estrutura válida, utilize esse select para buscar e-mails com estrutura inválida e depois corrija-o.

verificar estrutura do email

SELECT 
	IdMercos,DataCadastro,Codigo,UF,nome,cnpj,Fantasia,Email,FisicaJuridica,Tipo_IE,Inscricao,Obs,CEP,Endereco,Numero,Complemento,Bairro,cidade, Fone1, Fone2
FROM Cli_For
WHERE 
	inativo = 0
	AND STATUS = 0 
	AND TIPO in ('C','T')
	AND IdMercos = 0
	AND (Email not like '%@%' AND Email <>'') or (email like '% %')
ORDER BY
	DataCadastro
  

imagem_20240702_102222501.png ?

Explicação: esse erro normalmente ocorre quando possui mais de um recebível com a mesma sequência no seu cadastro, ocorrendo quando o cliente insere essa sequência manualmente.

Correção: precisa zerar o campo sequência em que possui o IdMercos zerado. Pode utilizar o comando abaixo após pegar a ide do financeiro_conta.


zerar sequencia na financeiro_conta

update financeiro_conta set Sequencia = '' where IDMercos = '' and IDE = 'IDE AQUI'
  




identificar produtos com caractere especial no nome

SELECT 
	Data_Cadastro,IdMercos,nome
FROM produto
WHERE
	inativo = '0'
	AND SincronizaWeb = 1
	AND Tipo = 'N'
	AND IdMercos = 0
	AND PATINDEX('%[!#$&()*+,-./:;<=>?{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¿ÆÐרÞß÷ø]%', Nome) > 0
ORDER BY 
	Data_Cadastro
  

remover caractere especial do nome

UPDATE produto
SET nome = (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(nome,char(33), ''),char(34), ''),char(35), ''),char(36), ''),char(37), ''),char(38), 'E'),char(39), ''),char(40), ''),char(41), ''),char(42), ''),char(43), ''),char(44), ''),char(45), ''),char(46), ''),char(47), ''),char(58), ''),char(59), ''),char(60), ''),char(61), ''),char(62), ''),char(63), ''),char(64), 'A'),char(94), ''),char(95), ''),char(93), ''),char(92), ''),char(91), ''),char(96), ''),char(123), ''),char(124), ''),char(125), ''),char(126), ''),char(127), ''),char(128), 'E'),char(130), ''),char(131), 'f'),char(132), ''),char(133), ''),char(134), ''),char(135), ''),char(136), ''),char(137), ''),char(138), 'S'),char(139), ''),char(140), ''),char(142), 'Z'),char(145), ''),char(146), ''),char(147), ''),char(148), ''),char(149), ''),char(150), ''),char(151), ''),char(152), ''),char(153), ''),char(154), 's'),char(155), ''),char(156), ''),char(158), 'z'),char(159), 'Y'),char(160), ''),char(161), 'i'),char(162), 'c'),char(163), 'E'),char(164), ''),char(165), ''),char(166), ''),char(168), ''),char(169), ''),char(170), 'a'),char(171), ''),char(172), ''),char(173), ''),char(174), 'R'),char(175), ''),char(176), ''),char(177), ''),char(180), ''),char(181), 'u'),char(182), ''),char(183), ''),char(184), ''),char(186), 'o'),char(187), ''),char(188), ''),char(189), ''),char(190), ''),char(191), ''),char(198), 'E'),char(208), 'D'),char(215), 'x'),char(216), 'O'),char(248), 'o'),char(247), ''),char(222), 'b'),char(223), 'B'),char(241), 'n'),char(240), 'd'),char(230), 'e'))
WHERE 
	inativo = '0'
	AND SincronizaWeb = 1
	AND Tipo = 'N'
	AND IdMercos = 0
	AND (
	PATINDEX('%[!#$%&()*+,-./:;<=>?{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¿ÆÐרÞß÷ø]%', Nome) > 0)
  


imagem_20240702_105612632.png

Explicação: este erro ocorre porque o produto está com a ide zerada na tabela produtopreco. Rode o comando abaixo para relacioná-lo à tabela de produto


relacionar produto na produtopreco

update ProdutoPreco set Produto__Ide = p.ide
from ProdutoPreco pp
INNER join produto p on pp.Produto__Codigo = p.codigo and pp.Produto__Ide = cast(0x00 as uniqueidentifier)
  

Caso haja tabela de preço duplicada no produto também irá retornar erro

verificar se tem tabela de preço duplicada

WITH CTE AS
(SELECT ROW_NUMBER() OVER (PARTITION BY PRODUTO__CODIGO,TABELAPRECO__IDE ORDER BY DATAALTERACAO DESC) AS RN
, PRODUTO__CODIGO
, (SELECT NOME FROM PRODUTO WHERE CODIGO = PRODUTO__CODIGO) [NOME]
, (SELECT NOME FROM TABELAPRECO WHERE IDE = TABELAPRECO__IDE) [TABELA PREÇO]
, DATAALTERACAO
FROM PRODUTOPRECO
WHERE STATUS <> -1
AND TABELAPRECO__IDE IN (SELECT IDE FROM TABELAPRECO WHERE INATIVO <> 'TRUE' AND CUSTOMEDIO <> 'TRUE'))
SELECT * FROM CTE WHERE RN>1
  

deletar linha de preço duplicada

WITH CTE AS
(SELECT ROW_NUMBER() OVER (PARTITION BY PRODUTO__CODIGO,TABELAPRECO__IDE ORDER BY DATAALTERACAO DESC) AS RN
, PRODUTO__CODIGO
, (SELECT NOME FROM PRODUTO WHERE CODIGO = PRODUTO__CODIGO) [NOME]
, (SELECT NOME FROM TABELAPRECO WHERE IDE = TABELAPRECO__IDE) [TABELA PREÇO]
, DATAALTERACAO
FROM PRODUTOPRECO
WHERE STATUS <> -1
AND TABELAPRECO__IDE IN (SELECT IDE FROM TABELAPRECO WHERE INATIVO <> 'TRUE' AND CUSTOMEDIO <> 'TRUE'))
DELETE FROM CTE WHERE RN>1
  

POST DESTINADO A TÉCNICOS DA VR SYSTEM! NÃO ENVIAR AOS PARCEIROS.
SEMPRE REALIZEM O BACKUP ANTES DE EXECUTAR QUALQUER COMANDO!
Yancriado em 28 jun 2024 alterado em 13 ago 2025

Base conhecimento Bridge Mercos

346 | 48