Árvore de páginas

MATA250 - Produção

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGAPCP - Planejamento e Controle da Produção

Parâmetro(s):


Nome
Tipo
Descrição
Obrigatório Referência

aVetor
Array of Record
Array contendo os campos que serão enviados para a Produção.
X



nOpc
Numérico
Opção escolhida: 3) Inclusão5) Estorno7) Encerramento
X


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 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
"N" -> Não altera o conteúdo do campo D3_PARCTOT, deixando o campo preenchido com P


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 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
"S" -> Fara o estorno do apontamento e o estorno do empenho gerado no 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
"3" -> Gera sempre apontamento pendente - Todos apontamentos ficam como pendentes


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.
Exemplo:
Public nRegSD3
nRegSD3 := SD3->(Recno())

Abrangência:

Protheus 10
Para que o sistema faça a baixa dos empenhos na chamada via ExecAuto, mesmo com o parâmetro Atu. Empenho está igual a Não, deve-se enviar um campo extra no array chamado "ATUEMP", com valor "T".
Quando receber este campo no array, o sistema fará a baixa do empenho, simulando a resposta da pergunta "O tipo de movimento da producao esta configurado para nao atualizar empenhos.No encerramento devem ser atualizados ?".

Sintaxe:

MATA250 - Produção ( < aVetor>, < nOpc> ) --> Nil

Retorno:

NIL (Nulo)

Exemplo:
#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

lMsErroAuto := .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 --------------------------------------------------------------------------------------
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_FILIAL" ,xFilial("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

Return

//--------------------------------------------------------- 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, {"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
//-----------------------------------------------------------------------------------------------------------------------------------------