Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)
Estou precisando do auxilio de vcs pois estou gerando um TXT basico para o Empregador Web, novo sistema do Ministerio do Trabalho para emitir Seguro desemprego e o sistema deles entende que o carater que eu encerro o arquivo não é o que eles esperam. Fiz algumas tentativas mais nenhuma deu certo.
Abaixo o algoritmo que estou usando que inclusive uso em alguns programas como Sefip, Caged etc e dá certo:
ARQUIVO = ALLTRIM(UNIDADE) + ARQUIVO
arquivo = ALLTRIM(arquivo) + '.SD'
SELE FPSD
set alternate to &arquivo
WHILE !EOF()
set console off
set alternate on
?? regtxt + chr(13) + chr(10)
set alternate off
set console on
SELE FPSD
SKIP
ENDDO
set alternate to
fDelEof (arquivo)
return
Function fDelEof(mFile)
Local nHandle := 0
nHandle = fOpen(mFile,2)
fSeek(nHandle,-1,2)
Fwrite(nHandle,"")
fClose(nHandle)
Return NIL
Pelo exemplo que você postou você está encerrando seu arquivo com Chr( 13 ), que é a quebra de linha. Você postou sua dúvida na seção Legislação fiscal e tributária, e ela nada tem a ver com legislação fiscal e tributária. Não dá para saber se você está usando Clipper ou [x]Harbour. Além de como o colega Andril sugeriu, se você puder anexar um arquivo exemplo, informe se você usa Harbour, xHarbour ou Clipper para que possamos dar uma sugestão.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7 (Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Inicialmente obrigado pelas observações. Inclusive porque as vezes nós fazemos algo sem saber exatamente o que está significando, esse foi o caso com relação ao erro, eu encerrava a linha Trailler pos 1 com2 = 99 com o ctl(13) que forçava a geração de mais uma linha que o programa validador refutava.
Com base na sua observação fiz alteração no algoritmo e consegui validar com sucesso.
Meu programa utiliza xharbour. Segue abaixo como ficou meu algoritmo.
ARQUIVO = ALLTRIM(UNIDADE) + ARQUIVO
arquivo = ALLTRIM(arquivo) + '.SD'
SELE FPSD
set alternate to &arquivo
WHILE !EOF()
set console off
set alternate on
// regtxt tem tamanho de 300
// substr(regtxt,1,2) = ´99´ --- indica que e o registro trailler
if substr(regtxt,1,2) = ´99´
?? substr(regtxt,1,299) + ""
else
?? regtxt + chr(13) + chr(10)
endif
set alternate off
set console on
SELE FPSD
SKIP
ENDDO
set alternate to
// retirei linha abaixo
// fDelEof (arquivo)
return
Function fDelEof(mFile)
Local nHandle := 0
nHandle = fOpen(mFile,2)
fSeek(nHandle,-1,2)
Fwrite(nHandle,"")
fClose(nHandle)
Return NIL