01. DATOS GENERALES


Producto

Línea de producto: 

Segmento:

Módulo:SIGAFIN - Financiero
Función:
RutinaNombre TécnicoFecha
FISA815A.PRWCreación y envío de XML o PDF para países diferentes de México07/01/2026
País:Todos (Excepto México)
Ticket:No aplica
Requisito/Story/Issue (informe el requisito vinculado):DMINA-28433


02. SITUACIÓN/REQUISITO

Al ejecutar la rutina automática F887FINAUTO para la generación de un Recibo, y su posterior envío por correo electrónico, el archivo PDF generado y enviado no se visualiza correctamente. En particular, las secciones de Documentos y Pagos del PDF aparecen vacías, a pesar de contener información en la base de datos relacionada con dicho Recibo.

03. SOLUCIÓN

En la rutina Creación y envío de XML o PDF para países distintos de México (FISA815A) se identificó que el error se origina por la asignación incorrecta de espacios en las variables Recibo (FJT_RECIBO) y Serie (FJT_SERIE).

Dentro de la rutina se ejecuta una búsqueda que requiere respetar estrictamente el tamaño definido de estos campos; al no cumplirse esta condición, no se localizan los registros correspondientes a Documentos a cobrar o compensar ni las formas de pago asociadas al recibo, provocando que el PDF se genere vacío.

Para corregir el problema, se añadieron dos instrucciones (PADR) sobre los campos Recibo (FJT_RECIBO) y Serie (FJT_SERIE) para agregar espacios para completar el dato de acuerdo al tamaño del campo, garantizando que la búsqueda se ejecute correctamente al respetar la longitud esperada de dichos campos.


  1. Realizar un respaldo del repositorio (RPO). 
  2. Realizar la aplicación del parche correspondiente al issue DMINA-28433.
  3. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las fechas.
  4. En el módulo Configurador (SIGACFG):
    • Ir al menú Base de Datos | Diccionario | Base de Datos | Parámetros. 
      • Configurar el parámetro de “Nuevo Recibo en MVC” con valor .T. (MV_RECMVC).
      • Configurar el parámetro de "Generación de RA" con valor .T. (MV_RAGENER).
      • Realizar la configuración para el envío de recibos por email en el siguiente link: 6 - Configuración para envío de correo electrónico.
  5. En el módulo Financiero (SIGAFIN):
    • Ir al menú Actualizaciones | Archivos | Clientes (CRMA980), registrar un Cliente, configurar un email (A1_EMAIL), correo electrónico al que llegara el recibo generado.

    • Ir al menú Actualizaciones | Archivos | Bancos (MATA070), registrar un Banco. 

  6. Compilar la siguiente rutina automática del modelo de recibos (FINA887):
    •  Para más información de la rutina automática dar clic en el siguiente link: 7 - Uso como rutina automática

      La siguiente rutina automática es un ejemplo, no es estándar.

      #INCLUDE "PROTHEUS.CH"
      #INCLUDE "FWMVCDEF.CH"
      #INCLUDE "FWEVENTVIEWCONSTS.CH"
       
      User Function F887FINAUTO()
          Local oMdlTab
          Local jData     := JsonObject():New()
          Local cCRLF     := (chr(10)+chr(13))
          Local cMsj 		:= "Recibo registrado con éxito." + cCRLF
          Local cRecibo 	:= "02010995"	//-> Número de recibo a guardar
          Local cSerie  	:= "" 			//-> Registramos un recibo sin serie
      
          
          
          Local cCliente  := "000001"		//-> Cliente que registraste anteriormente
          Local aResTmp   := {}
          Local nY        := 0
       
          SetFunName("FINA887")
          oMdlTab  := FwLoadModel("FINA887")
          oMdlTab:SetOperation(MODEL_OPERATION_INSERT)
          
          oMdlTab:Activate()
      
          //Encabezado - FJT
          oMdlTab:SetValue('FJT_MASTER', "FJT_FILIAL" , xFilial("FJT"))
          oMdlTab:SetValue('FJT_MASTER', "FJT_DTDIGI" , dDataBase 	)
          oMdlTab:SetValue('FJT_MASTER', "FJT_RECIBO" , cRecibo		)
          oMdlTab:SetValue('FJT_MASTER', "FJT_SERIE"  , cSerie		)
          oMdlTab:SetValue('FJT_MASTER', "FJT_EMISSA" , dDataBase		)
          oMdlTab:SetValue('FJT_MASTER', "FJT_NATURE" , ""			)
          oMdlTab:SetValue('FJT_MASTER', "FJT_CLIENT" , cCliente		)
          oMdlTab:SetValue('FJT_MASTER', "FJT_LOJA"   , "01"			)
          oMdlTab:SetValue('FJT_MASTER', "FJT_COBRAD" , ""			)
          oMdlTab:SetValue('FJT_MASTER', "FJT_RECPRV" , ""			)
          oMdlTab:SetValue('FJT_MASTER', "GERANCC"    , "S"			)
          oMdlTab:SetValue('FJT_MASTER', "DOCUMEN"    , "RA"			)
           
          //Contabilidad
          oMdlTab:SetValue('FJT_MASTER', "ASIENTO"    , 2)    // Muestra Asientos. 1- Si, 2 - No.
          oMdlTab:SetValue('FJT_MASTER', "AGRUPA"     , 2)    // Agrupa Asientos.  1- Si, 2 - No.  
          oMdlTab:SetValue('FJT_MASTER', "ONLINE"     , 2)    // Asientos Online.  1- Si, 2 - No.  
                  
          //Monedas
          oMdlTab:SetValue('MOE_DETAIL',"MOEDA"       , "1"	)
          oMdlTab:SetValue('MOE_DETAIL',"TASA"        , 1		)
          oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"    , 100	)
          oMdlTab:SetValue('MOE_DETAIL',"SALDO"       , 0 	)
      
          // Agregar la forma de pago
          oMdlTab:SetValue('SEL_DETAIL',"EL_CLIENTE"      , cCliente  )
          oMdlTab:SetValue('SEL_DETAIL',"EL_NATUREZ"      , ""		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_LOJA"         , "01"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_DTDIGIT"      , dDataBase	)
          oMdlTab:SetValue('SEL_DETAIL',"EL_TIPO"         , "TF"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_FILIAL"       , xFilial("SEL"))
          oMdlTab:SetValue('SEL_DETAIL',"EL_TIPODOC"      , "TF"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_MOEDA"        , "2"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_EMISSAO"      ,dDataBase	)
          oMdlTab:SetValue('SEL_DETAIL',"EL_DTVCTO"       ,dDataBase	)
          oMdlTab:SetValue('SEL_DETAIL',"EL_TPCRED"       ,"1"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_ACREBAN"      ,"1"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_TERCEIR"      ,""			)
          oMdlTab:SetValue('SEL_DETAIL',"EL_ENDOSSA"      ,""			)
          oMdlTab:SetValue('SEL_DETAIL',"EL_TRANSIT"      ,"2"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_VERSAO"       ,"00"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_SELDOC"       ,"2"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_PREFIXO"      ,"TF"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO"       ,"DIF-0000"	)
          oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR"        ,600		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO"        ,"001"		)
          oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA"      ,"00001"	)
          oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA"        ,"0000000001")
       
          oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2")
       
          oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" , "13:10:40" )
       
          //Se ejecuta el commit
          If oMdlTab:VldData()
              oMdlTab:CommitData()
          Endif
          //Se obtienen los errores del modelo
          aError := oMdlTab:GetErrorMessage()
          If alltrim(aError[6]) <> ""
              cMsj := aError[6]
          else
          // Si no hubo errores al grabar recibo se procede con el timbrado
              jData['origin']     := "FINA998"
              jData['imppdf']     := .F. 
              jData['sendemail']  := .T.
              jData['email']      := "[email protected]"
              jData['emailcc']    := ""
              jData['serie']      := cSerie
              jData['recibo']     := cRecibo
              jData['cliente']    := cCliente
              jData['filial']     := xFilial("SEL")
              jData['client']     := cCliente
              // Se validan los titulos que contiene el recibo de cobro.
              If validTitles(jData)
                  //Llamada a la rutina para la generación de XML y PDF
                  FISA815A(cRecibo, cSerie,/*nOpc*/,@aResTmp,,jData)
       
                  // Ciclo para concatenar la respuesta del timbrado.
                  For nY := 1 To Len(aResTmp)
                      cMsj += aResTmp[nY][3] + cCRLF
                  Next nY
              Endif
          Endif
       
          CONOUT("Mensaje de proceso: "+cMsj)   
           
          oMdlTab:DeActivate()
      Return
  7. Desde el módulo configurador (SIGACFG):
    • Ir al la opción Menus localizado en Actualizaciones | Archivos | Cliente(CRMA980), registrar en el menú de financiero (SIGAFIN) la rutina automática F887FINAUTO como nueva opción del menú.

  1. En el módulo Financiero (SIGAFIN), ir al menú Actualizaciones | Cuentas por Cobrar | Recibo x Rutina Automática (F887FINAUTO).
  2. Verificar que el guardado del recibo y el envío de los archivos XML y PDF se mande correctamente al correo registrado al cliente:
    • Ejemplo:


04. INFORMACIÓN ADICIONAL

No aplica

05. ASUNTOS RELACIONADOS