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:
A variável cTipApon deve ser carregada da seguinte forma:
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