SFCA316 - Apontamento Modelo 2 - SIGASFC

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGASFC - Chão de Fábrica


Descrição:

A rotina automática, para apontamentos do módulo de Chão de Fábrica, permite incluir um apontamento de produção, iniciar um apontamento de produção, finalizar um apontamento de produção e abandonar um apontamento de produção.

Observações:

Cada opção (Incluir Apontamento, Iniciar Apontamento, Finalizar Apontamento e Abandonar Apontamento) deve instanciar o seu respectivo modelo, setando a operação da ação desejada.

Incluir Apontamento

oModel := FWLoadModel( "SFCA314" ) //Instanciar o modelo

oModel:SetOperation( 3 ) //Setar a operação da ação Incluir Apontamento

Iniciar Apontamento

oModel := FWLoadModel( "SFCA319" ) //Instanciar o modelo

oModel:SetOperation( 3 ) //Setar a operação da ação Iniciar Apontamento

Finalizar Apontamento

oModel := FWLoadModel( "SFCA314" ) //Instanciar o modelo

oModel:SetOperation( 4 ) //Setar a operação da ação Finalizar Apontamento

Abandonar Apontamento

oModel := FWLoadModel( "SFCA319" ) //Instanciar o modelo

oModel:SetOperation( 4 ) //Setar a operação da ação Abandonar Apontamento


Para que o apontamento seja realizado corretamente, é necessário criar as seguintes variáveis PRIVATE:

  • Private lExAutSFC := .T.
  • Private cTipApon 

A variável cTipApon deve ser carregada da seguinte forma:

  • Incluir Apontamento: cTipApon := ' ' (branco)
  • Iniciar Apontamento: cTipApon := 'I'
  • Finalizar Apontamento: cTipApon := 'F'
  • Abandonar Apontamento: cTipApon := 'A'


Para mais detalhes sobre cada uma das opções, verificar os exemplos.

Programa Fonte:SFCA314.PRW, SFCA319.PRW
//-------------------------------------------------------------------
// Incluir Apontamento
//-------------------------------------------------------------------
User Function SFCIncApo()
Local lRet     := .T.
Local cMsgErro := ''
Local aErro    := {}

Local cOper

PRIVATE lMsErroAuto := .F.

