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.

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

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

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

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

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

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

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

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

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

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

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

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.

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

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.

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.


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




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

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


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

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

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 02 jul 2024

Base conhecimento Bridge Mercos

264 | 47