Histórico da Página
...
Producto |
| ||||
---|---|---|---|---|---|
Línea de producto: |
| ||||
Segmento: |
| ||||
Módulo: | SIGACON, SIGAFAT, SIGAFINSIGACOM | ||||
Función: |
| ||||
País: | PARAGUAY | ||||
Ticket: | 21039076 | ||||
Requisito/Story/Issue (informe el requisito vinculado): | DMICAS-81 |
...
Se está permitiendo incluir más de un proveedor y cliente con proveedor con el mismo número de RUC.
Es importante considerar que únicamente debería permitirse duplicar el número de RUC cuando el proveedor o el cliente es proveedor es extranjero, ya que se hace uso de un RUC genérico.
De igual manera para el caso donde se incluye un proveedor o cliente y una tienda distinta, también está correcto que el RUC sea el mismo.
03. SOLUCIÓN
- Se agrega al sistema creo 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 Se realizó un ajuste en el diccionario de datosSX3 – , agregando la validación a los campos ya mencionados (SX3 – X3_VALID), para validar la tipificación .Punto de entrada 'APIRUCPY', ver asuntos relacionados para uso opcional del cliente.(ver el apartado 04. INFORMACIÓN ADICIONAL).
Totvs custom tabs box | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||
|
04.
...
INFORMACIÓN ADICIONAL
Diccionario de datos (SX3)
Código Pacote: 015072.
Pacote:MI - DMICAS-81 - VALIDAR RUC DUPLICADOS
X3_VALID | A2_CGC | Vazio() .OR. VLDRUCPAR(M->A2_CGC) |
X3_PICTURE | A2_CGC | @R 9999999999 |
Nota: El pacote es de uso interno.
IMPORTANTE: El paquete de actualización de diccionarios está sujeta al proceso de expedición continua.
Consideraciones:
...
- RUC genérico con permiso para duplicar:
- 44444401-7 = Importes consolidados
- 66666601-6 = Clientes exportación
- 77777701-0 = Agentes diplomáticos
- 88888801-5 = Clientes exterior
- 99999901-0 = Proveedores exterior
- Permite duplicar el mismo código con diferentes tiendas.
- El RUC se puede escribir con o sin guion, pero siempre regresará con el guion después de la validación.
- Esta actualización ya no permitirá otros documentos en el campo RUC . (Solo RUC con DV correcto)
...
- .
...
...
05. ASUNTOS RELACIONADOS
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'
Propósito: Realizar búsqueda de RUC utilizando la API y rellenar automáticamente los campos:
A2_NOME, A2_NREDUZ
A1_NOME, A1_NREDUZ
#INCLUDE"PROTHEUS.CH"
#include"FWBROWSE.CH"UserFunctionAPIRUCPY()
LocalcRUC :=PARAMIXB[1]
LocalcVar :=PARAMIXB[2]
LocaloMod :=PARAMIXB[3]
LocaloRest:=FwRest():New("https://turuc.com.py/api/contribuyente")
LocaloJson:=JsonObject():New()
LocalaHead:= {'accept: */*'}
LocalcRest:=""
LocalcRed :=""
LocalcNom :=""
LocallRet :=.F.
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
Propósito: Uso en campos de diccionario SX3 X3_F3//Consulta Especifica no SXB
//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
//X3_CAMPO (A1_CGC e A2_CGC)
//X3_F3 = RUCPAR
//Consulta Padrao - API 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)
No se Aplica