Private cTipApon  := ' ' //Obrigatório para identificar o tipo do apontamento do SFC - ' ' = Em branco - Incluir
Private lExAutSFC := .T. //Obrigatório para indentificar que está sendo chamado via EXECAUTO

    OpenSm0()
    RPCSetType(3)
    RPCSetEnv("99" , "01",,,"PCP",,,,,,)

    cOp        := PadR('00004801001',TamSX3("CYV_NRORPO")[1])           //OP
    cIdOper    := PadR('0000000001',TamSX3("CYV_IDAT")[1])              //ID OPERAÇÃO
    cSplit     := PadR('00001',TamSX3("CYV_IDATQO")[1])                 //SPLIT
    cMaq       := PadR('REC1',TamSX3("CYV_CDMQ")[1])                    //MAQUINA	

	cDataIniRe  := dDataBase           //DATA INICIO REPORTE
	cTimeIniRe  := '14:00:00'          //HORA INICIO REPORTE	
	cDataFimRe  := dDataBase           //DATA FIM REPORTE
    cTimeFimRe  := '15:00:00'          //HORA FIM REPORTE
	cDatProd    := dDataBase           //DATA PRODUCAO
    
	cItem       := ' ' //ITEM
    cTurno      := ' ' //TURNO
    cDoc        := ' ' //Documento
    cSerieDoc   := ' ' //Série Documento
    cDeposito   := ' ' //Depósito
    cLoteSerie  := ' ' //Lote/Serie
    cValLote    := ' ' //Data Validade Lote

	cCodSetup   := ' ' //CODIGO SETUP
	cDataIniSe  := ' ' //DATA INICIO SETUP
	cDataFimSe  := ' ' //DATA FIM SETUP
	cTimeIniSe  := ' ' //HORA INICIO SETUP
	cTimeFimSe  := ' ' //HORA FIM SETUP

    cFerram     := ' ' //Ferramenta
    cOperador   := ' ' //Operador
    cEquipe     := ' ' //Equipe

    //Posicionar no split para ativar o model
    DbSelectArea("CYY")
	CYY->(DbSetOrder(1))
	If CYY->(!DbSeek(xFilial("CYY")+cOp+cIdOper+cSplit))
		cMsgErro := "Split não cadastrado."
   		lRet := .F.
	Endif	

	If lRet
		If CYY->CYY_CDMQ != cMaq
			cMsgErro := "Máquina não pertence ao Id da Operação."         
			lRet := .F.
		EndIf
	EndIf

    If lRet
	    DbSelectArea("CY9")
	    CY9->(DbSetOrder(1))
	    If CY9->(!DbSeek(xFilial("CY9")+cOp+cIdOper))
	        cMsgErro := "Operação não cadastrada."
   		    lRet := .F.
	    EndIf
    EndIf

	If lRet .And. Empty(cOper)				
		cOper := CY9->CY9_CDAT
	EndIf

	If lRet .And. !Empty(cOper)				
	    If CY9->CY9_CDAT != cOper
			cMsgErro := "Operação não pertence ao Id da Operação."
			lRet := .F.
		EndIf
	EndIf	

	If lRet				
		// Instancia o modelo
		oModel := FWLoadModel( "SFCA314" )

		//Limpa variável de erro
		aErro := oModel:GetErrorMessage(.T.)
		aErro := {}

		oModel:SetOperation( 3 ) //Incluir apontamento
		
        If !oModel:Activate()   				
   			lRet := .F.
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        		cMsgErro := oModel:GetErrorMessage()[6]
     		Else
				cMsgErro := "Ocorreram erros ao realizar o apontamento."
     		EndIf     								
		EndIf
	EndIf

	If lRet
		//MODELOS
		oModelCY0 := oModel:GetModel( "CY0DETAIL" )               //REFUGO
		oModelCYW := oModel:GetModel( "CYWDETAIL" )               //MAO DE OBRA
		oModelCZ0 := oModel:GetModel( "CZ0DETAIL" )               //FERRAMENTA
        oModelCZW := oModel:GetModel( "CZWDETAIL" )               //GGF
			
		oModel:SetValue("CYVMASTER","CYV_NRORPO",cOp)             //OP
    	oModel:SetValue("CYVMASTER","CYV_IDAT"  ,cIdOper) 	      //ID OPERAÇÃO
		oModel:SetValue("CYVMASTER","CYV_CDAT"  ,cOper)           //OPERAÇÃO
    	oModel:SetValue("CYVMASTER","CYV_IDATQO",cSplit)  	      //SPLIT
    	oModel:SetValue("CYVMASTER","CYV_CDMQ"  ,cMaq)            //MAQUINA	
	    oModel:SetValue("CYVMASTER","CYV_DTRPBG",cDataIniRe)      //DATA INICIO REPORTE         	
		oModel:SetValue("CYVMASTER","CYV_HRRPBG",cTimeIniRe)      //HORA INICIO REPORTE

		//INFORMAÇÕES SETUP
		If !Empty(cCodSetup)
			oModel:SetValue("CYVMASTER","CYV_DTBGSU",cDataIniSe)  //DATA INICIO SETUP
         	oModel:SetValue("CYVMASTER","CYV_DTEDSU",cDataFimSe)  //DATA FIM SETUP
			oModel:SetValue("CYVMASTER","CYV_HRBGSU",cTimeIniSe)  //HORA INICIO SETUP
         	oModel:SetValue("CYVMASTER","CYV_HREDSU",cTimeFimSe)  //HORA FIM SETUP
			oModel:SetValue("CYVMASTER","CYV_CDSU",cCodSetup)     //CODIGO SETUP
		EndIf
         	
		//QUANTIDADES
		oModel:SetValue("CYVMASTER","CYV_QTATRP",1)               //QUANTIDADE REPORTADA			
		oModel:SetValue("CYVMASTER","CYV_QTATAP",1)               //QUANTIDADE APROVADA
		oModel:SetValue("CYVMASTER","CYV_QTATRF",0)               //QUANTIDADE REFUGADA 
		oModel:SetValue("CYVMASTER","CYV_QTATRT",0)               //QUANTIDADE RETRABALHADA
						
		If !Empty(cItem)
			oModel:SetValue("CYVMASTER","CYV_CDACRP",cItem)             //ITEM
		EndIf
		If !Empty(cTurno)
			oModel:SetValue("CYVMASTER","CYV_CDTN",cTurno)             //TURNO
		EndIf
		If !Empty(cDoc)
			oModel:SetValue("CYVMASTER","CYV_NRDO",cDoc)               //Documento
		EndIf
		If !Empty(cSerieDoc)			
			oModel:SetValue("CYVMASTER","CYV_NRSR",cSerieDoc)          //Série Documento
		EndIf
		If !Empty(cDeposito)			
			oModel:SetValue("CYVMASTER","CYV_CDDP",cDeposito)          //Depósito
		EndIf
		If !Empty(cLoteSerie)			
			oModel:SetValue("CYVMASTER","CYV_CDLOSR",cLoteSerie)       //Lote/Serie
		EndIf
		If !Empty(cValLote)			
			oModel:SetValue("CYVMASTER","CYV_DTVDLO",cValLote)         //Data Validade Lote
		EndIf

		oModel:SetValue("CYVMASTER","CYV_DTRPED",cDataFimRe)      //DATA FIM REPORTE
		oModel:SetValue("CYVMASTER","CYV_HRRPED",cTimeFimRe)      //HORA FIM REPORTE
		oModel:SetValue("CYVMASTER","CYV_DTRP",cDatProd)          //DATA PRODUCAO
		
    EndIf

    If lRet
		//FERRAMENTA
		If !Empty(cFerram)
			oModelCZ0:SetValue("CZ0_CDFE",cFerram)
		EndIf

		//MAO DE OBRA
		If !Empty(cOperador)
      		oModelCYW:SetValue("CYW_CDOE",cOperador)
		EndIf
		If !Empty(cEquipe)   
      		oModelCYW:SetValue("CYW_CDGROE",cEquipe)
		EndIf
		If !Empty(cOperador) .Or. !Empty(cEquipe)    
   			oModelCYW:SetValue("CYW_DTBGRP",cDataIniRe)
   			oModelCYW:SetValue("CYW_HRBGRP",cTimeIniRe)
   			oModelCYW:SetValue("CYW_DTEDRP",cDataFimRe)
   			oModelCYW:SetValue("CYW_HREDRP",cTimeFimRe)
		EndIf

		// Valida o modelo
		If oModel:VldData()   				
   			If !oModel:CommitData()
     			lRet := .F.					
				aErro := oModel:GetErrorMessage()
     			If !Empty(aErro[6])
        			cMsgErro := oModel:GetErrorMessage()[6]
     			Else
					cMsgErro := "Ocorreram erros ao realizar o apontamento."
     			EndIf     								
			EndIf
		Else
   			lRet := .F.					
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        		cMsgErro := oModel:GetErrorMessage()[6]
     		Else
				cMsgErro := "Ocorreram erros ao realizar o apontamento."
     		EndIf     											
		EndIf
	EndIf

    If !lRet
        ConOut( cMsgErro )
    Else
        ConOut( "Apontamento incluido com sucesso." )
    EndIf	

