none
Como sumar tablas y mostrar resultado en otra RRS feed

  • Pregunta

  • Hola a todos:

    Tengo una tabla que tiene el valor de estas son 4 tablas igual formato pero el contenido es diferente por una condición (Zona)

    TablaU1

    Zona,Codigo, Descripcion, Precio, Cantidad 

    TablaU2

    Zona,Codigo, Descripcion, Precio, Cantidad 

    TablaU3

    Zona,Codigo, Descripcion, Precio, Cantidad , Subtotal

    Necesito en otra tabla Factura tenga el mismo formato a diferencia que el precio sera el mismo la cantidad sera la suma de las 3 tablas no vertical sino horizontal ya que es segun codigo y zona, al final obtener un subtotal Precio * Cantidad(total) 

    Alguna idea por favor

    No me responden ninguna pregunta que hago tan dificil estara para sus niveles?

    sábado, 30 de mayo de 2020 18:05

Respuestas

  • Hola:
    Gracias a la imagen donde se ve los datos de entrada y de salida (incompletos)
    En un Form como el de la imagen


    Copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Public Class Form5
        Private ldtUrbano As New DataTable()
        Private ldtRural As New DataTable()
        Private ldtUrbanoRural As New DataTable()
        Private ldtResultado As New DataTable()
        Private Sub Form5_Load(sender As Object, e As EventArgs) Handles Me.Load
            DataGridView1.AllowUserToAddRows = False
            DataGridView2.AllowUserToAddRows = False
            DataGridView3.AllowUserToAddRows = False
            DataGridView4.AllowUserToAddRows = False
            '
            Dim lDataColumn As DataColumn
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtUrbano.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("descripcion", GetType(String))
            ldtUrbano.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_u", GetType(Decimal))
            ldtUrbano.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad", GetType(Integer))
            ldtUrbano.Columns.Add(lDataColumn)
            Dim lData1 As DataRow
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "101CN01"
            lData1.Item("descripcion") = "Aereo Monofasico"
            lData1.Item("precio_u") = 60.08
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "101CN01"
            lData1.Item("descripcion") = "Aereo Monofasico"
            lData1.Item("precio_u") = 60.08
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "101CN03"
            lData1.Item("descripcion") = "Subterraneo Monofasico"
            lData1.Item("precio_u") = 60.08
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "103AC08"
            lData1.Item("descripcion") = "Digitacion de Act"
            lData1.Item("precio_u") = 0.69
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "103AC08"
            lData1.Item("descripcion") = "Digitacion de Act"
            lData1.Item("precio_u") = 0.69
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            DataGridView1.DataSource = ldtUrbano
            '
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("descripcion", GetType(String))
            ldtRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_r", GetType(Decimal))
            ldtRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad", GetType(Integer))
            ldtRural.Columns.Add(lDataColumn)
            '
            lData1 = ldtRural.NewRow
            lData1.Item("codigo") = "101CN01"
            lData1.Item("descripcion") = "Aereo Monofasico"
            lData1.Item("precio_r") = 88.54
            lData1.Item("cantidad") = 1
            ldtRural.Rows.Add(lData1)
            lData1 = ldtRural.NewRow
            lData1.Item("codigo") = "103AC01"
            lData1.Item("descripcion") = "Reubicacion de"
            lData1.Item("precio_r") = 65.78
            lData1.Item("cantidad") = 1
            ldtRural.Rows.Add(lData1)
            lData1 = ldtRural.NewRow
            lData1.Item("codigo") = "103AC08"
            lData1.Item("descripcion") = "Digitacion de Act"
            lData1.Item("precio_r") = 1.01
            lData1.Item("cantidad") = 1
            ldtRural.Rows.Add(lData1)
            lData1 = ldtRural.NewRow
            DataGridView2.DataSource = ldtRural
            '
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("descripcion", GetType(String))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_ur", GetType(Decimal))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad", GetType(Integer))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            DataGridView3.DataSource = ldtUrbanoRural
            '
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            Dim primarykey(0) As DataColumn
            primarykey(0) = ldtResultado.Columns("codigo")
            ldtResultado.PrimaryKey = primarykey
            lDataColumn = New DataColumn("Actividad", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_urbano", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_urbanorural", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_rural", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad_urbano", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad_urbanorural", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad_rural", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("subtotal", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            DataGridView4.DataSource = ldtResultado
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim CodigoMemo As String = "PRIMERO"
            Dim Cantidad As Integer = 0
            'Dim Resultado As Resultado
            Dim FilaResultado As DataRow = Nothing
            'Ciclo Urbano
            For Each Fila As DataRow In ldtUrbano.Rows
                If CodigoMemo = Convert.ToString(Fila.Item("codigo")) Then
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaResultado.SetField(Of Integer)("cantidad_urbano", Cantidad)
                Else
                    CodigoMemo = Convert.ToString(Fila.Item("codigo"))
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = Fila.Item("precio_u")
                    FilaResultado.Item("precio_urbanorural") = 0
                    FilaResultado.Item("precio_rural") = 0
                    FilaResultado.Item("cantidad_urbano") = Fila.Item("cantidad")
                    FilaResultado.Item("cantidad_urbanorural") = 0
                    FilaResultado.Item("cantidad_rural") = 0
                    FilaResultado.Item("subtotal") = 0
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo Rural
            Cantidad = 0
            Dim FilaBuscada As DataRow
            For Each Fila As DataRow In ldtRural.Rows
                FilaBuscada = Buscar(Convert.ToString(Fila.Item("codigo")))
                If FilaBuscada IsNot Nothing Then
                    'Asigna en la fila correcta
                    FilaBuscada.SetField(Of Decimal)("precio_rural", Convert.ToDecimal(Fila.Item("precio_r")))
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaBuscada.SetField(Of Integer)("cantidad_rural", Cantidad)
                Else
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = 0
                    FilaResultado.Item("precio_rural") = Fila.Item("precio_r")
                    FilaResultado.Item("precio_urbanorural") = 0
                    FilaResultado.Item("cantidad_urbano") = 0
                    FilaResultado.Item("cantidad_rural") = Fila.Item("cantidad")
                    FilaResultado.Item("cantidad_urbanorural") = 0
                    FilaResultado.Item("subtotal") = 0
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo UrbanoRural
            Cantidad = 0
            For Each Fila As DataRow In ldtUrbanoRural.Rows
                FilaBuscada = Buscar(Convert.ToString(Fila.Item("codigo")))
                If FilaBuscada IsNot Nothing Then
                    FilaBuscada.SetField(Of Decimal)("precio_urbanorural", Convert.ToDecimal(Fila.Item("precio_ur")))
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaBuscada.SetField(Of Integer)("cantidad_urbanorural", Cantidad)
                Else
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = 0
                    FilaResultado.Item("precio_rural") = 0
                    FilaResultado.Item("precio_urbanorural") = Fila.Item("precio_ur")
                    FilaResultado.Item("cantidad_urbano") = 0
                    FilaResultado.Item("cantidad_rural") = 0
                    FilaResultado.Item("cantidad_urbanorural") = Fila.Item("cantidad")
                    FilaResultado.Item("subtotal") = 0
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo Resultado para calcular el subtotal
            Dim SubTotal As Decimal = 0
            For Each Fila As DataRow In ldtResultado.Rows
                SubTotal = Convert.ToDecimal(Fila.Item("precio_urbano")) * Convert.ToInt32(Fila.Item("cantidad_urbano")) + Convert.ToDecimal(Fila.Item("precio_urbanorural")) * Convert.ToInt32(Fila.Item("cantidad_urbanorural")) + Convert.ToDecimal(Fila.Item("precio_rural")) * Convert.ToInt32(Fila.Item("cantidad_rural"))
                Fila.SetField(Of Decimal)("subtotal", SubTotal)
            Next
            DataGridView4.DataSource = ldtResultado
        End Sub
        Private Function Buscar(Codigo As String) As DataRow
            Dim Retorno As DataRow = Nothing
            Try
                Retorno = ldtResultado.Rows.Find(Codigo)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Retorno
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Jackvier martes, 2 de junio de 2020 17:08
    martes, 2 de junio de 2020 10:52
  • He solucionado un poco el tema pero cada ves q carga una fila dice q l tabla no tiene clave principal solo hice es.

    Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter3)
                oDataAdapter4 = New SqlDataAdapter("Select * from PF ORDER BY Codigo", cnx)
                ldtResultado = New DataTable
                oDataAdapter4.Fill(ldtResultado)
                DataGridView4.DataSource = ldtResultado
            End Using


    y aplicar lo demas todo normal

    pero cuando carga dice eso en si la tabla  creada en sql si tiene llave principal

    asi que hice esto:

    Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter3)
                oDataAdapter4 = New SqlDataAdapter("Select * from PF ORDER BY Codigo", cnx)
                ldtResultado = New DataTable
                oDataAdapter4.Fill(ldtResultado)
                Dim primarykey(0) As DataColumn
                primarykey(0) = ldtResultado.Columns("Codigo")
                ldtResultado.PrimaryKey = primarykey
                DataGridView4.DataSource = ldtResultado
            End Using

    solucionado


    • Editado Jackvier viernes, 12 de junio de 2020 1:23
    • Marcado como respuesta Jackvier viernes, 12 de junio de 2020 1:23
    viernes, 12 de junio de 2020 1:19

