Histórico da Página
SFCA316 - Apontamento Modelo 2 - SIGASFC
Linha de Produto: | Protheus |
Segmento: | Manufatura |
Módulo: |
SIGAPCP - Planejamento e Controle da Produção
Parâmetro(s):
Esta rotina possibilita a inclusão do apontamento de produção, estorno do apontamento de produção e encerramento da ordem de produção, na rotina Produção baseado no Roteiro de Operações, de forma automática.
O parâmetro AUTREFUGO pode ser preenchido na execução da rotina automática de Apontamento, quando o MV_DIGIPER estiver configurado como S.
Para apontamentos manuais, ao informar uma quantidade de perda é aberta uma tela para que sejam informadas as perdas.
Na rotina automática, para informar as perdas, deve ser informado o parâmetro AUTREFUGO e um array com as informações das perdas. Este array corresponde as informações da tela que é aberta de forma manual.
Para mais detalhes sobre este parâmetro, verificar o EXEMPLO 2.
Os parâmetros INDEX e AUTRECNO podem ser preenchidos na execução da rotina automática de Apontamento, quando informada a opção 5 - Estorno.
Na rotina automática, para indicar qual registro deve ser estornado, deve ser informado o parâmetro INDEX ou AUTRECNO.
O parâmetro INDEX indica qual o índice da SH6 (Movimentos da Produção) deverá ser usado pela rotina automática para selecionar o registro a ser estornado. Os campos do índice devem estar no array enviado no EXECAUTO.
O parâmetro AUTRECNO indica qual o R_E_C_N_O_ do registro que a rotina automática deve estornar.
Para mais detalhes sobre estes parâmetros, verificar o EXEMPLO 3.
O parâmetro AUTRECNO pode ser preenchido na execução da rotina automática de Apontamento, quando informada a opção 7 - Encerramento.
Na rotina automática, para indicar qual registro deve ser encerrado, deve ser informado o parâmetro AUTRECNO.
O parâmetro AUTRECNO indica qual o R_E_C_N_O_ do registro que a rotina automática deve encerrar.
Para mais detalhes sobre este parâmetro, verificar o EXEMPLO 4.
MATA681 - Apontamento de Produção baseado no Roteiro de Operações ( < aVetor>, < nOpc> ) --> nil
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 Iniciar Apontamento Abandonar Apontamento oModel := FWLoadModel( "SFCA319" ) //Instanciar o modelo oModel:SetOperation( 4 ) //Setar a operação da ação Iniciar 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 |
Bloco de código | ||||
---|---|---|---|---|
| ||||
Bloco de código | ||||
| ||||
//------------------------------- EXEMPLO 1 ------------------------------------ // Incluir Apontamento //-------------------------------------------------------------------// #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function RMATA681() Local aVetor := {} Local dData Local nOpcUser Function SFCIncApo() Local lRet := .T. Local cMsgErro := '' Local aErro := 3 {} Local cOper PRIVATE lMsErroAuto := .F. PREPAREPrivate ENVIRONMENTcTipApon EMPRESA "99" FILIAL "01" MODULO "COM" TABLES "SH6" dData:=dDataBase aVetor := {; {"H6_OP" ,"00000101001 " ,NIL},; {"H6_PRODUTO" ,"PA01 " ,NIL},; {"H6_OPERAC" ,"01":= ' ' //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]) ,NIL},;//OP cIdOper {"H6_RECURSO" ,"1":= PadR('0000000001',TamSX3("CYV_IDAT")[1]) ,NIL},; //ID OPERAÇÃO cSplit {"H6_DTAPONT" ,dData:= PadR('00001',TamSX3("CYV_IDATQO")[1]) ,NIL},;//SPLIT cMaq {"H6_DATAINI" ,dData:= PadR('REC1',TamSX3("CYV_CDMQ")[1]) ,NIL},; //MAQUINA cDataIniRe {"H6_HORAINI" ,"19:11":= dDataBase ,NIL},; //DATA INICIO REPORTE cTimeIniRe := '14:00:00' {"H6_DATAFIN" ,dData //HORA ,NIL},; INICIO REPORTE cDataFimRe := dDataBase {"H6_HORAFIN" ,"19:20" //DATA FIM REPORTE ,NIL},; cTimeFimRe := '15:00:00' {"H6_PT" //HORA FIM REPORTE cDatProd ,'P':= dDataBase ,NIL},;//DATA PRODUCAO cItem {"H6_LOCAL" ,"01" := ' ' //ITEM cTurno := ' ,NIL},;' //TURNO cDoc {"H6_QTDPROD" ,7 := ' ' //Documento cSerieDoc := ' ' ,NIL}} MSExecAuto({|x| mata681(x)},aVetor, nOpc) If lMsErroAuto Mostraerro() Else Alert("ok") EndIf Return //--------------------------- EXEMPLO 2 ----------------------------------------------------------------------------------// //--------------------------- Exemplo de Perda ----------------------------------------------------------------------------// #Include 'Protheus.ch' #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" #INCLUDE "TOTVS.CH" User Function rmata681() Local xRotAuto := {} Local aRefugos := {} Local nI PRIVATE lMsErroAuto := .F. OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) dData := dDataBase cOp //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 := PadR('Y0216101001',TamSX3("H6_OP")[1]) cProd := PadR('4054-PA2' ,TamSX3("H6_PRODUTO")[1]) cOperac := PadR('10' ,TamSX3("H6_OPERAC")[1]) cRec := PadR('REC1' ,TamSX3("H6_RECURSO")[1]) cDtIni := dData cHrIni := '08:00:00' cDtFim := dData cHrFim := '08:10:00' cPt := PadR('P' ,TamSX3("H6_PT")[1]) cLocal := PadR('01' ,TamSX3("H6_LOCAL")[1]) cQtdProd := 1 cQtdPerd := 1 xRotAuto := {; {"H6_FILIAL" , xFilial("SH6") ,Nil},; {"H6_OP" , cOp ,Nil},; {"H6_PRODUTO" , cProd ,Nil},; {"H6_OPERAC" , cOperac ,Nil},; {"H6_RECURSO" , cRec ,Nil},; {"H6_DATAINI" , cDtIni ,Nil},; {"H6_HORAINI" , cHrIni ,Nil},; {"H6_DATAFIN" , cDtFim ,Nil},; {"H6_HORAFIN" , cHrFim ,Nil},; {"H6_PT" , cPt ,Nil},; {"H6_LOCAL" , cLocal ,Nil},; {"H6_QTDPROD" , cQtdProd ,Nil},; {"H6_QTDPERD" , cQtdPerd ,Nil}; } For nI := 1 To 2 ' //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" ) If nI == 1 cRfProd //MAO DE OBRA oModelCZ0 := PadR('4054-MP3' ,TamSX3("BC_PRODUTO")[1]) oModel:GetModel( "CZ0DETAIL" ) Else cRfProd//FERRAMENTA oModelCZW := PadR('4054-MP4' ,TamSX3("BC_PRODUTO")[1]) oModel:GetModel( "CZWDETAIL" ) EndIf cRfLocOrig := PadR('01' ,TamSX3("BC_LOCORIG")[1]) //GGF oModel:SetValue("CYVMASTER","CYV_NRORPO",cOp) cRfTipo //OP oModel:= PadR('R' SetValue("CYVMASTER","CYV_IDAT" ,cIdOper) ,TamSX3("BC_TIPO")[1]) cRfMotivo//ID OPERAÇÃO oModel:SetValue("CYVMASTER","CYV_CDAT" ,cOper) := PadR('FH' //OPERAÇÃO ,TamSX3("BC_MOTIVO")[1]) cRfQuant oModel:SetValue("CYVMASTER","CYV_IDATQO",cSplit) //SPLIT := 1 oModel:SetValue("CYVMASTER","CYV_CDMQ" ,cMaq) aAdd(aRefugos, {; //MAQUINA {"BC_PRODUTO" , cRfProdoModel:SetValue("CYVMASTER","CYV_DTRPBG",cDataIniRe) //DATA ,Nil},; INICIO REPORTE {"BC_LOCORIG" , cRfLocOrig ,Nil},; oModel:SetValue("CYVMASTER","CYV_HRRPBG",cTimeIniRe) //HORA INICIO REPORTE //INFORMAÇÕES SETUP If !Empty(cCodSetup) oModel:SetValue("CYVMASTER","CYV_DTBGSU",cDataIniSe) //DATA INICIO SETUP {"BC_TIPO" , cRfTipo ,Nil},; oModel:SetValue("CYVMASTER","CYV_DTEDSU",cDataFimSe) //DATA FIM SETUP oModel:SetValue("CYVMASTER","CYV_HRBGSU",cTimeIniSe) //HORA INICIO SETUP {"BC_MOTIVO" , cRfMotivo ,Nil},; oModel:SetValue("CYVMASTER","CYV_HREDSU",cTimeFimSe) //HORA FIM SETUP oModel:SetValue("CYVMASTER","CYV_CDSU",cCodSetup) //CODIGO SETUP EndIf {"BC_QUANT" //QUANTIDADES oModel:SetValue("CYVMASTER","CYV_QTATRP",1) , cRfQuant ,Nil}; //QUANTIDADE REPORTADA oModel:SetValue("CYVMASTER","CYV_QTATAP",1) }//QUANTIDADE APROVADA oModel:SetValue("CYVMASTER","CYV_QTATRF",0) //QUANTIDADE Next nI REFUGADA oModel:SetValue("CYVMASTER","CYV_QTATRT",0) //QUANTIDADE RETRABALHADA If Len(aRefugos) > 0 !Empty(cItem) oModel:SetValue("CYVMASTER","CYV_CDACRP",cItem) aAdd(xRotAuto, {"AUTREFUGO", aRefugos, Nil}) EndIf msExecAuto({|x,y| MATA681(x,y)},xRotAuto,3) If lMsErroAuto ALERT("ERRO NA INCLUSAO") Mostraerro() Else ALERT("PROCESSAMENTO EFETUADO COM SUCESSO") Endif Return //--------------------------- EXEMPLO 3.1----------------------------------------------------------------------------------// //--------------------------- Exemplo de Estorno AUTRECNO------------------------------------------------------------------// #Include 'Protheus.ch' #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" #INCLUDE "TOTVS.CH" User Function rEst681() Local xRotAuto := {} PRIVATE lMsErroAuto := .F. OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) dData := dDataBase cOp := PadR('Y0226201001',TamSX3("H6_OP")[1]) cProd := PadR('19579-PA' ,TamSX3("H6_PRODUTO")[1]) cOperac := PadR('10' ,TamSX3("H6_OPERAC")[1]) cRecno := 140 //R_E_C_N_O_ que deseja estornar da SH6 xRotAuto := {; {"H6_FILIAL" , xFilial("SH6") ,Nil},; {"H6_OP" , cOp ,Nil},; {"H6_PRODUTO" , cProd ,Nil},; {"H6_OPERAC" , cOperac ,Nil},; {"AUTRECNO" , cRecno ,Nil}; } msExecAuto({|x,y| MATA681(x,y)},xRotAuto,5) If lMsErroAuto ALERT("ERRO NO ESTORNO") Mostraerro() Else ALERT("ESTORNO EFETUADO COM SUCESSO") Endif Return //--------------------------- EXEMPLO 3.1----------------------------------------------------------------------------------// //--------------------------- Exemplo de Estorno INDEX---------------------------------------------------------------------// #Include 'Protheus.ch' #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" #INCLUDE "TOTVS.CH" User Function rEst681() Local xRotAuto := {} PRIVATE lMsErroAuto := .F. OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) dData := dDataBase nIndice := 1 //Indice da SH6 que será utilizado //Campos do índice 1 //H6_FILIAL+H6_OP+H6_PRODUTO+H6_OPERAC+H6_SEQ+DTOS(H6_DATAINI)+H6_HORAINI+DTOS(H6_DATAFIN)+H6_HORAFIN cOp := PadR('Y0226201001',TamSX3("H6_OP")[1]) cProd := PadR('19579-PA' ,TamSX3("H6_PRODUTO")[1]) cOperac := PadR('10' ,TamSX3("H6_OPERAC")[1]) cSeq := PadR(' ' ,TamSX3("H6_SEQ")[1]) cDtIni := dData cHrIni := '08:00:00' cDtFim := dData cHrFim := '08:10:00' xRotAuto := {; {"H6_FILIAL" , xFilial("SH6") ,Nil},; {"H6_OP" , cOp ,Nil},; {"H6_PRODUTO" , cProd ,Nil},; {"H6_OPERAC" , cOperac ,Nil},; {"H6_SEQ" , cSeq ,Nil},; {"H6_DATAINI" , cDtIni ,Nil},; {"H6_HORAINI" , cHrIni ,Nil},; {"H6_DATAFIN" , cDtFim ,Nil},; {"H6_HORAFIN" , cHrFim ,Nil},; {"INDEX" , nIndice ,Nil}; } msExecAuto({|x,y| MATA681(x,y)},xRotAuto,5) If lMsErroAuto ALERT("ERRO NO ESTORNO") Mostraerro() Else ALERT("ESTORNO EFETUADO COM SUCESSO") Endif Return //--------------------------- EXEMPLO 4 ----------------------------------------------------------------------------------// //--------------------------- Exemplo de Encerramento----------------------------------------------------------------------// #Include 'Protheus.ch' #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" #INCLUDE "TOTVS.CH" User Function rEnc681() Local xRotAuto := {} PRIVATE lMsErroAuto := .F. OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) dData := dDataBase cOp := PadR('Y0226201001',TamSX3("H6_OP")[1]) cProd := PadR('19579-PA' ,TamSX3("H6_PRODUTO")[1]) cOperac := PadR('10' ,TamSX3("H6_OPERAC")[1]) cRecno := 142 //R_E_C_N_O_ que deseja encerrar da SH6 xRotAuto := {; {"H6_FILIAL" , xFilial("SH6") ,Nil},; {"H6_OP" , cOp ,Nil},; {"H6_PRODUTO" , cProd ,Nil},; {"H6_OPERAC" , cOperac ,Nil},; {"AUTRECNO" , cRecno ,Nil}; } msExecAuto({|x,y| MATA681(x,y)},xRotAuto,7) If lMsErroAuto ALERT("ERRO NO ENCERRAMENTO") Mostraerro() Else ALERT("ENCERRAMENTO EFETUADO COM SUCESSO") Endif Return //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 |