Visual Basic.NET - Tarifa en función Kilos

 
Vista:

Tarifa en función Kilos

Publicado por Beatriz (38 intervenciones) el 19/08/2007 21:56:32
Buenas tardes a todos, les voy a contar mi dilema, a ver si me pueden echar una mano, o mostrar algún enlace, ya que por más que he buscado no he encontrado algún ejemplo que me oriente:

Se trata de una aplicación de transporte: al añadir una expedición, se indican los kilos de la mercancía, y el destino, un combo capital / pueblos.
La tabla en access la creé con los siguientes campos: Dekilos, Akilos, TarifaCapital, TarifaPueblos, IdTarifa.
La duda que tengo es como aplicar la tarifa en función de los kilos, ya que haría un select case si no para escoger entre el campo TarifaCapital y TarifaPueblos.
Con access conseguí un ejemplo similar con Dlookup, pero no sé como aplicarlo ahora.

Muchas gracias por vuestra atención. Saludos.
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

RE:Tarifa en función Kilos PARTE 1

Publicado por Harold V. (411 intervenciones) el 19/08/2007 23:08:39
Hola aqui te envio algo parecido que hice en VB2005, se trata de asignar un impuesto por el transporte dependiendo de los kilos que lleva o por cierta cantidad de euros.

No te puedo enviar toda la aplicacion pq tiene como 80 forms o mas me parece...

Estudialo bien el codigo, te ayudaraaaaaaa.

Para hacer eso yo tengo estas 4 tablas que me permiten ingresar tanto precios para
determinados kilos o precio fijo para determiandos kilos

Nombretabla: campo1,campo2, .....

Escalados: IdEscalado,Esclado

1 Kilos
2 Importe


ZonasTTS: IdzonaTTS,Cuidad

1 Barcelona


ZonaTTSEsclado: IdZonaEscalado, IdEscaldo,IdZonaTTS

1 1 1
2 1 1
3 2 1
4 2 1


DetalleEscalado: IdDEscalado,IdEscalado,IdZonaTTS,HastaKg,HastaEuro,Importe

1 1 1 60 0 3,00
2 1 1 200 0 15,00
3 2 1 0 200 10,00
4 2 1 0 500 20,00

'Esta tabla DetalleEscaldo tiene: hastakg y hasta Euros , un ejemplo.........

Hasta 60 kg ---> 3,0 0 (pq cero? = xq utilizo kilos no euros)
hasta 200 kg ---> 15,00 0

Hasta 200 Euros ---->0 10,00 (pq cero? = xq utilizo euros no kilos)
Hasta 500 Euros ---->0 20,00


ELcodigo...............


Dim DsetDetallesz As New DataSet
Dim adpZttsEscalado As New SqlDataAdapter
Dim DsetZttsEscalado As New DataSet
Dim cmdzonattsesc As New SqlCommand("Select * from ZonaTTSEscalado", Con)

Dim DsetZtts As New DataSet
Dim DsetEscalados As New DataSet
Dim DsetProvincias As New DataSet

Dim IdDetalle As Int32

Private Sub frmZonas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'En los dataset Siguientes cargo tos los campos de sus tablas....
'Si por alli ves una llamada a RefrescarDatasetTABLA, solo referesco los datos
'para q me actualice el datagrid al momento y vea los cambios.....
'No incluyo ese procedimiento.......


cmdGrabar.Enabled = False
cmdActualizar.Enabled = False
cmdCancelar.Enabled = False

cboCiudades.DataSource = DsetProvincias.Tables(0)
cboCiudades.DisplayMember = "Provincia"
cboCiudades.ValueMember = "IdProvincia"
cboCiudades.SelectedIndex = -1

cboEscalados.DataSource = DsetEscalados.Tables(0)
cboEscalados.DisplayMember = "Escalado"
cboEscalados.ValueMember = "IdEscalado"
cboEscalados.SelectedIndex = -1

cboCiudades.Focus()
dgvZonas.DataSource = DsetZtts.Tables(0)
lblRows.Text = "Item(s) " & DsetZtts.Tables(0).Rows.Count
dgvZonas.Columns(0).Width = 70
dgvZonas.Columns(1).Width = 570

