Árvore de páginas

ÍNDICE


01. VISIÓN GENERAL

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


02. PROCESO DE IMPLEMENTACIÓN

Para la ejecución de la rutina Totvs Recibo (FINA998) de forma automática, es necesario utilizar el modelo definido para recibos (FINA887).

En el modelo de Recibos de Cobro (FINA887), se definen todos los campos de la tablas de Encabezado de recibos (FJT) y Recibos de Cobro (SEL) dependiendo del país donde se ejecute.

Ejemplo:

Para la forma de pago algunos de los campos estándar para todos los países son los siguientes:

oMdlTab:SetValue('SEL_DETAIL',"EL_CLIENTE"      , "CSERVI"  ) // Código del cliente
oMdlTab:SetValue('SEL_DETAIL',"EL_NATUREZ"      , "COBRO   ") //  // Código Modalidad
oMdlTab:SetValue('SEL_DETAIL',"EL_LOJA"         , "01") // Código tienda
oMdlTab:SetValue('SEL_DETAIL',"EL_DTDIGIT"      , dDataBase) // // Fecha de digitación
oMdlTab:SetValue('SEL_DETAIL',"EL_TIPO"         , "TF") // Tipo de forma de pago

Para la forma de pago existe algunos exclusivos de cada país:

    oMdlTab:SetValue('SEL_DETAIL',"EL_FORPGO" ,"03") // Campo Forma de Pago para México

              oMdlTab:SetValue('SEL_DETAIL',"EL_HRPAGO", "12:00:00") // Campo Hora de pago para México

              oMdlTab:SetValue('SEL_DETAIL',"EL_HORA", "11:00:13") // Campo Hora para México

    oMdlTab:SetValue('SEL_DETAIL',"EL_ALQIMP1"  , 100) // Campo Valor Impuesto 1 usado en Argentina para retenciones.


Importante

Es importante que al momento de informar los valores en el modelo, se indiquen solo las propiedades que pertenecen al país donde se vaya a ejecutar el "Commit" del modelo, ya que si se informan algún otro campo que no existe para dicho país se detonará error en la ejecución.

  1. Compilar la rutina que contenga la Función de Usuario con el ExecAuto a la rutina Modelo de Recibos (FINA887) (Ver ejemplo en la sección 04. INFORMACIÓN ADICIONAL)
  2. En el módulo Configurador (SIGACFG) desde el menú EntornoArchivos Menú (CFGX013)
    • Incluir en el menú la rutina para generación de Recibos de cobro por medio de rutina automática.


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

03. EJEMPLO DE UTILIZACIÓN

A continuación se muestran algunos ejemplos para ejecutar las operaciones de INSERT, DELETE y UPDATE del modelo.

En el modelo de recibos(FINA887), existen los siguientes grid para informar los datos del recibo:

FJT_MASTER - Grid para informar los datos del encabezado(FJT) y configuraciones de preguntas.

Propiedades preguntas

GERANCC -  Determina si genera RA , .T. - Genera RA | .F. o vacío - No genera RA 
DOCUMEN - Para generar saldo - Para México y Perú no es considerado el contenido informado.
ASIENTO - Muestra Asientos. 1- Si, 2 - No.
AGRUPA - Agrupa Asientos. 1- Si, 2 - No.
ONLINE - Asientos Online. 1- Si, 2 - No.

Importante

Para considerar el valor configurado para el grupo de preguntas de la rutina de Totvs Recibo en la tabla SX1 - Preguntas, es necesario activar el grupo de preguntas "FIN998" de la siguiente manera:

// Se activa el grupo de preguntas FIN988 para usar los valores de la tabla de preguntas SXI.

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 ?


MOE_DETAIL - Grid para informar lo recibido y el saldo x cobrar del recibo así como las monedas y las tasas usadas en la transacción.

Propiedades