Return


//-------------------------------------------------------------------
// Iniciar Apontamento
//-------------------------------------------------------------------

User Function SFCIniApo() 

Local lRet     := .T.
Local cMsgErro := ''
Local aErro    := {}

PRIVATE lMsErroAuto := .F.

Private cTipApon  := 'I' //Obrigatório para identificar o tipo do apontamento do SFC - I = Iniciar
Private lExAutSFC := .T. //Obrigatório para indentificar que está sendo chamado via EXECAUTO

    OpenSm0()
    RPCSetType(3)
    RPCSetEnv("99" , "01",,,"PCP",,,,,,)

    cOp        := PadR('00004801001',TamSX3("CYV_NRORPO")[1]) //OP
    cIdOper    := PadR('0000000001',TamSX3("CYV_IDAT")[1])    //ID OPERAÇÃO
    cSplit     := PadR('00001',TamSX3("CYV_IDATQO")[1])       //SPLIT
    cMaq       := PadR('REC1',TamSX3("CYV_CDMQ")[1])          //MAQUINA	
    cDataIniRe := dDataBase 		                          //DATA INICIO REPORTE 
    cTimeIniRe := '10:30:00'                                  //HORA INICIO REPORTE

    //Posicionar no split para ativar o model
    DbSelectArea("CYY")
    CYY->(DbSetOrder(1))
    If CYY->(!DbSeek(xFilial("CYY")+cOp+cIdOper+cSplit))
	    cMsgErro := ("Split não cadastrado.")
	    lRet := .F.
    Endif		

	If lRet
		// Instancia o modelo
	    oModel := FWLoadModel( "SFCA319" )

		//Limpa variável de erro
		aErro := oModel:GetErrorMessage(.T.)
		aErro := {}

		oModel:SetOperation( 3 ) //iniciar apontamento
		If !oModel:Activate()   				
   			lRet := .F.
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        	    cMsgErro := oModel:GetErrorMessage()[6]
     		Else
				cMsgErro := ("Ocorreram erros ao realizar o apontamento.") 
     	    EndIf     											
		EndIf
	EndIf

	If lRet
		oModel:SetValue("CYVMASTER","CYV_NRORPO",cOp)             //OP
        oModel:SetValue("CYVMASTER","CYV_IDAT"  ,cIdOper) 	      //ID OPERAÇÃO
        oModel:SetValue("CYVMASTER","CYV_IDATQO",cSplit)  	      //SPLIT
        oModel:SetValue("CYVMASTER","CYV_CDMQ"  ,cMaq)            //MAQUINA	
		oModel:SetValue("CYVMASTER","CYV_DTRPBG",cDataIniRe)      //DATA INICIO REPORTE         	
		oModel:SetValue("CYVMASTER","CYV_HRRPBG",cTimeIniRe)      //HORA INICIO REPORTE

		// Valida o modelo
		If oModel:VldData()   				
   			If !oModel:CommitData()
     			lRet := .F.					
				aErro := oModel:GetErrorMessage()
     			If !Empty(aErro[6])
        			cMsgErro := oModel:GetErrorMessage()[6]
     			Else
					cMsgErro := ("Ocorreram erros ao realizar o apontamento.")
     			EndIf     											
   			EndIf
		Else
   			lRet := .F.					
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        		cMsgErro := oModel:GetErrorMessage()[6]
     		Else
				cMsgErro := ("Ocorreram erros ao realizar o apontamento.") 
     		EndIf     								
		EndIf
	EndIf

    If !lRet
        ConOut( cMsgErro )
    Else
        ConOut( "Início do Apontamento Realizado com Sucesso." )
    EndIf
	
