Fórum
Ver pergunta

Listagem de Artigos lenta… alguém me pode ajudar?   

114 visualizações
Categoria::
1
0

Bom dia a todos,

 

Estou a fazer para um cliente uma aplicação onde apenas parece uma DataGrid com a informação de Artigos (Codigo, Descrição, PVP1 e Stock).

A questão que coloco é que o cliente tem mais de 12.000 artigos e com o codigo que tenho demora imenso a ler toda a tabela. Será que há alguma forma de o fazer de forma mais rapida atravez das APIs?

 

O Codigo que uso é este:

Dim lstArt As StdBELista = motor.Comercial.Artigos.LstArtigos

While lstArt.NoFim <> True
a = lstArt.Valor(“Artigo”).ToString
d = lstArt.Valor(“Descricao”).ToString
u = CType(motor.Comercial.Artigos.DaValorAtributo(a, “UnidadeBase”), String)
p = CType(motor.Comercial.ArtigosPrecos.DaValorAtributo(a, “AKZ”, u, “PVP1”), Double).ToString(“N2”)
s = CType(motor.Comercial.Artigos.DaValorAtributo(a, “StkActual”), Double).ToString(“N2”)
DS_Artigos.DT_Artigos.Rows.Add(a, d, p, s)
lstArt.Seguinte()
End While

Faça login para poder traduzir
V10
Geral
Marcado como spam
Criado há 5 anos e 4 meses jcdiniz
j
jcdiniz Iniciante
Comentários

Olá @João. Recomendamos que coloque a sua questão no StackOverflow. Está bem estruturada e tem código associado. É importante que este tipo de questões sejam abordadas naquela plataforma.

5 anos e 4 meses
joomartins-3
    2 respostas
    2
    Resposta privada

    Se a “DataGrid” a que se refere é do tipo “DataGridView” (controlo nativo do .NET), então poderá fazer da seguinte forma (bind direto a um “DataTable”):

    Private Sub CarregaDataGridView()
    	Try
    		Dim motor As New ErpBS
    		Dim lista As StdBELista
    		Dim dataTable As New DataTable
    		Dim sql As New StringBuilder
    
    		With dataTable
    			.Columns.Add("Artigo")
    			.Columns.Add("Descricao")
    			.Columns.Add("UnidadeBase")
    			.Columns.Add("PVP1")
    			.Columns.Add("StkActual")
    		End With
    
    		motor.AbreEmpresaTrabalho(StdBETipos.EnumTipoPlataforma.tpEmpresarial, "DEMO", "primavera", String.Empty)
    
    		sql.AppendLine("SELECT A.Artigo, A.Descricao, A.UnidadeBase, AM.PVP1, A.StkActual")
    		sql.AppendLine("FROM Artigo A")
    		sql.AppendLine("INNER JOIN ArtigoMoeda AM ON AM.Artigo = A.Artigo AND AM.Moeda = 'EUR'")
    
    		lista = motor.Consulta(sql.ToString())
    
    		While Not lista.NoFim
    			Dim row As DataRow = dataTable.NewRow
    
    			row("Artigo") = Convert.ToString(lista.Valor("Artigo"))
    			row("Descricao") = Convert.ToString(lista.Valor("Descricao"))
    			row("UnidadeBase") = Convert.ToString(lista.Valor("UnidadeBase"))
    			row("PVP1") = String.Format("{0:#,##0.00}", lista.Valor("PVP1"))
    			row("StkActual") = String.Format("{0:#,##0.00}", lista.Valor("StkActual"))
    
    			dataTable.Rows.Add(row)
    
    			lista.Seguinte()
    		End While
    
    		myDataGridView.DataSource = dataTable
    	Catch ex As Exception
    		MsgBox(ex.Message)
    	End Try
    End Sub

     

    Faça login para poder traduzir
    Marcado como spam
    Criado há 5 anos e 4 meses joomartins-3
    j
    joomartins-3 Iniciante
      Comentários

      Obrigado, funciona perfeitamente mesmo a listagem sendo acima dos 12.000 Artigos

      5 anos e 4 meses
      jcdiniz
        0
        Resposta privada

        Olá @jcdiniz

        Esta questão está fora do ambito deste forun, e como disse o João Martins aconcelhamos que questões deste tipo sejam colocada no stackoverflow. Recomendamos a leitura da secção de FAQ’s https://developers.ila.cegid.com/faqs/ para saber como utilizar correctamente as duas plataformas.

        PRIMAVERABSS

        Faça login para poder traduzir
        Marcado como spam
        Criado há 5 anos e 4 meses primaverabss
        p
        primaverabss Iniciante