MOEDA-  Número de la moneda, por ejemplo para la moneda 1 se informa debe informar "1"
TASA- Tasa de Moneda
RECIBIDO- Monto recibo x cobrar en dicha moneda.
SALDO- Saldo que queda por cobrar en dicha moneda.


SEL_DETAIL - Grid para informar los datos de las formas de pago(tabla SEL).

Propiedades

Contiene los campos de la tabla SEL


ADM_DETAIL - Grid para informar el código de la administradora financiera(tabla SAE).

Propiedades

CODE - Código de la Administradora Financiera utilizada para las formas de pago CC - Tarjeta de Crédito.


SE1_DETAIL - Grid para informar los datos de los títulos por cobrar(tabla SE1).

Propiedades

Contiene los campos de la tabla SE1


Ejemplos:

Registro de recibo


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 


Borrado de recibo


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

Function F887FINAUTO()
    Local oMdlTab
    Local cMsj := "Recibo borrado con éxito."
 	Local cRecibo := "AUTRE2"

    Pergunte("FIN088",.F.)
	SetMVValue("FIN088","MV_PAR04", 2)			//Muestra asientos contables - 1 = Si / 2 = No
	SetMVValue("FIN088","MV_PAR05", 2)			//Agrupa asientos contables - 1 = Si / 2 = No
	
	oMdlTab := FwLoadModel("FINA887")
	DbSelectArea("FJT")
	FJT->(DbSetOrder(2))
	If FJT->(MsSeek(xFilial("FJT")+ cRecibo,.T.))
		oMdlTab:SetOperation(MODEL_OPERATION_DELETE)
		oMdlTab:Activate()
		If oMdlTab:VldData()
			oMdlTab:CommitData()
		Endif	
	EndIf

    aError := oMdlTab:GetErrorMessage()
    If alltrim(aError[6]) <> ""
		cMsj := aError[6] 
	Endif
	CONOUT("Mensaje de proceso: "+cMsj)  
	
    oMdlTab:DeActivate()

Return 

Anulación de recibo


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

Function F887FINAUTO()
    Local oMdlTab
    Local cMsj := "Recibo borrado con éxito."
	Local cSerie := "   "
	Local cRecibo := "COMP03"

	oMdlTab := FwLoadModel("FINA887")
	If FJT->(MsSeek(xFilial("FJT")+cSerie+cRecibo,.T.))
		oMdlTab:SetOperation(MODEL_OPERATION_UPDATE)
		oMdlTab:Activate()
		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 ? 	
		oMdlTab:SetValue('FJT_MASTER', "FJT_CANCEL" , "1")	
		// Motivo de cancelación - Solo aplica para México
		oMdlTab:SetValue('SEL_DETAIL',"EL_TIPAGRO" ,"02")
					
		If oMdlTab:VldData()
			oMdlTab:CommitData()
		Endif

		aError := oMdlTab:GetErrorMessage()
		If alltrim(aError[6]) <> ""
			cMsj := aError[6] 
		Endif
		CONOUT("Mensaje de proceso: "+cMsj)    //Solución: 
		
		oMdlTab:DeActivate()
	Endif

Return 

Generación de Anticipos

Para la generación de un pago anticipado(RA), es necesario informar las siguientes propiedades:

  • GERANCC - Propiedad para definir si se va a generar el anticipo. "S" - Genera RA | "N" o vacío - No genera RA

  • DOCUMEN - Propiedad que define el documento que se va a generar. Por ejemplo "RA".

Ejemplo:

