Visual Basic.NET - Como guardar el contenido de un ticket en una base de datos?

 
Vista:
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 26/06/2019 19:38:18
Hola foro!!

Actualmente estoy tratando de guadar los contenidos (texto) de un ticket de compra a una base de datos (SQLite), El ticket se ve como se muestra en la imagen:(Y no tengo problemas para imprimirlo).

Ooops!!! parece que no sirve el adjuntador de imagenes!!!

Bueno... tengo 2 tablas creadas en mi BD (base de datos) y son las siguientes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE "Ticket" (
"TicketId"	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"Header"	TEXT,
"Footer"	TEXT,
"CreatedDate"	TEXT
);
 
 
CREATE TABLE "TicketContents" (
"TicketContentId"	INTEGER PRIMARY KEY AUTOINCREMENT,
"TicketId"	INTEGER,
"Quantity"	INTEGER,
"Description"	TEXT,
"Price"	REAL,
FOREIGN KEY("TicketId") REFERENCES "Ticket"("TicketId")
);

He creado la relación de dependecia entre las 2 tablas con una llave foranea en la tabla (hija).

El problema es que para guardar todos los datos del ticket, creo que se tiene que usar un DataSet y crear una relación "Uno a muchos" para guardar la lista de los productos que aparecen en el ticket en una sola fila en la tabla (hija: TicketContents). De esa manera se puedrian guardar en la tabla (Padre: Ticket) despues poder recuperar esos datos y poder re-imprinir el ticket.

El siguiente código es el que se supone debería guardar los datos del ticket en la BD, y si lo hace pero, no de la manera que se requiere.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Sub Save_to_tickets_table()
        Dim Conection_ As SQLiteConnection = New SQLiteConnection("Data Source=C:\SystemWin\DB2\Owner.db;Version=3;")
        If (Conection_.State = ConnectionState.Closed) Then Conection_.Open()
 
        Dim add_1 As SQLiteCommand = New SQLiteCommand("INSERT INTO Ticket VALUES (?, ?, ?, ?)", Conection_)
        add_1.Parameters.Add("@TicketId", Nothing)
        add_1.Parameters.AddWithValue("@Header", Convert.ToString(Main_Program.TextBox1.Text))
        add_1.Parameters.AddWithValue("@Footer", Convert.ToString(Main_Program.Combo_Realizado_por.Text))
        add_1.Parameters.AddWithValue("@CreatedDate", Convert.ToString(Date.Now))
        add_1.ExecuteNonQuery()
 
        Dim add_2 As SQLiteCommand = New SQLiteCommand("INSERT INTO TicketContents VALUES (?, ?, ?, ?, ?)", Conection_)
        Dim roww As DataGridViewRow = New DataGridViewRow()
        Try
            For Each roww In Main_Program.DataGridView1.Rows
                add_2.Parameters.Clear()
                add_2.Parameters.Add("@TicketContentId", Nothing)
                add_2.Parameters.Add("@TicketId", Nothing)
                add_2.Parameters.AddWithValue("@Quantity", Convert.ToString(roww.Cells(4).Value))
                add_2.Parameters.AddWithValue("@Description", Convert.ToString(roww.Cells(2).Value))
                add_2.Parameters.AddWithValue("@Price", CDbl(roww.Cells(6).Value))
                add_2.ExecuteNonQuery()
            Next
            Conection_.Close()
 
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

Como hago para guardar la lista de los productos del ticket en un DataSet guardando una relacion "uno a muchos" es decir como concentro la lista de los productos en una sola fila en la tabla (hija)???


PD: Alguien que me explique como se insertan las imagenes en este foro, lo intente pero no insertó nada.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 27/06/2019 00:10:22
Hola,

No bien comprendo tu pregunta : ¿buscas leer el registro del ticket con todas detalles en un solo linea SQL? Buscas una "SELECT ... JOINT ..." ?

Para las imagenes, ver esta imagen :

PonerImagen
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 27/06/2019 02:16:23
Bueno... la imagen que les queria mostrar es esta:

Ticket

Genial!!! ya funcionó el adjuntador de imagenes del foro, no me funcionaba debido a que parece ser que no acepta imagenes en formato .png

En fin...

Asi se imprime mi ticket, y lo que quiero hacer, es guardarlo en una base de datos (SQLite).
Ya si despues quisiera re-imprimirlo solo tendría que recuperarlo de la base de datos y re-imprimirlo, pero bueno... eso ya sería otro tema.
Primero lo que me inetresa es guardar el contenido del ticket en la BD, y para eso ya tengo mis tablas en donde se van a guardar los contenidos del ticket.
De hecho ya puedo guardar todos los datos del ticket en las tablas! lo que no he logrado hacer, es guardar la parte de la lista de los productos, quiero que se guarde en un DataSet, por el momento si guardo 3 productos me los guarda generando una fila para cada producto en la tabla, y lo que quisiera es que ya sean 10 o 100 productos me los guarde en el DataSet generandome un solo record o (entrada) en esa tabla. O si Ustedes conocen una mejor forma de guardar la lista de los productos del ticket en una base de datos, soy todo oidos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 27/06/2019 11:57:26
Hola,

No siempre comprendo tu problema.

Es normal que la tabla Ticket contiene 1 línea por cada ticket et es normal que la tabla TicketContents contiene tan líneas que de artículos en cada ticket. Entonces, si tienes 3 tickets con 1, 5 y 4 líneas, la tabla ticket contiene 3 líneas y la tabla TicketContents contiene 10 líneas (1 para ticket 1, 5 para ticket 2 y 4 para ticket 3).

Generalmente, un DataSet en memoria es una copia exacta de la DB pero puedes agregar otras tablas, por ejemplo, una tabla que contiene un ticket completo, como en XLS (cf. Imagen). ¿Es tu pregunta?

Este es comando SQL que llena una tabla en un DataSet :
SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.N°TicketId = TicketContents.TicketId

Puede hacer un código pareciendo :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim Conection_ As SQLiteConnection = New SQLiteConnection("Data Source=C:\SystemWin\DB2\Owner.db;Version=3;")
Dim ConTmp As SQLiteDataAdapter
Dim MisDatos As New DataSet
Dim UnaTabla As DataTable
 
ConTmp = New SQLiteDataAdapter("SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.N°TicketId = TicketContents.TicketId ", Conection)
 
UnaTabla = New DataTable
ConTmp.FillSchema(UnaTabla, SchemaType.Source)
ConTmp.Fill(UnaTabla)
UnaTabla.TableName = "TTicketConDetalle"
MisDatos.Tables.Add(UneTable)
 
' ... ... ...


TTicketConDetalle
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 29/06/2019 16:44:06
Hola Phil !!!

Si es más o menos lo que preguntaba, muchas gracias por el código.
Una duda ... la siguiente linea, para que me sirve?:

1
UnaTabla.TableName = "TTicketConDetalle"
veo que se le asigna el nombre de: "TTicketConDetalle" a una tabla. Para que?
Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 29/06/2019 17:51:42
Hola,

Este es para que utilizar fácilmente la tabla en el código.

Un DataSet es especialmente, una colección de DataTable. Cada DataTable es el resultado de un comando SQL o de introducciones por el utilizador. Puedes agregar una tabla Tickets, una tabla Productos, una tabla Clientes, …
El primero DataTable en la colección tiene el indice 0, el siguiente tiene el indice 1, …, y el ultimo tiene el indice MisDatos.Tables.Count – 1 (como en mi ejemplo).
Para aceder a un DataTable para mostrar sus datos, por ejemplo, tienes que designar este DataTable con su indicie. Pero, caundo existe mucho DataTable, es dificil de saber el cuál es este que es necesario. Mucha intrucciones permitan que designamos el DataTable por ello nombre. Es para que tienes que dar nombres representativos del contenido de los DataTable : TTicket, TClientes, TProductos, TExistencias, …, y TTicketConDetalle porqué la comando SELECT … INNER JOIN … da los tickets, cada con ellos detalles.

Buena tarde,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 30/06/2019 17:39:19
Hola Phil!

Si estas son mis tablas, donde "Ticket" es la tabla (Parent) y "TicketContents" es la tabla (Child)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE "Ticket" (
"TicketId"	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"Header"	TEXT,
"Footer"	TEXT,
"CreatedDate"	TEXT
);
 
CREATE TABLE "TicketContents" (
"TicketContentId"	INTEGER PRIMARY KEY AUTOINCREMENT,
"TicketId"	INTEGER,
"Quantity"	INTEGER,
"Description"	TEXT,
"Price"	REAL,
FOREIGN KEY("TicketId") REFERENCES "Ticket"("TicketId")
);

Entonces el siguiente código deberia guardar los contenidos del ticket en la BD?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Public Sub Save_to_tickets_table()
    Dim Conection_ As SQLiteConnection = New SQLiteConnection("Data Source=C:\SystemWin\DB2\Owner.db;Version=3;")
    If (Conection_.State = ConnectionState.Closed) Then Conection_.Open()
 
    Dim add_1 As SQLiteCommand = New SQLiteCommand("INSERT INTO Ticket VALUES (?, ?, ?, ?)", Conection_)
    add_1.Parameters.Add("@TicketId", Nothing)
    add_1.Parameters.AddWithValue("@Header", Convert.ToString(Main_Program.TextBox1.Text))
    add_1.Parameters.AddWithValue("@Footer", Convert.ToString(Main_Program.Combo_Realizado_por.Text))
    add_1.Parameters.AddWithValue("@CreatedDate", Convert.ToString(Date.Now))
    add_1.ExecuteNonQuery()
    Try
        Dim add_2 As SQLiteCommand = New SQLiteCommand("INSERT INTO TicketContents VALUES (?, ?, ?, ?, ?)", Conection_)
        Dim roww As DataGridViewRow = New DataGridViewRow()
        For Each roww In Main_Program.DataGridView1.Rows
            add_2.Parameters.Clear()
            add_2.Parameters.Add("@TicketContentId", Nothing)
            add_2.Parameters.Add("@TicketId", Nothing)
            add_2.Parameters.AddWithValue("@Quantity", Convert.ToString(roww.Cells(4).Value))
            add_2.Parameters.AddWithValue("@Description", Convert.ToString(roww.Cells(2).Value))
            add_2.Parameters.AddWithValue("@Price", CDbl(roww.Cells(6).Value))
            add_2.ExecuteNonQuery()
        Next
        Dim Data_Adapter As SQLiteDataAdapter
        Dim Data_Set As New DataSet
        Dim Data_Table As DataTable
 
        Data_Adapter = New SQLiteDataAdapter("SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.N°TicketId = TicketContents.TicketId ", Conection_)
 
        Data_Table = New DataTable
        Data_Adapter.FillSchema(Data_Table, SchemaType.Source)
        Data_Adapter.Fill(Data_Table)
        Data_Table.TableName = "TicketConDetalle"
        Data_Set.Tables.Add(Data_Table)
        Conection_.Close()
 
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub



Llevo más de un mes investigando como guardar estos contenidos y aún no lo consigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 30/06/2019 18:49:57
Hola,

Creía que los datos estaban ya en la base de datos. Mis códigos estaban para copiar un ticket de la DB en un DataTable para mostrar en la pantalla y editar.
Mis códigos y los códigos para registrar el ticket en la base no son mismos y dueban ser en procedimientos no mismos.
Al momento de registrar en la base, los datos son siempre en las herramientas en la pantalla.
Comprendía que querías releer el ticket otro momento.

En todos casos, tu códigos para registrar me parece bien pero puedes tener errores en los parámetros. Tienes que hacer los comandos INSERT sin parámetro, por ejemplo (no es el ticket) :
1
2
3
FraseSQL = "INSERT INTO TLosProductos (Identificador, Producto, Tipo, Referencia, Imagen, Actualizacion, Cantidad) " &
           "VALUES ('" & IdentificadorDestino & "', '" & TProducto.Text & "', '" & TTipo.Text & "', '" &
                TReferencia.Text & "', '" & Imagen & "', '" & TActualizacion.Text & "', '" & TCantidad.Text & "' )"

Entonces, si no funciona bien, tienes que enviar fotos del pantalla con los mensajes de errores, y tu código. Miraré.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 01/07/2019 02:07:28
La verdad, no se que es lo que pretendes.

Para guardar un maestro-detalle que es el caso del tiket, es tan sencillo como iterar sobre el detalle e ir insertando las lineas de detalle y asunto solucionado.

Eso de llevar mas de un mes "investigando", me parece demasiado para algo sencillo que todos hacen a diario.

Un maestro-detalle, no es otra cosa que en una tabla cabecera por cada fila que se inserta, en el detalle (líneas que tenga el tiket), deben ir 1 o mas líneas, no es otra cosa.

Creo que ya muchos dieron sus ejemplos.

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 01/07/2019 22:47:41
Hola Wilfredo!!
Gracias por contestar.

De hecho en el último código que proporcioné yo ya estoy haciendo interaciones con un bucle "FOR" y ya puedo insertar las lineas de los contenidos de todos los productos del ticket a la tabla "TicketContents" cada producto tiene su propia fila en la tabla.
Yo lo único que quiero saber es: ¿Como le hago para guardar la tabla "TicketContents" en la tabla "Ticket"?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 135
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Agustin (39 intervenciones) el 01/07/2019 22:55:26
Capo, borrá todo eso y usa un ORM como la gente.

De paso en lugar de renegar con pavadas irrelevantes hacés un modelo de datos de verdad y trabajas con codigo de verdad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-3
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 03/07/2019 05:23:47
"Eso de llevar mas de un mes "investigando", me parece demasiado para algo sencillo que todos hacen a diario"

Si es tan facil, porque no me muestras como con código?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 03/07/2019 05:29:16
Te paraece que estoy renegando? en vez de criticar deberias mostrarme como guardar los contenidos de un ticket en una base de datos SQLite con código, y basandote en el codigo que he proporcionado. No todos somos dioses de la programación, no estoy interesado en usar ningun ORM, se que es posible lograrlo sin el uso de ORM's.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 135
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Agustin (39 intervenciones) el 03/07/2019 05:46:24
El "codigo que proporcionaste" no tiene absolutamente ningun valor.

1 - utiliza string typing por todos lados en lugar de usar un modelo estático que te lo verifique el compilador.

2 - pasa datos de la pantalla a la DB a lo perro, sin ningún miramiento ni respeto por las buenas prácticas ni la separación en capas.

3 - es terriblemente propenso a errores en tiempo de ejecución, por ejemplo por el hecho de pasarle fechas usando strings a la DB, realizando una conversión que es dependiente de la localización, y no del formato que realmente requiere la DB.

4 - Es innecesariamente complicado y dependiente de detalles de implementación del underlying store, como los foreign keys.

5 - Es completamente imposible de reutilizar de ninguna manera que no sea haciendo copy-paste.

Así puedo estar toda la noche si querés.

Haceme caso, borra todo eso y usá Entity Framework que es mucho mejor y más facil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar

Como guardar el contenido de un ticket en una base de datos?

Publicado por agustin troll (1 intervención) el 03/07/2019 08:47:43
Matt, no hagas caso a Agustin... es el troll de estos foros!!!

Solo sabe criticar, y nunca ayuda!!!
no entiende que la gente esta aprendiendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 03/07/2019 08:56:13
Como siempre Augustin, das palabras y palabras pero no das solución, usted ni siquiera intenta.
Y ti Matt, en lugar de discutir con los "tenores", vuelve al trabajo, no has respondió a mi mensaje del 30/6, 18h49.
Espero la continuación...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 06/07/2019 15:59:02
Hola Phil.

Una disculpa por contestar hasta ahora.

No se si me explique lo suficiente en mis anteriores posts, pero lo que yo quiero hacer es lo siguiente:


path113

Ya tengo mi base de datos, ya tengo mis 2 tablas, ya puedo guardar datos en ellas, solo me falta guardar la lista de los productos en la tabla "ticket" y para eso me han sugerido usar un DataSet, pero no soy muy bueno implementando DataSets. tu que opinas Phil? nesecito un DataSet?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 06/07/2019 17:26:50
Hola Matt,

Miro tu esquema inicial y no veo el campo "Product List" como en tu imagen. No Product List es necesario.
Tu esquema inicial es muy bien.
Con lo, mi código debe funcionar.

1
2
3
4
5
6
ConTmp = New SQLiteDataAdapter("SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.N°TicketId = TicketContents.TicketId ", Conection)
UnaTabla = New DataTable
ConTmp.FillSchema(UnaTabla, SchemaType.Source)
ConTmp.Fill(UnaTabla)
UnaTabla.TableName = "TTicketConDetalle"
MisDatos.Tables.Add(UneTable)

Y para llenar un DataGridView, agregas la linea :

1
DataGridView.DataSource = MiDatos.Tables("TTicketConDetalle")

Por favor, dices me como esta funciona ...
Si no funciona, envias me el archivo del proyecto (en ZIP).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 07/07/2019 06:59:33
No, yo no quiero mostrar datos en ningun datagridview, yo ya tomé los datos de un Datagridview y los estoy guardando en la BD.
Eso si se como hacerlo! Yo se como guardar records en una tabla, lo que quiero saber es como guardar la lista de productos del ticket en la tabla "TicketContents" y de ahi a la tabla "Ticket".

rect115

O como voy a saber cuales productos corresponden a cual ticket?

"Product List" era solo un ejemplo, pero ahora si lo incluí en la tabla "Ticket", ya que ahi es en donde quiero que se guarden los productos de cada ticket.

1
2
3
4
5
6
7
CREATE TABLE "Ticket" (
	"TicketId"	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
	"Header"	TEXT,
	"ProductList"	TEXT,
	"Footer"	TEXT,
	"CreatedDate"	TEXT
);

1
2
3
4
5
6
7
8
CREATE TABLE "TicketContents" (
	"TicketContentId"	INTEGER PRIMARY KEY AUTOINCREMENT,
	"TicketId"	INTEGER,
	"Quantity"	INTEGER,
	"Description"	TEXT,
	"Price"	REAL,
	FOREIGN KEY("TicketId") REFERENCES "Ticket"("TicketId")
);

Tu codigo no hace nada.

PD. Si no hablas español, puedo escribir mis pots en ingles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 07/07/2019 11:51:11
Hola,

Si no hablas español, puedo escribir mis pots en ingles”. : gracias, pero no soy mejor en ingles que en español ¡ Comprendo un poco …

Pero, las frases siguiente :

yo ya tomé los datos de un Datagridview y los estoy guardando en la BD” (= I have already taken the data from a Datagridview and I am saving it in the BD)
y
lo que quiero saber es como guardar la lista de productos del ticket en la tabla "TicketContents" y de ahí a la tabla "Ticket". (= What I want to know is how to save the list of products of the ticket in the table "TicketContents" and from there to the table "Ticket").

son opuestas, o no hablamos de las mismas tablas … (tablas en DB o tablas en DataSet) ?

Más, tu nueva esquema no es bien : la tabla “Ticket” no duebe contiener las informaciones del detalle de un ticket. El detalle del ticket es en la tabla TicketContents ahí el “TicketId” es el mismo que esto del registro de “Ticket” que es leído.

Este reglaje se hace con las buenas preguntas :
Para la tabla Ticket en relación con el tabla TicketContents :
¿Es que 1 ticket duebe contiener al menos 1 detalle? Si afirmativo, el minino del relación es 1, si no afirmativo, el minimo del relación es 0. (Aquí, la respuesta es 1)
¿Es que 1 ticket puebe contiener muchas detalles? Si afirmativo, el maximo del relación es N, si no afirmativo, el maximo del relación es 1. (Aquí, la respuesta es N)
Para la tabla TicketContents en relación con el tabla Ticket :
¿Es que 1 detalle duebe pertenecer al menos 1 ticket? Si afirmativo, el minino del relación es 1, si no afirmativo, el minimo del relación es 0. (Aquí, la respuesta es 1)
¿Es que 1 detalle puebe pertenecer muchas ticket? Si afirmativo, el maximo del relación es N, si no afirmativo, el maximo del relación es 1. (Aquí, la respuesta es 1)

La esquema lógica de este reglaje es :


TTicketRelation2

La Tabla que tiene el máximo del relación es la tabla dueño (o padre, o madre) y la otra tabla es la tabla esclava (o hija).

El reglaje de los llaves se hace como esta :

Las tablas dueñas tienen sus llaves primerias (primary key) y marcan las tablas esclavas con una llave foránea que es una copia de su llave primeria. Las llaves primerias no es necesario para las tablas esclavas pero en el caso del ticket, tiene que escribir el numero de cada línea, o de otra maniera, podemos aceptar un llave primeria.

TTicketRelation3

En Access, la relación es mostrado como esta :

TTicketRelation

No es posible escribir el código para tablas enlaciadas con malas relaciones. Si no buenas relaciones, "mejor" tienes que hacer una sola tabla para contener todo …..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 07/07/2019 17:01:04
Hola Phil!

Gracias por tu explicación gráfica, entiendo las relaciones que deben existir entre las tablas, pero entonces como seria el código para guardar los contenidos de la tabla esclava a la tabla dueña? El codigo que me proporcionaste es el correcto para esta tarea?

Creo que las relaciones entre mis tabla estan correctas? si no, dejamelo saber.

Y porque deberia usar solo una tabla?


PD. Una disculpa... pero no pudeo enviarte el código del proyecto en un archivo .zip, ya que éste es confidencial (agradezco el ofrecimiento).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 07/07/2019 19:24:04
Las relaciones ente las tablas estaban bien ante agregas el campo “ProductList”, este estaba las relaciones del primero mensaje:

Mi código "SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.N°TicketId = TicketContents.TicketId "
es bien para leer todos datos de todos tickets, no para escribir en la DB.

Para registrar un ticket, tienes que hacer algunos comandos :
un primero para registrar en la tabla Ticket (para ExcecuteNoQuery)
un segundo para leer el TicketId (para ExcecuteScalar)
otros, en ciclo, para registrar los detalles en TicketContents, con cada veces, la llave foránea egual a TicketId (para ExcecuteNoQuery).

Este comandos parecen como :

ComandoSQL = "INSERT INTO Ticket (Header, Footer, CreateDate)
VALUES ('" & TextBox1.Text & "', '" & Combo_Realizado_por.Text & "', '" & Date.Now.ToString & "' )"

