Árvore de páginas

01. DATOS GENERALES


Producto

TOTVS Backoffice

Línea de producto: 

Línea Protheus

Segmento:

Backoffice

Módulo:SIGAFIN - Financiero.
Función:
RutinaNombreFecha
LOCXNF.PRWNotas Fiscales09/01/2023

Rutinas Involucradas

RutinaNombreFecha
LOCXARG.PRW  Funciones especificas para notas fiscales Argentina21/10/2022
LOCXBOL.PRW Funciones especificas para notas fiscales Bolivia21/10/2022
LOCXCHI.PRW  Funciones especificas para notas fiscales Chile21/10/2022
LOCXCOL.PRW  Funciones especificas para notas fiscales Colombia21/10/2022
LOCXDOM.PRW Funciones especificas para notas fiscales Republica Dominicana08/09/2022
LOCXEQU.PRW  Funciones especificas para notas fiscales Ecuador21/10/2022
LOCXEUA.PRW  Funciones especificas para notas fiscales Estados Unidos21/10/2022
LOCXMEX.PRW Funciones especificas para notas fiscales México27/10/2022
LOCXNF2.PRW  Funciones especificas para notas fiscales 09/12/2022
LOCXPAR.PRWFunciones especificas para notas fiscales Paraguay08/09/2022
LOCXPER.PRWFunciones especificas para notas fiscales Perú16/11/2022
LOCXURU.PRWFunciones especificas para notas fiscales Uruguay21/10/2022
MATA942.PRWEstados Vs Ingresos Brutos08/09/2022
País:México.
Ticket:N/A.
Requisito/Story/Issue (informe el requisito vinculado):DMINA-17973.


02. SITUACIÓN/REQUISITO

Se requiere ejecutar la rutina Totvs Recibos (FINA998) a través del modelo (FINA887) como rutina automática.

03. SOLUCIÓN

En la rutina de Notas Fiscales (LOCXNF), se inicializa variable lFina998 en verdadero cuando se ejecuta el modelo FINA887, de este modo se realizan las operaciones de MsExecAuto de manera satisfactoria.


  1. Crear la rutina que va a contener el Execauto a la rutina Modelo de Recibos (FINA887). Para más detalle consultar el apartado 04. INFORMACIÓN ADICIONAL
  2. Compilar la rutina del punto anterior.
  3. En el módulo Configurador (SIGACFG) desde el menú Entorno| Archivos | Menú (CFGX013)
    • Incluir en el menú la rutina para generación de Recibos de cobro por medio de rutina automática.
  4. A través del módulo SIGAFIN en la rutina de Clientes (Actualizaciones | Archivos | Clientes) incluir un cliente (Código: CSERVI).
  5. A través del módulo SIGAFIS en la rutina de Tipos de Entrada y Salida (Actualizaciones | Archivos | Tipos de Entrada y Salida) incluir una TES de salida.
  6. A través del módulo SIGAFIN en la rutina de Bancos (Actualizaciones | Archivos | Bancos) incluir un banco (Código: CX1).
  7. A través del módulo SIGAFAT en la rutina de Facturación (Actualizaciones | Facturaciones | Facturación) incluir dos facturas de venta para el cliente registrado previamente (Número de documento: 00000000000000000188 y 00000000000000000189).


Ejecución de la rutina automática - Totvs Recibos

  1. Ir al menú donde se agregó la rutina como función de usuario y ejecutar el proceso.
  2. Una vez finalizado, verificar la grabación correcta del recibo de cobro.


Ejemplo de la rutina ExecAuto:

Registro de un recibo de cobro
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
    Local cMsj := "Recibo registrado con éxito."
	Local cRecibo := "AUTRE2"
	Local cSerie  := "   "
	Local cCliente := "CSERVI"  	
     
	SetFunName("FINA887")

 	// Se define el modelo FINA887  
	oMdlTab  := FwLoadModel("FINA887") 
  
	// Se define la operación INSERT en el modelo
	oMdlTab:SetOperation(MODEL_OPERATION_INSERT)
 
	// Se activa el modelo
	oMdlTab:Activate()
  
	//Encabezado de recibo - 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" , "COBRO   ")
	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" 	, "")    
	oMdlTab:SetValue('FJT_MASTER', "DOCUMEN" 	,  "RA") 
	
	// Se activa el grupo de preguntas FIN988 para usar los valores de la tabla de preguntas SX1.
	Pergunte("FIN998",.F.)

	oMdlTab:SetValue('FJT_MASTER', "ASIENTO" 	, MV_PAR01) // ¿Muestra  Asientos ?          
	oMdlTab:SetValue('FJT_MASTER', "AGRUPA" 	, MV_PAR02) // ¿Agrupa Asientos ?            
	oMdlTab:SetValue('FJT_MASTER', "ONLINE" 	, MV_PAR03) //¿Asientos Online ?            

    //Monedas
    oMdlTab:SetValue('MOE_DETAIL',"MOEDA" 		, "1")
	oMdlTab:SetValue('MOE_DETAIL',"TASA" 		, 1)
	oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"	, 2820) // Monto total que suman las formas de pago.
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 ) // Saldo que queda por cobrar entre los títulos x cobrar y las formas de pago.
	oMdlTab:GetModel('MOE_DETAIL' ):AddLine()
	oMdlTab:SetValue('MOE_DETAIL',"MOEDA" 		, "2")
	oMdlTab:SetValue('MOE_DETAIL',"TASA" 		, 0)
	oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"	, 0)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )

    // Agregar las formas de pago - Campos de tabla SEL
    oMdlTab:SetValue('SEL_DETAIL',"EL_CLIENTE" 		,  cCliente )
	oMdlTab:SetValue('SEL_DETAIL',"EL_NATUREZ" 		, "COBRO   ")
	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" 		, "1")
    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" ,"1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_ENDOSSA" ,"2")
    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_FORPGO" ,"03")
    oMdlTab:SetValue('SEL_DETAIL',"EL_HRPAGO" ,"12:00:00")
    oMdlTab:SetValue('SEL_DETAIL',"EL_HORA" ,"11:00:13")
    oMdlTab:SetValue('SEL_DETAIL',"EL_PREFIXO" ,"TF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"TFAU-0000")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,820)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
	
	//Para agregar una nueva linea al grid de las formas de pago
	oMdlTab:GetModel('SEL_DETAIL' ):AddLine()
	
	oMdlTab:SetValue('SEL_DETAIL',"EL_CLIENTE" 		,  cCliente  )
	oMdlTab:SetValue('SEL_DETAIL',"EL_NATUREZ" 		, "COBRO   ")
	oMdlTab:SetValue('SEL_DETAIL',"EL_LOJA" 		, "01")
	oMdlTab:SetValue('SEL_DETAIL',"EL_DTDIGIT" 		, dDataBase)
    oMdlTab:SetValue('SEL_DETAIL',"EL_TIPO" 		, "EF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_FILIAL"		, xFilial("SEL"))
	oMdlTab:SetValue('SEL_DETAIL',"EL_TIPODOC" 		, "EF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_MOEDA" 		, "1")
    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" ,"1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_ENDOSSA" ,"2")
    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_FORPGO" ,"01")
    oMdlTab:SetValue('SEL_DETAIL',"EL_HRPAGO" ,"12:00:00")
    oMdlTab:SetValue('SEL_DETAIL',"EL_HORA" ,"11:00:13")
    oMdlTab:SetValue('SEL_DETAIL',"EL_PREFIXO" ,"EF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"EFAUT-0009")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,2000)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
    
	//Detalle de los titulos x cobrar - Tabla SE1
    oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"00000000000000000188"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_PARCELA" 		, "A")
	oMdlTab:SetValue('SE1_DETAIL',"E1_TIPO" 		, "NF")
	oMdlTab:SetValue('SE1_DETAIL',"E1_CLIENTE" 		, cCliente)
	oMdlTab:SetValue('SE1_DETAIL',"E1_LOJA" 		, "01")
	oMdlTab:SetValue('SE1_DETAIL',"E1_DESCONT" 		, 0)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MULTA" 		, 0)
	oMdlTab:SetValue('SE1_DETAIL',"E1_JUROS" 		, 0)
	oMdlTab:SetValue('SE1_DETAIL',"E1_SALDO" 		, 2320)
	oMdlTab:SetValue('SE1_DETAIL',"BAIXAR" , 2320)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  239)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

  	//Para agregar una nueva linea al grid de titulos x cobrar
	oMdlTab:GetModel('SE1_DETAIL' ):AddLine()

	oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"00000000000000000189"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_PARCELA" 		, "A")
	oMdlTab:SetValue('SE1_DETAIL',"E1_TIPO" 		, "NF")
	oMdlTab:SetValue('SE1_DETAIL',"E1_CLIENTE" 		, cCliente)
	oMdlTab:SetValue('SE1_DETAIL',"E1_LOJA" 		, "01")
	oMdlTab:SetValue('SE1_DETAIL',"E1_DESCONT" 		, 0)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MULTA" 		, 0)
	oMdlTab:SetValue('SE1_DETAIL',"E1_JUROS" 		, 0)
	oMdlTab:SetValue('SE1_DETAIL',"E1_SALDO" 		, 1160)
	oMdlTab:SetValue('SE1_DETAIL',"BAIXAR" , 500)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  240)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

    oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2") // Factoraje financiero, 1 - Indica que es una operación de factoraje | 2 - No es operación de factoraje

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "09:00:13" ) // Hora de guardado del recibo.

    //Se ejecuta el commit
    If oMdlTab:VldData() // Se detonan las validaciones del modelo
        // Si pasa las validaciones, se ejecutara el CommitData del modelo para guardar los datos.
		oMdlTab:CommitData()
    Endif

	// En caso de usar número consecutivos en el recibo
    If !Empty(GetSx3Cache("EL_RECIBO","X3_RELACAO"))
		If Alltrim(cRecibo) <> Alltrim(InitPad(GetSX3Cache("EL_RECIBO","X3_RELACAO")))
			RollBackSX8()
		EndIf
	EndIf
	
	// Se obtienen los errores del modelo
    aError := oMdlTab:GetErrorMessage()
    If alltrim(aError[6]) <> ""
		cMsj := aError[6] 
	Endif
	CONOUT("Mensaje de proceso: "+cMsj) 
	
    oMdlTab:DeActivate()

Return 


04. INFORMACIÓN ADICIONAL

Para el detalle del proceso de implementación y ejemplos de rutina automática, consultar:

Uso como rutina automática

05. ASUNTOS RELACIONADOS

TOTVS Recibo