Ordem de Produção automática


#1

Prezados,

Estou com a seguinte dúvida: é possível configurar o Adempiere (sem uso de código para customização) de forma que quando eu feche um pedido de venda ele gere automaticamente uma OS para produção de um item que não tenho no estoque?

 Como no meu caso estou em uma fábrica, então nem sempre os produtos vendidos são aqueles que estão em estoque. Vi que no Adempiere existe um conjunto de funcionalidades em volta de Manufacturing Order, mas não sei se este é o caminho.

[]'s

Marcio Rebello (Aeon)


#2

Meu Ir.’.,

Nos fizemos esse processo aqui numa fábrica de roupas. Mas foi um fluxo usando as duas funcionalidades Ordem de Venda e Industrialização.


#3

OI Edilson, obbrigado pela resposta. Você pode me mandar, por alto, como vocês fizeram? Um “caminho das pedras” já é o suficiente. Aproveitando: existe algum lugar onde tenha algum guia de uso dessa funcionalidade de industrialização?

[]'s


#4

Descobri o seguinte: Posso configurar um BOM (Bill of Material) e um Workflow para cada produto. No BOM posso usar o LDM como “Feito por encomenda”, isto fará com que o Adempiere crie automaticamente uma ordem de produção quando um pedido de venda mudar para o status “Completo”. Isso resolve o meu problema, mas para que tudo isso funcione é necessário que tenha um Manufacturing Workflow associado ao produto que está sendo vendido e é nisso que estou parado agora. Li no Fórum internacional que bastaria cadastrar o Manufacturing Workflow com o mesmo nome do produto, mas por algum motivo isso não está funcionando.

Alguém sabe dizer, o que devo fazer para associar um Manufacturing Workflow a um produto?

[]'s


#5

Pessoal,

 Depois de vários testes cheguei a algumas conclusões:
  1. Na versão 360 LTS do Adempiere o uso do workflow de produção (Manufacturing Workflow) funciona perfeitamente. Tanto na tela de Discrete Manufacturing Order, que ao escolher o produto o sistema preenche automaticamente o workflow (se tiver o mesmo nome do produto), quanto no pedido de venda onde é gerada automaticamente uma order de produção se no BOM do produto estiver marcado como Feito-sob-Encomenda (Make-to-order).

  2. Ao tentar fazer exatamente o mesmo procedimento na versão com o LBR nenhuma destas duas funcionalidades funcionam corretamente.

OBS: Em ambos os casos estou usando o banco limpo, sem nenhuma customização pessoal.

Alguém tem alguma solução ou alguma dica? Vou tentar depurar o código para entender o que está acontecendo pois tanto o LBR quanto estas funcionalidades são fundamentais para mim, se alguém puder ajudar com qualquer informação já será de grande valia.

[]'s


#6

RESOLVIDO!

A solução é que o que deve ser igual entre o produto e o seu workflow de produção é a chave de busca (coluna value no BD) e não o nome. Cadastrados desta forma consigo gerar automaticamente uma ordem de produção assim que um pedido de venda é fechado com um produto “Feito sob Encomenda” e que não tenha o total vendido no estoque.

Para registro: as funcionalidades que mencionei estão implementadas no projeto Libero. Por isso precisava depurar os fontes do Libero para descobrir o que estava acontecendo. Precisava fazer com que o meu projeto do 360 LTS-LBR referenciasse o projeto do Libero, para que eu pudesse parar e usar os .jar do Libero e assim pudesse depurar o código. Então usei 3 projetos diferentes no Eclipse, um referenciando o outro, desta forma: 360 LTS-LBR -> referencia -> 360 Libero -> referencia -> AdempiereTrunk (se existia alguma forma mais correta de juntar o Libero ao meu projeto, por favor avisem). Não podia fazer 360 LTS-LBR referenciar Libero e vice-versa por causa de referencia ciclica.

Enfim, espero que o tópico possa ajudar no futuro a outros com a mesma dúvida. No que puder ajudar, estamos a disposição.

[]'s

Marcio Rebello (Aeon)


#7

Boa tarde comunidade,

gostaria de colocar o link do amigo marcio rebello (aeon) aonde ele explica como realizar uma produção automática no ADempiere. http://www.youtube.com/watch?v=7Cu7AZY7lLY

Ao realizar o estudo, verifiquei que necessitei realizar umas mudanças no ADempiere para poder prosseguir de acordo com a orientação do aeon, algumas delas básicas, como no campo recurso na janela Fluxos de Trabalho de Fabricação na aba Fluxos de Trabalho de Fabricação, aonde ele está apontando para recurso de serviços e não de recursos de fabricação e outro é com relação ao pagamento, aonde Identifiquei aqui no meu pagamento, se uso o tipo de documento standard order ou pedido padrão, este mesmo pedido não aparece no campo de Pedido na janela de Pagamento, com isso fui verificar
oque estava dando erro, e identifiquei que na Regra de Validação, no campo Código de Validação está assim:
(C_Order.DocStatus=‘WP’ OR (C_Order.DocStatus=‘CO’ AND EXISTS (SELECT * FROM
C_DocType dt WHERE C_Order.C_DocType_ID=dt.C_DocType_ID AND (dt.DocSubTypeSO=‘SO’ OR
dt.DocBaseType=‘POO’)) AND EXISTS (SELECT * FROM C_OrderLine ol WHERE
C_Order.C_Order_ID=ol.C_Order_ID AND ol.QtyInvoiced<>ol.QtyOrdered)))

e após fazer a modificação para esse:
(C_Order.DocStatus=‘WP’ OR (C_Order.DocStatus=‘CO’ AND
EXISTS (SELECT * FROM C_DocType dt WHERE C_Order.C_DocType_ID=dt.C_DocType_ID AND
(dt.DocSubTypeSO=‘SO’ OR dt.DocBaseType=‘POO’)) AND EXISTS (SELECT * FROM C_OrderLine ol WHERE
C_Order.C_Order_ID=ol.C_Order_ID AND ol.QtyInvoiced=ol.QtyOrdered))), aparece.

Não entendi porque aonde alterei para ol.QtyInvoiced=ol.QtyOrdered estava assim, ol.QtyInvoiced<>ol.QtyOrdered,
informando que a quantidade faturada é diferente da quantidade entregue.

Alguém sabe se estou pensando correto?

Abraço à todos.


#8

Paulo,

Ao completar o procedimento na ordem de venda com o tipo de documento Standard Order realmente informa um erro de Terminated. Você identificou porquê o erro ocorre? Falta alguma configuração?


#9

Bom dia, estava com problemas no meu cliente, na janela de pagamento.

Ao selecionar o Cliente que iria receber o pagamento, ao clicar no campo Pedido, não mostrava os pedidos.

Fiz o login com o SuperUser e a regra System Administrator, fui na janela, Janela, Aba & Campo, escolhi a janela Payment, fui na aba Campo, e procurei pelo campo coluna, dei um Zoom no campo C_Order_ID_Pedido, automaticamente abre a janela Tabela e Coluna na opção que dei o Zoom, no caso a coluna C_Order_ID, agora dei um Zoom no campo Validação Dinâmica C_Order in Payment, e irá abrir a janela Regras de Validação, e no campo Código de Validação encontrava-se desta forma,

VALIDAÇÃO ORIGINAL ADEMPIERE

(C_Order.DocStatus=‘WP’ OR (C_Order.DocStatus=‘CO’ AND EXISTS (SELECT * FROM C_DocType dt WHERE C_Order.C_DocType_ID=dt.C_DocType_ID AND (dt.DocSubTypeSO=‘SO’ OR dt.DocBaseType=‘POO’)) AND EXISTS (SELECT * FROM C_OrderLine ol WHERE C_Order.C_Order_ID=ol.C_Order_ID AND ol.QtyInvoiced<>ol.QtyOrdered)))

VALIDAÇÃO ALTERADA PAULO DANTAS

(C_Order.DocStatus=‘WP’ OR (C_Order.DocStatus=‘CO’ AND EXISTS (SELECT * FROM C_DocType dt WHERE C_Order.C_DocType_ID=dt.C_DocType_ID AND (dt.DocSubTypeSO=‘WR’ OR dt.DocBaseType=‘SOO’ )) AND EXISTS (SELECT * FROM C_OrderLine ol WHERE C_Order.C_Order_ID=ol.C_Order_ID AND ol.QtyInvoiced=ol.QtyOrdered)))

Fiz vários selects para identificar aonde estava os erros que encontrei, nos quais foram dt.DocSubTypeSO=‘SO’ OR dt.DocBaseType=‘POO’ alterei para dt.DocSubTypeSO=‘WR’ OR dt.DocBaseType=‘SOO’ e ol.QtyInvoiced<>ol.QtyOrdered para ol.QtyInvoiced=ol.QtyOrdered.

Gostaria que os membros da comunidade avaliassem esta minha alteração, pois gostaria se esta correta, se alguém passou por um problema como este, se irá causar algum problema ao ADempiere.

Desde já, gostaria de informar que uso no sistema de homologação do meu cliente, para que possa ser posto em produção. Não identifiquei nenhum erro, pois realizei pagamentos para o mesmo cliente com mais de 5 pedido de vendas, e no relatório Itens em Aberto não mostra mais nenhum, e na alocação de pagamento funcionou tudo correto.

Grato pela atenção.

Abraço.


#10

Boa Tarde, desculpem mais uma vez ter que modificar a SQL,

pois o mesmo não mostrava os pedidos de compra.

Tive que alterar para esta outra SQL:

(C_Order.DocStatus=‘WP’ OR (C_Order.DocStatus=‘CO’ AND
EXISTS (SELECT * FROM C_DocType dt WHERE C_Order.C_DocType_ID=dt.C_DocType_ID AND (dt.DocSubTypeSO=‘WR’ OR dt.DocBaseType=‘SOO’ OR dt.DocBaseType=‘POO’ )) AND
EXISTS (SELECT * FROM C_OrderLine ol WHERE C_Order.C_Order_ID=ol.C_Order_ID AND ol.QtyInvoiced=ol.QtyOrdered)))

Pois, o docbasetype POO, é do pedido de compra, e não encontrava-se na consulta anterior, desta forma consegui realizar todos os procedimentos corretamente.

Grato pela atenção.

Abraço.