Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

1. Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

C B
Xuyzes

(usa Kali)

Enviado em 02/06/2022 - 15:32h

Eu tenho um grande problema com uma parte do meu código:

a função abaixo, ela soma os valores da coluna preço e da coluna quantidade para extrair o valor total do pedido. Mas a coluna de preço está dobrando o valor e não consigo encontrar o erro. E mesmo que eu utilize o botão limpar a tela e insira novos dados, ele continua somando os valores que foram inseridos anteriormente, antes de eu apagos..

Já tentei deletar a variável e limpar o cache de memória.. mas continua a mesma coisa!

Este programa está usando pyqt6 e python3. é um programa para emissão de ordens de venda!


# =============================================== SAVING VALUES INSERTED ON THE MAIN SCREEN IN VARIABLES

self.obter_resultado = self.ui.comboBox_produto.currentText()
self.obter_preco = (self.ui.insere_preco.text())
self.obter_quantide = (self.ui.insere_quantidade.text())
self.obter_cliente = (self.ui.insere_cliente.text())
self.obter_prazo = self.ui.comboBox_prazo.currentText()
self.obter_trasportadora = self.ui.comboBox_transport.currentText()
self.obter_frete = self.ui.comboBox_frete.currentText()
self.obter_num_pedido = (self.ui.insere_num_pedido.text())
self.obter_vendedor = self.ui.comboBox_vendedor.currentText()
self.obter_embalagem = self.ui.comboBox_embalagem.currentText()
self.obter_Nf = self.ui.checkBox_NF.isChecked()
self.obter_Snf = self.ui.checkBox_SNF.isChecked()
self.obter_obs = (self.ui.observacoes.text())

# =============================================== INSERTING PRICE, QUANTITY, PRODUCT AND PACKAGING IN THE "PRODUCTS" TABLE

self.ui.tabela_recebe_produto.setRowCount(len(self.obter_resultado))
self.ui.tabela_recebe_produto.setItem(row, 0, QtWidgets.QTableWidgetItem(self.obter_resultado))
self.ui.tabela_recebe_produto.setItem(row, 1, QtWidgets.QTableWidgetItem(self.obter_quantide + " kg"))
self.ui.tabela_recebe_produto.setItem(row, 2, QtWidgets.QTableWidgetItem("R$ " + self.obter_preco))
self.ui.tabela_recebe_produto.setItem(row, 3, QtWidgets.QTableWidgetItem(self.obter_embalagem))
row=row+1

# =============================================== SAVING VALUES TO A TEXT FILE

if os.path.isdir(r"C:\\Users\Public\Documents\Pie"):
print()
else:
os.mkdir(r"C:\\Users\Public\Documents\Pie")

try:
conteudo1 = open(f"C:\\Users\Public\Documents\Pie\Pedido_{self.obter_cliente}.txt", "r", encoding="utf-8").read()
except:
conteudo1 = ""

if re.search("PEDIDO DE VENDA..\n\nVENDEDOR:", conteudo1):
arq = open(f"C:\\Users\Public\Documents\Pie\Pedido_{self.obter_cliente}.txt", "w", encoding="utf-8")
arq.write(conteudo1+"PRODUTO: %s | QUANTIDADE: %s kg | PREÇO: R$ %s\r"%(self.obter_resultado, self.obter_quantide, self.obter_preco))
arq.close()
else:
arq = open(f"C:\\Users\Public\Documents\Pie\Pedido_{self.obter_cliente}.txt", "w", encoding="utf-8")
arq.write(conteudo1+"PEDIDO DE VENDA..\n\nVENDEDOR: %s\nCLIENTE: %s\nPRAZO: %s\nN°PEDIDO: %s\nNF: %s\nSnF: %s\nTRANSPORTADORA: %s\nFRETE: %s\nPRODUTO: %s | QUANTIDADE: %s kg | PREÇO: R$ %s\r\n\n Obs:%s\r"%(self.obter_vendedor, self.obter_cliente, self.obter_prazo, self.obter_num_pedido, self.obter_Nf, self.obter_Snf, self.obter_trasportadora, self.obter_frete, self.obter_resultado, self.obter_quantide, self.obter_preco, self.obter_obs))
arq.close()

# =============================================== GLOBAL VARIABLE TO CALCULATE FREIGHT
global qtdd
global valor
# =============================================== CALCULATION OF FINAL WEIGHT AND QUANTITY