… ExecuteNoQuery(ComandoSQL …. )

ComandoSQL = “SELECT Max(TicktId) FROM Ticket”
ElTicketID = … ExecuteScalar(ComandoSQL …. )

Supesto que el ticket es en DataGridView1 :

For R As Integer = 0 To DataGridView1.Rows.Count – 1
ComandoSQL = "INSERT INTO TicketContents (TicketId, Quantity, Description, Price) VALUES ('" & ElTicketID.ToString & "', '" & DataGridView1.Item(4, R).Value.ToString & "', '" & DataGridView1.Item(2, R).Value.ToString & "', '" & DataGridView1.Item(6, R).Value.ToString & "' )"
… ExecuteNoQuery(ComandoSQL …. )
Next R

No debes trabajar con una sola tabla, este solamente necesario cuando no sabe trabajar con buenas relaciones. Con una sola tabla, ningún relación. No es bien para registrar tickets.

Acerca del proyecto confidencial, solamente los códigos para trabajar con la DB estarían útil. Aquí, deberé modificar para trabajar con Access o MySql, no tengo SQLite. Pero este no es indispensable … pero no es facil de corregir tu codigo sin poder el prueba.

Propongo que ajustas mis comandos y que lo pruebas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 11/07/2019 15:43:20
Hola Phil.

Tu codigo:
1
2
ComandoSQL = "INSERT INTO Ticket (Header, Footer, CreateDate)
VALUES ('" & TextBox1.Text & "', '" & Combo_Realizado_por.Text & "', '" & Date.Now.ToString & "' )"

Yo ya lo tenia asi:
1
2
3
4
5
6
Dim add_1 As SQLiteCommand = New SQLiteCommand("INSERT INTO Ticket VALUES (?, ?, ?, ?)", Conection_)
        add_1.Parameters.Add("@TicketId", Nothing)
        add_1.Parameters.AddWithValue("@Header", Convert.ToString(Main_Program.TextBox1.Text))
        add_1.Parameters.AddWithValue("@Footer", Convert.ToString(Main_Program.Combo_Realizado_por.Text))
        add_1.Parameters.AddWithValue("@CreatedDate", Convert.ToString(Date.Now))
        add_1.ExecuteNonQuery()

Tu codigo:
1
2
3
4
For R As Integer = 0 To DataGridView1.Rows.Count – 1
ComandoSQL = "INSERT INTO TicketContents (TicketId, Quantity, Description, Price) VALUES ('" & ElTicketID.ToString & "', '" & DataGridView1.Item(4, R).Value.ToString & "', '" & DataGridView1.Item(2, R).Value.ToString & "', '" & DataGridView1.Item(6, R).Value.ToString & "' )"
… ExecuteNoQuery(ComandoSQL …. )
Next R

Yo ya lo tenia asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Try
            Dim add_2 As SQLiteCommand = New SQLiteCommand("INSERT INTO TicketContents VALUES (?, ?, ?, ?, ?)", Conection_)
            Dim roww As DataGridViewRow = New DataGridViewRow()
            For Each roww In Main_Program.DataGridView1.Rows
                add_2.Parameters.Clear()
                add_2.Parameters.Add("@TicketContentId", Nothing)
                add_2.Parameters.Add("@TicketId", Nothing)
                add_2.Parameters.AddWithValue("@Quantity", Convert.ToString(roww.Cells(4).Value))
                add_2.Parameters.AddWithValue("@Description", Convert.ToString(roww.Cells(2).Value))
                add_2.Parameters.AddWithValue("@Price", CDbl(roww.Cells(6).Value))
                add_2.ExecuteNonQuery()
            Next
            Conection_.Close()
 
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Sigo sin entender como guardar la lista de los productos que se encuentra en la tabla "TicketContents" a la tabla "Ticket".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 11/07/2019 16:37:54
Hola,

Creo que no queras entender !
La lista de los productos no puede ser en la tabla Ticket !

Sobre el elección del código ente el tuyo y el mío, no importa. Pero es necesario que sabes ajustar mi código a tu comando SQL o que tu código no tienes errores en los parámetros.

Puedo ajustar mi código pero tienes que enviar el archivo de desarrollo VB : no necesario enviar la DB.

De otra manera, no puedo te ayudar ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 14/07/2019 08:47:47
Hola,

He recibido tu proyecto. Miraré en la tarde.

Que tenga un buen día,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 14/07/2019 16:14:20
Hola Phil.

Gracias por revisar mi proyecto.

Olvide quitar el campo "ProductList" de la tabla TicketContents pero aqui esta la base de Datos corregida y que si funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 14/07/2019 23:15:54
Hola,

Tienes que verificar tus códigos para imprimar. No bien funciona pero este es otro problema.

He trabajado algunos códigos y obtengo el resultado mostrado en el video : https://www.dropbox.com/s/smnhhtroepqekmk/Tickets.mp4?dl=0

Tienes que verificar los ConnectionString porque he lo modificado para funcionar en mi computadora.

En formulario Main_Program.vb, lineas 81 y 169 :
Tu código …. FormatCurrency(fila.Cells("Column7").Value) es problema para me ;
Lo reemplazo por CType(fila.Cells("Column7").Value.ToString.TrimStart("$"), Double)

En formulario Reimpresion_de_Tickets.vb (agrego Reimpresion_de_Tickets.vb en el archivo Tickets_.zip adjuntado), he escribido el procedimiento Button2_Click( … ). Tienes 2 manera de llenar el DataDridView : solamente el ultimo ticket o todos los tickets.
Para imprimar, propongo que trabajas con el DataGridView de este formulario.

He complemente escribido el código del módulo Tickets_Module.vb (agrego Tickets_Module.vb en el archivo Tickets_.zip adjuntado).

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 15/07/2019 08:40:03
Para tu información…

He instalar un navegador para base de datos SQLIte y pude mirar en tus tablas.
He visto que tus líneas no es bien porque no tienen valores para la lleva foránea.
En este caso, no es posible de recrear el ticket completo con su detalle.
Mis pruebas, con el TicketId 9 y siguientes, son correctos y es posible de releer un ticket como mostrar en el video de ayer.

Que tenga un buen día,

SQLite02

Si quieres este navegador :
SQLite01
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 15/07/2019 18:10:06
Hola Phil!!!

Muchas gracias por corregir mi codigo.
Y si, el Browser para SQLite que me recomiendas, es el que yo use para crear la base de datos.

Disculpa se podria hacer algo parecido a la siguiente imagen, es decir al seleccionar un ticket del DataGridview y luego se visualize en el PictureBox de la derecha para despues imprimirlo?


Go

Muchas Gracias, aprecio mucho por tu apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 15/07/2019 18:21:40
Miraré mañana.

Atención, en la imagen que envía, los TicketId 1 a 8 no se poden recuperar porque el Id no está registrado en TicketContents, como lo muestro en mi mensaje precedente. Mejor es de los eliminar con el navegador SQLite.

Buena tarde,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 16/07/2019 03:23:56
Hola Phil.

Ya elimine los campos NULL
Utilizando el codigo para leer todos los tickets:
Todas las otras columnas si existen, solo que estan ocultas con el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
DataGridView1.Columns(0).Visible = False
        DataGridView1.Columns(1).Visible = False
        DataGridView1.Columns(2).Visible = False
        DataGridView1.Columns(3).Visible = False
        DataGridView1.Columns(4).Visible = False
        DataGridView1.Columns(5).Visible = True
        DataGridView1.Columns(6).Visible = False
        DataGridView1.Columns(7).Visible = False
        DataGridView1.Columns(8).Visible = True
        DataGridView1.Columns(8).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 16/07/2019 15:21:55
Hola,

En el formulario Config_Gestor_de_Tickets.Designer.vb, he remplazado el PictureBox por un ListBox que se llamada LBTicketParaImprimar.
He puesto tu código en el procedimiento Config_Gestor_de_Tickets_Load( … ) y he escribido los códigos para llenar el “ticket” en el procedimiento DataGridView1_CellClick( … ).
No he cambiado otros formularios.

Adjunto el archivo Config_Gestor_de_Tickets.zip qui contiene el archivo Config_Gestor_de_Tickets.vb.

No olvida poner el ListBox en tu Config_Gestor_de_Tickets.Designer.vb.

Creo que tienes todas las herramientas para continuar.

Saludos

Gestor1

Gestor2

Gestor3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 16/07/2019 17:33:59
Hola Phil !!!

Muchisimas gracias por las correcciones en mi codigo, pero principalmente por tu paciencia.
Me ha quedado claro como funciona tu codigo.
Una ultima cosa...

Se puede mostrar en el DataGridView solo un solo elemento por cada ticket? actualmente se muestran en el DGV tantos elementos como productos existen en el ticket. es decir... si el ticket tiene 5 productos, se muestran 5 filas en el DGV.

01

No se si se puede mostrar una sola fila por ticket, como lo muestro en la siguiente imagen.

02

Este efecto lo puedo hacer con el siguiente codigo:
1
Data_Adapter = New SQLiteDataAdapter("SELECT * FROM Ticket", Conection_)
Pero entonces, el programa no funcionaria correctamente.

Agradezco mucho tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 16/07/2019 21:41:00
1
Data_Adapter = New SQLiteDataAdapter("SELECT * FROM Ticket", Conection_)
Este comando SQL da solamente el "Ticket" pero no sus detalle necesarios para lo imprimar.

Para mostrar una sola fila por ticket, tiene que utilizar un DataGridView para mostrar y otro para imprimar. Este ultimo DataGridView, no es necesario que esté visible.

Miro este solución y te comento mis resultados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 16/07/2019 23:10:12
Hola,

He modificado los formularios Reimpresion_de_Tickets.vb (Button2_Click) y Config_Gestor_de_Tickets.vb. Los dos formularios están en archivo adjuntado Imprimar_Tickets.zip.

En el Config_Gestor_de_Tickets.Designer.vb, he agregado un DataGridView llamado DGVTicketConDetalles (cf. Imagen). Este DataGridView no visible durante la ejecución. Tienes que lo poner en tu Config_Gestor_de_Tickets.Designer.vb.

Buena noche

Gestor4
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 17/07/2019 15:46:02
Hola Phil !!!

Funciona de maravilla la adaptacion del nuevo DGVTicketConDetalles.

Que me recomiendas para imprimir un ticket que ya esta en la Base de Datos? deberia imprimirlo directamente desde el ListBox o desde las tablas de la Base de Datos?

Gracias, Buen Día!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 17/07/2019 18:44:12
Hola,

Esta feliz que mi solución (rápido hecha) te gusta. Tiene la cualidad de ser fácil a comprender.

Para imprimar, tienes tres soluciones:
La comando SQL da un DataTable TicketConDetalle : contiene todos los campos para imprimar
El DataTable es el DataSource del DataGridView DGVTicketConDetalles : contiene todo las valores para imprimar
El DataGridView DGVTicketConDetalles da los valores para llenar el ListBox LBTicketParaImprimar. El ListBox contiene exactamente todo los valores para imprimar.

Personalmente, en Config_Gestor_de_Tickets.vb, utilizaria los valores del DataGridView DGVTicketConDetalles, como para el ListBox, solamente con un poco de ajustadas, pero directamente enviadas a la impresora.

