Consulta SUNAT Excel VBA FULL

Un saludo a todos mis seguidores, hoy veremos veremos el tema Consulta SUNAT Excel, haremos consultas individuales y masivas

Muy bien, en publicaciones anteriores CONSULTA A LA PÁGINA DE SUNAT, mencioné los tipos de consulta que realizan muchos programadores a la web de SUNAT.

Descargar gratis Consulta SUNAT Excel.xlsm (Contraseña: tutorialesexcel.com)

En aquel POST mencioné que la mejor forma de realizar consultas a la web de SUNAT es a través de un fallo en su código.

En la aplicación que desarrollaremos hoy, utilizaremos ese fallo, todo lo desarrollaremos desde VBA

Si bien lo ideal sería usar un lenguaje backend como PHP para aligerar el código, en este desarrollo utilizamos sólo VBA

Podría venderles este aplicativo, pero por el gran crecimiento que ha tenido la página, se los traigo completamente gratis.

Realizaremos el desarrollo en 4 sencillos pasos, los cuales son los siguientes:

Paso #1: Diseño de la interfaz con la interactuará el usuario

Realizaremos un diseño simple y amigable para que el usuario pueda tener una buena experiencia de uso

Trabajaremos con tres hojas ‘Individual‘,’Masiva‘ y ‘Config‘, en la hoja Config colocaré los campos a buscar, de ese modo el usuario sólo buscará lo que necesita, esto lo hago con el fin de reducir tiempos de procesamiento

Consulta SUNAT Excel

En la búsqueda inicial mostraré los siguientes campos

  • RAZON SOCIAL
  • CONDICION
  • NOMBRE COMERCIAL
  • TIPO
  • FECHA INSCRIPCION
  • ESTADO
  • DIRECCION
  • SISTEMA EMISION
  • ACTIVIDAD EXTERIOR
  • SISTEMA CONTABILIDAD
  • EMISION ELECTRONICA
  • COMPROBANTE ELECTRONICO
  • PLE
  • INICIO ACTIVIDADES
  • ACTIVIDAD ECONOMICA
  • ESTABLECIMIENTOS
  • REPRESENTANTES LEGALES
  • CANTIDAD TRABAJADORES

Paso #2: Programar función de consulta individual RUC SUNAT

Muy bien, lo que vamos a realizar primero es crear una función de tipo Boolean, que devolverá falso si en caso no encuentra el número de RUC

Como mencioné en las primeras líneas, usaré dos lenguajes de programación, PHP y Excel VBA, para que entendamos mejor el proceso hice la siguiente gráfica

proceso consulta excel php sunat ruc

El PHP que utilizaré lo alojaré en el siguiente servidor luisrojas.hol.es/sunat/luis.php, te podrás conectar a él totalmente libre si en caso lo necesitas 🙂

Muy bien empecemos con el desarrollo, por favor muy atento

Enviar número de RUC al PHP a través de un POST

El número de RUC se enviará a través de un POST al PHP luisrojas.hol.es/sunat/luis.php, declararé una constante que almacenará el URL

Const web As String = "http://luisrojas.hol.es/sunat/luis.php"
Private Function fConsultaIndividual(RUC As String) As Boolean
    Dim enviado As String, Solicitud As Object
    contador = 0
    Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
    enviado = "rucluis=" & RUC
    Solicitud.Open "POST", web, False
    Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
    Solicitud.send (enviado)
End Function

Muy bien el PHP leerá la información del RUC y devolverá un JSON de la siguiente forma

JSON consulta RUC

Este JSON lo parsearemos desde VBA con la siguiente librería JsonConverter.bas (Contraseña: tutorialesexcel.com)

Leer JSON obtenido del PHP desde VBA

Agregamos el código de parseo y nuestro código quedaría de la siguiente forma

Const web As String = "http://luisrojas.hol.es/sunat/luis.php"
Private Function fConsultaIndividual(RUC As String) As Boolean
    Dim enviado As String, Solicitud As Object, jsonObject As Object
    Dim i As Integer, j As Integer, contador As Byte
    Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
    enviado = "rucluis=" & RUC
    Solicitud.Open "POST", web, False
    Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
    Solicitud.send (enviado)
    Set jsonObject = JsonConverter.ParseJson(Solicitud.ResponseTexT)
End Function

La variable success en el JSON será falso si no encuentra el número de RUC, agregaré un código de repetición de búsqueda, quedando el código de la siguiente forma

Const web As String = "http://luisrojas.hol.es/sunat/luis.php"
Private Function fConsultaIndividual(RUC As String) As Boolean
    Dim enviado As String, Solicitud As Object, jsonObject As Object
    Dim i As Integer, j As Integer, contador As Byte
    contador = 0
    Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
Correr:
    enviado = "rucluis=" & RUC
    Solicitud.Open "POST", web, False
    Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
    Solicitud.send (enviado)
    Set jsonObject = JsonConverter.ParseJson(Solicitud.ResponseTexT)
    
    If jsonObject("success") = False Then
        If contador = 1 Then
            fConsultaIndividual = False
        Else
            contador = contador + 1
            GoTo Correr
        End If
    Else
        fConsultaIndividual = True



    End If
End Function

Crearé un proceso de limpieza para utilizarlo antes de realizar la consulta y también asignarlo a la forma Limpiar

Sub LimpiarIndividual()
    wBinicial.Range("A5", "A" & Rows.Count).EntireRow.Clear
End Sub

Crearé un variable llamada miTexto del tipo String, en ella almacenaré el nombre de las variables del JSON

Adicionalmente crearé la etiqueta Luis ya que no deseo imprimir nuevamente la información del RUC

Const web As String = "http://luisrojas.hol.es/sunat/luis.php"
Private Function fConsultaIndividual(RUC As String) As Boolean
    Dim enviado As String, Solicitud As Object, jsonObject As Object, miTexto$
    Dim i As Integer, j As Integer, contador As Byte
    contador = 0
    Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
Correr:
    enviado = "rucluis=" & RUC
    Solicitud.Open "POST", web, False
    Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
    Solicitud.send (enviado)
    Set jsonObject = JsonConverter.ParseJson(Solicitud.ResponseTexT)
    
    If jsonObject("success") = False Then
        If contador = 1 Then
            fConsultaIndividual = False
        Else
            contador = contador + 1
            GoTo Correr
        End If
    Else
        fConsultaIndividual = True
        With wBinicial
            LimpiarIndividual
            i = 5
            For Each Item In jsonObject("result")
                Range("B" & i) = Replace(UCase(Item), "_", " ")
                If Item = "ruc" Then
                    GoTo Luis
                End if
                Range("D" & i) = jsonObject("result")(Item)
                i = i + 1
Luis:
            Next
            
        End With
    End If
    
End Function

Para la lectura de los comprobantes electronicos, actividades económicas, establecimientos, representantes legales y cantidad de trabajadores tendrán un tratamiento diferente, usaremos el siguiente código:

Const web As String = "http://luisrojas.hol.es/sunat/luis.php"
Private Function fConsultaIndividual(RUC As String) As Boolean
    Dim enviado As String, Solicitud As Object, jsonObject As Object, miTexto$
    Dim i As Integer, j As Integer, contador As Byte
    contador = 0
    Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
Correr:
    enviado = "rucluis=" & RUC
    Solicitud.Open "POST", web, False
    Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
    Solicitud.send (enviado)
    Set jsonObject = JsonConverter.ParseJson(Solicitud.ResponseTexT)
    
    If jsonObject("success") = False Then
        If contador = 1 Then
            fConsultaIndividual = False
        Else
            contador = contador + 1
            GoTo Correr
        End If
    Else
        fConsultaIndividual = True
        With wBinicial
            LimpiarIndividual
            i = 5
            For Each Item In jsonObject("result")
                Range("B" & i) = Replace(UCase(Item), "_", " ")
                If Item = "ruc" Then
                    GoTo Luis
                ElseIf Item = "comprobante_electronico" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        Range("D" & i) = jsonObject("result")(Item)(j)
                        i = i + 1
                        j = j + 1
                    Next
                    GoTo Luis
                ElseIf Item = "actividad_economica" Then
                    
                    miTexto = "ciiu": Range("D" & i) = UCase(miTexto)
                    Range("E" & i) = jsonObject("result")(Item)(1)(miTexto)
                    
                    miTexto = "descripcion": Range("D" & i) = UCase(miTexto)
                    Range("E" & i) = jsonObject("result")(Item)(1)(miTexto)
                    j = j + 1
                    GoTo Luis
                    
                ElseIf Item = "establecimientos" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        miTexto = "codigo": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "tipo": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "Direccion": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "activida_economica": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        j = j + 1
                    Next
                    i = IIf(j = 1, i + 1, i - 1)
                    GoTo Luis
                    
                ElseIf Item = "representantes_legales" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        miTexto = "tipodoc": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "numdoc": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "nombre": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "cargo": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "desde": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        j = j + 1
                    Next
                    i = IIf(j = 1, i + 1, i - 1)
                    GoTo Luis
                ElseIf Item = "cantidad_trabajadores" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        miTexto = "periodo": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "anio": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "mes": Range("D" & i) = UCase(miTexto)

                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "total_trabajadores": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = Val(jsonObject("result")(Item)(j)(miTexto))                        
                        miTexto = "pensionista": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        
                        miTexto = "prestador_servicio": Range("D" & i) = UCase(miTexto)
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto)
                        j = j + 1
                    Next
                    i = IIf(j = 1, i + 1, i - 1)
                    GoTo Luis
                End If
                Range("D" & i) = jsonObject("result")(Item): DarFormato .Range("D" & i), 2
                i = i + 1
Luis:
            Next
            
        End With
    End If
    
End Function

Paso #3: Dar formato a las celdas y crear proceso de consulta individual

Lo bueno es enemigo de lo perfecto, así que bastará con que nuestra plantilla sea buena, crearé una macro simple para dar formato a las celdas

Private Sub DarFormato(Rango As Range, Tipo As Byte)
    If Tipo = 1 Then
        With wBinicial.Range("B" & Rango.Row, "C" & Rango.Row)
            .Merge
            .Interior.Pattern = xlGray8
            .Interior.ThemeColor = xlThemeColorAccent6
            .Interior.TintAndShade = 0.8
            .BorderAround LineStyle:=xlContinuous, ColorIndex:=-0.25, Weight:=1
        End With
    ElseIf Tipo = 2 Then
        With wBinicial.Cells(Rango.Row, Rango.Column)
            .Interior.Pattern = xlGray8
            .BorderAround LineStyle:=xlContinuous, ColorIndex:=-0.25, Weight:=1
        End With
    End If
End Sub

El formato se le asignará a la celda en donde se escriba información leída del JSON

Private Function fConsultaIndividual(RUC As String) As Boolean
    Dim enviado As String, Solicitud As Object, jsonObject As Object, miTexto$
    Dim i As Integer, j As Integer, contador As Byte
    contador = 0
    Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