Generación recibo de cobro con RA
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "RARC01"
	Local cSerie  := "   "
	Local cCliente := "CSERVI"


    SetFunName("FINA887")
	oMdlTab  := FwLoadModel("FINA887")
	oMdlTab:SetOperation(MODEL_OPERATION_INSERT)
	oMdlTab:Activate()
	//Encabezado - FJT
	oMdlTab:SetValue('FJT_MASTER', "FJT_FILIAL" , xFilial("FJT")) // FILIAL
	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" 	, "S")  // Para generación de RA, S - Genera RA | N o vacío - No genera RA    
	oMdlTab:SetValue('FJT_MASTER', "DOCUMEN" 	,  "RA")
	
	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"	, 1000)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 1000 )
	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 la forma de pago
    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:30:00")
    oMdlTab:SetValue('SEL_DETAIL',"EL_HORA" ,"12:30:00")
    oMdlTab:SetValue('SEL_DETAIL',"EL_PREFIXO" ,"TF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"RA00002-0000")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,1000)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
		
	//Operación de factoraje
	oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2") 


    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "12:30:00" )

    //Se ejecuta el commit
    If oMdlTab:VldData()
        oMdlTab:CommitData()
    Endif


    aError := oMdlTab:GetErrorMessage()
    If alltrim(aError[6]) <> ""
		cMsj := aError[6] 
	Endif

	CONOUT("Mensaje de proceso: "+cMsj)    
	
    oMdlTab:DeActivate()


Return 

 Procesos específicos para México 

Factoraje Financiero

Para realizar una operación de factoraje es importante informar las siguientes propiedades en el modelo:

  • EL_FACTOR - Propiedad que define si se trata de una operación de factoraje. "1" - Es operación de factoraje, "2" - No es operación de factoraje.
  • FACTOR - Propiedad que define si se trata de una operación de factoraje. "1" - Es operación de factoraje, "2" - No es operación de factoraje.
  • VALUE - Valor correspondiente a la compensación realizada desde rutina Compensación entre carteras (tabla SE5).
  • RECNO - Número de registro de la compensación en la tabla SE5 - Movimientos bancarios.

Para más información consultar el siguiente enlace: DT Recibo de cobro por factoraje TOTVS Recibo MEX

Ejemplo:

Factoraje
	//Operación de factoraje
	oMdlTab:SetValue('SEL_DETAIL','EL_FACTOR' , "1") // Informar 1 para indicar que es operación de factoraje
	oMdlTab:SetValue('FAC_DETAIL','FACTOR',"1") // Informar 1 para indicar que es operación de factoraje
	oMdlTab:SetValue('FAC_DETAIL','VALUE',1500) // Valor correspondiente a la compensación realizada desde rutina Compensación entre carteras.
	oMdlTab:SetValue('COM_DETAIL','RECNO',478) // Número de registro en la tabla Movimientos Bancarios.

Timbrado de recibo de cobro

El timbrado de un recibo de cobro se realiza por medio de la rutina CFDI Complemento de recepción de pagos(FISA815). Se puede realizar después del guardado de un recibo o con un recibo ya previamente registrado.

La rutina CFDI Complemento de recepción de pagos(FISA815) recibe un nuevo parámetro de tipo JSON, con las siguientes propiedades:

jData['origin']  - Rutina origen la cual debe ser "FINA998"
jData['imppdf']  - Propiedad que define si se imprime recibo o no, .T. - se imprime recibo , .F. - No imprime
jData['sendemail'] - Propiedad que define si el recibo se enviara por correo, .T. - Se enviara por correo, .F. - No se enviará.
jData['email']  - Propiedad que define al correo donde se enviará el recibo.
jData['emailcc'] - Propiedad que define el correo con copia al cual se enviará el recibo
jData['serie'] - Serie del recibo
jData['recibo'] - Número de recibo
jData['cliente'] - Cliente del recibo utilizada en la función validar los títulos que contiene el recibo y ver si puede ser timbrado(función validTitles)
jData['filial'] - Filial del recibo (tabla SEL)
jData['client'] - Cliente del recibo

Para más información sobre el proceso de Generación de Complemento de recepción de pago consultar el siguiente enlace: DT Complemento de Recepción de Pago V 2.0 del CFDI 4.0

Importante

Para generar recibos con serie, es necesario contar con el parámetro MV_SERREC igual a ".T." y a su vez obtener el número consecutivo de la tabla SX5 o en su defecto informarlo de forma directa, cuidando que la numeración sea la correcta.

