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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


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

Desconectado Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #40 en: 12 Marzo 2022, 17:38 pm »

Hola Serapis

la idea es buena pero en buscar me sale error

Compile error

ByRef argument type mismatch

en la variable Reg

Código
  1.  
  2. ' Lee los productos comprados que forman dicho lote y los muestra en el listado de productos.
  3. Private Sub ComBuscar_Click() ' <---- al pulsar el botón
  4.    dim id as integer
  5.  
  6.    if (NumRegsLotes>0) then '  If (LisLotes.ListCount > 0) Then   ' si hay registros en la facturación...
  7.        if (isnumeric(txtNumeroFactura.text)) then    ' si el textbox tiene un número válido
  8.            id = cint(txtNumeorFactura.text)               ' el textbox es quien indica ahora el numero de factura
  9.            if (id <= NumRegsLotes) then
  10.                Call PosicionarRegLote(id +1)  ' Call PosicionarRegLote(LisLotes.ListIndex + 1)          ' allí se resta 1.
  11.                Get #CanalLote, , RegX
  12.                IdLote = RegX.IdPedido
  13.                Call ListarCompraDelLote(RegX.Index, RegX.Cantidad)
  14.                txtFactura.Text = RegCompraToString(Reg)
  15.                exit sub
  16.            end if
  17.        end if
  18.    End If
  19.  
  20.    ' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido.  
  21.    txtFactura.Text = ""
  22.    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")
  23. End Sub
  24.  
  25.  
  26.  




