Página 2 de 2
Pra quem ainda não resolveu NFE/CTE/MDFE
Enviado: 11 Nov 2016 20:20
por JoséQuintas
Ao postar notei um erro, esta linha:
Código: Selecionar todos
IF ( nPos := AScan( aSoapList, { | oElement | oElement[ 1 ] == ::cUF .AND. oElement[ 2 ] == nWsServico } ) ) != 0
não é ==, e sim $, porque não se trata de uma UF, e sim uma lista de UFs.
Nota:
Esta alteração salvei hoje no git, e como uso SPaulo, acabou não me afetando, a não ser quando fosse consultar nota de alguma UF da lista que iria falhar.
O post acabou me ajudando a corrigir um erro antes que acontecesse....
Como sempre digo: "enxergar o que está na frente do nariz", vi que estava errado quando postei... rs
Pra quem ainda não resolveu NFE/CTE/MDFE
Enviado: 11 Nov 2016 20:35
por JoséQuintas
Código: Selecionar todos
IF ( nPos := AScan( aSoapList, { | oElement | ::cUF $ oElement[ 1 ] .AND. oElement[ 2 ] == nWsServico } ) ) != 0
::cProjeto := aSoapList[ nPos, 3 ]
::cSoapAction := aSoapList[ nPos, 4 ]
::cSoapService := aSoapList[ nPos, 5 ]
ELSEIF ( nPos := AScan( aSoapList, { | oElement | oElement[ 1 ] == "**" .AND. oElement[ 2 ] == nWsServico } ) ) != 0
::cProjeto := aSoapList[ nPos, 3 ]
::cSoapAction := aSoapList[ nPos, 4 ]
::cSoapService := aSoapList[ nPos, 5 ]
ENDIF
Até daria pra reduzir pra uma única comparação, desde que eu não erre a ordem da lista.
Mais seguro deixar assim mesmo.
Mas confirmando o que realmente AScan() faz nesse caso, poderia ser:
Código: Selecionar todos
AScan( ... ( ::cUF $ oElement[ 1 ] .OR. oEleent[ 1 ] == "**" ) .AND. oElement[ 2 ] == nWsServico }
Pegaria o primeiro (ou último) que atenda a condição, seja especifico ou geral.
Reduz fonte, mas pode facilitar erro, se errar na ordem do array.
Nota: novamente enxerguei o que estava na frente do nariz, precisou inverter a ordem na comparação "$".
Pra quem ainda não resolveu NFE/CTE/MDFE
Enviado: 11 Nov 2016 20:39
por JoséQuintas
Pra quem ainda não resolveu NFE/CTE/MDFE
Enviado: 11 Nov 2016 21:06
por JoséQuintas
Então podemos retomar o assunto em um tópico q já existe sobre isto pq o deste tópico acredito q ficou ok.
Na prática, acho que no subtópico acabou ficando meio escondido, e não chama a atenção sobre postagens novas.
A classe.....
Não tem nada diferente, pra ficar tópico em separado.
O que vai acabar sendo falado sobre ela: endereço da Fazenda, serviço da Fazenda, montagem de XML, instalação de certificado.
À primeira vista, isso é assunto comum pra todos que emitem NFE/CTE/MDFE.
Às vezes penso que um tópico "NFE/CTE/MDFE e relacionados" seria mais interessante.
Tudo bem que legislação causa mudanças, mas de uns tempos pra cá, estamos tratando mais de detalhes técnicos do que de legislação.
Está ficando sem lugar certo, pra tratar do mesmo assunto.
E mesmo usando soluções diferentes, acaba tudo sendo sobre o mesmo assunto, e o mesmo tipo de problema.
Pra quem ainda não resolveu NFE/CTE/MDFE
Enviado: 11 Nov 2016 21:26
por JoséQuintas
Só pra finalizar:
Ao mostrar como a classe funciona, estou mostrando como a FAZENDA funciona.
É pegar um texto, enviar e pegar resposta.
O resto, é escolher strings de acordo com o que quiser fazer.
Somar strings, escolher strings, é algo comum pra todo mundo.
A partir do momento que começarem a entender isso, vai começar a facilitar tudo.
Não é nada do outro mundo, é tudo coisa básica.
Quais os únicos pontos chave:
- Assinar XML
- Comunicação SOAP
A necessidade de alguma coisa extra em Clipper, por exemplo, é porque no Clipper não dá nem pra assinar, e nem pra fazer comunicação SOAP.
Nas outras linguagens de programação, se elas tem assinatura e SOAP, não precisa de mais nada.
A partir daí, vai de cada um, pode usar um componente pronto pra facilitar o trabalho, mas não porque é obrigado a usar.
Em 2008 eu não estava entendendo nada de NFE, meu cliente foi o primeiro da lista, pensei até em desistir de programação...
Fui enxergando o que estava na frente do nariz, e acabei aprendendo um pouquinho.... rs