Fórmula na Consulta - Curva ABC
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
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/2023 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... |