elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  sumar list1
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: sumar list1  (Leído 2,770 veces)
corlo

Desconectado Desconectado

Mensajes: 120


Ver Perfil
sumar list1
« en: 3 Diciembre 2021, 00:44 am »

Hola soy colro

necesito sumar el total contado y el total tarjeta de credito
 consigo sumar el total del list1
pongo el codigo

Código
  1.  
  2. Case 1  ' Leer fichero de facturación
  3.            FrmFile.Show 1
  4.            Dim h As Integer
  5.             Dim totalcontado As Integer
  6.                Dim totaltcredito As Integer
  7.                totalcontado = 0: totaltcredito = 0
  8.            If (Len(FrmFile.File) > 0) Then
  9.                If (LeerFacturacion(App.Path & "\" & FrmFile.File) = True) Then
  10.                    Call Activar(True)
  11.  
  12.                    For h = 0 To List1.ListCount - 1
  13.  
  14.                     If reg2.MetodoDePago = "0" Then
  15.                     totalcontado = totalcontado + Val(Split(List1.List(h), vbTab)(6))
  16.                    End If
  17.                    If reg2.MetodoDePago = "1" Then
  18.                    totaltcredito = totaltcredito + Val(Split(List1.List(h), vbTab)(6))
  19.                    End If
  20.                    Next h
  21.                    txttotal.Text = Format(totalcontado, "#,##0.00")
  22.                    Txttotal1.Text = Format(totaltcredito, "#,##0.00")
  23.  
  24.                Else
  25.                    Call Activar(False)
  26.                End If
  27.            End If
  28.  
  29.  
  30.  






Gracias


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: sumar list1
« Respuesta #1 en: 4 Diciembre 2021, 16:49 pm »

Hay algunas discrepancias...

Primero los valores de precio y suma total admiten decimales, luego declarar a 'TotalContado' y 'TotalCredito' de tipo integer, limita la precisión del cálculo, es decir legalmente no se admitiría y comercialmente despidirían al programador...  :silbar:

Luego, estás sumando en base a un registro que has leído para una determinada factura (reg2), pero en realidad cada factura tiene su propio indicador. Es decir estás aplicando a toda la facturación del fichero el criterio de pago de un único registro, luego si ese registro fue 'pagado' al contado todo el listbox, sumará sus valores como si fueran pagos al contado (y pagos con tarjeta no sumará nada, luego 0), y viceversa..., si ese registro fuera pagado con tarjeta de crédito, todo el listado se suma como si fuera pagado con tarjeta de crédito (luego el pago al contado será 0).

Puedes elegir entre leer e ir sumando del fichero o con lo que aparece en el listado.
Si tiras del listado, debes leer cada línea, hacer el split, pero no a un string, mejor volcarlo a un registro...  

Nota que el orden de los campos, debe coincidir con el orden en que fueron serializados... para recordarlo, pongo aquí dicha función (si la modificaste,  lógicamente debes equipararla (la función FromString) con los cambios que hiciste).
Código
  1. Private Function SerializarRegistro(ByRef Registro As RegCompra, ByVal Separador As String) As String
  2.    With Registro
  3.        SerializarRegistro = CStr(.NumTicket) & Separador & .Producto & Separador & CStr(.Cantidad) & _
  4.                            Separador & CStr(.PrecioUnidad) & Separador & CStr(.SubTotal) & _
  5.                            Separador & GetMetodoPago(.MetodoDePago) & Separador & CStr(.FechaCompra)
  6.    End With
  7. End Function
  8.  
  9. Private function FromString(byRef Linea As String, optional ByRef Separador as String = vbTab) As RegCompra
  10.    dim campos() As string
  11.  
  12.    campos = Split(Linea, Separador)
  13.    With FromString
  14.        .NumTicket = CInt(campos(0))
  15.        .Producto = campos(1)
  16.        .Cantidad = CInt(campos(2))
  17.        .PrecioUnidad = CSng(campos(3))
  18.        .SubTotal = CSng(campos(4))
  19.        .MetodoDePago = SetMetodoPago(campos(5))  ' función que se añade debajo... ' CByte(campos(5))
  20.        .FechaCompra = CDate(campos(6))
  21.    end with
  22. end Function
  23.  

Igual que teníamos la función 'getMetodoPago, que traducía '0' ó '1' a un texto más descriptivo, ahora necesitamos la función inversa:
Código
  1. Private Function GetMetodoPago(ByVal Metodo As MetodosDePago) As String
  2.    If (Metodo = PAGO_AL_CONTRADO) Then
  3.        GetMetodoPago = "Contado     "
  4.    Else
  5.        GetMetodoPago = "T. Credito  "
  6.    End If
  7. End Function
  8.  
  9. Private Function SetMetodoPago(ByRef Metodo As String) As MetodosDePago
  10.    If (LCase$(Trim$(Metodo)) = "contado") Then
  11.        SetMetodoPago = PAGO_AL_CONTRADO
  12.    Else
  13.        SetMetodoPago = PAGO_CON_TCREDITO
  14.    End If
  15. End Function
  16.  
Lógicamente si dejaste como texto "0" ó "1", entonces bastaría una conversión:
 .MetodoDePago  = cbyte(campos(5))
en vez de la llamada a esta función

Ahora la suma debe modificar la lógica...
Reg2 es obtenido con cada línea, luego el valor 'metododepago' es actualizado justo con cada factura y por tanto se suma al total que procede...
Código
  1.    Dim totalcontado As Single  ' <-------- no olvides cambiarlo.
  2.    Dim totaltcredito As Single
  3. ' ...
  4. ' ...
  5. ' ...
  6.  
  7.            For h = 0 To List1.ListCount - 1
  8.                reg2 = FromString(List1.List(h), vbTab)
  9.  
  10.                If (reg2.MetodoDePago = PAGO_AL_CONTRADO) Then ' valor 0
  11.                    totalcontado = totalcontado + reg2.SubTotal    'Val(Split(List1.List(h), vbTab)(6))
  12.                Else 'If reg2.MetodoDePago = "1"  Then
  13.                    totaltcredito = (totaltcredito + reg2.SubTotal)    'Val(Split(List1.List(h), vbTab)(6))
  14.                End If
  15.            Next
  16. '...
  17.  

Por último, nota que en función de la complejidad de cada línea puede ser preferible leer del fichero de nuevo cada registro, o del listado dando formato a cada campo... ...como operabas desde el listado he modificado desde ahí.

Si un fichero fuera enormemente grande, lo más probable es que un listado contuviera solo una cantidad predefinida máxima de facturas (no todas las que un fichero tuviere, imagina 100.000 ó 1 millón), por lo que uno debe decidir si lo que suma es el total del fichero o solo el total del contenido en el listado. Piensa además que un listado puede estar filtrado (no solo por la cantidad de líneas que deba contener), sino por cosas como un rango de fecha, por ejemplo 'todas las compras de diciembre de 2021'... en fin es una lógica que hay que tener presente, no siempre sumar todo lo que el fichero contiene, si no sujeto a determinados criterios de filtro.


« Última modificación: 4 Diciembre 2021, 19:41 pm por Serapis » En línea

corlo

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: sumar list1
« Respuesta #2 en: 4 Diciembre 2021, 18:51 pm »

Hola Serapis


lo adaptado y funciona perfectamente

ahora si que consigo sumar el contado y el tageta de credito

tema solucionado Muchas Gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[DUDA] en List1.AddItem « 1 2 »
Programación Visual Basic
NsTeam 14 5,560 Último mensaje 26 Agosto 2009, 02:02 am
por h0oke
sumar datos list1
Programación Visual Basic
corlo 6 2,910 Último mensaje 17 Enero 2016, 16:38 pm
por corlo
pasar informacion de list1 a list2
Programación Visual Basic
corlo 2 3,320 Último mensaje 27 Febrero 2019, 20:27 pm
por corlo
modificar list1
Programación Visual Basic
corlo 2 1,869 Último mensaje 9 Marzo 2020, 20:30 pm
por corlo
imprimir list1 « 1 2 3 »
Programación Visual Basic
corlo 20 6,781 Último mensaje 8 Octubre 2020, 20:13 pm
por corlo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines