Autor
|
Tema: Guardar list2 y leer list1 (Leído 18,037 veces)
|
corlo
Desconectado
Mensajes: 119
|
Hola Serapis la idea es buena pero en buscar me sale error Compile error ByRef argument type mismatch en la variable Reg ' Lee los productos comprados que forman dicho lote y los muestra en el listado de productos. Private Sub ComBuscar_Click() ' <---- al pulsar el botón dim id as integer if (NumRegsLotes>0) then ' If (LisLotes.ListCount > 0) Then ' si hay registros en la facturación... if (isnumeric(txtNumeroFactura.text)) then ' si el textbox tiene un número válido id = cint(txtNumeorFactura.text) ' el textbox es quien indica ahora el numero de factura if (id <= NumRegsLotes) then Call PosicionarRegLote(id +1) ' Call PosicionarRegLote(LisLotes.ListIndex + 1) ' allí se resta 1. Get #CanalLote, , RegX IdLote = RegX.IdPedido Call ListarCompraDelLote(RegX.Index, RegX.Cantidad) txtFactura.Text = RegCompraToString(Reg) exit sub end if end if End If ' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido. txtFactura.Text = "" call msgbox ("Número de factura no reconocido. Debe haber facturas y el número de factura ser mayor que 0 y menor que el número de registros actuales") End Sub
Gracias
|
|
|
En línea
|
|
|
|
Serapis
|
me sale error Compile error ByRef argument type mismatch en la variable Reg Ok... Si te fijas en el código, tenemos declarado RegX (a nivel de módulo), que se usa en la función, pero no 'Reg' (ni siquiera dentro a la función), es culpa del copy-paste que hice de la línea 14 (la tomé tal cual de otro código que te puse antes y la pegué ahí, sin hacer la adaptación pertienente)... ¿ves que pone ...(Reg)?. remplázalo por RegX, que está declarada a nivel de módulo. Aunque es un error fácil de reconocer... el propio error ya te da la pista "ByRef argument type mismatch en la variable Reg", la función lllamada exige una variable de un tipo determinado, ahí 'Reg' técnicamente es un variant (al no estar declarado). argument type -- mismatch = El tipo del parámetro pasado a la función no coincide con el esperado. Cuando tengas dudas con los errores, ve a la ayuda (que te ofrece) y te amplía los detalles de por qué se produce tal error (muy pocas veces (en VB6), está mal o imprecisamente explicado en la ayuda). p.d.: nota también que escribí mal el nombre del textbox: txtNum eorFactura (línea 8), en la línea anterior está bien escrito. Me suele ocurrir con relativa frecuencia con el teclado que al escribir muy rápido escriba una letra con una mano antes que la que toca con la otra mano...
|
|
« Última modificación: 12 Marzo 2022, 19:28 pm por Serapis »
|
En línea
|
|
|
|
corlo
Desconectado
Mensajes: 119
|
Hola Serapis He conseguido buscar con el texbox pero tiene que ir con el listado de listlotes si carga con listlotes busca si no carga no busca hay alguna manera de hacer la busqueda sin listlotes Private Sub Command1_Click() 'Buscar Dim Id As Integer If (NumRegsLotes > 0) Then ' If (LisLotes.ListCount > 0) Then ' si hay registros en la facturación... If (IsNumeric(txtNumeroFactura.Text)) Then ' si el textbox tiene un número válido Id = CInt(txtNumeroFactura.Text) ' el textbox es quien indica ahora el numero de factura If (Id <= NumRegsLotes) Then Call PosicionarRegLote(Id) ' Call PosicionarRegLote(LisLotes.ListIndex + 1) ' allí se resta 1. Get #CanalLote, , RegX IdLote = RegX.IdPedido Call ListarCompraDelLote(RegX.Index, RegX.Cantidad) 'txtFactura.Text = RegCompraToString(Reg) Exit Sub End If End If End If ' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido. 'txtFactura.Text = "" Call MsgBox("Número de factura no reconocido. Debe haber facturas y el número de factura ser mayor que 0 y menor que el número de registros actuales") End Sub ' Abre y carga el fichero de facturación. También abre el fichero de productos comprados (solo carga los productos asociados al primer lote en el listado). ' NOTA: No establecer la propiedad SORTED a TRUE, en los listados, ya que entonces el añadido sería ordenado y no al final. Private Function ListarFacturacion(ByRef Ruta1 As String, ByRef Ruta2 As String) As Boolean '... Dim k As Integer Call CerrarFacturacion If ((Abrir(Ruta1, CanalLote) = True) And (Abrir(Ruta2, CanalProducto) = True)) Then Get #CanalLote, 1, NumRegsLotes Get #CanalLote, , AutoIncLote Get #CanalProducto, 1, NumRegsProds Get #CanalProducto, , AutoIncProducto If (NumRegsLotes > 0) Then With LisLotes .Clear Call PosicionarRegLote(1) ' allí se resta 1 For k = 0 To NumRegsLotes - 1 Get #CanalLote, , RegX Call .AddItem(RegCompraToString(RegX)) .ItemData(k) = RegX.IdPedido If (RegX.MetodoDePago = MetodosDePago.PAGO_AL_CONTADO) Then TotalContado = (TotalContado + RegX.Total) Else TotalCredito = (TotalCredito + RegX.Total) End If Next Call ShowTotales ' Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox... .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox... End With End If mnuLotes(0).Enabled = True ListarFacturacion = True End If ' Remplazar/eliminar las líneas aqui comentadas: If (NumRegsLotes > 0) Then 'With LisLotes ' .Clear Call PosicionarRegLote(1) ' allí se resta 1 For k = 0 To NumRegsLotes - 1 Get #CanalLote, , RegX ' Call .AddItem(RegCompraToString(RegX)) ' .ItemData(k) = RegX.IdPedido If (RegX.MetodoDePago = MetodosDePago.PAGO_AL_CONTADO) Then TotalContado = (TotalContado + RegX.Total) Else TotalCredito = (TotalCredito + RegX.Total) End If Next Call ShowTotales ' <---- Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox... ' .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox... 'End With ' Y añadir estas dos en esta posición: <---- Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo txtNumeroFactura.Text = "1" Call Command1_Click End If End Function ' Guarda el registro del lote. Cada lote puede componerse de varios registros de artículso comprados, Friend Sub GuardarCompra(ByRef Reg As RegLote, ByVal Productos As Integer) NumRegsLotes = (NumRegsLotes + 1) AutoIncLote = (AutoIncLote + 1) With Reg .IdPedido = AutoIncLote ' Completa los datos del registro que (mejor) procede hacer aquí. .Cantidad = Productos .FechaCompra = DateTime.Now .Index = (NumRegsProds - .Cantidad) If (.MetodoDePago = PAGO_AL_CONTADO) Then TotalContado = (TotalContado + .Total) Else TotalCredito = (TotalCredito + .Total) End If Call ShowTotales ' Actualiza los valores totales. End With Call PosicionarRegLote(NumRegsLotes) ' Posiciona el cursor de escritura al final del fichero. Put #CanalLote, , Reg ' Guarda el registro. 'With LisLotes ' Call .AddItem(RegCompraToString(Reg)) ' También lo añade al listado. '.ItemData(.ListCount - 1) = AutoIncLote ' End With txtNumeroFactura.Text = CStr(Reg.IdPedido) txtFactura.Text = RegCompraToString(Reg) Call Command1_Click Put #CanalLote, 1, NumRegsLotes ' Guarda la cantidad de registros Put #CanalLote, , AutoIncLote ' Guarda el valor de autoincrmeento (es un valor único). Put #CanalProducto, 1, NumRegsProds Put #CanalProducto, , AutoIncProducto ' Guarda el valor de autoincrmeento (es un valor único). 'LisLotes.ListIndex = (LisLotes.ListCount - 1) ' Fuerza a listar los productos comprados en este lote.
gracias
|
|
|
En línea
|
|
|
|
Serapis
|
Guau... de verdad no eres capaz de seguir las instrucciones (que en realidad ni siquiera tendría que explicarte, pues es demasiado sencillo)?. El códigos que te he proporcionado, incluye comentarios (dentro del código): que ponen lo que hay que hacer: 'Remplazar o eliminar ---x--- (líneas de código que he comentado, precedido por el caracter de comentario) '... 'Por esto esto otro ---y---
Donde algo como: '... Representa código previo, intermedio o final que (pudiera haber y que) no tocamos... Es decir, indica que busques las líneas que te haya indicado, que las borres y que lo remplaza las líneas que puse, que también se señala y que el resto de código en la función no se altera. Es decir... ¿No hay forma de indicarte lo que debes hacer, diciendo simplemente remplaza las líneas que te indico por las otras que también te indico?, ¿debo darte todo el código listo, solo para copiar y pegar?. Tómate la molestia de leerlo, entre el código he añadido los comentarios de qué debe ser remplazado/eliminado/comentado y qué lo remplaza.
|
|
« Última modificación: 12 Marzo 2022, 21:08 pm por Serapis »
|
En línea
|
|
|
|
corlo
Desconectado
Mensajes: 119
|
Hola Serapis
ya lo he corregido funciona correctamente
me habia puesto un poco nervioso, pero depues con mas tranquilidad lo he podido solucionar
muchas gracias
|
|
|
En línea
|
|
|
|
corlo
Desconectado
Mensajes: 119
|
Hola Serapis
se que soy muy pesado en esto de la programacion ahora son detalles
ahora me faltaria hacer la suma una vez que lees la compra, hacer el total de la suma
gracias
|
|
|
En línea
|
|
|
|
Serapis
|
ahora me faltaria hacer la suma una vez que lees la compra, hacer el total de la suma
La suma ya está hecha, se guardó en el registor de compra. ' Lee los productos comprados que forman dicho lote y los muestra en el listado de productos. Private Sub Command1_Click() ' <---- al pulsar el botón dim id as integer if (NumRegsLotes>0) then ' If (LisLotes.ListCount > 0) Then ' si hay registros en la facturacion... if (isnumeric(txtNumeroFactura.text)) then ' si el textbox tiene un numero valido id = cint(txtNumeorFactura.text) ' el textbox es quien indica ahora el numero de factura if (id <= NumRegsLotes) then Call PosicionarRegLote(id +1) ' Call PosicionarRegLote(LisLotes.ListIndex + 1) ' alli se resta 1. Get #CanalLote, , RegX ' <------------ aqui se lee el registro IdLote = RegX.IdPedido Call ListarCompraDelLote(RegX.Index, RegX.Cantidad) txtFactura.Text = RegCompraToString(Regx) '<----------------- y aqui se lista el registro del lote ' y si no: txtTotalFactura.Text = cstr(regx.total) exit sub end if end if End If ' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido. txtFactura.Text = "" call msgbox ("Número de factura no reconocido. Debe haber facturas y el número de factura ser mayor que 0 y menor que el número de registros actuales") End Sub
La línea 10, lee el registro de la compra. La línea 12, lista los productos comprados... no hace falta sumarlos allí, ya se hizo al pagar la factura cuando se compró, y se guardó en el registro que se acaba de leer en la línea 10. La línea 13, muestra en el textbox, el contenido de dicho registro... método de pago, fecha y total entre otros. Si no quieres usar la línea 13 (parece que la ignoras y no entiendo por qué), entonces añade un textbox (txtTotalFactura) para contener el total ... línea 15 (esta línea la acabao de poner, es opcional, es decir o usas la 13 o la 15. Con todo creo más útil usar la línea 13... para que se vea como te dibujé la interfaz en la siguiente imagen (a la izquierda abajo del todo): El texto de la columna 'subtotal' que pone '51,273' (ya expliqué que ese total no es el de los productos de arriba, es una 'composición de otra imagen'. Por cierto mejor que 'subtotal ahí debiera poner Total.
|
|
|
En línea
|
|
|
|
corlo
Desconectado
Mensajes: 119
|
Hola Serapis ahora si que suma txtTotalFactura.Text = cstr(regx.total)
muchas gracias
|
|
|
En línea
|
|
|
|
corlo
Desconectado
Mensajes: 119
|
Hola Serapis
Estoy intentando de hacer crear almacen nuevo y leer almacen del menu principal lo he probado de hacerlo con el formulario frmfile pero no me lo hace
si no es asin no se como hacerlo
gracias
|
|
|
En línea
|
|
|
|
corlo
Desconectado
Mensajes: 119
|
Ahora crea el nuevo almacen, pero no logro que me lea el almacen Private Sub mnualmacen_Click(Index As Integer) 'Crear Nuevo Almacen Dim File As String Select Case Index Case 0 ' Nuevo Almacen File = InputBox("Elija el nombre del fichero para una nuevo Almacen (no debe existir).", "Nuevo Almacen", "Nuevo Almacen.dat") If (Len(File) > 0) Then File = AsegurarExtension(File, FILE_EXTENSION_FACTURA) If (CrearNuevaFacturacion(File) = True) Then Call Activar(True) Else Call Activar(False) End If Else Call MsgBox("Proceso de creación de nuevo Almacen abortado. No se proporcionó un nombre", vbInformation, "Nuevo Almacen") End If Case 1 ' Leer Nuevo Almacen Frmfile1.Show 1 If (Len(Frmfile1.File) > 0) Then If (LeerFacturacion(App.Path & "\" & Frmfile1.File) = True) Then Call Activar(True) Else Call Activar(False) End If End If End Select End Sub Private Function CrearNuevaFacturacion(ByRef NombreFile As String) As Boolean Dim Ruta As String If (Abierto = True) Then Call Cerrar(Canal) Ruta = (App.Path & "\" & NombreFile) If (Abrir(Ruta, Canal, True) = True) Then Call UpdateHeader(0, 0) CrearNuevaFacturacion = True Else MsgBox "Parece que el fichero que intenta abrir ya existe, elija otro nombre (o bien ocurrió un error)..." End If End Function Private Function LeerFacturacion(ByRef Ruta As String) As Boolean Dim k As Integer If (Abierto = True) Then Call Cerrar(Canal) If (Abrir(Ruta, Canal) = True) Then Get #Canal, 1, NumRegistros Get #Canal, , AutoIncLote Get #Canal, , AutoIncProducto If (NumRegistros > 0) Then With List1 .Clear For k = 1 To NumRegistros Get #Canal, , RegX Call .AddItem(RegCompraToString(RegX, CHAR_SEP)) Next ' Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox... .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox... End With End If LeerFacturacion = True End If End Function
el problema esta en esta linea Call .AddItem(RegCompraToString(RegX, CHAR_SEP)) error byref argument type mismatch en RegX gracias
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Leer, Guardar, Cargar .INI
.NET (C#, VB.NET, ASP)
|
SγиtαxEяяoя
|
7
|
5,685
|
26 Mayo 2013, 19:39 pm
por Eleкtro
|
|
|
problema leer y guardar datos..
Programación C/C++
|
adrian123321
|
2
|
2,692
|
29 Agosto 2013, 08:57 am
por do-while
|
|
|
Leer fichero y guardar en variables
Programación C/C++
|
Joaqqinn
|
6
|
5,073
|
13 Enero 2016, 23:43 pm
por Orubatosu
|
|
|
pasar informacion de list1 a list2
Programación Visual Basic
|
corlo
|
2
|
3,299
|
27 Febrero 2019, 20:27 pm
por corlo
|
|
|
leer informacion a list1
Programación Visual Basic
|
corlo
|
2
|
458
|
23 Agosto 2024, 22:06 pm
por corlo
|
|