Consulta RUC a SUNAT

1,248 views
Skip to first unread message

Walter Cordova

unread,
Nov 18, 2014, 12:51:35 PM11/18/14
to publice...@googlegroups.com
Estimados amigos

alguien ha podido hacer consultas de la existencia de un RUC en  SUNAT (Peru)
desde VFP 9.0

Agradesco cualquier ayuda

Slds

--
-------------------------------
Wálter Córdova N.

Miguel A.

unread,
Nov 18, 2014, 2:25:09 PM11/18/14
to publice...@googlegroups.com
Hola,
Si nos cuentas en qué página se supone que has de hacer la consulta es posible que alguien pueda ayudarte a acceder a ella y a recuperar los datos que proporciona, si es eso lo que pretendes, claro.
Saludos,
Miguel A.

Walter Cordova

unread,
Nov 18, 2014, 2:30:55 PM11/18/14
to publice...@googlegroups.com
Esta es la pagina


Imágenes integradas 2
-------------------------------
Wálter Córdova N.
Sistemas TQC
612-6565 Anexo 147

Miguel A.

unread,
Nov 19, 2014, 1:43:21 PM11/19/14
to publice...@googlegroups.com
Hola,
Me temo que nunca podrás automatizar el proceso porque te pide que escribas unos caracteres alfabéticos y numéricos de una imagen para asegurarse de que es una persona y no un programa automático el que quiere acceder.
Abrir automáticamente la página es fácil y supongo que ya sabes cómo hacerlo:

objeto=Createobject("InternetExplorer.Application")

objeto.visible=.t.

ir_a="http://ww1.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias"

ObjTexto ='Cargando página .'

objeto.navigate2(ir_a)

Do While objeto.busy

Wait Window ObjTexto Time(0.3)

ObjTexto= ObjTexto+'.'

Enddo

WAIT clear

Pero lo demás no creo que se pueda automatizar fácilmente.
Siento no haberte sido de gran ayuda. Un saludo

Miguel A.

Walter Cordova

unread,
Nov 19, 2014, 2:13:43 PM11/19/14
to publice...@googlegroups.com
Listo, Miguel, gracias x la ayuda, de todos modos

Walter Cordova

unread,
Nov 21, 2014, 9:20:00 AM11/21/14
to publice...@googlegroups.com
muchas gracias!!!

2014-11-21 8:45 GMT-05:00 YuLSoft <yul...@gmail.com>:
Alli va...
*//////////////////////////////

SET SAFETY OFF

LOCAL lcRUC AS String

lcRUC = "10210138132"

#DEFINE CRLF CHR(13)+CHR(10)

LOCAL oErr as Exception

LOCAL cStr as Character

LOCAL SW AS Boolean

SW = .T.

TRY

LOCAL loXmlHttp AS Microsoft.XMLHTTP,;

lcURL as String,;

lcHTML as String,;

lcTexto as String,;

lcFile as String

loXmlHttp = CREATEOBJECT("Microsoft.XMLHTTP")

lcURL = "http://www.sunat.gob.pe/w/wapS01Alias?ruc="+lcRUC

loXmlHttp.open("POST" , lcURL, .F.)

loXmlHttp.send

WAIT WINDOW "Espere por favor, obteniendo datos..." NOWAIT

DO While loXmlHttp.readyState<>4 OR loXmlHttp.status <>200

ENDDO

lcHTML = loXmlHttp.Responsetext

CATCH TO oErr

cStr = "Error:" + CRLF + CRLF + ;

"[ Error: ] " + STR(oErr.ErrorNo) + CRLF + ;

"[ Linea: ] " + STR(oErr.LineNo) + CRLF + ;

"[ Mensaje: ] " + oErr.Message + CRLF + ;

"[ Procedimiento: ] " + oErr.Procedure + CRLF + ;

"[ Detalles: ] " + oErr.Details + CRLF + ;

"[ StackLevel: ] " + STR(oErr.StackLevel) + CRLF + ;

"[ Instrucción: ] " + oErr.LineContents

MESSAGEBOX(cStr,4112,"Error...!!!")

SW = .F.

ENDTRY

IF SW = .F.

RETURN .F.

ENDIF

IF LEN(lcHTML) <= 630

MESSAGEBOX("El Número de Ruc ingresado es Inválido o no Existe.",64,"Aviso")

RELEASE loXmlHttp

RETURN .F.

ENDIF

lcTexto = CHRTRAN(ALLTRIM(lcHTML),CHR(10),"")

