ARQUIVO DE CUPOM FISCAL
Moderador: Moderadores
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
ARQUIVO DE CUPOM FISCAL
Alguem conseguiu transmitir um arquivo de cupom fiscal no portal da Nota Fiscal Paulista?
Sempre que tento, dá o mesmo erro:
O arquivo EL100001.1A7 foi recusado para processamento
Motivo: erro na validação do arquivo
Nem mesmo o suporte deles consegue informar qual é o erro. Somente informam que não atende ao layout.
Para mim o arquivo está correto, com todos os registros inclusive a assinatura de hash de 1024 bits com 256 caracteres.
Outra dúvida: como faço para gerar as extensões dos arquivos, por exemplo: EL100001.1A7 é do dia 01/10/2007, EL100001.2A7 é do dia 02/10/2007 e assim por diante. Eu já consegui gerar a string usando a data, o problema é quando tento renomear o arquivo gerado pelo hash.
NomeArq:="EL100001."+DiaExt+MesEXt+AnoExt //Extensão=1A7
Copy file MYKEY.BAK to NomeArq //DÁ ERRO DE COMPILAÇÃO NESTA LINHA.
Sempre que tento, dá o mesmo erro:
O arquivo EL100001.1A7 foi recusado para processamento
Motivo: erro na validação do arquivo
Nem mesmo o suporte deles consegue informar qual é o erro. Somente informam que não atende ao layout.
Para mim o arquivo está correto, com todos os registros inclusive a assinatura de hash de 1024 bits com 256 caracteres.
Outra dúvida: como faço para gerar as extensões dos arquivos, por exemplo: EL100001.1A7 é do dia 01/10/2007, EL100001.2A7 é do dia 02/10/2007 e assim por diante. Eu já consegui gerar a string usando a data, o problema é quando tento renomear o arquivo gerado pelo hash.
NomeArq:="EL100001."+DiaExt+MesEXt+AnoExt //Extensão=1A7
Copy file MYKEY.BAK to NomeArq //DÁ ERRO DE COMPILAÇÃO NESTA LINHA.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Use:
Copy file MYKEY.BAK to &(NomeArq)
Use:
Copy file MYKEY.BAK to &(NomeArq)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
Consegui enviar os arquivos.
Acho que o erro ocorria quando eu renomeava o arquivo, aí o hash ficava invalidado.
Obrigado pela dica.
Acho que o erro ocorria quando eu renomeava o arquivo, aí o hash ficava invalidado.
Obrigado pela dica.
Editado pela última vez por ALEX170970 em 21 Dez 2007 16:49, em um total de 1 vez.
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
O pessoal da Nota Fiscal Paulista quer me deixar doido (e a todos os programadores). Os arquivos que eu estava conseguindo transmitir, agora não estou conseguindo mais. Voltou a aparecer o erro de antes:
O arquivo EL100001.1A7 foi recusado para processamento
Motivo: erro na validação do arquivo
Por favor, me corrijam se eu estiver errado.
Eu estou gerando o arquivo da seguinte forma:
Gravo cada registro no arquivo TXT através do comando "?";
Em seguida gravo os mesmos registros num arquivo DBF (1 campo de 315 posições caractere);
Gero a assinatura de hash lendo o arquivo TXT e gravo um novo registro DBF com a assinatura;
Gravo um arquivo TXT sobrepondo o outro TXT gerado anteriormente, pegando os registros do DBF, desta vez com a assinatura.
PERGUNTO: será que esta nova gravação do TXT está invalidando a assinatura do hash?
Tem como incluir a assinatura no final do TXT sem sobrepor?
Fico na dúvida se o erro é deles (NFP), pois eu estava conseguindo transmitir os arquivos, e agora voltou a dar erro.
O arquivo EL100001.1A7 foi recusado para processamento
Motivo: erro na validação do arquivo
Por favor, me corrijam se eu estiver errado.
Eu estou gerando o arquivo da seguinte forma:
Gravo cada registro no arquivo TXT através do comando "?";
Em seguida gravo os mesmos registros num arquivo DBF (1 campo de 315 posições caractere);
Gero a assinatura de hash lendo o arquivo TXT e gravo um novo registro DBF com a assinatura;
Gravo um arquivo TXT sobrepondo o outro TXT gerado anteriormente, pegando os registros do DBF, desta vez com a assinatura.
PERGUNTO: será que esta nova gravação do TXT está invalidando a assinatura do hash?
Tem como incluir a assinatura no final do TXT sem sobrepor?
Fico na dúvida se o erro é deles (NFP), pois eu estava conseguindo transmitir os arquivos, e agora voltou a dar erro.
(EDITADO)
Alex, pra que complicar usando essa "ponte" com o DBF? Grave o TXT direto, usando as funções de baixo níivel FCREATE(), FWRITE() etc... aí vc sabe que o que está sendo gravado no arquivo TXT é exatamente o que eles pedem.
Quem sabe essa "ponte" com o DBF está gerando algum caracter a mais que eles não estão aceitando...
Veja o exemplo a seguir. Fiz cada linha do TXT com 315 caracteres, mais a quebra de linha (chr 13 e 10). Vc inclui outros campos e altera o que for preciso.
Alex, pra que complicar usando essa "ponte" com o DBF? Grave o TXT direto, usando as funções de baixo níivel FCREATE(), FWRITE() etc... aí vc sabe que o que está sendo gravado no arquivo TXT é exatamente o que eles pedem.
Quem sabe essa "ponte" com o DBF está gerando algum caracter a mais que eles não estão aceitando...
Veja o exemplo a seguir. Fiz cada linha do TXT com 315 caracteres, mais a quebra de linha (chr 13 e 10). Vc inclui outros campos e altera o que for preciso.
Código: Selecionar todos
arq="c:\pasta\subpasta\EL100001.2A7"
arqh=fcreate(arq,0) // cria arquivo
if !arqh>0
?"Erro na criação"
inkey(0)
quit
endi
use vendas new excl
go top
set cent on
set date brit
do whil !eof()
* forma a linha----------------------------------
linha=pad(nomecli,60) // imaginando NOME com 60
linha=linha+strtran(dtoc(datavenda),"/","") // data 17122007
linha=linha+strzero(valor*100,10,0) // valor 12.55 -> "0000001255"
linha=pad(linha,315)
linha=linha+chr(13)+chr(10) // é isso ou é só chr(13)??
* grava linha no TXT-------------------------------------
gravou=fwrite(arqh,linha)
if !gravou=len(linha)
? "Erro na gravação"
inkey(0)
quit
endi
skip // próximo registro do DBF
endd
fclose(arqh) // fecha pra gerar o HASH do TXT
* gera hash---------------------------------------------
hash="123456swerwefsdfasdf0erif9eri09f 00fd vdf"
hash=pad(hash,315)+chr(13)+chr(10)
* reabre o TXT
arqh=fopen(arq,2) // reabre arquivo
if !arqh>0
?"Erro na reabertura"
inkey(0)
quit
endi
fseek(arqh,0,2) // posiciona ponteiro no fim do TXT
gravou=fwrite(arqh,hash) // grava hash no fim do TXT
if !gravou=len(hash)
? "Erro na gravação"
inkey(0)
quit
endi
use
fclose(arqh) -
Sergio Cabral
- Usuário Nível 2

