Problema con nuevo proceso

Ya empezamos la frase por usted con AYUDA!!! Así que por favor no haga lo mismo cuando solicite soporte. Tan solo haga sus preguntas en forma académica y bien descrita.
Forum rules
Este foro puede ser editado para evitar mensajes redundantes. Los temas relacionados se mueven al mismo sub-foro. Errores idiomáticos pueden ser corregidos para mejorar la legibilidad.

Problema con nuevo proceso

Postby raav6 » Wed Jun 13, 2012 10:33 pm

Bueno estoy realizando un proceso para cierre de ordenes de compra que cumplen ciertas características, ya he realizado la consulta pero el asunto es que me sale el siguiente error

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 :oops:

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.
raav6
 
Posts: 32
Joined: Wed May 02, 2012 10:37 pm

Re: Problema con nuevo proceso

Postby raav6 » Wed Jun 13, 2012 11:53 pm

Me autorespondo, ya me funciono cambiando estas dos lineas.

pstmt.setString(1, DB.TO_DATE(p_DateFrom, true));
pstmt.setString(2, DB.TO_DATE(p_DateTo, true));
por
pstmt.setTimestamp(1, p_DateFrom);
pstmt.setTimestamp(2, p_DateTo);

Tenia que ver con el tipo de dato.

Saludos.
raav6
 
Posts: 32
Joined: Wed May 02, 2012 10:37 pm


Return to Soporte ADempiere - AYUDA!!!

Who is online

Users browsing this forum: No registered users and 1 guest

cron