Problema ao criar fatura através de pedido de compra


#1

Olá pessoal

Estou com um probleminha para criar uma fatura de fornecedor automaticamente através do pedido de compra. O erro aparece no console e é o seguinte:

[code]===========> VCellRenderer.setValue: (Colortech Digital Printing Ltda.) org.compiere.util.KeyNamePair [11]
java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:487)
at java.text.Format.format(Format.java:140)
at org.compiere.grid.ed.VCellRenderer.setValue(VCellRenderer.java:198)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:223)
at org.compiere.grid.ed.VCellRenderer.getTableCellRendererComponent(VCellRenderer.java:118)
at org.compiere.minigrid.MiniTable.autoSize(MiniTable.java:121)
at org.compiere.grid.VCreateFromInvoice.loadTableOIS(VCreateFromInvoice.java:629)
at org.compiere.grid.VCreateFrom.loadOrder(VCreateFrom.java:591)
at org.compiere.grid.VCreateFromInvoice.actionPerformed(VCreateFromInvoice.java:220)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1242)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:569)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:605)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:814)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
at java.awt.Component.processMouseEvent(Component.java:6126)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:480)
at java.awt.Component.processEvent(Component.java:5891)
at java.awt.Container.processEvent(Container.java:2102)
at java.awt.Component.dispatchEventImpl(Component.java:4497)
at java.awt.Container.dispatchEventImpl(Container.java:2160)


===========> VCellRenderer.setValue: (Colortech Digital Printing Ltda.) org.compiere.util.KeyNamePair [11]
java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:487)
at java.text.Format.format(Format.java:140)
at org.compiere.grid.ed.VCellRenderer.setValue(VCellRenderer.java:198)
at org.compiere.grid.ed.VCellRenderer.getTableCellRendererComponent(VCellRenderer.java:170)
at org.compiere.minigrid.MiniTable.autoSize(MiniTable.java:121)
at org.compiere.grid.VCreateFromInvoice.loadTableOIS(VCreateFromInvoice.java:629)
at org.compiere.grid.VCreateFrom.loadOrder(VCreateFrom.java:591)
at org.compiere.grid.VCreateFromInvoice.actionPerformed(VCreateFromInvoice.java:220)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1242)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:569)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:605)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:814)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
at java.awt.Component.processMouseEvent(Component.java:6126)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:480)
at java.awt.Component.processEvent(Component.java:5891)
at java.awt.Container.processEvent(Container.java:2102)
at java.awt.Component.dispatchEventImpl(Component.java:4497)
at java.awt.Container.dispatchEventImpl(Container.java:2160)
at java.awt.Component.dispatchEvent(Component.java:4327)


===========> VCellRenderer.setValue: (Colortech Digital Printing Ltda.) org.compiere.util.KeyNamePair [11]
java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:487)
at java.text.Format.format(Format.java:140)
at org.compiere.grid.ed.VCellRenderer.setValue(VCellRenderer.java:198)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:223)
at org.compiere.grid.ed.VCellRenderer.getTableCellRendererComponent(VCellRenderer.java:118)
at javax.swing.JTable.prepareRenderer(JTable.java:5670)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:155)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JViewport.paint(JViewport.java:747)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)


===========> VCellRenderer.setValue: (Colortech Digital Printing Ltda.) org.compiere.util.KeyNamePair [11]
java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:487)
at java.text.Format.format(Format.java:140)
at org.compiere.grid.ed.VCellRenderer.setValue(VCellRenderer.java:198)
at org.compiere.grid.ed.VCellRenderer.getTableCellRendererComponent(VCellRenderer.java:170)
at javax.swing.JTable.prepareRenderer(JTable.java:5670)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:155)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JViewport.paint(JViewport.java:747)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)


===========> VCellRenderer.setValue: (Colortech Digital Printing Ltda.) org.compiere.util.KeyNamePair [11]
java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:487)
at java.text.Format.format(Format.java:140)
at org.compiere.grid.ed.VCellRenderer.setValue(VCellRenderer.java:198)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:223)
at org.compiere.grid.ed.VCellRenderer.getTableCellRendererComponent(VCellRenderer.java:118)
at javax.swing.JTable.prepareRenderer(JTable.java:5670)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:155)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent._paintImmediately(JComponent.java:5096)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:749)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:300)


===========> VCellRenderer.setValue: (Colortech Digital Printing Ltda.) org.compiere.util.KeyNamePair [11]
java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:487)
at java.text.Format.format(Format.java:140)
at org.compiere.grid.ed.VCellRenderer.setValue(VCellRenderer.java:198)
at org.compiere.grid.ed.VCellRenderer.getTableCellRendererComponent(VCellRenderer.java:170)
at javax.swing.JTable.prepareRenderer(JTable.java:5670)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:155)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent._paintImmediately(JComponent.java:5096)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:749)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:300)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:210)[/code]

O problema é pq as colunas estão no lugar errado! O nome da organização está na coluna qtde, e claro que isso nunca vai ser um número!

Rodei o client sem as minhas customizações feitas em java e o erro também acontece.

Alguma idéia (ainda tem acento?) aonde está o problema?

Obrigado


#2

Ricardo,

Esse commit:

Tem algo a ver com o meu problema?

De qualquer maneira, atualizei aqui e o problema persiste.

Obrigado


#3

Continuando minha busca pela solução… pelo menos um avanço: o problema está no arquivo VCreateFrom.java, que foi modificado do original do ADempiere, algo relativo à industrialização. Comentei os 3 arquivos sobre essa funcionalidade e o “Criar de” funcionou corretamente.

Vou tentar debugar pra ver se acho o erro.


#4

Achei o problema:

No SQL original foram adicionados os campos ID e nome da organização. Linha 505:

			+ " l.C_OrderLine_ID,l.Line, l.AD_Org_ID, o.Name "								//	8..9

Até os parâmetros param no 8 e 9, sendo que ali tem o 10 e 11.

Nas linhas 570 e 571, o nome da organização é adicionado no array que vai pra compor o form, usando os parâmetros 10 e 11:

KeyNamePair pp = new KeyNamePair(rs.getInt(10), rs.getString(11).trim()); line.add(pp); // 2-Org

E a função loadTableOIS não espera um parâmetro organização, então ele tentava adicionar o nome da org no local da qtde, que era o próx item do array.

dataTable.setColumnClass(0, Boolean.class, false); // 0-Selection dataTable.setColumnClass(1, Double.class, true); // 1-Qty dataTable.setColumnClass(2, String.class, true); // 2-UOM dataTable.setColumnClass(3, String.class, true); // 3-Product dataTable.setColumnClass(4, String.class, true); // 4-VendorProductNo dataTable.setColumnClass(5, String.class, true); // 5-Order dataTable.setColumnClass(6, String.class, true); // 6-Ship dataTable.setColumnClass(7, String.class, true); // 7-Invoice
Foi só comentar essas linhas que o processo funcionou.

Agora eu não sei a real necessidade de ter o nome da organização ali, quem vai poder dizer isso é o Ricardo, que acredito ter sido quem adicionou essa funcionalidade.


#5

Realmente este era o erro. Faltou adicionar a Organização no dataTable. Já esta funcionando na revisão 726.

A Organização é importante para preservar o que foi criado no pedido de compra para empresas que possuem mais de uma organização. Ex: Foi solicitado uma compra para Organização Store, e quem fez a fatura logou com a organização HQ, então todas as linhas da fatura irão aparecer com a organização HQ, quando o correto seria Store.

Obrigado.
Ricardo


#6

Certo, realmente faz sentido o que vc disse, porém não seria o caso de solicitar que isso fosse arrumado la no Adempiere?

Atualizei aqui pra 726 mas ainda não testei, mas pelo que vi do código deve estar tudo ok.

Valeu Ricardo.


#7

Não, ainda não está ok… na realidade o loadTableOIS chamado é o do VCreateFromInvoice, que nem tem no LBR, somente no ADempiere, e lá não consta nada dessas novas colunas, claro. E também no save() desse mesmo arquivo, precisa adicionar a nova coluna, senão ele não dá o ok no final.

Só uma outra obs, os mesmos problemas de coluna errada ocorrem no Create From Shipment.


#8

Realmente, o erro que tinha sido corrigido era na janela de Recebimento e não na Fatura. Agora foi corrigido na fatura também. Rev. 737
adempierelbr.svn.sourceforge.net … vision=737