- Mensagens: 52
- Registrado em: 18 Set 2004 18:51
- Localização: São José dos Campos
Nota Fiscal Paulista
Desculpe a minha ignorancia, parece que quero aproveitar todo o trabalho que voce teve. Em outras oportunidades ajudei colegas que precisavam por exemplo de rotinas para leitura de balanças.
Tenho muitos clientes que estão sendo precionados pelos seus contadores e pela fiscalização para geração do tal arquivo Nota Fiscal Paulista. Tenho muito pouco tempo, alias, não tempo nenhum pois o prazo deste clientes ja se esgotou e nem sei por onde começar.
Nem sei o que é esse tal de hash. Se voce puder me ajudar com relação a geração deste arquivo: como criar, que campos pegar, se tem outros arquivos a serem criados, o hash é um codigo fixo ou é uma formula, etc.
Isso é um pedido urgente mesmo de ajuda.
Ficarei muito grato pela ajuda.
Tenho muitos clientes que estão sendo precionados pelos seus contadores e pela fiscalização para geração do tal arquivo Nota Fiscal Paulista. Tenho muito pouco tempo, alias, não tempo nenhum pois o prazo deste clientes ja se esgotou e nem sei por onde começar.
Nem sei o que é esse tal de hash. Se voce puder me ajudar com relação a geração deste arquivo: como criar, que campos pegar, se tem outros arquivos a serem criados, o hash é um codigo fixo ou é uma formula, etc.
Isso é um pedido urgente mesmo de ajuda.
Ficarei muito grato pela ajuda.
Sou programador em Clipper 5.01 a 15 anos e procuro melhorar meus conhecimentos. Este site me parece muito bom e poderemos nos ajudar.
Não sei nada sobre essa NF paulista, mas sobre hash posso comentar: é um algoritmo que gera um número que corresponde ao conteúdo de um certo conjunto de dados. É como se fosse a impressão digital desse conteúdo. Algoritmos hash existem aos montes: CRC32, MD5, SHA1, etc. Creio que devem estar pedindo o MD5 no seu caso. Se for, melhor. Fiz uma LIB que contém uma função de cálculo do MD5. Veja neste link: http://pub.buzinello.com/index.php?d=./ ... pper/libs/
Se for o caso do CRC32, também não seria problema. É só navegar por entre os diretórios do link que passei, até chegar em sources. Mas eu duvido muito que precise dele pra esse trabalho.
Se for o caso do CRC32, também não seria problema. É só navegar por entre os diretórios do link que passei, até chegar em sources. Mas eu duvido muito que precise dele pra esse trabalho.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
Para gerar a assinatura de hash, façam o seguite:
Grave o arquivo com todos os registros, menos o EAD.
Inclua os comandos abaixo em seu fonte.
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
run OPENSSL genrsa -out MYKEY.PEM 1024
run OPENSSL rsa -in MYKEY.PEM -pubout -out PUBKEY.PEM
run OPENSSL dgst -md5 -sign MYKEY.PEM -out EAD.TXT -hex ARQENT.TXT
cEadTxt:=space(315)
cEadTxt:="EAD"+substr(memoread("EAD.TXT"),18,256)
cEadTxt:=cEadTxt+chr(13)+chr(10)
gravou:=fwrite(arqh,cEadTxt)
if !gravou=len(cEadTxt)
? "ERRO NA GRAVACAO DO REGISTRO"
inkey(0)
endif
gravou:=space(315)
return
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//obs: os arquivos EAD.TXT e ARQENT.TXT devem ser previamente criados em branco, sem isso não funciona.
Grave o arquivo com todos os registros, menos o EAD.
Inclua os comandos abaixo em seu fonte.
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
run OPENSSL genrsa -out MYKEY.PEM 1024
run OPENSSL rsa -in MYKEY.PEM -pubout -out PUBKEY.PEM
run OPENSSL dgst -md5 -sign MYKEY.PEM -out EAD.TXT -hex ARQENT.TXT
cEadTxt:=space(315)
cEadTxt:="EAD"+substr(memoread("EAD.TXT"),18,256)
cEadTxt:=cEadTxt+chr(13)+chr(10)
gravou:=fwrite(arqh,cEadTxt)
if !gravou=len(cEadTxt)
? "ERRO NA GRAVACAO DO REGISTRO"
inkey(0)
endif
gravou:=space(315)
return
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//obs: os arquivos EAD.TXT e ARQENT.TXT devem ser previamente criados em branco, sem isso não funciona.
Sérgio Cabral,Nem sei o que é esse tal de hash
No CPF, vc tem os dígitos de controle, usados pra validar o conjunto, certo? O CPF 123.456.789-09, por exemplo, tem a inscrição 123.456.789 (que é afinal o CPF) e os dígitos de controle 09, que são únicos para este CPF e são obtidos por uns simples cálculos sobre os dígitos da inscrição. Então, se alguém lhe passar o CPF 123.456.798-09 (dois dígitos invertidos), opa!, não confere!
O Hash tem a mesma finalidade. A diferença é que os cálculos que são feitos (o tal algoritmo) são muito mais complexos e visam validar um conjunto muito maior que os 9 dígitos de um CPF (ou os 12 do CPNJ, os 12 do EAN13, os 7 do EAN8 e assim por diante).
Vc cria por exemplo o arquivo TESTE.TXT, com 5.000 linhas, e o manda via e-mail pro Eolo. Como garantir que o Eolo receba todas as linhas corretamente e seja alertado quando por acaso alguma falha na transmissão corromper o arquivo? Uma forma é o HASH: você cria o "número HASH" do TESTE.TXT e o envia junto com o arquivo. O Eolo, quando o receber, recria "o número HASH" e o compara com o que vc mandou. Se os dois forem iguais, bingo!, o Eolo recebeu o arquivo corretamente.
Esta é a idéia.
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
Uma dica para os "desbravadores" das Portarias CAT 52/2007 e 60/2007:
Para quem precisar, tem os exemplos dos arquivos das referidas Portarias, para fazer o layout correto.
Acesse o site da Nota Fiscal Paulista no endereço abaixo:
http://www.nfp.fazenda.sp.gov.br/exemplos.zip
Para quem precisar, tem os exemplos dos arquivos das referidas Portarias, para fazer o layout correto.
Acesse o site da Nota Fiscal Paulista no endereço abaixo:
http://www.nfp.fazenda.sp.gov.br/exemplos.zip
Isso mesmo, só que as duas primeiras linhas não devem ser executadas toda vez de se gerar o arquivo digital.ALEX170970 escreveu: run OPENSSL genrsa -out MYKEY.PEM 1024
run OPENSSL rsa -in MYKEY.PEM -pubout -out PUBKEY.PEM
run OPENSSL dgst -md5 -sign MYKEY.PEM -out EAD.TXT -hex ARQENT.TXT
Nestas duas primeiras linhas, você cria as chaves, que devem ser utilizadas na geração do arquivo. Mas você deve gerar as chaves uma única vez. Depois disso, você só vai gerar a assinatura baseado nas chaves já geradas.
Sugestão: gere manualmente as chaves e insira no seu fonte somente a terceira linha, que irá gerar a assinatura baseada nas chaves já existentes.
Se gerar uma chave para cada arquivo, as chaves serão aleatórias e, portanto, a assinatura sempre será diferente (até mesmo para o mesmo arquivo, criptografado duas vezes seguidas).
CLIPPER 5.2 / BLINKER
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Olá caríssimos,
montei uma rotina para criar a extensão do arquivo à ser enviado para a receita, conforme a Cat52, e gostaria que os nobres amigos, fizessem as suas críticas. Precisei montar desta maneira, pois a impressora de um cliente aqui, é uma Schalter S-Print 2.04, não encontrável nem em museus. Sequer existe função para extrair o numero de série.
Neste caso específico, o nome foi fácil, haja vista que só existe uma impressora instalada. Complicado é a extensão. Segundo a CAT52, a extensão deve ser criada da seguinte maneira:
DMA - a identificação do dia, mês e ano do movimento, codificados com números de 1 a 9 e letras de A a Z, sendo que a letra A corresponde ao número 10
Pelas contas, vai dar uma zica no ano 2035. Mas quando chegar lá, já estaremos no banco da praça comendo pipoca (caso ainda tenhamos dentes). Se bem que, estarei com a idade do Eolo hoje.
Por favor, façam suas criticas.
montei uma rotina para criar a extensão do arquivo à ser enviado para a receita, conforme a Cat52, e gostaria que os nobres amigos, fizessem as suas críticas. Precisei montar desta maneira, pois a impressora de um cliente aqui, é uma Schalter S-Print 2.04, não encontrável nem em museus. Sequer existe função para extrair o numero de série.
Neste caso específico, o nome foi fácil, haja vista que só existe uma impressora instalada. Complicado é a extensão. Segundo a CAT52, a extensão deve ser criada da seguinte maneira:
DMA - a identificação do dia, mês e ano do movimento, codificados com números de 1 a 9 e letras de A a Z, sendo que a letra A corresponde ao número 10
Código: Selecionar todos
#include "fileio.ch"
set date format to "DD/MM/YYYY"
nomearq:= "sc460671."
extensao:= ""
extensao:= extensao + montaext( subs(dtoc(date()),1,2) )
extensao:= extensao + montaext( subs(dtoc(date()),4,2) )
extensao:= extensao + montaext( subs(dtoc(date()),9,2) )
if (nhandle:= fcreate(nomearq+extensao,FC_NORMAL)) = -1
alert( "Problema na cria‡ao do arquivo. Erro n§ " + str(ferror()) )
else
fwrite(nhandle,reg00) // Reg00 é o registro E00
fclose()
endif
Function MontaExt(arg)
if val(arg) < 10
return subs(arg,2,1)
else
dif:= 35-val(arg) // onde 35 pela cat52 equivale ao z
dif:= 122-dif // onde 122 em ascii equivale ao z
return chr(dif)
endif Por favor, façam suas criticas.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
ALEX170970
- Usuário Nível 1