valor = valor + float(self.obter_preco)
qtdd = qtdd + float(self.obter_quantide)

# =============================================== INSERT THE VALUE IN THE LABEL OF THE WEIGHT AND FINAL QUANTITY

valor_total = valor * qtdd
self.ui.recebe_peso_total.setText(str(qtdd))
self.ui.recebe_valor_total.setText(str(valor_total))



  


2. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 02/06/2022 - 15:42h


Uma dica simples... evite veementemente usar variáveis globais. Se puder passar as definições das funções também ajudaria.


3. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

C B
Xuyzes

(usa Kali)

Enviado em 02/06/2022 - 15:55h


ctw6av escreveu:


Uma dica simples... evite veementemente usar variáveis globais. Se puder passar as definições das funções também ajudaria.


Olá ctw6av, dica anotada..

pode me chamar no telegram pra eu te explicar melhor a situação ?

https://t.me/PeakyBlindersW


4. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

C B
Xuyzes

(usa Kali)

Enviado em 03/06/2022 - 09:34h


ctw6av escreveu:


Uma dica simples... evite veementemente usar variáveis globais. Se puder passar as definições das funções também ajudaria.



mas seria o seguinte, para cada item inserido ele deveria fazer: preço x quantidade (para cada produto inserido na tabela)

mas ao contrario disse ele esta fazendo: soma1 = preço x quantidade (e logo no proximo item inserido ele faz: preço x soma1)





5. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

C B
Xuyzes

(usa Kali)

Enviado em 03/06/2022 - 09:46h


ctw6av escreveu:


Uma dica simples... evite veementemente usar variáveis globais. Se puder passar as definições das funções também ajudaria.



valor = valor + float(self.obter_preco) # >>>>>>>>>>> ESTA VARIAVEL VALOR ESTA SOMANDO OS VALORES QUE FORAM INSERIDOS NA COLUNA (PREÇO)
qtdd = qtdd + float(self.obter_quantide) # >>>>>>>>> ESTA VARIAVEL QTDD ESTA SOMANDO A QUANTIDADE QUE FOI INSERIDO NA COLUNA (QUANTIDADE)

valor_total = valor * qtdd # >>>>>>>>>>>>>>>>>>>> ESTA VARIAVEL GUARDA O RESULTADO DE VALOR X QTDD


self.ui.recebe_peso_total.setText(str(f"%s kg"%qtdd)) # >>>>>>>>>>>>> INSERE A QUANTIDADE SOMADA NA LABEL (PESO TOTAL)

self.ui.recebe_valor_total.setText(str(f"R$: %s"%valor_total)) # >>>>>>>> INSERE O PREÇO SOMADO NA LABEL (VALOR TOTAL)

O grande problema é que na primeira vez que o usuario insere apenas um produto, ele faz a soma correta. Porém da segunda vez, ele esta fazendo o calculo de preço x peso total (pegando o peso da label valor total).. ao inves de fazer o calculo recebido do item da coluna


6. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 03/06/2022 - 10:06h

Poste a classe toda no pastebin para podermos te ajudar melhor. Tenho uma suspeita do que pode estar acontecendo, você pode estar fazendo este cálculo no momento que instância a classe, por isso é feito somente uma única vez. Para corrigir teríamos que criar um método para realizar o cálculo sempre que necessário.

Se você está usando uma classe, não use variáveis globais, evite ao máximo, pois elas geram bagunça e inconsistências que fica difícil de encontrar depois.

Dicas:

--> Nome das variáveis em inglês é uma boa escolha sempre, mas não é obrigatório. 

--> Encurte de forma objetiva o nome das variáveis. 


O código fica mais limpo e objetivo


7. Re: Como corrigir a soma duplicata(cumulativa) em python

C B
Xuyzes

(usa Kali)

Enviado em 03/06/2022 - 11:34h

ctw6av escreveu:

Poste a classe toda no pastebin para podermos te ajudar melhor. Tenho uma suspeita do que pode estar acontecendo, você pode estar fazendo este cálculo no momento que instância a classe, por isso é feito somente uma única vez. Para corrigir teríamos que criar um método para realizar o cálculo sempre que necessário.

Se você está usando uma classe, não use variáveis globais, evite ao máximo, pois elas geram bagunça e inconsistências que fica difícil de encontrar depois.

