MENSAGEM DE ERRO

FGONCALVES 17/11/2010 13:01:21
#357665

pessoal, criei um modulo de orçamento a ser impresso em crystal.

se o orçamento tiver mais de duas páginas e o cliente clicar nos botões pra visualizar as páginas seguintes aparece a seguinte mensagem:

[Ô]Referência de objeto não definida para uma instância de um objeto.[Ô]

e não consigo visualizar as páginas seguintes. tem o cabeçalho e td. pra os itens do orçamento eu criei um sub-report.

no código eu instanciei algo assim:

dim orcamento as new crOrcamento
dim orcamentoitens as new crorcamentoitens

ou seja estão sim instaciadas. então pq ta dando esse erro?

desde ja agradeço a tds
PEGUDO 17/11/2010 13:14:47
#357666
Tente colocar estas variáveis no escopo do código:

[txt-color=#0000f0]Private[/txt-color] orcamento [txt-color=#0000f0]As New [/txt-color]crOrcamento
[txt-color=#0000f0]Private[/txt-color] orcamentoitens[txt-color=#0000f0] As New [/txt-color]crorcamentoitens

Se não funcionar poste seu código aqui.
FGONCALVES 17/11/2010 14:10:57
#357673

continua do mesmo jeito. aí vai o código:


Public Sub EmissaoOrcamento(ByVal Indice As Long)
Dim COMMAND As New FirebirdSql.Data.Firebird.FbCommand
Dim ds As New DataSet
Dim RowNew As DataRow
Dim SQL As String

Dim TclsIniciar As New clsINICIAR
Dim ArquivoINI As String = TclsIniciar.nomeArquivoINI()
Dim Endereco As String = TclsIniciar.GetIniString(ArquivoINI, [Ô]Logotipo[Ô], [Ô]Cliente[Ô], String.Empty)
Dim LogoCliente As New FileStream(Endereco, FileMode.Open)

[ô]insere o logotipo do cliente no relatório
Dim RowLogo As DataRow = ds.Tables([Ô]DS_LogoCliente[Ô]).NewRow()
Dim Logo As New BinaryReader(LogoCliente)

Dim Separador As String = String.Empty
Dim Telefone = String.Empty, Celular As String = String.Empty

Try
RowLogo.Item(0) = Logo.ReadBytes(CInt(Logo.BaseStream.Length))
ds.Tables([Ô]DS_LogoCliente[Ô]).Rows.Add(RowLogo)

[ô]insere o título do relatório
COMMAND.Connection = ACESSOS.FbConnection
COMMAND.CommandText = [Ô]SELECT * FROM CONFIG[Ô]
dr = COMMAND.ExecuteReader
ds.Tables([Ô]DS_Titulo[Ô]).Rows.Clear()
If dr.HasRows = True Then
While dr.Read
RowNew = ds.Tables([Ô]DS_Titulo[Ô]).NewRow
RowNew([Ô]NomeEmpresa[Ô]) = dr.Item([Ô]EMPRESA_CAMPO1[Ô]).ToString
RowNew([Ô]Endereco[Ô]) = dr.Item([Ô]EMPRESA_CAMPO3[Ô]).ToString & [Ô] - [Ô] & dr.Item([Ô]EMPRESA_CAMPO4[Ô]).ToString
RowNew([Ô]Cidade[Ô]) = dr.Item([Ô]EMPRESA_CAMPO10[Ô]).ToString & [Ô] - [Ô] & dr.Item([Ô]EMPRESA_CAMPO11[Ô]).ToString & [Ô] - [Ô] & dr.Item([Ô]EMPRESA_CAMPO12[Ô]).ToString

Telefone = dr.Item([Ô]EMPRESA_CAMPO7[Ô]).ToString
Celular = dr.Item([Ô]EMPRESA_CAMPO8[Ô]).ToString
If Telefone <> [Ô]( ) -[Ô] And Celular <> [Ô]( ) -[Ô] Then
Separador = [Ô] - [Ô]
Else
Separador = String.Empty
End If
If Telefone = [Ô]( ) -[Ô] Then Telefone = String.Empty
If Celular = [Ô]( ) -[Ô] Then Celular = String.Empty
RowNew([Ô]Telefone[Ô]) = Telefone & Separador & Celular
ds.Tables([Ô]DS_Titulo[Ô]).Rows.Add(RowNew)
End While
End If
dr.Close()

[ô]calcula o valor total dos itens
Dim TotalItens As Single = 0
Dim Unitario As String = String.Empty

ds.Tables([Ô]DS_OrcamentoValores[Ô]).Rows.Clear()
SQL = [Ô]SELECT QUANTIDADE,VALOR,TOTAL FROM ORCAMENTO_B WHERE NUMERO_ORCAMENTO=[Ô] & Indice
COMMAND.CommandText = (SQL)
dr = COMMAND.ExecuteReader
If dr.HasRows = True Then
While dr.Read
If dr.Item([Ô]VALOR[Ô]).ToString > 0 Then
TotalItens += (+dr.Item([Ô]QUANTIDADE[Ô]).ToString * dr.Item([Ô]VALOR[Ô]).ToString)
Else
TotalItens += (+dr.Item([Ô]TOTAL[Ô]).ToString)
End If
End While
End If
dr.Close()
RowNew = ds.Tables([Ô]DS_OrcamentoValores[Ô]).NewRow
RowNew([Ô]TotalItens[Ô]) = TotalItens
ds.Tables([Ô]DS_OrcamentoValores[Ô]).Rows.Add(RowNew)

SQL = [Ô]SELECT ORCAMENTO_A.NUMERO_ORCAMENTO, CLIENTE.CODIGO, CLIENTE.NOME, CLIENTE.ENDERECO, CLIENTE.BAIRRO, CLIENTE.TELEFONE, CLIENTE.FAX, CLIENTE.CELULAR, ORCAMENTO_A.DATA, ORCAMENTO_A.VALIDADE, FUNCIONARIOS.NOME AS Expr1, [Ô] & _
[Ô]CONDICOESPAGAMENTO.DESCRICAO, ORCAMENTO_A.SERVICOS, ORCAMENTO_A.VRSERVICOS, ORCAMENTO_A.DESCONTO, ORCAMENTO_A.OBSERVACAO [Ô] & _
[Ô]FROM (((ORCAMENTO_A INNER JOIN [Ô] & _
[Ô]CLIENTE ON ORCAMENTO_A.CLIENTE = CLIENTE.CODIGO) INNER JOIN [Ô] & _
[Ô]CONDICOESPAGAMENTO ON ORCAMENTO_A.CONDICAOPAGAMENTO = CONDICOESPAGAMENTO.CODIGO) INNER JOIN [Ô] & _
[Ô]FUNCIONARIOS ON ORCAMENTO_A.ATENDENTE = FUNCIONARIOS.CODIGO)[Ô]
SQL += [Ô] WHERE NUMERO_ORCAMENTO=[Ô] & Indice
ds.Tables([Ô]DS_Orcamento[Ô]).Rows.Clear()
COMMAND.CommandText = (SQL)
dr = COMMAND.ExecuteReader
If dr.HasRows = True Then
While dr.Read
RowNew = ds.Tables([Ô]DS_Orcamento[Ô]).NewRow
RowNew([Ô]NUMERO_ORCAMENTO[Ô]) = dr.Item([Ô]NUMERO_ORCAMENTO[Ô]).ToString
RowNew([Ô]NOME[Ô]) = dr.Item([Ô]NOME[Ô]).ToString
RowNew([Ô]TELEFONE[Ô]) = dr.Item([Ô]TELEFONE[Ô]).ToString
RowNew([Ô]DATA[Ô]) = dr.Item([Ô]DATA[Ô]).ToString
RowNew([Ô]VALIDADE[Ô]) = dr.Item([Ô]VALIDADE[Ô]).ToString
RowNew([Ô]Expr1[Ô]) = dr.Item([Ô]Expr1[Ô]).ToString
RowNew([Ô]DESCRICAO[Ô]) = dr.Item([Ô]DESCRICAO[Ô]).ToString
RowNew([Ô]OBSERVACAO[Ô]) = dr.Item([Ô]OBSERVACAO[Ô]).ToString
RowNew([Ô]DESCONTO[Ô]) = dr.Item([Ô]DESCONTO[Ô]).ToString
ds.Tables([Ô]DS_Orcamento[Ô]).Rows.Add(RowNew)
End While
End If
dr.Close()

SQL = [Ô]SELECT ORCAMENTO_B.NUMERO_ORCAMENTO, ORCAMENTO_B.QUANTIDADE, ORCAMENTO_B.VALOR, ORCAMENTO_B.TOTAL, ORCAMENTO_B.DESCRICAO AS DESCRICAOITEM, MERCADORIAS.CODIGO, MERCADORIAS.DESCRICAO, [Ô] & _
[Ô]MERCADORIAS.UNIDADE [Ô] & _
[Ô]FROM (ORCAMENTO_B INNER JOIN [Ô] & _
[Ô]MERCADORIAS ON ORCAMENTO_B.MERCADORIA = MERCADORIAS.CODIGO)[Ô]
SQL += [Ô] WHERE NUMERO_ORCAMENTO=[Ô] & Indice
ds.Tables([Ô]DS_OrcamentoItens[Ô]).Rows.Clear()
COMMAND.CommandText = (SQL)
dr = COMMAND.ExecuteReader
If dr.HasRows = True Then
While dr.Read
RowNew = ds.Tables([Ô]DS_OrcamentoItens[Ô]).NewRow
RowNew([Ô]Numero_Orcamento[Ô]) = dr.Item([Ô]NUMERO_ORCAMENTO[Ô]).ToString
RowNew([Ô]Quantidade[Ô]) = dr.Item([Ô]QUANTIDADE[Ô]).ToString
RowNew([Ô]Codigo[Ô]) = dr.Item([Ô]CODIGO[Ô]).ToString
RowNew([Ô]Descricao[Ô]) = dr.Item([Ô]DESCRICAO[Ô]).ToString
RowNew([Ô]Unidade[Ô]) = dr.Item([Ô]UNIDADE[Ô]).ToString
If dr.Item([Ô]VALOR[Ô]).ToString > 0 Then

Unitario = dr.Item([Ô]VALOR[Ô]).ToString
If InStr(Unitario, New String([Ô],[Ô], 1)) = 0 Then
Unitario = FormatCurrency(Unitario, 2)
Else
If Len(Mid(Unitario, InStr(Unitario, New String([Ô],[Ô], 1)) + 1, 10)) <= 2 Then
Unitario = FormatCurrency(Unitario, 2)
ElseIf Len(Mid(Unitario, InStr(Unitario, New String([Ô],[Ô], 1)) + 1, 10)) > 1 Then
Unitario = FormatCurrency(Unitario, Len(Mid(Unitario, InStr(Unitario, New String([Ô],[Ô], 1)) + 1, 10)))
End If
End If
RowNew([Ô]Valor[Ô]) = Unitario
RowNew([Ô]Total[Ô]) = FormatCurrency((dr.Item([Ô]QUANTIDADE[Ô]).ToString * dr.Item([Ô]VALOR[Ô]).ToString), 2)
Else
RowNew([Ô]Valor[Ô]) = String.Empty
RowNew([Ô]Total[Ô]) = FormatCurrency(dr.Item([Ô]TOTAL[Ô]).ToString, 2)
End If
RowNew([Ô]DescricaoItem[Ô]) = dr.Item([Ô]DESCRICAOITEM[Ô]).ToString
ds.Tables([Ô]DS_OrcamentoItens[Ô]).Rows.Add(RowNew)
End While
End If
dr.Close()

Dim TOrcamento As New crORCAMENTO
Dim TOrcamentoItens As New crORCAMENTOITENS
Dim TRelatorio As New RELATORIO

TOrcamento.SetDataSource(ds)
TOrcamentoItens.SetDataSource(ds)

TRelatorio.Text = [Ô]Orçamento[Ô]
TRelatorio.crReportViewer.DisplayGroupTree = False
TRelatorio.crReportViewer.ReportSource = TOrcamento
TRelatorio.Show()
TOrcamento.Dispose()
TOrcamentoItens.Dispose()
Catch ex As Exception
ERRO()
Finally
dr.Close()
COMMAND.Dispose()
ds.Dispose()
LogoCliente.Dispose()
End Try
End Sub
FGONCALVES 17/11/2010 14:39:44
#357675

descobri aki pessoal! tava desde cedo procurando o problema.

são essas duas malditas linhas aí:

torcamento.dispose
torcamentoitens.dispose


desculpem pelo incomodo.
Tópico encerrado , respostas não são mais permitidas