MOSTRAR NO LISTVIEW RESULTADO CORRETO DO SQL
Bom dia Pessoal !
Certa vez tive a ajuda aqui no Fórum para resolver um problema de quantidades a pagar de cerveja numa promoção, onde conforme o consumo o cliente paga uma parte e outra parte fica sem pagar, e o problema foi resolvido conforme a rotina abaixo:
SQL = [Ô]SELECT p.meucod, p.descricao, p.valorvenda, pdv.qtdenormal, pdv.qtdecobra, pdv.valido, pe.codigo, sum(pe.unidade) as quantidade, max(pe.datahora) as hora[Ô]
SQL = SQL & [Ô] FROM pedidos pe, produtosderiv pdv, produtos p[Ô]
SQL = SQL & [Ô] WHERE pe.produto = p.meucod and pe.produto = pdv.prod and pe.datafecha is null and pe.cartao = [Ô] & TxtMesa.Text & [Ô] and p.promocao = [ô]Quantidade[ô] and pdv.valido = [ô]Sim[ô] GROUP BY p.meucod[Ô]
Cursor.Open SQL, Cn
If Cursor.EOF = False Then
[ô]cálculo da promoção
Consumiu = Cursor!Quantidade
Cobra = Cursor!qtdecobra
Normal = Cursor!qtdenormal
Diferenca = Normal - Cobra
Desconto = Int((Consumiu / Normal) * Diferenca)
Paga = Consumiu - Desconto
Ganha = Desconto
If Consumiu < Normal Then
[ô]paga sem atingir a quantidade da promoção
Set Lista = LVPedidos.ListItems.Add(, , Cursor!meucod & [Ô] - [Ô] & Cursor!descricao)
Lista.SubItems(1) = Consumiu
Lista.SubItems(2) = Format(CCur(Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(3) = Format(CCur(Cobra * Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(4) = Cursor!Hora
Lista.SubItems(5) = Cursor!Codigo
End If
If Consumiu >= Normal Then
Do Until Cursor.EOF = True
[ô]quanto paga
Set Lista = LVPedidos.ListItems.Add(, , Cursor!meucod & [Ô] - [Ô] & Cursor!descricao)
Lista.SubItems(1) = Paga
Lista.SubItems(2) = Format(CCur(Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(3) = Format(CCur(Paga * Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(4) = Cursor!Hora
Lista.SubItems(5) = Cursor!Codigo
[ô]sem pagar
Set Lista = LVPedidos.ListItems.Add(, , Cursor!meucod & [Ô] - [Ô] & Cursor!descricao & [Ô]-Promoção[Ô])
Lista.SubItems(1) = Ganha
Lista.SubItems(2) = Format(CCur(Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(3) = Format(CCur(Ganha * 0), [Ô]#,##0.00[Ô])
Lista.SubItems(4) = Cursor!Hora
Lista.SubItems(5) = Cursor!Codigo
Cursor.MoveNext
Loop
End If
Cursor.Close
O problema é que foi feito para uma determinada cerveja, é o código acima mostra tudo certo para aquela cerveja, só que agora, pode ser pra várias marcas de cerveja, ele até mostra certo todas as cervejas na lista e os valores a pagar, o problema e que repete a mesma quantidade pra todas as cervejas igual a primeira marca da lista.
Exemplo para duas cervejas que: uma foi comprada 12 no total, pagou 9 e ficou 3 de graça e a outra deveria aparecer total 4, pagou 3 e 1 ficou sem pagar.
no list aparece:
Cod/Nome qtde valor Total
1100 - Itaipava Premium 9 4,90 44,10
1100 - Itaipava Preminum 3 4,90 0,00
1101 - Itaipava Pilsen 9 3,80 34,20
1101 - Itaipava Pilsen 3 3,80 0,00
o certo seria:
Cod/Nome qtde valor Total
1100 - Itaipava Premium 9 4,90 44,10
1100 - Itaipava Preminum 3 4,90 0,00
1101 - Itaipava Pilsen 3 3,80 11,40
1101 - Itaipava Pilsen 1 3,80 0,00
Não estou conseguindo enxergar como resolver esse problema no list.
Alguém poderia me ajudar, por favor?
Grato,
Certa vez tive a ajuda aqui no Fórum para resolver um problema de quantidades a pagar de cerveja numa promoção, onde conforme o consumo o cliente paga uma parte e outra parte fica sem pagar, e o problema foi resolvido conforme a rotina abaixo:
SQL = [Ô]SELECT p.meucod, p.descricao, p.valorvenda, pdv.qtdenormal, pdv.qtdecobra, pdv.valido, pe.codigo, sum(pe.unidade) as quantidade, max(pe.datahora) as hora[Ô]
SQL = SQL & [Ô] FROM pedidos pe, produtosderiv pdv, produtos p[Ô]
SQL = SQL & [Ô] WHERE pe.produto = p.meucod and pe.produto = pdv.prod and pe.datafecha is null and pe.cartao = [Ô] & TxtMesa.Text & [Ô] and p.promocao = [ô]Quantidade[ô] and pdv.valido = [ô]Sim[ô] GROUP BY p.meucod[Ô]
Cursor.Open SQL, Cn
If Cursor.EOF = False Then
[ô]cálculo da promoção
Consumiu = Cursor!Quantidade
Cobra = Cursor!qtdecobra
Normal = Cursor!qtdenormal
Diferenca = Normal - Cobra
Desconto = Int((Consumiu / Normal) * Diferenca)
Paga = Consumiu - Desconto
Ganha = Desconto
If Consumiu < Normal Then
[ô]paga sem atingir a quantidade da promoção
Set Lista = LVPedidos.ListItems.Add(, , Cursor!meucod & [Ô] - [Ô] & Cursor!descricao)
Lista.SubItems(1) = Consumiu
Lista.SubItems(2) = Format(CCur(Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(3) = Format(CCur(Cobra * Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(4) = Cursor!Hora
Lista.SubItems(5) = Cursor!Codigo
End If
If Consumiu >= Normal Then
Do Until Cursor.EOF = True
[ô]quanto paga
Set Lista = LVPedidos.ListItems.Add(, , Cursor!meucod & [Ô] - [Ô] & Cursor!descricao)
Lista.SubItems(1) = Paga
Lista.SubItems(2) = Format(CCur(Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(3) = Format(CCur(Paga * Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(4) = Cursor!Hora
Lista.SubItems(5) = Cursor!Codigo
[ô]sem pagar
Set Lista = LVPedidos.ListItems.Add(, , Cursor!meucod & [Ô] - [Ô] & Cursor!descricao & [Ô]-Promoção[Ô])
Lista.SubItems(1) = Ganha
Lista.SubItems(2) = Format(CCur(Cursor!VALORVENDA), [Ô]#,##0.00[Ô])
Lista.SubItems(3) = Format(CCur(Ganha * 0), [Ô]#,##0.00[Ô])
Lista.SubItems(4) = Cursor!Hora
Lista.SubItems(5) = Cursor!Codigo
Cursor.MoveNext
Loop
End If
Cursor.Close
O problema é que foi feito para uma determinada cerveja, é o código acima mostra tudo certo para aquela cerveja, só que agora, pode ser pra várias marcas de cerveja, ele até mostra certo todas as cervejas na lista e os valores a pagar, o problema e que repete a mesma quantidade pra todas as cervejas igual a primeira marca da lista.
Exemplo para duas cervejas que: uma foi comprada 12 no total, pagou 9 e ficou 3 de graça e a outra deveria aparecer total 4, pagou 3 e 1 ficou sem pagar.
no list aparece:
Cod/Nome qtde valor Total
1100 - Itaipava Premium 9 4,90 44,10
1100 - Itaipava Preminum 3 4,90 0,00
1101 - Itaipava Pilsen 9 3,80 34,20
1101 - Itaipava Pilsen 3 3,80 0,00
o certo seria:
Cod/Nome qtde valor Total
1100 - Itaipava Premium 9 4,90 44,10
1100 - Itaipava Preminum 3 4,90 0,00
1101 - Itaipava Pilsen 3 3,80 11,40
1101 - Itaipava Pilsen 1 3,80 0,00
Não estou conseguindo enxergar como resolver esse problema no list.
Alguém poderia me ajudar, por favor?
Grato,
Bom dia Pessoal !
Não sei se consegui explicar direito a dúvida, mas a Sql abaixo:
SQL = [Ô]SELECT p.meucod, p.descricao, p.valorvenda, pdv.qtdenormal, pdv.qtdecobra, pdv.valido, pe.codigo, sum(pe.unidade) as quantidade, max(pe.datahora) as hora[Ô]
SQL = SQL & [Ô] FROM pedidos pe, produtosderiv pdv, produtos p[Ô]
SQL = SQL & [Ô] WHERE pe.produto = p.meucod and pe.produto = pdv.prod and pe.datafecha is null and pe.cartao = [Ô] & TxtMesa.Text & [Ô] and p.promocao = [ô]Quantidade[ô] and pdv.valido = [ô]Sim[ô] GROUP BY p.meucod[Ô]
traz os dados abaixo (coloquei os principais)
meucod/descricao valorvenda qtdenormal qtdecobra qtdetotalvendida
1100 - Itaipava Premium 4,90 4 3 12
1101 - Itaipava Pilsen 3,80 4 3 4
então, a list, LVPedidos está mostrando certo os dados do primeiro produto onde:
se quando vender 4 cobra só 3, no caso vendeu no total 12, então cobra 9 e não paga 3,
só que o segundo produto está repetindo as mesmas quantidades do primeiro 9 e 3, sendo o certo 3 e 1.
Já tentei fazer com FOR contando a quantidade de produtos e também não dá certo.
Alguém tem alguma idéia?
Obrigado, Valdecyr
Não sei se consegui explicar direito a dúvida, mas a Sql abaixo:
SQL = [Ô]SELECT p.meucod, p.descricao, p.valorvenda, pdv.qtdenormal, pdv.qtdecobra, pdv.valido, pe.codigo, sum(pe.unidade) as quantidade, max(pe.datahora) as hora[Ô]
SQL = SQL & [Ô] FROM pedidos pe, produtosderiv pdv, produtos p[Ô]
SQL = SQL & [Ô] WHERE pe.produto = p.meucod and pe.produto = pdv.prod and pe.datafecha is null and pe.cartao = [Ô] & TxtMesa.Text & [Ô] and p.promocao = [ô]Quantidade[ô] and pdv.valido = [ô]Sim[ô] GROUP BY p.meucod[Ô]
traz os dados abaixo (coloquei os principais)
meucod/descricao valorvenda qtdenormal qtdecobra qtdetotalvendida
1100 - Itaipava Premium 4,90 4 3 12
1101 - Itaipava Pilsen 3,80 4 3 4
então, a list, LVPedidos está mostrando certo os dados do primeiro produto onde:
se quando vender 4 cobra só 3, no caso vendeu no total 12, então cobra 9 e não paga 3,
só que o segundo produto está repetindo as mesmas quantidades do primeiro 9 e 3, sendo o certo 3 e 1.
Já tentei fazer com FOR contando a quantidade de produtos e também não dá certo.
Alguém tem alguma idéia?
Obrigado, Valdecyr
Para podermos ajudar, precisamos:
A estrutura das tabelas pedidos, produtosderiv e produtos
E o que exatamente você quer listar. Só olhar código, não adianta quase nada.
A estrutura das tabelas pedidos, produtosderiv e produtos
E o que exatamente você quer listar. Só olhar código, não adianta quase nada.
Lembro que no outro tópico havÃamos discutido esta possibilidade de haver uma nova promoção e ocorrer este problema.
bom o correto seria na tabela de promoção existir os seguintes campos:
Mesa
CodProduto
DescrProduto
TotalConsumido
A_Cada
Cobrar_Apenas
com estrutura acima ficaria fácil fazer diversos calculos, talvez depois você consiga implantar isto ao seu projeto, porém vaja um exemplo de lançamentos
[th]
seguindo a tabela acima bastaria usar uma função unica que faria o codigo, tipo esta
inserindo os dados da tabela na função
e vai exibir ( 9 - 3 )
logico que fica a seu critério fazer as alterações necessarias, assim não precisaria usar os if que usa
bom o correto seria na tabela de promoção existir os seguintes campos:
Mesa
CodProduto
DescrProduto
TotalConsumido
A_Cada
Cobrar_Apenas
com estrutura acima ficaria fácil fazer diversos calculos, talvez depois você consiga implantar isto ao seu projeto, porém vaja um exemplo de lançamentos
Tabela Promoções | [/th]|||||
Mesa | CodProduto | DescrProduto | TotalConsumido | A_Cada | Cobrar_apenas |
0001 | 1342 | Cerveja Pilsen | 12 | 4 | 3 |
seguindo a tabela acima bastaria usar uma função unica que faria o codigo, tipo esta
Function Promocao(QtdeTotal As Integer, ACada As Integer, Cobrar As Integer) As String
Dim Resto As Integer, totalcobrar As Integer
Resto = (QtdeTotal Mod ACada)
totalcobrar = (((QtdeTotal - Resto) / ACada) * Cobrar) + Resto
Descontar = QtdeTotal - totalcobrar
promocao = totalcobrar & [Ô] - [Ô] & descontar
End Function
inserindo os dados da tabela na função
msgbox Promocao(rs!TotalConsumido,rs!A_cada,rs!Cobrar_apenas)
e vai exibir ( 9 - 3 )
logico que fica a seu critério fazer as alterações necessarias, assim não precisaria usar os if que usa
Boa tarde!
Está certo, seguindo o que vocês falaram, deverei verificar a mudança da estrutura das tabelas e ver o que consigo.
Vou estar trabalhando nisso, depois retorno ao tópico
Já ajudou bastante,
Obrigado,
Abraços,
Valdecyr
Está certo, seguindo o que vocês falaram, deverei verificar a mudança da estrutura das tabelas e ver o que consigo.
Vou estar trabalhando nisso, depois retorno ao tópico
Já ajudou bastante,
Obrigado,
Abraços,
Valdecyr
Boa tarde Pessoal!
Muito obrigado Marcelo Treze, o problema era mesmo a estrutura das tabelas
Segui sua lógica, e no final acabou dando tudo certo. Valew pelo interesse em ajudar com tantos detalhes.
Abraços,
Valdecyr
Muito obrigado Marcelo Treze, o problema era mesmo a estrutura das tabelas
Segui sua lógica, e no final acabou dando tudo certo. Valew pelo interesse em ajudar com tantos detalhes.
Abraços,
Valdecyr
Tópico encerrado , respostas não são mais permitidas