Ejecutar consultas sql y exportar informes en el panel de administración en #Prestashop

publicado en: Prestashop | 13

Una tienda online está pensada para ahorrar tiempo y mejorar el rendimiento que se obtiene a la hora de vender online. Un punto importante en este sentido de facilitar el trabajo es como se gestiona la importación y exportación de datos, porque sea como sea vuestra tienda llegará un momento en el que necesitareis para facilitar vuestras labores el poder importar o exportar esa información que tiene almacenada.

En el caso que nos trae ahora os voy a explicar como sacar la información que vamos a necesitar.

Desde vuestro panel de administración teneis la posibilidad de ejecutar consultas SQL, estas consultas además podreis exportarlas a CSV con lo que podreis verlas en una hoja de cálculo.

Lo primero que tenemos que hacer es desde nuestro panel de control entrar a la opción Parámetros Avanzados -> Administrador SQL, hay veces que por temas de traducción este titulo cambia un poco, pero es la opción sexta dentro de los parámetros avanzados.

sql1

Una vez que estamos en esta sección pinchamos en añadir nuevo para crear una nueva consulta que nos exportará los datos. Nos aparecerá una sección en la que debemos incluir el nombre de nuestra consulta y la petición a ejecutarse

sql2

En este caso vamos a exportar un listado de facturas, por lo que de nombre le damos «Exportar Facturas» o cualquier similar y como consulta podemos usar esta por ejemplo

SELECT d.id_order AS NºPedido, o.invoice_number AS NºFactura, CONCAT_WS(  ' ', g.firstname, g.lastname ) AS Cliente, o.total_paid_real AS Cantidad, o.date_upd AS Fecha
FROM ps_orders d
LEFT JOIN ps_orders o ON ( d.id_order = o.id_order ) 
LEFT JOIN ps_customer g ON ( o.id_customer = g.id_customer ) 
LEFT JOIN ps_order_history h ON ( h.id_order = o.id_order ) 
LEFT JOIN ps_group_lang gl ON ( g.id_default_group = gl.id_group ) 

WHERE o.date_upd
BETWEEN  '2014-01-01'
AND  '2014-12-31'
AND h.id_order_state =  '2'
GROUP BY d.id_order

Guardamos el contenido y nos devolverá a la página inicial pero en este caso tendremos un nuevo registro, el que acabamos de crear.

sql3

 

Si os fijais en los iconos de la parte derecha del registro vereis cuatro, exportar, ver, editar, borrar. Si pinchais en exportar os sacará un archivo CSV con los datos que recoja la consulta que acabamos de dar de alta. Si pinchais en ver os sacará un listado con los datos que consiga de la consulta y los botones de editar y borrar es obvio lo que conseguimos.

De esta forma podriamos disponer de un listado con todas las facturas que se hayan creado en el periodo de tiempo que se ha especificado. Podeis cambiar este periodo en cualquier momento, tan solo teneis que editar la consulta y modificar las fechas que aparecen para que concuerden con las vuestras.

 

Con este método podeis exportar cualquier dato que exista en la base de datos de vuestra tienda, únicamente habría que realizar la consulta correcta para que esto suceda. Por el foro de Prestashop podeis encontrar infinidad de consultas que ha ido usando la gente para sus necesidades y ha compartido.

Deciros tambien que aunque nos permite ejecutar consultas SQL, no nos permite hacer cualquier tipo de consulta, por lo que básicamente todo menos los SELECT están deshabilitados.

 

Espero que os haya servido de ayuda y ya sabeis, si os ha sido útil por favor compartidlo!

13 comentarios

  1. Juan Pablo

    Hola de nuevo!
    Este método esta bien y funciona, hace la consulta de pedidos, pero a mi no me funciona del todo bien, ya que pongo fechas de los últimos pedidos (entre 2014-12-01 y 2014-12-31) y no me los saca… No se si pongo algo mal, pero lo único que hago es cambiar la fecha, los anteriores si los saca.

    Iré probando a ver..

    Gracias por tu trabajo!

  2. Máximo

    Hola, necesito sacar los productos de una tienda que me han vendido y resulta que el hosting lo tiene el que me ha la vendido, yo solo tengo el blackofficer de Prestashop 1.6 y cada vez que me hace algo me cobra 40€ y necesito sacar los producto con código sql ya que con un módulo que tengo guarda el una carpeta raíz, y el código sql que que genera prestashop para extraer los producto es el que necesito solo que quiero añadir algunos campos que no me salen. como, Descripción corta y descipcion que en este código no sale:

    esta es la consulta de producto de prestashop
    SELECT
    a.`id_product`, b.`name` AS `name`, `reference`, a.`price` AS `price`, sa.`active` AS `active`
    , shop.`name` AS `shopname`, a.`id_shop_default`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`, sa.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, sa.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`
    FROM `ps_product` a
    LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 3 AND b.`id_shop` = 1)
    LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0
    AND sav.id_shop = 1 AND sav.id_shop_group = 0 ) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
    LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default)
    LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default)
    LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default)
    LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`)
    LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product`)
    WHERE 1

    ORDER BY a.`id_product` ASC
    y lo que quiero es añadir estos campos pero no se como hacerlo.
    alguna sugerencia
    gracias

    • dwalins

      Hola Máximo,

      Podrias probar una cosa antes de meterte con la consulta. Desde el propio panel de productos tienes un botón que te exporta todo en CSV. Si te vas al catálogo justo encima de la tabla de los productos en la parte derecha verás una serie de botones, si pinchas sobre el de exportar te genera un archivo que directamente se descarga.

      Por otro lado si conoces el nombre del archivo que te genera ese modulo puedes intentar acceder a el simplemente, si pones tudominio.com/nombre_archivo.sql te lo deberia mostrar o en su defecto descargar, si te lo genera en otra carpeta tan solo tienes que adaptar la ruta.

      Intenta con estas simples soluciones a ver si te funcionan

      Un saludo

  3. Máximo

    Hola, dwalins, gracias por contestar tan pronto y con mucha claridad, en cuánto a el botón de exportación tiene razón lo exporta en cvs pero los campos ( descripcion y descripcion corta y keyword), estos campos los necesito, es una multitienda de dropshipping y tiene 22000 productos y esos campos son los del la descripción de los productos y para sacarlos campos necesito añadirlos a esa consulta que me va bien, ya la he importado el local host pero falta la descipción de los productos.

    En cuanto a la segunda opción no se me había ocurrido, pues que resulta que es un módulo que lo tengo en un prestashop que tengo el localhost y como he estado haciendo pruebas si se la carpeta que lo guarda el la raíz < download y el módulo parte los archivos csv en archivos de unos 1000 productos así que generaría 22 archivos,

    pero hay in inconveniente que este tío no es tonto, y entonces no me deja subir ningún módulo que no sean de la tienda de prestashop, al darle a subir un nuevo módulo te manda a una web para que abras una cuenta para comprar el módulo, si no fuera eso seguro que igual conseguía los 20 archivo, cuando me di cuenta que faltaban muchas opciones que trae prestashop por defecto como la configuración de e-mails, que tuve que pagarle 40 por una opción que le había deshabilitado solo estaba no hacer nada u opciones avanzadas para el , la configuración automática la deshabilito, y desde entonces intento hacerme una web en un hosting propio, pero si no tengo los producto, y me cobra 50€ por darme los archivos csv que son mios.

    He hecho una prueba con el local host. intentar entrar en download y ver un archivo que hay dentro que es index.php
    y me da un error 4.3 y me dice que no tengo permisos, para verlo
    gracias

    he hecho una prueba con el local host. intetat entrar y ver un archivo que hay dentro que index.php
    y me da un error 4.3 y me dice que nontengo permisos

    • dwalins

      Hola Máximo,

      Prueba con esta consulta, le he añadido la descripción y la descripción corta. Antes de ejecutarla asegurate que el idioma que quieres exportar es el correcto, en este caso está definido el 3

      SELECT
      a.`id_product`, b.`name` AS `name`, b.`description`, b.`description_short`, `reference`, a.`price` AS `price`, sa.`active` AS `active`
      , shop.`name` AS `shopname`, a.`id_shop_default`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`, sa.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, sa.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger` FROM `ps_product` a LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 3 AND b.`id_shop` = 1) LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1 AND sav.id_shop_group = 0 ) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default) LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default) LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default) LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`) LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product`) WHERE 1 ORDER BY a.`id_product` ASC

      Un saludo

  4. Máximo

    Hola, dwalins, me da el error que me da con otras que tego que he encontrado en internet.
    el error es: «El campo name es necesario».
    Y no se lo que quiere decir, por que el nombre lo lleba, tampoco entiendo el error, porque busco en internet y tampoco encuentras nada de este error.

    gracias por la respuesta y el trabajo de meter esos dos parametros que son los que necesito junto con la imagenes con su ruta, que esta que colge si trae las imagenes.

    saludo
    gracias
    mxx

    la consulta que he colgado va muy bien quizas demasiados campos, pero le falta la desciones y como es una dropshippin los porcuctos son unos 22000 .

  5. Xabier Garcia

    Hola y gracias por la ayuda que nos dais.
    He probado tu consulta sql y me funciona pero necesitaria ampliarla con mas campos, como por ejemplo en nif del cliente, la base imponible y el iva del pedido y la forma de pago.
    No tengo ni idea de sql por lo que cualquier ayuda es mas que bienvenida.
    Un saludo
    Xabi.

    • dwalins

      Hola Xabier,

      La consulta seria algo parecido a esto:

      SELECT d.id_order AS NºPedido, o.invoice_number AS NºFactura, CONCAT_WS( ' ', g.firstname, g.lastname ) AS Cliente, o.total_paid_real AS BaseImponible, o.date_upd AS Fecha, ad.dni, o.payment AS FormaPago, (o.total_products_wt - o.total_products) AS IVA
      FROM ps_orders d
      LEFT JOIN ps_orders o ON ( d.id_order = o.id_order )
      LEFT JOIN ps_customer g ON ( o.id_customer = g.id_customer )
      LEFT JOIN ps_address ad ON ( o.id_customer = ad.id_customer )
      LEFT JOIN ps_order_history h ON ( h.id_order = o.id_order )
      LEFT JOIN ps_group_lang gl ON ( g.id_default_group = gl.id_group )

      WHERE o.date_upd
      BETWEEN '2014-01-01'
      AND '2014-12-31'
      AND h.id_order_state = '2'

      GROUP BY d.id_order

      Un saludo

    • dwalins

      Hola Xabier,
      Puede que sea al copiarlo que se cuele algún caracter, prueba a copiar esta de aqui:

      SELECT d.id_order AS NºPedido, o.invoice_number AS NºFactura, CONCAT_WS( ' ', g.firstname, g.lastname ) AS Cliente, o.total_paid_real AS Cantidad, o.date_upd AS Fecha, ad.dni, o.payment AS FormaPago, ( o.total_products_wt – o.total_products ) AS iva
      FROM ps_orders d
      LEFT JOIN ps_orders o ON ( d.id_order = o.id_order )
      LEFT JOIN ps_customer g ON ( o.id_customer = g.id_customer )
      LEFT JOIN ps_address ad ON ( o.id_customer = ad.id_customer )
      LEFT JOIN ps_order_history h ON ( h.id_order = o.id_order )
      LEFT JOIN ps_group_lang gl ON ( g.id_default_group = gl.id_group )

      WHERE o.date_upd
      BETWEEN '2014-01-01'
      AND '2014-12-31'
      AND h.id_order_state = '2'
      GROUP BY d.id_order

      Un saludo

  6. NOELIA

    Hola,
    Muy interesante el artículo!
    necesito a este listado de clientes añadir telefono, email, fecha de nacimiento. ¿sabéis como podría incluírselo?

    SELECT
    a.`id_customer`, `firstname`, `lastname`, `email`, a.`active` AS `active`, `newsletter`, `optin`
    ,
    a.date_add, gl.name as title, (
    SELECT SUM(total_paid_real / conversion_rate)
    FROM ps_orders o
    WHERE o.id_customer = a.id_customer
    AND o.id_shop IN (1)
    AND o.valid = 1
    ) as total_spent, (
    SELECT c.date_add FROM ps_guest g
    LEFT JOIN ps_connections c ON c.id_guest = g.id_guest
    WHERE g.id_customer = a.id_customer
    ORDER BY c.date_add DESC
    LIMIT 1
    ) as connect
    FROM `ps_customer` a

    LEFT JOIN ps_gender_lang gl ON (a.id_gender = gl.id_gender AND gl.id_lang = 1)
    WHERE 1 AND a.`deleted` = 0

    ORDER BY `connect` desc

    • dwalins

      Hola Noelia,

      Puedes pobar algo asi

      SELECT
      a.`id_customer`, `firstname`, `lastname`, `email`, a.birthday, a.`active` AS `active`, ps_address.phone, `newsletter`, `optin`
      ,
      a.date_add, gl.name as title, (
      SELECT SUM(total_paid_real / conversion_rate)
      FROM ps_orders o
      WHERE o.id_customer = a.id_customer
      AND o.id_shop IN (1)
      AND o.valid = 1
      ) as total_spent, (
      SELECT c.date_add FROM ps_guest g
      LEFT JOIN ps_connections c ON c.id_guest = g.id_guest
      WHERE g.id_customer = a.id_customer
      ORDER BY c.date_add DESC
      LIMIT 1
      ) as connect
      FROM `ps_customer` a

      LEFT JOIN ps_gender_lang gl ON (a.id_gender = gl.id_gender AND gl.id_lang = 1)
      INNER JOIN ps_address ON ps_address.id_customer = a.id_customer
      WHERE 1 AND a.`deleted` = 0

      ORDER BY `connect` desc

  7. Sylvia

    Hola!
    Quisiera exportar un reporte que me permitiera visualizar:
    fecha, Ordenes (id), producto que compró, precio, id cliente, nombre, apellido, dirección, email, compañia.
    Agradecería mucho tu ayuda, llevo más de 2 horas navegando por páginas y no consigo descargar esta simple información.
    Sylvia

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *