Actualización de tarifas

Discute sobre la aplicación de hojas de cálculo
Responder
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Actualización de tarifas

Mensaje por Dansr »

Buenos días,

creo que me he bloqueado al intentar encontrar la solución. Le he dado vueltas y he mirado de encontrar documentación sobre el tema, ya que entiendo que ha de ser algo bastante habitual hoy en día, pero no lo consigo.

Los proveedores nos facilitan sus tarifas actualizadas en excel/calc y yo puedo extraer el listado de artículos desde el ERP en excel/clac sin problema. Como el número de artículos de cada proveedor puede ser de cientos o miles no es factible que a cada nueva lista de precios se tenga que picar todo a mano.

Las nuevas listas de precios actualizan los precios de los artículos que ya están en el surtido, pero tambien incluyen nuevos artículos que se tendrían que introducir en el sistema.

Es decir yo tengo una tabla con una columna de referencia (col. C "default_code") y unas columnas de datos a actualizar que serían las D (standard_price), E (list_price) y F (name) y necesitaria buscar en la tabla del proveedor el dato coincidente de la columna C para que me devuelva, en mi tabla, los datos actualizados de las celdas correspondientes (Dx, Ex y Fx).

Como pueden haber elementos nuevos y también desaparecer elementos en las columnas relacionadas no sirve el ordenar para copiar los datos por columnas.

Por otro lado también tendría que mirar en la tabla del proveedor si hay datos nuevos y crear las filas completas (columnas C, D, E y F) en mi tabla.

Espero haberme explicado. Gracias
LibreOffice 6.0 (x64) en Windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Actualización de tarifas

Mensaje por PepeOooSevilla »

Hola.

Haz pruebas con la función BUSCARV(). Aquí tienes unos ejemplos de BUSCARV: [RESUELTO] Reemplazar múltiples valores entre campos de Calc.

En caso contrario, es decir, si no te sirve esta función, sube un archivo de ejemplo ya que ... Los voluntarios del Foro no siempre tenemos tiempo para, partiendo de cero, crear un archivo que, al final, no se corresponderá exactamente con el problema planteado.

Lee mi repuesta dada en Sustituir texto en función de contenido por si fuera de utilidad.

Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Gracias Pepe, precisamente la función BUSCARV es una de las que me estuve mirando, pero o no acabo de entenderla o no es lo que necesito.

Siguiendo tu consejo subo un archivo en el que he incluido las dos tablas en dos hojas diferentes: "datos extraidos del ERP" y "datos facilitados por el proveedor". Los datos los he limitado a un centenar de líneas (aproximadamente) para reducir el peso del fichero, pero son datos reales. He puesto las columnas que necesito (C, D, E y F) en la misma posición en ambas tablas por si eso facilita el trabajo.

Lo que necesito es una nueva tabla que, manteneindo la estructura de la tabla primera:

- me busque en la tabla segunda los datos de la columna C y cuando coincida que me sustituya las columnas D, E y F de la misma fila. (articulo que se mantiene actualizando datos)
- si no encuentra el dato de la columna C de la primera tabla que mantenga toda la fila igual. (articulo que desaparece de surtido del proveedor, pero no del nuestro)
- si el dato de la columna C de la segunda tabla no estaba en la primera, añadir toda la fila de la segunda tabla. (novedad en el surtido del proveedor que hemos de incluir en el nuestro)
- la columna A es imprescindible mantenerla en la nueva tabla ya que es la correspondencia unívoca con los datos del ERP.

Espero explicarme bien. Gracias
Adjuntos
Actualización tarifa.ods
(37.43 KiB) Descargado 140 veces
LibreOffice 6.0 (x64) en Windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Actualización de tarifas

Mensaje por PepeOooSevilla »

Hola.

Te adjunto una primera aproximación. Ten en cuenta que nadie, excepto tú obviamente, conoce realmente tus necesidades.