Gracias


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #41 en: 12 Marzo 2022, 19:22 pm »

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: txtNumeorFactura (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 Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #42 en: 12 Marzo 2022, 19:38 pm »

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


Código
  1.  
  2. Private Sub Command1_Click()
  3. 'Buscar
  4. Dim Id As Integer
  5.  
  6.    If (NumRegsLotes > 0) Then '  If (LisLotes.ListCount > 0) Then   ' si hay registros en la facturación...
  7.        If (IsNumeric(txtNumeroFactura.Text)) Then    ' si el textbox tiene un número válido
  8.            Id = CInt(txtNumeroFactura.Text)               ' el textbox es quien indica ahora el numero de factura
  9.            If (Id <= NumRegsLotes) Then
  10.                Call PosicionarRegLote(Id)  ' Call PosicionarRegLote(LisLotes.ListIndex + 1)          ' allí se resta 1.
  11.                Get #CanalLote, , RegX
  12.                IdLote = RegX.IdPedido
  13.                Call ListarCompraDelLote(RegX.Index, RegX.Cantidad)
  14.                'txtFactura.Text = RegCompraToString(Reg)
  15.                Exit Sub
  16.            End If
  17.        End If
  18.    End If
  19.  
  20.    ' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido.
  21.    'txtFactura.Text = ""
  22.    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")
  23. End Sub
  24.  
  25.  
  26.  
  27.  
  28.  
  29. ' 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).
  30. ' NOTA: No establecer la propiedad SORTED a TRUE, en los listados, ya que entonces el añadido sería ordenado y no al final.
  31. Private Function ListarFacturacion(ByRef Ruta1 As String, ByRef Ruta2 As String) As Boolean
  32.  '...
  33.    Dim k As Integer
  34.  
  35.    Call CerrarFacturacion
  36.  
  37.    If ((Abrir(Ruta1, CanalLote) = True) And (Abrir(Ruta2, CanalProducto) = True)) Then
  38.        Get #CanalLote, 1, NumRegsLotes
  39.        Get #CanalLote, , AutoIncLote
  40.  
  41.        Get #CanalProducto, 1, NumRegsProds
  42.        Get #CanalProducto, , AutoIncProducto
  43.  
  44.        If (NumRegsLotes > 0) Then
  45.            With LisLotes
  46.                .Clear
  47.  
  48.                Call PosicionarRegLote(1)       ' allí se resta 1
  49.                For k = 0 To NumRegsLotes - 1
  50.                    Get #CanalLote, , RegX
  51.                    Call .AddItem(RegCompraToString(RegX))
  52.                    .ItemData(k) = RegX.IdPedido
  53.  
  54.                    If (RegX.MetodoDePago = MetodosDePago.PAGO_AL_CONTADO) Then
  55.                        TotalContado = (TotalContado + RegX.Total)
  56.                    Else
  57.                        TotalCredito = (TotalCredito + RegX.Total)
  58.                    End If
  59.                Next
  60.  
  61.                Call ShowTotales
  62.  
  63.                ' Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox...
  64.                .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox...
  65.            End With
  66.        End If
  67.  
  68.        mnuLotes(0).Enabled = True
  69.        ListarFacturacion = True
  70.    End If
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.    ' Remplazar/eliminar las líneas aqui comentadas:
  78.    If (NumRegsLotes > 0) Then
  79.            'With LisLotes
  80.             '   .Clear
  81.  
  82.                Call PosicionarRegLote(1)       ' allí se resta 1
  83.                For k = 0 To NumRegsLotes - 1
  84.                    Get #CanalLote, , RegX
  85.             '       Call .AddItem(RegCompraToString(RegX))
  86.              '      .ItemData(k) = RegX.IdPedido
  87.  
  88.                    If (RegX.MetodoDePago = MetodosDePago.PAGO_AL_CONTADO) Then
  89.                        TotalContado = (TotalContado + RegX.Total)
  90.                    Else
  91.                        TotalCredito = (TotalCredito + RegX.Total)
  92.                    End If
  93.                Next
  94.  
  95.                Call ShowTotales
  96.  
  97.                ' <---- Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox...
  98.             '   .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox...
  99.            'End With
  100.  
  101.    ' Y añadir estas dos en esta posición:  <---- Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo
  102.             txtNumeroFactura.Text = "1"
  103.             Call Command1_Click
  104.   End If
  105. End Function
  106.  
  107.  
  108. ' Guarda el registro del lote. Cada lote puede componerse de varios registros de artículso comprados,
  109. Friend Sub GuardarCompra(ByRef Reg As RegLote, ByVal Productos As Integer)
  110.    NumRegsLotes = (NumRegsLotes + 1)
  111.    AutoIncLote = (AutoIncLote + 1)
  112.  
  113.    With Reg
  114.        .IdPedido = AutoIncLote                             ' Completa los datos del registro que (mejor) procede hacer aquí.
  115.        .Cantidad = Productos
  116.        .FechaCompra = DateTime.Now
  117.        .Index = (NumRegsProds - .Cantidad)
  118.  
  119.        If (.MetodoDePago = PAGO_AL_CONTADO) Then
  120.            TotalContado = (TotalContado + .Total)
  121.        Else
  122.            TotalCredito = (TotalCredito + .Total)
  123.        End If
  124.        Call ShowTotales                                    ' Actualiza los valores totales.
  125.    End With
  126.  
  127.    Call PosicionarRegLote(NumRegsLotes)                    ' Posiciona el cursor de escritura al final del fichero.
  128.    Put #CanalLote, , Reg                                   ' Guarda el registro.
  129.    'With LisLotes
  130.       ' Call .AddItem(RegCompraToString(Reg))               ' También lo añade al listado.
  131.        '.ItemData(.ListCount - 1) = AutoIncLote
  132.   ' End With
  133.  
  134.    txtNumeroFactura.Text = CStr(Reg.IdPedido)
  135.     txtFactura.Text = RegCompraToString(Reg)
  136.     Call Command1_Click
  137.  
  138.  
  139.    Put #CanalLote, 1, NumRegsLotes                         ' Guarda la cantidad de registros
  140.    Put #CanalLote, , AutoIncLote                           ' Guarda el valor de autoincrmeento (es un valor único).
  141.  
  142.    Put #CanalProducto, 1, NumRegsProds
  143.    Put #CanalProducto, , AutoIncProducto                   ' Guarda el valor de autoincrmeento (es un valor único).
  144.  
  145.   'LisLotes.ListIndex = (LisLotes.ListCount - 1)           ' Fuerza a listar los productos comprados en este lote.
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  






gracias


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #43 en: 12 Marzo 2022, 21:03 pm »

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:

Código
  1. 'Remplazar o eliminar ---x--- (líneas de código que he comentado, precedido por el caracter de comentario)
  2. '...
  3. 'Por esto esto otro ---y---
  4.  

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 Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #44 en: 12 Marzo 2022, 22:03 pm »

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 Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #45 en: 14 Marzo 2022, 16:18 pm »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #46 en: 14 Marzo 2022, 22:49 pm »


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.


Código
  1. ' Lee los productos comprados que forman dicho lote y los muestra en el listado de productos.
  2. Private Sub Command1_Click() ' <---- al pulsar el botón
  3.    dim id as integer
  4.  
  5.    if (NumRegsLotes>0) then '  If (LisLotes.ListCount > 0) Then   ' si hay registros en la facturacion...
  6.        if (isnumeric(txtNumeroFactura.text)) then    ' si el textbox tiene un numero valido
  7.            id = cint(txtNumeorFactura.text)               ' el textbox es quien indica ahora el numero de factura
  8.            if (id <= NumRegsLotes) then
  9.                Call PosicionarRegLote(id +1)  ' Call PosicionarRegLote(LisLotes.ListIndex + 1)          ' alli se resta 1.
  10.                Get #CanalLote, , RegX     ' <------------ aqui se lee el registro
  11.                IdLote = RegX.IdPedido
  12.                Call ListarCompraDelLote(RegX.Index, RegX.Cantidad)
  13.                txtFactura.Text = RegCompraToString(Regx)   '<----------------- y aqui se lista el registro del lote
  14.               ' y si no:
  15.                txtTotalFactura.Text = cstr(regx.total)
  16.                exit sub
  17.            end if
  18.        end if
  19.    End If
  20.  
  21.    ' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido.  
  22.    txtFactura.Text = ""
  23.    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")
  24. 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 Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #47 en: 14 Marzo 2022, 23:13 pm »

Hola Serapis

ahora si que suma

Código
  1.  
  2. txtTotalFactura.Text = cstr(regx.total)
  3.  
  4.  


muchas gracias
En línea

corlo

Desconectado Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #48 en: 22 Abril 2022, 19:05 pm »

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 Desconectado

Mensajes: 98


Ver Perfil
Re: Guardar list2 y leer list1
« Respuesta #49 en: 1 Mayo 2022, 14:18 pm »

Ahora crea el nuevo almacen, pero no logro que me lea el almacen


Código
  1.  
  2. Private Sub mnualmacen_Click(Index As Integer)
  3. 'Crear Nuevo Almacen
  4. Dim File As String
  5.  
  6.    Select Case Index
  7.        Case 0  ' Nuevo Almacen
  8.             File = InputBox("Elija el nombre del fichero para una nuevo Almacen (no debe existir).", "Nuevo Almacen", "Nuevo Almacen.dat")
  9.            If (Len(File) > 0) Then
  10.                File = AsegurarExtension(File, FILE_EXTENSION_FACTURA)
  11.  
  12.                If (CrearNuevaFacturacion(File) = True) Then
  13.                    Call Activar(True)
  14.  
  15.                Else
  16.                    Call Activar(False)
  17.                End If
  18.            Else
  19.                Call MsgBox("Proceso de creación de nuevo Almacen abortado. No se proporcionó un nombre", vbInformation, "Nuevo Almacen")
  20.            End If
  21.        Case 1  ' Leer Nuevo Almacen
  22.            Frmfile1.Show 1
  23.            If (Len(Frmfile1.File) > 0) Then
  24.                If (LeerFacturacion(App.Path & "\" & Frmfile1.File) = True) Then
  25.                    Call Activar(True)
  26.                Else
  27.                    Call Activar(False)
  28.                End If
  29.            End If
  30.  
  31.    End Select
  32. End Sub
  33.  
  34.  
  35.  
  36. Private Function CrearNuevaFacturacion(ByRef NombreFile As String) As Boolean
  37. Dim Ruta As String
  38.  
  39.    If (Abierto = True) Then Call Cerrar(Canal)
  40.  
  41.    Ruta = (App.Path & "\" & NombreFile)
  42.    If (Abrir(Ruta, Canal, True) = True) Then
  43.        Call UpdateHeader(0, 0)
  44.        CrearNuevaFacturacion = True
  45.    Else
  46.        MsgBox "Parece que el fichero que intenta abrir ya existe, elija otro nombre (o bien ocurrió un error)..."
  47.    End If
  48. End Function
  49.  
  50.  
  51. Private Function LeerFacturacion(ByRef Ruta As String) As Boolean
  52.   Dim k As Integer
  53.  
  54.    If (Abierto = True) Then Call Cerrar(Canal)
  55.  
  56.    If (Abrir(Ruta, Canal) = True) Then
  57.        Get #Canal, 1, NumRegistros
  58.        Get #Canal, , AutoIncLote
  59.        Get #Canal, , AutoIncProducto
  60.  
  61.        If (NumRegistros > 0) Then
  62.            With List1
  63.                .Clear
  64.                For k = 1 To NumRegistros
  65.                    Get #Canal, , RegX
  66.                    Call .AddItem(RegCompraToString(RegX, CHAR_SEP))
  67.                Next
  68.  
  69.                ' Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox...
  70.                .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox...
  71.            End With
  72.        End If
  73.  
  74.        LeerFacturacion = True
  75.    End If
  76. End Function
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  




el problema esta en esta linea


Call .AddItem(RegCompraToString(RegX, CHAR_SEP))



error byref argument type mismatch en RegX

gracias




En línea

Páginas: 1 2 3 4 [5] 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer, Guardar, Cargar .INI
.NET (C#, VB.NET, ASP)
SγиtαxEяяoя 7 5,340 Último mensaje 26 Mayo 2013, 19:39 pm
por Eleкtro
problema leer y guardar datos..
Programación C/C++
adrian123321 2 2,459 Último mensaje 29 Agosto 2013, 08:57 am
por do-while
guardar y leer objetos en archivos binarios
Java
victor garay 1 3,692 Último mensaje 17 Abril 2015, 06:51 am
por Usuario Invitado
Leer fichero y guardar en variables
Programación C/C++
Joaqqinn 6 4,739 Último mensaje 13 Enero 2016, 23:43 pm
por Orubatosu
pasar informacion de list1 a list2
Programación Visual Basic
corlo 2 3,022 Último mensaje 27 Febrero 2019, 20:27 pm
por corlo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines