Árvore de páginas

Abrangências:Microsiga Protheus 11 , Protheus 12
Versões:Protheus 12
Compatível Países:Todos
Sistemas Operacionais:Todos
Compatível às Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:Todos


Descrição: Ordens de Produção inicia o processo de fabricação do produto relacionando todos os componentes e as etapas de fabricação determinadas por sua estrutura, além disso, é essencial na geração das requisições dos materiais.

Importante: o sistema administra as OPs de sua geração ao seu término. A ordem de produção pode ser incluída manualmente, OPs por Pedidos de Venda (através da geração de OPs) e por ponto de pedido (através do MRP - projeção de estoque). 
É possível identificar as OPs incluídas manualmente e as geradas automaticamente por meio de seus códigos.

As OPs são referenciadas nas atualizações e consultas através da seguinte composição de código:

Número da OP + Item + Sequência.

As atualizações das OPs são efetuadas pela informação das movimentações internas (baixa). Uma OP é encerrada quando o sistema detecta uma movimentação do Tipo Produção para o valor total da OP ou quando a soma de movimentações do Tipo Produção totaliza a quantidade original da OP.

O custeio de uma OP é calculado através da soma dos custos dos componentes por nível até o nível do produto pai.

É possível visualizar o andamento do processo de execução das OPs através da opção Gráfico na janela de manutenção de Ordens de Produção.

Quando uma ordem de produção é incluída, o sistema verifica automaticamente tudo o que é necessário para que esta produção possa ser executada e efetua o empenho de todos os materiais necessários conforme determinado em sua estrutura.

Na opção Operações da Ordem na janela de manutenção de Ordens de Produção, irá mostrar as informações referente as operações da ordem de produção, porém os campos Data Inicial, Hora Inicial, Data Término e Hora Final, somente serão visualizadas quando há a integração APS x Protheus ou quando a empresa utiliza o módulo de Chão de Fábrica (MV_INTSFC = 1), no momento da alocação dos splits.

 

Exemplo Execauto MATA650:


Observação:  Ao sair do MATA650 são processadas todas as OPs que ainda não tiveram os empenhos e Ops intermediárias gerados, independente se a ordem de produção foi gerada pela rotina manual ou pelo execauto. Para não gerar os empenho e OPs intermediárias das OPs geradas pelo execauto é preciso atualizar o campo C2_BATCH da OP em questão para S, na rotina específica.


NOTA!

Se AUTEXPLODE igual N-Não e o parâmetro MV_EXPLOPU estiver configurado como S-SIM, precisa passar o campo C2_BATUSR na rotina automática para ser validado no momento da geração das OPs intermediárias e empenhos. Deve ser enviado o ID do Usuário.



#INCLUDE 'protheus.ch'
#INCLUDE 'parmtype.ch'
#INCLUDE 'TBICONN.CH'

User Function Tmata650()
local aArea         := GetArea()
Local aDados        := {}
Local cItem         := "01"         // Item
Local cNum          := "000001"     // Numero da OP
Local cProduto      := "Produto-01" // Produto
Local cSeq          := "001"        // Sequencia
Local dInicio       := Date()       // Previsao inicio
Local dEmissao      := Date()       // Data de emissao
Local dEntrega      := Date() + 1   // Previsao entrega
Local nOpcao        := 3            // Inclusao = 3 // Alteracao = 4 // Exclusao = 5
Local nQnt          := 1            // Quantidade
Private lMsErroAuto := .F.

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "PCP"

    //===============================================================//
    //                          INCLUSAO                             //
    //===============================================================//
    If nOpcao == 3         
		aDados :=   {{'C2_FILIAL'   ,xFilial('SC2')     ,NIL},;
                     {'C2_SEQUEN'   ,cSeq               ,NIL},; 
                     {'C2_DATPRI'   ,dInicio            ,NIL},;     
                     {'C2_DATPRF'   ,dEntrega           ,NIL},;
                     {'C2_PRODUTO'  ,cProduto           ,NIL},;
                     {'C2_QUANT'    ,nQnt               ,NIL},;
                     {'AUTEXPLODE'  ,"S"                ,NIL}} 
        
	//===============================================================//
    //                          ALTERACAO                            //
    //===============================================================//
    elseif nOpcao == 4
        aDados :=   {{'C2_FILIAL'   ,xFilial('SC2')     ,NIL},;  
                     {'C2_PRODUTO'  ,cProduto           ,NIL},;          
                     {'C2_NUM'      ,cNum               ,NIL},;         
                     {'C2_QUANT'    ,nQnt               ,NIL},;
                     {'C2_EMISSAO'  ,dEmissao           ,NIL},;
                     {'C2_DATPRI'   ,dInicio            ,NIL},;      
                     {'C2_DATPRF'   ,dEntrega           ,NIL}}

    //===============================================================//
    //                           EXCLUSAO                            //
    //===============================================================// 
    elseif nOpcao == 5
        aDados :=   {{'C2_FILIAL'   ,xFilial('SC2')     ,NIL},;  
                     {'C2_ITEM'     ,cItem              ,NIL},; 
                     {'C2_PRODUTO'  ,cProduto           ,NIL},;  
                     {'C2_NUM'      ,cNum               ,NIL},;
                     {'C2_SEQUEN'   ,cSeq               ,NIL}}
    Endif

    //===============================================================//
    //     Se alteracao(4) ou exclusao(5), deve-se posicionar no     //
    //     registro da SC2 antes de executar a rotina automatica     //
    //===============================================================//
    If nOpcao == 4 .Or. nOpcao == 5
            SC2->(DbSetOrder(1)) 
            SC2->(DbSeek(xFilial("SC2")+cNum+cItem+cSeq)) //FILIAL + NUM + ITEM + SEQUEN + ITEMGRD
    EndIf

    Begin Transaction

    MsExecAuto({|x, y|Mata650(x,y)},aDados,nOpcao)
    If !lMsErroAuto
            ConOut("operacao realizada com sucesso! " +Time()) 
    Else
        aErro := MostraErro()
        Conout("Nao foi possivel realizar operacao" +Time())
        DisarmTransaction()
    EndIf
        
    End Transaction
    RestArea (aArea)
    

RESET ENVIRONMENT
 
Return Nil

Observações ExecAuto

Caso haja alteração de quantidade (C2_QUANT) não deve refletir nos empenhos e em ordens de produção intermediária.