En el formulario Main_Program.vb (Button3_Click), tienes que imprimar el último Ticket. Puedes rehacer una de las tres soluciones pero solamente para el último Ticket. El comando SQL es escribido en Reimpresion_de_Tickets.vb (líneas 25 a 27).

No me gusta de programar los códigos para imprimar. Tengo algunas informaciones pero son en francés y soy demasido perezoso para traducir …
Pero el primero ejemplo, el código de procedimiento PrintDocument1_PrintPage es fácil a comprender, quizá con un poco de ayuda de Google Traduction.
Adjunto el archivo Imprimer.zip con aquellas informaciones. Espero que te ayudara.

Buena continuación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 19/07/2019 07:39:21
Hola Phil!!!

He conseguido imprimir el ListBox con exito, gracias al documento que me compartiste.

Ahora estoy tratando de imprimir el último ticket en el formulario "Reimpresion_de_Tickets" ... Button1 = Reimprimir último ticket, ingresé tu codigo de las (líneas 25 a 27), pero en este formulario no existe ningun DataGridView, aqui quiero imprimir directamente a la impresora de tickets.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 19/07/2019 13:35:24
Hola,

1
2
3
4
5
6
7
8
9
10
11
12
'''' Para leer el ultimo lo ticket
Dim ComandoSQL As SQLiteCommand = New SQLiteCommand("SELECT Max(TicketId) FROM Ticket", Conection_)
Dim ElTicketID As Integer = ComandoSQL.ExecuteScalar()
Data_Adapter = New SQLiteDataAdapter("SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.TicketId = TicketContents.TicketId WHERE  Ticket.TicketId = '" & ElTicketID & " ' ", Conection_)
 
Data_Table = New DataTable
Data_Adapter.FillSchema(Data_Table, SchemaType.Source)
Data_Adapter.Fill(Data_Table)
Data_Table.TableName = "TicketConDetalle"
Data_Set.Tables.Add(Data_Table)
 
' !!!!!!!!!!!!!!!!!

En este lugar, tienes el DataTable "TicketConDetalle". Este tabla contiene tan línea que de “línea de detalle” en el ticket y cada línea, contiene tan columnas que de campos en el comando SQL.

Puede leer este tabla con un cicla :

1
2
3
4
5
6
For R As Integer = 0 To Data_Set.Tables("TicketConDetalle").Rows.Count – 1
'''' Para cada linea, puede leer cada compo :
Data_Set.Tables("TicketConDetalle").Rows(R).Item("Quantity").ToString …
Data_Set.Tables("TicketConDetalle").Rows(R).Item("Descripcion").ToString …
'''' ….
'''' y enviar a la impresora, de la misma marena que envio de el DataGridView a el ListBox

También puedes crear un DataGridView y/o un ListBox y lo hacer no visible pero este es muy redundado.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 20/07/2019 18:37:03
Gracias Phil...

Estoy trabajando en eso....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 30/07/2019 08:10:26
Hola Phil!

En la forma "Config_Gestor_de_Tickets" Intento buscar los tickets en la fecha seleccionada con el boton "Buscar_por_fecha", pero mi DataGridView1 NO me muestra nada, este es el codigo no entiendo porque no me muestra nada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        'Muestra la cantidad de tickets en la fecha seleccionada
        Dim conexion As String
        Dim comando As String
        Dim adapter As SQLiteDataAdapter
        Dim Data_Table As New DataTable
        Try
            conexion = "Data Source=C:\SystemWin\DB2\Owner.db;Version=3;"
            comando = "SELECT * FROM Ticket WHERE Fecha ='" & DateTimePicker1.Value.ToShortDateString & "'"
            adapter = New SQLiteDataAdapter(comando, conexion)
            Data_Table = New DataTable
            adapter.Fill(Data_Table)
            Dim DV As New DataView(Data_Table)
            DV.RowFilter = $"Convert(Fecha, 'System.String') LIKE '%{DateTimePicker1.Value.ToShortDateString}%'"
            DataGridView1.DataSource = DV
            adapter.Dispose()
        Catch ex As Exception
            MsgBox(ex.Message)
            adapter.Dispose()
        End Try
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 30/07/2019 08:53:06
Hola Matt,

No hacer 2 veces el eleccion : WHERE Fecha = ... y LIKE Fecha ...

El codigo siguiente debe ser suficiente :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'Muestra la cantidad de tickets en la fecha seleccionada
 
Dim conexion As String
 
Dim comando As String
 
Dim adapter As SQLiteDataAdapter
 
                            Dim Data_Table As New DataTable
Try
 
    conexion = "Data Source=C:\SystemWin\DB2\Owner.db;Version=3;"
 
    comando = "SELECT * FROM Ticket WHERE Fecha ='" & DateTimePicker1.Value.ToShortDateString & "'"
 
    adapter = New SQLiteDataAdapter(comando, conexion)
 
                   ''''   Data_Table = New DataTable   YA ESCRIBIDO ANTES
 
    adapter.Fill(Data_Table)
 
    DataGridView1.DataSource = Data_Table
 
Catch ex As Exception
    MsgBox(ex.Message)
End Try
adapter.Dispose()

Quizá tienes que reemplazar WHERE Fecha ='" & DateTimePicker1... por WHERE Fecha LIKE=" & '%DateTimePicker1.Value.ToShortDateString%' ... sin "{" ni "}".

Si no functiona, haré pruebas en la tarde.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 30/07/2019 14:33:28
Hola,

He probado tu comando SQL. Este codigo funciona bien.
En el formulario Config_Gestor_de_Tickets :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Imports System.Data.SQLite
 
Public Class Config_Gestor_de_Tickets
 ' ... ... ...
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Muestra la cantidad de tickets en la fecha seleccionada
        Dim comando As String
        Dim adapter As SQLiteDataAdapter
        Dim Data_Table As New DataTable
 
        ' '''''  Dim Conection_ As SQLiteConnection = New SQLiteConnection("Data Source=C:\SystemWin\DB2\Owner.db;Version=3;")
        Dim conexion As SQLiteConnection = New SQLiteConnection("Data Source=D:\Tmp\TicketES\DataBase\SystemWin\DB2\Owner.db;Version=3;")
 
' Atención : En mi tabla Ticket, no campo Fecha pero he campo CreateDate
 
        Try
            comando = "SELECT * FROM Ticket WHERE CreatedDate LIKE '%" & DateTimePicker1.Value.ToShortDateString & "%'"
            adapter = New SQLiteDataAdapter(comando, conexion)
            adapter.Fill(Data_Table)
            DataGridView1.DataSource = Data_Table
        Catch ex As Exception
 
            MsgBox(ex.Message)
 
        End Try
 
        adapter.Dispose()
 
    End Sub

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 31/07/2019 04:47:59
Gracias Phil.
Funciona perfectamente usando LIKE en lugar de =
Aun estoy trabajando en el boton Imprimir el ultimo ticket, no lo he logrado hacer funcionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 03/08/2019 09:41:03
Hola Matt,

He programado un poco ..., quizá este darte buenas ideas.
Mi idea iníciale es de crear un archivo de texto con las líneas a imprimir y de lo eliminar cuando la impresión es terminado. Este archivo puede ser creado dónde gustamos para imprimar un ticket.

He creado un formulario MiImpreciones con el código necesario. Sobre de la pantalla, esto formulario mostrar solamente la elección de la impresora y el Preview antes impresión. Sobre el código, lo contiene los códigos para formatear la impresión. Si todas las impresiones de tickets utilizan este código, los ajustamientos son hechos una vez para todos.

El formato debe es escribido aquí :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
' … … …
            Else   ' Aqui son los diferentes formatos segun el contenido
                If NumLigne = 0 Then   ' Header
                    Police = New Font("Times New Roman", 16, FontStyle.Bold)  ' Ajustar formato
                    ' Este es posible calcular longitud de la frase et centrar segun el ancho de la impresora
                End If
                If SignoEgual = 0 Then  ' Fecha y numero
                    Police = New Font("Courier New", 12, FontStyle.Regular)  ' Ajustar formato
                End If
                If SignoEgual = 1 Then  ' Detalle
                    Police = New Font("Courier New", 10, FontStyle.Regular)  ' Ajustar formato
                End If
                If SignoEgual = 2 Then  ' Total
                    Police = New Font("Courier New", 12, FontStyle.Regular)  ' Ajustar formato
                End If
                If SignoEgual = 3 Then  ' Footer
                    Police = New Font("Courier New", 12, FontStyle.Bold)  ' Ajustar formato
                End If
' … … …

En Config_Gestor_de_Tickets.VB, cuando llenamos el ListBox, también creamos el archivo y cuando queremos la impresión (Button6_Click), mostramos el formulario MisImpreciones.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
' … … …
 
       LBTicketParaImprimar.Items.Add(Linea)
 
        IniciarTicketParaImpresera()   ' No olvidar !!!! Crear el archivo para la impresora
 
    End Sub
 
    Private Sub IniciarTicketParaImpresera()
        Dim TicketParaImpresora = New System.IO.StreamWriter("TicketAImprimar.Txt", False)
        For L As Integer = 0 To LBTicketParaImprimar.Items.Count - 1
            TicketParaImpresora.WriteLine(LBTicketParaImprimar.Items(L))
        Next
        TicketParaImpresora.Close()
    End Sub
 
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        MisImpreciones.NombreArchivoParaImpresora = "TicketAImprimar.Txt"
        MisImpreciones.ShowDialog()
    End Sub

Para la impresión del ultimo Ticket, en Reimpresion_de_Tickets.vb (Button1_Click), el archivo es escribido con la Data_Table de la misma manera que el ListBox es escribido con el DGV en Config_Gestor_de_Tickets.VB y el formulario MisImpreciones es mostrado inmediatamente. Este algoritmo peude es escribir tambien en Main_Program.Vb para el boton Button3_Click().


Adjunto el archivo Matt_Impress.zip que contiene solo los archivos modificados. Tienes que ver los códigos siguiente :
Todo MisImpreciones;
En Config_Gestor_de_Tickets.VB : Sub DataGridView1_CellClick(), Sub IniciarTicketParaImpresera() y Sub Button6_Click();
Reimpresion_de_Tickets.vb : Sub Button1_Click().


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 03/08/2019 17:49:36
Continuacion ...


Con mis códigos de ayer, mejor es de corregir las definiciones de las variables y el procedimiento MisImpreciones_Load() con este código :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Class MisImpreciones
    Friend NombreArchivoParaImpresora As String
    Private MiPrintPreviewDialog As PrintPreviewDialog
    Private MiPrintDialog As PrintDialog
    Private WithEvents MiPrintDocument As System.Drawing.Printing.PrintDocument
    Private MiDoc As StreamReader
 