- Mensagens: 29
- Registrado em: 06 Dez 2007 18:12
- Localização: Santos-SP
Pessoal:
Alguém sabe se os contabilistas de seus clientes estão conseguindo enviar os arquivos da Portaria CAT52/2007?
Sou contabilista e não estou conseguindo enviar nenhum arquivo.
Nem os arquivos novos e nem mesmo os arquivos que eu já enviei, fazendo o teste de envio agora, está dando erro:
O arquivo EL100001.1A7 foi recusado para processamento
Motivo: erro na validação do arquivo
Nem mesmo o suporte deles consegue informar qual é o erro. Somente informam que não atende ao layout.
Para mim o layout do arquivo está correto, com todos os registros inclusive a assinatura de hash de 1024 bits com 256 caracteres.
Meus clientes estão recebendo reclamações dos consumidores, pois os Cupons Fiscais não estão entrando no sistema da Secretaria da Fazenda. Para cada Cupom Fiscal não informado tem multa e não é barata.
Alguém sabe se os contabilistas de seus clientes estão conseguindo enviar os arquivos da Portaria CAT52/2007?
Sou contabilista e não estou conseguindo enviar nenhum arquivo.
Nem os arquivos novos e nem mesmo os arquivos que eu já enviei, fazendo o teste de envio agora, está dando erro:
O arquivo EL100001.1A7 foi recusado para processamento
Motivo: erro na validação do arquivo
Nem mesmo o suporte deles consegue informar qual é o erro. Somente informam que não atende ao layout.
Para mim o layout do arquivo está correto, com todos os registros inclusive a assinatura de hash de 1024 bits com 256 caracteres.
Meus clientes estão recebendo reclamações dos consumidores, pois os Cupons Fiscais não estão entrando no sistema da Secretaria da Fazenda. Para cada Cupom Fiscal não informado tem multa e não é barata.