Dicas:

--> Nome das variáveis em inglês é uma boa escolha sempre, mas não é obrigatório. 

--> Encurte de forma objetiva o nome das variáveis. 


O código fica mais limpo e objetivo


aqui esta o pastabin: https://pastebin.com/ZPJrnyZP




8. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

C B
Xuyzes

(usa Kali)

Enviado em 03/06/2022 - 12:59h


ctw6av escreveu:

Poste a classe toda no pastebin para podermos te ajudar melhor. Tenho uma suspeita do que pode estar acontecendo, você pode estar fazendo este cálculo no momento que instância a classe, por isso é feito somente uma única vez. Para corrigir teríamos que criar um método para realizar o cálculo sempre que necessário.

Se você está usando uma classe, não use variáveis globais, evite ao máximo, pois elas geram bagunça e inconsistências que fica difícil de encontrar depois.

Dicas:

--> Nome das variáveis em inglês é uma boa escolha sempre, mas não é obrigatório. 

--> Encurte de forma objetiva o nome das variáveis. 


O código fica mais limpo e objetivo



Olá amigo, conseguiu entender as class que postei no pastebin ?



9. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 03/06/2022 - 13:38h

Existe um design pattern conhecido como Singleton, não é a melhor solução mas vai te ajudar muito no não uso de variáveis globais. A solução para seu problema é:
somar ao valor atual o preço (pr) do produto (pp) multiplicado pela quantidade (qp) que ficaria assim:
pr += pp * pq 


No seu código seria equivalente a

valor += float(self.obter_preco) * float(self.obter_quantide)
qtdd += float(self.obter_quantide)

Troque também as linha que imprimem o resultado

self.ui.recebe_peso_total.setText(str(f"%s kg" % qtdd))
self.ui.recebe_valor_total.setText(str(f"R$: %s" % valor))




10. Re: Como corrigir a soma duplicata(cumulativa) em python

C B
Xuyzes

(usa Kali)

Enviado em 03/06/2022 - 13:53h

ctw6av escreveu:

Existe um design pattern conhecido como Singleton, não é a melhor solução mas vai te ajudar muito no não uso de variáveis globais. A solução para seu problema é:
somar ao valor atual o preço (pr) do produto (pp) multiplicado pela quantidade (qp) que ficaria assim:
pr += pp * pq 


No seu código seria equivalente a

valor += float(self.obter_preco) * float(self.obter_quantide)
qtdd += float(self.obter_quantide)

Troque também as linha que imprimem o resultado

self.ui.recebe_peso_total.setText(str(f"%s kg" % qtdd))
self.ui.recebe_valor_total.setText(str(f"R$: %s" % valor))



Nossa mano, funcinou mesmo... isso estava me matando seleco! muito obrigado amigo

voce chegou ver a função def clear ?
quando eu clico em limpar a tela, e insiro novamente um novo pedido, ele esta somando os itens antigos também


11. Re: Como corrigir a soma duplicata(cumulativa) em python [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 03/06/2022 - 14:02h


Xuyzes escreveu:

Nossa mano, funcinou meso... isso estava me matando seleco

voce chegou ver a função def clear ?
quando eu clico em limpar a tela, e insiro novamente um novo pedido, ele esta somando os itens antigos também


Que bom que funcionou. Na função clear, zere o valor da variável global "valor".

Não se esqueça de fechar o tópico e selecionar a resposta que mais te ajudou.



12. Re: Como corrigir a soma duplicata(cumulativa) em python

C B
Xuyzes

(usa Kali)

Enviado em 03/06/2022 - 15:22h

ctw6av escreveu:


Xuyzes escreveu:

Nossa mano, funcinou meso... isso estava me matando seleco

voce chegou ver a função def clear ?
quando eu clico em limpar a tela, e insiro novamente um novo pedido, ele esta somando os itens antigos também


Que bom que funcionou. Na função clear, zere o valor da variável global "valor".

Não se esqueça de fechar o tópico e selecionar a resposta que mais te ajudou.


sim funcionou, mas como consigo agora acessar essa variavel fora dessa função ? antes ele acessava pela variavel global(valor e qttd)

veja que aqui nesse arquivo, existe uma função que calcula o frete de acordo com o peso e valor total da nota fiscal:

Arquivo pastebin: https://pastebin.com/qtSPVvvG








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts