none
CONSULTA FORMATEO NUMERO DE FACTURA

    Pregunta

  • HOLA, quería hacerles una consulta que no estoy pudiendo resolver... el tema es asi: tengo una base de datos acces donde guado el numero de una factura en dos partes, por un lado la letra de la factura (letra_comp) y por otro el numero (nume_comp). Los mismos estan guardados de la sigueinte manera:

    C    25

    C    26

    ETC ETC.

    Yo quisiera hace una consulta que en un solo campo me devuelva el numero de factura ya listo para mostrar, ej. "C-0000-0000025"

    desde ya muchas gracias..

    PD. estoy trabajando en VB.net y MS ACCES

     

    martes, 05 de octubre de 2010 14:02

Respuestas

  • "fertenaglia" escribió:
     
    > Yo quisiera hace una consulta que en un solo campo me devuelva
    > el numero de factura ya listo para mostrar, ej. "C-0000-0000025"
     
    Hola:
     
    Para ello, simplemente tienes que ejecutar la siguiente consulta SQL de selección:
     
            SELECT (letra_comp & Format(nume_comp, '-0000-0000000')) AS NumeroFactura
            FROM NombreTabla
     
    Un saludo
     
     

    Enrique Martínez [MS MVP - VB]
    martes, 05 de octubre de 2010 19:04
    Moderador
  • "barbaroja" escribió:

    >     While cadena.Length < (7 - Len(fila("nume_comp")))
    >                cadena += "0"
    >     End While
    >     MsgBox(UCase(fila("letra_comp")) & "-" & "0000" & "-" & cadena & fila("nume_comp"))

    Aunque ya le he indicado al usuario la consulta SQL que tiene que ejecutar para obtener el valor formateado directamente desde la base de datos, te quiero comentar que no es necesario ejecutar tanto código para formatear los valores de los campos del objeto DataRow.

    En lugar de ejecutar el código anterior, simplemente se puede formatear el valor de la siguiente manera:

        Dim cadena As String = _
              String.Format("{0}-0000-{1:0000000}", fila("letra_comp"), fila("nume_comp"))

        MessageBox.Show(cadena)

    Ahora, la variable "cadena" contiene el valor formateado tal cual lo desea el usuario. :-)

    Un saludo

     


    Enrique Martínez [MS MVP - VB]
    martes, 05 de octubre de 2010 21:09
    Moderador
  • Con este código completas el número de la factura con ceros a su izquierda hasta llegar a 7 dígitos, los cuatro ceros del centro no se lo que significan así que loas añado de forma fija. No se la versión de access que usas así que a lo mejor debes cambiar la cadena de conexión, tampoco conozco el nombre de la base de datos ni el nombre de la tabla donde estamos realizando la consulta, pero para hacerte una idea de la mecánica creo que te puede valer.

    Salu2

    Imports System.Data.OleDb
    Public Class Form1
        Private conexion As New OleDbConnection

        Public Sub New()
            ' This call is required by the designer.
            InitializeComponent()
            ' Add any initialization after the InitializeComponent() call.
            conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\facturas.accdb;Persist Security Info=False;"
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim sql As String = "Select letra_comp,nume_comp from tabla1"
            Dim Da As New OleDbDataAdapter(sql, conexion)
            Dim DS As New DataSet
            Da.Fill(DS, "facturas")

            Dim fila As DataRow
            For Each fila In DS.Tables(0).Rows
                Dim cadena As String = ""
                While cadena.Length < (7 - Len(fila("nume_comp")))
                    cadena += "0"
                End While
                MsgBox(UCase(fila("letra_comp")) & "-" & "0000" & "-" & cadena & fila("nume_comp"))
            Next
        End Sub
    End Class


    nunca te acostarás sin saber una cosa más
    martes, 05 de octubre de 2010 14:36

Todas las respuestas

  • Hola fertenaglia. Lo  que  puedes hacer es realizar la consulta con un campo variable que te devuelva en una columna el numero y la letra de la factura concatenados, algo como esto:

     

    " SELECT  letra + ' ' + numero as lista FROM FACTURAS "
    
    Saludos.


    Felipe Villa
    • Propuesto como respuesta Felipe Sotelo S martes, 05 de octubre de 2010 14:35
    martes, 05 de octubre de 2010 14:26
  • Con este código completas el número de la factura con ceros a su izquierda hasta llegar a 7 dígitos, los cuatro ceros del centro no se lo que significan así que loas añado de forma fija. No se la versión de access que usas así que a lo mejor debes cambiar la cadena de conexión, tampoco conozco el nombre de la base de datos ni el nombre de la tabla donde estamos realizando la consulta, pero para hacerte una idea de la mecánica creo que te puede valer.

    Salu2

    Imports System.Data.OleDb
    Public Class Form1
        Private conexion As New OleDbConnection

        Public Sub New()
            ' This call is required by the designer.
            InitializeComponent()
            ' Add any initialization after the InitializeComponent() call.
            conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\facturas.accdb;Persist Security Info=False;"
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim sql As String = "Select letra_comp,nume_comp from tabla1"
            Dim Da As New OleDbDataAdapter(sql, conexion)
            Dim DS As New DataSet
            Da.Fill(DS, "facturas")

            Dim fila As DataRow
            For Each fila In DS.Tables(0).Rows
                Dim cadena As String = ""
                While cadena.Length < (7 - Len(fila("nume_comp")))
                    cadena += "0"
                End While
                MsgBox(UCase(fila("letra_comp")) & "-" & "0000" & "-" & cadena & fila("nume_comp"))
            Next
        End Sub
    End Class


    nunca te acostarás sin saber una cosa más
    martes, 05 de octubre de 2010 14:36
  • hola,

    Efectivamente como te comenta Adres Tienes que Concatener las Variables 

     

    Rapidamente un  Ejemplo 

     

    "select caracter +'-'+ numero from tabla "

     

    --Resultado seria ESTO (C-000001)


     


    Enmanuel Grullard@Developer ASP.NET
    martes, 05 de octubre de 2010 14:42
    Moderador
  • Enmanuel, "Fertenaglia" ha dicho que está usando una BD Access, lo que tu has escrito sería válido para SQL Server.

    Por ello las soluciones de Andres o BarbaRoja, se acercan más a la solución del usuario.


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    martes, 05 de octubre de 2010 14:44
    Moderador
  • gracias a todos por su respuesta, me fue de utilidad.
    martes, 05 de octubre de 2010 14:49
  • fertenaglia, por favor, acostumbrate a marcar las respuestas que te han ayudado a resolver el problema, para que otros usuarios, que puedan tener tu problema, si acceden al foro, puedan encontrar una solución de manera mas rapida.

    Un saludo


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    martes, 05 de octubre de 2010 14:52
    Moderador
  • hola,

    uuuuf Dios mio No me percate lo modificare Mucha gracias por tu Observacion 


    Enmanuel Grullard@Developer ASP.NET
    martes, 05 de octubre de 2010 15:00
    Moderador
  • "fertenaglia" escribió:
     
    > Yo quisiera hace una consulta que en un solo campo me devuelva
    > el numero de factura ya listo para mostrar, ej. "C-0000-0000025"
     
    Hola:
     
    Para ello, simplemente tienes que ejecutar la siguiente consulta SQL de selección:
     
            SELECT (letra_comp & Format(nume_comp, '-0000-0000000')) AS NumeroFactura
            FROM NombreTabla
     
    Un saludo
     
     

    Enrique Martínez [MS MVP - VB]
    martes, 05 de octubre de 2010 19:04
    Moderador
  • "barbaroja" escribió:

    >     While cadena.Length < (7 - Len(fila("nume_comp")))
    >                cadena += "0"
    >     End While
    >     MsgBox(UCase(fila("letra_comp")) & "-" & "0000" & "-" & cadena & fila("nume_comp"))

    Aunque ya le he indicado al usuario la consulta SQL que tiene que ejecutar para obtener el valor formateado directamente desde la base de datos, te quiero comentar que no es necesario ejecutar tanto código para formatear los valores de los campos del objeto DataRow.

    En lugar de ejecutar el código anterior, simplemente se puede formatear el valor de la siguiente manera:

        Dim cadena As String = _
              String.Format("{0}-0000-{1:0000000}", fila("letra_comp"), fila("nume_comp"))

        MessageBox.Show(cadena)

    Ahora, la variable "cadena" contiene el valor formateado tal cual lo desea el usuario. :-)

    Un saludo

     


    Enrique Martínez [MS MVP - VB]
    martes, 05 de octubre de 2010 21:09
    Moderador