Principales respuestas
Hacer una clase

Pregunta
-
Quiero crear una clase póliza que tenga una estructura maestro detalle como sigue
Maestro: Campo ejemplo
Folio 00001
Tipo dia
Concepto Venta
Fecha 25/11/2020
Detalle
Folio Tipo Cuenta Nombre_cuenta Debe Haber
0001 dia 102 Bancos 116 0
0002 dia 201 IVA Cobrado 16
0003 dia 401 Ventas 100
En el caso del detalle estoy manejando 3 registros, pero pueden ser 10. No se si exista una estructura que pueda declarar en una clase para poder asignar los valores del detalle en ella, como tipo factura.
Respuestas
-
Bien, pues entonces si quieres que la clase Poliza contenga una lista de movimientos, basta con que añadas una nueva propiedad dentro de Poliza como te indico a continuación. La clase movimiento está bien como está, no hace falta que cambies nada:
Public Class Poliza Public folio As String Public tipo As String Public fecha As Date Public concepto As String Public Property Movimientos As List(Of Movimiento) Sub New(folio As String, tipo As String, fecha As Date, concepto As String, movimientos As List(Of Movimiento) Me.folio = folio Me.tipo = tipo Me.fecha = fecha Me.concepto = concepto Me.Movimientos = movimientos End Sub End Class
Algunas observaciones:
- Te he declarado la lista de movimientos como un List, pero también podría ser otro tipo de colección tal como un array. o incluso un IEnumerable si lo vas a inicializar externamente.
- Te he puesto los movimientos en el constructor, pero esto no es obligatorio. Si no los vas a inicializar en el momento de construir la clase, sino que quieres pasarlos más tarde, también es perfectamente válido.
- Estás declarando campos públicos. Las "buenas prácticas" de programación recomiendan que lo que sea público no sea un campo sino una propiedad. No es que no funcione con campos, es simplemente una cuestión de mantenibilidad y normas de estilo.
- Marcado como respuesta hector barajas martes, 24 de noviembre de 2020 22:01
Todas las respuestas
-
Para esto se suelen usar dos clases. Si no deseas tenerlas por separado, puedes anidar una dentro de la otra (o por lo menos, se pueden anidar en las versiones moernas de C#, no sé si en versiones recientes de VB han añadido esta opción al igual que se hizo en C# -- si no fuera así, entonces tendrás que declarar las dos clases por separado, sin anidarlas).
La clase Factura contendría los datos principales así como una colección de la clase que sirve para contener una línea de detalle, por ejemplo, List(Of Detalle).
- Editado Alberto PoblacionMVP miércoles, 18 de noviembre de 2020 7:22
- Propuesto como respuesta Óscar NavarroModerator miércoles, 18 de noviembre de 2020 17:08
-
Hola
Alguna actualización sobre tu consulta?
Saludos
--------------------------------------------------------------------------------
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar MSDNFSF@microsoft.com.
-
-
-
Esta seria la clase poliza
Public Class Poliza
Public folio As String
Public tipo As String
Public fecha As Date
Public concepto As String
Sub New(folio As String, tipo As String, fecha As Date, concepto As String)
Me.folio = folio
Me.tipo = tipo
Me.fecha = fecha
Me.concepto = concepto
End Sub
End ClassEsta seria la clase movimiento
Public Class movimiento
Private folio As String
Private tipo As String
Private cuenta As String
Private subcuenta As String
Private auxiliar As String
Private nombre As String
Private debe As Double
Private haber As Double
'Crea una nueva clase movimiento asignando valores
Sub New(folio As String, tipo As String, cuenta As String, subcuenta As String, auxiliar As String, nombre As String, debe As Double, haber As Double)
Me.folio = folio
Me.tipo = tipo
Me.cuenta = cuenta
Me.subcuenta = subcuenta
Me.auxiliar = auxiliar
Me.nombre = nombre
Me.debe = debe
Me.haber = haber
End Sub
End Class -
Bien, pues entonces si quieres que la clase Poliza contenga una lista de movimientos, basta con que añadas una nueva propiedad dentro de Poliza como te indico a continuación. La clase movimiento está bien como está, no hace falta que cambies nada:
Public Class Poliza Public folio As String Public tipo As String Public fecha As Date Public concepto As String Public Property Movimientos As List(Of Movimiento) Sub New(folio As String, tipo As String, fecha As Date, concepto As String, movimientos As List(Of Movimiento) Me.folio = folio Me.tipo = tipo Me.fecha = fecha Me.concepto = concepto Me.Movimientos = movimientos End Sub End Class
Algunas observaciones:
- Te he declarado la lista de movimientos como un List, pero también podría ser otro tipo de colección tal como un array. o incluso un IEnumerable si lo vas a inicializar externamente.
- Te he puesto los movimientos en el constructor, pero esto no es obligatorio. Si no los vas a inicializar en el momento de construir la clase, sino que quieres pasarlos más tarde, también es perfectamente válido.
- Estás declarando campos públicos. Las "buenas prácticas" de programación recomiendan que lo que sea público no sea un campo sino una propiedad. No es que no funcione con campos, es simplemente una cuestión de mantenibilidad y normas de estilo.
- Marcado como respuesta hector barajas martes, 24 de noviembre de 2020 22:01
-
-
-
No entiendo nada. ¿A qué te refieres? Es una clase normal y corriente, solo hace falta instanciarla con New y asignar los valores a las propiedades, igual que cualquier otra clase. ¿Cómo rellenas las clases normalmente? Pon un ejemplo y lo "arreglamos" para que use esta clase.
-