Histórico da Página
...
- Se agrega al sistema la rutina 'VLDRUCPAR' para validación de datos al ingresar el RUC a los campos A2_CGC y A1_CGC.
- Ajuste realizado en la tabla del diccionario de datos SX3 – X3_VALID para validar la tipificación.
- Punto de entrada 'APIRUCPY' para uso opcional del cliente, ver asuntos relacionados.
- Es posible utilizarlo para otros RUC, pero la validación de duplicación solo se validará para las tablas SA1 y SA2.
Totvs custom tabs box | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||
|
...
En Paraguay, está disponible una API para la búsqueda de RUC.
https://turuc.com.py/swagger-ui/index.html#/rest-contribuyente/getContribuyenteWithPath
Punto de entrada 'APIRUCPY' (Opcional)
Propósito: Realizar búsqueda de RUC utilizando la API y rellenar automáticamente los campos:
A2_NOME, A2_NREDUZ
A1_NOME, A1_NREDUZ
Programa en ADVPL para consumo de API (Opcional).
Programa ADVPL para consumo de API, configuración de usuario.
#INCLUDE"PROTHEUS.CH"
#INCLUDE"FWBROWSE.CH"
#INCLUDE"PROTHEUS.CH"#INCLUDE "FWBROWSE.CH"
//Dicionario SX3
//X3_CAMPO (A1_CGC e A2_CGC)
//X3_VLDUSER = APIRUCPY()
UserFunctionAPIRUCPY()cRUC) LocalcRUC :=PARAMIXB[1]
LocalcVar :=PARAMIXB[2]ReadVar()
LocaloMod :=PARAMIXB[3]FWModelActive()
LocaloRest:=FwRest():New("https://turuc.com.py/api/contribuyente")
LocaloJson:=JsonObject():New()
LocalaHead:= {'accept: */*'}
LocalcRest:=""
LocalcRed :=""
LocalcNom :=""
LocallRet :=.F.
DefaultcRUC:= &(cVar)
oRest:SetPath("?ruc="+Trim(cRUC))
FWMsgRun(Nil,{|| lRet:=oRest:Get(aHead)},Nil,oRest:CHOST)
IflRet//Achou
cRest:=DecodeUtf8(oRest:GetResult())
If ! Empty(cRest) .And.Empty(oJson:fromJson(cRest))
//oJson["data"]["ruc"] = CODIGO + DV
//oJson["data"]["estado"] = A1_ATIVO
//oJson["data"]["esPersonaJuridica"] = A1_PESSOA
cNom:=oJson["data"]["razonSocial"]
If (", ")$(cNom)
cRed:=AllTrim(SubStr(cNom,At(", ",cNom)+1,Len(cNom)))
Else
cRed:=AllTrim(SubStr(cNom,1,At(" ",cNom)))
Endif
IfcVar=="M->A2_CGC"//Proveedor
iif(Empty(oMod),M->A2_NOME :=cNom,FWFldPut("A2_NOME", cNom))
iif(Empty(oMod),M->A2_NREDUZ:=cRed,FWFldPut("A2_NREDUZ",cRed))
ElseIfcVar=="M->A1_CGC"//Cliente
iif(Empty(oMod),M->A1_NOME :=cNom,FWFldPut("A1_NOME", cNom))
iif(Empty(oMod),M->A1_NREDUZ:=cRed,FWFldPut("A1_NREDUZ",cRed))
Endif
Endif
Endif
FreeObj(oRest)Return(lRet)
Consulta específica SXB – RUCPAR (Opcional)
Propósito: Uso en campos de diccionario SX3 X3_F3Return(lRet)
//Consulta Especifica no SXB (Modulo SIGACFG >> Base de Datos >> Consutas Statandar >> Incluir >> Consulta Especifica)
//XB_ALIAS XB_TIPO XB_SEQ XB_COLUNA XB_CONTEM XB_DESCRI...
//RUCPAR 1 01 RE "" RUC
//RUCPAR 2 01 01 U_XBRUCPAR() ""
//RUCPAR 5 01 01 VAR_IXB ""
//Dicionario SX3 (Modulo SIGACFG >> Base de Datos >> Diccionarios de Datos >> Editar >> Campos)
//X3_CAMPO (A1_CGC y e A2_CGC)
//X3_F3 = RUCPAR
//Consulta Padrao - F3API turuc.com.py - F3
UserFunctionXBRUCPAR() // --> L
LocalcCod:=""
LocalcVar:=ReadVar()
LocallRet:=RUCBrowse(&(cVar),@cCod)
IflRet
VAR_IXB:=cCod
Endif
Return(lRet)
StaticFunctionRUCBrowse(cGet,cCod)
LocaloDlg,oBrw,oCol,oPan,oGet,oBtn
LocaloFnt:=TFont():New("Arial",,020,,.F.,,,,,.F.,.F.)
LocalbEnd:= {|| lRet:=.T.,oDlg:End()}
LocallRet:=.F.
LocalnPag:=0
LocalaRow:= {}
cGet:=PadR(cGet,50," ")
DEFINEMSDIALOGoDlgTITLE"Consulta turuc.com.py"FROM0,0To400,820PIXEL
oPan:=TPanel():New(0,0,,oDlg,,,,,,410,20,.F.,.F.)
oPan:Align:=CONTROL_ALIGN_TOP
DEFINEFWBROWSEoBrwDATAARRAYARRAYaRowNOCONFIGNOREPORTLINEHEIGHT21OFoDlg
@ 003,005MSGEToGetVARcGetSIZE240,012OFoPanPICTURE"@!"FONToFntVALID (iif(oGet:LMODIFIED,aRow:=SetBrwRow(oBrw,cGet,0),Nil),nPag:=0,.T.) PIXEL
@ 004,250BUTTON"&Consulta" SIZE035,012OFoPanACTION {|| nPag:=0,aRow:=SetBrwRow(oBrw,cGet,nPag),oBtn:SetFocus()} PIXEL
@ 004,290BUTTON"&Seguinte" SIZE035,012OFoPanWHENLen(aRow) >10ACTION {|| ++nPag,aRow:=SetBrwRow(oBrw,cGet, @nPag)} PIXEL
@ 004,330BUTTON"Sitio &Web" SIZE035,012OFoPanWHEN.T. ACTION {|| ShellBrw("https://turuc.com.py/#consulta")} PIXEL
@ 004,370BUTTONoBtnPROMPT"&OK"SIZE035,012OFoPanWHEN ! Empty(aRow) ACTIONEval(bEnd) PIXEL
oBrw:SetDoubleClick(bEnd)
oBrw:SetFontBrowse(TFont():New("Arial",,-14,,.F.))
oBrw:NPOSSIBLEROWS:=15
ADDMARKCOLUMNoColDATA {|| oBrw:oData:aArray[oBrw:At(),4]} OFoBrw
ADDCOLUMNoColDATA {|| oBrw:oData:aArray[oBrw:At(),1]} TITLE"NOMBRE" TYPE"C"SIZE50DECIMAL0PICTURE""HEADERCLICK {|| aSort(aRow,,,{|x,y| x[1]<y[1]}),oBrw:Refresh(.T.)} ALIGN1OFoBrw
ADDCOLUMNoColDATA {|| oBrw:oData:aArray[oBrw:At(),2]} TITLE"RUC" TYPE"C"SIZE10DECIMAL0PICTURE""HEADERCLICK {|| aSort(aRow,,,{|x,y| x[2]<y[2]}),oBrw:Refresh(.T.)} ALIGN1OFoBrw
ADDCOLUMNoColDATA {|| oBrw:oData:aArray[oBrw:At(),3]} TITLE"ESTADO" TYPE"C"SIZE12DECIMAL0PICTURE""HEADERCLICK {|| aSort(aRow,,,{|x,y| x[3]<y[3]}),oBrw:Refresh(.T.)} ALIGN1OFoBrw
aRow:=SetBrwRow(oBrw,cGet,0)
oBrw:Activate()
IfEmpty(cGet)
oGet:SetFocus()
Else
oBrw:SetFocus()
Endif
oBrw:Refresh(.T.)
ACTIVATEMSDIALOGoDlgCENTERED
IflRet
cCod:=AllTrim(aRow[oBrw:nAt,2])
Endif
FreeObj(oBrw)
Return(lRet)
StaticFunctionSetBrwRow(oBrw,cGet,nPag)
LocalaRow:= {}
LocalnPos:=0
LocalnMax:=0
LocalcRaz:=""
LocalcEst:=""
LocalcRuc:=""
LocalcMar:=""
LocaljRow:=Nil
FWMsgRun(Nil,{|| jRow:=TURUCAPIS(cGet, @nPag, @nMax)},Nil,"Consulta - turuc.com.py")
If ! Empty(jRow)
FornPos:=1ToLen(jRow)
cRaz:=jRow[nPos]["razonSocial"]
cRuc:=jRow[nPos]["ruc"]
cEst:=jRow[nPos]["estado"]
cMar:=iif(cEst=="ACTIVO","ENABLE","DISABLE")
aAdd(aRow, {cRaz,cRuc,cEst,cMar})
NextnPos
Endif
//Generico RUC
IfEmpty(aRow)
aAdd(aRow, {"Consumidor Final IC", "44444401-7","Generico","ENABLE"})
aAdd(aRow, {"Clientes Exportación","66666601-6","Generico","ENABLE"})
aAdd(aRow, {"Agentes Diplomáticos","77777701-0","Generico","ENABLE"})
aAdd(aRow, {"Clientes Exterior", "88888801-5","Generico","ENABLE"})
aAdd(aRow, {"Proveedores Exterior","99999901-0","Generico","ENABLE"})
nMax:=1
Endif
//Ajusta Browse
oBrw:SetArray(aRow)
IfValType(oBrw:oBrowse) =="O"
oBrw:oBrowse:cToolTip:="Pagina: "+cValToChar(nPag+1) +"/"+cValToChar(nMax)
IfnPag>=nMax
nPag:=0
Endif
Endif
oBrw:Refresh(.T.)
Return(aRow)
StaticFunctionTURUCAPIS(cKey,nPag,nMax)
LocaloRest:=FwRest():New("https://turuc.com.py")
LocaloJson:=JsonObject():New()
LocalaHead:= {'accept: application/json;charset=UTF-8'}
LocaljRes :=Nil
LocalcRes :=Nil
cKey:=AllTrim(cKey)
IfLen(cKey) >=3
oRest:SetPath("/api/contribuyente/search?page="+cValToChar(nPag)+"&search="+escape(cKey))
IfoRest:Get(aHead)
cRes:=DecodeUtf8(oRest:GetResult())
Else
MsgInfo(oRest:GetLastError(),"Atencion")
EndIf
Endif
If ! Empty(cRes) .And.Empty(oJson:fromJson(cRes))
nMax:=oJson["data"]["paginas"]
jRes:=oJson["data"]["contribuyentes"]
Else
nPag:=0
nMax:=0
jRes:=""
Endif
Return(jRes)
StaticFunctionShellBrw(cUrl)
LocalcBrw,cAux
LocalnRem:=GetRemoteType(@cAux)
IfnRem==2
cBrw:=GetPvProfString("CONFIG","HELPBROWSER","firefox",GetRemoteIniName())
IfEmpty(cBrw)
cBrw:=GetSrvProfString("HELPBROWSER","firefox")
EndIf
If ! Empty(cBrw)
WaitRun(cBrw+" "+cUrl)
ElseIf"MAC" $(Upper(cAux))
MsgInfo("Web browser not found for: "+cAux)
Else
ShellExecute("Browser","/usr/bin/firefox",cUrl,"/",1)
Endif
Else//Windows
ShellExecute("open",cUrl,"","",1)
Endif
Return(Nil)