Árvore de páginas

Função: MATA250 - Produçã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. 

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


NomeTipoDescriçãoObrigatórioReferência
aVetorArray of RecordArray contendo os campos que serão enviados para a ProduçãoX
nOpcNumérico

Opção escolhida:

3) Inclusão

5) Estorno

7) Encerramento

X


Nil (Nulo)

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
"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 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
"S" -> Fara o estorno do apontamento e o estorno do empenho gerado no SD4

Para realizar a operação de estorno via Rotina Automática é OBRIGATÓRIO posicionar no registro desejado antes da chamada da MsExecAuto.

//INCLUSAO 
User Function RMATA250()
Local aVetor := {}
Local dDataLocal nOpc := 3 //-Opção de execução da rotina, informado nos parâmetros quais as opções possíveis

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 
User Function REMAT250()
Local aVetor := {}
Local nOpc := 5 //-Opção de execução da rotina, informado nos parâmetros quais as opções possíveis
Local cOp := "00000301001 "
Local cCod := "2396 "
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_OP" ,cOp ,NIL},;
{"D3_QUANT" ,10 ,NIL},;
{"D3_TM" ,"001" ,NIL}}

MSExecAuto({|x, y| mata250(x, y)},aVetor, nOpc )
If lMsErroAuto
Mostraerro()
Else
Alert("Ok")
Endif
Exit
EndIf
SD3->(DbSkip())
EndDo
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
//-------------------------------------------------------------------------------------

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())
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 ?"

Exemplo:
aVetor := { ;                

               {"D3_OP"        , "00018001001   " , NIL},;

               {"D3_TM"        , "020"            , NIL},;

               {"D3_QUANT"  , 10               , NIL},;

               {"D3_PERDA"  , 0                , NIL},;

               {"D3_PARCTOT", "T"              , NIL},;

               {"ATUEMP"    , "T"              , NIL};                              

               }


Para Utilizar o apontamento Pendente, deverá ser passado o campo "PENDENTE", com valor conforme parâmetros:

"1"

Não Faz apontamento Pendente

"2"Faz Apontamento Pendente somente se houver Erros.
"3"Sempre Pendente - Todos apontamentos ficam como pendentes.


Exemplos:

aAdd(aVetor,{"PENDENTE","2",Nil})