Clipper On Line • Ver Tópico - Alerta SefazClass - DANFE

Alerta SefazClass - DANFE

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

 

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 20 Nov 2016 14:15

Ainda em andamento a mudança para expandir opções de layout.

Tenho testado apenas o Danfe normal, sem coluna desconto, mas é pra estar funcionando pra qualquer dos layouts pré-existentes.

Quem puder testar pra Danfe paisagem e Danfe com coluna Desconto.
Note que a configuração pra coluna desconto mudou.

https://github.com/JoseQuintas/sefazclass/commit/5f68ae298c94538e6cd8ced41fc72ca45f9f7e0e


Trata-se apenas de transformar os três fontes de três layout, em um único fonte pra qualquer layout.
Atendendo os layouts atuais, significa que atende qualquer layout.
Mas por enquanto o importante é que atenda o que já existe, o que já significa estar funcionando pra qualquer layout.
Não adianta querer layout diferente agora, porque tem partes ainda fixas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 20 Nov 2016 18:38

UIA

danfe.png


Tá igual antes?
Visualmente sim.

O fonte não conhece mais aonde fica cada coluna pra fazer os desenhos.

   hbNFe_Box_Hpdf(      ::oPdfPage, ::aLayout[ LAYOUT_VALUNI,    LAYOUT_COLUNAPDF ] - 1, ::nLinhaPdf - 13, ::aLayout[ LAYOUT_VALUNI,    LAYOUT_LARGURAPDF ], 13, ::nLarguraBox )
   hbNFe_Box_Hpdf(      ::oPdfPage, ::aLayout[ LAYOUT_VALTOT,    LAYOUT_COLUNAPDF ] - 1, ::nLinhaPdf - 13, ::aLayout[ LAYOUT_VALTOT,    LAYOUT_LARGURAPDF ], 13, ::nLarguraBox )
   IF ::aLayout[ LAYOUT_DESCONTO, LAYOUT_IMPRIME ]
      hbNFe_Box_Hpdf(   ::oPdfPage, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_COLUNAPDF ] - 1, ::nLinhaPdf - 13, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_LARGURAPDF ], 13, ::nLarguraBox )
   ENDIF
   hbNFe_Box_Hpdf(      ::oPdfPage, ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_COLUNAPDF ] - 1, ::nLinhaPdf - 13, ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_LARGURAPDF ], 13, ::nLarguraBox )
   hbNFe_Box_Hpdf(      ::oPdfPage, ::aLayout[ LAYOUT_ICMVAL,    LAYOUT_COLUNAPDF ] - 1, ::nLinhaPdf - 13, ::aLayout[ LAYOUT_ICMVAL,    LAYOUT_LARGURAPDF ], 13, ::nLarguraBox )
   IF ::aLayout[ LAYOUT_SUBBAS, LAYOUT_IMPRIME ]
      hbNFe_Box_Hpdf(   ::oPdfPage, ::aLayout[ LAYOUT_SUBBAS,    LAYOUT_COLUNAPDF ] - 1, ::nLinhaPdf - 13, ::aLayout[ LAYOUT_SUBBAS,    LAYOUT_LARGURAPDF ], 13, ::nLarguraBox )
   ENDIF


O fonte não conhece mais aonde fica cada coluna pra fazer os títulos

   hbNFe_Texto_hpdf(    ::oPdfPage, ::aLayout[ LAYOUT_VALUNI,    LAYOUT_COLUNAPDF ], ::nLinhaPdf - 6, ::aLayout[ LAYOUT_VALUNI,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_VALUNI,    LAYOUT_LARGURAPDF ] - 2, NIL, "UNITÁRIO", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
   hbNFe_Texto_hpdf(    ::oPdfPage, ::aLayout[ LAYOUT_VALTOT,    LAYOUT_COLUNAPDF ], ::nLinhaPdf - 1, ::aLayout[ LAYOUT_VALTOT,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_VALTOT,    LAYOUT_LARGURAPDF ] - 2, NIL, "VALOR TOTAL", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
   IF ::aLayout[ LAYOUT_DESCONTO, LAYOUT_IMPRIME ]
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_COLUNAPDF ], ::nLinhaPdf - 1, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_LARGURAPDF ] - 2, NIL, "VALOR", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_COLUNAPDF ], ::nLinhaPdf - 6, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_LARGURAPDF ] - 2, NIL, "DESCTO.", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
   ENDIF
   hbNFe_Texto_hpdf(    ::oPdfPage, ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_COLUNAPDF ], ::nLinhaPdf - 1, ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_LARGURAPDF ] - 2, NIL, "B. CÁLC.", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
   hbNFe_Texto_hpdf(    ::oPdfPage, ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_COLUNAPDF ], ::nLinhaPdf - 6, ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_ICMBAS,    LAYOUT_LARGURAPDF ] - 2, NIL, "DO ICMS", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
   hbNFe_Texto_hpdf(    ::oPdfPage, ::aLayout[ LAYOUT_ICMVAL,    LAYOUT_COLUNAPDF ], ::nLinhaPdf - 1, ::aLayout[ LAYOUT_ICMVAL,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_ICMVAL,    LAYOUT_LARGURAPDF ] - 2, NIL, "VALOR", HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )


O fonte não conhece mais coluna nem tamanho dos campos, e nem mesmo quantas decimais vai ter

      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_CFOP,        LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_CFOP,      LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_CFOP,      LAYOUT_LARGURAPDF ] - 2, NIL, ::aItem[ "CFOP" ], HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_UNIDADE,     LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_UNIDADE,   LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_UNIDADE,   LAYOUT_LARGURAPDF ] - 2, NIL, ::aItem[ "uCom" ], HPDF_TALIGN_CENTER, ::oPdfFontCabecalho, 6 )
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_QTD,         LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_QTD,       LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_QTD,       LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val(::aItem[ "qCom" ] ), 15, ::aLayout[ LAYOUT_QTD, LAYOUT_DECIMAIS ] ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 5 )
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_VALUNI,      LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_VALUNI,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_VALUNI,    LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val(::aItem[ "vUnCom" ] ), 15, ::aLayout[ LAYOUT_VALUNI, LAYOUT_DECIMAIS ] ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 6 )
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_VALTOT,      LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_VALTOT,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_VALTOT,    LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val(::aItem[ "vProd" ] ), 15, 2 ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 6 )
      IF ::aLayout[ LAYOUT_DESCONTO, LAYOUT_IMPRIME ]
         hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_DESCONTO, LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_DESCONTO,  LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val( ::aItem[ "vDesc" ] ), 15, 2 ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 6 )
      ENDIF


Também não sabe se vai ter coluna de IPI

      IF ::aLayout[ LAYOUT_IPIVAL, LAYOUT_IMPRIME ]
         hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_IPIVAL,      LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_IPIVAL,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_IPIVAL,    LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val( iif( ::aItemIPI[ "vIPI" ] <> NIL,::aItemIPI[ "vIPI" ], "0" ) ), 15, 2 ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 6 )
      ENDIF
      hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_ICMALI,      LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_ICMALI,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_ICMALI,    LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val( iif( ::aItemICMS[ "pICMS" ] <> NIL,::aItemICMS[ "pICMS" ], "0" ) ), 15, 2 ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 6 )
      IF ::aLayout[ LAYOUT_IPIALI, LAYOUT_IMPRIME ]
         hbNFe_Texto_hpdf( ::oPdfPage, ::aLayout[ LAYOUT_IPIALI,      LAYOUT_COLUNAPDF ], ::nLinhaPdf, ::aLayout[ LAYOUT_IPIALI,    LAYOUT_COLUNAPDF ] + ::aLayout[ LAYOUT_IPIALI,    LAYOUT_LARGURAPDF ] - 2, NIL, AllTrim( FormatNumber( Val( iif( ::aItemIPI[ "pIPI" ] <> NIL,::aItemIPI[ "pIPI" ], "0" ) ), 15, 2 ) ), HPDF_TALIGN_RIGHT, ::oPdfFontCabecalho, 6 )
      ENDIF


Baseado no conteúdo do XML, decide decimais e IPI

   ::aLayout[ LAYOUT_QTD, LAYOUT_DECIMAIS ]     := 0
   ::aLayout[ LAYOUT_VALUNI, LAYOUT_DECIMAIS ]  := 2
   nItem      := 1
   DO WHILE .T.
      IF ! ::ProcessaItens( ::cXml, nItem )
         EXIT
      ENDIF
      nItem += 1
      ::aLayout[ LAYOUT_QTD,    LAYOUT_DECIMAIS ] := ::DefineDecimais( ::aItem[ "qCom" ],   ::aLayout[ LAYOUT_QTD,    LAYOUT_DECIMAIS ] )
      ::aLayout[ LAYOUT_VALUNI, LAYOUT_DECIMAIS ] := ::DefineDecimais( ::aItem[ "vUnCom" ], ::aLayout[ LAYOUT_VALUNI, LAYOUT_DECIMAIS ] )
      IF Val( ::aItemIPI[ "pIPI" ]  ) > 0 .OR. Val( ::aItemIPI[ "vIPI" ] ) > 0
         ::aLayout[ LAYOUT_IPIVAL, LAYOUT_IMPRIME ] := .T.
         ::aLayout[ LAYOUT_IPIALI, LAYOUT_IMPRIME ] := .T.
      ENDIF
   ENDDO


E o mesmo XML, já omitindo as colunas de IPI por não existir IPI no Xml.

danfe2.png


Nota: no meio de 242 itens, tem um único ítem que usa 3 decimais, também me pareceu que estava errado... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 21 Nov 2016 09:48

Faltava o toque final: enxugar código....
Agora sim.

Todos os desenhos do quadro de produtos em duas linhas (talvez dê pra reduzir pra uma):

   Eval( ::aLayout, { | o | ::DrawBoxProduto( o[ 1 ], ::nLinhaPdf - 13, 13 ) } )
   Eval( ::aLayout, { | o | ::DrawBoxProduto( o[ 1 ], nLinhaFinalProd, nAlturaQuadroProdutos ) } )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor Itamar M. Lins Jr. » 21 Nov 2016 10:25

Ola!
Já viu NFE impressa em 60 colunas ? Imprime em paisagem depois corta e grampeia!!!

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 21 Nov 2016 13:13

Não, muito menos no manual da NFE dizer que isso é válido.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 21 Nov 2016 13:16

danfe.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 21 Nov 2016 13:21

Tem esta exceção, com uso de formulário de ate 5.5 cm de largura.

danfe2.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor JoséQuintas » 21 Nov 2016 22:56

Uia, agora cabem minhas observações.
Cheguei a fazer um teste com 3 páginas de informações adicionais, só pra confirmar a contagem de páginas.

obsgrande.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Alerta SefazClass - DANFE

Mensagempor Itamar M. Lins Jr. » 07 Set 2017 13:59

Ola!
Atualizando, NFe em 60col ou 55mm.
nfe_ImpressoraEmissao.jpg


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes




Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro