Jump to content

Actualizar Bd Con Stock De Programa Externo


arunda2

Recommended Posts

Tengo una tienda de ropa y el programa de facturación me da un listado con Referencia, talla, y unidades de cada artículo

 

Estoy preparando un script sql para actualizar la base de datos de prestashop una vez al día, para no tener que actualizar el inventario uno por uno, cosa que sería poco menos que imposible.

 

Ya he localizado la referencia y el stock en la tabla product_attribute, pero puesto que de cada referencia hay varias líneas con distintas tallas, y tengo que actualizar solo la que corresponda, no sé como localizar las tallas en la BD, puesto que hay diferentes tallajes (grupos de atributos) y además prestashop maneja diferentes idiomas. Todo esto afecta a múltiples tablas

 

Alguna idea de como hacer esta consulta

¿Nadie tuvo que hacer esto antes? Gracias

Link to comment
Share on other sites

Existe un módulo llamado

exportproducts

que te permitirá exportar toda la información que necesites. Después, cuando tengas en un listado en excel o csv las columnas de Nombre de artículo, y Stock, podrás Importar, en el menú de Herramientas de prestashop.

 

¡Ojo! Prueba antes a hacerlo en tu entorno de pruebas... o hazlo solo con un artículo.

 

Esta es una práctica habitual en muchas tiendas online. Excel es vital ;) Le dedico el post del día: http://joyconnecting.com

Link to comment
Share on other sites

  • 5 weeks later...
Existe un módulo llamado

exportproducts

que te permitirá exportar toda la información que necesites. Después, cuando tengas en un listado en excel o csv las columnas de Nombre de artículo, y Stock, podrás Importar, en el menú de Herramientas de prestashop. ¡Ojo! Prueba antes a hacerlo en tu entorno de pruebas... o hazlo solo con un artículo. Esta es una práctica habitual en muchas tiendas online. Excel es vital ;) Le dedico el post del día: http://joyconnecting.com

 

Donde puedo descargar ese modulo?

 

Gracias.

Link to comment
Share on other sites

Yo estoy en lo mismo. Tengo zapatos de niño: unas 20 numeraciones y 50 colores. Estoy acabando un script en python para manejarlo. Os pongo aquí tres consultas sql que uso en el script y que podéis probar en local -para evitar accidentes-. En mi caso ambas funcionan, pero ojo a los nombres de los atributos y los id de los atributos, en cada caso cambian. En estos scripts se manejan dos atributos por referencia: color y número.

 

edit: en todos los casos parto de la base de productos ya generados mediante el BO de combinaciones, que resulta muy prácticos para introducir los atributos pero un engorro para editar cantidades.

 

1 La primera sirve para obtener una vista general de las existencias, con los productos listados por color en vertical y la numeración en horizontal (ojo, hay que introducir en el primer select cada uno de los valores del atributo) . El problema que tiene es que, a base de instrucciones group concat se pierde el dato fundamental a la hora de actualizar existencias: el id_product_attribute. Este índice es la base que permite actualizar las existencias de cada producto en un color y talla determinado. O sea, que sirve para ver, pero no permite generar fácilmente una instrucción update.

 

2 La solución es usar el primer sql para generar la vista y otro sql equivalente para generar las instrucciones update. Aunque el segundo sql muestra los datos de manera diferente, devuelve exactamente los mismos datos que en la primera, pero emparejando cada id_product_attribute con el número y color adecuado. De este modo es muy sencillo actualizar con un update set quantity=lo que sea where id_product_attribute= lo que sea. Ojo, en este sql se mete manualmente el id de referencia de cada producto.

 

3 Después, por necesidad --mi hosting no acepta sql en python- cambié de estrategia: ahora uso un tercer sql equivalente al segundo, pero que genera el mismo listado para todas las referencias. Luego lo exporto vía csv y lo manejo offline. La idea es que idealmente sólo tendré que hacer esto una vez, al establecer un inventario base. Después, cambio el script para que genere updates 'relativos', es decir, que sumen o resten a la cantidad existente. De este modo es más fácil introducir ventas de las tiendas físicas o añadir existencias cuando llega más mercancía.

 

En fin, espero que esto le ayude a alguien. Suerte

 

-------------------------------
primer sql
--------------------------------
SELECT color,
group_concat(if(numero='16 ',cast(quantity as char), null)) as '16',					  
group_concat(if(numero='17 ',cast(quantity as char), null)) as '17',
group_concat(if(numero='18 ',cast(quantity as char), null)) as '18',
group_concat(if(numero='19 ',cast(quantity as char), null)) as '19',
group_concat(if(numero='20 ',cast(quantity as char), null)) as '20',
group_concat(if(numero='21 ',cast(quantity as char), null)) as '21',
group_concat(if(numero='22 ',cast(quantity as char), null)) as '22',
group_concat(if(numero='23 ',cast(quantity as char), null)) as '23',
group_concat(if(numero='24 ',cast(quantity as char), null)) as '24',
group_concat(if(numero='25 ',cast(quantity as char), null)) as '25',
group_concat(if(numero='26 ',cast(quantity as char), null)) as '26',
group_concat(if(numero='27 ',cast(quantity as char), null)) as '27',
group_concat(if(numero='28 ',cast(quantity as char), null)) as '28',
group_concat(if(numero='29 ',cast(quantity as char), null)) as '29',
group_concat(if(numero='30 ',cast(quantity as char), null)) as '30',
group_concat(if(numero='31 ',cast(quantity as char), null)) as '31',
group_concat(if(numero='32 ',cast(quantity as char), null)) as '32',
group_concat(if(numero='33 ',cast(quantity as char), null)) as '33',
group_concat(if(numero='34 ',cast(quantity as char), null)) as '34',
group_concat(if(numero='35 ',cast(quantity as char), null)) as '35',
group_concat(if(numero='36 ',cast(quantity as char), null)) as '36',
group_concat(if(numero='37 ',cast(quantity as char), null)) as '37',
group_concat(if(numero='38 ',cast(quantity as char), null)) as '38',
group_concat(if(numero='39 ',cast(quantity as char), null)) as '39'
from
(
SELECT substring(group_concat(PAL.name order by A.id_attribute_group desc separator ' '),3) as color,
substring(group_concat(PAL.name order by A.id_attribute_group desc separator ' '),1,3) as numero, quantity
FROM ps_attribute_lang as PAL, ps_product_attribute_combination as PAC, ps_product_attribute as PA, ps_attribute as A
WHERE (PAL.id_lang=3 AND PAC.id_attribute=PAL.id_attribute AND PAC.id_product_attribute=PA.id_product_attribute AND PA.reference='2335' AND PAL.id_attribute=A.id_attribute)
group by PAC.id_product_attribute

) as tbl
group by color;

--------------------------
segundo sql
--------------------------

SELECT group_concat(PAL.name order by A.id_attribute_group asc separator ' ') as numero_color, PAC.id_product_attribute, PA.reference, PA.quantity

FROM ps_attribute_lang as PAL, ps_product_attribute_combination as PAC, ps_product_attribute as PA, ps_attribute as A
WHERE (PAL.id_lang=3 AND PAC.id_attribute=PAL.id_attribute AND PAC.id_product_attribute=PA.id_product_attribute AND PA.reference='2335' AND PAL.id_attribute=A.id_attribute)

group by PAC.id_product_attribute
order by numero_color

-------------------
tercer sql
---------------------

SELECT PA.reference, PAC.id_product_attribute, group_concat(PAL.name ORDER BY A.id_attribute_group DESC
SEPARATOR ' '), PA.quantity
FROM ps_attribute_lang as PAL, ps_product_attribute_combination as PAC, ps_product_attribute as PA, ps_attribute as A
WHERE (PAL.id_lang=3 AND PAC.id_attribute=PAL.id_attribute AND PAC.id_product_attribute=PA.id_product_attribute AND PAL.id_attribute=A.id_attribute)

group by PAC.id_product_attribute

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...