none
Finalizadores de Arquivo no VB.net RRS feed

  • Pergunta

  • Pessoal,

    Gostaria da ajuda de vocês, pois, estou com problema em criar um arquivo de remessa em formato Texto. O arquivo está sendo gerado normalmente, porém ao tentar válida-lo no ambiente de teste, é exibido a seguinte mensagem, "Tamanho do registro X inválido". Segundo informações de uma pessoa do suporte do banco o arquivo falta um finalizador e por isso o arquivo não é validado.

    Gostaria da ajuda de vocês para saber qual o digito que utilizo para realizar a finalização desse arquivo.

    Estou utilizando os seguintes comandos:

    'Mid para fazer a gravação na string linha, informando a posição inicial e a quantidade de caracteres a serem gravados nessa determinada string 
    Mid(linha, 1, 1) = "1" 'IDENTIFICAÇÃO DO REGISTRO TRANSAÇÃO
    Mid(linha, 2, 3) = "02" 'TIPO DE INSCRIÇÃO DA EMPRESA 

    'E o comando APPENDLINE, para gravar essa linha no arquivo'strARQ.AppendLine(linha)

    Help me please!

    segunda-feira, 11 de março de 2013 20:23

Todas as Respostas

  • Matheus, bom dia

    Quando você fala, "Finalizador" você se refere a aplicação liberar o arquivo da memória ou algum detalhe que precisa ser escrito no arquivo ? 


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    terça-feira, 12 de março de 2013 12:10
    Moderador
  • Olá, Olavo. Bom dia!

    O finalizador que me refiro é algum detalhe que indique que o arquivo terminou.

    Enquanto navegava tentando achar uma solução, encontrei um post que descreve exatamente meu problema, porém, com solução para linguagem clipper, abaixou o link do post para auxiliar o melhor entendimento do problema.

    http://www.pctoledo.com.br/forum/viewtopic.php?f=1&t=12511

    Segue também parte do código que estou utilizando para gerar o arquivo.

    Dim strARQ As New StringBuilder
    Dim linha As String
    
    'HEADER DO ARQUIVO
    linha = RepetirCaracter(400, " ")
    Mid(linha, 1, 1) = "0" 'IDENTIFICAÇÃO DO REGISTRO HEADER
    Mid(linha, 2, 1) = "1" 'TIPO DE OPERAÇÃO - REMESSA 
    'Conteúdo de código para preenchimento da linha - * estou colocando apenas o ínicio e o fim para não ficar muito comprida a resposta
    Mid(linha, 395, 6) = "000001" 'NÚMERO SEQÜENCIAL DO REGISTRO NO ARQUIVO 
    strARQ.AppendLine(linha)
    
    'LINHA DE IDENTIFICAÇÃO DA EMPRESA
    linha = RepetirCaracter(400, " ")
    Mid(linha, 1, 1) = "1" 'IDENTIFICAÇÃO DO REGISTRO TRANSAÇÃO 
    Mid(linha, 2, 3) = "02" 'TIPO DE INSCRIÇÃO DA EMPRESA
    'Conteúdo de código para preenchimento da linha - * estou colocando apenas o ínicio e o fim para não ficar muito comprida a resposta
    Mid(linha, 394, 1) = RepetirCaracter(1, " ") 'COMPLEMENTO DO REGISTRO 
    Mid(linha, 395, 6) = "000002" 'Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO
    strARQ.AppendLine(linha) 
    
    'CONTEÚDO DO BOLETO
    linha = RepetirCaracter(400, " ")
    Mid(linha, 1, 4) = "7XYZ" 'IDENTIFICAÇÃO DO SEGUIMENTO 7 - MENSAGEM
    Mid(linha, 5, 2) = "01" 'NÚMERO DA LINHA DA MENSAGEM
    Mid(linha, 7, 99) = PreencherString("Por questão de segurança os boletos serão recebidos apenas em agencias bancárias", 99, " ") 'CONTEÚDO DA MENSAGEM
    Mid(linha, 395, 6) = "000003" 'Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO
    strARQ.AppendLine(linha)
    
    'TRAILLER DO ARQUIVO - ENCERRAMENTO DO ARQUIVO
    linha = RepetirCaracter(400, " ")
    Mid(linha, 1, 1) = "9"
    Mid(linha, 2, 393) = RepetirCaracter(393, " ")
    Mid(linha, 395, 6) = "000004" 'Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO
    strARQ.AppendLine(linha)
    'COMO O CÓDIGO ASSIMA GERA A ÚLTIMA LINHA DO ARQUIVO, NESSE MOMENTO TENHO QUE INDICAR O DIGITO "FINALIZADOR" DO ARQUIVO
    
    Dim fs As New FileStream(txtArquivoGerado.Text, FileMode.Create, FileAccess.Write)
    Dim byteDados As Byte()
    
    byteDados = Encoding.GetEncoding(1252).GetBytes(strARQ.ToString)
    
    fs.Write(byteDados, 0, byteDados.Length)
    fs.Flush()
    fs.Close()
    fs.Dispose()

    Obrigado pela atenção.

    • Editado Matheus Pires terça-feira, 12 de março de 2013 13:51 Alteração no código
    terça-feira, 12 de março de 2013 13:39