Primeiramente, no banco de dados do cliente, precisamos acessar o IBExpert e, no executor de SELECT, rodar o comando abaixo para obter as informações corretas dos produtos:
SELECT DISTINCT prod.idproduto, prod.descricao, prod.codncm, prod.codcest, prod.codbarras, CASE WHEN ncm.idgrupoicms = 600 THEN 5405 WHEN ncm.idgrupoicms = 605 THEN 5102 ELSE 5102 END AS CFOP, CASE WHEN ncm.idgrupoicms = 600 THEN 60 WHEN ncm.idgrupoicms = 605 THEN '00' ELSE 40 END AS CST, pis.entrada_pis_cst, pis.entrada_cofins_cst, pis.saida_pis_cst, pis.saida_cofins_cst, prod.cclasstrib_ibs_cbs AS cClassTrib FROM testproduto prod INNER JOIN testncm ncm ON (prod.codncm = ncm.codigo) INNER JOIN testprodutoempresa proe ON (prod.idproduto = proe.idproduto AND prod.empresa = proe.empresa) INNER JOIN testgrupopiscofins pis ON (proe.idgrupopiscofins = pis.idgrupopiscofins) WHERE prod.ativo = 'S' ORDER BY prod.idproduto
Após executar o SELECT no IBExpert, é necessário exportar o resultado para arquivo CSV.
Siga os passos abaixo:
Após exportar o arquivo no formato CSV, é necessário convertê-lo para o formato .XLSX, pois é o formato mais utilizado pelas contabilidades.
Após esse processo, o arquivo estará no formato adequado para envio à contabilidade.
Antes de alterar os campos para formato Texto, é necessário inserir três novas colunas na planilha.
1. **ALIQ. PIS** 2. **ALIQ. COFINS** 3. **COD. DA NATUREZA PIS/COFINS**
Após a inserção:
⚠️ Certifique-se de que os dados não foram desalinhados após a inserção das novas colunas.
⚠️ Este passo é obrigatório antes de enviar o arquivo para a contabilidade.
O Excel pode remover automaticamente os zeros à esquerda e alterar formatações, o que compromete códigos e percentuais tributários.
Caso esses campos permaneçam como Geral ou Número, o Excel poderá:
⚠️ Sempre conferir se todas as colunas estão realmente como TEXTO antes de enviar o arquivo.
Após isso, enviar a planilha para a contabilidade conferir e ajustar os dados. Quando a planilha retornar, seguir para as próximas etapas do processo.
Após a contabilidade devolver a planilha preenchida, seguir os passos abaixo antes de gerar e executar o script de atualização dos produtos.
Antes de qualquer ajuste no banco, realizar uma conferência rápida:
⚠️ Caso o Excel tenha convertido algum campo automaticamente (removendo zeros à esquerda), corrigir antes de prosseguir.
O primeiro passo após o retorno da planilha é extrair as combinações únicas de Grupo PIS/COFINS, para cadastrar no banco de dados do cliente os grupos que ainda não existirem.
As combinações devem ser formadas com os seguintes campos:
Essa etapa é necessária para que, posteriormente, seja possível vincular corretamente cada produto ao seu respectivo grupo no momento da atualização.
Para auxiliar na identificação das combinações únicas, pode-se utilizar ferramentas de IA (como ChatGPT) ou recursos do próprio Excel, solicitando a extração das combinações distintas com base nos campos acima.
Com as combinações identificadas:
⚠️ Importante: Não executar atualização de produtos apontando para grupos inexistentes, pois isso pode gerar inconsistência e falha no processo.
Com os Grupos de PIS/COFINS já cadastrados no banco de dados do cliente, iremos gerar o script de atualização através do Excel.
⚠️ Importante: Realizar as validações primeiro em um backup do banco do cliente. Após confirmar que os resultados ficaram corretos, executar os scripts no banco de produção.
="UPDATE TESTPRODUTO SET CODNCM = '"&
SE(ARRUMAR(C2)="";"";TEXTO(VALOR(ARRUMAR(C2));"00000000"))&
"', CODCEST = '"&
SE(ARRUMAR(D2)="";"";TEXTO(VALOR(ARRUMAR(D2));"0000000"))&
"', CCLASSTRIB_IBS_CBS = '"&
SE(ARRUMAR(O2)="";"";TEXTO(VALOR(ARRUMAR(O2));"000000"))&
"' WHERE IDPRODUTO = "&VALOR(A2)&"; "&
"UPDATE TESTPRODUTOEMPRESA T SET IDGRUPOPISCOFINS = COALESCE(("&
"SELECT FIRST 1 G.IDGRUPOPISCOFINS FROM TESTGRUPOPISCOFINS G WHERE G.EMPRESA = 1 "&
"AND LPAD(TRIM(G.ENTRADA_PIS_CST),2,'0') = '"&SE(ARRUMAR(H2)="";"99";TEXTO(VALOR(ARRUMAR(H2));"00"))&"' "&
"AND LPAD(TRIM(G.ENTRADA_COFINS_CST),2,'0') = '"&SE(ARRUMAR(I2)="";"99";TEXTO(VALOR(ARRUMAR(I2));"00"))&"' "&
"AND LPAD(TRIM(G.SAIDA_PIS_CST),2,'0') = '"&SE(ARRUMAR(J2)="";"99";TEXTO(VALOR(ARRUMAR(J2));"00"))&"' "&
"AND LPAD(TRIM(G.SAIDA_COFINS_CST),2,'0') = '"&SE(ARRUMAR(K2)="";"99";TEXTO(VALOR(ARRUMAR(K2));"00"))&"'"&
SE(OU(N2="";N2=0);
"";
" ORDER BY CASE WHEN COALESCE(G.SAIDA_NATUREZA_RECEITA_ID,0) = COALESCE(("&
"SELECT FIRST 1 N2.CODIGO FROM TESTNATUREZARECEITA N2 WHERE N2.CODIGONATUREZA = "&N2&
"),0) THEN 0 ELSE 1 END"
)&
"), T.IDGRUPOPISCOFINS) "&
"WHERE T.EMPRESA = 1 AND T.IDPRODUTO = "&VALOR(A2)&";"
⚠️ Atenção: Caso a ordem das colunas da planilha seja alterada, é necessário ajustar as referências de células da fórmula (ex.: C2, D2, H2, I2, J2, K2, N2, O2).