Histórico da Página
MATA250 - Produção
Linha de Produto: | Protheus | |||||||||||||||||||||||||||||||||
Segmento: | Manufatura | |||||||||||||||||||||||||||||||||
Módulo: | SIGAPCP - Planejamento e Controle da Produção | |||||||||||||||||||||||||||||||||
Parâmetro(s): |
|
| Descrição: | Esta rotina possibilita a execução do apontamento de produção, estorno do apontamento de produção e encerramento da ordem de produção, na rotina Produção, de forma automática. |
| Observações: | O parâmetro AUTPRTOTAL pode ser preenchido na execução da rotina automática de Encerramento, quando o MV_PRODPR0 estiver configurado como 3, para definir se o campo D3_PARCTOT será atualizado com o conteúdo T no encerramento. Para encerramentos manuais, é apresentada uma pergunta para confirmação ou não da alteração do campo para apropriação de custo. O parâmetro deve ser preenchido com: "S" -> Altera o conteúdo do campo D3_PARCTOT para T O parâmetro ABREOP pode ser preenchido na rotina automática de Estorno, possibilitando estornar o apontamento da produção e permitindo ao usuário estornar ou não o empenho gerado na SD4. O parâmetro deve ser preenchido como: "N" -> Estornará o apontamento da produção, porem, não estornará o empenho do SD4 O parâmetro PENDENTE pode ser preenchido na rotina automática de Inclusão, possibilitando que o apontamento fique pendente para que seja reprocessado posteriormente através do PCPA138 - Apontamentos Pendentes. O parâmetro deve ser preenchido como: "2" -> Gera apontamento pendente somente se houver erros Para realizar a operação de estorno via Rotina Automática é OBRIGATÓRIO posicionar no registro desejado antes da chamada da MsExecAuto, ou, passar na última posição do ARRAY o índice que está sendo enviado para o MsExecAuto. Atenção: Para estorno de Ordens com mais de um apontamento é necessário indicar qual o registro a ser estornado. Para tal, deve-se criar a variável "nRegSD3" com o RECNO do registro a ser estornado. |
| Abrangência: | Protheus 10 |
Sintaxe: | MATA250 - Produção ( < aVetor>, < nOpc> ) --> Nil |
| Retorno: | NIL (Nulo) |
| 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 MsErroAutolMsErroAuto := .F. RpcSetEnv( "99","01",,,,,,,,,) dData:=dDataBase aVetor := {; {"D3_OP" ,"00000501001 00000501001" ,NIL},; {"D3_TM" ,"010" ,NIL}} ,NIL}} MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc ) If lMsErroAuto Mostraerro() RlseElse Alert("Ok") Endif Return //Estorno--------------------------- ESTORNO EXEMPLO 1 -------------------------------------------------------------------------------------- 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:= "" lMsErroAuto := .F. RpcSetEnv( "99","01",,,,,,,,,) cChave:= 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 := {; {"D3_OPFILIAL" ,cOpxFilial("SD3") ,NIL},; {"D3_OP" ,cOp ,NIL},; {"D3_QUANT" ,10 ,NIL},; {"D3_TM" ,"001" ,NIL},; {"D3_LOCAL" ,cLocal ,NIL}} MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc ) If lMsErroAuto Mostraerro() Else Alert("Ok") Endif Exit EndIf SD3->(DbSkip()) EndDo EndIf ReturnReturn //--------------------------------------------------------- Exemplo de Perda com refugos ---------------------------------------------------------// #INCLUDE "TOTVS.CH" #INCLUDE 'PROTHEUS.CH' #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function mymata250P() Local xRotAuto := {} Local aRefugos := {} Local cRfProd := PadR('MP-21921-01' ,TamSX3("BC_PRODUTO")[1]) Local cRfLocOrig := PadR('01' ,TamSX3("BC_LOCORIG")[1]) Local cRfTipo := PadR('R' ,TamSX3("BC_TIPO")[1]) Local cRfMotivo := PadR('FH' ,TamSX3("BC_MOTIVO")[1]) Local cRfQuant := 1 Local cRfProdDes := PadR('MP-21921-02' ,TamSX3("BC_CODDEST")[1]) Local cRfLocDest := PadR('01' ,TamSX3("BC_LOCAL")[1]) Local nQtdPerd := 1 PRIVATE lMsErroAuto := .F. OpenSm0() RPCSetType(3) RPCSetEnv("99" , "01",,,"PCP",,,,,,) xRotAuto := {{"D3_OP" , |
"00025201001 " ,NIL},; {"D3_PERDA" ,nQtdPerd ,NIL},; |
{"D3_TM" ,"010" ,NIL}} aAdd(aRefugos, {{"BC_PRODUTO" , cRfProd ,Nil},; {"BC_LOCORIG" , cRfLocOrig ,Nil},; {"BC_TIPO" , cRfTipo ,Nil},; {"BC_MOTIVO" , cRfMotivo ,Nil},; {"BC_QUANT" , cRfQuant ,Nil},; {"BC_CODDEST" , cRfProdDes ,Nil},; {"BC_LOCAL" , cRfLocDest ,Nil}}) If Len(aRefugos) > 0 aAdd(xRotAuto, |
{"D3_QUANT" , 10 , NIL},;
{"D3_PERDA" , 0 , NIL},;
{"D3_PARCTOT", "T" , NIL},;
{"ATUEMP" , "T" , NIL};
} {"AUTREFUGO", aRefugos, Nil})
EndIf
msExecAuto({|x,y| MATA250(x,y)},xRotAuto,3)
If lMsErroAuto
ALERT("ERRO NA INCLUSÃO")
Mostraerro()
Else
ALERT("PROCESSAMENTO EFETUADO COM SUCESSO")
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 := {;
{"D3_FILIAL" ,xFilial("SD3") ,NIL},;
{"D3_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
Mostraerro()
Else
Alert("Ok")
Endif
Return
//--------------------------- ENCERRA APONTAMENTO --------------------------------------------------------------------------------------
User Function RMATA250()
Local aVetor := {}
Local nOpc := 7 //-Opção de execução da rotina, informado nos parametros quais as opções possiveis
Local cOp := "00029701001 "
Local cCod := "0045 "
Local cLocal := "01"
Local cChave := ""
lMsErroAuto := .F.
RpcSetEnv( "99","01",,,,,,,,,)
cChave := xFilial("SD3") + cOp + cCod + cLocal
DbSelectArea("SD3")
SD3->(DbSetOrder(1))
If SD3->(DbSeek(cChave))
//Estou montando meu array aVetor com os campos do índice enviado na última posição, no caso 1.
aVetor := {;
{"D3_FILIAL",xFilial("SD3") ,NIL},;
{"D3_OP" ,cOp ,NIL},;
{"D3_COD" ,cCod ,NIL},;
{"D3_LOCAL" ,cLocal ,NIL},;
{"INDEX" ,1 ,NIL}}
MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc )
If lMsErroAuto
Mostraerro()
Else
Alert("Ok")
Endif
EndIf
Return
//-----------------------------------------------------------------------------------------------------------------------------------------
|