Todas las respuestas

  • Hola:
    En un Form como el de la imagen

    Copia y pega el siguiente codigo
    Option Explicit On
    Option Strict On
    Public Class Form5
        Private ldt1 As New DataTable()
        Private ldt2 As New DataTable()
        Private ldt3 As New DataTable()
        Private ldt4 As New DataTable()
        Private Sub Form5_Load(sender As Object, e As EventArgs) Handles Me.Load
            DataGridView1.AllowUserToAddRows = False
            DataGridView2.AllowUserToAddRows = False
            DataGridView3.AllowUserToAddRows = False
            DataGridView4.AllowUserToAddRows = False
            '
            Dim lDataColumn As DataColumn
            lDataColumn = New DataColumn("zona", GetType(Integer))
            ldt1.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldt1.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio", GetType(Integer))
            ldt1.Columns.Add(lDataColumn)
            '
            Dim lData1 As DataRow
            lData1 = ldt1.NewRow
            lData1.Item("zona") = 1
            lData1.Item("codigo") = "A"
            lData1.Item("precio") = 10
            ldt1.Rows.Add(lData1)
            lData1 = ldt1.NewRow
            lData1.Item("zona") = 2
            lData1.Item("codigo") = "B"
            lData1.Item("precio") = 20
            ldt1.Rows.Add(lData1)
            DataGridView1.DataSource = ldt1
            '
            lDataColumn = New DataColumn("zona", GetType(Integer))
            ldt2.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldt2.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio", GetType(Integer))
            ldt2.Columns.Add(lDataColumn)
            '
            Dim lData2 As DataRow
            lData2 = ldt2.NewRow
            lData2.Item("zona") = 1
            lData2.Item("codigo") = "A"
            lData2.Item("precio") = 11
            ldt2.Rows.Add(lData2)
            lData2 = ldt2.NewRow
            lData2.Item("zona") = 2
            lData2.Item("codigo") = "B"
            lData2.Item("precio") = 21
            ldt2.Rows.Add(lData2)
            DataGridView2.DataSource = ldt2
            '
            lDataColumn = New DataColumn("zona", GetType(Integer))
            ldt3.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldt3.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio", GetType(Integer))
            ldt3.Columns.Add(lDataColumn)
            '
            Dim lData3 As DataRow
            lData3 = ldt3.NewRow
            lData3.Item("zona") = 1
            lData3.Item("codigo") = "A"
            lData3.Item("precio") = 12
            ldt3.Rows.Add(lData3)
            lData3 = ldt3.NewRow
            lData3.Item("zona") = 2
            lData3.Item("codigo") = "B"
            lData3.Item("precio") = 22
            ldt3.Rows.Add(lData3)
            DataGridView3.DataSource = ldt3
            '
            lDataColumn = New DataColumn("zona", GetType(Integer))
            ldt4.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldt4.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio", GetType(Integer))
            ldt4.Columns.Add(lDataColumn)
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim Fila4 As DataRow
            For Each Fila1 As DataRow In ldt1.Rows
                Fila4 = ldt4.NewRow
                Fila4.Item("zona") = Fila1.Item("zona")
                Fila4.Item("codigo") = Fila1.Item("codigo")
                Fila4.Item("precio") = Convert.ToInt32(Fila1.Item("precio")) + Buscar2(Convert.ToInt32(Fila1.Item("zona")), Convert.ToString(Fila1.Item("codigo"))) + Buscar3(Convert.ToInt32(Fila1.Item("zona")), Convert.ToString(Fila1.Item("codigo")))
                ldt4.Rows.Add(Fila4)
            Next
            DataGridView4.DataSource = ldt4
        End Sub
        Private Function Buscar2(vzona As Integer, vcodigo As String) As Integer
            Dim Retorno As Integer = 0
            Try
                Dim Consulta = (From Valor In ldt2 Where Valor.Field(Of Integer)("zona") = vzona And Valor.Field(Of String)("codigo") = vcodigo Select Precio = Valor.Field(Of Integer)("precio")).ToList()
                Retorno = Consulta.Item(0)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Retorno
        End Function
        Private Function Buscar3(vzona As Integer, vcodigo As String) As Integer
            Dim Retorno As Integer = 0
            Try
                Dim Consulta = (From Valor In ldt3 Where Valor.Field(Of Integer)("zona") = vzona And Valor.Field(Of String)("codigo") = vcodigo Select Precio = Valor.Field(Of Integer)("precio")).ToList()
                Retorno = Consulta.Item(0)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Retorno
        End Function
    End Class

    P,D,
    Espero que se parezca algo lo que pides

    Un saludo desde Bilbo
    Carlos
    sábado, 30 de mayo de 2020 21:08
  • No me sale lo que busco el resultado sus codigos deben ser unicos cual es mi objetivo, necesito saber cuantos hicieron con el codigo 101CN01 sus cantidaddes en total cuantos de 101CN02  en otra fila la cual seria foro en ese link he colocado las imagenes, el excel 

    CODIGO|ACTIVIDAD|PRECIO_U|CANTIDAD_U |PRECIO_UR |CANTIDAD_UR |PRECIO_R|CANTIDAD_R |SUBTOTAL

    101CN01| AEREO MONOFASICO| 60.08|2|0.00|0|88.54|1|208.7

    Esto quiere decir que los precios ya estan definidos segun sea U, UR,y R necesito sumar todas las cantidades de la primera tabla respecto al codigo y pasarlo a la tabla resultado 

    EL SUBTOTAL ES (precio * cantidad total_u_cod) + (precio * cantidad total_ur_cod)+(precio * cantidad total_r_cod) la primera filta es respecto al dicho codigo

    Existe una tabla actividades donde esta toda esa informacion pero no hay cantidades, el usuario hace el registro y jala esos valores para hacer el registro en tabla codigos donde sale las cantidades, all isale todo mezclado.

    espero me puedas ayudar

    • Editado Jackvier domingo, 31 de mayo de 2020 3:55
    domingo, 31 de mayo de 2020 3:29
  • Hola:
    > Espero que se parezca algo a lo que pides <
    Te escribia eso porque realmente NO se que es lo que quieres hacer.

    ¿Puedes poner un ejemplo con unos datos de entrada y poner los datos de salida?

    Un saludo desde Bilbo
    Carlos
    domingo, 31 de mayo de 2020 9:31
  •  Si te das cuenta en la imagen todos tienen los mismos campos subtotal no va en ninguna tabla ese de U dice pero es cantidad. fue equivocacion

    La tabla de resultado debe tener unas columnas algo asi,

    Ejemplo

    Código| descripción| precio_U |cantidad_u | precio_ur |cantidad_ur |precio_r |cantidad_r |subtotal

    Así  subtotal es la suma de los productos precio x cantidad

    Código 101cn01 y sucesivos hay más son como 100 según el registro

    Porque digo U, UR, R porque son 3 tablas Urbano, Urbano -Rural, Rural

    Mismo código misma descripción precios distintos se quiere sacar cantidad total según u,Ur,r y su subtotal

    Precio de u * cantidad total de U

    Precio de Ur * cantidad total de UR

    Precio de R * cantidad total de R

    Todo eso la suma es el subtotal. 

    La 4ta tabla debe ir todos los codigos sin repetir si tengo 101CN01, 101CN02,101CN03. ETC en las otras 3  el precio es distinto poque es segun la zona.

    Espero puedas apoyarme ya me dieron mas tiempo, estas casi cerca de lo que me has ayudado pero no era los precios eran las cantidades a sumar segun codigo.

    En tu tabla de ejemplo me muestras algo vertical pero es horizontal.

    Un resultado como esto: 


    Eso que dice cod no lo tomes eso no va.




    • Editado Jackvier lunes, 1 de junio de 2020 5:19
    lunes, 1 de junio de 2020 0:00
  • Hola:
    Pero tan dificil es poner un ejemplo con unos datos de entrada y unos datos de salida.
    Tu tienes que tener claro que es lo que quieres, entonces NO te sera dificil poner ese ejemplo.
    Tienes que tener en cuenta que los demas NO sabemos de que va "esto", asi que lo tienes que aclarar
    Con la imagen pones como tiene que quedar (datos de salida)
    ¿Puedes poner los datos de entrada para que se consigan esos datos de salida?

    Un saludo desde Bilbo
    Carlos
    lunes, 1 de junio de 2020 6:59
  • No es que no pueda, lo que pasa es que te respondo desde el celular y recien hoy accedo al equipo.  En si las tablas son solo 2 pero como se me hizo dificil las repartir en 3. Para poder llegar a eso Bueno te voy a explicar.

    Espero me entiendas, pasa que acá ya esta explicado.

    https://social.msdn.microsoft.com/Forums/es-ES/b7546723-98cf-4fa2-9747-236aceb7fb69/vbnet-consulta-sql-para-reporte?forum=winformses#b7546723-98cf-4fa2-9747-236aceb7fb69

    Yo habia echo un codigo desde el mismo sql pero no sale x eso es que hice una vistas de 3 tablas donde la zona cuando es U, cuando es UR y cuando es R por eso tengo 3tb.

    Alli estan las 2 tablas actividades, y codigos, actividades estan todos ya definidos pero no tiene cantidades, desde un form esa data se jala entonces el usuario busca si es urbano le va cargar los codigos y precios  si es urbano - rural el usuario solo agrega la cantidad; lo mismo para rural, toda esa data se almacena en codigos alli estan mezclados, entonces intento que se parezca al excel, es por eso que estuve haciendo en sql pero no sale zona no va debe salir asi como excel precio (U, UR, R) y las cantidades totales de cada categoria o zona finalmente suma(precio * cantidad total)=subtotal 

    Espero me puedas ahora entender sino avisame.

    Tratando de ver lo que me has dado, del codigo sup me sale



    • Editado Jackvier lunes, 1 de junio de 2020 14:54
    lunes, 1 de junio de 2020 14:13
  • Hola

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las respuestas proporcionadas?  

     

    Gracias por usar los foros de MSDN. 

    lunes, 1 de junio de 2020 18:48
    Moderador
  • Hasta el momento no.
    lunes, 1 de junio de 2020 18:55
  • Hola J. Carlos creo que mediante esta imagen podre explicarte.

    Como veras la tabla de resultado: los codigos son unicos es la recopilacion de las demas tablas, y trasladar sus respectivos precios sumar las cantidades de dicho codigo respecto a la tabla de Urbano, luego para Urbano Rural y finalmente de Rural.

    La imagen no es  claramente visible te lo dejo en este enlace si le das zoom podras ver la imagen.

    Espero de tu ayuda

    Por favor explicame el codigo para entender ya que veo sumas precio con zona, codigo que se refiere

     Fila4.Item("precio") = Convert.ToInt32(Fila1.Item("precio")) + Buscar2(Convert.ToInt32(Fila1.Item("zona")), Convert.ToString(Fila1.Item("codigo"))) + Buscar3(Convert.ToInt32(Fila1.Item("zona")), Convert.ToString(Fila1.Item("codigo")))

    Explícame el codigo por favor

    • Editado Jackvier lunes, 1 de junio de 2020 21:53
    lunes, 1 de junio de 2020 19:54
  • Hola:
    Gracias a la imagen donde se ve los datos de entrada y de salida (incompletos)
    En un Form como el de la imagen


    Copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Public Class Form5
        Private ldtUrbano As New DataTable()
        Private ldtRural As New DataTable()
        Private ldtUrbanoRural As New DataTable()
        Private ldtResultado As New DataTable()
        Private Sub Form5_Load(sender As Object, e As EventArgs) Handles Me.Load
            DataGridView1.AllowUserToAddRows = False
            DataGridView2.AllowUserToAddRows = False
            DataGridView3.AllowUserToAddRows = False
            DataGridView4.AllowUserToAddRows = False
            '
            Dim lDataColumn As DataColumn
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtUrbano.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("descripcion", GetType(String))
            ldtUrbano.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_u", GetType(Decimal))
            ldtUrbano.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad", GetType(Integer))
            ldtUrbano.Columns.Add(lDataColumn)
            Dim lData1 As DataRow
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "101CN01"
            lData1.Item("descripcion") = "Aereo Monofasico"
            lData1.Item("precio_u") = 60.08
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "101CN01"
            lData1.Item("descripcion") = "Aereo Monofasico"
            lData1.Item("precio_u") = 60.08
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "101CN03"
            lData1.Item("descripcion") = "Subterraneo Monofasico"
            lData1.Item("precio_u") = 60.08
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "103AC08"
            lData1.Item("descripcion") = "Digitacion de Act"
            lData1.Item("precio_u") = 0.69
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            lData1 = ldtUrbano.NewRow
            lData1.Item("codigo") = "103AC08"
            lData1.Item("descripcion") = "Digitacion de Act"
            lData1.Item("precio_u") = 0.69
            lData1.Item("cantidad") = 1
            ldtUrbano.Rows.Add(lData1)
            DataGridView1.DataSource = ldtUrbano
            '
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("descripcion", GetType(String))
            ldtRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_r", GetType(Decimal))
            ldtRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad", GetType(Integer))
            ldtRural.Columns.Add(lDataColumn)
            '
            lData1 = ldtRural.NewRow
            lData1.Item("codigo") = "101CN01"
            lData1.Item("descripcion") = "Aereo Monofasico"
            lData1.Item("precio_r") = 88.54
            lData1.Item("cantidad") = 1
            ldtRural.Rows.Add(lData1)
            lData1 = ldtRural.NewRow
            lData1.Item("codigo") = "103AC01"
            lData1.Item("descripcion") = "Reubicacion de"
            lData1.Item("precio_r") = 65.78
            lData1.Item("cantidad") = 1
            ldtRural.Rows.Add(lData1)
            lData1 = ldtRural.NewRow
            lData1.Item("codigo") = "103AC08"
            lData1.Item("descripcion") = "Digitacion de Act"
            lData1.Item("precio_r") = 1.01
            lData1.Item("cantidad") = 1
            ldtRural.Rows.Add(lData1)
            lData1 = ldtRural.NewRow
            DataGridView2.DataSource = ldtRural
            '
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("descripcion", GetType(String))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_ur", GetType(Decimal))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad", GetType(Integer))
            ldtUrbanoRural.Columns.Add(lDataColumn)
            DataGridView3.DataSource = ldtUrbanoRural
            '
            lDataColumn = New DataColumn("codigo", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            Dim primarykey(0) As DataColumn
            primarykey(0) = ldtResultado.Columns("codigo")
            ldtResultado.PrimaryKey = primarykey
            lDataColumn = New DataColumn("Actividad", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_urbano", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_urbanorural", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("precio_rural", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad_urbano", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad_urbanorural", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("cantidad_rural", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("subtotal", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            DataGridView4.DataSource = ldtResultado
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim CodigoMemo As String = "PRIMERO"
            Dim Cantidad As Integer = 0
            'Dim Resultado As Resultado
            Dim FilaResultado As DataRow = Nothing
            'Ciclo Urbano
            For Each Fila As DataRow In ldtUrbano.Rows
                If CodigoMemo = Convert.ToString(Fila.Item("codigo")) Then
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaResultado.SetField(Of Integer)("cantidad_urbano", Cantidad)
                Else
                    CodigoMemo = Convert.ToString(Fila.Item("codigo"))
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = Fila.Item("precio_u")
                    FilaResultado.Item("precio_urbanorural") = 0
                    FilaResultado.Item("precio_rural") = 0
                    FilaResultado.Item("cantidad_urbano") = Fila.Item("cantidad")
                    FilaResultado.Item("cantidad_urbanorural") = 0
                    FilaResultado.Item("cantidad_rural") = 0
                    FilaResultado.Item("subtotal") = 0
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo Rural
            Cantidad = 0
            Dim FilaBuscada As DataRow
            For Each Fila As DataRow In ldtRural.Rows
                FilaBuscada = Buscar(Convert.ToString(Fila.Item("codigo")))
                If FilaBuscada IsNot Nothing Then
                    'Asigna en la fila correcta
                    FilaBuscada.SetField(Of Decimal)("precio_rural", Convert.ToDecimal(Fila.Item("precio_r")))
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaBuscada.SetField(Of Integer)("cantidad_rural", Cantidad)
                Else
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = 0
                    FilaResultado.Item("precio_rural") = Fila.Item("precio_r")
                    FilaResultado.Item("precio_urbanorural") = 0
                    FilaResultado.Item("cantidad_urbano") = 0
                    FilaResultado.Item("cantidad_rural") = Fila.Item("cantidad")
                    FilaResultado.Item("cantidad_urbanorural") = 0
                    FilaResultado.Item("subtotal") = 0
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo UrbanoRural
            Cantidad = 0
            For Each Fila As DataRow In ldtUrbanoRural.Rows
                FilaBuscada = Buscar(Convert.ToString(Fila.Item("codigo")))
                If FilaBuscada IsNot Nothing Then
                    FilaBuscada.SetField(Of Decimal)("precio_urbanorural", Convert.ToDecimal(Fila.Item("precio_ur")))
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaBuscada.SetField(Of Integer)("cantidad_urbanorural", Cantidad)
                Else
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = 0
                    FilaResultado.Item("precio_rural") = 0
                    FilaResultado.Item("precio_urbanorural") = Fila.Item("precio_ur")
                    FilaResultado.Item("cantidad_urbano") = 0
                    FilaResultado.Item("cantidad_rural") = 0
                    FilaResultado.Item("cantidad_urbanorural") = Fila.Item("cantidad")
                    FilaResultado.Item("subtotal") = 0
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo Resultado para calcular el subtotal
            Dim SubTotal As Decimal = 0
            For Each Fila As DataRow In ldtResultado.Rows
                SubTotal = Convert.ToDecimal(Fila.Item("precio_urbano")) * Convert.ToInt32(Fila.Item("cantidad_urbano")) + Convert.ToDecimal(Fila.Item("precio_urbanorural")) * Convert.ToInt32(Fila.Item("cantidad_urbanorural")) + Convert.ToDecimal(Fila.Item("precio_rural")) * Convert.ToInt32(Fila.Item("cantidad_rural"))
                Fila.SetField(Of Decimal)("subtotal", SubTotal)
            Next
            DataGridView4.DataSource = ldtResultado
        End Sub
        Private Function Buscar(Codigo As String) As DataRow
            Dim Retorno As DataRow = Nothing
            Try
                Retorno = ldtResultado.Rows.Find(Codigo)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Retorno
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Jackvier martes, 2 de junio de 2020 17:08
    martes, 2 de junio de 2020 10:52
  • Perdón no es que este incompleta solo que algunas serán así donde no siempre se cargue está será vacío será 0.00 o 0 según , gracias ahora lo verificaré, lo que pasa es que aun tiene poca data esta en prototipo.

    Recien se hara uso esta semana pero esa parte ya debe dar los datos.

    Te agradezco el tiempo y la ayuda.

    Me sale esto:

    Lo sombreado se repite. Cuando sale un mensaje diciendo la tabla no tiene clave principal. Pero lo tiene.

    Cargo la data asi:

     Private Sub Form5_Load(sender As Object, e As EventArgs) Handles Me.Load
    
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter1)
                oDataAdapter1 = New SqlDataAdapter("Select * from ActIvidadCod_U ORDER BY Codigo", cnx)
                ldtUrbano = New DataTable
                oDataAdapter1.Fill(ldtUrbano)
                DataGridView1.DataSource = ldtUrbano
            End Using
    
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter2)
                oDataAdapter2 = New SqlDataAdapter("Select * from ActIvidadCod_UR ORDER BY Codigo", cnx)
                ldtUrbanoRural = New DataTable
                oDataAdapter2.Fill(ldtUrbanoRural)
                DataGridView2.DataSource = ldtUrbanoRural
            End Using
    
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter3)
                oDataAdapter3 = New SqlDataAdapter("Select * from ActIvidadCod_R ORDER BY Codigo", cnx)
                ldtRural = New DataTable
                oDataAdapter3.Fill(ldtRural)
                DataGridView3.DataSource = ldtRural
            End Using
    
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter4)
                oDataAdapter4 = New SqlDataAdapter("Select * from PF ORDER BY Codigo", cnx)
                ldtResultado = New DataTable
                oDataAdapter4.Fill(ldtResultado)
                DataGridView4.DataSource = ldtResultado
            End Using
    
    
        End Sub

    Tu tabla resultado es echa en modo diseño no? para ver adaptarme a eso.

    Ok ahi si sale copiando tu datagrid de diseño.

    NOTA: Un ultimo agregado a esto, y para sacarle el total se puede en la misma tabla hacer eso. 

    Bueno yo creo que ya eso es bastante te agradezco el tiempo y la dedicación enormemente.



    • Editado Jackvier martes, 2 de junio de 2020 17:26
    martes, 2 de junio de 2020 16:37
  • Hola:
    >  Tu tabla resultado es echa en modo diseño no? para ver adaptarme a eso  <
    ¿Has probado el ejemplo?
    NO me aclaro de nada, en el codigo que estas poniendo lo unico que haces es cargar 4 tablas en 4 DGV, por lo tanto NO hay ningún proceso entre los datos.
    Me parece que estamos hablando "idiomas diferente"

    Un saludo desde bilbo
    Carlos
    • Marcado como respuesta Jackvier martes, 2 de junio de 2020 18:50
    • Desmarcado como respuesta Jackvier martes, 2 de junio de 2020 18:50
    martes, 2 de junio de 2020 18:42
  • Ya esta todo solucionado gracias, Ya yo veo luego como almacenar esa data al sql. Gracias
    martes, 2 de junio de 2020 18:51
  • Cualquier consulta que te salga, no dudes en usar los foros!
    miércoles, 3 de junio de 2020 13:09
    Moderador
  • Una consulta extra a esto ese 4to datagridview donde se ven los resultados y agregó fecha a las otras tablas para q se refleje en el resultado? 

    Y otra consultita hay forma de que ese resultado sea cargado en un reporte ya que ese datagridview no está enlazado a un dataset para q el reporte me lo detecte

    Ahora recién me dicen que ese resultado lo querían en un reporte.

    domingo, 7 de junio de 2020 5:37
  • Hola:

    > hay forma de que ese resultado sea cargado en un reporte ya que ese datagridview no está enlazado a un dataset <
    Para que un datatable sea cargado en un "reporte" NO tiene nada que ver que este enlazado a un dataset.
    los "reportes" (yo uso Crystal Reports) se "alimentan" con datatables independientemente de que esten enlazados a dataset
    > Ahora recién me dicen que ese resultado lo querían en un reporte. <
    Si lo vas a mostrar en un reporte ¿para que lo visualizas en un DataGridView?
    Me parece que vais a tener que "aclararos" de lo que quereis hacer

    Un saludo desde Bilbo
    Carlos
    domingo, 7 de junio de 2020 8:22
  • Cristal Report mmm yo uso ReportViewer, lo mismo del vb.net, pero se puede pasar ese datagridv a un rpv?

    Lo mismo que sale esa tabla en el datagridv ponerlo en una tabla pero en un reporte.

    • Editado Jackvier domingo, 7 de junio de 2020 15:09
    domingo, 7 de junio de 2020 15:08
  • Hola:
    >  Lo mismo que sale esa tabla en el datagridv ponerlo en una tabla pero en un reporte.  <

    Como te he dicho antes yo uso CrystalReports (me parece que es mucho mejor) y el datatable que "alimenta" al datagridv puede alimentar al fichero de Crystal.
    Me imagino que con ReportViewer funcionara de la misma forma

    Un saludo desde Bilbo
    Carlos
    domingo, 7 de junio de 2020 16:39
  • Por ejemplo yo lo hago asi.

     Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                Dim ds As New DataTable
    
                
                Dim da As New SqlDataAdapter("Select * from PF", cnx)
    
                da.Fill(ds)
                If Not ds Is Nothing AndAlso Not ds.Rows.Count = 0 Then
    
                    Me.rpvPF.Visible = True
                    Me.rpvPF.LocalReport.ReportEmbeddedResource = "Liquidacion.PF.rdlc"
                    Dim oReport As New ReportDataSource("EquiposDataSet", ds)
                    Me.rpvPF.LocalReport.DataSources.Clear()
                    Me.rpvPF.LocalReport.DataSources.Add(oReport)
                End If
                cnx.Close()
                Me.rpvPF.RefreshReport()
            End Using

    Pero en este caso esa tabla resultado no esta almacenada en una tabla de sql para llamarla a eso me refiero.


    • Editado Jackvier domingo, 7 de junio de 2020 20:17
    domingo, 7 de junio de 2020 20:17
  • me sale que no se a proporcionado el origen para el dataset
    domingo, 7 de junio de 2020 20:30
  • Hola:
    Lo siento, NO te puedo ayudar porque como te dije antes yo uso Crystal Reports.
    Pregunta en algun Foro como se utiliza ReportViewer
    Un saludo desde Bilbo
    Carlos
    domingo, 7 de junio de 2020 20:38
  • Entonces dime como puedo guardar ese contenido en una tabla de sql? estoy intentando pero no guarda nada 

    Dim cmda2 As New SqlCommand("Insert into PF values(@Ficha,@Codigo,@actividad,....)", cnx) Dim fila As DataGridViewRow = New DataGridViewRow() Try For Each fila In datagridview4.Rows cmda2.Parameters.Clear() cmda2.Parameters.AddWithValue("@codigo", Convert.ToString(fila.Cells("codigo").Value)) cmda2.Parameters.AddWithValue("@actividad", Convert.ToString(fila.Cells("actividad").Value)) cmda2.Parameters.AddWithValue("@precio_urbano", Convert.ToString(fila.Cells("precio_urbano").Value)) cmda2.Parameters.AddWithValue("@precio_urbanorural", Convert.ToString(fila.Cells("precio_urbanorural").Value)) cmda2.Parameters.AddWithValue("@precio_rural", Convert.ToString(fila.Cells("preciorural").Value)) cmda2.Parameters.AddWithValue("@cantidad_urbano", Convert.ToString(fila.Cells("cantidad_urbano").Value)) cmda2.Parameters.AddWithValue("@cantidad_urbanorural", Convert.ToString(fila.Cells("cantidad_urbanorural").Value))

    ... cmda2.ExecuteNonQuery() Next Catch ex As Exception End Try

    falta completar ...  pero mas o menos así, lo estoy colocando en el mismo boton pero no guarda. solo asi podria llamar esa data a reporte.-



    • Editado Jackvier lunes, 8 de junio de 2020 16:45
    lunes, 8 de junio de 2020 16:43
  • Sobre lo que me ayudaste de este tema tengo una consulta como puedo actualizar ese datagridv4 (resultado) en el caso q se hagan modificaciones del registro de esos codigos, cuando pongo mostrar de nuevo sale error por el primary key, pero no refresca el datagrid4 con los nuevos valores.
    lunes, 8 de junio de 2020 20:31
  • Hola:
    Para grabar un datatable en una tabla de una base de datos no hace falta recorrer el datatable (cosa que en el código que presentas NO lo hace).

    Prueba con el siguiente codigo

        Private Sub btnAceptar_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
            DataTableToTabla(TU_DATATABLE, NOMBRE_TABLA, TRUE)
        End Sub
        Private Sub DataTableToTabla(ByVal vDataTable As DataTable, ByVal vsTabla As String, ByVal vbAñadir As Boolean)
            If vbAñadir = True Then
                For Each row As DataRow In vDataTable.Rows
                    'Las filas recién agregadas se consideran filas insertadas
                    row.SetAdded()
                Next
            End If
            Try
                Using lConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    Using lDataAdapter = New SqlDataAdapter("SELECT * FROM " & vsTabla, lConexion)
                        Using lBuilder = New SqlCommandBuilder(lDataAdapter)
                            lBuilder.DataAdapter.Update(vDataTable)
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    Un saludo desde Bilbo
    Carlos
    martes, 9 de junio de 2020 6:15
  • Hola:
    NO entiendo bien lo que quieres.
    ¿ Quieres modificar los datos del datatable resultado ?
    El datatable resultado depende de los valores de los otros 3 datatables
    ¿Puedes explicar un poco mejor que es lo que quieres?

    Un saludo desde Bilbo
    Carlos
    martes, 9 de junio de 2020 6:19
  • No, Queria pero luego analizando el tema se vuelve mas complejo, queria guardar la table resultado a sql a una tabla de bd sql pero ya no, porque seria todo un problema luego cuando el usuario haga una actualizacion (modificacion) a los datos; era mas como tener un historial de carga de ese datagridview4

    Y al tener este ya en sql si podria hacer el reporte. 

    Hasta el momento no logro, no puedo avanzar nada respecto al reporte. al no ser parte de un dataset.





    • Editado Jackvier martes, 9 de junio de 2020 15:37
    martes, 9 de junio de 2020 15:32
  • Hola:
    Como NO quieres usar Crystal Reports sino ReportViewer y escribes
    >  Hasta el momento no logro, no puedo avanzar nada respecto al reporte. al no ser parte de un dataset.  <
    Puedes crear la tabla en SQL con la misma estructura que el datatable resultado, asi ya podras tener el dataset tipado y por lo tanto podras generar el fichero RDLC
    A este fichero RDLC en la linea
      Dim rptDataSource As New ReportDataSource("XXXXXXXXXX", ds.Tables("XXXXXXXXX"))
    que es donde se carga el datatable le cambias por el datatable tuyo.

    Un saludo desde Bilbo
    Carlos

    martes, 9 de junio de 2020 16:01
  • Lo tengo tengo una tabla creada en el sql table con mis mismo campos y l opuse al reporte, pero recuerda que esa tabla estara vacia, porque de donde se almacena? si el datagridview no guarda sus resultados solo los muestra.

    Y el ds?

    Tienes alguna idea de esto:

    https://social.msdn.microsoft.com/Forums/es-ES/0668a031-9b57-458e-a342-53f4f19fb9b8/vbasicnet-como-pasar-datagrid-a-reportviewer?forum=winformses

    Me dice que con el ldtResultado pero no me sale, una pregunta en el reporte ya tengo que tener definido algun bosquejo de tabla o solo vacio?

    • Editado Jackvier martes, 9 de junio de 2020 19:13
    martes, 9 de junio de 2020 18:01
  • Hola:
    Como ya te he comentado NO uso ReportViewer, uso Crystal Reports que es MUCHO mejor (para mi gusto)

    Un saludo desde Bilbo
    Carlos

    martes, 9 de junio de 2020 20:16
  • Antiguamente en visual basic 6 usaba eso hace mucho muchos años ahora no se ni como se instala y acopla a vb.net 

    Bueno

    Gracias

    martes, 9 de junio de 2020 20:29
  • Queria una consulta del error que sale cuando presionas el boton cargar y te carga el datagrid4 al primer lanzamiento todo ok, el problema se da cuando vuelves a dar click al ya que lo uso para volver a recargar y /o actualizar la carga pero sale q no puede volver a cargar porque el codigo es llave unica
    miércoles, 10 de junio de 2020 15:08
  • Hola:
    Si le vuelves a dar click, como el datagri4 ya esta cargado cuando va a cargar uno que ya esta, error por se llave unica.
    Lo que te puse es un ejemplo de un solo uso.
    Si lo quieres cargar otra vez , tendras que salir del programa y volver a entrar.

    Un saludo desde Bilbo
    Carlos
    miércoles, 10 de junio de 2020 17:36
  • aah ok si eso si vi pense k si lo recargaba se actualizaria.
    miércoles, 10 de junio de 2020 20:54
  • Por cierto como puedo hacer un filtro de esa datagridview4 segun valor de textbox. son 2 textbox y filtro de 2 columnas?

    Puedes ponerme un ejemplo plis

    Hice algo y funciona bien el problema es que el reporte debe mostrar lo que el datagridv muestra si sale lleno mostrara los datos q es si sale vacio no deberia mostrar na, pero lo hace


    • Editado Jackvier jueves, 11 de junio de 2020 4:01
    jueves, 11 de junio de 2020 3:08
  • Hola:

    El filtro se hace sobre el datatable que es el datasource del datagridview.

    ¿Puedes poner las 2 columnas por las que quieres hacer el filtro?

    Si al reporte le pasas como reportsource el datatable que le pasas como datasource al dategridview, entonces veras los mismos datos en el reporte y en el datagridview porque la fuente de datos es la misma.

    Asi que NO se que te esta pasando para ver cosas distintas.

    Un saludo desde Bilbo

    Carlos

    jueves, 11 de junio de 2020 7:37
  • Hola:

    La única forma de que salgas de "esto" con algo que te sirva, es que abras un hilo nuevo en el que pongas las estructuras de las tablas donde están los datos y lo que quieres conseguir.

    Un saludo desde Bilbo

    Carlos

    jueves, 11 de junio de 2020 7:39
  • Para cargar filtros esto me esta generando problemas tienes alguna solución a esto?

    Lo necesito para aplicar filtro de fechas, y como sabes el filtro de fechas va ser constante.

    Por favor ayudame solo me falta eso.

    • Editado Jackvier jueves, 11 de junio de 2020 18:06
    jueves, 11 de junio de 2020 18:05
  • Hola:

    >  Lo necesito para aplicar filtro de fechas, y como sabes el filtro de fechas va ser constante. <
    ¿Pero si no tienes ninguna columna que sea del tipo fecha, como quieres filtrar por algo que NO tienes?

    Un saludo desde Bilbo
    Carlos
    jueves, 11 de junio de 2020 18:48
  • Lo hay porque eso ya se modifico:

    Private Sub Carga()
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter1)
                oDataAdapter1 = New SqlDataAdapter("Select * from ActIvidadCod_U WHERE Proyecto like '%" & txtPoyeto.Text & "%' AND Sede like '%" & txtSede.Text & "%' AND Fecha between '" + fechainicial.Value.ToString("yyyy-MM-dd") + "' and '" + fechafinal.Value.ToString("yyyy-MM-dd") + "'", cnx)
                ldtUrbano = New DataTable
                oDataAdapter1.Fill(ldtUrbano)
                DataGridView1.DataSource = ldtUrbano
            End Using
    
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter2)
                oDataAdapter2 = New SqlDataAdapter("Select * from ActIvidadCod_UR WHERE Proyecto like '%" & txtPoyeto.Text & "%' AND Sede like '%" & txtSede.Text & "%' AND Fecha between '" + fechainicial.Value.ToString("yyyy-MM-dd") + "' and '" + fechafinal.Value.ToString("yyyy-MM-dd") + "'", cnx)
                ldtUrbanoRural = New DataTable
                oDataAdapter2.Fill(ldtUrbanoRural)
                DataGridView2.DataSource = ldtUrbanoRural
            End Using
    
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter3)
                oDataAdapter3 = New SqlDataAdapter("Select * from ActIvidadCod_R WHERE Proyecto like '%" & txtPoyeto.Text & "%' AND Sede like '%" & txtSede.Text & "%' AND Fecha between '" + fechainicial.Value.ToString("yyyy-MM-dd") + "' and '" + fechafinal.Value.ToString("yyyy-MM-dd") + "'", cnx)
                ldtRural = New DataTable
                oDataAdapter3.Fill(ldtRural)
                DataGridView3.DataSource = ldtRural
            End Using
    
            'DGv4
            Dim lDataColumn As DataColumn
            lDataColumn = New DataColumn("Codigo", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            Dim primarykey(0) As DataColumn
            primarykey(0) = ldtResultado.Columns("Codigo")
            ldtResultado.PrimaryKey = primarykey
            lDataColumn = New DataColumn("Actividad", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Precio_Urbano", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Precio_UrbanoRural", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Precio_Rural", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Cantidad_Urbano", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("CodigoSAPU", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Cantidad_UrbanoRural", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("CodigoSAPUR", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Cantidad_Rural", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("CodigoSAPR", GetType(Integer))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("SubTotal", GetType(Decimal))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Fecha", GetType(Date))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Proyecto", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            lDataColumn = New DataColumn("Sede", GetType(String))
            ldtResultado.Columns.Add(lDataColumn)
            DataGridView4.DataSource = ldtResultado
    
            
            '/////cargar data
            Dim CodigoMemo As String = "PRIMERO"
            Dim Cantidad As Integer = 0
            'Dim Resultado As Resultado
            Dim FilaResultado As DataRow = Nothing
            'Ciclo Urbano
            For Each Fila As DataRow In ldtUrbano.Rows
                If CodigoMemo = Convert.ToString(Fila.Item("codigo")) Then
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaResultado.SetField(Of Integer)("cantidad_urbano", Cantidad)
    
                Else
                    CodigoMemo = Convert.ToString(Fila.Item("codigo"))
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = Fila.Item("precio_u")
                    FilaResultado.Item("precio_urbanorural") = 0
                    FilaResultado.Item("precio_rural") = 0
                    FilaResultado.Item("cantidad_urbano") = Fila.Item("cantidad")
                    FilaResultado.Item("CodigoSAPU") = Fila.Item("CodigoSAP")
                    FilaResultado.Item("cantidad_urbanorural") = 0
                    FilaResultado.Item("CodigoSAPUR") = 0
                    FilaResultado.Item("cantidad_rural") = 0
                    FilaResultado.Item("CodigoSAPR") = 0
                    FilaResultado.Item("subtotal") = 0
                    FilaResultado.Item("Fecha") = Fila.Item("Fecha")
                    FilaResultado.Item("Proyecto") = Fila.Item("Proyecto")
                    FilaResultado.Item("Sede") = Fila.Item("Sede")
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo Rural
            Cantidad = 0
            Dim FilaBuscada As DataRow
            For Each Fila As DataRow In ldtRural.Rows
                FilaBuscada = Buscar(Convert.ToString(Fila.Item("codigo")))
                If FilaBuscada IsNot Nothing Then
                    'Asigna en la fila correcta
                    FilaBuscada.SetField(Of Decimal)("precio_rural", Convert.ToDecimal(Fila.Item("precio_r")))
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaBuscada.SetField(Of Integer)("cantidad_rural", Cantidad)
                Else
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("Codigo") = Fila.Item("Codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("Descripcion")
                    FilaResultado.Item("precio_urbano") = 0
                    FilaResultado.Item("precio_rural") = Fila.Item("precio_r")
                    FilaResultado.Item("precio_urbanorural") = 0
                    FilaResultado.Item("cantidad_urbano") = 0
                    FilaResultado.Item("CodigoSAPU") = 0
                    FilaResultado.Item("cantidad_rural") = Fila.Item("cantidad")
                    FilaResultado.Item("CodigoSAPR") = Fila.Item("CodigoSAP")
                    FilaResultado.Item("cantidad_urbanorural") = 0
                    FilaResultado.Item("CodigoSAPUR") = 0
                    FilaResultado.Item("subtotal") = 0
                    FilaResultado.Item("Fecha") = Fila.Item("Fecha")
                    FilaResultado.Item("Proyecto") = Fila.Item("Proyecto")
                    FilaResultado.Item("Sede") = Fila.Item("Sede")
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo UrbanoRural
            Cantidad = 0
            For Each Fila As DataRow In ldtUrbanoRural.Rows
                FilaBuscada = Buscar(Convert.ToString(Fila.Item("codigo")))
                If FilaBuscada IsNot Nothing Then
                    FilaBuscada.SetField(Of Decimal)("precio_urbanorural", Convert.ToDecimal(Fila.Item("precio_ur")))
                    Cantidad += Convert.ToInt32(Fila.Item("cantidad"))
                    FilaBuscada.SetField(Of Integer)("cantidad_urbanorural", Cantidad)
                Else
                    FilaResultado = ldtResultado.NewRow
                    FilaResultado.Item("codigo") = Fila.Item("codigo")
                    FilaResultado.Item("Actividad") = Fila.Item("descripcion")
                    FilaResultado.Item("precio_urbano") = 0
                    FilaResultado.Item("precio_rural") = 0
                    FilaResultado.Item("precio_urbanorural") = Fila.Item("precio_ur")
                    FilaResultado.Item("cantidad_urbano") = 0
                    FilaResultado.Item("CodigoSAPU") = 0
                    FilaResultado.Item("cantidad_rural") = 0
                    FilaResultado.Item("CodigoSAPR") = 0
                    FilaResultado.Item("cantidad_urbanorural") = Fila.Item("cantidad")
                    FilaResultado.Item("CodigoSAPUR") = Fila.Item("CodigoSAP")
                    FilaResultado.Item("subtotal") = 0
                    FilaResultado.Item("Fecha") = Fila.Item("Fecha")
                    FilaResultado.Item("Proyecto") = Fila.Item("Proyecto")
                    FilaResultado.Item("Sede") = Fila.Item("Sede")
                    ldtResultado.Rows.Add(FilaResultado)
                    Cantidad = Convert.ToInt32(Fila.Item("cantidad"))
                End If
            Next
            'Ciclo Resultado para calcular el subtotal
            Dim SubTotal As Decimal = 0
            For Each Fila As DataRow In ldtResultado.Rows
                SubTotal = Convert.ToDecimal(Fila.Item("precio_urbano")) * Convert.ToInt32(Fila.Item("cantidad_urbano")) + Convert.ToDecimal(Fila.Item("precio_urbanorural")) * Convert.ToInt32(Fila.Item("cantidad_urbanorural")) + Convert.ToDecimal(Fila.Item("precio_rural")) * Convert.ToInt32(Fila.Item("cantidad_rural"))
                Fila.SetField(Of Decimal)("subtotal", SubTotal)
    
            Next
            DataGridView4.DataSource = ldtResultado
            calculos()
            reporte()
        End Sub
    Ahora comprendes la necesidad, te comente q se modificaria asi q lo hice.


    • Editado Jackvier jueves, 11 de junio de 2020 22:49
    jueves, 11 de junio de 2020 22:40
  • He solucionado un poco el tema pero cada ves q carga una fila dice q l tabla no tiene clave principal solo hice es.

    Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter3)
                oDataAdapter4 = New SqlDataAdapter("Select * from PF ORDER BY Codigo", cnx)
                ldtResultado = New DataTable
                oDataAdapter4.Fill(ldtResultado)
                DataGridView4.DataSource = ldtResultado
            End Using


    y aplicar lo demas todo normal

    pero cuando carga dice eso en si la tabla  creada en sql si tiene llave principal

    asi que hice esto:

    Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter3)
                oDataAdapter4 = New SqlDataAdapter("Select * from PF ORDER BY Codigo", cnx)
                ldtResultado = New DataTable
                oDataAdapter4.Fill(ldtResultado)
                Dim primarykey(0) As DataColumn
                primarykey(0) = ldtResultado.Columns("Codigo")
                ldtResultado.PrimaryKey = primarykey
                DataGridView4.DataSource = ldtResultado
            End Using

    solucionado


    • Editado Jackvier viernes, 12 de junio de 2020 1:23
    • Marcado como respuesta Jackvier viernes, 12 de junio de 2020 1:23
    viernes, 12 de junio de 2020 1:19