- Code: Select all
ClosePurchaseOrder.doIt: SELECT o.c_order_id, o.dateordered, o.documentno, COUNT(ol.c_orderline_id) AS total_lineas, SUM (ol.qtyordered) AS qty_ordenadas, SUM(ol.qtydelivered) AS qty_entregadas FROM c_order o INNER JOIN c_orderline ol ON (ol.c_order_id = o.c_order_id) WHERE o.issotrx = 'N' AND o.docstatus IN ('CO') AND o.isactive = 'Y' AND o.dateordered::date BETWEEN TO_DATE('2012-04-15','YYYY-MM-DD') AND TO_DATE('2012-04-15','YYYY-MM-DD') GROUP BY o.c_order_id, o.dateordered, o.documentno HAVING SUM (ol.qtyordered) = SUM(ol.qtydelivered) ORDER BY o.c_order_id DESC [13]
org.postgresql.util.PSQLException: Can't use query methods that take a query string on a PreparedStatement.; State=42809; ErrorCode=0
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:251)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1015)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.compiere.db.StatementProxy.invoke(StatementProxy.java:100)
at $Proxy67.executeQuery(Unknown Source)
at org.compiere.process.ClosePurchaseOrder.doIt(ClosePurchaseOrder.java:68)
at org.compiere.process.SvrProcess.process(SvrProcess.java:147)
at org.compiere.process.SvrProcess.startProcess(SvrProcess.java:105)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:160)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:105)
at org.compiere.apps.ProcessCtl.startProcess(ProcessCtl.java:649)
at org.compiere.apps.ProcessCtl.run(ProcessCtl.java:394)
at org.compiere.apps.ProcessCtl.process(ProcessCtl.java:210)
at org.adempiere.webui.apps.ProcessDialog.runProcess(ProcessDialog.java:313)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
El código del proceso es el siguiente
- Code: Select all
package org.compiere.process;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.logging.Level;
import org.compiere.model.MOrder;
import org.compiere.util.AdempiereUserError;
import org.compiere.util.DB;
public class ClosePurchaseOrder extends SvrProcess
{
private Timestamp p_DateFrom = null;
private Timestamp p_DateTo = null;
/**
* Prepare
*/
protected void prepare()
{
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].getParameterName();
if(para[i].getParameter() == null)
;
else if (name.equals("DateOrdered"))
{
p_DateFrom = (Timestamp)para[i].getParameter();
p_DateTo = (Timestamp)para[i].getParameter_To();
}
else
log.log(Level.SEVERE, "Parametro desconocido = "+name);
}
}// prepare
/**
* DoIt
*/
protected String doIt() throws Exception
{
log.info("DateFrom: "+p_DateFrom
+ "DateTo: "+p_DateTo);
String sql = "SELECT o.c_order_id, o.dateordered, o.documentno, "
+ " COUNT(ol.c_orderline_id) AS total_lineas, "
+ " SUM (ol.qtyordered) AS qty_ordenadas, SUM(ol.qtydelivered) AS qty_entregadas "
+ " FROM c_order o "
+ " INNER JOIN c_orderline ol ON (ol.c_order_id = o.c_order_id) "
+ " WHERE o.issotrx = 'N' "
+ " AND o.docstatus IN ('CO') "
+ " AND o.isactive = 'Y' "
+ " AND o.dateordered::date BETWEEN ? AND ? "
+ " GROUP BY o.c_order_id, o.dateordered, o.documentno "
+ " HAVING SUM (ol.qtyordered) = SUM(ol.qtydelivered) "
+ " ORDER BY o.c_order_id DESC ";
int counter = 0;
int errCounter = 0;
PreparedStatement pstmt = null;
try{
pstmt = DB.prepareStatement(sql.toString(), get_TrxName());
pstmt.setString(1, DB.TO_DATE(p_DateFrom, true));
pstmt.setString(2, DB.TO_DATE(p_DateTo, true));
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
if (process(new MOrder(getCtx(),rs.getInt(1), get_TrxName())))
counter++;
else
errCounter++;
}
rs.close();
pstmt.close();
pstmt = null;
}catch(Exception e){
log.log(Level.SEVERE, sql.toString(), e);
}
return "@Updated@=" + counter + ", @Errors@=" + errCounter;
}
/**
* Process
*/
private boolean process(MOrder order)
{
log.info(order.toString());
//
//order.setDocAction(MOrder.DOCACTION_Complete);
if (order.processIt("ACTION_Close"))
{
order.save();
addLog(0, null, null, order.getDocumentNo() + ": OK");
return true;
}
addLog (0, null, null, order.getDocumentNo() + ": Error " + order.getProcessMsg());
return false;
} // process
}
No se que estoy haciendo mal en el preparedStatement cualquier recomendación se agradece.
Saludos.