Private Sub MisImpreciones_Load(sender As Object, e As EventArgs) Handles Me.Load
        If NombreArchivoParaImpresora = String.Empty OrElse Not File.Exists(NombreArchivoParaImpresora) Then
            Me.Close()
        End If
        MiPrintPreviewDialog = New PrintPreviewDialog
        MiPrintDialog = New PrintDialog
        MiPrintDocument = New System.Drawing.Printing.PrintDocument
        Dim Resultado As DialogResult
        MiPrintDialog.Document = MiPrintDocument  ' Elimimar 3 lineas si no seleccion del la impresora
        Resultado = MiPrintDialog.ShowDialog()
        If Resultado = Windows.Forms.DialogResult.OK Then
            MiPrintPreviewDialog.Document = MiPrintDocument
            MiPrintDocument.DocumentName = NombreArchivoParaImpresora
            MiDoc = New StreamReader(MiPrintDocument.DocumentName)
            MiPrintPreviewDialog.Dock = DockStyle.Fill
            Resultado = MiPrintPreviewDialog.ShowDialog()
            If Resultado = Windows.Forms.DialogResult.OK Then
                MiDoc.Close()
                MiDoc.Dispose()
            Else
                Me.Close()
            End If
        End If
    End Sub

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 04/08/2019 21:03:04
Hola,

Hay muchas preguntas sobre la impresión de los documentos.

Este es la razón por que he hecho el ejemplo de un método de trabaja que me gusta.
Envío el proyecto de probas a todos (ImpresionES.zip).

No es la sola manera de hacer y el formato de los datos para la impresora es diferente para cada documento. Este que muestro es solamente un ejemplo para su dar ideas.

Saludos


ParaImprimir
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 08/08/2019 16:13:05
Hola Phil.

Gracias por tus recomendaciones, son muy buenas ideas.

Ahoara tengo un pequeño problema con tu codigo y es que dependiendo del largo de los nombres de los productos, las cantidades de dinero se mueven de lugar.


escalera

Gracias por tu apoyo Phil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 08/08/2019 19:00:52
Jajá, este es el detalle, el reglaje de la impresión, este es este que es difícil…

Tienes que utilizar caracteres no proporcionales, por ejemplo con Courrier New, los caracteres i y m tienen la misma longitud.
Puedes mesurar las longitudes de las cadenas de caracteres: … .ToString.Lenght
Conoces la cuantidad de caracteres que puedes poner en el papel del ticket.
Puedes agregar caracteres blancos (" ") a la izquierda y la derecha de la cadena :
UnaVariableString = UnaCadena.PadLeft(LongitudTotaleQueTeGusta," "c)
UnaVariableString = UnaCadena.PadRight(LongitudTotaleQueTeGusta," "c)
Tambien puedes utilizar String.Format(“….”, UneValoreNumerica) para formatear los valores numéricos.

Tienes todas las herramientas para continuar …
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 26/09/2019 05:09:09
Hola Sr. Phil.

Una disculpa por tardarme en responder, pero estaba ocupado en el trabajo y tambien estaba escribiendo el codigo para alinear los items en el ticket. finalmente lo logre, ya esta correcto.


escalera

Aun tengo un pequeño problema en el codigo, y es que si costo de un item es mayor de 3 caracteres, entonces NO muestra la cantidad de dinero correctamente en el listBox1, en la imagen se muestra como el ultimo item supuestamente cuesta $1, cuando en realidad su verdadero costo en la base de datos es de: $1,000.00

Mi codigo es el siguiente en la forma: (Config_Gestor_de_Tickets).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
 
    Dim ElTicketID As Integer
    Dim PrimeraLineaDelTicketID As Integer
    Dim UltimaLineaDelTicketID As Integer
    Dim Linea As String
    Dim TotalTicket As Double = 0
 
    Dim Cantidad_de As String
    Dim Cantidad_de_Len As Integer
 
    Dim Description As String
    Dim description_L1 As String = ""
    Dim description_L2 As String = ""
    Dim Chars_in_L2 As Integer
    Dim Ldescription As Integer
    Dim tabulation1 As String = ""
    Dim tabulation2 As String = ""
 
    Dim R As Integer = e.RowIndex   ' No cambiar R
 
    Dim variablex24 As Integer = DGVTicketConDetalles.Rows.Count()
    Dim variablex25 As Integer = DataGridView1.Rows.Count()
    If variablex24 = 1 And variablex25 = 0 Then
        m70.Fonts(New Font("Arial", 12, FontStyle.Bold), mb.TextColor.Red)
        m70.ShowBox("¡No existen tickets en la lista de visualización!
", mb.MStyle.ok, mb.FStyle.Information, "Sistema de Control 1.18.05")
    Else
        Try
            ElTicketID = CType(DataGridView1.Item("TicketId", R).Value, Integer)
 
            For L As Integer = DGVTicketConDetalles.Rows.Count - 1 To 0 Step -1  ' Buscar la primera linea
                If CType(DGVTicketConDetalles.Item("TicketId", L).Value, Integer) = ElTicketID Then
                    PrimeraLineaDelTicketID = L
                End If
            Next L
 
            For L As Integer = 0 To DGVTicketConDetalles.Rows.Count - 1  ' Buscar la ultima linea
                If CType(DGVTicketConDetalles.Item("TicketId", L).Value, Integer) = ElTicketID Then
                    UltimaLineaDelTicketID = L
                End If
            Next L
        Catch ex As Exception
            'do nothing
        End Try
 
        LBTicketParaImprimar.Items.Clear()
        ListBox1.Items.Clear()
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Dim variablex As Integer = DGVTicketConDetalles.Rows.Count()
        If variablex = 1 Then
            'Do nothing
        Else
            Dim Full_stringx As String = DGVTicketConDetalles.Item("Header", PrimeraLineaDelTicketID).Value
            Dim Total_charsx As Integer = 0
            Dim Text_in_line1x As String = ""
            Dim Chars_in_line2x As Integer
            Dim Text_in_line2x As String
            Text_in_line1x = Full_stringx.Substring(0, 28)
 
            Total_charsx = Len(Full_stringx)
            If Total_charsx <= 28 Then
                Linea = Full_stringx
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)
            Else
                Chars_in_line2x = Len(Full_stringx.Substring(28, Total_charsx - 28))
                Text_in_line2x = Full_stringx.Substring(28, Chars_in_line2x)
                Linea = Text_in_line1x
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)
                Linea = Text_in_line2x
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)
            End If
        End If
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        If Main_Program.TextBox3.Text = "" Then
            Linea = "Telefono :"
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        Else
            Linea = "Telefono : " & Main_Program.TextBox3.Text
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        End If
 
        Dim variablex2 As Integer = DGVTicketConDetalles.Rows.Count()
        If variablex2 = 1 Then
            'Do nothing
        Else
            Linea = DGVTicketConDetalles.Item("Fecha", PrimeraLineaDelTicketID).Value
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        End If
 
        Linea = "Ticket # " & ElTicketID
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "______________________________"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        For L As Integer = PrimeraLineaDelTicketID To UltimaLineaDelTicketID
            Linea = DGVTicketConDetalles.Item("Cantidad", L).Value
            Cantidad_de = DGVTicketConDetalles.Item("Cantidad", L).Value.ToString
            Cantidad_de_Len = Len(Cantidad_de.ToString)
            If Cantidad_de_Len = 1 Then
                Linea &= "  "
            Else
                Linea &= " "
            End If
 
            Description = DGVTicketConDetalles.Item("Descripcion", L).Value
            Ldescription = Len(Description.ToString)
 
            If Ldescription <= 18 Then
                tabulation1 = StrDup(19 - Ldescription, ".")
                Linea &= DGVTicketConDetalles.Item("Descripcion", L).Value & tabulation1
            Else
                description_L1 = Description.ToString.Substring(0, 18)
                Chars_in_L2 = Len(Description.ToString.Substring(18, Ldescription - 18))
                description_L2 = Description.ToString.Substring(18, Chars_in_L2)
                tabulation1 = StrDup(19 - Chars_in_L2, ".")
                Linea &= description_L1
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)
                Linea = "   " & description_L2 & tabulation1
            End If
 
            Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value
            TotalTicket += CType(DGVTicketConDetalles.Item("Importe", L).Value.ToString.TrimStart("$"), Double)
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
 
            'Agrega una linea en blanco entre items en el ticket
            Linea = " "
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        Next L
 
        Linea = "                     _________"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "               Total: $" & String.Format("{0:#0.00}", CType(TotalTicket, String))
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "______________________________"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = " Le Atendió:"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        If R < 0 Then
        Else
            Linea = " " & DataGridView1.Item("Footer", R).Value
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        End If
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "  Gracias por su perferencia,"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "  ¡Agradecemos su vista!"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
    End If
 
End Sub

Yo pienso que el error esta en la Linea 140:
1
Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value
pero no tengo idea de como resolvelo, ya le busque de varias formas y nada.

Agradezco su Apoyo Sr. Phil, Saludos desde Mexico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 26/09/2019 17:06:52
Hola Matt,


No tengo el tiempo para trabajar tu proyecto ahora pero quizá tengo una pista para la solucione.

Si no es bien escribido en la ListBox, amplias la ListBox para poner más caracteres y este funciona, entonces el error puede ser a la línea 155 :

1
Linea = "               Total: $" & String.Format("{0:#0.00}", CType(TotalTicket, String))