Estos son los pasos que he dado:
  • 1º. He movido la columna C "default_code" a la columna A en las dos hojas: "datos extraidos del ERP" y "Datos facilitados por el proveedor". ¿Por qué? Pues porque la función BUSCARV() usa la primera columna del rango como columna de búsqueda. He comprobado que estaban ordenadas ascendentemente por el campo "default_code" (¡muy importante!, ya que las fórmulas usadas no funcionarían en caso de no estar ordenadas por ese campo).
  • 2º. Haciendo uso del menú "Datos->Texto a columnas..." he homogeneizado los datos del campo "default_code", ya que unos aparecían con un apóstrofo (') delante del número y otros no. Esto hacía que unos fueran considerados números y otros, los del apóstrofo, como texto, con el resultado erróneo de BUSCARV().
  • 3º. He copiado la hoja "datos extraidos del ERP" y la he llamado "ACTUALIZADO".
  • 4º. El campo "standard_price" de la hoja "ACTUALIZADO" lo he rellenado con esta fórmula:

    Código: Seleccionar todo

    'Celda D3
    =SI(A3=BUSCARV(A3;T_PROVEEDOR;1);BUSCARV(A3;T_PROVEEDOR;4);SI(A3=BUSCARV(A3;T_ERP;1);BUSCARV(A3;T_ERP;4);NOD()))
    'T_PROVEEDOR = $'Datos facilitados por el proveedor'.$A$3:$G$101
    'T_ERP = $'datos extraidos del ERP'.$A$3:$H$91
    ' Ver menú "Hoja->Intervalos y expresiones con nombre->Gestionar"
    Esta fórmula hace lo siguiente: Si el código de A3 de la hoja "ACTUALIZADO" lo encuentra en la tabla de la hoja "Datos facilitados por el proveedor" entonces devuelve el dato de la columna D de esta última hoja. Si no lo encuentra entonces lo busca en la tabla de la hoja "datos extraidos del ERP" y devuelve la misma columna. Si no lo encontrara en ninguna de las dos hojas aparecería el error "#N/D", es decir, no disponible o no encontrado.
  • 5º. Los campos "list_price" y "name" de la hoja "ACTUALIZADO" se han rellenado con la misma fórmula modificando la columna devuelta, la 5 (E) y la 6 (F) respectivamente.

    Código: Seleccionar todo

    'list_price
    =SI(A3=BUSCARV(A3;T_PROVEEDOR;1);BUSCARV(A3;T_PROVEEDOR;5);SI(A3=BUSCARV(A3;T_ERP;1);BUSCARV(A3;T_ERP;5);NOD()))
    'name
    =SI(A3=BUSCARV(A3;T_PROVEEDOR;1);BUSCARV(A3;T_PROVEEDOR;6);SI(A3=BUSCARV(A3;T_ERP;1);BUSCARV(A3;T_ERP;6);NOD()))
Saludos cordiales.
Adjuntos
Actualizacion_tarifa_Dansr_v2.ods
LibreOffice Calc
(45.19 KiB) Descargado 145 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
mriosv
Mensajes: 2334
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Actualización de tarifas

Mensaje por mriosv »

Con LibreOffice creo que podríamos simplifar un poco la propuesta de PepeOooSevilla utilizando SI.ERROR() para reducir a la mitad el número de BUSCARV() por celda , está ultima devulve un error cuando no encuentra el dato, pues en caso de utilizarse masivamente puede ralentizar un poco los calculos, e incluyendo el último parametro en BUSCARV() se puede evitar que se devulva un valor erroneo si el valor buscado no existe y la lista está ordenada.

Código: Seleccionar todo

D6 =SI.ERROR(BUSCARV(A6;T_PROVEEDOR;4;0);SI.ERROR(BUSCARV(A6;T_ERP;4;0);NOD()))
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Gracias por vuestra ayuda Pepe y MRios. Intentaré entender el funcionamiento de estas funciones y no sólo aplicar la solución que me dais. La verdad es que son respuestas muy completas y trabajadas.

Un saludo, ya diré como me ha ido.
LibreOffice 6.0 (x64) en Windows 10
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Buenas tardes,

por diversos motivos había tenido que dejar aparcado este tema que ahora puedo retomar. Me lo he estado mirando y no acabo de entender como aplicar la fórmula. He visto que puedo hacer cambios en el planteamiento que me suponen una simplificación del trabajo, o al menos eso creo.

Adjunto una nueva tabla ejemplo reducida a dos columnas por tabla, ya que en realidad són las que me han de dar el resultado. En la primera hoja tengo los datos extraidos del ERP, los datos con los que ya estoy trabajando, y en la hoja 2los nuevos datos facilitados por el fabricante, los datos a importar al ERP.

Necesito comparar las columnas B de ambas hojas y que cuando haya una coincidencia me traslade la casilla correspondiente de la columna A de la hoja 1 a la casilla correspondiente de la hoja 2. Es decir HOJA1/B3=HOJA2/B2 por lo tanto copio la casilla HOJA1/A3 en la casilla HOJA2/A2. No se si me he conseguido explicar.

Muchas gracias.
Adjuntos
Consulta actualización tarifas.ods
(31.63 KiB) Descargado 127 veces
LibreOffice 6.0 (x64) en Windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Actualización de tarifas

Mensaje por mauricio »

pero... te han pasado varias propuestas con archivos incluidos y no se ve donde las haz, al menos intentado, aplicar... sin saber que es lo que realmente no entiendes, es difícil ayudarte.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Actualización de tarifas

Mensaje por PepeOooSevilla »

Hola.

Como bien ha comentado nuestro compañero mauricio, con las respuestas dadas podrías salir airoso del problema que planteas, simplemente cambiando el orden de las columnas de la hoja "DATOS EXTRAIDOS" y usar la función BUSCARV() (más info en Las funciones BUSCARV y BUSCARH en OpenOffice Calc).

Si, por el motivo que sea, te es imposible cambiar ese orden de las columnas, entonces podrías usar la fórmula siguiente (para la celda A2 de la hoja "DATOS A IMPORTAR"):

Código: Seleccionar todo

=SI.ND(INDICE('DATOS EXTRAIDOS'.$A$2:$A$1349;COINCIDIR(B2;'DATOS EXTRAIDOS'.$B$2:$B$1349;0));"¡ATENCIÓN! No encontrado")
Observa las referencias absolutas de los rangos donde busca. Ver archivo adjunto.

Para más información sobre estas funciones pincha en:
Para que se vean rápidamente los códigos que no existen en la hoja "DATOS EXTRAIDOS" he utilizado el "Formato condicional".

Saludos cordiales.
Adjuntos
Consulta actualización tarifas_Dansr_v2.ods
LibreOffice Calc 5.4.7 (estable)
(52.77 KiB) Descargado 121 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Mis más sinceras disculpas Mauricio, extensivas a todos los que se han molestado en ayudarme.

Es posible que hubiese sido mejor abrir una nueva consulta ya que he cambiado los términos de la misma con respecto a la original, aunque el problema para mi sigue siendo el mismo. Cuando lo inicié hace unos meses mi planteamiento era más complejo ya que buscaba que todo saliera con una misma operación. Por razones de trabajo y también personales tuve que abandonar el tema y hasta esta semana no lo he vuelto a retomar. Partí de 0 y llegué a la conclusión de que podía hacer una parte importante del trabajo que necesitaba previo a la aplicación de la búsqueda de duplicados. También me está costando mucho entender el funcionamiento de la función "buscarv", seguramente me faltan conocimientos previos.

Por ese motivo mi consulta definitiva, y creo que más sencilla, sólo és en relación a esta última tabla que he puesto y lo que necesito es que cuando encuentra dos valores iguales en la columna default_code de cada una de las hojas , me devuelva el valor de la casilla id de la hoja1 a la casilla id de la hoja2.

En este caso, la celda B3 de la hoja DATOS EXTRAIDOS coincide con la celda B2 de la hoja DATOS A EXPORTAR, entonces me tendría que trasladar el valor de la celda A3 de la hoja DATOS EXTRAIDOS a la celda A2 de la hoja DATOS A EXPORTAR.

La verdad es que no se si pido imposibles o es tan básico que lo podría hacer un niño de primaria, pero estoy bloqueado en la solución.

Saludos cordiales

nota: adjunto de nuevo la tabla actual
Adjuntos
Consulta actualización tarifas.ods
(31.63 KiB) Descargado 114 veces
LibreOffice 6.0 (x64) en Windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Actualización de tarifas

Mensaje por PepeOooSevilla »

Hola.
  • Por favor, lee la respuesta siguiente al mensaje de mauricio, por si te fuera de utilidad.
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

se deben haber cruzado nuestras respuestas Pepe. Ahora estaba leyendo la tuya, muchas gracias.
LibreOffice 6.0 (x64) en Windows 10
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Lo intento, pero no lo consigo con la funcion BUSCARV.

He cambiado el orden de las columnas quedando A= default_code y B= id

Los argumentos que le doy a la función BUSCARV son:

Como Criterio de Busqueda la casilla B2 de DATOS A IMPORTAR (casilla vacía)
Como Matriz la columna A (rango de celdas de la 2 a la 1236 de la hoja DATOS EXTRAIDOS
Como Índice 2
Como Ordenación FALSO()

me da Err.502
LibreOffice 6.0 (x64) en Windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Actualización de tarifas

Mensaje por PepeOooSevilla »

Hola.

Adjunto el archivo usando BUSCARV(), modificando primero el orden de las columnas de la hoja "DATOS EXTRAIDOS".

La fórmula, ahora, en la celda A2 de la hoja "DATOS A IMPORTAR" es:

Código: Seleccionar todo

=SI.ND(BUSCARV(B2;'DATOS EXTRAIDOS'.$A$2:$B$1368;2;0);"¡ATENCIÓN! No encontrado")
Comprueba los parámetros pasados a las funciones.

Saludos cordiales.
Adjuntos
Consulta actualización tarifas_Dansr_vBUSCARV.ods
(50.03 KiB) Descargado 123 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Hola Pepe,

primero decirte que la otra fórmula que propusiste funciona perfectamente. Ahora lo que estaba intentando es comprender el funcionamiento de la función BUSCARV para avanzar por mi mismo sin abusar de vuestra dedicación. Probaré también esta nueva fórmula.

No sé si es mucho pedirte, cuando te vaya bien y si te va bien, desglosarme la fórmula que propones explicando el porqué de cada paso. Los tutoriales enlazados están muy bien, pero creo que hay algún punto en que me pierdo.

(prometo no molestar más :mrgreen: :knock: )
LibreOffice 6.0 (x64) en Windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Actualización de tarifas

Mensaje por PepeOooSevilla »

Hola.

En los enlaces siguientes se encuentra toda la información, así que, copiándome del libro Aprendiendo OOo Basic de nuestro compañero mauricio ...:

... tu tarea es:

• Visitar [RESUELTO] Reemplazar múltiples valores entre campos de Calc.
• Practicar mucho.

• Visitar Las funciones BUSCARV y BUSCARH en OpenOffice Calc.
• Practicar mucho.

• Visitar La función BUSCARV en Calc.
• Practicar mucho.

• Visitar Función BUSCARV de Calc (LibreOffice).
• !Ah¡ y practica mucho ...


Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Dansr
Mensajes: 11
Registrado: Mar Feb 16, 2016 11:14 am

Re: Actualización de tarifas

Mensaje por Dansr »

Muchas gracias a todos, no conocía el libro de Mauricio, pero ahora me pongo con ello.

Saludos cordiales
LibreOffice 6.0 (x64) en Windows 10
Responder