Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Producto

Solucoes_espanhol
SolucaoTOTVS Backoffice

Línea de producto: 

Linhas_totvs_espanhol
LinhaLínea Protheus

Segmento:

Segmentos_totvs_espanhol
SegmentoBackoffice

Módulo:SIGACON, SIGAFAT, SIGAFINSIGACOM
Función:
Función Nombre
LOCXPAR.PRWGenérica Paraguay
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
tabsConfiguraciones previas, Flujo de prueba
idspaso1,paso2
Vazio()
  • .
OR. VLDRUCPAR(M->A2_CGC)
Totvs custom tabs box items
defaultyes
referenciapaso1
  • Realizar la copia de seguridad del repositorio (RPO).
  • Aplicar el parche correspondiente al problema DMICAS-81.
  • Actualizar el diccionario de datos.

SX3

Campo

Antes

Después

X3_VALIDA1_CGCVazio() .Or. A030RUC(M->A1_CGC)Vazio() .OR. VLDRUCPAR(M->A1_CGC)
X3_VALIDA2_CGC
X3_PICTUREA1_CGC@R 9999999999                                @R 9999999999
X3_PICTUREA2_CGC@R XXXXXXXXXXXXX                             @R 9999999999
Totvs custom tabs box items
defaultno
referenciapaso2

Validaciones sugeridas: 


Prueba¿Debe permitir?
Intente incluir un proveedor con un RUC existente para el nuevo código
. (
NO
)
Modificar un proveedor con RUC existente en otro código
. (
NO
)
Incluir un proveedor con RUC existente con una tienda diferente
. ()
SI
Incluir proveedores con RUC genéricos para diferentes códigos
. ()
SI
Incluir proveedores sin RUC (vacío)SI


04.

...

 INFORMACIÓN ADICIONAL


Diccionario de datos (SX3)

Código Pacote: 015072.

Pacote:MI - DMICAS-81 - VALIDAR RUC DUPLICADOS

X3_VALIDA2_CGCVazio() .OR. VLDRUCPAR(M->A2_CGC)
X3_PICTUREA2_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