As aplicações MES estão relacionadas ao chão de fábrica e visam tornar o apontamento de produção "Online", gerando assim uma massa de dados que será utilizada pela alta gestão na tomada decisões imediatas, ou seja, uma decisão de nível estratégico ou uma decisão à nível de correção de processo.
Muitas das vezes, estes softwares são personalizados de acordo com cada indústria chegando ao nível de existirem sensores que coletam os dados diretamente das máquinas sem a necessidade da intervenção humana para a geração dos dados de apontamento.
Pensando neste cenário, a indústria Sankhya construiu um framework que contém diversos serviços para manipulação de atividades e apontamentos de produção que pode ser utilizado por qualquer desenvolvedor para integrar uma aplicação MES com o módulo Produção/W.
Introdução
Os apontamentos de produção possuem como base as atividades de uma determinada Ordem de Produção, é por este motivo que para gera-los é necessário sempre referenciar uma atividade de uma determinada OP.
Uma atividade nada mais é que a representação sistêmica de uma operação realizada na fábrica em um determinado Centro de Trabalho.
Um Centro de Trabalho é a representação sistêmica das estruturas organizacionais onde as operações são executadas, ou seja, onde as matérias-primas com a influência de máquinas, equipamentos e mão-de-obra, são transformadas em produto acabado (PA). Sendo que, o uso do Centro de Trabalho é opcional.
A imagem abaixo demonstra graficamente a nível de processo um esboço das atividades em torno de um apontamento de produção:
Nos tópicos a seguir será apresentada a maneira correta para manipular uma atividade, sendo possível torna-la apta para recepção de apontamentos de produção.
Iniciar a Atividade
A ação de iniciar uma atividade consiste em sinalizar ao sistema que a atividade em questão foi inicializada por um operador e/ou uma máquina. Para comandar tal ação existe um caminho lógico que deve ser percorrido:
•Selecionar atividade: Este passo consiste em buscar uma lista de atividades pendentes para o Centro de Trabalho, onde seja possível selecionar uma destas atividades para iniciar o trabalho. Normalmente é utilizado algum critério de ordenação como a data início previsto (Dt./Hr. Início Prev.) e a data de criação (Dh. Entrada Atividade) da atividade para determinar qual será a primeira atividade selecionada.
Vejamos abaixo o serviço OperaçãoProduçãoSP.getAtividades que deverá ser utilizado para comandar esta ação:
Listar atividades/OPs pendentes dado um Centro de Trabalho
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.getAtividades">
<requestBody>
<params>
<CODWCP>Integer</CODWCP>
</params>
</requestBody>
</serviceRequest>
Parâmetros:
CODWCP -> Integer -> Código do centro de trabalho
Resposta:
A resposta do serviço está encapsulada dentro
de request.getResponse().responseBody e o retorno é uma lista de atividades,
conforme visto no exemplo abaixo:
{
"listaAtividades": [{
"CODEXEC": 0,
"CODWCP": 4,
"DHACEITE": "2015-10-20 18:40:38.0",
"DHFINAL": "",
"DHFINPREV": "",
"DHINCLUSAO": "2015-10-20 18:39:55.0",
"DHINICIO": "2015-10-20 18:40:38.0",
"DHINIPREV": "",
"IDEFX": 2036,
"IDEXECWFLOW": "778516",
"IDIATV": 2948,
"IDIPROC": 2256,
"TEMPOGASTOMIN": 0
}]
}
•Buscar produto a processar: Uma vez selecionada uma atividade, faz sentido buscar as informações sobre o produto a ser processado; visto que estas informações serviram como parâmetros para a máquina consiga realizar os seus procedimentos operacionais.
Nota: este passo é opcional e muito utilizado em ambientes onde as máquinas são totalmente autônomas.
A seguir tem-se a demonstração do serviço OperaçãoProuducaoSP.getProdutosAcabados que deverá ser utilizado para comandar esta ação:
Listar produtos acabados da OP de uma determinada Atividade
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.getProdutosAcabados">
<requestBody>
<params>
<IDIATV>Integer</IDIATV>
</params>
</requestBody>
</serviceRequest>
Parâmetros:
IDIATV -> Integer -> Código da instância da atividade
Resposta:
A resposta do serviço está encapsulada dentro de
request.getResponse().responseBody e o retorno é uma lista de produtos acabados,
conforme visto no exemplo abaixo:
{
"listaProdutosAcabados": [{
"CODPRODPA": 8333,
"CONCLUIDO": "N",
"CONTROLEPA": " ",
"DTFAB": "",
"DTVAL": "",
"IDIPROC": 2246,
"NROLOTE": "aqw123",
"QTDPRODUZIR": 1,
"REFERENCIA": "MINBOLGU80",
"CODVOL": "UN"
}]
}
•Definir parâmetros de processamento: Neste passo realiza-se a preparação da máquina para que a mesma se torne apta para o processamento do produto e lote da atividade/OP selecionada. Este passo não impactará na aplicação, mas irá impactar na máquina utilizada no processamento. Sendo que, este passo é opcional.
•Iniciar atividade: Com a máquina preparada, é possível de fato iniciar o trabalho. Então este passo é responsável por comunicar a aplicação de que a atividade foi de fato inicializada.
Podemos verificar abaixo o serviço OperacaoProducaoSP.iniciarInstanciaAtividades que deverá ser utilizado para comandar esta ação:
Iniciar a atividade
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.iniciarInstanciaAtividades">
<requestBody>
<instancias>
<instancia ACEITA_WC_INDISPONIVEL="true">
<IDIATV>Integer</IDIATV>
</instancia>
</instancias>
</requestBody>
</serviceRequest>
Parâmetros:
- ACEITA_WC_INDISPONIVEL -> Boolean -> ClientEvent não implementado, então
sempre enviar "true"
- IDIATV -> Integer -> Código da instância de atividade
Observação: não é possível utilizar o client event br.com.sankhya.mgeProd.apontamento.liberaNroSerie devido à sua alta complexidade.
Apontar
O apontamento é o ato de informar a quantidade do produto (PA) processado na atividade, assim como a quantidade de matéria-prima que foi consumida neste processamento. Existem dois tipos de apontamento da quantidade de produto processado na atividade, sendo eles:
•Qtd. boa: Representa a quantidade de peças boas do produto processado na atividade em questão.
•Qtd. ruim: Retrata a quantidade de peças perdidas (perda/refugo) do produto processado na atividade.
A quantidade de matéria-prima consumida no processamento do produto deve corresponder a quantidade total, ou seja, a quantidade gasta na geração das peças boas mais a quantidade gasta na geração das peças ruins.
Pode-se analisar abaixo o serviço OperacaoProducaoSP.criarApontamento que deverá ser aplicado para comandar a ação de incluir um novo apontamento:
Apontar o PA
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.criarApontamento">
<requestBody>
<params IDIATV="Integer" CODPROD="Integer" CONTROLE="String"
QTDPRODUZIR="Float" QTDPERDA="Float" CODMPE="Integer"/>
</requestBody>
</serviceRequest>
Parâmetros:
IDIATV -> Integer -> Código da instancia de atividade
CODPROD -> Integer -> Código do produto (PA)
CONTROLE -> String -> Controle do PA
QTDPRODUZIR -> Float -> Qtd. boa
QTDPERDA -> Float -> Qtd. ruim
CODMPE -> Integer -> Código do motivo de perda para a ‘Qtd. ruim’
Resposta:
A resposta do serviço está encapsulada dentro de
request.getResponse().responseBody e o retorno é:
{
"apontamento": {
"NUAPO": "Integer"
}
}
Após a conclusão do apontamento, é necessário confirma-lo para representar sistemicamente que aquele apontamento já está certo/finalizado e que é necessário efetivar as movimentações de estoque (operações de estoque) configuradas.
Quando a atividade pela qual está sendo feito um apontamento gera a nota de produção e a quantidade apontada do apontamento confirmado for menor que o tamanho de lote da OP é preciso sinalizar se este será o último apontamento, pois nesta situação o consumo dos demais apontamentos para formação da nota deverá ser por completo; ao invés de ser proporcional a quantidade apontada. De modo que, toda a quantidade apontada de material consumido na OP seja inserido na nota em questão.
Verifica-se abaixo o serviço OperacaoProducaoSP.confirmarApontamento que deverá ser utilizado para comandar a ação de confirmação do apontamento incluído:
Confirmar o apontamento
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.confirmarApontamento">
<requestBody>
<params NUAPO="Integer" IDIATV="Integer" ACEITARQTDMAIOR="Boolean"
ULTIMOAPONTAMENTO="Boolean" RESPOSTA_ULTIMO_APONTAMENTO="Boolean"
RESPOSTA_SERIE_LIBERADO="Boolean"
RESPOSTA_SERIE_LIBERADO_PERDA="Boolean"
ACEITA_PROPORCAO_INVALIDA_MPALTERNATIVA="Boolean"/>
</requestBody>
</serviceRequest>
Parâmetros:
NUAPO -> Integer -> Código do cabeçalho do apontamento
IDIATV -> Integer -> Código da instancia de atividade
ULTIMOAPONTAMENTO -> Boolean -> Paramêtros para informar se será o último apontamento
RESPOSTA_ULTIMO_APONTAMENTO -> Boolean -> Paramêtros para informar se será o último apontamento
RESPOSTA_SERIE_LIBERADO -> Boolean -> Não implementado, sempre enviar valor "true"
RESPOSTA_SERIE_LIBERADO_PERDA -> Boolean -> Não implementado, sempre enviar valor "true"
ACEITA_PROPORCAO_INVALIDA_MPALTERNATIVA -> Boolean -> Não implementado, sempre enviar valor "true"
Observação: caso não exista nenhum outro apontamento para a atividade, este parâmetro deve ser passado como "true". Tratando-se do último apontamento, a diferença de quantidade será considerada como perda para os produtos/controles
Transferir
A transferência parcial entre atividades consiste em passar uma quantidade já processada do produto na atividade para a próxima atividade, de modo que está possa dar início ao seu trabalho. Somente atividades que possuem o evento "Apontamento parcial" suportam esta ação.
A partir de uma atividade, sinaliza-se a quantidade do produto que se deseja transferir para a próxima atividade. A quantidade transferida deve ser menor ou igual ao saldo da quantidade apontada na atividade. A próxima atividade é identificada automaticamente pela aplicação seguindo o roteiro do Processo Produtivo.
O serviço OperacaoProducaoSP.transferirParcial que será utilizado para comandar esta ação, pode ser analisado logo abaixo:
Transferência parcial
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.transferirParcial">
<requestBody>
<params IDEFX="Integer" IDIPROC="Integer" IDIATV="Integer">
<produtos>
<produto>
<CODPROD>Integer</CODPROD>
<CONTROLE>String</CONTROLE>
<QUANTIDADE>Float</QUANTIDADE>
</produto>
</produtos>
</params>
</requestBody>
</serviceRequest>
Parâmetros:
IDEFX -> Integer -> Código da atividade no processo produtivo
IDIPROC -> Integer -> Número da Ordem de produção
IDIATV -> Integer -> Código da instância da atividade
CODPROD -> Integer -> Código do produto PA
CONTROLE -> String -> Controle do PA
QUANTIDADE -> Float -> Quantidade a ser transferida
Parar
A ação de parar uma atividade, significa sinalizar ao sistema que uma determinada atividade que se encontra em execução está tendo seu trabalho interrompido. Pode-se informar um motivo pelo qual está ocorrendo a parada, sendo que quando o parâmetro "É obrigatório selecionar um motivo para parada - OBRIGMOTIVPARAD" estiver habilitado, o motivo será solicitado de forma obrigatória.
Além disso, tem-se a possibilidade de informar uma observação a respeito da parada.
Pode-se analisar logo abaixo o serviço OperacaoProducaoSP.pararInstanciaAtividades que deverá ser utilizado para comandar esta ação:
Parar a atividade
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.pararInstanciaAtividades">
<requestBody>
<instancias>
<instancia>
<IDIATV>Integer</IDIATV>
<CODMTP>Integer</CODMTP>
<OBSERVACAO>String</OBSERVACAO>
</instancia>
</instancias>
</requestBody>
</serviceRequest>
Parâmetros:
IDIATV -> Integer -> Código da instância de atividade
CODMTP -> Integer -> Código do motivo de parada
OBSERVACAO -> String -> Observação da parada
O serviço OperacaoProducaoSP.continuarInstanciaAtividades será aplicado para comandar a ação de continuar a execução de uma atividade parada:
Continuar a atividade
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.continuarInstanciaAtividades">
<requestBody>
<instancias>
<instancia>
<IDIATV>Integer</IDIATV>
</instancia>
</instancias>
</requestBody>
</serviceRequest>
Parâmetros:
IDIATV -> Integer -> Código da instância de atividade
Finalizar
O ato de finalizar uma atividade consiste em sinalizar à aplicação que o trabalho executado em uma atividade foi concluído pelo operador e/ou pela máquina.
A seguir tem-se o serviço OperacaoProducaoSP.finalizarInstanciaAtividades utilizado para comandar esta ação:
Finalizar a atividade
Requisição:
<serviceRequest serviceName="OperacaoProducaoSP.finalizarInstanciaAtividades">
<requestBody>
<instancias confirmarApontamentosDivergentes="Boolean"
ignoraValidacaoFormulario="Boolean">
<instancia>
<IDIATV>Integer</IDIATV>
<IDEFX>Integer</IDEFX>
<IDIPROC>Integer</IDIPROC>
</instancia>
</instancias>
</requestBody>
</serviceRequest>
Parâmetros:
IDIATV -> Integer -> Código da instancia da atividade
IDEFX -> Integer -> Código da atividade no processo produtivo
IDIPROC -> Integer -> Número da Ordem de produção
*confirmarApontamentosDivergentes -> Boolean -> ClientEvent nao implementado então sempre enviar "true"
*ignoraValidacaoFormulario -> Boolean -> sempre enviar "true"
Observação: não é possível utilizar o client event br.com.sankhya.mgeprod.redimensionar.op.pa.perda devido a sua alta complexidade.
Nota: no link Aplicação modelo é possível visualizar uma aplicação Android exemplificando o uso de cada um dos serviços apresentados nesta documentação.
Comentários
0 comentário
Por favor, entre para comentar.