# Technology stack: .
NET Framework
import pandas as pd
import tkinter as tk
from tkinter import filedialog, messagebox
import asyncio
import codecs
class FrmConsultaMultipleRUCSUNAT([Link]):
def __init__(self):
super().__init__()
[Link]("Consulta Multiple RUC SUNAT")
[Link] = [Link](self, text="Seleccionar Archivo Plano",
command=self.select_file)
[Link]()
[Link] = [Link](self)
[Link]()
[Link] = [Link](self)
[Link]()
def select_file(self):
file_path = [Link](title="Seleccione el archivo a guardar",
filetypes=(("Archivos permitidos", "*.txt;*.csv;*.dat"),))
if file_path:
tipo_respuesta = 2
mensaje_respuesta = ""
[Link](0, file_path)
tabla = [Link](columns=["NumeroRUC", "RazonSocial", "TipoContribuyente",
"NombreComercial", "CondicionContribuyente", "EstadoContribuyente", "FechaInscripcion",
"FechaInicioActividades", "DomicilioFiscal", "ActividadComercioExterior",
"ActividadesEconomicas", "Padrones", "TipoRespuesta", "MensajeRespuesta"])
[Link](0, [Link])
try:
with [Link](file_path, "r", encoding="utf-8") as file:
cFila = 0
for line in file:
cFila += 1
filaTabla = [Link]({"NumeroRUC": [Link]()})
tabla = [Link](filaTabla, ignore_index=True)
tipo_respuesta = 1
except Exception as ex:
tipo_respuesta = 3
mensaje_respuesta = str(ex)
for index, row in [Link]():
[Link]([Link], row["NumeroRUC"])
if tipo_respuesta > 1:
[Link]("Consultar documento mediante archivo plano",
mensaje_respuesta, icon=[Link] if tipo_respuesta == 2 else
[Link])
if __name__ == "__main__":
app = FrmConsultaMultipleRUCSUNAT()
[Link]()
private async def btnConsultarRUC_Click(sender, e):
nAsegurado = [Link]
if nAsegurado == 0:
[Link] = "Debe seleccionar el archivo plano (.txt, .csv, .dat)"
else:
tipoRespuesta = 2
mensajeRespuesta = ""
lDatosRUC = []
oEnSUNAT = EnSUNAT()
oCuTexto = CuTexto()
oCronometro = Stopwatch()
[Link]()
[Link] = False
# consulta directa a la pagina
try:
cookies = CookieContainer()
controladorMensaje = HttpClientHandler()
[Link] = cookies
[Link] = True
with HttpClient(controladorMensaje) as cliente:
[Link]("Host", "[Link]")
[Link]("sec-ch-ua",
" \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"90\", \"Google
Chrome\";v=\"90\"")
[Link]("sec-ch-ua-mobile", "?0")
[Link]("Sec-Fetch-Dest", "document")
[Link]("Sec-Fetch-Mode", "navigate")
[Link]("Sec-Fetch-Site", "same-origin")
[Link]("Sec-Fetch-User", "?1")
[Link]("Upgrade-Insecure-Requests", "1")
[Link]("User-Agent",
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/88.0.4324.150 Safari/537.36")
[Link] = [Link] |
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
url_random = "[Link]
url_base_ruc = "[Link]
url_completa_ruc = ""
contenido_html = ""
numero_random = ""
with [Link](url_random) as resultado_consulta:
if resultado_consulta.IsSuccessStatusCode:
numero_random = resultado_consulta.[Link]()
[Link]("Referer", url_base_ruc)
numero_ruc = ""
nombre_completo_archivo = [Link]
extension_archivo = [Link](nombre_completo_archivo)
nombre_completo_archivo_resultado =
"{0}Resultado{1}".format(nombre_completo_archivo[:len(nombre_completo_archivo) -
len(extension_archivo)], extension_archivo)
if [Link](nombre_completo_archivo_resultado):
[Link](nombre_completo_archivo_resultado)
fila_grilla = None
n_filas_grilla = [Link]
d_numeros_ruc = {}
i=0
c_filas_grilla = 0
c_numero_rucs_buscados = 0
while i < n_filas_grilla:
c_filas_grilla += 1
numero_ruc = [Link][i].Cells[0].[Link]()
if not [Link](numero_ruc):
numero_ruc = ""
d_numeros_ruc[i] = numero_ruc
if c_filas_grilla == n_filas_grilla or (n_filas_grilla > 10 and c_filas_grilla % 10 == 0):
tipo_respuesta = 2
mensaje_respuesta = ""
c_numero_rucs_buscados = 0
url_completa_ruc = url_base_ruc
url_completa_ruc += "?accion=consManual&txtRuc="
for k_numero_ruc in d_numeros_ruc.values():
if k_numero_ruc == "":
continue
url_completa_ruc += "&selRuc="
url_completa_ruc += k_numero_ruc
c_numero_rucs_buscados++
if c_numero_rucs_buscados > 0:
url_completa_ruc += "&random="
url_completa_ruc += numero_random
async with [Link](url_completa_ruc) as resultado_consulta_datos:
if resultado_consulta_datos.status == 200:
contenido_html = await resultado_consulta_datos.text()
nombre_inicio = "<td class=\"bg\" align=\"center\"><a href=\""
nombre_fin = "\""
url_descarga_archivo = o_cu_texto.extraer_contenido_entre_tag_string(contenido_html,
0, nombre_inicio, nombre_fin)
if url_descarga_archivo == "":
nombre_inicio = "<HEAD><TITLE>"
nombre_fin = "</TITLE></HEAD>"
contenido_busqueda =
o_cu_texto.extraer_contenido_entre_tag_string(contenido_html, 0, nombre_inicio, nombre_fin,
[Link])
if contenido_busqueda == ".:: Pagina de Mensajes ::.":
nombre_inicio = "<p class=\"error\">"
nombre_fin = "</p>"
mensaje_respuesta =
o_cu_texto.extraer_contenido_entre_tag_string(contenido_html, 0, nombre_inicio, nombre_fin)
elif contenido_busqueda == ".:: Pagina de Error ::.":
nombre_inicio = "<p class=\"error\">"
nombre_fin = "</p>"
tipo_respuesta = 3
mensaje_respuesta =
o_cu_texto.extraer_contenido_entre_tag_string(contenido_html, 0, nombre_inicio, nombre_fin)
elif contenido_busqueda == "Request Rejected":
nombre_inicio = "<body>"
nombre_fin = "<br><br>"
tipo_respuesta = 3
mensaje_respuesta =
o_cu_texto.extraer_contenido_entre_tag_string(contenido_html, 0, nombre_inicio, nombre_fin)
if mensaje_respuesta == "":
mensaje_respuesta = "No se puede obtener el detalle del error Request Rejected,
porque no existe los nombres \"<body>\" y \"<br><br>\" en el contenido HTML"
else:
mensaje_respuesta = "No se puede obtener el error, porque no existe los
nombres \"<HEAD><TITLE>\" y \"</TITLE></HEAD>\" en el contenido HTML"
for k_numero_ruc in d_numeros_ruc.keys():
o_en_sunat = EnSUNAT()
o_en_sunat.numero_ruc = dgv_rucs.rows[k_numero_ruc].cells[0].value.to_string()
o_en_sunat.tipo_respuesta = tipo_respuesta
o_en_sunat.mensaje_respuesta = mensaje_respuesta
l_datos_ruc.add(o_en_sunat)
tipo_respuesta = 1
mensaje_respuesta = ""
else:
cliente.default_request_headers.remove("Host")
cliente.default_request_headers.add("Host", "[Link]")
resultado_descarga_archivo = await cliente.get_async(url_descarga_archivo)
if resultado_descarga_archivo.is_success_status_code:
stm_contenido = await resultado_descarga_archivo.content.read_as_stream()
archivo_zip = ZipArchive(stm_contenido)
archivo = archivo_zip.entries[0]
linea_texto = ""
arr_linea_texto = []
with StreamReader([Link]()) as sr:
linea_texto = await sr.read_line_async()
while not sr.end_of_stream:
o_en_sunat = EnSUNAT()
linea_texto = await sr.read_line_async()
arr_linea_texto = linea_texto.split('|')
o_en_sunat.numero_ruc = arr_linea_texto[0]
o_en_sunat.razon_social = arr_linea_texto[1]
o_en_sunat.tipo_contribuyente = arr_linea_texto[2]
o_en_sunat.nombre_comercial = arr_linea_texto[4]
o_en_sunat.condicion_contribuyente = arr_linea_texto[5]
o_en_sunat.estado_contribuyente = arr_linea_texto[6]
o_en_sunat.fecha_inscripcion = arr_linea_texto[7]
o_en_sunat.fecha_inicio_actividades = arr_linea_texto[8]
o_en_sunat.domicilio_fiscal = "{0} {1} - {2} - {3}".format(arr_linea_texto[12],
arr_linea_texto[9], arr_linea_texto[10], arr_linea_texto[11])
o_en_sunat.actividad_comercio_exterior = arr_linea_texto[15]
o_en_sunat.actividades_economicas = "{0};{1};{2}".format(arr_linea_texto[16],
arr_linea_texto[17], arr_linea_texto[18])
o_en_sunat.padrones = arr_linea_texto[21]
o_en_sunat.tipo_respuesta = 1
l_datos_ruc.add(o_en_sunat)
if [Link] > 1:
# Rucs_Invalidos.txt
archivo = [Link][1]
with StreamReader([Link]()) as sr:
while not [Link]:
lineaTexto = await [Link]()
arrLineaTexto = [Link]('|')
for sLineaTexto in arrLineaTexto:
if sLineaTexto == "":
continue
oEnSUNAT = EnSUNAT()
[Link] = sLineaTexto
[Link] = 2
[Link] = "El número de RUC ingresado no es válido o no
existe"
[Link](oEnSUNAT)
else:
tipoRespuesta = 1
mensajeRespuesta = ""
else:
mensajeRespuesta = await [Link]()
mensajeRespuesta = [Link]("Ocurrió un inconveniente ({0}) al obtener el archivo
plano.\r\nDetalle:{1}", [Link], mensajeRespuesta)
else:
mensaje_respuesta = await resultado_consulta_datos.[Link]()
mensaje_respuesta = (
f"Ocurrió un inconveniente ({resultado_consulta_datos.StatusCode}) en la consulta
multiple de los datos de los RUCs {url_completa_RUC}.\r\nDetalle:{mensaje_respuesta}"
)
for k_numero_RUC in d_numeros_RUC.keys():
for datos_RUC in l_datos_RUC:
if [Link][k_numero_RUC].Cells[0].[Link]() ==
datos_RUC.NumeroRUC:
fila_grilla = [Link][k_numero_RUC]
fila_grilla.Cells[1].Value = datos_RUC.RazonSocial
fila_grilla.Cells[2].Value = datos_RUC.TipoContribuyente
fila_grilla.Cells[3].Value = datos_RUC.NombreComercial
fila_grilla.Cells[4].Value = datos_RUC.CondicionContribuyente
fila_grilla.Cells[5].Value = datos_RUC.EstadoContribuyente
fila_grilla.Cells[6].Value = datos_RUC.FechaInscripcion
fila_grilla.Cells[7].Value = datos_RUC.FechaInicioActividades
fila_grilla.Cells[8].Value = datos_RUC.DomicilioFiscal
fila_grilla.Cells[9].Value = datos_RUC.ActividadComercioExterior
fila_grilla.Cells[10].Value = datos_RUC.ActividadesEconomicas
fila_grilla.Cells[11].Value = datos_RUC.Padrones
fila_grilla.Cells[12].Value = datos_RUC.TipoRespuesta
fila_grilla.Cells[13].Value = datos_RUC.MensajeRespuesta
await [Link](
nombre_completo_archivo_resultado,
f"{datos_RUC.NumeroRUC}|{datos_RUC.RazonSocial}|
{datos_RUC.TipoContribuyente}|{datos_RUC.NombreComercial}|
{datos_RUC.CondicionContribuyente}|{datos_RUC.EstadoContribuyente}|
{datos_RUC.FechaInscripcion}|{datos_RUC.FechaInicioActividades}|
{datos_RUC.DomicilioFiscal}|{datos_RUC.ActividadesEconomicas}|{datos_RUC.Padrones}|
{datos_RUC.TipoRespuesta}|{datos_RUC.MensajeRespuesta}"
)
break
else:
tipo_respuesta = 2
mensaje_respuesta = "El número de RUC no es válido"
for k_numero_RUC in d_numeros_RUC.keys():
fila_grilla = [Link][k_numero_RUC]
fila_grilla.Cells[12].Value = tipo_respuesta
fila_grilla.Cells[13].Value = mensaje_respuesta
# Technology Stack: C#
# Framework: .NET
await [Link](nombreCompletoArchivoResultado
, f"{[Link][kNumeroRUC].Cells[0].Value}|||||||||||{tipoRespuesta}|
{mensajeRespuesta}")
tipoRespuesta = 1
mensajeRespuesta = ""
dNumerosRUC = {}
i=0
if [Link]:
mensajeRespuesta = await [Link]()
mensajeRespuesta = f"Ocurrió un inconveniente ({[Link]}) al
consultar el número random.\r\nDetalle:{mensajeRespuesta}"
else:
try:
raise Exception("Error")
except Exception as ex:
tipoRespuesta = 3
mensajeRespuesta = [Link][0]
[Link]()
if tipoRespuesta > 1:
[Link](mensajeRespuesta, "Consulta multiple de RUCs mediante número
random", [Link],
[Link] if tipoRespuesta == 2 else [Link])
[Link] = f"Procesado en {[Link]} seg."
[Link] = True
[Link]()
[Link]()