Ejemplo para obtener el consecutivo del recibo de la tabla SX5:

DbSelectArea("SX5")
DbSetOrder(1) // X5_FILIAL+X5_TABELA+X5_CHAVE                                                                                                                                    
If SX5->(MSSeek( xFilial("SX5")+"RN"+cSerie ))
    cRecibo := StrZero( Val( X5Descri() )
Endif


Ejemplo:

Timbrado desde guardo del recibo
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "CFGIAU"
	Local cSerie  := "   "
	Local cCliente := "CSERVI"
	Local jData		:= JsonObject():New() // Objeto Json que contiene la información del recibo a timbrar y algunas configuraciones.
	Local aResTmp   := {} // Arreglo para guardar los errores del timbrado
	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")) // FILIAL
	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")
	
	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"	, 1110)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )
	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 la forma de pago
    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" ,"TFAUTO-0000")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,440)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
	
	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" ,670)
    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
    oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"00000000000000000191"	)
	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" , 660)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  243)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")
	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" , 450)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  244)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

    oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2")

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "09:00:13" )

    //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']  := .F.
		jData['email']		:= ""
		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)
			//Timbrado de recibo de cobro
			FISA815(cRecibo, cSerie,,,@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 
Timbrado con recibo previamente generado
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
	Local cCRLF	    := (chr(10)+chr(13)) // Salto de línea
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "CFGIAU"
	Local cSerie  := "   "
	Local cCliente := "CSERVI"
	Local jData		:= JsonObject():New() // Objeto Json que contiene la información del recibo a timbrar y algunas configuraciones.
	Local aResTmp   := {} // Arreglo para guardar los errores del timbrado
	Local nY        := 0


	jData['origin']		:= "FINA998" 
	jData['imppdf'] 	:= .F.  
	jData['sendemail']  := .F.
	jData['email']		:= ""
	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)
		//Timbrado de recibo de cobro
		FISA815(cRecibo, cSerie,,,@aResTmp,jData)

 		// Ciclo para concatenar la respuesta del timbrado.
		For nY := 1 To Len(aResTmp)
			cMsj += aResTmp[nY][3] + cCRLF
		Next nY
	Endif 

	CONOUT("Mensaje de proceso: "+cMsj)    
	
    oMdlTab:DeActivate()

Return 

Recibo con recibo sustituto

Para generar un recibo que contiene un recibo de cobro relacionado, previamente anulado con motivo 01 - Comprobante emitido con errores con relación se deben informar las siguientes propiedades:

Factoraje
 	//Agregar recibo sustituto
	oMdlTab:SetValue('SEL_DETAIL',"EL_SERSUS" 			, cSerieS )
	oMdlTab:SetValue('SEL_DETAIL',"EL_RECSUS" 			, cReciboS )

Recibo de cobro de tipo compensación

Para generar un recibo de cobro de tipo Compensación se deben informar las siguientes propiedades en el modelo:

  • EL_IDENTEE - Identificador de la compensación generada por medio de la rutina Compensación entre carteras(campo E5_IDENTEE).
  • EL_FCHIDEN - Fecha de la compensación generada por medio de la rutina Compensación entre carteras (campo E5_DATA).

Para más información del proceso consultar le siguiente enlace: DT Recibo de cobro por compensaciones - TOTVS Recibo MEX

Ejemplo:

