Á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

...

Totvs custom tabs box
tabsConfiguraciones previas, Flujo de prueba
idspaso1,paso2
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_CGCVazio() .OR. VLDRUCPAR(M->A2_CGC)
X3_PICTUREA1_CGC@R 9999999999
                               
@R 9999999999
X3_PICTUREA2_CGC
@R XXXXXXXXXXXXX                             
@R 9999999999
Totvs custom tabs box items
defaultno
referenciapaso2
  • 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. ()
  • Incluir proveedores con RUC genéricos para diferentes códigos. ()
  • Incluir proveedores sin RUC (vacío). ()

...

  • 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)


Se debe tener modificado o diccinário Diccinário de datos SX3, se deben hacerlo desde el configurador SIGACFG (Entorno | Archivos| Base de datos):(SX3)

Código Pacote: 015072.

Pacote: MI - DMICAS-81 - VALIDAR RUC DUPLICADOS

...

Card documentos
InformacaoEs 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.

#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
      &(cVar) :=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