nfephp-org / nfephp

PROJETO DEPRECATED use sped-nfe
https://github.com/nfephp-org/sped-nfe
Other
693 stars 686 forks source link

MakeNFe.php infAdProd e nFCI vazias #453

Closed guicalabria closed 9 years ago

guicalabria commented 9 years ago

Olá, Eu estava obtendo erros na validação nos campos infAdProd e nFCI quando não possui valores. A classe MakeNFe.php gera a TAG sendo < infAdProd / > . "Erro Elemento 'infAdProd': [Erro 'Tam. Min'] O valor tem o tamanho '0'; " Alterei a linha 1372, adicionada o IF para somente adicionar o nFCI se houver valor, se não ignorar; ficando: if ( $nFCI!='' ) $this->dom->addChild($prod,"nFCI",$nFCI,false,$identificador . "[item $nItem] Número de controle da FCI - Ficha de Conteúdo de Importação");

E a linha linha 1415, adicionado IF para somente adicionar o infAdProd quando $texto!='' public function taginfAdProd($nItem = '', $texto = '') { if ( $texto =='' ) return ''; $infAdProd = $this->dom->createElement("infAdProd", $texto); $this->aInfAdProd[$nItem] = $infAdProd; return $infAdProd; }

Me desculpe não enviar pelo GITHUb até hoje eu nunca consegui enviar uma alteração :-( diretamente... ele retorna que eu não tenho autorização para fazer isso... pretendo reservar um tempo em breve para aprender a usar o GitHub melhor.

robmachado commented 9 years ago

Guilherme;

Você não está entendendo ...

function tagInfAdProd($nItem = '', $texto = '') só deve ser chamada se houver algo a incluir, seu sistema é quem deve decidir e não a classe Make.

quando ao FCI vale a mesma coisa se estiver em branco não vai gerar a TAG por isso o $this->addChiled tem aquele "false" estabelecido, então é só deixar vazio, porém se tiver um espaço a função vai criar a TAG.

Bom dito isso, complemento .... DESIGN PATTERNS, SOLID, ETC.. devemos evitar "IF's" e colocar coisas que não são de responsabilidade da classe.

Não estou satisfeito em fazer nenhuma dessas alterações, para mim são totalmente desnecessárias.

Abraço

Roberto

guicalabria commented 9 years ago

Roberto, Esse problema é gerado pela utilização da classe ConvertNFe que automaticamente chama esses métodos mesmo quando os valores são vazios como: H|1|| ou I|cProd|cEAN|xProd|NCM|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc| vOutro|indTot|xPed|nItemPed|| <- vazio

Abraços, Guilherme

Em 26 de março de 2015 17:49, Roberto L. Machado notifications@github.com escreveu:

Guilherme;

Você não está entendendo ...

function tagInfAdProd($nItem = '', $texto = '') só deve ser chamada se houver algo a incluir, seu sistema é quem deve decidir e não a classe Make.

quando ao FCI vale a mesma coisa se estiver em branco não vai gerar a TAG por isso o $this->addChiled tem aquele "false" estabelecido, então é só deixar vazio, porém se tiver um espaço a função vai criar a TAG.

Bom dito isso, complemento .... DESIGN PATTERNS, SOLID, ETC.. devemos evitar "IF's" e colocar coisas que não são de responsabilidade da classe.

Não estou satisfeito em fazer nenhuma dessas alterações, para mim são totalmente desnecessárias.

Abraço

Roberto

— Reply to this email directly or view it on GitHub https://github.com/nfephp-org/nfephp/issues/453#issuecomment-86709018.

guicalabria commented 9 years ago

ConvertNFe está assim: /* * hEntity * Cria tag infAdProd * @param array $aCampos / protected function hEntity($aCampos) { //H|item|infAdProd $this->make->taginfAdProd($aCampos[1], $aCampos[2]); $this->nItem = (integer) $aCampos[1]; }

De qualquer forma irá adicionar a infAdProd.

Talvez mexer na classe convert então?

Abraços;

Em 26 de março de 2015 18:07, Guilherme Calabria Filho guiga86@gmail.com escreveu:

Roberto, Esse problema é gerado pela utilização da classe ConvertNFe que automaticamente chama esses métodos mesmo quando os valores são vazios como: H|1|| ou

I|cProd|cEAN|xProd|NCM|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc| vOutro|indTot|xPed|nItemPed|| <- vazio

Abraços, Guilherme

Em 26 de março de 2015 17:49, Roberto L. Machado <notifications@github.com

escreveu:

Guilherme;

Você não está entendendo ...

function tagInfAdProd($nItem = '', $texto = '') só deve ser chamada se houver algo a incluir, seu sistema é quem deve decidir e não a classe Make.

quando ao FCI vale a mesma coisa se estiver em branco não vai gerar a TAG por isso o $this->addChiled tem aquele "false" estabelecido, então é só deixar vazio, porém se tiver um espaço a função vai criar a TAG.

Bom dito isso, complemento .... DESIGN PATTERNS, SOLID, ETC.. devemos evitar "IF's" e colocar coisas que não são de responsabilidade da classe.

Não estou satisfeito em fazer nenhuma dessas alterações, para mim são totalmente desnecessárias.

Abraço

Roberto

— Reply to this email directly or view it on GitHub https://github.com/nfephp-org/nfephp/issues/453#issuecomment-86709018.

robmachado commented 9 years ago

Sim na classe convert devemos corrigir Em 26/03/2015 18:09, "guicalabria" notifications@github.com escreveu:

ConvertNFe está assim: /**

  • hEntity
  • Cria tag infAdProd
  • @param array $aCampos */ protected function hEntity($aCampos) { //H|item|infAdProd $this->make->taginfAdProd($aCampos[1], $aCampos[2]); $this->nItem = (integer) $aCampos[1]; }

De qualquer forma irá adicionar a infAdProd.

Talvez mexer na classe convert então?

Abraços;

Em 26 de março de 2015 18:07, Guilherme Calabria Filho guiga86@gmail.com escreveu:

Roberto, Esse problema é gerado pela utilização da classe ConvertNFe que automaticamente chama esses métodos mesmo quando os valores são vazios como: H|1|| ou

I|cProd|cEAN|xProd|NCM|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc| vOutro|indTot|xPed|nItemPed|| <- vazio

Abraços, Guilherme

Em 26 de março de 2015 17:49, Roberto L. Machado < notifications@github.com

escreveu:

Guilherme;

Você não está entendendo ...

function tagInfAdProd($nItem = '', $texto = '') só deve ser chamada se houver algo a incluir, seu sistema é quem deve decidir e não a classe Make.

quando ao FCI vale a mesma coisa se estiver em branco não vai gerar a TAG por isso o $this->addChiled tem aquele "false" estabelecido, então é só deixar vazio, porém se tiver um espaço a função vai criar a TAG.

Bom dito isso, complemento .... DESIGN PATTERNS, SOLID, ETC.. devemos evitar "IF's" e colocar coisas que não são de responsabilidade da classe.

Não estou satisfeito em fazer nenhuma dessas alterações, para mim são totalmente desnecessárias.

Abraço

Roberto

— Reply to this email directly or view it on GitHub <https://github.com/nfephp-org/nfephp/issues/453#issuecomment-86709018 .

— Reply to this email directly or view it on GitHub https://github.com/nfephp-org/nfephp/issues/453#issuecomment-86719057.

guicalabria commented 9 years ago

Roberto, Realizei uns testes aqui e quando faço o xPed e o nItemPed que também não são obrigatórios igual ao nFCI o xml gerado pela MakeNFe não gera tags vazias, você sabe por que? Se gerasse talvez daria o mesmo erro.

robmachado commented 9 years ago

É provável que você está enviando alguma coisa para essa variável nFCI. Se ela não for vazia a tag será gerada mesmo que o que estiver nela seja um espaço

Roberto

robmachado commented 9 years ago

Qaunto a classe convert não acredito também que nenhuma mudança seja necessária em virtude do que você colocou pois ou os marcadores não deveriam estar no txt ou o valor do campo deveria estar vazio.

Novamente não compete a essas classe fazer qualquer "filtragem" ou "correção" de informações incorretas fornecidas pelo ERP. Isso é problema do ERP e não dessas classes.

Roberto

guicalabria commented 9 years ago

Roberto, Não sei por que ele gera essa tag vazia meu arquivo txt está como: H|1|| I|B17025056||PAPEL MAXPLOT- 170MX250MX56GRS 3"|48025599||5101|Rl|1.0000|138.3000|138.30||RL|1.0000|138.3000|||||1||||

Bom, se eu descobrir eu aviso.

Abraços.

robmachado commented 9 years ago

Usei sua linha aqui na minha maquina e não foi gerado o FCI aparentemente tem algo errado ai !

Roberto

guicalabria commented 9 years ago

Nem a tag infAdProd?

robmachado commented 9 years ago

Essa eu não vi mas vou ver

2015-03-27 14:15 GMT-03:00 guicalabria notifications@github.com:

Nem a tag infAdProd?

— Reply to this email directly or view it on GitHub https://github.com/nfephp-org/nfephp/issues/453#issuecomment-87016494.

Roberto

Nisi utile est quod facimus stulta est gloriae (Julius Phaedous)