Con.Open()

cmdzonattsesc.ExecuteNonQuery()
adpZttsEscalado.SelectCommand = cmdzonattsesc
adpZttsEscalado.Fill(DsetZttsEscalado, "ZonaTTSEscalado")
Con.Close()

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

RE:Tarifa en función Kilos PARTE 2

Publicado por Harold V. (411 intervenciones) el 19/08/2007 23:09:42
Private Sub cboEscalados_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboEscalados.SelectionChangeCommitted

Select Case cboEscalados.SelectedIndex
Case 1
gpbKilos.Enabled = True
Me.txtHasta.Text = ""
lblMedida.Text = "€"
Me.txtHasta.Focus()
Case 0 ' kilos
gpbKilos.Enabled = True
lblMedida.Text = "Kg"
Me.txtImporte.Text = ""
Me.txtHasta.Focus()
End Select

End Sub


Private Sub cmdGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGrabar.Click
verificar = False
verificar = ControlCtl(pnlZonas, Me)
If verificar = True Then
txtImporte.Enabled = True
MessageBox.Show("Existen datos que debe proporcionar para continuar", "Verificación de Datos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
txtImporte.Enabled = False
''''''''''

''''''
Dim CommZtEsIns As New SqlCommand
Dim CommDeeIns As New SqlCommand
Commztesins.connection = Con
CommDeeIns.Connection = Con

Try
Con.Open()
'Si la ciudad es la misma
Dim x As Integer
Dim indicezona As Int32
For x = 0 To dgvZonas.Rows.Count - 1
Dim xciudad As String = dgvZonas.Item(1, x).Value
If cboCiudades.Text = dgvZonas.Item(1, x).Value Then
indicezona = (dgvZonas.Item(0, x).Value)
'Grabamos en ZonaTTsEscalado
CommZtEsIns.CommandText = "Insert into ZonaTTSEscalado (IdEscalado,IdZonaTTS) values (@IdEscalado,@IdZonaTTS)"
CommZtEsIns.Parameters.Add("@IdEscalado", SqlDbType.Int).Value = cboEscalados.SelectedValue
CommZtEsIns.Parameters.Add("@IdZonaTTS", SqlDbType.Int).Value = indicezona
CommZtEsIns.ExecuteNonQuery()
adpZttsEscalado.InsertCommand = CommZtEsIns
adpZttsEscalado.Update(DsetZttsEscalado, "ZonaTTSEscalado")
'Grabamos en DetalleEscalado
CommDeeIns.CommandText = "Insert into DetalleEscalado (IdEscalado,IdZonaTTs,HastaKg,HastaEuro,Importe) values (@IdEscalado,@IdZonaTTs,@HastaKg,@HastaEuro,@Importe)"
CommDeeIns.Parameters.Add("@IdEscalado", SqlDbType.Int).Value = cboEscalados.SelectedValue
CommDeeIns.Parameters.Add("@IdZonaTTs", SqlDbType.Int).Value = indicezona
If cboEscalados.SelectedIndex = 0 Then 'Kilos
CommDeeIns.Parameters.Add("@HastaKg", SqlDbType.Decimal, 8).Value = txtHasta.Text
CommDeeIns.Parameters.Add("@HastaEuro", SqlDbType.Decimal, 8).Value = CDbl("0,00")
Else
CommDeeIns.Parameters.Add("@HastaKg", SqlDbType.Decimal, 8).Value = CDbl("0,00")
CommDeeIns.Parameters.Add("@HastaEuro", SqlDbType.Decimal, 8).Value = txtHasta.Text
End If
CommDeeIns.Parameters.Add("@Importe", SqlDbType.Decimal, 8).Value = CDbl(txtImporte.Text)
CommDeeIns.ExecuteNonQuery()
AdpDetalle.InsertCommand = CommDeeIns
'Adpdetalle.UpdateCommand
GoTo salida
End If
Next

'Grabamos en ZonasTTS (ciudad)
Dim CommZttsIns As New SqlCommand("Insert into ZonasTTS (Ciudad) values (@Ciudad)", Con)
CommZttsIns.Parameters.Add("@Ciudad", SqlDbType.VarChar).Value = cboCiudades.Text
CommZttsIns.ExecuteNonQuery()
AdpZonas.InsertCommand = CommZttsIns
AdpZonas.Update(DsetZtts, "ZonasTTS")
CommZttsIns.Parameters.Clear()

'BUSCAMOS EL INDICE DE LA ULTIMA ZONA AÑADIDA
Dim COMMBUSCINDICE As New SqlCommand("Select * from ZonasTTS", Con)

'Grabamos en ZonaTTsEscalado
CommZtEsIns.CommandText = "Insert into ZonaTTSEscalado (IdEscalado,IdZonaTTS) values (@IdEscalado,@IdZonaTTS)"
CommZtEsIns.Parameters.Add("@IdEscalado", SqlDbType.Int).Value = cboEscalados.SelectedValue
CommZtEsIns.Parameters.Add("@IdZonaTTS", SqlDbType.Int).Value = txtCodigo.Text
CommZtEsIns.ExecuteNonQuery()
adpZttsEscalado.InsertCommand = CommZtEsIns
adpZttsEscalado.Update(DsetZttsEscalado, "ZonaTTSEscalado")

'Grabamos en DetalleEscalado
CommDeeIns.CommandText = "Insert into DetalleEscalado (IdEscalado,IdZonaTTs,HastaKg,HastaEuro,Importe) values (@IdEscalado,@IdZonaTTs,@HastaKg,@HastaEuro,@Importe)"
CommDeeIns.Parameters.Add("@IdEscalado", SqlDbType.Int).Value = cboEscalados.SelectedValue
CommDeeIns.Parameters.Add("@IdZonaTTs", SqlDbType.Int).Value = txtCodigo.Text
If cboEscalados.SelectedIndex = 0 Then 'Kilos
CommDeeIns.Parameters.Add("@HastaKg", SqlDbType.Decimal, 8).Value = txtHasta.Text
CommDeeIns.Parameters.Add("@HastaEuro", SqlDbType.Decimal, 8).Value = CDbl("0,00")
Else
CommDeeIns.Parameters.Add("@HastaKg", SqlDbType.Decimal, 8).Value = CDbl("0,00")
CommDeeIns.Parameters.Add("@HastaEuro", SqlDbType.Decimal, 8).Value = txtHasta.Text
End If
CommDeeIns.Parameters.Add("@Importe", SqlDbType.Decimal, 8).Value = CDbl(txtImporte.Text)
CommDeeIns.ExecuteNonQuery()
AdpDetalle.InsertCommand = CommDeeIns
'Adpdetalle.UpdateCommand
GoTo salida
salida:
MessageBox.Show("La Zona ha sido guardada correctamente", "Zonas y Tarifas", MessageBoxButtons.OK, MessageBoxIcon.Information)
CommDeeIns.Parameters.Clear()

CommZtEsIns.Parameters.Clear()
cmdNuevo.PerformClick()
Catch ex As Exception
ex.Data.Clear()
Finally
Con.Close()
End Try

Call LimpiaControles(Me)
Call enableControls(Me, False)
cmdGrabar.Enabled = False
cmdActualizar.Enabled = False
cmdCancelar.Enabled = False
Call RefrescarDatasetZonas()
editando = False
txtImporte.Text = ""
txtHasta.Text = ""
If dgvZonas.Rows.Count > 0 Then
MDI_Application.tstlTexto.Text = "Edición de Zonas ---> Haga doble click en alguna zona para editarla!"
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

RE:Tarifa en función Kilos PARTE 3

Publicado por Harold V. (411 intervenciones) el 19/08/2007 23:10:30
Private Sub cboCiudades_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboCiudades.SelectionChangeCommitted
cmdGrabar.Enabled = True
End Sub

Private Sub txtHasta_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtHasta.LostFocus
If editando = False Then
If cboCiudades.Text = "" Then
cboCiudades.Focus()
ElseIf txtHasta.TextLength = 0 Then
txtHasta.Focus()
Exit Sub
End If
If dgvZonas.Rows.Count >= 1 Then
If dgvZonas.Item(1, Fila).Value = cboCiudades.Text Then
'Si es la misma ciudad
'buscar si ya ha sido grabado
If cboEscalados.Text = "Kilos" Then
If dgvDetalles.Rows.Count > 0 Then
For x As Int32 = 0 To dgvDetalles.Rows.Count - 1
If dgvDetalles.Item(2, x).Value = txtHasta.Text Then
MessageBox.Show("Ya existe una tarifa de Kilos con la especificación " & txtHasta.Text, "Zonas", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtHasta.Focus()
End If
Next
End If
Else
If dgvDetalles.Rows.Count > 0 Then
For x As Int32 = 0 To dgvDetalles.Rows.Count - 1
If dgvDetalles.Item(3, x).Value = txtHasta.Text Then
MessageBox.Show("Ya existe una tarifa de Importe con la especificación " & txtHasta.Text, "Zonas", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtHasta.Focus()
End If
Next
End If
End If
Else
txtImporte.Enabled = True
txtImporte.Focus()
End If
Else
txtImporte.Enabled = True
txtImporte.Focus()

End If

End If
End Sub

Private Sub dgvZonas_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvZonas.CellClick
'If e.RowIndex >= 0 Then
Con.Open()
Try
Fila = e.RowIndex
Dim commDetalle As New SqlCommand("select de.IdDescalado,e.escalado as Ecalado,de.Hastakg as [Hasta en Kg] ,de.hastaEuro as [Hasta en €],de.importe as Importe from detalleescalado de,escalados e where e.idescalado = de.idescalado And de.idzonatts=" & dgvZonas.Item(0, e.RowIndex).Value, Con)
commDetalle.ExecuteNonQuery()
AdpDetalle.SelectCommand = commDetalle
DsetDetallesz.Clear()
AdpDetalle.Fill(DsetDetallesz, "DetalleEscalado")
dgvDetalles.DataSource = DsetDetallesz.Tables(0)
dgvDetalles.Columns(0).Visible = False
lblRowsD.Text = DsetDetallesz.Tables(0).Rows.Count & " Item(s)"
Catch ex As Exception
ex.Data.Clear()
Finally
Con.Close()
End Try
'End If
End Sub


Private Sub dgvDetalles_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvDetalles.CellDoubleClick
If e.RowIndex >= 0 And e.ColumnIndex >= 0 Then
If editando = True Then Exit Sub
Call enableControls(Me, True)
cmdActualizar.Enabled = True
cmdCancelar.Enabled = True
cmdGrabar.Enabled = False
cmdNuevo.Enabled = False
cboCiudades.Enabled = False
txtImporte.Enabled = True
cboCiudades.Text = dgvZonas.Item(1, Fila).Value
txtCodigo.Text = ""
IdDetalle = dgvDetalles.Item(0, e.RowIndex).Value
txtImporte.Text = dgvDetalles.Item(4, e.RowIndex).Value
If dgvDetalles.Item(1, e.RowIndex).Value.ToString.ToUpper = "Kilos".ToUpper Then
cboEscalados.SelectedValue = 1
txtHasta.Text = dgvDetalles.Item(2, e.RowIndex).Value
ElseIf dgvDetalles.Item(1, e.RowIndex).Value.ToString.ToUpper = "Importe".ToUpper Then
cboEscalados.SelectedValue = 2
txtHasta.Text = dgvDetalles.Item(3, e.RowIndex).Value
End If
editando = True
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

RE:Tarifa en función Kilos PARTE 3

Publicado por Beatriz (38 intervenciones) el 21/08/2007 17:35:22
Muchísimas gracias Harold por las molestias.En cuanto llegue a casa le echo un vistazo más profundamente (toy en el curro), aunque por lo que veo resuelve mi problema de sobra. De nuevo, muchas 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

RE:Tarifa en función Kilos PARTE 3

Publicado por Beatriz (38 intervenciones) el 21/08/2007 19:52:10
He estado revisando el código y no me aclaro, entre que soy novata, y me he centrado en modo desconectado no entiendo gran cosa. No obstante seguiré revisando a ver si me aclaro.
Si alguien supiese como, a partir de la introducción de los kilos por parte del usuario, conocer la tarifa que corresponde en modo desconectado se lo agradecería.
Muchas gracias a todos, y en especial a ti Harold, a ver si consultando algún libro me aclaro.
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