*/Para los delimitadores

lcTexto = STRTRAN(lcTexto, "N&#xFA;mero Ruc. </b> " + lcRUC + " - ","RazonSocial:")

lcTexto = STRTRAN(lcTexto, "Estado.</b>","Estado:")

lcTexto = STRTRAN(lcTexto, "Agente Retenci&#xF3;n IGV.</strong>","ARIGV:")

lcTexto = STRTRAN(lcTexto, "Direcci&#xF3;n.</b><br/>","Direccion:")

lcTexto = STRTRAN(lcTexto, "Situaci&#xF3;n.<b> ","Situacion:")

lcTexto = STRTRAN(lcTexto, "Tel&#xE9;fono(s).</b><br/>","Telefono:")

lcTexto = STRTRAN(lcTexto, "Dependencia.","Dependencia:")

lcTexto = STRTRAN(lcTexto, "Tipo.</b><br/> ","TipoPer:")

lcTexto = STRTRAN(lcTexto, "DNI</b> : ","DNI:")

lcTexto = STRTRAN(lcTexto, "Fecha Nacimiento.</b> ","FechNac:")

lcTexto = STRTRAN(lcTexto, SPACE(05),SPACE(01))

lcTexto = STRTRAN(lcTexto, SPACE(04),SPACE(01))

lcTexto = STRTRAN(lcTexto, SPACE(03),SPACE(01))

lcTexto = STRTRAN(lcTexto, SPACE(02),SPACE(01))

lcTexto = STRTRAN(lcTexto, SPACE(01) + CHR(13),SPACE(0))

lcTexto = STRTRAN(lcTexto, CHR(09),"")

*** RAZON SOCIAL ***

PosIni = AT("RazonSocial:", lcTexto)+12

PosFin = AT("<br/></small>", lcTexto)-(AT("RazonSocial:", lcTexto)+12)

lcRazSocial = SUBSTR(lcTexto,PosIni,PosFin)

lcRazSocial = STRTRAN(lcRazSocial ,"&#209;","Ñ")

lcRazSocial = STRTRAN(lcRazSocial , "&#xD1;", "Ñ")

lcRazSocial = STRTRAN(lcRazSocial , "&#193;", "Á")

lcRazSocial = STRTRAN(lcRazSocial , "&#201;", "É")

lcRazSocial = STRTRAN(lcRazSocial , "&#205;", "Í")

lcRazSocial = STRTRAN(lcRazSocial , "&#211;", "Ó")

lcRazSocial = STRTRAN(lcRazSocial , "&#218;", "Ú")

lcRazSocial = STRTRAN(lcRazSocial , "&#xC1;", "Á")

lcRazSocial = STRTRAN(lcRazSocial , "&#xC9;", "É")

lcRazSocial = STRTRAN(lcRazSocial , "&#xCD;", "Í")

lcRazSocial = STRTRAN(lcRazSocial , "&#xD3;", "Ó")

lcRazSocial = STRTRAN(lcRazSocial , "&#xDA;", "Ú")

lcFile= "Datos_Contribuyente.txt"

STRTOFILE(lcRazSocial +CHR(13)+CHR(10), lcFile)

*** ESTADO ***

PosIni = AT("Estado:", lcTexto)+7

PosFin = AT("</small><br/>", lcTexto)-(AT("Estado:", lcTexto)+7)

lcEst = SUBSTR(lcTexto,PosIni,PosFin)

STRTOFILE(lcEst+CHR(13)+CHR(10) , lcFile,1)

*** AGENTE RETENEDOR IGV ***

PosIni = AT("ARIGV:", lcTexto)+18

PosFin = AT("ARIGV:", lcTexto)+20-(AT("ARIGV:", lcTexto)+18)

lcAR = SUBSTR(lcTexto,PosIni,PosFin)

STRTOFILE(lcAR+CHR(13)+CHR(10), lcFile,1)

*** DIRECCION ***

PosIni = AT("Direccion:", lcTexto)+10

PosFin = AT("</b></small><br/>", lcTexto)-38-(AT("Direccion:", lcTexto)+10)

lcDir = SUBSTR(lcTexto,PosIni,PosFin)

lcDir = STRTRAN(lcDir, "&#209;", "Ñ")

lcDir = STRTRAN(lcDir, "&#xD1;", "Ñ")

lcDir = STRTRAN(lcDir, "&#193;", "Á")

lcDir = STRTRAN(lcDir, "&#201;", "É")

lcDir = STRTRAN(lcDir, "&#205;", "Í")

