Árvore de páginas

Versões comparadas

Chave

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

01. DATOS GENERALES


Producto

Solucoes_espanhol
SolucaoTOTVS Backoffice

Línea de producto: 

Linhas_totvs_espanhol
LinhaLínea Protheus

Segmento:

Segmentos_totvs_espanhol
SegmentoBackoffice

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 Recibo, y su posterior envío por correo electrónico, el archivo PDF recibido 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 reciboRecibo.

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.


Totvs custom tabs box
tabsPre-condiciones, Procedimiento
idspaso1,paso2
Totvs custom tabs box items
defaultyes
referenciapaso1
  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. 

  • Ir al menú Actualizaciones | Archivos | Entidades Bancaria (FINA094), registrar una Entidad Bancaria. 
    1. 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

        Aviso
        titleImportante

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

        Bloco de código
        titleEjemplo de la rutina Automatica para el guardado y envio de recibo al email del cliente
        linenumberstrue
        collapsetrue
        #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
    2. 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ú.

        Expandir
        titleEjemplo de la rutina automatica F887FINAUTO en el menu de Financiero

        Image Modified

    Totvs custom tabs box items
    defaultno
    referenciapaso2
    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:

        Expandir
        titleEnvio correcto del PDF al correo

        Image Modified

        Image Modified


    04. INFORMACIÓN ADICIONAL

    No aplica

    ...

    Informações

    ...

    titleIMPORTANTE

    Solución disponible para las versiones vigentes o con garantía extendida vigente.

    Para mayor información consulte la sección Versiones vigentes del enlace Ciclo de Vida de Software - TOTVS Linha Protheus

    ...

    05. ASUNTOS RELACIONADOS

    ...