Return 


//-------------------------------------------------------------------
// Finalizar Apontamento
//-------------------------------------------------------------------
User Function SFCFimApo()

Local lRet     := .T.
Local cMsgErro := ''
Local aErro    := {}

Local cOper

PRIVATE lMsErroAuto := .F.

Private cTipApon  := 'F' //Obrigatório para identificar o tipo do apontamento do SFC - F = Finalizar
Private lExAutSFC := .T. //Obrigatório para indentificar que está sendo chamado via EXECAUTO

    OpenSm0()
    RPCSetType(3)
    RPCSetEnv("99" , "01",,,"PCP",,,,,,)

    cOp        := PadR('00004801001',TamSX3("CYV_NRORPO")[1])           //OP
    cIdOper    := PadR('0000000001',TamSX3("CYV_IDAT")[1])              //ID OPERAÇÃO
    cSplit     := PadR('00001',TamSX3("CYV_IDATQO")[1])                 //SPLIT
    cMaq       := PadR('REC1',TamSX3("CYV_CDMQ")[1])                    //MAQUINA	
    cNRSQRP    := PadR('00000000000000000509',TamSX3("CYV_NRSQRP")[1])  //SERIAL DO APONTAMENTO

    cItem       := ' ' //ITEM
    cTurno      := ' ' //TURNO
    cDoc        := ' ' //Documento
    cSerieDoc   := ' ' //Série Documento
    cDeposito   := ' ' //Depósito
    cLoteSerie  := ' ' //Lote/Serie
    cValLote    := ' ' //Data Validade Lote

    cFerram     := ' ' //Ferramenta
    cOperador   := ' ' //Operador
    cEquipe     := ' ' //Equipe

    cDataFimRe  := dDataBase     //DATA FIM REPORTE
    cTimeFimRe  := '11:00:00'    //HORA FIM REPORTE
	cDatProd    := dDataBase     //DATA PRODUCAO

    //Posicionar no split para ativar o model
    DbSelectArea("CYY")
	CYY->(DbSetOrder(1))
	If CYY->(!DbSeek(xFilial("CYY")+cOp+cIdOper+cSplit))
		cMsgErro := "Split não cadastrado."
   		lRet := .F.
	Endif		

	If lRet
		If CYY->CYY_CDMQ != cMaq
			cMsgErro := "Máquina não pertence ao Id da Operação."         
			lRet := .F.
		EndIf
	EndIf

    If lRet
	    DbSelectArea("CY9")
	    CY9->(DbSetOrder(1))
	    If CY9->(!DbSeek(xFilial("CY9")+cOp+cIdOper))
	        cMsgErro := "Operação não cadastrada."
   		    lRet := .F.
	    EndIf
    EndIf

	If lRet .And. Empty(cOper)				
		cOper := CY9->CY9_CDAT
	EndIf

	If lRet .And. !Empty(cOper)				
	    If CY9->CY9_CDAT != cOper
			cMsgErro := "Operação não pertence ao Id da Operação."
			lRet := .F.
		EndIf
	EndIf

    If lRet 
		DbSelectArea("CYV")
		CYV->(DbSetOrder(1))
		If CYV->(!DbSeek(xFilial("CYV")+cNRSQRP))					
			cMsgErro := "Serial do apontamento de inicio não cadastrado."
			lRet := .F.
		Else
			cDataIniRe := CYV->CYV_DTRPBG  //DATA INICIO REPORTE
			cTimeIniRe := CYV->CYV_HRRPBG  //HORA INICIO REPORTE				
		EndIf
	EndIf

    If lRet				
		// Instancia o modelo
		oModel := FWLoadModel( "SFCA314" )

		//Limpa variável de erro
		aErro := oModel:GetErrorMessage(.T.)
		aErro := {}

		oModel:SetOperation( 4 ) //Finalizar apontamento
		
        If !oModel:Activate()   				
   			lRet := .F.
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        		cMsgErro := oModel:GetErrorMessage()[6]
     		Else
				cMsgErro := "Ocorreram erros ao realizar o apontamento."
     		EndIf     								
		EndIf
	EndIf

	If lRet
		//MODELOS
		oModelCY0 := oModel:GetModel( "CY0DETAIL" )               //REFUGO
		oModelCYW := oModel:GetModel( "CYWDETAIL" )               //MAO DE OBRA
		oModelCZ0 := oModel:GetModel( "CZ0DETAIL" )               //FERRAMENTA
        oModelCZW := oModel:GetModel( "CZWDETAIL" )               //GGF
			
		oModel:SetValue("CYVMASTER","CYV_NRORPO",cOp)             //OP
    	oModel:SetValue("CYVMASTER","CYV_IDAT"  ,cIdOper) 	      //ID OPERAÇÃO
		oModel:SetValue("CYVMASTER","CYV_CDAT"  ,cOper)           //OPERAÇÃO
    	oModel:SetValue("CYVMASTER","CYV_IDATQO",cSplit)  	      //SPLIT
    	oModel:SetValue("CYVMASTER","CYV_CDMQ"  ,cMaq)            //MAQUINA	
	    oModel:SetValue("CYVMASTER","CYV_DTRPBG",cDataIniRe)      //DATA INICIO REPORTE         	
		oModel:SetValue("CYVMASTER","CYV_HRRPBG",cTimeIniRe)      //HORA INICIO REPORTE
         	
		//QUANTIDADES
		oModel:SetValue("CYVMASTER","CYV_QTATRP",1)               //QUANTIDADE REPORTADA			
		oModel:SetValue("CYVMASTER","CYV_QTATAP",1)               //QUANTIDADE APROVADA
		oModel:SetValue("CYVMASTER","CYV_QTATRF",0)               //QUANTIDADE REFUGADA 
		oModel:SetValue("CYVMASTER","CYV_QTATRT",0)               //QUANTIDADE RETRABALHADA
						
		If !Empty(cItem)
			oModel:SetValue("CYVMASTER","CYV_CDACRP",cItem)             //ITEM
		EndIf
		If !Empty(cTurno)
			oModel:SetValue("CYVMASTER","CYV_CDTN",cTurno)             //TURNO
		EndIf
		If !Empty(cDoc)
			oModel:SetValue("CYVMASTER","CYV_NRDO",cDoc)               //Documento
		EndIf
		If !Empty(cSerieDoc)			
			oModel:SetValue("CYVMASTER","CYV_NRSR",cSerieDoc)          //Série Documento
		EndIf
		If !Empty(cDeposito)			
			oModel:SetValue("CYVMASTER","CYV_CDDP",cDeposito)          //Depósito
		EndIf
		If !Empty(cLoteSerie)			
			oModel:SetValue("CYVMASTER","CYV_CDLOSR",cLoteSerie)       //Lote/Serie
		EndIf
		If !Empty(cValLote)			
			oModel:SetValue("CYVMASTER","CYV_DTVDLO",cValLote)         //Data Validade Lote
		EndIf

		oModel:SetValue("CYVMASTER","CYV_DTRPED",cDataFimRe)      //DATA FIM REPORTE
		oModel:SetValue("CYVMASTER","CYV_HRRPED",cTimeFimRe)      //HORA FIM REPORTE
		oModel:SetValue("CYVMASTER","CYV_DTRP",cDatProd)          //DATA PRODUCAO
		
    EndIf

    If lRet
		//FERRAMENTA
		If !Empty(cFerram)
			oModelCZ0:SetValue("CZ0_CDFE",cFerram)
		EndIf

		//MAO DE OBRA
		If !Empty(cOperador)
      		oModelCYW:SetValue("CYW_CDOE",cOperador)
		EndIf
		If !Empty(cEquipe)   
      		oModelCYW:SetValue("CYW_CDGROE",cEquipe)
		EndIf
		If !Empty(cOperador) .Or. !Empty(cEquipe)    
   			oModelCYW:SetValue("CYW_DTBGRP",cDataIniRe)
   			oModelCYW:SetValue("CYW_HRBGRP",cTimeIniRe)
   			oModelCYW:SetValue("CYW_DTEDRP",cDataFimRe)
   			oModelCYW:SetValue("CYW_HREDRP",cTimeFimRe)
		EndIf

		// Valida o modelo
		If oModel:VldData()   				
   			If !oModel:CommitData()
     			lRet := .F.					
				aErro := oModel:GetErrorMessage()
     			If !Empty(aErro[6])
        			cMsgErro := oModel:GetErrorMessage()[6]
     			Else
					cMsgErro := "Ocorreram erros ao realizar o apontamento."
     			EndIf     								
			EndIf
		Else
   			lRet := .F.					
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        		cMsgErro := oModel:GetErrorMessage()[6]
     		Else
				cMsgErro := "Ocorreram erros ao realizar o apontamento."
     		EndIf     											
		EndIf
	EndIf

    If !lRet
        ConOut( cMsgErro )
    Else
        ConOut( "Apontamento FINALIZADO com sucesso." )
    EndIf	