Correr:
    enviado = "rucluis=" & RUC
    Solicitud.Open "POST", web, False
    Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
    Solicitud.send (enviado)
    Set jsonObject = JsonConverter.ParseJson(Solicitud.ResponseTexT)
    
    If jsonObject("success") = False Then
        If contador = 1 Then
            fConsultaIndividual = False
        Else
            contador = contador + 1
            GoTo Correr
        End If
    Else
        fConsultaIndividual = True
        With wBinicial
            LimpiarIndividual
            i = 5
            For Each Item In jsonObject("result")
                Range("B" & i) = Replace(UCase(Item), "_", " "): DarFormato .Range("B" & i), 1
                If Item = "ruc" Then
                    GoTo Luis
                ElseIf Item = "comprobante_electronico" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        Range("D" & i) = jsonObject("result")(Item)(j): DarFormato .Range("D" & i), 2
                        i = i + 1
                        j = j + 1
                    Next
                    GoTo Luis
                ElseIf Item = "actividad_economica" Then
                    
                    miTexto = "ciiu": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                    Range("E" & i) = jsonObject("result")(Item)(1)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                    
                    miTexto = "descripcion": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                    Range("E" & i) = jsonObject("result")(Item)(1)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                    j = j + 1
                    GoTo Luis
                    
                ElseIf Item = "establecimientos" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        miTexto = "codigo": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "tipo": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "Direccion": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "activida_economica": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 2
                        j = j + 1
                    Next
                    i = IIf(j = 1, i + 1, i - 1)
                    GoTo Luis
                    
                ElseIf Item = "representantes_legales" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        miTexto = "tipodoc": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "numdoc": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "nombre": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "cargo": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "desde": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 2
                        j = j + 1
                    Next
                    i = IIf(j = 1, i + 1, i - 1)
                    GoTo Luis
                ElseIf Item = "cantidad_trabajadores" Then
                    j = 1
                    For Each Item2 In jsonObject("result")(Item)
                        miTexto = "periodo": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "anio": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "mes": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto):  DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "total_trabajadores": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = Val(jsonObject("result")(Item)(j)(miTexto)): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "pensionista": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 1
                        
                        miTexto = "prestador_servicio": Range("D" & i) = UCase(miTexto): DarFormato .Range("D" & i), 2
                        Range("E" & i) = jsonObject("result")(Item)(j)(miTexto): DarFormato .Range("E" & i), 2: i = i + 2
                        j = j + 1
                    Next
                    i = IIf(j = 1, i + 1, i - 1)
                    GoTo Luis
                End If
                Range("D" & i) = jsonObject("result")(Item): DarFormato .Range("D" & i), 2
                i = i + 1
Luis:
            Next
            
        End With
    End If
    
End Function

Asignamos cada ‘macro‘ al ‘botón‘ correspondiente y ejecutamos una prueba y aquí nuestro producto

Consulta SUNAT Excel

Ya bien ya tenemos nuestra Consulta SUNAT Excel de forma individual

Paso #4: Programar proceso de consulta masiva

En este ejemplo el código de consulta masiva será un poco diferente al de la consulta individual, ya que existen campos con más de un valor

El código a utilizar será el siguiente:

Sub ConsultaMasiva()
    Dim i As Long, n As Long, Solicitud As Object, contador As Byte, Item As String, j As Byte
    On Error Resume Next
    contador = 0
    With wBmasiva
        n = .Range("A1").CurrentRegion.Rows.Count
        Set Solicitud = CreateObject("winhttp.winhttprequest.5.1")
        
        For i = 2 To n
            Application.StatusBar = "Consultando " & i - 1 & " de " & n - 1
Correr:
            enviado = "rucluis=" & .Range("A" & i)
            Solicitud.Open "POST", web, False
            Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded"
            Solicitud.send (enviado)
            Set jsonObject = JsonConverter.ParseJson(Solicitud.ResponseTexT)
            
            If jsonObject("success") = False Then
                If contador = 1 Then
                    .Range("B" & i) = "No encontrado"
                Else
                    GoTo Correr
                End If
                
            Else
                For j = 2 To 14
                    Item = Replace(LCase(.Cells(1, j)), " ", "_")
                    .Cells(i, j) = jsonObject("result")(Item)
                Next

            End If
        Next
    End With
    Application.StatusBar = Empty
    MsgBox "Registros consultados", vbInformation, "Luis Rojas - TutorialesExcel"
End Sub

Y para realizar la limpieza masiva

Sub LimpiarMasiva()
    wBmasiva.Range("A2", "N" & Rows.Count).Clear
End Sub

Y hemos terminado, haremos una prueba de ejecución

tutorialesexcel.com

Y hemos terminado, hemos logrado realizar la Consulta SUNAT Excel

Descargar gratis Consulta SUNAT Excel.xlsm (Contraseña: tutorialesexcel.com)

Como te mencioné al inicio del POST, puedes descargar este aplicativo completamente gratis desde este link: CONSULTA RUC DESDE EXCEL (Contraseña: tutorialesexcel.com)

Recuerda que puedes descargar todos mis archivos excel desde Repositorio Tutoriales Excel, la contraseña de todos los archivos es tutorialesexcel.com, puedes crear una cuenta completamente gratis

M4ster VBA

Te comento que también estoy vendiendo un aplicativo super bueno, pero que realiza consultas ilimitadas a RENIEC: APLICATIVO CONSULTA RENIEC

Cualquier consulta la puedes dejar en los comentarios

Esta entrada tiene 21 comentarios

  1. DIEGO

    Hola Luis, a fecha de hoy 21/06/2020 esta Macro Excel de Consulta RUC no está funcionando, ya que «No Encuentran» los Números de RUC cuando se genera la búsqueda, podrías actualizar esta útil Macro Excel por favor.
    De antemano, muchas gracias.

    1. ROSY

      Tienes toda la razón. No está funcionando.

  2. fernando

    me sale error 10001 en tiempo de ejecucion
    Error Parsing JSON

  3. Alvaro Antonio

    El programa esta desactualizado, o sunat cambio algo, no sale el reporte, como lo indica Abraham Monasterio, no da resultados, baje el que indicas y nada, igual sale en datos la direccion de la pagina Web, Saludos

  4. DIEGO

    Hola Luis, gracias por la macro que pones a nuestra disposición muy amablemente. He observado que cuando se pone un Número de RUC equivocado en la Pestaña «Búsqueda masiva» se cuelga la Macro por ejemplo pones este RUC: 20423555482 que es un RUC que no existe y pienso que debería aparecer un Mensaje por Ejm: «N° RUC Incorrecto» y detenerse la macro, sin embargo la macro sigue procesando por mucho tiempo y finalmente se cuelga y me obliga a cerrarlo. Podrías ser tan amable de corregir ese error. De antemano, muchas gracias.

  5. Abraham Monasterio

    Hola, descargué tu archivo, y me al hacer la búsqueda, me devuelve tu pagina web.

  6. Joel

    Hola, como podríamos poner todas las actividades del comercia así mismo las emisiones de comprobante en un ComBox tal como se muestra en la pagina de la SUNAT.
    Gracias

    1. Programador

      Hola Joel, tendría que analizar la página en donde se muestra ésta información, me puedes enviar el link de consulta por éste medio?

  7. JORGE

    Muchas gracias por el gran aporte, en serio que me ayuda a poder seguir con mi proyecto. Se puede tomar códigos para poder adicionarle a mi herramienta de trabajo, mejor dicho si puedo agregarle más cosas.

    1. Programador

      De nada Jorge :), si puedes compartir mi publicación me ayudarías mucho

  8. Carlos Diaz

    EXCELente tu Programa muchas gracias, me ayuda mucho. Un abrazo.

  9. Mediano

    Me gusta el aplicativo, pero me gustaría contactarlo porque deseo saber si le puede agregar otros datos

  10. Andrés García

    Luis muuuuchas gracias! Justo necesitaba un aplicativo de consultas SUNAT
    Muchas muchas gracias

    1. Luis Rojas

      De nada Andrés, pronto haré un nuevo aplicativo SUNAT que muestre mayor detalle 🙂

Deja una respuesta