Factoraje
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "COMP09"
	Local cSerie  := "   "
	Local cReciboS := ""
	Local cSerieS  := "   "
	Local cMotC    := ""
	Local cCliente := "CSERVI"
	Local jData		:= JsonObject():New()
	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")) // FILIAL
	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")
	
	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"	, 500 )
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )
	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 forma de pago	tipo CO
	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" 		, "CO")
    oMdlTab:SetValue('SEL_DETAIL',"EL_FILIAL"		, xFilial("SEL"))
	oMdlTab:SetValue('SEL_DETAIL',"EL_TIPODOC" 		, "CO")
    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" ,"3")
    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_HRPAGO" ,"12:00:00")
    oMdlTab:SetValue('SEL_DETAIL',"EL_HORA" ,"12:00:13")
    oMdlTab:SetValue('SEL_DETAIL',"EL_PREFIXO" ,"CO")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"COMP00-0009")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,500)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
	oMdlTab:SetValue('SEL_DETAIL',"EL_FORPGO" ,"17") // Forma de pago 17 - Compensación

    oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2")
	// Recibo por compensaciones
	oMdlTab:SetValue('SEL_DETAIL',"EL_IDENTEE"		, "000002") // Código de la compensación
	oMdlTab:SetValue('SEL_DETAIL',"EL_FCHIDEN"		, STOD("20221229")) // Fecha en que se realizo la compensación.

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "12:00:13" )

    //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'] 	:= .T.
		jData['sendemail']  := .F.
		jData['email']		:= ""
		jData['emailcc']	:= ""
		jData['serie']		:= cSerie
		jData['recibo']		:= cRecibo
		jData['cliente']	:= cCliente 
		jData['filial']		:= xFilial("SEL")
		jData['client']	    := cCliente
		
		FISA815(cRecibo, cSerie,,,@aResTmp,jData,cSerieS,cReciboS,cMotC)
	  	// Ciclo para concatenar la respuesta del timbrado.
		For nY := 1 To Len(aResTmp)
			cMsj += aResTmp[nY][3] + cCRLF
		Next nY 
	Endif

	CONOUT("Mensaje de proceso: "+cMsj)    
	
    oMdlTab:DeActivate()



Return 


  Procesos específicos para Argentina | Uruguay

Diferencia cambiaria 

Para la generación de diferencia de cambio se requiere contar con la siguiente configuración descrita en el siguiente enlace: DT Activación de Diferencia Cambiaria para TOTVS Recibos URU y ARG

A continuación se presenta un ejemplo para realizar la diferencia de cambio a través del modelo:

Diferencia de cambio
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "000000000052"
	Local cSerie  := "A  "
	Local cCliente := "M14011"
	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")) // FILIAL
	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")
	
	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"	, 0)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )
	oMdlTab:GetModel('MOE_DETAIL' ):AddLine()
	oMdlTab:SetValue('MOE_DETAIL',"MOEDA" 		, "2")
	oMdlTab:SetValue('MOE_DETAIL',"TASA" 		, 25.0000)
	oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"	, 1000)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )

    // Agregar la forma de pago
    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" 		, "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" ,"030")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"0002 ")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"124681012 ")
	
	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" 		, "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" ,"EF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"DIF-0009")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,400)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"030")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"0002 ")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"124681012 ")

    //Detalle de los titulos
    oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"NF135850600B"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_PARCELA" 		, "  ")
	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" 		, 1000)
	oMdlTab:SetValue('SE1_DETAIL',"BAIXAR" , 1000)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  303)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

    oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2")

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "12:00:13" )

    //Se ejecuta el commit
    If oMdlTab:VldData()
        oMdlTab:CommitData()
    Endif

    aError := oMdlTab:GetErrorMessage()
    If alltrim(aError[6]) <> ""
		cMsj := aError[6] 
	Endif

	CONOUT("Mensaje de proceso: "+cMsj)    
	
    oMdlTab:DeActivate()
Return    


Configuración de diferencia de cambio de cuentas por cobrar: DT Activación de Diferencia Cambiaria para TOTVS Recibos URU y ARG

  Procesos específicos para Paraguay | Argentina | Perú

Recibos de cobro con retenciones.

Para generar un recibo que contenga retenciones es necesario informar las siguientes propiedades del modelo:

Para Argentina:

EL_ALQIMP1 - Tasa de la retención

EL_VALIMP1 - Valor de la retención


RG - Retención de Ganancias, RI - Retención IVA, RB - Retención Ing. Brutos, RM - Retención Municipal

EL_PROVIN - Provincia

EL_CFO - Código Fiscal


RG - Retención de Ganancias

EL_AGREGAN - Act. para retención de IG


RM - Retención Municipal

EL_RET_MUN - Cód. Ret Municipal 

EL_EST - Estado


RS-  Retención SUSS

EL_CONCSUS - Concepto de SUSS         

EL_SIRESEG - Código Segur. SIRE       

EL_SIRECER - Número certificado SIRE  


Para Perú

EL_DOCTO - Número de Título para retención

EL_SDOCTO- Serie de Título para retención

EL_SERRET - Serie para Certificado de retención


Para Paraguay

EL_DOCTO - Número de Título para retención

EL_SDOCTO- Serie de Título para retención

EL_ALQIMP1 - Tasa de la retención

EL_VALIMP1 - Valor de la retención

EL_CFO - Código Fiscal

Ejemplo:

Retenciones Argentina
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "000000000052"
	Local cSerie  := "A  "
	Local cCliente := "M14011"
	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")) // FILIAL
	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")
	
	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"	, 0)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )
	oMdlTab:GetModel('MOE_DETAIL' ):AddLine()
	oMdlTab:SetValue('MOE_DETAIL',"MOEDA" 		, "2")
	oMdlTab:SetValue('MOE_DETAIL',"TASA" 		, 25.0000)
	oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"	, 1000)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )

    // Agregar la forma de pago
    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" 		, "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" ,"030")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"0002 ")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"124681012 ")
	
	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" 		, "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" ,"EF")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"DIF-0009")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,400)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"030")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"0002 ")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"124681012 ")

    //Detalle de los titulos
    oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"NF135850600B"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_PARCELA" 		, "  ")
	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" 		, 1000)
	oMdlTab:SetValue('SE1_DETAIL',"BAIXAR" , 1000)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  303)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

    oMdlTab:SetValue('FAC_DETAIL','FACTOR',"2")

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "12:00:13" )

    //Se ejecuta el commit
    If oMdlTab:VldData()
        oMdlTab:CommitData()
    Endif

    aError := oMdlTab:GetErrorMessage()
    If alltrim(aError[6]) <> ""
		cMsj := aError[6] 
	Endif

	CONOUT("Mensaje de proceso: "+cMsj)    
	
    oMdlTab:DeActivate()
Return    
Retenciones Perú
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con éxito." + cCRLF
	Local cRecibo := "R55555"
	Local cSerie  := "   "
	Local cCliente := "000001"
	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")) // FILIAL
	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")
	
	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"	, 1000)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )
	oMdlTab:GetModel('MOE_DETAIL' ):AddLine()
	oMdlTab:SetValue('MOE_DETAIL',"MOEDA" 		, "2")
	oMdlTab:SetValue('MOE_DETAIL',"TASA" 		, 25.0000)
	oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"	, 0)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )

    // Agregar la forma de pago
    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" 		, "RI")
    oMdlTab:SetValue('SEL_DETAIL',"EL_FILIAL"		, xFilial("SEL"))
	oMdlTab:SetValue('SEL_DETAIL',"EL_TIPODOC" 		, "RI")
    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" ,"4")
    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_PREFIXO" ,"RI")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"RI-000011")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,1000)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
	//Campos para retenciones
	oMdlTab:SetValue('SEL_DETAIL',"EL_DOCTO" 		,"0000000000041" )
	oMdlTab:SetValue('SEL_DETAIL',"EL_SDOCTO" 	, "A")
	oMdlTab:SetValue('SEL_DETAIL',"EL_PARDOC" 	, "")

	// RI - Renteción IGV
	oMdlTab:SetValue('SEL_DETAIL',"EL_SERRET" 			, "A") // Serie Retención

    //Detalle de los titulos
    oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A"	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"0000000000041")
	oMdlTab:SetValue('SE1_DETAIL',"E1_PARCELA" 		, "  ")
	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" 		, 1190)
	oMdlTab:SetValue('SE1_DETAIL',"BAIXAR" , 1000)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  53)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "12:00:13" )

    //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] 
	Endif

	CONOUT("Mensaje de proceso: "+cMsj)    
	
    oMdlTab:DeActivate()

Return 
Retenciones Paraguay
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH" 
#INCLUDE "FWEVENTVIEWCONSTS.CH" 
#INCLUDE 'FINA887.CH'

Function F887FINAUTO()
    Local oMdlTab
	Local cCRLF	    := (chr(10)+chr(13))
    Local cMsj := "Recibo registrado con exito." + cCRLF
	Local cRecibo := "0201202302   "
	Local cSerie  := "   "
	Local cCliente := "000001"
	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")) // FILIAL
	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")
	
	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"	, 1000)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )
	oMdlTab:GetModel('MOE_DETAIL' ):AddLine()
	oMdlTab:SetValue('MOE_DETAIL',"MOEDA" 		, "2")
	oMdlTab:SetValue('MOE_DETAIL',"TASA" 		, 25.0000)
	oMdlTab:SetValue('MOE_DETAIL',"RECIBIDO"	, 0)
	oMdlTab:SetValue('MOE_DETAIL',"SALDO" 		, 0 )

    // Agregar la forma de pago
    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" 		, "RI")
    oMdlTab:SetValue('SEL_DETAIL',"EL_FILIAL"		, xFilial("SEL"))
	oMdlTab:SetValue('SEL_DETAIL',"EL_TIPODOC" 		, "RI")
    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" ,"4")
    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_PREFIXO" ,"RI")
    oMdlTab:SetValue('SEL_DETAIL',"EL_NUMERO" ,"RI-000011")
    oMdlTab:SetValue('SEL_DETAIL',"EL_VALOR" ,1000)
    oMdlTab:SetValue('SEL_DETAIL',"EL_BANCO" ,"CX1")
    oMdlTab:SetValue('SEL_DETAIL',"EL_AGENCIA" ,"00001")
    oMdlTab:SetValue('SEL_DETAIL',"EL_CONTA" ,"0000000001")
	//Campos para retenciones
	oMdlTab:SetValue('SEL_DETAIL',"EL_DOCTO" 		,"1488600000012" )
	oMdlTab:SetValue('SEL_DETAIL',"EL_SDOCTO" 	, "A")
	oMdlTab:SetValue('SEL_DETAIL',"EL_CFO" 	, "")
	oMdlTab:SetValue('SEL_DETAIL',"EL_ALQIMP1" 	, 100)
	oMdlTab:SetValue('SEL_DETAIL',"EL_VALIMP1" 		, 1000)

    //Detalle de los titulos
    oMdlTab:SetValue('SE1_DETAIL',"E1_FILIAL" 		, xFilial("SE1"))
	oMdlTab:SetValue('SE1_DETAIL',"E1_PREFIXO" 		, "A  "	)
	oMdlTab:SetValue('SE1_DETAIL',"E1_NUM" 			,"1488600000012")
	oMdlTab:SetValue('SE1_DETAIL',"E1_PARCELA" 		, "  ")
	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" 		, 1100)
	oMdlTab:SetValue('SE1_DETAIL',"BAIXAR" , 1000)
	oMdlTab:SetValue('SE1_DETAIL',"RECNO" ,  45)
	oMdlTab:SetValue('SE1_DETAIL',"E1_MOTIVO" 		, "NOR")

    oMdlTab:SetValue('GEN_DETAIL',"HOURSAVERECEIPT" 	, "12:00:13" )

    //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] 
	Endif

    oMdlTab:DeActivate()

Return 




04. CONSIDERACIONES IMPORTANTES

La presente solución aplica para versión 12.1.33 o superior.


05. TABLAS UTILIZADAS

  • FTJ - Encabezado de recibos.
  • SEL - Recibos de cobro.
  • SE1 - Cuentas por cobrar.
  • SFE - Certificados de retención.
  • SFR - Diferencia de cambio.
  • SE5  - Movimientos bancarios.