Histórico da Página
MATA681 - Apontamento de Produção baseado no Roteiro de Operações
Linha de Produto: | Protheus | |||||||||||||||||||||||||||||||||
Segmento: | Manufatura | |||||||||||||||||||||||||||||||||
Módulo: | SIGAPCP - Planejamento e Controle da Produção | |||||||||||||||||||||||||||||||||
Parâmetro(s): |
|
| Descrição: | 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. |
Exemplo:
#INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function RMATA681() Local aVetor := {} Local dDatalMsErroAuto := .F. PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM" TABLES "SH6"dData:=dDataBaseaVetor := { {"H6_OP" ,"00000101001 " ,NIL},;{"H6_PRODUTO" ,"PA01 ",NIL},;{"H6_OPERAC" ,"01" ,NIL},;{"H6_RECURSO" ,"1" ,NIL},;{"H6_DTAPONT" ,dData,NIL},;{"H6_DATAINI" ,dData ,NIL},;{"H6_HORAINI","19:11" ,NIL},;{"H6_DATAFIN",dData ,NIL},;{"H6_HORAFIN","19:20" ,NIL},;{"H6_PT" ,'P' ,NIL},;{"H6_LOCAL" ,"01" ,NIL},;{"H6_QTDPROD",7 ,NIL}} MSExecAuto({|x| mata681(x)},aVetor) // inclusão///////////////////////////////////////////////////////////////////////////////////////////////////////////////If lMsErroAuto Mostraerro()else alert("ok")EndifReturnMATA681 - Apontamento de Produção baseado no Roteiro de Operações ( [ PARAMIXB1 ] ) --> nil
MATA681.PRW
| Observações: | 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. O parâmetro AUTRECNO pode ser preenchido na execução da rotina automática de Apontamento, quando informada a opção 4 - Horas Retrabalhadas. Na rotina automática, para indicar qual registro deve ser retrabalhado, 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 retrabalhar. Para mais detalhes sobre este parâmetro, verificar o EXEMPLO 5. |
| Programa Fonte: | MATA681.PRW |
| Sintaxe: | MATA681 - Apontamento de Produção baseado no Roteiro de Operações ( < aVetor>, < nOpc> ) --> nil |
| Retorno: | nil(nulo) |
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
//--------------------------- EXEMPLO 1 ----------------------------------------------------------------------------------//
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function RMATA681()
Local aVetor := {}
Local dData
Local nOpc := 3
lMsErroAuto := .F.
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM" TABLES "SH6"
dData:=dDataBase
aVetor := {;
{"H6_OP" ,"00000101001 " ,NIL},;
{"H6_PRODUTO" ,"PA01 " ,NIL},;
{"H6_OPERAC" ,"01" ,NIL},;
{"H6_RECURSO" ,"1" ,NIL},;
{"H6_DTAPONT" ,dData ,NIL},;
{"H6_DATAINI" ,dData ,NIL},;
{"H6_HORAINI" ,"19:11" ,NIL},;
{"H6_DATAFIN" ,dData ,NIL},;
{"H6_HORAFIN" ,"19:20" | ||||
| Bloco de código | ||||
| ||||
#Include "totvs.ch" #Include 'Protheus.ch' #Include "TBICONN.CH" //--------------------------- INCLUSÃO ----------------------------------------------------------------------------------------------- User Function RMATA250() Local aVetor := {} Local dData Local nOpc := 3 //-Opção de execução da rotina, informado nos parametros quais as opções possiveisl MsErroAuto := .F. RpcSetEnv( "99","01",,,,,,,,,) dData:=dDataBase aVetor := {; {"D3_OP" ,"00000501001" ,NIL},; {"D3_TM" ,"010" ,NIL}},; MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc ) If lMsErroAuto Mostraerro() Else Alert("Ok") Endif Return //--------------------------- ESTORNO EXEMPLO 1 -------------------------------------------------- {"H6_PT" ,'P' ,NIL},; {"H6_LOCAL" ,"01" ,NIL},; {"H6_QTDPROD" ,7 ,NIL}} MSExecAuto({|x| mata681(x)},aVetor, nOpc) If lMsErroAuto Mostraerro() Else Alert("ok") EndIf Return //--------------------------- EXEMPLO 2 ------------- User Function RMATA250() Local aVetor := {} Local nOpc := 5 //-Opção de execução da rotina, informado nos parametros quais as opções possiveis Local cOp := "00000301001 " Local cCod := "PROD " Local cLocal:= "01" Local cChave:= "" ---------------------------------------------------------------------// //--------------------------- 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. RpcSetEnv( "OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) cChavedData := xFilial("SD3") + cOp + cCod + cLocal SD3->(DbSetOrder(1)) If SD3->(DbSeek(cChave)) While !(SD3->(Eof())) .And. SD3->(D3_FILIAL + D3_OP + D3_COD + D3_LOCAL) == cChave If SD3->D3_ESTORNO == " " aVetor := {;dDataBase cOp := 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 {"D3_FILIAL" ,xFilial("SD3") ,NIL},; {"D3_OP" := '08:00:00' cDtFim ,cOp:= dData cHrFim := '08:10:00' cPt ,NIL},; := PadR('P' {"D3_QUANT" ,10 ,TamSX3("H6_PT")[1]) cLocal := ,NIL},; {"D3_TM"PadR('01' ,TamSX3("001"H6_LOCAL")[1]) cQtdProd := 1 cQtdPerd := 1 xRotAuto ,NIL},:= {; {"D3H6_LOCALFILIAL" ,cLocal ,NIL}} MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc ) If lMsErroAuto Mostraerro() Else Alert("Ok") Endif Exit EndIf SD3->(DbSkip()) EndDo EndIf Return //--------------------------- ESTORNO EXEMPLO 2 -------------------------------------------------------------------------------------- User Function RMATA250() Local aVetor := {} Local nOpc := 5 //-Opção de execução da rotina, informado nos parametros quais as opções possiveis Local cCod := "PROD " Local cLocal:= "01" Local cNumSeq:= "001813" Local cCf:= "PR0" lMsErroAuto := .F. RpcSetEnv( "99","01",,,,,,,,,) //Estou montando meu array aVetor com os campos do índice enviado na última posição, no caso 3. aVetor := {; 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 If nI == 1 cRfProd := PadR('4054-MP3' ,TamSX3("BC_PRODUTO")[1]) Else cRfProd := PadR('4054-MP4' ,TamSX3("BC_PRODUTO")[1]) EndIf cRfLocOrig := PadR('01' ,TamSX3("BC_LOCORIG")[1]) cRfTipo := PadR('R' ,TamSX3("BC_TIPO")[1]) cRfMotivo := PadR('FH' ,TamSX3("BC_MOTIVO")[1]) cRfQuant := 1 aAdd(aRefugos, {; {"BC_PRODUTO" , cRfProd ,Nil},; {"BC_LOCORIG" , cRfLocOrig ,Nil},; {"BC_TIPO" , cRfTipo ,Nil},; {"BC_MOTIVO" , cRfMotivo ,Nil},; {"BC_QUANT" , cRfQuant ,Nil}; }) Next nI If Len(aRefugos) > 0 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 //--------------------------- EXEMPLO 5 ----------------------------------------------------------------------------------// //--------------------------- Exemplo de Horas Retrabalhadas---------------------------------------------------------------// #Include 'Protheus.ch' #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" #INCLUDE "TOTVS.CH" User Function MT681Ret() Local xRotAuto := {} PRIVATE lMsErroAuto := .F. OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) dData := dDataBase cOp := PadR('00002201001',TamSX3("H6_OP")[1]) cProd := PadR('681-PA' ,TamSX3("H6_PRODUTO")[1]) cOperac := PadR('10' ,TamSX3("H6_OPERAC")[1]) cDtIni := dData cHrIni := '09:00:00' cDtFim := dData cHrFim := '10:00:00' cRecno := 140 //R_E_C_N_O_ que deseja retrabalhar da SH6 xRotAuto := {; {"H6_FILIAL" , xFilial("SH6") ,Nil},; {"H6_OP" , cOp ,Nil},; {"H6_PRODUTO" , cProd ,Nil},; {"D3H6_FILIALOPERAC" ,xFilial("SD3") , cOperac ,NILNil},; {"H6_DATAINI" , cDtIni ,Nil},; {"D3H6_COD" ,cCod ,NIL},; {"D3_LOCAL" ,cLocal ,NIL},; {"D3_NUMSEQ" ,cNumSeq ,NIL},; {"D3_CF" ,cCf ,NIL},; {"INDEX" ,3 ,NIL}} MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc ) If lMsErroAuto HORAINI" , cHrIni ,Nil},; {"H6_DATAFIN" , cDtFim ,Nil},; {"H6_HORAFIN" , cHrFim ,Nil},; {"H6_DTAPONT" , cDtFim ,Nil},; {"H6_DTPROD" , cDtFim ,Nil},; {"AUTRECNO" , cRecno ,Nil}; } msExecAuto({|x,y| MATA681(x,y)},xRotAuto,4) If lMsErroAuto ALERT("ERRO NAS HORAS RETRABALHAS") Mostraerro() Else Alert("Ok ALERT("HORAS RETRABALHAS EFETUADO COM SUCESSO") Endif Return Return |