Atención, String.Format("{0:#0.00}", es hecho para mostrar valores numéricos, entonces debes escribir String.Format("{0:#0.00}", TotalTicket).

Para calcular la cuantidad de caracteres, puedes poner String.Format("{0:#0.00}", TotalTicket) en una variable String et calcular según el cuantidad de caracteres dado por Length. El código debería parecer como :

1
2
3
4
Dim UnaVariable As String = String.Format("{0:#0.00}", TotalTicket)
Dim CaracteresBlancos As String
CaracteresBlancos = CuantidadCaracteresDeUnaLineaListBox - UnaVariable.Lenght
Linea = CaracteresBlancos & "Total: $" & UnaVariable

Gracias para testar mi propuesta y me comentas ... miraré mañana.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 26/09/2019 23:12:35
Hola Sr. Phil.

Muchas Gracias por su sugerencia! ya hice lo que me propuso y el problema persiste. El problema no está en la linea del total: $xx.xx ,
el problema está en la linea del Item, en su precio, su precio no se muestra completo, solo muestra un solo digito y a veces 2 digitos.
Es decir...
Si el Item cuesta $1,000.00 ... el ListBox1 solo muestra $1.00
Si el Item cuesta $12,000.00 ... el ListBox1 solo muestra $12.00

Muchas gracias por su apoyo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 27/09/2019 09:53:59
Hola Matt,

Para el error de utilización de String.Format, este es mi que te dar este código ! Disculpa ...
La buena sintaxis es :

1
Linea = "         Total :  $" & String.Format("{0:#0.00}", TotalTicket)

Para tu error, seguro que este es por la coma. Testas de reemplazar tu línea 141 por las dos líneas siguientes:

1
2
Dim ValoreTemp As String = DGVTicketConDetalles.Item("Import", L).Value.ToString.Replace(",", "")
            TotalTicket += CType(ValoreTemp.TrimStart("$"), Double)

No puedo testar en mi PC porque no he la coma en mis numéricos mostrados.

Si no funciona, envías me las fotos de la pantalla, como las siguientes:

Saludos

matt01
matt02
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 28/09/2019 00:49:28
Que tal Sr. Phil!

Ya reemplaze la lineas de codigo y este es el resultado.


01

02

03a

el tamaño de mi rollo de papel es de 58mm y le caben una máximo de 29 caracteres, usando la fuente "Courier New" en tamaño (10).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 28/09/2019 08:54:01
Hola Matt,

El problema viene del formato de los numéricos en tu PC.

Con tu primera foto, este calculado 250 + 1 = 251, porque 250.00 es 250 y 1,500.00 es 1.
Con tu segunda foto, tienes los valores 250.0 y 1500.0. No veo el resultado del cálculo.

Es necesario de eliminar todos caracteres de formato (blanco, punto, coma) de los cadenas que vienen del DGV antes de los poner en el cálculo.

Atención, en el ticket hecho después tu primera pantalla, no veo los precies en los detalles del ticket. Que has cambiado para esta ?

"Courier New" en tamaño (10) es bien para un ticket. En las líneas detalles, puedes utilizar tamaño (9), pero tu problema no es la cuantidad de caracteres, con 29 caracteres, este es suficiente.

No tengo el tiempo durante el dias para trabajar con este problema, quizá en la tarde ...

Que tenga un buen dias ....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 28/09/2019 16:19:01
Buen día Sr. Phil.

Entiendo, no todos tenemos el tiempo que quisieramos para hacer nuestras cosas, y yo aprecio mucho el apoyo que me ha brindado en estos ultimos meses.

tengo algunos comentarios...

"Con tu segunda foto, tienes los valores 250.0 y 1500.0. No veo el resultado del cálculo."
- Antes de reemplazar la linea 141 SI se mostraban los precios (incompletos, pero si se mostraba algo).

"Atención, en el ticket hecho después tu primera pantalla, no veo los precios en los detalles del ticket. Que has cambiado para esto ?"
- Lo único que cambié fue la linea 141 por las otras 2 lineas que me sugirió.

"Es necesario de eliminar todos caracteres de formato (blanco, punto, coma) de los cadenas que vienen del DGV antes de ponerlos en el cálculo."
- No entiendo esta parte, no ve donde pueden estar estas cadenas "(blanco, punto, coma)" que vienen del DGV!

Yo creo que todo el código es correcto, a excepcion de la parte donde carga el precio de los items al ListBox, ese error debe estar entre las lineas 143 a 146... ya que todo lo demas funciona correctamente.

Este es el código actual:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
 
    Dim ElTicketID As Integer
    Dim PrimeraLineaDelTicketID As Integer
    Dim UltimaLineaDelTicketID As Integer
    Dim Linea As String
    Dim TotalTicket As Double = 0
    Dim Cantidad_de As String
    Dim Cantidad_de_Len As Integer
    Dim Description As String
    Dim description_L1 As String = ""
    Dim description_L2 As String = ""
    Dim Chars_in_L2 As Integer
    Dim Ldescription As Integer
    Dim tabulation1 As String = ""
    Dim tabulation2 As String = ""
    Dim R As Integer = e.RowIndex   ' No cambiar R
 
    Dim variablex24 As Integer = DGVTicketConDetalles.Rows.Count()
    Dim variablex25 As Integer = DataGridView1.Rows.Count()
    If variablex24 = 1 And variablex25 = 0 Then
        m70.Fonts(New Font("Arial", 12, FontStyle.Bold), mb.TextColor.Red)
        m70.ShowBox("¡No existen tickets en la lista de visualización!
", mb.MStyle.ok, mb.FStyle.Information, "Sistema de Control 1.18.05")
    Else
        Try
            ElTicketID = CType(DataGridView1.Item("TicketId", R).Value, Integer)
 
            For L As Integer = DGVTicketConDetalles.Rows.Count - 1 To 0 Step -1  ' Buscar la primera linea
                If CType(DGVTicketConDetalles.Item("TicketId", L).Value, Integer) = ElTicketID Then
                    PrimeraLineaDelTicketID = L
                End If
            Next L
 
            For L As Integer = 0 To DGVTicketConDetalles.Rows.Count - 1  ' Buscar la ultima linea
                If CType(DGVTicketConDetalles.Item("TicketId", L).Value, Integer) = ElTicketID Then
                    UltimaLineaDelTicketID = L
                End If
            Next L
        Catch ex As Exception
            'do nothing
        End Try
 
        LBTicketParaImprimar.Items.Clear()
        ListBox1.Items.Clear()
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Dim variablex As Integer = DGVTicketConDetalles.Rows.Count()
        If variablex = 1 Then
            'Do nothing
        Else
 
            Dim Full_stringx As String = DGVTicketConDetalles.Item("Header", PrimeraLineaDelTicketID).Value
            If Full_stringx = "" Then
                Linea = "Nombre de su Negocio"
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)
            Else
                Dim Total_charsx As Integer = 0
                Dim Text_in_line1x As String = ""
                Dim Chars_in_line2x As Integer
                Dim Text_in_line2x As String
                Text_in_line1x = Full_stringx.Substring(0, 28)
 
                Total_charsx = Len(Full_stringx)
                If Total_charsx <= 28 Then
                    Linea = Full_stringx
                    LBTicketParaImprimar.Items.Add(Linea)
                    ListBox1.Items.Add(Linea)
                Else
                    Chars_in_line2x = Len(Full_stringx.Substring(28, Total_charsx - 28))
                    Text_in_line2x = Full_stringx.Substring(28, Chars_in_line2x)
                    Linea = Text_in_line1x
                    LBTicketParaImprimar.Items.Add(Linea)
                    ListBox1.Items.Add(Linea)
                    Linea = Text_in_line2x
                    LBTicketParaImprimar.Items.Add(Linea)
                    ListBox1.Items.Add(Linea)
                End If
            End If
        End If
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        If Main_Program.TextBox3.Text = "" Then
            Linea = "Telefono :"
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        Else
            Linea = "Telefono : " & Main_Program.TextBox3.Text
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        End If
 
        Dim variablex2 As Integer = DGVTicketConDetalles.Rows.Count()
        If variablex2 = 1 Then
            'Do nothing
        Else
            Linea = DGVTicketConDetalles.Item("Fecha", PrimeraLineaDelTicketID).Value
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        End If
 
        Linea = "Ticket # " & ElTicketID
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "______________________________"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        For L As Integer = PrimeraLineaDelTicketID To UltimaLineaDelTicketID
            Linea = DGVTicketConDetalles.Item("Cantidad", L).Value
            Cantidad_de = DGVTicketConDetalles.Item("Cantidad", L).Value.ToString
            Cantidad_de_Len = Len(Cantidad_de.ToString)
            If Cantidad_de_Len = 1 Then
                Linea &= "  "
            Else
                Linea &= " "
            End If
 
            Description = DGVTicketConDetalles.Item("Descripcion", L).Value
            Ldescription = Len(Description.ToString)
 
            If Ldescription <= 18 Then
                tabulation1 = StrDup(19 - Ldescription, ".")
                Linea &= DGVTicketConDetalles.Item("Descripcion", L).Value & tabulation1
            Else
                description_L1 = Description.ToString.Substring(0, 18)
                Chars_in_L2 = Len(Description.ToString.Substring(18, Ldescription - 18))
                description_L2 = Description.ToString.Substring(18, Chars_in_L2)
                tabulation1 = StrDup(19 - Chars_in_L2, ".")
                Linea &= description_L1
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)
                Linea = "   " & description_L2 & tabulation1
            End If
 
            'Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value
            'TotalTicket += CType(DGVTicketConDetalles.Item("Importe", L).Value.ToString.TrimStart("$"), Double)
            Dim ValoreTemp As String = DGVTicketConDetalles.Item("Importe", L).Value.ToString.Replace(",", "")
            TotalTicket += CType(ValoreTemp.TrimStart("$"), Double)
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
 
            'Agrega una linea en blanco entre items en el ticket
            Linea = " "
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        Next L
 
        Linea = "                     _________"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "               Total: $" & String.Format("{0:#0.00}", TotalTicket)
        'Linea = "               Total: $" & String.Format("{0:#0.00}", CType(TotalTicket, String))
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "______________________________"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = " Le Atendió:"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        If R < 0 Then
        Else
            Linea = " " & DataGridView1.Item("Footer", R).Value
            LBTicketParaImprimar.Items.Add(Linea)
            ListBox1.Items.Add(Linea)
        End If
 
        Linea = " "
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "  Gracias por su perferencia,"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = "  ¡Agradecemos su vista!"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
 
        Linea = ".
.
.
"
        LBTicketParaImprimar.Items.Add(Linea)
        ListBox1.Items.Add(Linea)
    End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 28/09/2019 22:17:04
Hola Matt,

Por favor, reactivas la linea 143 :
1
Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value

Este estaba un error (mi error) de ella eliminar, este es ella que pone el precie a cada linea de detalle.

Después, envias la foto con la ListBox, con el mismo ejemplo (250 + 1500).

Hasta pronto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 30/09/2019 03:40:50
Hola Sr. Phil.

Ya he agregado la linea:
1
Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value
y este es el resultado:


01

02
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 30/09/2019 12:41:19
Claro, este es la lectura del "Import" con un coma que es el problema.

Por favor, probas después reemplazado :
1
Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value
por
1
Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value.ToString.Replace(",", "")
y con las lineas :
1
2
Dim ValoreTemp As String = DGVTicketConDetalles.Item("Importe", L).Value.ToString.Replace(",", "")
TotalTicket += CType(ValoreTemp.TrimStart("$"), Double)

Gracias para enviar la foto con la ListBox, con el mismo ejemplo (250 + 1500).

Hasta pronto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 02/10/2019 05:30:33
Hola Sr. Phil!

Ya he reeplazado las lineas:

1
2
3
4
5
Linea &= "$" & DGVTicketConDetalles.Item("Importe", L).Value.ToString.Replace(",", "")
                Dim ValoreTemp As String = DGVTicketConDetalles.Item("Importe", L).Value.ToString.Replace(",", "")
                TotalTicket += CType(ValoreTemp.TrimStart("$"), Double)
                LBTicketParaImprimar.Items.Add(Linea)
                ListBox1.Items.Add(Linea)

Y obtengo el mismo resultado:

Captura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 02/10/2019 19:03:27
Gracias, reflexionaré y te comentaré ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 02/10/2019 23:49:06
Tengo suerte ...., he podido obtener el mismo error en mi sistema !
Voy poder trabajar ...

Los valores están correcta en la DB y en error cuando ellas están leído.

Continuaré mañana y te comentaré.

Buena noche

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 03/10/2019 06:36:31
Ok Sr. Phil, agradezco muchisimo su apoyo.
Estaré pendiente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 03/10/2019 13:33:08
Hola,

En Main_Program.vb, ± las lineas 164-165, como en la imagen, reemplazas
1
DataGridView1.Rows.Add("No aplica", "Producto", cb_productos.Text, "$" & FormatNumber(ComboBox3.Text, 2), np_cantidadP.Text, (1 - Desc_Real2) * 100 & "%", "$" & FormatNumber(Desc_Real2 * np_cantidadP.Text * ComboBox3.Text, 2), "No aplica", Today.ToShortDateString, "No aplica")
por
1
2
Dim Price As Double = CType(FormatNumber(Desc_Real2 * np_cantidadP.Text * ComboBox3.Text, 2), Double)
DataGridView1.Rows.Add("No aplica", "Producto", cb_productos.Text, "$" & FormatNumber(ComboBox3.Text, 2), np_cantidadP.Text, (1 - Desc_Real2) * 100 & "%", "$" & Price, "No aplica", Today.ToShortDateString, "No aplica")
y probas ...
Ticket01
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 03/10/2019 18:39:25
Muchas Gracias Sr. Phil... si funcionó con la corrección en la linea:
1
Dim Price As Double = CType(FormatNumber(Desc_Real2 * np_cantidadP.Text * ComboBox3.Text, 2), Double)

