Semana passada a Bling me orientou que existe no menu de configurações a rotina para Nota Fiscal > Natureza da Operação, onde podem ser definidas as regras de tributação, e assim definir uma CFOP para cada produto de acordo com a NCM.
O MySQL me informou que eu tenho atualmente 256 NCM dentro da tbprod, o problema é saber quem tem substituição tributária e quem não tem.
A Secretaria da Fazenda tem o regulamento do ICMS bem como planilhas que definem os produtos que tem substituição tributária, mas aquilo é bem difícil de entender e trabalhar.
A minha saída é olhar cada nota fiscal do fornecedor e corrigir o banco de dados.
Na tbprod eu criei o campo string cfop, e defini para todas elas 5405. A seguir criei uma rotina em PHP para olhar a nota do fornecedor no formato xml, comparar os dados com a tbprod, e assim corrigir o que for necessário:
arquivo nf.php
<?php
class NF {function CFOP(){return view('nfArquivo',['action'=>'?NF.CFOPselecionado']);}functionCFOPatualizar(){
$cfop = $_POST['cfop'];
$codprod = $_POST['codprod'];(newConn)->update("tbprod set cfop='$cfop' where codprod = $codprod");}functionCFOPselecionado(){(newConn)->delete("tbnf");(newConn)->exec("alter table tbnf auto_increment = 1");
$nfe=simplexml_load_file($_FILES['arquivo']['tmp_name']);
$itens=$nfe->NFe->infNFe->det;
$nNF =(float)$nfe->NFe->infNFe->ide->nNF;
$xNome =(string)$nfe->NFe->infNFe->emit->xNome;
$nome = explode(" ", $xNome)[0];
$codp =(newConn)->select("codp from tbpessoa where pessoa like '%$nome%'")[0]->codp;foreach($itens as $item){// no campo codforn uso a primeira letra para identificar o fornecedor
$codforn =(string)$item->prod->cProd;
$criterio= strtolower($nome[0].$codforn);
$consulta =(newConn)->select("* from tbprod where codforn like '%$criterio%' ");
$codprod ='null';if(count($consulta)==1){
$codprod = $consulta[0]->codprod;}if(count($consulta)>1){
$consulta2 =(newConn)->select("* from tbprod where codforn like '%$criterio' ");if(count($consulta2)==1){
$codprod = $consulta2[0]->codprod;}else{
echo "existem vários produtos com codforn com o critério $criterio";foreach($consulta as $c){
echo "<br>".$c->codprod." ".$c->prod;}exit;}}if(count($consulta)==0){
echo "nenhum produto encontrado com o critério $criterio";exit;}
$produto = substr((string)$item->prod->xProd,0,79);
$cfop =(string)$item->prod->CFOP;if($cfop==6101|| $cfop==6102|| $cfop==5101){
$cfop=5102;}if($cfop==6401|| $cfop==6402|| $cfop==5401){
$cfop=5405;}
$class=($cfop == $consulta[0]->cfop)?"w-[50px] text-right":"w-[50px] text-red-500 text-right";
$ncm =(string)$item->prod->NCM;
$class2=($ncm == $consulta[0]->cf)?"w-[100px] text-right":"w-[100px] text-red-500 text-right";(newConn)->insert("tbnf (codforn,codprod,prod,cfop,codp,ncm,class,class2)
values ($codforn,$codprod,'$produto','$cfop',$codp,'$ncm','$class','$class2')");}
$previa=(newConn)->select("* from tbnf");
$_SESSION['vetor']=['nNF'=> $nNF,'xNome'=> $xNome,'codp'=> $codp];return view('nfCFOPView',['previa'=>$previa,'nNF'=> $nNF,'xNome'=> $xNome,'codp'=> $codp]);}}
arquivo nfArquivo.php
<?php require'menuView.php'?><script>btmenu.innerHTML="Nota do Fornecedor";document.title="Nota do Fornecedor"</script><divclass=mb-3>
<form method=post enctype="multipart/form-data" action="<?=$action?>">
<labelfor=arquivoclass=form-label>Escolha o arquivo XML</label><inputtype=filename=arquivoclass=form-controlid=formfilerequiredonchange=submit()></form></div>
arquivo nfCFOPview.php
<?php include('menuView.php');?><script>
btMenu.innerHTML='NF Fornecedor CFOP';document.title="NF Fornecedor CFOP"function atualizar(cfop, codprod){var xmlhttp =newXMLHttpRequest();var url ="?NF.CFOPatualizar";var formData =newFormData();
formData.append('cfop', cfop);
formData.append('codprod', codprod);
xmlhttp.open("POST", url,true);
xmlhttp.onreadystatechange =function(){if(xmlhttp.readyState ==4){
console.log("Estado da requisição: "+ xmlhttp.readyState);if(xmlhttp.status ==200){
location.reload();}else{
alert("Erro na requisição: "+ xmlhttp.status);}}};
xmlhttp.send(formData);}</script><divclass="flex"><divclass="w-[50px] text-right">Cforn</div><divclass="w-[50px] text-right">Cod</div><divclass="w-[448px] ml-2">Produto</div><divclass="w-[50px] text-right">CFOP</div><divclass="w-[100px] text-right">NCM</div></div><?php foreach($previa as $p):?><divclass="flex odd:bg-gray-200"><divclass="w-[50px] text-right"><?=$p->codforn?></div><divclass="w-[50px] text-right"><?=$p->codprod?></div><divclass="w-[448px] ml-2 truncate"><?=$p->prod?></div>
<div class="<?=$p->class?>" onclick="atualizar(<?=$p->cfop?>,<?=$p->codprod?>)">
<?=$p->cfop?></div>
<div class="<?=$p->class2?>"><?=$p->ncm?></div></div><?php endforeach;?>
Pergunta
Frank K Hosaka
Semana passada a Bling me orientou que existe no menu de configurações a rotina para Nota Fiscal > Natureza da Operação, onde podem ser definidas as regras de tributação, e assim definir uma CFOP para cada produto de acordo com a NCM.
O MySQL me informou que eu tenho atualmente 256 NCM dentro da tbprod, o problema é saber quem tem substituição tributária e quem não tem.
A Secretaria da Fazenda tem o regulamento do ICMS bem como planilhas que definem os produtos que tem substituição tributária, mas aquilo é bem difícil de entender e trabalhar.
A minha saída é olhar cada nota fiscal do fornecedor e corrigir o banco de dados.
Na tbprod eu criei o campo string cfop, e defini para todas elas 5405. A seguir criei uma rotina em PHP para olhar a nota do fornecedor no formato xml, comparar os dados com a tbprod, e assim corrigir o que for necessário:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.