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 (ver el apartado 04. INFORMACIÓN ADICIONAL).
Totvs custom tabs box | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||
|
04. INFORMACIÓN ADICIONAL
- 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)
...
Diccionario de datos (SX3)
Código Pacote: 015072.
Pacote:MI - DMICAS-81 - VALIDAR RUC DUPLICADOS
Nota: El pacote es de uso interno.
X3_VALID |
A2_CGC | Vazio() .OR. VLDRUCPAR(M->A2_CGC) |
X3_PICTURE | A2_CGC | @R 9999999999 |
Card documentos Informacao Es necesario realizar la actualización del diccionario por medio del UPDDISTR con el paquete de diccionario de este requisito. Titulo ¡IMPORTANTE!
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
Programa ADVPL para consumo de API, configuración de usuario.
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
No se Aplica#INCLUDE"PROTHEUS.CH"
#INCLUDE"FWBROWSE.CH"//Dicionario SX3
//X3_CAMPO (A1_CGC e A2_CGC)
//X3_VLDUSER = APIRUCPY()
UserFunctionAPIRUCPY(cRUC)
LocalcVar :=ReadVar()
LocaloMod :=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(.T.)
//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)