lcDir = STRTRAN(lcDir, "&#211;", "Ó")

lcDir = STRTRAN(lcDir, "&#218;", "Ú")

lcDir = STRTRAN(lcDir, "&#xC1;", "Á")

lcDir = STRTRAN(lcDir, "&#xC9;", "É")

lcDir = STRTRAN(lcDir, "&#xCD;", "Í")

lcDir = STRTRAN(lcDir, "&#xD3;", "Ó")

lcDir = STRTRAN(lcDir, "&#xDA;", "Ú")

STRTOFILE(lcDir+CHR(13)+CHR(10), lcFile,1)

*** SITUACION ***

PosIni = AT("Situacion:", lcTexto)+10

PosFin = AT("</b></small><br/>", lcTexto)-(AT("Situacion:", lcTexto)+10)

lcCond = SUBSTR(lcTexto,PosIni,PosFin)

STRTOFILE(lcCond+CHR(13)+CHR(10), lcFile,1)

*** TELEFONO ***

PosIni = AT("Telefono:", lcTexto)+9

PosFin = AT("Dependencia:", lcTexto)-25-(AT("Telefono:", lcTexto)+9)

lcTelef = SUBSTR(lcTexto,PosIni,PosFin)

STRTOFILE(lcTelef+CHR(13)+CHR(10), lcFile,1)

*** TIPO DE PERSONA ***

PosIni = AT("TipoPer:", lcTexto)+8

IF SUBSTR(lcRUC,1,2) = "10"

PosFin = AT("DNI:", lcTexto)-25-(AT("TipoPer:", lcTexto)+8)

ELSE

PosFin = RAT("</small><br/>", lcTexto, 3) - 16 - AT("TipoPer:", lcTexto)+8

ENDIF

lcTipoPer = SUBSTR(lcTexto,PosIni,PosFin)

STRTOFILE(lcTipoPer+CHR(13)+CHR(10), lcFile,1)

*** DNI ***

IF SUBSTR(lcRUC,1,2) = "10"

PosIni = AT("DNI:", lcTexto)+4

PosFin = AT("FechNac:", lcTexto)-25-(AT("DNI:", lcTexto)+4)

lcDNI = SUBSTR(lcTexto,PosIni,PosFin)

ELSE

lcDNI = "-"

ENDIF

STRTOFILE(lcDNI+CHR(13)+CHR(10), lcFile,1)

*** FECHA DE NACIMIENTO ***

IF SUBSTR(lcRUC,1,2) = "10"

PosIni = AT("FechNac:", lcTexto)+8

PosFin = AT("FechNac:", lcTexto)+18-(AT("FechNac:", lcTexto)+8)

ldFechNac = SUBSTR(lcTexto,PosIni,PosFin)

ELSE

ldFechNac = "-"

ENDIF

STRTOFILE(ldFechNac, lcFile,1)

 

MODIFY FILE (lcFile)

RELEASE loXmlHttp

 

 

RETURN

*/

Esto lo realice buscando información en el grupo; tomando cada tips como ejemplo de allí la idea, y arme lo que quería que haga.

Salu2ss...

 

 




--
-------------------------------
Wálter Córdova N.

Lisandro Catashunga mariño

unread,
Apr 12, 2015, 10:27:57 AM4/12/15
to publice...@googlegroups.com
*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Queridos Amigos, este codigo puede realizar la consulta a Sunat, lo publico para el mundo Fox
*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CLEAR
*////////////////////////////////////////////////////////////////////////////
*/////////////////////Desarrollado por LisandroFox///////////////////////////
*---------------------------Fecha 12 de Abril 2015---------------------------
*////////////////////////////////////////////////////////////////////////////
Note: Debes descargar tesseract.exe (el cual permitira la lectura de la imagen del captcha);
y colocarla en la ruta adecuada.;
El conocimiento debe ser compartido
*---------------------------Descargar captcha Sunat---------------------------
SET DEFAULT TO c:\
*----------------Declarando la API para la dll urlmon.dll
DECLARE INTEGER URLDownloadToFile IN urlmon.dll ;
       INTEGER pCaller, ;
       STRING szURL, ;
       STRING szFileName, ;
       INTEGER dwReserved, INTEGER lpfnCB

LOCAL lcRemoteFile, lcLocalFile, lcResult
*--------------Indicando el URL del generador captcha

*--------------Indicando la ruta y nombre del captcha a crear
lcLocalFile  = "c:\captcha.gif"

WAIT WINDOWS "Descargando archivo …" NOWAIT
lcResult = URLDownloadToFile(0, lcRemoteFile, lcLocalFile, 0, 0)
WAIT CLEAR

IF lcResult = 0 THEN
Local lcCaptcha
*---------------------------Creando Archivo txt de captcha---------------------
oShell = CreateObject("WScript.Shell")
oShell.Run("c:\tesseract.exe c:\captcha.gif c:\captcha -psm 7", 2, .T.)

DECLARE LONG URLDownloadToFile IN "urlmon";
 LONG pCaller,;
 STRING szURL,;
 STRING szFileName,;
 LONG dwReserved,;
 LONG lpfnCB
xruc='10401553202'
xcodigo=LeerCadenaCaptcha()
IF EMPTY(ALLTRIM(xcodigo))
MESSAGEBOX("Codigo Captcha no pudo ser leido, intente de nuevo por favor", 48, "Captcha")
RETURN
ENDIF
lcFile="c:\RucSunat.txt"
IF URLDownloadToFile(0, lcURL, lcFile, 0, 0)  = 0
CREATE CURSOR tmpTabla (linea v(254))
APPEND FROM (lcFile) delimited with TAB
GO TOP
SELECT tmpTabla
LOCATE FOR ALLTRIM(linea) == '<td width="18%" colspan=1  class="bgn">N&uacute;mero de RUC: </td>'
IF FOUND()
*-------------------Tomando Ruc y Razon Social
SKIP
lcRuc = ALLTRIM(SUBSTR(ALLTRIM(linea),LEN('<td  class="bg" colspan=3>')+1,11))
?lcRuc
lxPos = LEN('<td  class="bg" colspan=3>')+14
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcRazon = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcRazon
*-------------------Tomando Tipo de Contribuyente
LOCATE FOR ALLTRIM(linea) =='<td class="bgn" colspan=1>Tipo Contribuyente: </td>'
SKIP
lxPos = LEN('<td class="bg" colspan=3>')+1
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcTipo = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))

?lcTipo
*-------------------Tomando Tipo de Documento del Contribuyente
LOCATE FOR ALLTRIM(linea) =='<td class="bgn" colspan=1>Tipo de Documento: </td>'
SKIP
lxPos = LEN('<td class="bg" colspan=3>')+1
lzPos = LEN(ALLTRIM(Linea))
lcTipoDoc = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcTipoDoc
*-------------------Tomando Nombre Comercial
LOCATE FOR ALLTRIM(linea) =='<td class="bgn" colspan=1 >Nombre Comercial: </td>'
SKIP
lxPos = LEN('<td class="bg" colspan=1>')+1
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcNcomercial = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcNcomercial
*-------------------Tomando Fecha de Inscripción
LOCATE FOR ALLTRIM(linea) =='<td class="bgn" colspan=1>Fecha de Inscripci&oacute;n: </td>'
SKIP
lxPos = LEN('<td class="bg" colspan=1>')+1
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcFincri = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcFincri
*-------------------Tomando Fecha de Inicio de Actividades
LOCATE FOR ALLTRIM(linea) =='<td width="27%" colspan=1 class="bgn">Fecha de Inicio de Actividades:</td>'
SKIP
lxPos = LEN('<td class="bg" colspan=1>')+1
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcFinact = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcFinact

*-------------------Tomando Estado del Contribuyente
LOCATE FOR ALLTRIM(linea) =='<td class="bgn" colspan=1>Estado del Contribuyente: </td>'
SKIP
lxPos = LEN('<td class="bg" colspan=1>')+1
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcEstado = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcEstado

*-------------------Tomando Condicion del Contribuyente
LOCATE FOR ALLTRIM(linea) =='<td class="bgn"colspan=1>Condici&oacute;n del Contribuyente:</td>'
SKIP
SKIP
SKIP
lcCondicion = ALLTRIM(linea)
?lcCondicion

