Varios boletos em um arquivo de remessa

Nov 20, 2012 at 3:15 PM

Boa tarde

Estou tendo um pouco de dificuldades em gravar vários boletos em apenas um arquivo de remessa, pelos exemplos que vi é possível gravar apenas um, caso tenha que incluir mais teria que criar um novo objeto, alguém teria algum exemplo de como fazer?

Developer
Nov 30, 2012 at 7:33 PM

Olá mmatani.

Desculpe a demora, mas ando bastante atarefado.  Antes de qualquer coisa, primeiro verifique qual o procedimento a ser tomado.  Existem várias formas, e depende de como sua aplicação está tratando esses boletos:

1) Gera o boleto, imprime e manda remessa;

2) Gera boleto, imprime e aguarda para gerar remessa em outra transação.

No meu caso, o usuário vai gerando os boletos e imprimindo e num determinado momento, seleciona todos os boletos que ainda não foram enviados para o banco e gera o arquivo remessa.

Tudo depende de sua lógica.  De qqr forma um exemplo do código para vc estudar:

Private Sub MontaArquivoParaRemessa()

        'Inst�ncia da lista de boletos a serem gerados
        Dim objBOLETOS As New Boletos()
        'Inst�ncia de Cedente
		'Banco e Nome               = arrCONTA(0)
        'Agencia                    = arrCONTA(1)
        'Agencia D�gito             = arrCONTA(2)
        'Conta                      = arrCONTA(3)
        'Conta D�gito               = arrCONTA(4)
        'Carteira                   = arrCONTA(5)
        'Conv�nio ou C�digo Cedente = arrCONTA(6)
        Dim objCEDENTE As New Cedente(My.Settings.Cnpj, My.Settings.Cedente, arrCONTA(1), arrCONTA(2), arrCONTA(3), arrCONTA(4))
        objCEDENTE.Convenio = CInt(arrCONTA(6))

        'Apenas para B.BRASIL
        If intBANCO = 1 Then objCEDENTE.Carteira = arrCONTA(5)

        'Apenas para SANTANDER e BRADESCO
        If intBANCO = 33 Or intBANCO = 237 Then objCEDENTE.Codigo = CInt(arrCONTA(6))

        'Ler todos os registros do DataGridView
        strBOLETOS_ID = ""

        Dim clsSACADO As New TranswagenMain.Boletos()
        clsSACADO.ConnectionString = My.Settings.BDConex
        Dim objDR As SqlDataReader = Nothing

        For Each objROW As DataGridViewRow In DataGridView1.Rows
            lngNROBOL = CLng(objROW.Cells("nrbol").Value)
            datDTVCTO = CDate(objROW.Cells("dtvencto").Value)
            datDTEMIS = CDate(objROW.Cells("dtemissao").Value)
            dblVLBOL = CDbl(objROW.Cells("vlboleto").Value)
            dblTOTJUR = CDbl(FormatNumber(dblVLBOL * udtPARM.jurosdia / 100, 2))
            dblTOTMULTA = CDbl(FormatNumber(dblVLBOL * udtPARM.multa / 100, 2))

            strBOLETOS_ID &= CStr(objROW.Cells("boleto_id").Value) & ", "

            'Consulta dados do sacado
            objDR = clsSACADO.ConsultaSacado(CStr(objROW.Cells("sacado").Value))

            If objDR.Read Then
                If objDR("tppessoa").ToString.ToUpper = "J" Then
                    udtSACADO.cpfcnpj = Format(objDR("cnpjcpf"), "00000000000000")
                Else
                    udtSACADO.cpfcnpj = Format(objDR("cnpjcpf"), "00000000000")
                End If
                udtSACADO.nomerazao = objDR("nomerazao").ToString.Trim & "- DN " & objDR("dn").ToString.Trim
                udtSACADO.endereco = objDR("endertipo").ToString.Trim & " " & objDR("logradouro").ToString.Trim & ", " & objDR("numero").ToString.Trim
                udtSACADO.bairro = objDR("bairro").ToString.Trim
                udtSACADO.localidade = objDR("localidade").ToString.Trim
                udtSACADO.cep = Replace(objDR("cep").ToString.Trim, "-", "")
                udtSACADO.uf = objDR("uf").ToString
            End If

            'Inst�ncia de Boleto
            Dim objBOLETO As New Boleto()

            Select Case Format(intBANCO, "000")
                Case "001" 'B.Brasil
                    'O nosso-numero deve ser de 10 posi��es
                    strNOSSONUMERO = Format(lngNROBOL, "0000000000")
                    objBOLETO.EspecieDocumento = New EspecieDocumento(1, 4)
                Case "033" 'Santander
                    'O nosso-numero deve ser de 12 posi��es
                    strNOSSONUMERO = Format(lngNROBOL, "000000000000")
                    objBOLETO.EspecieDocumento = New EspecieDocumento(33, 2)
                Case "237" 'Bradesco 
                    'O nosso-numero deve ser de 11 posi��es
                    strNOSSONUMERO = Format(lngNROBOL, "00000000000")
                    objBOLETO.EspecieDocumento = New EspecieDocumento(237, 12)
                Case "341" 'Ita�
                    'O nosso-numero deve ser de 8 posi��es
                    strNOSSONUMERO = Format(lngNROBOL, "00000000")
                    objBOLETO.EspecieDocumento = New EspecieDocumento(341, 8)
            End Select

            objBOLETO.DataVencimento = datDTVCTO
            objBOLETO.ValorBoleto = CDec(dblVLBOL)
            objBOLETO.Carteira = arrCONTA(5)
            objBOLETO.NossoNumero = strNOSSONUMERO
            objBOLETO.Cedente = objCEDENTE

            'O n� do documento deve ser de 10 posi��es
            objBOLETO.NumeroDocumento = Format(lngNROBOL, "0000000000")
            'A data do documento � a data de emiss�o do boleto
            objBOLETO.DataDocumento = datDTEMIS
            'A data de processamento � a data em que foi processado o documento, portanto � da data de emiss�o do boleto
            objBOLETO.DataProcessamento = datDTEMIS
            objBOLETO.JurosMora = CDec(dblTOTJUR)
            objBOLETO.PercMulta = CDec(udtPARM.multa)

            objBOLETO.Sacado = New Sacado(udtSACADO.cpfcnpj, udtSACADO.nomerazao)
            objBOLETO.Sacado.Endereco.End = udtSACADO.endereco
            objBOLETO.Sacado.Endereco.Bairro = udtSACADO.bairro
            objBOLETO.Sacado.Endereco.Cidade = udtSACADO.localidade
            objBOLETO.Sacado.Endereco.CEP = udtSACADO.cep
            objBOLETO.Sacado.Endereco.UF = udtSACADO.uf

            objBOLETOS.Add(objBOLETO)
            objBOLETO = Nothing
        Next

        objDR.Close()
        clsSACADO = Nothing

        'Cria objeto STREAM
        Dim objFILESTREAM As FileStream

        'Cria objeto do arquivo remessa
        Dim objREMESSA As ArquivoRemessa
        Select Case Format(intBANCO, "000")
            Case "001" 'B.Brasil
                objREMESSA = New ArquivoRemessa(TipoArquivo.CNAB240)
            Case Else 'Santander, Bradesco e Ita�
                objREMESSA = New ArquivoRemessa(TipoArquivo.CNAB400)
        End Select

        Try
            'Abre arquivo STREAM
            objFILESTREAM = File.Create(lbldirarqrem.Text.Trim & "\" & lblnomearquivo.Text.Trim & ".rem")
            'Gera o arquivo REMESSA
            Select Case Format(intBANCO, "000")
                Case "237" 'Bradesco
                    'Busca �ltimo n� da remessa MX (S� para BRADESCO)
                    Dim clsMXBRADESCO As New TranswagenMain.Boletos()
                    clsMXBRADESCO.ConnectionString = My.Settings.BDConex

                    intMXBRADESCO = clsMXBRADESCO.BuscaUltimoNumeroMXBradesco() + 1
                    clsMXBRADESCO = Nothing

                    objREMESSA.GerarArquivoRemessa(arrCONTA(6), New Banco(intBANCO), objCEDENTE, objBOLETOS, objFILESTREAM, intMXBRADESCO)
                Case Else 'Santander, B.Brasil e Ita�
                    objREMESSA.GerarArquivoRemessa(arrCONTA(6), New Banco(intBANCO), objCEDENTE, objBOLETOS, objFILESTREAM, intSEQUENCIA)
            End Select
        Catch ex As Exception
            strMSG = "Houve um problema na gera��o do arquivo REMESSA." & vbCrLf & vbCrLf
            strMSG &= "Erro: " & ex.Message
            MsgBox(strMSG, MsgBoxStyle.Critical)
            Exit Sub
        End Try

        objREMESSA = Nothing
        objFILESTREAM = Nothing
        objCEDENTE = Nothing
        objBOLETOS = Nothing

        Dim clsBOLETO As New TranswagenMain.Boletos()
        clsBOLETO.ConnectionString = My.Settings.BDConex

        Try
            'Atualiza status_remessa dos boletos enviados
            clsBOLETO.AtualizaStatusRemessaBoleto(strBOLETOS_ID.Substring(0, strBOLETOS_ID.Length - 2), lblnomearquivo.Text.Trim)
        Catch ex As Exception
            strMSG = "Houve um problema na atualiza��o dos boletos da REMESSA." & vbCrLf & vbCrLf
            strMSG &= "Erro: " & ex.Message & vbCrLf & vbCrLf
            strMSG &= "Arquivo de REMESSA [ " & lblnomearquivo.Text & ".rem ] ser� exclu�do !"
            MsgBox(strMSG, MsgBoxStyle.Critical)
            File.Delete(lbldirarqrem.Text.Trim & "\" & lblnomearquivo.Text.Trim & ".rem")
            Exit Sub
        End Try

        'Apensa para BRADESCO - Atualiza��o do MX
        If intBANCO = 237 Then
            Try
                'Atualiza mxbradesco
                clsBOLETO.AtualizaNumeroMXBradesco(intMXBRADESCO)
            Catch ex As Exception
                strMSG = "Houve um problema na atualiza��o do n� da remessa MX BRADESCO." & vbCrLf & vbCrLf
                strMSG &= "Erro: " & ex.Message & vbCrLf & vbCrLf
                MsgBox(strMSG, MsgBoxStyle.Critical)
                Exit Sub
            End Try
        End If

        clsBOLETO = Nothing

        strMSG = "Arquivo de REMESSA [ " & lblnomearquivo.Text & ".rem ] foi gerado com sucesso !" & vbCrLf & vbCrLf
        strMSG &= "Utilize o site do " & strNOMEBANCO & " para efetuar a transmiss�o." & vbCrLf & vbCrLf
        strMSG &= "O arquivo foi gravado em " & lbldirarqrem.Text & vbCrLf
        MsgBox(strMSG, MsgBoxStyle.Information)

        btnGerarRemessa.Enabled = False

    End Sub

Espero ter ajudado,

Abraços

Dec 3, 2012 at 4:08 PM

Boa tarde jsoda

Muito obrigado pela explicação, agora percebi o que estava fazendo errado, e cosegui gerar com sucesso varios boletos em uma unica remessa.

abraços

Marcos Matani

Developer
Dec 4, 2012 at 12:43 PM

Valeu mmatani.

Abraços,