Aprecio mucho el tiempo que dedicó a mi codigo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 03/10/2019 21:49:17
Atencion ...
Necesario de cambiar las dos lineas, si no problemas más tarde ....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 05/10/2019 16:48:11
Sr. Phil, Que hay que cambiar en estas lineas?
hay que cambiar algo todavía?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 05/10/2019 18:18:23
Hola Matt,

Las dos buenas lineas estan :
1
2
Dim Price As Double = CType(FormatNumber(Desc_Real2 * np_cantidadP.Text * ComboBox3.Text, 2), Double)
DataGridView1.Rows.Add("No aplica", "Producto", cb_productos.Text, "$" & FormatNumber(ComboBox3.Text, 2), np_cantidadP.Text, (1 - Desc_Real2) * 100 & "%", "$" & Price, "No aplica", Today.ToShortDateString, "No aplica")
Tu mensaje anterior me autorizar a pensar que cambias una sola línea ...
Pero creo, que si cambias una sola línea no tienes buen resultado.

Ultimo mensaje estaba probablemente inútil

Buena tarde
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 08/10/2019 04:23:12
Hola Sr. Phil!

Disculpe, como controló los margenes izquierdo y derecho del espacio de impresión del ticket, no veo en que parte del código se controlan, principalmente el izquierdo.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 08/10/2019 17:04:29
Hola,

No sé si utiliza mis códigos (MisImpreciones.vb) para controlar la impresora.
Si lo utiliza, puede agregar un PageSetupDialog para controlar los margenes, por ejemplo : MiPageSetupDialog.Document = MiPrintDocument
(adjunto MisImpreciones con esta herramienta).

Pero, creo que no este es buena idea de utilizar PageSetupDialog porqué este es un “Dialog” de más antes la impresione.

Puede ajustar la página en el procedimiento MiPrintDocument_PrintPage. Este es ahí que es calculado el lugar de impresione con :
1
2
3
4
5
6
Dim Position As System.Drawing.PointF
Dim Rectangle As RectangleF
‘ …
Position = New PointF(e.MarginBounds.Left, e.MarginBounds.Top + (NumLigne * HauteurLigne))
Rectangle.Location = Position
‘ …

Por defecto, estos los valores máximas que están utilizado, pero puede cambiar, por ejemplo : e.MarginBounds.Left + 10 en lugar de e.MarginBounds.Left.

Pero creo que si imprima con un tipo de letra con todos los caracteres están de mismo tamaña, como Courier New, el mejor método es de poner caracteres blancos y otros en buen lugar en la línea para imprimir. Este método es bueno para todas manieras para imprimir.

Felicidades por tu foto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 15/10/2019 01:56:34
Hola Sr. Phil.

Gracias por el archivo MisImpresiones.zip ya resolvi el problema de los márgenes.