*-------------------Tomando Direccion del Domicilio Fiscal
LOCATE FOR ALLTRIM(linea) =='<td class="bgn" colspan=1>Direcci&oacute;n del Domicilio Fiscal:</td>'
SKIP
lxPos = LEN('<td class="bg" colspan=3>')+1
lzPos = AT('</td>',ALLTRIM(Linea))-lxPos
lcDireccion = ALLTRIM(SUBSTR(ALLTRIM(linea),lxPos,lzPos))
?lcDireccion
ELSE 
MESSAGEBOX("Datos del Ruc no Pudieron ser descargados, Intente de Nuevo", 48, "Fallo en la conexion")
ENDIF
ELSE
MESSAGEBOX("Datos del Ruc no Pudieron ser descargados, Intente de Nuevo", 48, "Fallo en la conexion")
ENDIF
ELSE
MESSAGEBOX("Falló la descarga del archivo",16 , "Descarga no realizada")
ENDIF
*----------------Funcion que leera el archivo de texto creado con los digitos de Captcha
FUNCTION LeerCadenaCaptcha
Local gnFileHandle,nSize,cString
cString=''
IF FILE('captcha.txt')  && existe el Archivo? 
  gnFileHandle = FOPEN('captcha.txt',12)  && if lol abre la leer y escribir
*///////////////////////////////////////////////////////////////////////////
IF gnFileHandle < 0  && Cheque si hay error al abrir el archivo
  WAIT 'No puede abrir o crear el archivo' WINDOW NOWAIT
ELSE  && si no hay error, escribe en el archivo
*---------------Lee el archivo y lo envia a una variable
nSize =  FSEEK(gnFileHandle, 0, 2)     && Mueve el puntero al final
IF nSize > 0
= FSEEK(gnFileHandle, 0, 0)      && Mueve el puntero al principio del registro
cString = FREAD(gnFileHandle, nSize)
ENDIF
ENDIF
*///////////////////////////////////////////////////////////////////////////
=FCLOSE(gnFileHandle)  && Cierra el archivo
ENDIF
RETURN cString
ENDFUNC

Lisandro Catashunga mariño

unread,
Apr 12, 2015, 10:33:23 AM4/12/15
to publice...@googlegroups.com
Para leer los captcha deben descargar el aplicativo OCR, tesseract.exe no lo olviden..

Atentamente,

Lisandro Catashunga Mariño 

Manuel Zevallos

unread,
Apr 12, 2015, 9:24:52 PM4/12/15
to publice...@googlegroups.com
Lisandro..que hace el tesseract???
--
Atentamente,
 
 
Manuel Zevallos B.

9-8860-1297 Entel

 
http://www.solucionesmz.com


Lisandro Catashunga mariño

unread,
Apr 12, 2015, 10:16:46 PM4/12/15
to publice...@googlegroups.com

El tesseract, es un aplicativo OCR, captura la imagen del captcha y saca sus dígitos en txt

Manuel Zevallos

unread,
Apr 13, 2015, 4:07:49 PM4/13/15
to publice...@googlegroups.com
Ahhh ..ok..ahora entiendo.
Message has been deleted

Elias Fuentes

unread,
Sep 8, 2015, 6:12:44 PM9/8/15
to Comunidad de Visual Foxpro en Español
Yo lo tengo implementado, en mi webservice no uso nada de teserac... para mas informacion ingresa a mi pagina


Nivel 1 = Consulta basicas
Nivel 2 = Consulta basicas + estado ruc + tipo contribuyente + etc....

Jean Pierre Adonis De La Cruz Garcia

unread,
Sep 9, 2015, 11:50:52 AM9/9/15
to Comunidad de Visual Foxpro en Español
Lamentablemente algunos programadores de la SUNAT, han visto convenientes realizar cambios a las consultas de la Pagina de la SUNAT, ya  que han visto personas que han saturado el Servidor, que lastima que existan algunas personas que le han dado mal uso a los procesos para consulta. quizas el proceso sea un poco mas restringido o un poco mas engoroso, pero ni modo, 

нαи∂вℓαςк

unread,
Sep 9, 2015, 12:16:33 PM9/9/15
to publice...@googlegroups.com
Jean Pierre, han modifcado el link, verificalo tu mismo :D



Atentamente,

Elias Fuentes 
SysAdmin / Developer
Movistar RPM : (+51) #946177522

Jean Pierre Adonis De La Cruz Garcia

unread,
Sep 9, 2015, 12:25:51 PM9/9/15
to Comunidad de Visual Foxpro en Español
muy aparte de eso, ya que mencione en posteos anteriores, sobre esos 2 servidores adicionales ww1, y ww2, la cosa que han saturado los servidores, eso esta desde el  04 de setiembre de este año, y han enviado comunicado, para que puedan hacer los cambios adecuados al sistema web en linea.
De vez en cuando se conecta, y a veces se cae.

Lisandro

unread,
Sep 11, 2015, 2:14:59 PM9/11/15
to publice...@googlegroups.com
Ya probé tu web service pero me sale error

Enviado desde mi iPhone
Reply all
Reply to author
Forward
0 new messages