Return


//-------------------------------------------------------------------
// Abandonar Apontamento
//-------------------------------------------------------------------
User Function SFCAbaApo() 

Local lRet     := .T.
Local cMsgErro := ''
Local aErro    := {}

PRIVATE lMsErroAuto := .F.

Private cTipApon  := 'A' //Obrigatório para identificar o tipo do apontamento do SFC - A = Abandonar
Private lExAutSFC := .T. //Obrigatório para indentificar que está sendo chamado via EXECAUTO

    OpenSm0()
    RPCSetType(3)
    RPCSetEnv("99" , "01",,,"PCP",,,,,,)

    cOp        := PadR('00004801001',TamSX3("CYV_NRORPO")[1])           //OP
    cIdOper    := PadR('0000000001',TamSX3("CYV_IDAT")[1])              //ID OPERAÇÃO
    cSplit     := PadR('00001',TamSX3("CYV_IDATQO")[1])                 //SPLIT
    cMaq       := PadR('REC1',TamSX3("CYV_CDMQ")[1])                    //MAQUINA	
    cNRSQRP    := PadR('00000000000000000508',TamSX3("CYV_NRSQRP")[1])  //SERIAL DO APONTAMENTO

    //Posicionar no split para ativar o model
	DbSelectArea("CYY")
	CYY->(DbSetOrder(1))
	If CYY->(!DbSeek(xFilial("CYY")+cOp+cIdOper+cSplit))
        cMsgErro := "Split não cadastrado."	    
   	    lRet := .F.
	Endif		

	If lRet
		If CYY->CYY_CDMQ != cMaq
			cMsgErro := "Máquina não pertence ao Id da Operação."         
			lRet := .F.
		EndIf
	EndIf
		
	If lRet
		DbSelectArea("CYV")
		CYV->(DbSetOrder(1))
		If CYV->(!DbSeek(xFilial("CYV")+cNRSQRP))					
			cMsgErro := "Serial do apontamento de inicio não cadastrado."
			lRet := .F.
		EndIf
	EndIf

	If lRet
		// Verificar se apontamento selecionado está iniciado
		If !(!CYV->CYV_LGRPEO .AND. CYV->CYV_TPSTRP == '1')
			cMsgErro := "Somente apontamentos iniciados podem ser abandonados."
			lRet := .F.
		EndIf
	EndIf					
					
	If lRet
		// Instancia o modelo
		oModel := FWLoadModel( "SFCA319" )

		//Limpa variável de erro
		aErro := oModel:GetErrorMessage(.T.)
		aErro := {}

		oModel:SetOperation( 4 ) //abandonar apontamento
		If !oModel:Activate()   				
   			lRet := .F.
			aErro := oModel:GetErrorMessage()
    		If !Empty(aErro[6])
    			cMsgErro := oModel:GetErrorMessage()[6]
    		Else
				cMsgErro := "Ocorreram erros ao realizar o apontamento."
    		EndIf     								
		EndIf
	EndIf

	If lRet
		oModel:SetValue('CYVMASTER','CYV_CDUSOE', CYV->CYV_CDUSRP) //Usuário do Estorno
		oModel:SetValue('CYVMASTER','CYV_DTEO'  , DATE())          //Data do Estorno
		oModel:SetValue('CYVMASTER','CYV_LGRPEO', .T.)             //Apontamento Estornado

		// Valida o modelo
		If oModel:VldData()   				
   			If !oModel:CommitData()
     		    lRet := .F.					
				aErro := oModel:GetErrorMessage()
     			If !Empty(aErro[6])
        			cMsgErro := oModel:GetErrorMessage()[6]
     			Else
				    cMsgErro := "Ocorreram erros ao realizar o apontamento."
     			EndIf     								
   			EndIf
		Else
   		    lRet := .F.					
			aErro := oModel:GetErrorMessage()
     		If !Empty(aErro[6])
        		cMsgErro := oModel:GetErrorMessage()[6]
     		Else
			    cMsgErro := "Ocorreram erros ao realizar o apontamento."
     		EndIf     								
		EndIf
	EndIf					
	
	If !lRet
        ConOut( cMsgErro )
    Else
        ConOut( "Apontamento ABANDONADO com sucesso." )
    EndIf				

Return