Lo que aún no logro resolver es imprimir el último ticket, tengo este codigo en la forma Reimpresion_de_Tickets, este codigo funciona correctamente en otras formas como en la forma gestor de tickets, pero en esta forma no funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
Private Sub PrintDocument4_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument4.PrintPage
        PrintDocument4.PrinterSettings.PrinterName = My.Settings.Impresora_en_Uso
        PrintDocument4.PrinterSettings.DefaultPageSettings.Landscape = False
        e.Graphics.DrawRectangle(Pens.White, 1, 1, 195, 400)
        e.Graphics.DrawRectangle(Pens.White, e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height)
 
        Dim startX As Integer = 0
        Dim startY As Integer = 1
        For x As Integer = 0 To LB_Visible.Items.Count - 1
            e.Graphics.DrawString(LB_Visible.Items(x).ToString, LB_Visible.Font, Brushes.Black, startX, startY)
            startY += LB_Visible.ItemHeight
        Next
 
        Dim ElTicketID2 As Integer
        Dim PrimeraLineaDelTicketID As Integer
        Dim UltimaLineaDelTicketID As Integer
        Dim Linea As String
        Dim TotalTicket As Double = 0
        Dim Cantidad_de As String
        Dim Cantidad_de_Len As Integer
        Dim Description As String
        Dim description_L1 As String = ""
        Dim description_L2 As String = ""
        Dim Chars_in_L2 As Integer
        Dim Ldescription As Integer
        Dim tabulation1 As String = ""
        Dim tabulation2 As String = ""
        Dim R As Integer = DGVTicketConDetalles2.CurrentRow.Index   ' No cambiar R
 
        Dim variablex24 As Integer = DGVTicketConDetalles2.Rows.Count()
        If variablex24 = 1 Then
            m78.Fonts(New Font("Arial", 12, FontStyle.Bold), mb.TextColor.Red)
            m78.ShowBox("¡No existen tickets ahora!
", mb.MStyle.ok, mb.FStyle.Information, "Sistema de Control 1.18.05")
        Else
            Try
                ' Buscar la primera linea
                ElTicketID2 = CType(DGVTicketConDetalles2.Item("TicketId", R).Value, Integer)
                For L As Integer = DGVTicketConDetalles2.Rows.Count - 1 To 0 Step -1
                    If CType(DGVTicketConDetalles2.Item("TicketId", L).Value, Integer) = ElTicketID2 Then
                        PrimeraLineaDelTicketID = L
                    End If
                Next L
                ' Buscar la ultima linea
                For L As Integer = 0 To DGVTicketConDetalles2.Rows.Count - 1
                    If CType(DGVTicketConDetalles2.Item("TicketId", L).Value, Integer) = ElTicketID2 Then
                        UltimaLineaDelTicketID = L
                    End If
                Next L
            Catch ex As Exception
                'do nothing
            End Try
 
            LB_Visible.Items.Clear()
 
            Linea = " "
            LB_Visible.Items.Add(Linea)
 
            Dim variablex As Integer = DGVTicketConDetalles2.Rows.Count()
            If variablex = 1 Then
                'Do nothing
            Else
                Dim Full_stringx As String = DGVTicketConDetalles2.Item("Header", PrimeraLineaDelTicketID).Value
                If Full_stringx = "" Then
                    Linea = "     *    *    *    *    *    "
                    LB_Visible.Items.Add(Linea)
                Else
                    Dim Total_charsx As Integer = 0
                    Dim Text_in_line1x As String = ""
                    Dim Chars_in_line2x As Integer
                    Dim Text_in_line2x As String
                    Text_in_line1x = Full_stringx.Substring(0, 30)
 
                    Total_charsx = Len(Full_stringx)
                    If Total_charsx <= 30 Then
                        Linea = Full_stringx
                        LB_Visible.Items.Add(Linea)
                    Else
                        Chars_in_line2x = Len(Full_stringx.Substring(30, Total_charsx - 30))
                        Text_in_line2x = Full_stringx.Substring(30, Chars_in_line2x)
 
                        Linea = Text_in_line1x
                        LB_Visible.Items.Add(Linea)
 
                        Linea = Text_in_line2x
                        LB_Visible.Items.Add(Linea)
                    End If
                End If
            End If
            Linea = " "
            LB_Visible.Items.Add(Linea)
 
            If Main_Program.TextBox3.Text = "" Then
                Linea = "Telefono:"
                LB_Visible.Items.Add(Linea)
            Else
                Linea = "Telefono: " & Main_Program.TextBox3.Text
                LB_Visible.Items.Add(Linea)
            End If
 
            Dim variablex2 As Integer = DGVTicketConDetalles2.Rows.Count()
            If variablex2 = 1 Then
                'Do nothing
            Else
                Linea = DGVTicketConDetalles2.Item("Fecha", PrimeraLineaDelTicketID).Value
                LB_Visible.Items.Add(Linea)
            End If
 
            Linea = "Ticket # " & ElTicketID2
            LB_Visible.Items.Add(Linea)
 
            Linea = "_______________________________"
            LB_Visible.Items.Add(Linea)
 
            For L As Integer = PrimeraLineaDelTicketID To UltimaLineaDelTicketID
                Linea = DGVTicketConDetalles2.Item("Cantidad", L).Value
                Cantidad_de = DGVTicketConDetalles2.Item("Cantidad", L).Value.ToString
                Cantidad_de_Len = Len(Cantidad_de.ToString)
                If Cantidad_de_Len = 1 Then
                    Linea &= "  "
                Else
                    Linea &= " "
                End If
 
                Description = DGVTicketConDetalles2.Item("Descripcion", L).Value
                Ldescription = Len(Description.ToString)
 
                If Ldescription <= 18 Then
                    tabulation1 = StrDup(19 - Ldescription, ".")
                    Linea &= DGVTicketConDetalles2.Item("Descripcion", L).Value & tabulation1
                Else
                    description_L1 = Description.ToString.Substring(0, 18)
                    Chars_in_L2 = Len(Description.ToString.Substring(18, Ldescription - 18))
                    description_L2 = Description.ToString.Substring(18, Chars_in_L2)
                    tabulation1 = StrDup(19 - Chars_in_L2, ".")
                    Linea &= description_L1
                    LB_Visible.Items.Add(Linea)
                    Linea = "   " & description_L2 & tabulation1
                End If
 
                Linea &= FormatCurrency(DGVTicketConDetalles2.Item("Importe", L).Value.ToString)
                Dim ValoreTemp As String = FormatCurrency(DGVTicketConDetalles2.Item("Importe", L).Value.ToString)
                TotalTicket += CType(ValoreTemp, Double)
                LB_Visible.Items.Add(Linea)
            Next L
 
            Linea = "                     _________"
            LB_Visible.Items.Add(Linea)
 
            Linea = "               Total: " & FormatCurrency(TotalTicket)
            LB_Visible.Items.Add(Linea)
 
            Dim Efe As String = DGVTicketConDetalles2.Item("Efectivo", PrimeraLineaDelTicketID).Value
            Linea = "            Efectivo: " & FormatCurrency(Efe)
            LB_Visible.Items.Add(Linea)
 
            Dim Camb As String = DGVTicketConDetalles2.Item("Cambio", PrimeraLineaDelTicketID).Value
            Linea = "              Cambio: " & FormatCurrency(Camb)
            LB_Visible.Items.Add(Linea)
 
            Linea = "_______________________________"
            LB_Visible.Items.Add(Linea)
 
            Linea = " "
            LB_Visible.Items.Add(Linea)
 
            Linea = "   Le Atendió:"
            LB_Visible.Items.Add(Linea)
 
            If R < 0 Then
            Else
                Linea = " " & DGVTicketConDetalles2.Item("Footer", R).Value
                LB_Visible.Items.Add(Linea)
            End If
 
            Linea = " "
            LB_Visible.Items.Add(Linea)
 
            Linea = "  Gracias por su perferencia,"
            LB_Visible.Items.Add(Linea)
 
            Linea = "    ¡Agradecemos su vista!"
            LB_Visible.Items.Add(Linea)
 
            Linea = "              .               "
            LB_Visible.Items.Add(Linea)
            Linea = "              .               "
            LB_Visible.Items.Add(Linea)
            Linea = "              .               "
            LB_Visible.Items.Add(Linea)
        End If
 
    End Sub

Y este otro codigo tambien en el botón "Reimprimir":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim Conection_11 As SQLiteConnection = New SQLiteConnection("Data Source=C:\SystemWin\DB2\Owner.db;Version=3;")
        If (Conection_11.State = ConnectionState.Closed) Then Conection_11.Open()
        Dim Data_Adapter2 As SQLiteDataAdapter
        Dim Data_Set2 As New DataSet
 
        'Para leer el numero del ultimo lo ticket
        Dim ComandoSQL As SQLiteCommand = New SQLiteCommand("SELECT Max(TicketId) FROM Ticket", Conection_11)
        Dim ElTicketID As Integer = ComandoSQL.ExecuteScalar()
 
        'Para obtener los detalles del último lo ticket
        Data_Adapter2 = New SQLiteDataAdapter("SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.TicketId = TicketContents.TicketId WHERE  Ticket.TicketId = '" & ElTicketID & " ' ", Conection_11)
        Dim Data_Table2 = New DataTable
        Data_Adapter2.FillSchema(Data_Table2, SchemaType.Source)
        Data_Adapter2.Fill(Data_Table2)
        Data_Table2.TableName = "TicketConDetalle2"
        Data_Set2.Tables.Add(Data_Table2)
        DGVTicketConDetalles2.DataSource = Data_Set2.Tables("TicketConDetalle2")
 
        '__________________________________________________________________________
        PrintPreviewDialog4.Document = PrintDocument4
        PrintDocument4.DefaultPageSettings.PaperSize = New PaperSize("Receipt Paper", 195, 400)
        Dim variablexy As Integer = DGVTicketConDetalles2.Rows.Count()
        If variablexy = 0 Then
            m79.Fonts(New Font("Arial", 12, FontStyle.Bold), mb.TextColor.Red)
            m79.ShowBox("¡No existen tickets!
", mb.MStyle.ok, mb.FStyle.Information, "Sistema de Control 1.18.05")
        Else
             LB_Visible.Font = New System.Drawing.Font("Courier New", 7, FontStyle.Bold)
            PrintPreviewDialog4.PrintPreviewControl.Zoom = 1.8
            PrintPreviewDialog4.Document = PrintDocument4
            PrintPreviewDialog4.ShowDialog()
            PrintDocument4.Print()
        End If
 
        Data_Adapter2.Dispose()
        Conection_11.Close()
    End Sub

Y esto es lo que obtengo al ejecutar el programa:

Captura

El datagridview si contiene toda la información del último ticket, solo que no puedo mostrarla en el ListBox.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 15/10/2019 04:19:23
Olvide decir que no quiero hacer un click en el DGV, solo quiero que se cargue el ListBox automáticamente cuando hago abro la forma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 15/10/2019 14:55:48
Hola Matt,

En Reimpresion_de_Tickets.vb, cuando Click para abrir Config_Gestor_de_Tickets.vb, lees todos los tickets y llenas el DGV Config_Gestor_de_Tickets.DataGridView1 con una sola línea por ticket y el DGV Config_Gestor_de_Tickets.DGVTicketConDetalles con todos los detalles de los tickets.

En Config_Gestor_de_Tickets.vb, muestras DataGridView1 para la elección del ticket para imprimir y cuando Click en el DGV DataGridView1, llenas el ListBox con los valores leído en DGV DGVTicketConDetalles.

Creo que este funciona.

En tu proyecto existen varios lugares de impresión. No es normal, el código para imprimir debe ser único para todas partes del programa. Creo que debes reorganizar todo tu programa. Este es trabajo grande y no quiero lo hacer. Conoces bien tu código, este trabajo es más fácil para tu.

Este es posible de llenar los DGV de Config_Gestor_de_Tickets a partir de varios formularios, también a partir de Main_Program.vb. Solamente es necesario que todos tickets están escribido en la DB. Para imprimir el último ticket, debe ser escribido en la DB.

Tienes el código para leer el último ticket en la DB. Entonces, es posible de llenar el DGV Config_Gestor_de_Tickets.DataGridView1 con LA sola línea del ultimo ticket y el DGV Config_Gestor_de_Tickets.DGVTicketConDetalles con todas las detalles del ultimo ticket.

El código que es ejecutado cuando Click una línea de DataGridView1 puede ser copiar en un procedimiento para llenar el ListBox. Diferencia, cuando Click una línea de DataGridView1, lees el número del ticket en DataGridView1 para leer los detalles de este ticket en DGVTicketConDetalles. Cuando vienes del último ticket, solo este ticket es contendido en el DGV DGVTicketConDetalles.

También piensas que si un procedimiento de botón es Friend o Public, este botón puede ser llamar de otro formulario, ejemplo, si Button6 en Config_Gestor_de_Tickets es escribido como este :
1
Friend Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
Entonces es posible click este botón con Main_Program : Config_Gestor_de_Tickets.Button6(Me, Nothing)

Tienes todas herramientas ...

Buen trabajo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 16/10/2019 02:13:48
Hola Sr. Phill!

Ya pude hacer que el listBox se llene con los datos correctos del ticket.

Estos datos llenan el listBox únicamente si abro un "PrintPreviewDialog", si yo no abro un "PrintPreviewDialog", en listBox no se llena.
Como puedo llenar el listBox sin tener que abrir un "PrintPreviewDialog"? quisiera llenar el ListBox automáticamente al momento de cargar el formulario "Reimpresion_de_Tickets".

En esta imagen se muestra lo que pasa cuando hago click en el botón "Reimprimir" ... se abre el "PrintPreviewDialog" y se llena el ListBox.

Captura

Estos son los codigos que tengo actualmente en el formulario "Reimpresion_de_Tickets":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Reimpresion_de_Tickets_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Conection_11 As SQLiteConnection = New SQLiteConnection("Data Source=C:\SystemWin\DB2\Owner.db;Version=3;")
        If (Conection_11.State = ConnectionState.Closed) Then Conection_11.Open()
        Dim Data_Adapter2 As SQLiteDataAdapter
        Dim Data_Set2 As New DataSet
 
        'Para leer el numero del ultimo lo ticket
        Dim ComandoSQL As SQLiteCommand = New SQLiteCommand("SELECT Max(TicketId) FROM Ticket", Conection_11)
        Try
            Dim ElTicketID As Integer = ComandoSQL.ExecuteScalar()
            'Para btener los detalles del ultimo lo ticket
            Data_Adapter2 = New SQLiteDataAdapter("SELECT TicketContents.*, Ticket.* FROM Ticket INNER JOIN TicketContents ON Ticket.TicketId = TicketContents.TicketId WHERE  Ticket.TicketId = '" & ElTicketID & " ' ", Conection_11)
            Dim Data_Table2 = New DataTable
            Data_Adapter2.FillSchema(Data_Table2, SchemaType.Source)
            Data_Adapter2.Fill(Data_Table2)
            Data_Table2.TableName = "TicketConDetalles"
            Data_Set2.Tables.Add(Data_Table2)
            DGVTicketConDetalles2.DataSource = Data_Set2.Tables("TicketConDetalles")
            Data_Adapter2.Dispose()
            Conection_11.Close()
        Catch ex As Exception
            MsgBox("No existe el ultimo ticket")
            Me.Close()
        End Try
    End Sub

Boton [ Imprimir ultimo ticket ].
1
2
3
4
5
6
7
8
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        PrintPreviewDialog4.Document = PrintDocument4
        PrintDocument4.DefaultPageSettings.PaperSize = New PaperSize("Receipt Paper", 195, 400)
        PrintPreviewDialog4.PrintPreviewControl.Zoom = 1.8
        PrintPreviewDialog4.Document = PrintDocument4
        PrintPreviewDialog4.ShowDialog()
        'PrintDocument4.Print()
    End Sub

Agradezco muchisimo su ayuda y orientación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 16/10/2019 15:59:20
Hola,

Tienes PrintPreviewDialog por que lo llamas ..., en las tres primeras lineas del procedimiento Button3_Click(sender As Object, e As EventArgs) Handles btn_cobrar.Click. Puedes poner estas líneas en comentarios por no mostrar un Preview inútil y en Reimpresion, el ticket existe.

Sobre el procedimiento Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click en tu mensaje, puedes poner las líneas Preview en comentario.

Si Preview, imprimir con clic el botón del Preview.
Si no Preview, imprimir con PrintDocument.Print() (±).

Creo que imprimir el último ticket es hacer en el código todas operaciones que hacemos manualmente para ir en reimpression y elegir el último ticket. Quizá no copiar todo el código, pero elegir y cliquear por programación.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Matt (75 intervenciones) el 20/10/2019 19:58:21
Hola Sr. Phil

¡El problema del Preview, Lo he resuelto! agregando un boton:
Captura

Boton [Ver]
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    Try
        Evento_PrintDocument.PrinterSettings.PrinterName = My.Settings.Impresora_en_Uso
        Evento_PrintDocument.PrinterSettings.DefaultPageSettings.Landscape = False
        Evento_PrintDocument.DefaultPageSettings.PaperSize = New PaperSize("Receipt Paper", 200, 400)
        PrintPreviewDialog.Document = Evento_PrintDocument
        PrintPreviewDialog.PrintPreviewControl.Zoom = 1.8
        PrintPreviewDialog.Show()
    Catch ex As Exception
       msgbox(ex.message)
    End Try
End Sub

Boton [Imprimir]
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Evento_PrintDocument.PrinterSettings.PrinterName = My.Settings.Impresora_en_Uso
        Evento_PrintDocument.PrinterSettings.DefaultPageSettings.Landscape = False
        Evento_PrintDocument.DefaultPageSettings.PaperSize = New PaperSize("Receipt Paper", 208, 400)
        Evento_PrintDocument.Print()
        PrintPreviewDialog.Close()
        Me.Close()
    Catch ex As Exception
      msgbox(ex.message)
    End Try
End Sub

El el Evento_PrintDocument (constructor del ticket) estoy usando la fuente ("Courier New", 7) ... quiero mostrar la siguiente línea con un tamaño de fuente más pequeña ("Courier New", 4) ... tengo el siguiente código, pero no funciona... ya que todo se sigue imprimiendo en ("Courier New", 7).

1
2
3
4
5
6
Dim Letra_Diminuta As System.Drawing.Font = New Font("Courier New", 5, FontStyle.Bold)
Using Letra_Diminuta
    Linea = "  Sistema de Control V1.18.05"
    LBTicketParaImprimar.Items.Add(Linea)
    ListBox1.Items.Add(Linea)
End Using

ya busque en San Google y no he tenido suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como guardar el contenido de un ticket en una base de datos?

Publicado por Phil Rob (1546 intervenciones) el 20/10/2019 22:05:45
Hola Matt,

En el procedimiento Button1_Click(), la línea PrintPreviewDialog. Close() es probablemente inútil.

La tamaña de los caracteres no debe ser ajustar para la ListBox (excepto para todas las lineas). Pode ser ajustar para cada linea en el procedimiento _PrintPage, ante el codigo e.DrawString( ... ).

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar