... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Fórmula na Consulta - Curva ABC

Usuário Rafael:

Boa Tarde.

Você pode me ajudar a encontrar o erro, pois quando rodo essa fórmula, o Microsoft Access trava!

Expr1: DSoma("Acumulado";"Ruptura consulta";[Acumulado] & ''<=[Acumulado])

O intuito desse cálculo é realizar a curva ABC, porém estou travado nessa soma acumulada.  A fórmula em questão fica executando e continua travando!  Estou lhe fornecendo um exemplo.

Suporte:

Rafael, segue o exemplo com a proposta de solução.  A idéia foi a de gerar uma tabela temporária, com base na consulta qryRuptura.  Usei a programação para calcular os campos Percentual e Acumulado, na tabela temporária.

Segue a programação completa utilizada:

Private Sub Comando0_Click()
Dim dblTotal As Double
Dim rs As DAO.Recordset
Dim bd As DAO.Database
Dim prp As DAO.Property
Dim strSql As String
Dim dblAcumulado As Double

On Error Resume Next

'Deleta a tabela temporaria
DoCmd.DeleteObject acTable, "ruptura_tmp"

'Soma total de vendas
dblTotal = DSum("SomaDeVenda", "qryRuptura")

'Cria a tabela temporaria, com base na consulta qryRuptura
strSql = "SELECT * INTO ruptura_tmp FROM qryRuptura;"
CurrentDb.Execute strSql

'Altera o formato do campo Percentual para porcentagem
Set bd = CurrentDb
Set prp = bd.TableDefs("ruptura_tmp").Fields("Percentual"). _
CreateProperty("Format", dbText, "Percent")
bd.TableDefs("ruptura_tmp").Fields("Percentual").Properties.Append prp

'Altera o formato do campo Acumulado para porcentagem
Set prp = bd.TableDefs("ruptura_tmp").Fields("Acumulado"). _
CreateProperty("Format", dbText, "Percent")
bd.TableDefs("ruptura_tmp").Fields("Acumulado").Properties.Append prp

'Abre a tabela temporaria ruptura_tmp e realiza os cálculos
Set rs = CurrentDb.OpenRecordset("ruptura_tmp")
Do While Not rs.EOF
    rs.Edit
        rs!Percentual = rs!SomaDeVenda / dblTotal
        rs!acumulado = dblAcumulado + (rs!SomaDeVenda / dblTotal)
    rs.Update
    dblAcumulado = rs!acumulado
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing
'Abre a tabela temporaria
DoCmd.OpenTable "ruptura_tmp"
End Sub

A programação está no botão do formulário frmTeste.

Deixei para você inserir a classificação (A, B ou C) na tabela, através da programação proposta.

Usuário Rafael:

Bom dia Avelino,

Perfeito! Obrigado pela ajuda! Ficou excelente!

Download

 


 

 


1 comentário(s)

MARCIO MELO - RJ   19/03/2018 19:37:48

Formidável! Adorei a forma prática e rápida do código, ficou super didático e de fácil adaptação a filtros de datas para limitar os dados que desejamos. Fiquei surpreso com a quantidade de dados de exemplos que foram processados. Muita das vezes precisamos manipular as consultas em designer pelo VBA e sem ideia de como proceder, eis aqui mais um trabalho de amplo emprego.u

Sou mais Brasil!

Grato por compartilhar seu modelo, sua lógica didática...

Forte abraço! sempre acompanho suas listas...


Envie seu comentário: