Septiembre 2026
Etiquetas que imprimes al recibir, en papel térmico de 4×6.
Las entregas dispuestas como una semana en vez de como una lista, y marcar
una como llegada ahora te llena su entrada. Un reporte que llega solo cada
tarde. Manage Users rehecho para que se lea como la tabla de movimientos.
Y dos tandas largas de trabajo sobre las mismas dos preguntas: cuando
varias personas usan la app a la vez, ¿ven todas el mismo almacén — y
cuando le das a guardar, ¿la pantalla cambia ahora o en once segundos?
Borrar trece movimientos pasó de unos dos minutos y medio a cincuenta y
cinco segundos por el camino.
v12.74
Nuevo
Escanear sí se puede — con una foto
Abre Scan label y pulsa «Take a photo of the label». Se abre la
cámara del teléfono, haces la foto, y la app lee el código de ahí.
Lo que Google bloquea dentro de esta app es el visor en vivo. Una foto es otra cosa:
la app no pide tu cámara, pide un archivo, y de la cámara se encarga el
teléfono —exactamente como la app lleva meses haciendo fotos a los
documentos—. Ésa fue la pista, y vino de la bodega, no de nosotros.
Lo de después no cambia: la app ofrece qué puedes hacer con esa etiqueta,
rellena el formulario, y sigue sin guardar nada por su cuenta.
Y el punto de conexión deja de robar toques. Tenía un área invisible de
44 píxeles dibujada alrededor de un punto de 10, y en pantalla estrecha se
superponía a las pestañas de al lado. El mismo punto y el mismo objetivo, pero
ahora el sitio está reservado en vez de robado.
v12.73
Arreglo
Por qué no se abre la cámara, dicho claro
Escanear abría un recuadro negro que pedía apuntar la cámara a una
etiqueta. No podía funcionar nunca, y el motivo no está en nuestro
código: Google sirve esta app dentro de un marco que pertenece a otro sitio, y desde
Chrome 64 un marco así no tiene cámara salvo que la página que lo
rodea se la conceda. Esa página es de Google. Nada que tú o la app
podáis hacer desde esa pantalla lo cambia.
El navegador ni siquiera llegó a pedir permiso de cámara —por eso
parecía un problema del teléfono—. No lo era.
Ahora la app pregunta si la cámara está permitida antes de abrir nada.
Donde está bloqueada, el botón no aparece y el mensaje dice qué es lo
que estorba, en vez de mandarte a pelear con los ajustes del teléfono por un permiso
que no iba a servir de nada.
El lector en sí —leer el código, decidir el movimiento, rellenar el
formulario sin guardar— está hecho y funciona. Lo que necesita es otra puerta
de entrada, y ése es el siguiente trabajo.
v12.72
Nuevo
Qué sobró, de qué obra, y dónde acabó
El material que vuelve de una obra y se usa en otra no es desperdicio ni es un
traslado. Es material ya pagado que se va a otro sitio. Hasta ahora la app no
tenía cómo decirlo: la devolución pedía el origen como texto libre en
una casilla de ubicación, así que la respuesta existía y
ningún informe podía agruparla.
Ahora la devolución pregunta de qué proyecto vuelve, de la lista de
proyectos. Sobre esa única respuesta se construye todo lo demás.
Las sobras aparecen bajo el material en la tabla de existencias —28 left over from
BLACK HOUSE 2— y el material sigue siendo lo que era. Un window screen que vuelve
de una obra sigue siendo un window screen, así que tus existencias no se parten en
dos y los totales siguen cuadrando.
Al mandar sobras a otra obra, la app las ofrece y dice cuántas hay disponibles antes
de que escribas una cantidad. El movimiento se lee entonces en los dos sentidos: a
qué proyecto fue, y de qué obra había sobrado. Qué sobró
de dónde y dónde se usó son ya la misma fila leída por dos
columnas.
Y nada se cuenta dos veces: una devolución no es una compra, así que el valor
de tu inventario no se infla cuando el material vuelve a casa.
v12.71
Interfaz
Escanear desde donde se trabaja, y un aviso que cumple lo que dice
Scan label está ahora junto a Entry y Exit. Vivía sólo en el
menú de la cuenta, que son dos toques y un objetivo pequeño para un dedo con
guante —y los dos botones a los que lleva estaban en otra pantalla—. Escanear
acaba siempre en una entrada o una salida, así que su sitio es ese. Sigue también
en el menú de la cuenta.
En un ordenador sin cámara el botón no aparece, en vez de quedarse ahí
sin poder hacer nada, y tampoco sale para las cuentas de sólo lectura: un atajo a un
formulario que no se puede enviar es un camino que acaba en una puerta cerrada.
Y el aviso verde ya no se va antes que tus datos
Decía «back online» y desaparecía a los seis segundos
—mientras los datos nuevos venían todavía a diez o veinte segundos de
distancia—. Quien lo leía daba por buenas las cifras que tenía
delante. No lo eran.
Ahora dice Updating y se queda hasta que las cifras nuevas están de verdad en
pantalla. Sólo entonces dice que los datos están al día, y sólo
entonces empieza a contar para irse. Si los datos no llegan nunca, sigue diciendo
Updating, porque es lo que es verdad.
El aviso de sin conexión pasa a dos líneas —qué ha pasado arriba,
qué hacer debajo— porque esas dos cosas no se leen en el mismo momento. La
primera se lee desde el otro lado de la nave; la segunda sólo si la primera te hizo
parar.
v12.70
Nuevo
Escanear una etiqueta con la cámara del teléfono
Scan está en el menú de la cuenta. Apunta la cámara a una
etiqueta —la de un bulto o la de un estante— y la app ofrece lo que se puede
hacer con ella: sacar ese material, moverlo, o ver todo lo que hay en ese estante. Escanea
un bulto y un estante y ofrece el movimiento con el destino ya puesto.
Escanear no guarda nada por su cuenta. Rellena el formulario y ahí se para, para que
lo leas y le des a guardar como siempre. Una cámara que se puede apuntar a la
etiqueta equivocada sin querer no tiene por qué escribir sola en tu hoja.
Usa el lector de códigos del propio teléfono cuando lo hay y lee la imagen
por su cuenta cuando no. Un código a la vez, no dos: con dos códigos en el
mismo fotograma el lector de reserva no devuelve nada, así que la app los pide uno
detrás de otro —lo que además le permite decirte cuál
acaba de leer—.
Y cuando la app no arranca, ahora lo dice
Una pantalla de carga que espera para siempre es peor que un error. El 14 de octubre
las dos instalaciones de Jose se quedaron en «Connecting to your spreadsheet…»
y no dijeron nada más, en todos los ordenadores y todos los teléfonos. El
servidor estuvo perfecto todo el rato: todas las ejecuciones completadas, y a los datos no
les pasó nada.
La app ya tenía tres protecciones para exactamente esto, y las tres estaban escritas
DENTRO del mismo bloque de código al que protegían. Un bloque que no compila
no ejecuta ni una línea —ni la primera, ni la última—, así
que se cayeron junto con lo que vigilaban y la pantalla de carga se quedó puesta
diciendo conectando cuando quería decir me morí antes de
empezar.
Ahora hay un vigilante pequeño y aparte que no se puede caer con el resto. A los
ocho segundos sin señales de vida cambia el mensaje de carga por lo que ha pasado de
verdad y qué hacer —y distingue las dos causas, porque las soluciones no se
parecen en nada—: esta copia de la app no arrancó (vuelve a pegar el
archivo, entero) o no se pudo llegar a Google (mira la conexión; a tus datos
no les pasa nada). En los dos casos hay un botón de recargar en vez de una pantalla
que espera sin fin.
Con ello se cerraron dos agujeros más de la misma clase: las gráficas se bajan
de los servidores de Google, y si esa descarga fallaba se llevaba la app entera por delante
—ahora sólo te quedas sin gráficas y el almacén sigue ahí—.
Y abrir la app gastaba tres de sus propios topes por visita en vez de uno, lo que en una
mañana movida podía hacer desaparecer la lista de entrantes sin explicar
por qué.
v12.69
Interfaz
El aviso de sin conexión deja de empujar la app
Lo que estaba mal nunca fue el color. Los avisos rojo y verde de conexión
ocupaban sitio arriba, así que la app entera saltaba hacia abajo al aparecer uno y
volvía a subir al irse —dos veces en cinco segundos, por un mensaje que no te
pide nada—. Ahora flotan por encima, como una píldora redondeada, y no se
mueve nada.
Y lo que hay debajo se sigue pudiendo pulsar, que es la parte que importa. Una
versión anterior de esta app ya puso el aviso a flotar y en un teléfono se
comía la barra de navegación entera: las pestañas y el botón de
la cuenta quedaban debajo y no se podían pulsar. Lo que lo arregla no es la
posición, es que el aviso no intercepta el dedo en absoluto.
El aviso de que tus dos archivos no coinciden sigue ocupando su sitio, a propósito.
Ése puede vivir meses y es la única señal de que se pegó media
actualización: no puede taparse ni perderse.
v12.68
Nuevo
Etiquetas para tus estantes, no sólo para el material
Marca una ubicación, varias o todas en Ajustes → Locations, e imprime sus
etiquetas. Tres por hoja, y te dice cuántas hojas son antes de imprimir
—sesenta racks son veinte hojas, y el papel térmico viene en rollo y no
vuelve.
No se parecen en nada a una etiqueta de material, y es a propósito.
Éstas son apaisadas; las de material son verticales. Se distinguen desde el otro
lado de la bodega sin leer una palabra, porque dos pegatinas blancas con un código
acaban pegadas donde no van tarde o temprano.
Una etiqueta de rack lleva el nombre y el código, y nada más. Ni
cantidad, ni fecha, ni PO. Se pega una vez y vive años, así que cualquier
cosa que pueda caducar sería una etiqueta que miente mañana —justo lo
contrario que la de material, donde lo importante es qué había en ese bulto
ese día.
La hoja se dibuja en fracciones de la página y no en milímetros, así
que llena el papel que le dé la impresora. Eso importa en el teléfono, donde
algunos servicios de impresión ofrecen un solo tamaño de papel y luego
encogen la página para meterla en la pegatina: en milímetros, la etiqueta se
encogería dos veces y saldría diminuta.
v12.67
Arreglo
La ventana de impresión te dice el tamaño de papel
Una etiqueta que sale del tamaño correcto en medio de una hoja enorme no es un
problema de impresión. Es un desplegable. El cuadro de impresión de
Android suele abrirse en ISO A4, y como la etiqueta se dibuja a sus 4×6 pulgadas de
verdad, lo que sale es una etiqueta correcta rodeada de papel desperdiciado. Ni la app ni
Chrome estaban haciendo nada mal, y no había nada en pantalla que lo dijera.
La ventana de impresión dice ahora la medida antes de gastar una hoja —y en
el teléfono dice además dónde cambiarla, porque es ahí donde el
cuadro se pone en A4 y es ahí donde se gasta el papel.
v12.66
Nuevo
Cada etiqueta lleva ya su código QR
El recuadro de puntos que decía «QR / barcode» es ahora un
código de verdad. Se genera dentro de la propia app —no se llama a
ningún servicio, nada de tus materiales sale de tu instalación, y funciona
con el wifi caído—. Una bodega también imprime etiquetas el día
que no hay internet.
El código es NUESTRO, no del fabricante del material, y eso es lo que lo
hace útil desde el primer día: nadie tiene que etiquetar lo que llega de
fábrica, ni hace falta que exista un código de barras del producto. Lleva lo
que la app ya sabe del bulto —categoría, material, estante y el movimiento del
que viene.
Leerlo con la cámara del teléfono, para rellenar un material en una salida,
es el paso siguiente. El código que se imprime hoy será el que se lea
entonces: su primera línea es la versión del formato, así que una
etiqueta pegada a un estante dentro de dos años se seguirá sabiendo
leer.
v12.65
Nuevo
La app por fin te cuenta lo que cambió
Escribíamos dos notas por versión, publicábamos las dos, y dentro
de la app no había ni un enlace que llevara a ellas. Un cliente no tenía
forma de enterarse de lo que había mejorado salvo preguntando. Ahora, la primera vez
que abres Acopio después de una actualización, una ventana te cuenta lo que
cambió —y no vuelve a enseñarte esa versión nunca más.
Enseña el antes y el después de verdad, no un dibujo decorativo: la
frase que salía antes y la que sale ahora, sacadas de la misma entrada que el
texto, para que las dos no puedan separarse con el tiempo.
Se puede cerrar, y cerrarla no cuesta nada —que es justamente el
objetivo—. Vive para siempre en el menú de la cuenta, bajo What's new,
con un punto en tu círculo cuando hay algo sin leer. Un aviso que no se puede
recuperar te obliga a leerlo; uno que sí, se puede cerrar tranquilo. Dentro de la
app se guardan cuatro versiones, así que funciona sin internet y nadie tiene que
salir para enterarse; el enlace a la nota entera está para quien lo quiera, y
apunta sólo a esa versión.
Si renombraste el producto, ni el enlace ni el correo de soporte aparecen. Una app que ya
no se llama Acopio no debería estar contándole a tu equipo de dónde
salió.
v12.64
Arreglo
Una ubicación que no existe ahora lo dice mientras escribes
Escribías un estante que no está en tu bodega y la app no decía
nada —ni al escribirlo, ni al poner la cantidad, ni siquiera cuando
componía el correo de aviso nombrando ese estante—. Todo el formulario se
comportaba como si el sitio fuera real, hasta el segundo en que pulsabas guardar. Ahora el
campo lo dice en cuanto sales de él, propone la que probablemente querías
(A1p → A1A) y ofrece crearla si tienes permiso. No bloquea
guardar en ningún momento: la lista que tiene tu navegador puede llevar unos
segundos de retraso, así que la última palabra sigue siendo del servidor.
Y cuando por fin se quejaba, se quejaba en código. Lo que salía era
Error: UNKNOWN_LOCATION|P|B en una barra roja que desaparecía a los
seis segundos. Eso parece que la app se rompió. No se había roto: rechazó
bien y lo contó fatal. La app marca ciertos rechazos para que la pantalla pueda
ofrecer una salida en vez de enseñar texto rojo —pero ese manejo estaba
escrito tres veces, una por cada camino de guardado, y sólo uno de los tres lo
tenía entero. La entrada con varios materiales, que es la que más se usa,
tenía la lista más corta. Ahora está escrito una vez y los tres lo
usan.
La explicación ya estaba en el código, palabra por palabra: «el
día que el servidor marque un error de entrada, el usuario leerá
SYSTEM_BUSY| en su pantalla». Llegó el día. No fue
SYSTEM_BUSY.
v12.63
Seguridad
Seis puertas que miraban quién eres pero no cuántas veces llamas
Seis puertas de la app tenían cerradura y no tenían tope. Seis
funciones —leer los entrantes, darlos de alta, cambiarlos, borrarlos, leer los
materiales vigilados y preguntar si la instalación está configurada—
comprobaban identidad bien pero no contaban llamadas, mientras las dos más
pesadas sí lo hacían. Ninguna dejaba hacer nada indebido. Lo que
dejaban hacer es agotar la cuota diaria de Google de la instalación, y eso
deja la app muerta para todos hasta el día siguiente. Una pestaña olvidada
reintentando en bucle podía conseguirlo sin querer.
Las seis tienen ya su techo, y cada número está dos órdenes de
magnitud por encima del uso real medido: tiene que estorbar a un bucle, nunca a una
persona. Las tres que escriben comparten un solo contador, para que alternarlas no
triplique el cupo. El contador es por persona, para que una pestaña atascada
no deje fuera a la bodega entera. Y el tope va después de la
comprobación de identidad, para que a un desconocido se le siga diciendo que no
está identificado y no que vuelva más tarde.
v12.63
Arreglo
El «+ Add it» deja de irse para siempre
Escribías un proyecto nuevo, volvías a pinchar en el casillero, y la
opción de añadirlo desaparecía para siempre. No tardaba en
volver: no volvía. Pinchar en el campo quitaba el cartel (correcto: mientras
editas, estaría hablando de un valor que ya no es el que hay), pero lo
único que podía reponerlo dispara cuando el texto cambia. Sales del
casillero sin tocar una letra y no dispara nada. Y ya no volvería a disparar
nunca.
Lo que lo hacía confuso es que la tarjeta de la esquina sí se quedaba, así
que la app ofrecía el proyecto en un sitio y en el otro no, y parecía que se
había creado a medias. Ahora el cartel se vuelve a mirar cada vez que sales del
campo, haya cambiado el texto o no.
v12.62
Interfaz
La misma etiqueta deja de parecer dos etiquetas
«Arrived» es una etiqueta, y estaba dibujada de dos maneras. En la
tabla de entrantes su cápsula verde llevaba un relleno; dentro del popup de la
mañana, la misma etiqueta llevaba otro. Nada en la app obligaba a que coincidieran,
así que no coincidían. Veinte reglas dibujan esa misma cosa —una
palabra corta o una cifra dentro de una cápsula de color— y entre las veinte
había catorce rellenos distintos, diez tamaños de letra y seis
radios. Ahora hay una cápsula. El popup de la mañana sigue con la letra
más grande, porque se lee de más lejos, pero la cápsula de alrededor
es la misma que en todas partes.
Los radios salieron gratis. Estas cápsulas miden entre 16 y 22
píxeles de alto, y cualquier radio por encima de 10 ya las redondea del todo
—así que 10, 16, 20 y 999 se veían igual—. Cuatro valores
pasaron a ser uno y no se movió un píxel. Las tres que siguen cuadradas lo
siguen a propósito: son contadores, no etiquetas, y es así como se
distinguen de un vistazo.
Y la línea pequeña debajo de la grande. Catorce sitios ponen una
segunda línea discreta bajo un título —una fecha bajo un nombre, un
correo bajo un usuario, una nota bajo una tarjeta— con tres huecos distintos. Un
trabajo, un hueco.
Y por debajo, el espaciado tiene escala. 697 rellenos, márgenes y huecos con
57 longitudes distintas entre ellos, y la misma enfermedad que tenían los
tamaños de letra: entre 4,8 y 12 píxeles había diez valores
usados treinta veces o más cada uno, separados ocho décimas de píxel.
Nadie puede ver ocho décimas de píxel. Esta versión convierte
sólo las 355 declaraciones que caen exactas en un peldaño, así que no
se mueve nada —comprobado en un navegador de verdad: 504 reglas resueltas antes y
después, cero diferencias—. Las que sí se moverían quedan
contadas y anotadas para la siguiente.
Cambio visible en total: veinte cápsulas cuyo relleno de los lados se mueve como
mucho dos píxeles, a cambio de que por fin coincidan todas.
v12.61
Interfaz
Cuatro alturas en vez de cuarenta y cinco sombras
Cada panel, tarjeta y menú que se levanta de la página tenía su
propia sombra escrita a mano. Cuarenta y cinco distintas para sesenta y un sitios
—casi una sombra a medida por uso—. Ninguna estaba mal por sí sola; lo
que estaba mal es que dos tarjetas una al lado de la otra podían flotar a alturas
visiblemente distintas sin que nadie lo hubiera decidido. Ahora hay cuatro
alturas —apoyado en la página, flotando sobre ella, panel, y encima de
todo— y los pasos entre ellas son proporcionales, porque el ojo lee el difuminado
como una razón y no como una cuenta de píxeles.
Los anillos de foco resultaron ser un segundo sistema vestido con la ropa del
primero. El anillo alrededor del campo en el que escribes se escribe igual que una
sombra, pero no tiene difuminado y no es altura: dice cuál está
seleccionado. Separarlos dejó cuatro anillos —neutro, bueno, malo y
aviso— para que una fila seleccionada se vea igual en cualquier pantalla.
Veintiuna sombras se quedan fuera del sistema, cada una por un motivo escrito:
las tres teñidas con el azul de la marca (una sombra teñida parece el mismo
material; una negra parece cinta adhesiva), la que proyecta de lado porque el cajón
entra desde el borde, las pequeñas y nítidas de los controles, las
interiores, y los fotogramas de los pulsos animados. Quedan anotadas como excepciones en
vez de quedarse como sobras.
Nada se movió, nada cambió de tamaño, ninguna pantalla
cambió de forma. Si parece que no pasó nada, eso es el resultado.
v12.60
Arreglo
Las fotos dejan de llegar de lado, y un PO deja de ser dos POs
Las fotos se subían giradas, y eso causaba dos quejas que parecían distintas.
Un teléfono casi nunca gira los píxeles al hacer una foto: guarda el mapa de bits
apaisado tal como salió del sensor y le pega una marca que dice «gírala
90°». Google Docs ignora esa marca — así que la foto entraba al PDF
de lado, y una foto de lado en una hoja vertical llena el ancho y deja el fondo en
blanco. Una causa, dos síntomas. Ahora se enderezan en el navegador antes de subirlas,
lo que arregla el PDF, la vista previa y la miniatura del estante a la vez.
La vista previa cortaba la parte de arriba del documento. La cabecera no tenía la
culpa: centrar algo más alto que su caja empuja su principio fuera del alcance, y la
barra de scroll no puede volver ahí. Ahora centra mientras cabe y deja de centrar
cuando no.
«Amsco» un día y «AMSCO» otro dejaban dos proveedores donde
hay uno. La categoría, el nombre y el proyecto ya se guardaban de una sola forma; el
PO, el GC, el proveedor y el recibido-por, no. Ahora sí. Los guiones sobreviven —
un PO como 07-6329 sigue siendo 07-6329. Lo ya guardado no se
toca.
v12.59
Arreglo
Tres respuestas que no eran verdad
La app culpaba a un compañero que no existía. Sueltas una reserva, vuelves a
pulsar Release, y decía «someone else got there first». No había nadie
más — la habías soltado tú, segundos antes. Lo único que el código sabía es que ya
no estaba activa; quién la soltó era una suposición. Ahora lee la columna
UnlockedBy que llevaba ahí desde el principio y dice «la soltaste
tú», o nombra a la persona, o simplemente dice que ya estaba suelta. Sin acusar a
nadie por descarte.
Buscar decía «no hay nada» sin mirar en el archivo. Buscas un PO del año
pasado y la única conclusión posible era que no existe. Sobre un sistema de inventario
eso es peor que un error: es una respuesta falsa con cara de respuesta buena. Ahora dice
que el archivo no se ha buscado y ofrece un botón para hacerlo.
Fusionar dos ubicaciones dejaba atrás las reservas y las fotos. Reescribía el
archivo y la lista de ubicaciones —todo lo que se ve— y dejaba los candados y
las fotos apuntando a un estante que ya no existe. Material apartado en un estante que el
mapa no enseña, y fotos que el estante superviviente nunca hereda. Ahora se mueven los
dos.
v12.58
Arreglo
Cuatro cosas encontradas grabando la app en un teléfono
No se podía leer qué estabas sacando. En el cajón del estante los nombres salían
como «P…», «L…», «KA…». La causa era una
línea: el nombre era lo único de la fila con permiso para encogerse, así que se encogía
hasta desaparecer mientras el botón de reservar conservaba todo su ancho. Y ésa es la
pantalla desde la que se pulsa Exit — salía material del almacén con el nombre
ilegible. En pantalla estrecha el nombre ocupa ahora su propia línea entera.
El teclado tapaba el botón de guardar. La barra fija ya existía; el fallo era
90vh, que en Android no encoge cuando sale el teclado. La ventana
seguía midiendo la pantalla completa y su barra quedaba debajo del teclado. Lo arregla
una letra: dvh.
Las tarjetas entraban de dos formas y salían de una. Ahora entran de una sola, y
salen de dos maneras que significan cosas distintas: la que aceptas sigue de largo
hacia la izquierda, hacia dentro de la app — la que descartas se desvanece en su
sitio. Moverse quiere decir que algo pasó; no moverse, que no pasó nada.
Pulsar una segunda tarjeta cancelaba el progreso de la primera. Registrar un
proyecto redibujaba el mazo entero, lo que borraba el «Adding…» de
cualquier tarjeta que siguiera trabajando — y permitía mandar la misma dos veces al
servidor. Ahora el redibujo espera a que no quede ninguna en vuelo, y una línea abajo a
la izquierda las va contando.
Y en el teléfono la cabecera se encoge al bajar, devolviendo cerca de un tercio de la
pantalla, y vuelve al subir.
v12.57
Interfaz
El Delete ya es rojo, y exactamente del mismo tamaño
El botón Delete de Movements y de Manage Users era gris, igual que Edit y Labels
a su lado. El único botón de esa barra que destruye algo se veía igual que los que no.
Ahora es rojo.
Medido antes y después, porque «ponlo rojo» resultó no ser gratis:
.btn-ghost lleva un borde de 1px y .btn-danger no llevaba
ninguno, así que recolorearlo sin más lo habría dejado 2px más bajo y 2px más
estrecho que los de al lado. Ahora lleva un borde transparente del mismo grosor, así
que la caja es idéntica — 44×76 en pantalla táctil, 26×76 con ratón, antes
y después.
Eso además alinea todos los demás botones rojos de la app con los grises que tienen al
lado. Estaban 2px desparejos en cada barra donde conviven.
v12.56
Interfaz
Tablas: dos densidades de fila en vez de ocho casi iguales
Segunda tanda de la estandarización. Ocho reglas ponían el espaciado de una celda y
entre ellas traían ocho valores distintos — pero al mirarlos no eran ocho
decisiones. Eran dos que nadie había nombrado: la tabla normal y las compactas,
con medio píxel de ruido alrededor de cada una.
El espaciado de celda es lo único de esta tanda que cambia algo que se ve: fija la
altura de la fila, y con ella cuántas filas caben en la pantalla. Por eso los dos
valores se eligieron para que nada se mueva más de 0,8 píxeles por lado, no para
que salieran redondos.
Los tamaños de letra y las alturas de línea de las tablas salen ya de la misma escala
que los botones. Lo que más se movió fue un tercio de píxel.
v12.55
Interfaz
Botones: una sola forma, y los de borrar al tamaño del dedo
La app tenía 147 reglas de botón y entre ellas 26 espaciados distintos, 9 radios
de esquina y 16 tamaños de letra, mezclando unidades para lo mismo. Nadie decidió
eso: se fue acumulando, una decisión razonable cada vez.
Y al medirlo apareció algo que no esperábamos: la app ya tenía los tokens de
diseño escritos. --radius y --shadow llevaban versiones ahí.
Los de color sí se usaban —--border en 135 sitios—; los de forma
no: --radius aparecía en 5 de 224 esquinas. No faltaba un sistema.
Faltaba usarlo.
Ahora los botones comparten un radio y una escala de trece tamaños. Los tres tamaños
más usados de la app no se movieron ni un píxel, así que las pantallas se ven igual.
Y un cambio que no es de aspecto. Las alturas eran 34, 36, 38, 40 y 44 píxeles.
El mínimo para que un dedo acierte son 44. Todo lo que borra algo mide ahora 44
en pantalla táctil, aunque esté dentro de una fila de tabla: fallar en
«Edit» cuesta un toque más, fallar en «Delete» destruye algo,
y el mismo tamaño para los dos era la decisión equivocada. Los demás botones de fila
se quedan compactos, porque subirlos todos duplicaría la altura de cada fila.
v12.54
Datos
Cinco cosas calladas de la hoja, ahora vigiladas
El total ya tiene quien lo mire. Total Cost es Qty × Unit Cost,
siempre, y era la única columna calculada que nadie vigilaba. Si alguien corregía
un precio unitario a mano, el total se quedaba con el número viejo para siempre:
quien suma esa columna —que es contabilidad— sumaba un número que ya no era
verdad. Ahora se recalcula en cada reconstrucción y la corrección se anota con el
número de fila, para poder ir a mirarla. Las filas sin coste unitario no se
tocan: ahí el total vacío es deliberado, y un cero inventado en la columna de
contabilidad sería un dato falso.
Cinco columnas que se escribían y no leía nadie se han ido. Dos no eran ni
datos —Location_Type llevaba la palabra RACK en todas las filas, y
Status llevaba “At Site” en todas—. Las otras tres llevaban la misma
hora repetida una vez por material: con 400 materiales, el mismo minuto 400 veces.
Nada fuera de la app lee esas hojas, y se reescriben enteras en cada guardado, así
que no había nada que migrar.
CONFIG ahora dice lo que está ignorando. Dos de sus columnas —Admin
Email y Archive Cutoff Months— son ajustes únicos que sólo se leen de
la fila 2, en una hoja donde todas las demás columnas son listas que crecen hacia
abajo. Escribir un segundo correo de administrador debajo del primero no hacía
nada, y nada lo decía. Check this installation ahora nombra la columna, los
números de fila y cuál es el valor que de verdad está en uso.
La pestaña RESERVATIONS deja de desinformar. Está vacía porque no la usa
nada —las reservas viven en MATERIAL_LOCKS—, pero su propia nota decía que
se “reconstruye desde el archivo y lo editado a mano se sobreescribe”.
Ninguna de las dos cosas es verdad, y quien la abriera sólo podía concluir que la
app le había borrado sus reservas. La pestaña se queda, por si alguna instalación
antigua dejó datos ahí; la nota ahora dice lo que pasa.
Dos nombres de columna de AUDIT_LOG describían algo que no estaba ahí.
Old Value y New Value: de los 56 sitios que escriben en el registro, 19
dejan las dos vacías y 17 llenan una con contexto en vez de con un valor anterior.
Leído desde la hoja, eso parece un registro roto. Ahora son Detail 2 y
Detail 3. No se movió ni una entrada —sólo el nombre, y sólo donde
seguía diciendo las palabras viejas—.
v12.53
Interfaz
Usuarios: sin botones hasta elegir a alguien, y una advertencia que se lee
Editar, Borrar y Desactivar estaban ahí en gris, hubiera o no un usuario marcado.
No actúan sobre la pantalla —actúan sobre una fila—, así que sin fila marcada no
es que no estén disponibles: es que no hay nada sobre lo que puedan actuar. Ahora
aparecen al marcar a alguien, y el que sale es Desactivar o Reactivar
según cómo esté esa persona. Add User se queda, porque es el botón que crea
la primera fila.
La advertencia de borrar eran tres viñetas y un párrafo final —y eso no se lee, se
salta—. Ahora es una frase que nombra a la persona y dice qué pasa y qué no. El
resto queda plegado tras una ⓘ: disponible para quien dude y fuera del camino de
quien no.
Y las ventanas de confirmación llevan una ✕ en la esquina, que es donde la
gente la busca. El botón seguro se queda igualmente: en una ventana que destruye
algo, la salida segura no puede ser más pequeña ni estar más lejos que la
peligrosa.
v12.52
Arreglo
Iniciar sesión podía devolverte a una copia de la app que ya no contesta
Pulsas Sign in with Google, se abre la ventana, eliges tu cuenta —y la
ventana muere con un error de Google Drive mientras la página espera cuatro
minutos para decir «Timed out. Please try again.». Volver a intentarlo hace
exactamente lo mismo.
La dirección de vuelta se guarda, y puede acabar apuntando a un despliegue
más viejo de la app: pasa al copiar la hoja, al crear un despliegue nuevo en
vez de actualizar el que había, y al cambiar el proyecto de Cloud. Nada la
comparó nunca con la app que de verdad está corriendo.
Ahora la página las compara antes de abrir la ventana. Si no son la misma
app lo dice en el acto, enseña las dos, y nombra la opción del menú que lo
repara —en vez de abrir una ventana que ya sabe que no va a poder volver—.
Check this installation la corrige, y publicar una actualización la
mantiene al día a partir de entonces.
v12.51
Arreglo
Una fila de usuario creada por error ya se puede quitar
Un correo registrado con una errata no se podía renombrar —el bueno ya
existía en otra fila— y tampoco se podía quitar, porque lo único que había
era Desactivar. Dos salidas tapiadas y ninguna puerta: el error quedaba
encerrado.
Ahora hay Borrar definitivamente, dentro de la ficha del propio
usuario, en rojo y lejos de Guardar. Es para una fila que nunca debió
existir: una errata, un duplicado, algo que una migración trajo dos veces.
Para alguien que sí trabajó aquí, lo correcto sigue siendo Desactivar, y el
aviso lo dice.
La fila entera queda escrita en el registro de auditoría antes de
desaparecer, y el correo se limpia a la vez de la lista vieja de CONFIG
—si no, la cuenta vuelve a aparecer sola la próxima vez que esa lista se
revisa.
v12.50
Arreglo
Borrar y editar actualizan las cifras en el momento en que terminan
Al borrar un movimiento la fila se iba de la pantalla en el acto, pero los
totales de abajo se quedaban con el número viejo hasta la siguiente
recarga —y eso se lee como que el borrado no contó—. Ahora las cifras
vuelven con el propio borrado.
Vuelven sólo en el borrado que de verdad rehizo los totales: el último de
la tanda. Calcularlas en cada borrado devolvería la ráfaga lenta que
arregló la v11.96, y mandar las cifras de antes como si fueran las de
después sería peor que no mandar nada.
Al editar un movimiento, el navegador rehacía por su cuenta la
normalización del servidor para pintar la fila —dos cuentas que tenían
que coincidir sin que nada lo obligara—. Ahora el servidor devuelve la fila
exactamente como quedó escrita, y los totales de los dos materiales, porque
cambiar la categoría o el nombre mueve existencias de uno a otro.
v12.49
Arreglo
Lo que acabas de guardar aparece en el segundo en que el servidor lo confirma
Guardando diez entregas, cronometrado fotograma a fotograma: la ventana se
cerraba a los 14 segundos y la lista de movimientos tardaba dieciséis y
medio más en enseñarlas. Dieciséis segundos mirando una tabla que no
contiene lo que acabas de meter es justo cuando alguien decide que falló y
vuelve a darle a guardar.
No era lentitud. El navegador pedía la foto entera otra vez para enterarse
de unas filas que el servidor acababa de escribir y le estaba devolviendo
en la misma respuesta. Ahora entran directas en la lista, con su
identificador propio para que la recarga silenciosa de detrás no pueda
enseñar nada dos veces.
Al abrirlo apareció algo más gordo: las cifras de existencias que el servidor
calcula desde la v12.24 —para que la pantalla no tenga que preguntarlas—
no las reenviaba ninguno de los tres caminos de guardado. El navegador
las pedía y recibía nada. Arreglado en los tres, con una prueba que ahora
sujeta el viaje de vuelta entero.
v12.48
Arreglo
Una errata en un correo sólo se podía arreglar en la hoja
Un correo con una letra de más —@ox-glasss.com en vez de
@ox-glass.com— es un correo perfectamente válido, así que
nada lo rechazó. Se quedó en la lista de usuarios con su aspecto de activo
y simplemente no dejaba entrar a esa persona nunca. Y el campo del correo
no se podía editar, así que corregir una letra obligaba a abrir la hoja
de cálculo a mano.
Ahora un administrador lo corrige desde la app. Detrás hay tres guardas: se
rechaza un correo que ya tenga otra persona, nadie puede cambiar el suyo
propio (perdería el acceso en el acto), y el cambio queda escrito de
dónde a dónde en el registro de auditoría.
Y antes de guardar, un correo cuyo dominio está a una o dos letras de
uno que ya usan los demás pregunta si querías el otro. Parecido pero distinto
es exactamente la pinta que tiene una errata; un dominio de verdad distinto
—un contratista con Gmail— no dice nada.
v12.48
Arreglo
El respaldo nocturno podía pararse sin que nadie se enterara
El interruptor sigue en verde, la lista sigue llena, el último respaldo tiene
su fecha y su enlace que abre. Nada decía que esa fecha era de la semana
pasada. Un sistema de respaldo que falla en silencio es peor que no tener
ninguno, porque el que no tiene ninguno lo sabe.
Ajustes → Sistema ahora lo dice en voz alta cuando la copia nocturna lleva
más de día y medio sin correr, nombra la causa más frecuente y señala el botón
de respaldar ahora. Se calla si el respaldo está apagado a propósito, y
no da la alarma por una noche de retraso.
v12.47
Arreglo
«Google rechazó esa clave» cuando Google no había rechazado nada
Guardar una clave de IA mientras el servicio de Google estaba saturado
daba «Google rejected that key (HTTP 503)». Un 503 significa que
Google está sobrecargado: no mira la clave siquiera. Así que una clave
perfectamente buena se daba por mala, y lo que uno hace entonces es ir a
sacar otra, y otra.
Que Google esté ocupado ya no se toma como una sentencia sobre tu clave.
La clave se guarda, y la app dice con claridad que no se pudo
comprobar ahora y por qué. Sólo la rechazan los errores que sí hablan de
la clave —mal copiada, o la Generative Language API apagada— y ahora
dicen cuál de los dos es.
Comprobar una clave también dejó de probar cuatro modelos seguidos. Esa
lista de respaldo existe para que el lector siga funcionando si Google
retira un modelo; no demuestra nada sobre una clave, y hacía la espera
cuatro veces más larga de lo necesario.
v12.46
Arreglo
Renombrar: de uno en uno, y sin tirar lo que escribiste
En Ajustes, pulsar el lápiz en varias categorías las abría todas para
editar — pero guardar una repinta la lista y se llevaba por delante
lo que hubieras escrito en las demás, sin avisar. La app ofrecía un
trabajo que no podía entregar.
Ahora hay un renombre abierto a la vez. Si el que está abierto tiene algo
escrito sin guardar, el nuevo no se abre y la app dice por qué —
lo que tecleaste no se tira para hacer sitio. Si está sin tocar, se
cierra y el otro se abre, porque pulsar el lápiz equivocado y corregirse
es lo más común que hay.
Se guarda de uno en uno a propósito: renombrar una categoría reescribe
cada movimiento que la usaba y después rehace la caché de existencias.
Cinco de golpe son cinco de esas pasadas, y si la tercera falla queda
media tanda aplicada y nadie sabe cuál.
v12.45
Seguridad
Dos guardias que decían que sí por omisión
Quién puede registrar movimientos es ahora una lista de quién sí, no
de quién no. La app preguntaba "¿esta persona es VIEWER?" en vez de
"¿esta persona puede escribir?". Con tres roles dan la misma respuesta —
por eso nunca se notó. Pero cualquier rol nuevo habría pasado de
largo, sólo por no llamarse VIEWER, y en un almacén eso es permiso
para mover material. Hoy nadie podía hacerlo; habría sido cierto el día
siguiente a que existiera un cuarto rol.
Y una categoría que no está en tu catálogo ya no puede entrar con el
material. Aquí la categoría es la mitad de la identidad de un
material: archivar algo como WINDOWS cuando el catálogo dice
WINDOW no es el mismo material mal etiquetado, es un segundo
material con sus propias existencias que nadie suma nunca.
Tecleada no se podía: la casilla de categoría es un desplegable cerrado.
Lo que sí entraba es todo lo que no pasa por la pantalla — una
importación, sobre todo. Las importaciones siguen trayendo sus
categorías, porque importar es decir "esto es mi almacén tal como
está", pero ahora se escriben en tu catálogo y se cuentan. Y eso
importa más de lo que parece: un material cuya categoría no está en la
lista no se puede ni seleccionar para sacarlo.
Sacar material nunca lo bloquea ninguna de las dos comprobaciones — lo
que ya está dentro tiene que poder salir.
v12.44
Arreglo
El correo diario informaba de un día que no había pasado
Tres cosas estaban mal a la vez, y juntas significaban que los
movimientos de un día de trabajo no los informaba nunca ningún
correo. El correo llegaba, se veía bien, y siempre decía que no
había pasado nada.
Salía a la hora equivocada. La app apuntaba en una nota la hora a
la que había programado el trabajo, y después se fiaba de la nota en vez
del trabajo — y Google no da forma de preguntarle a un trabajo
programado a qué hora corre, así que esa nota no se podía comprobar.
Cuando las dos se separaron, Ajustes decía 4:00 PM y el correo llegaba a
las 2:53 AM. Ahora el trabajo despierta cada hora y es la app la que
decide cuándo toca, así que no queda nada que pueda separarse.
Cambiar la hora en Ajustes surte efecto sin tocar nada.
Y siempre informaba de "hoy", corriera cuando corriera. A las 2 de
la mañana, "hoy" lleva tres horas y está vacío. La regla ahora: un
correo de la mañana informa del día que acabó; uno de la tarde, del día
que está acabando. El correo sigue diciendo de qué día habla, así que
un día tranquilo se lee como un día tranquilo y no como una mentira.
La fecha va en formato de Estados Unidos. El 6 de octubre salía
06/10/2026, que se lee como 10 de junio.
Aparte: 🏭 Acopio → Check installation ahora rellena los nombres de
columna que falten en tus pestañas. El código para hacerlo existía y
no lo llamaba nadie fuera de la instalación inicial, así que una
instalación que ya estaba funcionando no podía recibirlo — por eso
RESERVATIONS y AUDIT_LOG tenían las cabeceras en blanco. Una columna sin
nombre parece basura, y tarde o temprano alguien la borra.
v12.43
Arreglo
Ya no se puede meter material en un estante que no existe
Escribir un estante que no está en tu almacén —A1P cuando
querías decir A1B— lo guardaba igual, y aparecía una ubicación
nueva en tu mapa con material dentro. Eso es peor que un error de
tecleo: un estante inventado no está en ninguna estantería, así
que la app dice que el material está en un sitio al que nadie puede
ir.
Ahora la app comprueba el estante al que llega el material y, si
no es uno de los tuyos, lo dice — y te ofrece el que probablemente
querías. Si puedes tocar el catálogo, lo creas ahí mismo y el
movimiento se guarda sin volver a teclearlo.
Sacar material de un estante que no existe sigue permitido, a
propósito. Lo que ya quedó en A1P antes de este arreglo tiene que
poder salir, o el arreglo lo dejaría encerrado para siempre. Por eso la
lista de donde el material sale sigue enseñando todos los sitios
donde de verdad hay stock; la de a dónde va enseña sólo
ubicaciones reales.
Importar un fichero sigue creando los estantes que nombra —importar es
decir "esto es mi almacén tal como está"— pero ahora los añade a tu
lista de ubicaciones y te dice cuántos, en vez de crearlos en
silencio.
v12.42
Más fácil
El enlace a la app ahora es un enlace — se pulsa
Al publicar una actualización, la dirección salía como texto plano en
una caja estrecha, cortada y con barra de scroll. Para usarla había
que seleccionarla a ciegas, copiarla, irse al navegador y pegarla. Es que
la caja de avisos que da Google sólo sabe enseñar texto: no puede
enseñar un enlace.
Ahora tanto 🔧 Advanced → Push Update Live como Open App
abren una ventana de verdad con un botón que lleva directo, la
dirección entera en un campo que se puede seleccionar, y un botón de
copiar que sólo dice Copied cuando de verdad copió.
Y a la gente nueva le llega el enlace por correo. Dar de alta a
alguien en Manage Users le manda ahora una invitación con la dirección,
con qué cuenta de Google entrar y qué le deja hacer su rol. Ya no hay que
buscar la dirección y reenviarla a mano. Se puede desmarcar si estás
preparando las cuentas por adelantado — y si el correo no sale, la app lo
dice en vez de dar por hecho que salió.
Guarda esa dirección en marcadores una vez y la hoja de cálculo deja de
pintar nada en el día de nadie.
v12.41
Seguridad
Una sola lista de usuarios, no dos
Las instalaciones que vienen de una versión antigua llevaban dos
listas de usuarios: la que manejas en Manage Users y otra más
vieja que seguía en la pestaña CONFIG. Las dos dejaban entrar — pero
sólo una está en tu pantalla. Así que cualquiera que estuviera en la
lista vieja podía entrar sin aparecer nunca en Manage Users, y eso
significa que no había forma de quitarle el acceso desde la app.
La lista vieja no se borra: en una instalación a medio migrar esa
gente es personal de verdad, y quitarla de un día para otro dejaría a
alguien sin trabajar un martes por la mañana. En su lugar se ha
convertido en un camino de ida. La próxima vez que una de esas
personas entre, queda escrita en tu lista de usuarios de verdad en ese
mismo momento —con su rol, activa, sin cambiarle nada— y desde entonces
aparece en Manage Users con su interruptor, para que puedas apagarla.
🏭 Acopio → Check installation hace ahora el cruce entero de
golpe, sin esperar a que nadie entre. Te dice cuánta gente se pasó, qué
correos llevan un rol distinto en cada lista (manda Manage Users) y qué
filas de tu lista de usuarios tienen algo que no es un correo donde va
el correo — ésas no dan acceso, pero salen en pantalla. Nunca borra
una fila.
v12.40
Seguridad
Los accesos rechazados quedan escritos — y te avisan
La puerta funcionaba: a alguien que no está en tu lista de usuarios se
le rechazaba. Pero el rechazo no dejaba rastro en ninguna parte,
así que desde dentro un intento de entrar y un día tranquilo se veían
exactamente igual. Eso es una cerradura sin mirilla.
Ahora cada rechazo queda en la pestaña AUDIT_LOG de tu hoja, bajo
ACCESS_DENIED, con quién lo intentó y por qué. Una línea por
persona y minuto — una pestaña olvidada reintenta sola cada veinte
segundos, y sin ese tope una sola pantalla abandonada enterraría la
única línea que importaba.
Y a los diez rechazos en diez minutos recibes un correo, como
mucho uno por hora: quién lo intentó, qué hacer si es alguien de los
tuyos, y dónde está el registro completo. Un registro que nadie abre no
avisa a nadie.
Que a alguien se le niegue una acción concreta —un usuario de sólo
lectura pulsando guardar— no se apunta aquí. Esa persona está
dentro y sólo le falta un permiso; mezclar las dos cosas escondería a
los de fuera entre gente legítima.
v12.39
Seguridad
Desactivar a un usuario ahora sí le quita el acceso
Si tu instalación viene de una versión anterior, desmarcar a alguien
en Manage Users podía no estar deteniéndole. La pantalla decía
"desactivado"; el servidor le dejaba entrar igual.
La comprobación le buscaba en la lista de usuarios actual y, al
encontrarle apagado, seguía hasta la lista antigua de la que se migró la
app — y esa lista antigua sigue teniendo a todo el mundo. Así que el
interruptor se leía, y acto seguido lo anulaba un resto del pasado.
Ahora la lista actual decide en los dos sentidos: encendido, entra con
su rol; apagado, se queda fuera, y la lista antigua ni se mira. Quien
nunca llegó a la lista actual sigue entrando igual que antes, que es el
único caso para el que esa lista antigua está ahí.
Conviene comprobarlo hoy mismo en tu instalación: abre Manage Users y
confirma que todo el que esté apagado es alguien que querías apagar.
v12.38
Seguridad
La app ya avisa cuando se queda sin conexión
Hasta hoy la única señal era un puntito de color en la esquina, y había
que pasar el ratón por encima para leer por qué. Nadie pasa el ratón por
encima de un punto. Sigues trabajando, sigues escribiendo — y nada de
eso se está guardando.
Ahora una barra roja arriba dice que estás sin conexión, que lo que
escribas no se puede guardar, y que la app lo sigue intentando sola.
No se puede cerrar: mientras siga siendo verdad, el aviso sigue siendo
verdad. Cuando vuelve la conexión se pone verde, dice Back online
y se va sola a los cinco segundos — la regla contraria, porque para
entonces ya dejó de ser noticia.
Al abrir la app nunca sale: arrancar no es recuperarse, y saludar con
"Back online" sería contar una caída que no ocurrió.
v12.37
Arreglo
El botón de guardar ya no se va de la ventana
En un formulario más alto que la pantalla —Add Expected Material, Entry,
Exit— los botones de abajo estaban al final del contenido que se
desplaza. Había que bajar para llegar a Guardar, y en una pantalla corta
el botón salía cortado por el borde de la ventana.
La fila de botones va ahora pegada abajo, igual que el título y la
✕ llevan meses pegados arriba. El formulario se desplaza por debajo; los
botones se quedan.
Y pesa más que la comodidad: el aviso de error vive en esa fila.
"Material 1 needs a name" sale justo al lado de Guardar. Con la fila
fuera de la pantalla, pulsas guardar, no pasa nada, y el motivo está
exactamente donde no estás mirando.
Y si la ventana cabe en tu pantalla, ahora cabe — el tope pasó del
82% al 90% del alto, que es lo que le faltaba a Add Expected Material
para no tener que desplazarse en un portátil normal.
Además todos los botones de esa fila miden lo mismo. Un "Cancel"
de 88 píxeles al lado de un "Save" de 120 eran dos tamaños en la misma
fila; ahora son uno solo, venga cada botón con la clase que venga, y
ninguno puede partirse en dos líneas y empujar la fila entera.
v12.36
Arreglo
Cada versión publicada dice ahora cuál es
Publicar desde el menú llamaba igual a todas las versiones, así que la
lista del cuadro de implementaciones de Google era una columna de
nombres idénticos sin forma de distinguir uno de otro. Ahora cada
versión lleva sellada la versión de la app, su build y la fecha en que
salió.
El nombre de la implementación en sí se queda igual a propósito, y
no es un descuido: es la llave con la que la app encuentra su
implementación y la actualiza en el sitio. Si cambiara, la siguiente
publicación crearía una nueva — o sea una dirección nueva,
con todos los marcadores del almacén apuntando a la vieja.
v12.35
Seguridad
Tus categorías y ubicaciones ya no se pueden borrar por un tropiezo
El código que guarda tus listas —categorías, proveedores, proyectos,
ubicaciones— vaciaba la columna primero y escribía la lista
después. Entre esos dos pasos cabe cualquier interrupción normal de
Google: una cuota, un tiempo de espera, un error pasajero. Lo que
cayera ahí dejaba esa lista vacía, sin nada que avisara. Te
enterabas al abrir un desplegable y no encontrar nada.
Ahora escribe primero y limpia lo que sobra después. Si la escritura
falla, tu lista de antes sigue ahí. Una lista desactualizada es un
problema pequeño y visible; una lista vacía es uno grande e
invisible.
Y un segundo fallo, encontrado al arreglar el primero. El nombre
de una ubicación y su tipo viven en dos columnas pegadas y sólo
significan algo juntas — y se escribían en dos operaciones separadas. Si
la primera salía y la segunda no, los nombres y los tipos quedaban
corridos: un estante tomaba el tipo de otro, uno aparecía archivado y
otro dejaba de estarlo. Nada fallaba y nada lo decía. Ahora se escriben
como un solo bloque, que para Google es una sola operación: el estado a
medias ya no existe.
v12.34
Arreglo
"Load more" ya no te manda al final de la lista
Al pulsarlo traía los 75 movimientos siguientes y luego saltaba la vista
más allá de todos ellos, hasta la última fila. Perdías el sitio por
donde ibas y tenías que subir a buscarlo.
Medido: la fila que estabas mirando se iba unos 5.000 píxeles por
encima de la pantalla. Ahora se queda exactamente donde estaba y las
filas nuevas llegan debajo, que es para lo que sirve un botón de "más".
Y el otro botón que hace crecer la misma lista lleva el mismo
arreglo. "Load Older History" devolvía la tabla a sus primeras 75
filas sin decir nada — así que quien había pulsado "Load more" diez
veces perdía las diez, y tenía que volver a pulsarlo otras diez para
llegar a los movimientos viejos que acababa de pedir. Un botón que trae
cosas no puede esconder las que ya estaban.
v12.33
Arreglo
Tras archivar de verdad, el informe dice cómo quedó cada hoja
Archivar de verdad terminó bien y contó todos los pasos — pero faltaba
la línea que dice con qué se queda ahora cada hoja. Los números
estaban en el paso a paso, repartidos; el resumen que los pone juntos
sólo salía en el ensayo.
Y no podía salir: las dos cifras se calculaban dentro de la rama del
ensayo, así que una corrida de verdad nunca las tenía. Ahora se calculan
en las dos — y en la corrida de verdad se leen de las hojas después
de escribir, no se arrastran de lo que se iba a escribir. Cuando ya
se ha escrito, "cuántas quería escribir" y "cuántas hay" son dos
preguntas distintas, y la que merece imprimirse es la segunda.
v12.32
Arreglo
"Open WMS App" podía darte la dirección de otro
En una hoja copiada de otra que ya estaba publicada, Google
contesta a la pregunta "¿cuál es la dirección de esta app?" con la del
archivo original. La copia tiene la suya, en otro sitio. Seguir
la que da Google lleva a "Sorry, unable to open the file at this
time", y nada en esa página sugiere que el problema era el
enlace.
La app ya lo sabía: guarda la dirección buena en un ajuste que gana
sobre la suposición de Google, y el asistente de configuración lleva
meses leyéndola así. La entrada del menú era el único sitio que no
preguntaba.
Ahora pregunta. Y Push Update Live apunta la dirección en el momento
de publicar, que es el único momento en que se conoce con certeza,
así que a partir de ahí el menú acierta sin que nadie escriba nada.
De la misma comprobación salió otro. Al entrar con Google, la
vuelta a la app usaba también esa suposición cuando no había nada
guardado — así que el inicio de sesión podía devolver a la gente a la
instalación de otra persona, fallando con un error que no se parece en
nada a su causa. Ahora prefiere igualmente la dirección apuntada.
v12.31
Interno
Un índice para el código, y una prueba que lo obliga a no mentir
En la app no cambia nada. Ésta es para quien tenga que trabajar
en ella — hoy una persona, y algún día no.
El archivo del servidor son 13.279 líneas repartidas en 68 secciones.
Ahora empieza con un índice numerado de esas secciones, así que
encontrar algo es leer una lista en vez de bajar y bajar. El índice
se genera de las propias cabeceras del archivo, no se escribe, y una
prueba lo vuelve a generar y lo compara línea a línea: si se renombra,
se mueve, se añade o se quita una sección y el índice no lo refleja, la
prueba falla.
Y eso es lo importante. Un índice escrito a mano es otra lista que tiene
que coincidir con algo sin que nada lo obligue — exactamente la forma de
fallo que este código ya se ha cazado dos veces a sí mismo. Un índice
que miente es peor que no tenerlo: no tenerlo obliga a buscar, y tenerlo
equivocado hace creer que ya se ha buscado.
v12.30
Nuevo
Archivar los movimientos viejos ahora, sin esperar a las 3 de la mañana
El trabajo que saca los movimientos viejos de la lista principal corre
una vez por noche. Eso hacía que cada intento de comprobarlo costara
veinticuatro horas: guardar, esperar, mirar mañana. Ahora hay un botón
que corre el trabajo de verdad en el momento — el mismo trabajo, las
mismas comprobaciones, no una copia de prueba — en
Advanced → Archive old movements NOW.
Ensaya primero y te enseña los números: cuántos saldrían, cuántos
volverían a entrar, cuántos se quedarían y con qué se quedaría cada
hoja. No se escribe nada hasta que contestas que sí. El informe de
después es el mismo, en pasado.
Y los últimos 30 días ya no se archivan nunca, diga lo que diga el
corte. Con el corte en seis o doce meses eso ya se cumplía por
aritmética — pero se cumplía por casualidad, porque dependía de un
ajuste. Un ajuste puede estar mal, y un corte mal leído puede mandar
todos los movimientos al archivo y dejar la lista principal vacía.
Ahora es una regla, y cuando tiene que actuar el informe lo dice en voz
alta.
v12.29
Arreglo
Cada corrida nocturna deja escrito de qué versión era
Ésta es la que explica las dos últimas semanas. El fallo del 1 de
octubre dejó una pila, y la pila decía que la función que reventó estaba
en la línea 2.148, veintidós por encima de su propio disparador. En la
versión que puso las comprobaciones de seguridad, esa misma función está
en la 4.371 y ocupa unas trescientas líneas.
O sea que las comprobaciones no estaban en el código que corrió.
El trabajo nocturno llevaba semanas ejecutando una copia vieja del script
mientras la nueva estaba en el editor — por eso tres arreglos seguidos
parecían no cambiar nada. Y nada en la app podía contestar "¿pero esto es
el código nuevo?", así que la pregunta no se hizo en dos semanas.
Ahora cada corrida lo deja escrito dos veces: al empezar, por si revienta
en la primera línea, y al terminar. La versión viaja además dentro del
registro del error. Una línea corta, y la pregunta ya no puede quedarse
sin respuesta.
Y el botón de ensayo ahora sí arranca. Salió sin declarar quién
es, así que lo único que llegó a decir fue "not authenticated". Un
diagnóstico que no arranca es peor que no tener ninguno: le cuesta un día
a quien contaba con él.
v12.28
Arreglo
Cuando el trabajo nocturno falla, el registro dice por dónde iba
Tres fallos seguidos dejaron exactamente la misma línea: "el
número de columnas de los datos no coincide con el número de columnas del
rango. Los datos tienen 23, y el rango, 20." Esa línea no dice qué
hoja, ni en qué paso, ni de cuántas columnas era cada una. Es la forma
del fallo sin el fallo.
Ahora el trabajo va dejando un rastro: de cuántas columnas es cada hoja
frente a las que necesitan las filas, cuál es el corte, cuántas filas van
a cada lado, cuál de las dos escrituras estaba intentando, y si la
primera había terminado. Cuando revienta, todo eso va al registro de
errores junto con la pila y sus números de línea.
Reponer las filas, que se añadió en la v12.27, es un cinturón de
seguridad — no es el arreglo. Perder filas no puede convertirse en
algo de lo que la app se recupera por rutina. Esto es lo que convierte el
próximo fallo en algo que se puede diagnosticar en vez de adivinar.
Un detalle que vale la pena dejar escrito: el rastro estuvo a punto de no
llegar nunca. El registro de errores descarta lo que no sea un objeto, así
que la primera versión —que pasaba un texto suelto— se habría tirado en
silencio, y habríamos tenido la misma línea inútil creyendo que esta vez
sí decía algo.
v12.27
Arreglo
Si el trabajo nocturno pierde filas, las devuelve
Desde la v12.14 el trabajo cuenta los movimientos antes y después de
escribir, así que sabía cuándo faltaban filas. Y lo único que hacía
era decirlo — una línea en el registro de errores, un correo, y la
hoja rota. Pasó tres veces, y las tres se supo horas después y se
arregló a mano desde un backup.
Darse cuenta de que acabas de perder mil filas y no devolverlas es casi
peor que no darte cuenta: todo lo necesario para repararlo está en
memoria, a dos líneas. Las dos hojas siguen guardadas tal como
estaban antes de tocar nada. Así que ahora se devuelven — en el acto y
sin preguntar.
Esto no depende de saber por qué falló, y ésa es la razón de
escribirlo así. La causa de los tres incidentes sigue sin establecerse.
Una reparación que sólo funciona cuando entiendes la causa no es una
red: es una esperanza.
El correo sale igual: una reparación silenciosa escondería la causa, y
la causa sigue habiendo que encontrarla.
v12.27
Arreglo
El histórico carga de lo más nuevo hacia atrás, por tandas
Load Older History se traía el histórico entero de un golpe y
después decía "ya está cargado". Con 56 filas eso parece que la app sólo
sabe cargar 56; con veinte mil sería un viaje que no termina.
Ahora trae 300 cada vez, empezando por las más recientes y yendo
hacia atrás, y cada pulsación continúa donde se quedó la anterior. Sólo
se leen las filas de esa tanda, así que sigue siendo rápido por mucho
histórico que haya.
Y lo que de verdad faltaba no era el paginado — era que el botón
dijera si había terminado. "Older History (56)" no distingue "56 de
56" de "56 de 1.271", así que hay que adivinar. Ahora dice "Load 300
more — 56 loaded, 1.215 older still there", o "All older history
loaded" cuando no queda nada.
v12.26
Nuevo
Ya puedes ensayar el archivado nocturno cuando quieras
El trabajo que ordena los movimientos viejos corre a las 3 de la mañana
sin nadie delante, y escribe lo que hizo en una pestaña que nadie abre.
Cuando salió mal se supo horas después y por casualidad. Un fallo que
sólo se puede observar a las 3 AM no se puede investigar.
Ahora hay 🌙 Test the nightly archive en el menú Advanced. Corre
el trabajo de esta noche entero —las mismas guardas, las mismas cuentas,
el mismo reparto— y se para justo antes de las dos escrituras. Se puede
pulsar en cualquier momento, con datos de verdad, y te dice qué haría
esta noche: cómo de ancha es cada hoja frente al ancho que necesitan las
filas, cuántos movimientos hay en cada una, cuál es tu corte y qué
considera viejo, cuántos se moverían en cada sentido, qué dice cada
guarda, y el error exacto si lo hay.
El ensayo vive dentro del trabajo de verdad en vez de ser una
copia. Una copia sería una segunda versión que siempre se da la razón, y
así es como una red de seguridad rota pasó diez días sin que se notara.
Y está probado como todo lo demás — incluido que de verdad no escribe
nada, lo cual cazó una primera versión que ensanchaba las hojas mientras
decía que era un ensayo.
v12.25
Arreglo
Una lista de movimientos vacía ya dice de qué vacío se trata
El aviso que se añadió en la v12.14 no podía saltar nunca. Estaba
escrito para detectar lo único que no puede pasar solo —un almacén con
existencias y un archivo sin un movimiento— y recorría la lista de stock
como si fuera un array. No lo es: es un mapa por material. El bucle daba
cero vueltas y la respuesta era siempre no. Diez días con la red
puesta y rota.
Es la misma forma que la copia de configuración que nunca funcionó: una
protección escrita, dada por buena y jamás ejecutada ni una vez. Lo que
las dos tienen en común no es el descuido — ninguna tenía prueba.
Una protección sin prueba no es una protección: es una intención. Ésta
ya tiene una que la ejecuta, y la versión vieja no la pasa.
Y hay tres vacíos, no dos. El tercero es el que provocó el susto:
la lista reciente vacía porque el trabajo nocturno se llevó
todo lo que pasó el corte al histórico. No se pierde nada — pero
la pantalla se veía igual que el desastre. Decirle a alguien que su
almacén se rompió cuando sólo tiene que pulsar un botón es casi tan malo
como no decirle nada cuando sí se rompió.
Así que la lista dice ahora cuál es: un filtro no encontró nada,
está todo en el histórico (con cuántos son y el botón que los
trae), o el imposible, que sigue diciendo que pares y no toques
nada. Y el propio trabajo nocturno escribe una línea y manda un correo
cuando deja la lista reciente vacía — aunque las cuentas cuadren, porque
en ese caso cuadran y por eso nadie se enteraba.
v12.24
Arreglo
El número cambia cuando la app dice que cambió
Guardabas un movimiento y la app decía listo — y luego tardaba
unos segundos más en cambiar la cantidad, devolver el stock y pasar el
badge de In Stock a All at Site. Cronometrado sobre un
guardado de verdad.
Y lo que hacía era peor que esperar. Después de guardar repintaba
desde su propio caché — y el caché es la foto de antes del
movimiento que acababas de guardar. Así que la cifra que salía "al
instante" era la vieja. Eso es peor que un esqueleto de carga: un
esqueleto se ve como algo cargando, un número viejo se ve como un
número. No había nada en pantalla que dijera que todavía no era
verdad.
El arreglo NO fue rehacer la aritmética en el navegador. Era el
camino obvio y era el equivocado: dos aritméticas pueden discrepar, y
entonces la cifra parpadea a un valor incorrecto antes de
corregirse — peor que esperar, y rompe la regla sobre la que está hecha
esta app.
El servidor ya tenía las cifras de después. Recorre su propia foto del
almacén movimiento a movimiento para comprobar que el guardado se puede
hacer, así que cuando contesta sabe exactamente qué tienes — y lo
tiraba. Ahora lo manda. No hay dos aritméticas: es la del servidor,
contada. La foto completa se sigue pidiendo detrás, en silencio;
esto adelanta lo que miras, no sustituye la verdad.
Y el badge sale gratis. Desde la v12.17 el estado se decide a partir de
esos números en vez de guardarse al lado, así que corregir los números
corrige In Stock → All at Site solo. Ése era el sentido de
unificar los estados, y éste es el primer sitio donde se cobra.
v12.23
Nuevo
La hoja de cálculo detrás de la app parece parte del producto
Al abrir el archivo, tres pestañas estaban bien diseñadas —la de
bienvenida y los dos documentos legales— y las otras diecisiete eran
volcados de hoja de cálculo con la cabecera en negrita. El contraste
hacía más daño que no tener ningún formato, porque enseñaba que sí
sabíamos cómo.
El color de la pestaña dice ahora si se puede editar a mano, que
es la pregunta de soporte más frecuente que hay y no estaba escrita en
ningún sitio. Azul marino para las páginas que se leen, azul para los
datos donde vive el sistema, gris para las hojas que la app reconstruye,
gris claro para los registros a los que sólo se añade. Y cada hoja
reconstruida lleva una nota en su primera celda: "Rebuilt by Acopio
from MASTER_ARCHIVE_V3. Edits here are overwritten — change the movement
instead." Esa línea le ahorra a alguien una tarde corrigiendo un
total que vuelve solo.
Las cabeceras van en azul marino con letra blanca y la primera fila
fija. Las hojas calculadas y los registros quedan protegidos —en modo
aviso, no bloqueo, y a propósito: la app escribe en ellas con la
misma cuenta, así que un bloqueo de verdad sería una forma nueva de que
fallara de noche. El aviso frena a la persona y no frena al código.
Nada de lo que tú hayas puesto se pisa. Los anchos de columna, el
orden de las pestañas y el formato de las celdas sólo se aplican a hojas
que siguen vacías — una plantilla, o una instalación nueva. Sobre un
sistema con meses de datos, la app pone los colores, las cabeceras y las
notas y deja el resto tal como lo tengas, y dice qué hojas dejó en paz en
vez de callárselo.
Corre al crear las hojas, al preparar una plantilla maestra, y como
parte de Check this installation — así un sistema restaurado de
un backup recupera su aspecto, porque una copia trae los datos y pierde
el formato.
v12.22
Arreglo
Renombrar un material se lleva consigo todo lo suyo
Un material se identifica por su categoría y su nombre — y había
otras cinco cosas guardadas bajo ese nombre: cuántas unidades
trae una caja, su coste promedio, lo que esté apartado de él, su mínimo
y si se vigila por stock bajo. Renombrarlo, moverlo de categoría o
fusionarlo reescribía todos los movimientos y dejaba las cinco
atrás.
Eso hace dos daños, y el segundo es el peor. Queda una línea
huérfana apuntando a un material que ya no existe — que al menos se
ve. Pero el material renombrado ha perdido sus cifras en silencio.
La siguiente entrada por caja no se divide, así que el coste por unidad
sale doce veces más alto y se mezcla en el promedio de ese material de
ahí en adelante. Sin decir nada.
Las cinco se mueven ahora con el material, y lo que se movió queda
escrito en el audit log. Al fusionar dos materiales que tienen cifras
los dos, el que sobrevive conserva las suyas — el que la gente va a
seguir usando no debería quedarse en silencio con los números del que
desaparece — y lo descartado se cuenta en el registro en vez de
esfumarse.
v12.22
Arreglo
Las columnas del Dashboard dejan de moverse al filtrar
Cada filtro desplazaba la tabla entera. Medido entre categorías:
Stock empezaba 114px más allá en Window que en Shower, y Location
97px, sin cambiar más que el filtro.
No era el filtro: era el contenido. El navegador reparte el ancho
por lo que hay dentro, y lo que hay dentro cambia por completo entre
categorías: los nombres de Window son largos y los de Mirror cortos, las
ubicaciones de Shower dicen MIRRORS/SHOWERS WAREHOUSE (234) y las
de Window A3A (54). Así que cualquier filtro que cambiara la
mezcla movía la tabla.
Ahora cada columna declara su propio ancho, como hace Movements desde la
v12.11, y los anchos están medidos, no elegidos — dibujando la
tabla con los peores casos reales y tomándolos de ahí. Name se queda
elástica: es la que crece con la ventana, y absorbe los 200px que suelta
Category al filtrar por una, así que nada a su derecha se mueve.
Incoming y Project View son lo siguiente.
v12.21
Arreglo
Devolver un movimiento ya no puede romperte el stock
El almacén puede cambiar mientras un movimiento está en la papelera,
y nadie lo estaba mirando. Guardar una salida siempre se ha
rechazado cuando el material no alcanza. Devolver una desde la papelera
no pasaba por ninguna comprobación: metía la fila y ya. La misma puerta,
con cerradura en un lado y sin cerradura en el otro.
La secuencia, y no hace falta ningún fallo en borrar ni en restaurar:
sacas 37 de algo. Borras esa salida, así que vuelven los 37. Alguien
saca 37 otra vez — perfectamente legal, hay 37. Y entonces devuelves la
primera. Ahora han salido 74 de un estante que sólo recibió 37, y todas
las cifras de ese material están mal.
Y no avisó nada, lo cual tiene su propia causa. La aritmética del
stock recorta en cero —un estante no puede enseñar menos 37 ventanas—
así que el estado imposible ni siquiera se podía representar. Lo que
sobraba se iba a "dispatched", que no tiene techo. La app enseñaba un
cero tranquilo y un total inflado en silencio.
Dos arreglos, porque eran dos fallos. Devolver un movimiento pasa
ahora por la misma comprobación que guardarlo, contra los mismos
números: restaurar nunca es más permisivo que guardar. Cuando ya
no cabe, dice qué cambió y el movimiento se queda en la papelera
— no se pierde nada, y decides tú.
Y Check my data tiene un tipo de hallazgo nuevo: Less than
nothing, para cualquier material cuyos movimientos sumen por debajo
de cero. Cuenta SIN el recorte — es lo único en la app que lo hace, y
ésa es toda su razón de ser. Enseña lo que entró, lo que salió y el
número de verdad, y no ofrece ningún botón: el arreglo es o un
movimiento que sobra o uno que nunca se registró, y eso sólo lo sabe
quien conoce el almacén.
v12.20
Arreglo
Cuatro cosas pequeñas que estaban mal en silencio
El aviso que gritaba sin motivo. Pasar de Entry o Exit a Adjust
decía siempre "1 material was not carried over", incluso con el
formulario completamente vacío. Contaba la tarjeta en blanco que Entry
y Exit siempre tienen abierta, así que creía que había un material
donde no se había escrito nada. Ahora cuenta materiales, o sea los que
tienen nombre. Y sigue avisando cuando de verdad se pierde algo, que es
la mitad que importa: ese aviso existe porque una vez se perdieron
cuatro materiales al cambiar de pestaña sin que nada lo dijera.
Las listas iban en dos órdenes distintos. Categorías, proyectos
y proveedores salían por orden alfabético en Settings y por orden de
creación —lo que se escribió primero, hace meses— en el formulario de
movimientos. Dieciséis categorías en un orden que nadie puede predecir
obliga a leerlas todas para encontrar una. Ahora se ordenan una sola
vez, al llegar los datos, así que las dos listas coinciden por
construcción. Las ubicaciones se dejan como están a propósito: su orden
se coloca a mano y ese orden es justamente el valor.
Ya se puede añadir las unidades por caja sin fingir una entrada.
Corregirla ya se podía; añadirla no — la única forma era empezar una
entrada, elegir el material, poner Box y contestar la pregunta. Un dato
de catálogo escondido detrás de un movimiento. Settings → Materials
tiene ahora + Add a pack. Sólo acepta un material que ya exista,
sólo los cuatro envases que contienen cosas, y nunca un envase de uno —
y si el material ya tiene su cifra te manda a Edit, que sigue
preguntando dos veces, porque cambiar una cifra que ya existe cambia lo
que van a costar las entradas futuras.
El título de Qty / Unit va centrado. Es el único título centrado
de la tabla, y no es un capricho: en todas las demás columnas el valor
empieza donde empieza el título, así que alinearlos a la izquierda los
ata. Ésta no tiene un sitio donde empiece el valor — tiene dos mitades
que se encuentran en una costura — así que ahora el título se apoya en
la costura y deja de separarse de los números según se alargan.
v12.20
Nuevo
La papelera dice qué movimiento tiene guardado
Borras un movimiento, lo devuelves, lo vuelves a borrar — y la papelera
mostraba dos renglones que decían exactamente lo mismo: mismo material,
misma cantidad, mismo tipo, mismo estante. Sin nada que dijera si era
UN movimiento listado dos veces o DOS movimientos que se parecen. Esas
dos respuestas piden acciones opuestas, así que dejar la pregunta
abierta era el fallo.
Cada renglón lleva ahora la fecha del propio movimiento, su
PO y su ID debajo. El ID no está para leerlo: está para
compararlo, con el otro renglón o con la hoja.
v12.19
Arreglo
La cantidad vuelve a estar en su propia fila
En la v12.18 la columna nueva de Qty / Unit estaba bien a lo ancho y mal
a lo alto: la cifra flotaba por encima del centro de su fila mientras
todas las demás celdas seguían centradas. En una tabla larga eso es peor
de lo que parece — el ojo sigue una línea horizontal, y si una columna va
unos pocos píxeles arriba acabas leyendo la cantidad de la fila de
encima.
La causa estaba en la forma de unir las dos mitades. Partir una celda en
dos mitades fijas se hace con una rejilla, y la rejilla estaba puesta en
la celda misma — y eso hace que una celda de tabla deje de comportarse
como celda, y con ello se pierde el centrado que todas las demás tienen
de regalo. Ahora la rejilla vive en un envoltorio dentro de la celda,
así que la celda vuelve a ser una celda normal y el reparto no cambia.
La tabla ya tiene una comprobación permanente para esto: compara el
centro vertical de cada cantidad con otra celda de la misma fila y falla
si alguna se desvía más de tres píxeles. También comprueba que la
rejilla esté en el envoltorio y no en la celda, para que este error
exacto no pueda volver en silencio.
v12.18
Nuevo
Qty y Unit son una sola columna
Siempre fueron juntas — una cantidad sin su unidad no significa nada.
Ahora van en una columna, la cifra a la derecha y la unidad a la
izquierda, encontrándose en el mismo punto en todas las filas:
14 │ UNIT, 150 │ BOX, 243 │ BAG. La barra no se
dibuja; no hace falta.
Esa alineación sale de un reparto fijo dentro de la celda, no de dejar
que cada mitad ocupe lo suyo. Si se deja suelta, el punto de encuentro
baila de fila en fila, que es justo lo que hace ilegible una columna de
números. Las dos mitades están medidas: la cantidad más larga y la
unidad más larga del vocabulario de la app.
Y tapa un agujero que nadie había visto. Qty no se podía
esconder, pero Unit sí — así que se podía acabar con una tabla que
decía +25 sin decir veinticinco de qué. Unidas, la unidad ya no
se puede perder. Y el par tampoco se puede esconder ni mover: el tipo,
el material y la cantidad son lo que un movimiento es.
Si tenías Unit en otro sitio de tu propio orden de columnas, no se
rompe nada — el orden guardado se traduce, y todo lo que no está
bloqueado conserva el sitio que le diste.
v12.17
Arreglado
El filtro de estado conoce los cuatro — y uno de los dos que tenía estaba mal
Un material puede estar en cuatro estados, y la insignia de cada fila
siempre lo ha dicho: In Stock, Reserved,
All at Site, Zero Stock. El filtro ofrecía dos. Los dos
que faltaban ya están.
Y la mitad más seria, que desde fuera no se veía. "In Stock
only" no significaba lo mismo que la insignia verde: filtraba por "hay
algo en el estante", que incluye el material que está en el estante
pero apartado — material que no te puedes llevar. Así que quien
filtraba para ver qué podía sacar, veía cosas que no podía sacar. Ése
es el error que hace caminar hasta el estante para nada.
Los tres tenían la misma causa: la insignia se decidía en un sitio y el
filtro hacía su propia cuenta en otro. Dos listas que tenían que decir
lo mismo, sin nada que lo obligara. Ahora hay una sola — la insignia
sale de ella, el desplegable se dibuja de ella, y el filtro compara
contra ella. Añadir un quinto estado es añadir una línea; no hay una
segunda copia que recordar.
v12.16
Arreglado
Una cantidad de tres cifras ya no se parte en dos
−300 se dibujaba como −30 con un 0 solo debajo,
justo al lado de un −200 que cabía perfectamente. Las mismas
cifras, distinto resultado.
La columna no era estrecha: el relleno era ancho. 58 píxeles menos 12
por lado dejan 34 para la cifra, y una cantidad de cuatro caracteres
necesita 37. Con 4 por lado en vez de 12 quedan 50, y entra todo hasta
cuatro cifras con sitio de sobra. Las de cinco bajan un punto de
tamaño, que es la misma escalera que ya usa la tira de reservas:
achicar sólo cuando hace falta y sólo lo que haga falta.
Y el motivo de que una entrara y otra no: en una letra normal el
0 y el 2 son más estrechos que el 3 y el 6,
así que las mismas tres cifras pueden medir distinto. Las cantidades
usan ahora cifras de ancho fijo, lo que además deja la columna alineada
por unidades, decenas y centenas — en una columna de números eso no es
adorno: es lo que permite compararlos sin leerlos.
Y van alineadas a la derecha, que es como se leen los números y como
quedarán cuando Qty y Unit se junten en una sola columna.
v12.15
Arreglado
El cuadro de etiquetas respeta las casillas que marcaste
Marcabas 🏷 Label en dos de los diez materiales de una entrada y
el cuadro se abría con los diez marcados igual — salvo que hubieras
marcado al menos uno, y entonces sí respetaba tu elección. O sea que la
única respuesta que ignoraba era "ninguna", que es justo la que más
merece respetarse. Preguntar algo y después hacer lo que uno quiere
enseña a no leer la pregunta.
Ahora las marcas son exactamente las que hiciste. Todos los materiales
siguen apareciendo en la lista, por si cambias de idea. Y si no marcaste
ninguna, el cuadro no se abre: sigues con lo tuyo. No se pierde
nada por olvidarse: seleccionas cualquier movimiento en
Movements, pulsas Labels y reimprimes lo que quieras,
cuando quieras.
El contador de tarjetas deja de prometer nueve y enseñar cinco
La insignia del mazo de la esquina contaba todo lo que había esperando,
mientras que el mazo sólo llega a tener un puñado de tarjetas —pintarlas
todas hacía una escalera que se salía por arriba de la pantalla—. Las
dos mitades decían la verdad y juntas mentían: el número prometía nueve
cosas que atender sin forma de ver ni de alcanzar las otras cuatro.
Ahora la insignia dice las dos cosas: 5/9, y al pasar el ratón
explica que al resolver una entra la siguiente. Cuando todo cabe sigue
diciendo el total a secas, como antes. Cuántas tarjetas se dibujan no
cambia: la escalera era un problema de verdad y esto no lo reabre.
v12.14
Arreglado
El trabajo nocturno ya no puede borrar tu historial de movimientos
La noche del 26 de septiembre de 2026, el trabajo de archivado de las
3am vació un historial de movimientos entero — todas las filas, tanto
del archivo activo como del histórico antiguo. Se descubrió catorce
horas después, por casualidad. La copia de seguridad diaria se hace a
las 2am, una hora antes que este trabajo, y lo tenía todo: no se perdió
nada. Esa hora de diferencia es la única razón.
Qué pasó. El trabajo borraba la hoja y después escribía las filas
de vuelta. La escritura falló —la hoja tenía 20 columnas de ancho y una
fila de movimiento tiene 23— y para entonces el borrado ya había
ocurrido. Una hoja creada antes de que existieran las columnas de costo
es el caso NORMAL en una actualización, no el raro, y había un ayudante
escrito hace meses para exactamente esto al que aquí no se llamaba.
Cambiaron tres cosas, porque eran tres fallos y no uno. Las hojas
se ensanchan antes de tocar nada. El trabajo ahora escribe primero y
limpia después, así que un fallo a mitad deja las filas donde
estaban — y eso habría importado igual con el ancho bien, porque una
cuota agotada o un tiempo de espera entre esas dos líneas tenían el
mismo efecto. Y se escribe antes la hoja que GANA filas que la que las
pierde, de modo que lo peor que puede pasar es un duplicado que se ve,
en vez de un agujero que no.
Ahora dos cuentas tienen que coincidir antes de escribir una sola
celda. Este trabajo sólo mueve filas entre dos hojas, así que el
total tiene que ser idéntico antes y después. Si no lo es, no se escribe
nada en absoluto. Una segunda cuenta se hace al terminar, contra las
hojas mismas, porque "la aritmética está bien" y "la escritura llegó"
son preguntas distintas y la segunda no era tarea de nadie.
Y ahora avisa. El fallo se escribió en una pestaña de registro
que nadie mira, y la app siguió diciendo "No movements match your
filters" — la misma frase que dice cuando un filtro no encuentra nada.
El trabajo manda ahora un correo al admin cuando falla o cuando las
cuentas no cuadran, y la app se niega a callar: tener existencias en los
estantes y cero movimientos registrados es imposible, y ahora lo dice
con todas las letras en vez de enseñar una tabla vacía.
v12.13
Arreglado
El botón del ojo del editor de columnas se puede volver a pulsar
Abrías ⚙ Columns y el botón para esconder una columna no
aparecía en las estrechas, o quedaba debajo de la cabecera de al lado.
Y era literal: una cabecera en edición lleva asa, campo de nombre y
ojo, y en Qty o Unit todo eso vivía en 58 píxeles. El ojo
no se envolvía: se salía y la celda vecina lo tapaba. El mando para
esconder una columna era invisible justo en las columnas que más ganas
dan de esconder.
Ahora, mientras el panel está abierto, las cabeceras miden lo que miden
sus mandos y no lo que mide su dato. La tabla se ensancha y se desplaza
de lado mientras dure, que es el cambio correcto: un botón que no se
puede pulsar es peor que una barra.
Y medirlo destapó algo que leyendo el código no se ve: una columna
escondida dibuja 🚫 en vez de 👁, y 🚫 es dos píxeles más ancho. Con el
primer valor que probamos, las cinco columnas que vienen escondidas se
salían por un píxel y las otras once estaban bien — o sea que probar
con una columna cualquiera habría dado verde.
Type, Name y Qty se quedan donde están
Esas tres llevan candado en el editor de columnas, y el candado sólo
quería decir "no se puede esconder". Seguían teniendo asa, y arrastrarlas
funcionaba de verdad — así que parecían movibles porque lo eran.
Un movimiento sin tipo, sin material o sin cantidad no es una fila que
diga nada, así que ahora son fijas de verdad: sin asa, no se les puede
soltar nada encima, con la cabecera más oscura para que se lean como un
bloque, y el candado explica por qué en vez de sólo decir que lo está.
Lo que cuesta, dicho claro: el nombre del material ya no se puede poner
delante del tipo y la fecha. Antes se podía y puede que alguien lo
tuviera así; su orden guardado se corrige solo en el siguiente dibujado.
Todas las columnas que no llevan candado conservan el orden que su dueño
les dio.
v12.12
Arreglado
Enseñar una columna más ya no deja el nombre del material sin sitio
Enseñabas una columna de más en Movements —Supplier, por
ejemplo— y el nombre del material se quedaba sin apenas ancho: se
dibujaba una letra por renglón y las filas pasaban de 83 píxeles de
alto a 428. Bastaba con enseñar UNA columna, y estaba ahí desde que las
columnas tienen ancho fijo.
La culpa era de un número escrito a mano. La tabla tenía un mínimo de
1.300 píxeles, pero los anchos de las dieciséis columnas suman 1.748.
Un número escrito en la hoja de estilos no puede saber cuántas columnas
has decidido ver, y eso lo elige cada persona con el ojo de
⚙ Columns. Con Supplier enseñada, los anchos declarados sumaban
1.296 y al material le quedaban cuatro píxeles.
Ahora el ancho de cada columna vive al lado de la columna, y no en un
bloque de estilos aparte, y la tabla calcula su propio mínimo cada vez
que se dibuja: los anchos que de verdad están en pantalla, más un suelo
para el nombre del material. El suelo también está medido — 192
píxeles, que es lo que necesita la insignia de categoría más larga para
no salirse de su celda. Por debajo de eso la tabla se desplaza de lado,
que es lo correcto: dieciséis columnas no caben en una pantalla
estrecha, y una barra es mejor que un texto que no se puede leer.
Una comprobación mide ahora el ancho del material con dos tamaños de
ventana, en cuatro combinaciones de columnas y por los dos caminos que
dibujan la cabecera. Devolver el número fijo la hace fallar diecisiete
veces.
v12.11
Arreglado
La tabla de movimientos deja de saltar al cambiar el filtro
Elegías otra categoría y todas las columnas se corrían de lado. La
columna Project empezaba a 476 píxeles del borde con un filtro,
a 1.318 con otro y a 415 con un tercero — la misma columna, casi 900
píxeles de diferencia, porque la tabla se repartía el ancho según las
filas que hubiera debajo. Así no se puede aprender dónde mirar.
Ahora cada columna tiene su ancho y lo conserva, filtres lo que
filtres. Una sola queda elástica —el nombre del material, que es el que
más varía y el que se lee— y es la que se queda con el hueco cuando
escondes o enseñas otra columna. Lo demás no se mueve nada.
Los anchos están medidos, no elegidos a ojo: se dibujó la tabla con
datos reales de almacén bajo siete filtros distintos y a cada columna
se le dio el ancho que de verdad alcanzaba. Dos se quedaron cortas a la
primera y se corrigieron — la insignia de TRANSFER y el correo
más largo se salían. Una comprobación vuelve a medir cada columna con
cada filtro y falla si una sola se mueve un píxel.
v12.10
Arreglado
La tira de reservas dice hacia dónde se abre
La lista de reservas del mapa decía click to hide incluso cuando
ya estaba escondida — o sea que la única pista de lo que iba a hacer el
clic se equivocaba la mitad de las veces. Ahora dice click to
show cuando está plegada y click to hide cuando está
abierta.
Y ya que estábamos, se reordenó el título: los tres números van
seguidos —441 units · 8 reservations · in 8 racks— en vez de
partidos por una frase, y esa frase se mudó a la i pequeña que
va al lado. Es algo que se lee una vez en la vida y ocupaba media línea
todos los días. Lo que sigue a la vista es lo único sobre lo que se
puede actuar: cuántas reservas no están reteniendo nada.
v12.09
Arreglado
Cada ventana mide ahora lo que lleva dentro
Todas las ventanas de la app medían lo mismo —el 82% de tu pantalla—
llevaran cuatro campos o veinte. Una corta, como Add User, dejaba un
hueco enorme debajo del último campo. Una larga, como Edit Movement,
había que desplazarla incluso en una pantalla grande, porque el límite
no tenía nada que ver con el contenido.
Las dos cosas las causaba una sola línea, escrita así a propósito para
que todas las ventanas fueran iguales. La regla ahora es la que de
verdad sirve: una ventana mide lo que mide su contenido, y nunca más
que tu pantalla. Add User pasó de 700 píxeles a 277. Edit Movement
se abre entero, sin desplazar, en una pantalla normal.
Y Edit Movement es ahora tan ancha como la ventana donde se creó el
movimiento — era 120 píxeles más estrecha, y por eso los mismos campos
se apilaban más alto y había que desplazarlos. Una comprobación abre
ahora todas las ventanas de la app y las mide contra su propio
contenido, así que ninguna puede volver en silencio a ocupar la
pantalla porque sí.
v12.08
Arreglado
El menú de tu cuenta se abre delante, y la app de atrás se queda
quieta
En una pantalla ancha y baja —una tableta apaisada— abrir el menú de la
cuenta lo ponía detrás de las tarjetas de avisos de la esquina. Y
las tarjetas seguían vivas debajo: pasar el ratón por encima abría el
mazo, y la página de atrás se movía.
Las tres están arregladas, y ahora son una sola cosa: un menú que
abriste tú tiene prioridad sobre cualquier cosa que aparezca sola. Lo
que no tiene es prioridad sobre una ventana que también abriste tú —un
formulario a medio llenar te lo sigue tapando, que es el orden
correcto.
Y por debajo, todas las capas flotantes de la app —las tarjetas, la
campana, el cajón del estante, las ventanas, las confirmaciones, la
vista de documentos, los avisos— toman su sitio de una sola lista
ordenada en vez de llevar cada una su número. Eso es lo que hacía
este fallo difícil de ver: el menú declaraba un número más alto que el
de las tarjetas y aun así perdía, porque un número así sólo compite
dentro de su propio grupo. Ahora una comprobación mide cuál está
delante de verdad, en vez de comparar los números.
v12.07
Privacidad
El aviso de instalación manda exactamente lo que dice la Política de
Privacidad
El aviso de instalación es lo único que tu instalación manda sin que se
lo pidas: si a los tres y a los siete días no se ha registrado ningún
movimiento, escribe a tu dirección de soporte para que alguien te
contacte en vez de dejarte abandonar en silencio. Nuestra Política de
Privacidad lo describe campo por campo y promete exactamente cuatro
cosas —el nombre de tu empresa, el correo de tu administrador, cuántos
usuarios hay registrados y cuántos días han pasado— y nada más.
Mandaba una quinta: un enlace a tu instalación. Nada salió de tu
control que no debiera —ese correo va únicamente a la dirección de
soporte configurada en tu propia instalación—, pero la promesa era más
estrecha que el código, y la promesa es la promesa. El enlace se quitó.
Cuatro cosas, como está escrito.
Y ahora corre en cada versión una comprobación que lee el correo que el
código produce de verdad y falla si lleva algo que la política no
enumera. Las dos que había no podían ver esto: una compara las dos
copias del texto legal entre sí, y la otra comprueba cuándo se manda y
cuántas veces. Ninguna miraba dentro.
v12.06
Nuevo
Incoming: un buscador, y un aviso antes de anotar la misma entrega dos
veces
Las entregas esperadas eran la única lista larga de la app sin
buscador. Ya lo tiene, en el mismo sitio y funcionando igual que el de
Movements: escribes y la lista se estrecha. Mira en el nombre, el
número de PO, el proveedor, el PM y las notas.
Y antes de guardar una entrega, la app comprueba si ya está en la
lista. Manda el número de PO: un proveedor emite un PO nuevo por
cada pedido nuevo, así que el mismo material con el mismo PO dos veces
es casi siempre la misma entrega anotada dos veces — y dos PO distintos
son dos pedidos de verdad, cosa que la app ya sabe y de la que no se
queja. Cuando no hay PO que comparar, se apoya en el mismo material,
del mismo proveedor, a menos de una semana de la misma fecha, y lo dice
con menos seguridad.
El aviso enseña las dos entregas una al lado de la otra, campo a campo,
con lo que difiere marcado — así la comparación ES la revisión, en vez
de mandarte a buscar la otra. Desde ahí puedes abrir la que ya existe y
editarla (no se crea una segunda), decidir que de verdad son distintas
y crearla igual, o cancelar. El mismo material de dos proveedores
distintos no se marca nunca: son dos entregas de verdad.
Debajo de las dos cosas: los nombres del Incoming se regularizan ahora
como siempre se han regularizado los de un movimiento —mayúsculas y
espacios de sobra colapsados—. Las entregas que ya estaban se quedan
como se teclearon hasta que las edites, y tanto el buscador como el
aviso comparan sin importar mayúsculas, así que no se escapa
ninguna.
v12.05
Arreglado
Reservas: una lista que se pliega, columnas que no se mueven, y forma
de soltar las que no retienen nada
La lista de reservas del mapa ahora empieza plegada. El título sigue
diciendo lo que se lee de un vistazo —cuántas unidades hay retenidas,
en cuántos estantes, cuántas no retienen nada— y la lista se abre al
hacer clic. Con cien reservas, ese título es justamente lo que
importa. Si la dejas abierta o cerrada, se recuerda.
Sus columnas ya no bailan. Cada una tiene un ancho fijo, así que añadir
una reserva con un nombre más largo no mueve de lado a todas las demás
filas. Lo que no cabe baja uno o dos tamaños y, si aún no cabe, pasa a
una segunda línea — nunca se corta con puntos suspensivos, porque el
final de un nombre de estante es donde están la letra y el número que
lo distinguen.
Y una reserva que no retiene nada ya se puede soltar. Hasta ahora el
único botón de soltar vivía dentro del cajón de un estante, en la fila
del material — y una reserva que no retiene nada no tiene fila ahí, así
que la app te avisaba del problema y no te daba forma de arreglarlo.
Ahora cada fila de la lista tiene su propio Release, y cuando
varias no retienen nada el título ofrece soltarlas todas de golpe,
nombrándolas antes una por una. Soltarlas no cambia ninguna cantidad;
sólo ordena la lista.
v12.04
Nuevo
Etiquetas: sólo las que quieres, una por pieza, y se imprimen después
Recibir diez materiales abría diez previsualizaciones de etiqueta,
quisieras etiquetas o no. Ahora cada línea de material de una entrada
tiene su propia casilla 🏷 Label. Marcas las que quieres y sólo
salen ésas. Si no marcas ninguna no cambia nada respecto a antes: se
ofrecen todas, como siempre.
Cinco door screens que van al mismo estante son cinco piezas, no un
paquete de cinco. Cualquier fila con más de una unidad ofrece ahora
una etiqueta por unidad: cinco etiquetas que dicen cantidad 1 y
1 of 5, 2 of 5, para que cada pieza lleve su propia
etiqueta vaya donde vaya. La casilla de ×N copias sigue funcionando
encima de eso.
Y las etiquetas ya no están atadas al momento de recibir. Selecciona
los movimientos que quieras en la tabla y pulsa 🏷 Labels para
volver a imprimirlos — con la fecha de ese movimiento, no la de hoy,
así que la etiqueta de algo que llegó el martes sigue diciendo
martes.
La etiqueta en sí se reordenó: la locación arriba, la cantidad debajo,
cada una a todo el ancho y con su rótulo sobre el valor. Los nombres
cortos como B1B o P4C tienen exactamente el tamaño que tenían. Los
largos —WINDOW WAREHOUSE— se partían en dos líneas; ahora bajan lo
justo para caber en una.
v12.03
Arreglado
El reporte de la tarde está en inglés, y dice quién hizo qué
El correo de la tarde salía en español. No era una configuración de
tu bandeja — la app estaba escrita así, y llevaba meses en el único
sitio donde nadie mira: un reporte que se manda solo a las ocho de la
tarde. Ya está en inglés, y en cada versión corre una comprobación que
falla si algún texto que la app muestra o envía no lo está.
La columna "Quién" contestaba dos preguntas distintas según la fila:
normalmente la persona que recibió o se llevó el material, pero si ese
campo estaba vacío enseñaba en su lugar el correo de quien registró el
movimiento — otra persona. Ahora son dos columnas.
Received by / Taken by es la persona de la bodega, y si no
hay dato lo dice en vez de adivinar. User es quien lo registró,
con su nombre sobre su correo.
Y el número junto a cada título ahora dice qué cuenta: "3 movements" en
vez de "(3)".
v12.02
Arreglado
Un cero se dibujaba como un hueco
Una cantidad de cero salía como un espacio vacío en vez de un 0 —en
cualquier sitio de la app que escribiera un número: el contenido de un
estante, las tarjetas de llegada, el indicador de espacio. Un hueco
parece un dato que se perdió; un 0 es una respuesta.
Jose lo encontró en una reserva que no retenía nada. Eso es una
situación real —el material salió del estante, o se borraron sus
movimientos— y ahora la app lo dice con palabras en vez de dejar el
hueco, te dice dónde está el material si sigue en alguna parte, y avisa
de que esa reserva se puede soltar. Soltarla no cambia ningún número;
sólo ordena la lista.
v12.01
Arreglado
Bloquear un material ahora se llama reservarlo
La app tenía dos medias funciones que significaban lo mismo.
"Bloquear un material" funcionaba —retiene material en un estante para
que no salga de la bodega— pero se llamaba bloquear. Las "reservas"
tenían el nombre bueno y ninguna forma de crear una: la pantalla nunca
existió, y por eso el Reserved del tablero siempre decía cero.
Ahora son una sola cosa y se llama reservar. Nada de lo tuyo cambia: lo
que bloqueaste es lo que está reservado. La diferencia es que el tablero
por fin lo enseña, y puedes ver todas las reservas de la bodega desde
tres sitios — una tarjeta en el Stock Dashboard, una tira sobre el
Warehouse Map que te lleva al estante, y una marca en cada ubicación en
Settings.
Una reserva retiene lo que haya en ese estante, así que la cifra se
mueve con el stock sola. Y la comprobación que impide sacar material
reservado ya estaba escrita — simplemente nunca había tenido nada que
contar.
v12.00
Arreglado
La pantalla cambia en cuanto se guarda
Marcar una entrega como llegada tardaba unos once segundos en verse,
mucho después de que el guardado ya hubiera pasado. Había dos cosas mal
en la misma línea: nada actualizaba la copia de la que dibuja la
pantalla, y el refresco que venía después leía del caché — así que
pintaba la respuesta vieja por segunda vez y sólo se corregía cuando
terminaba una recarga completa.
Ahora la pantalla cambia en el momento en que el guardado llega. No se
dibuja nada antes de que el servidor lo acepte; se dibuja justo cuando
lo hace. El mismo arreglo cubre adjuntar un documento a un movimiento y
editar los datos de un movimiento. Una excepción que conviene saber: al
editar una cantidad, la fila cambia al instante, pero el total del
material sigue esperando el refresco — eso sólo lo puede calcular el
servidor.
v11.99
Arreglado
El mazo de la esquina cuenta lo que tiene, y abre por la más nueva
La insignia del mazo contaba dos de las tres clases de tarjeta que
lleva. Las entregas que llegaron sin registrar su entrada quedaban
fuera, así que la insignia podía decir 4 con seis tarjetas debajo — y
no coincidía con la campana de arriba, que sí las contaba desde el
principio.
El mazo también abría por arriba, enseñando la más vieja, cuando la más
nueva va abajo. Ahora abre por abajo y se queda ahí mientras se
despliega. Si subes con la rueda, te suelta: leer las viejas es
justamente para lo que está la barra.
v11.98
Nuevo
Manage Users funciona como la tabla de movimientos
De siete columnas a cuatro: el nombre va sobre el correo, y el rol
sobre la fecha en que se añadió. El formulario de Add User ya no ocupa
la parte de arriba — es un botón que lo abre cuando hace falta.
Editar y Desactivar salieron de las filas y están en una barra, y se
encienden al marcar a alguien. Editar necesita exactamente uno;
desactivar funciona con varios a la vez. Tu propia fila no se puede
marcar, que es la misma regla que el servidor ya aplicaba, dicha antes
de pulsar en vez de después.
Y ahora se puede devolver el acceso desde la app. Hasta ahora la
ventana te mandaba a editar la hoja de cálculo a mano; el botón dice
Reactivate cuando todo lo marcado está inactivo, y se apaga con una
mezcla en vez de adivinar qué mitad querías.
v11.98
Nuevo
Dos cosas más pequeñas
El muro de tarjetas naranjas se detiene a dos tercios de la ventana en
vez de crecer por encima de lo que estabas mirando. Si hay más tarjetas
de las que caben, la pila se desplaza dentro de su hueco — no se
esconde ninguna.
Y en el mapa del almacén, al tocar un material de un estante su nombre
aparece en la cabecera mientras sus opciones están abiertas. En el
teléfono el dedo tapa la fila, y la cabecera era lo único que quedaba
para saber sobre qué vas a pulsar Exit.
v11.97
Arreglado
El último movimiento de una tanda llega a la otra cuenta
Al borrar trece movimientos desde una cuenta, el último no desaparecía
nunca de la otra. No lento — nunca. Se quedaba en pantalla todo el
tiempo que uno quisiera esperar.
La app le pregunta al servidor "¿ha cambiado algo?" comparando un
sello. La carga que trae los datos leía los movimientos primero y ese
sello al final, así que un borrado que cayera entre las dos lecturas
dejaba al navegador con la lista vieja y el sello nuevo. A partir de
ahí cada comprobación decía "no ha cambiado nada" y no volvía a
preguntar.
Ahora el sello se lee antes que los datos. Cuando ocurre la misma
carrera, al navegador le queda el sello viejo, nota la diferencia en su
siguiente comprobación y vuelve a pedir. Cuesta una consulta de más; lo
que evita es una pantalla equivocada para siempre.
v11.96
Arreglado
Borrar varios a la vez deja de ser lento
Una versión anterior hizo que una tanda de cambios reconstruyera las
tablas de existencias dos veces en vez de una por cambio. Funcionaba —
para los guardados. Los borrados tienen su propia cola desde hace
tiempo y nunca pasaron por ese código, así que borrar trece movimientos
seguía pagando trece reconstrucciones enteras.
Cronometrado sobre una grabación: tres hechos en 1:20, seis en 2:00,
diez en 2:40. Unos doce segundos cada uno. Eso es también la mayor
parte de lo que parecía "la otra cuenta tarda en actualizarse" — la
otra ventana no puede enseñar la verdad hasta que el trabajo termine, y
el trabajo tardaba dos minutos y medio.
Trece borrados cuestan ahora dos reconstrucciones. Dos y no una, y vale
la pena decir por qué: la primera no puede esperar, porque cuando sale
los otros doce todavía no se han encolado, y la última refresca sola
porque detrás de ella ya no viene nadie.
v11.95
Arreglado
Los checks dejan de borrarse solos
Marcando varios movimientos para borrarlos, a veces desaparecían todos
los checks de golpe. La tabla se plegaba a su primera página cada vez
que llegaban datos nuevos —que trabajando entre dos es cada veinte
segundos— así que lo marcado más allá de la primera página dejaba de
dibujarse.
La mitad que no se veía era la que había que arreglar: la selección sí
sobrevivía, así que Delete seguía armado sobre filas que ya no estaban
en pantalla. Marcar ocho, ver cero y que borrar se lleve ocho es peor
que perder la selección, porque perderla al menos se nota.
Los datos nuevos ya no cambian la página en la que estás — eso sigue
pasando al cambiar de pantalla o de filtro, donde significa algo. Y la
regla ahora es simple: lo marcado es lo que se ve. Una fila que sale de
la vista, por lo que sea, se lleva su marca con ella.
v11.95
Nuevo
La tarjeta del nombre siempre mide lo mismo
Al pasar el ratón por un nombre en la columna User se abría una tarjeta
cuyo ancho seguía al largo del correo — y como una tarjeta más ancha
tiene que apartarse más para no salirse de la ventana, además aparecía
en un sitio distinto cada vez. Una sola causa para las dos quejas.
Ahora es de ancho fijo, con el nombre y el correo en una línea. Lo que
no cabe se acorta y se puede leer entero pasando el ratón por encima.
v11.94
Nuevo
Todo lo que desaparece se ve desaparecer
Un movimiento borrado se encoge y se va en vez de parpadear desde hace
varias versiones, y lo mismo uno devuelto desde la papelera. En todos
los demás sitios la fila seguía desapareciendo de un fotograma al
siguiente, que se lee como una falla y no como algo que pasó.
Ahora hace lo mismo al vaciar la papelera, al fusionar ubicaciones,
valores del catálogo, duplicados o materiales, al borrar una ubicación
y al quitar un valor del catálogo o un contacto. En una fusión se ve
exactamente cuáles se fueron, que era la parte difícil de seguir cuando
se van tres de golpe.
A quien tenga el sistema puesto en "menos movimiento" no le llega nada
de esto, y el trabajo se hace igual, al instante.
v11.93
Nuevo
Los avisos que se quedaron ahora duran menos
Diez avisos confirman algo que acabas de pulsar tú mismo — guardar un
movimiento, editarlo, borrar una entrega esperada, cargar el historial
viejo. Ésos se quedan, porque la confirmación sirve, pero ahora se van
en dos segundos en vez de tres y medio. Bastante para leer cinco
palabras; poco para que tres seguidos se apilen sobre la tabla.
Todo lo demás conserva su tiempo. Los errores y las advertencias hay
que leerlos. Y también los dos avisos que parecen confirmaciones y no
lo son: el que dice qué falta después de empezar una entrada desde una
entrega, y el que explica por qué un ajuste de conteo no cambió
nada.
v11.92
Nuevo
Menos avisos, y una línea de progreso donde se amontonaban
Se quitaron diez avisos del todo — fusionar cosas, guardar los datos de
la empresa, añadir o quitar un contacto, renombrar columnas. En todos
ésos la pantalla ya enseña el resultado en el momento, así que el aviso
repetía algo que estabas mirando.
Otros cinco pasaron a la línea de progreso: vaciar la papelera,
importar un archivo, subir la foto de un estante, añadir varios
proveedores o proyectos de golpe, y marcar varias entregas como
llegadas. Son los que tardan o se repiten, y ahora la línea gira
mientras trabajan en vez de dejar la pantalla quieta hasta el final.
Dos que estaban en la lista de quitar se quedaron, y vale la pena decir
por qué: guardar el mapa del almacén ya no dice "guardado", pero sigue
nombrando la ubicación que se haya borrado — que es lo único
de esa pantalla que no se deshace arrastrando de vuelta. Y un estante
que se queda vacío sigue avisando, porque el cajón se cierra solo, y
cerrarse sin decir nada parece una avería.
Los errores y las advertencias no se tocaron. Ésos hay que leerlos.
v11.92
Nuevo
El botón de Email abre Gmail
Antes se lo pasaba a la app de correo que tenga configurada la
computadora. Eso es una configuración por computadora, y un clic en
"Always" deja el botón atascado en una app que no usas, sin forma de
volver atrás desde la app.
Ahora abre un correo nuevo de Gmail con la persona ya puesta — igual
que los botones de Meet y Schedule que tiene al lado, que ya iban
directo a Google. Y si tu app de escritorio está unida a Gmail, el
correo llega a la misma bandeja.
v11.91
Nuevo
Devolver movimientos también los cuenta
Restaurar cinco movimientos de la papelera daba cinco avisos sobre la
ventana de Ajustes que estabas usando — y las filas ya se iban solas de
la lista, así que los avisos no contaban nada que no se viera.
Ahora los cuenta la misma línea de progreso, y al final dice cuántos
volvieron. Además se movió a la izquierda, donde antes tapaba las
tarjetas en pantalla ancha, se queda seis segundos en vez de menos de
tres, y se cierra con un clic.
v11.90
Arreglado
Las filas borradas dejan de volver
Borrar varios movimientos a la vez se veía mal, y en un caso estaba
mal. Las filas se iban de la pantalla enseguida, como toca. Y unos
segundos después volvían —una por una, en gris, a irse otra vez—.
Algunas volvían sin gris siquiera, y se podían seleccionar y borrar una
segunda vez, que entonces fallaba con "ya está borrado".
Nunca se borró nada dos veces: la app reconoce cada movimiento por su
nombre propio y rechaza el segundo intento, diciendo quién lo borró y
cuándo. Pero la pantalla estaba enseñando filas que ya no existían, y
eso también está mal.
La causa era un refresco que llegaba a mitad de la tanda con una foto
del almacén tomada antes de que la tanda terminara. Un refresco ya no
pinta mientras quede un borrado en el aire.
v11.90
Nuevo
Una línea de progreso en vez de una pila de avisos
Borrar trece movimientos ponía trece avisos en pantalla, uno encima de
otro, sobre la misma tabla que estabas mirando — y ninguno decía lo
único que interesa saber mientras esperas: cuánto falta.
Ahora una sola línea en la esquina los va contando —"4 of 13"— y termina
en un check verde. Un borrado que falla sigue teniendo su aviso aparte,
porque ése hay que leerlo.
v11.89
Arreglado
Una tanda de cambios deja de reconstruirlo todo, cada vez
Después de cada cambio —borrar un movimiento, aplicar un arreglo de
"Check my data", fusionar dos cosas— la app reconstruía sus tablas de
existencias desde cero. Eso son unos nueve viajes a la hoja de cálculo,
y hacer diez cambios seguidos lo pagaba diez veces: unos cuarenta
segundos de trabajo que sólo necesitaba unos pocos.
Ahora una tanda reconstruye dos veces en vez de diez — una al principio,
porque todavía no hay nada detrás, y otra al final. Un cambio suelto se
comporta exactamente igual que antes.
Esto no puede hacer que se saque material que ya no está: si alcanza o
no para una salida se comprueba contra el historial de movimientos, no
contra las tablas que se aplazan. Y si una tanda se corta —se cierra la
ventana, se cae la conexión—, la siguiente persona que abra la app pone
las tablas al día antes de enseñar ningún número.
v11.88
Más seguro
Las comprobaciones dejan de romperse por cosas que no son fallos
No cambia nada de la app. Esto es sobre las comprobaciones que corren
antes de que algo te llegue.
Seis veces en una semana se pusieron rojas sin que nada estuviera mal:
cada comprobación llevaba su propia lista, escrita a mano, de qué
piezas de la app necesitaba, y esas listas se quedaban viejas cada vez
que una pieza crecía una dependencia nueva. Ahora las deducen del
código. Una comprobación que se pone roja sola enseña a dejar de
leerlas, y el día que una roja es de verdad recibe el mismo encogimiento
de hombros.
v11.87
Arreglado
La comilla otra vez — ahora al editar
La versión anterior arregló guardar un movimiento. Editar uno seguía
metiendo una comilla, y sólo en los campos que de verdad cambiabas —
por eso crear una entrada se veía bien y editarla no.
Aquí importa más que en el otro camino: cuando cambia la categoría o el
nombre, la identidad del material se recompone a partir de ellos, así
que una comilla ahí habría hecho que la fila dejara de coincidir con su
propio material.
Tercera vez que el mismo fallo sale por otra puerta, así que deja de
buscarse a mano: ahora lo cuenta una comprobación. La regla que exige
cabe en una línea — una función que escribe la fila con el guardián de
texto no cita además sus propios valores. Se cita una vez, en el
borde.
v11.86
Arreglado
Una comilla delante de todo lo guardado
Los movimientos guardados con la versión anterior metían una comilla
delante de cada texto — 'WINDOW, 'UNIT,
'16598. Se estaban aplicando dos protecciones donde hacía
falta una, y la hoja de cálculo se quedaba la segunda DENTRO del
dato.
Y no era sólo feo: la identidad de un material se compone de su
categoría y su nombre, así que una fila guardada así no coincidía con
el mismo material guardado antes, y sus existencias se habrían partido
en dos. El guardado está corregido, y la prueba que existe para esto
ahora ejecuta el guardado de punta a punta en vez de leer el código —
que es justamente por lo que lo había dejado pasar.
Además: la ventana de salida ya no se abre sólo para decir que no.
Elegir un material trabado contesta con el motivo ANTES del
formulario, en vez de abrirlo y enseñar "locked" en letra pequeña. Y el
proveedor en la tarjeta de entrega es ahora una insignia, de un solo
color para todos, en vez de texto detrás de un guion.
v11.85
Más seguro
Dos personas a la vez ya no pueden pisarse las entregas
Editar una entrega esperada y borrar otra no estaban coordinadas. Si
alguien borraba una entrega mientras vos tenías otra abierta, tu
guardado podía caer sobre una entrega distinta de la que editaste — y
el compañero cuya entrega quedó pisada no se enteraba nunca.
Las tres acciones de entregas esperadas se turnan ahora como toca, y
las pantallas esperan su turno y reintentan en vez de mostrar un error.
La misma lección se aplicó a los movimientos en septiembre; aquí es
donde no se había conectado.
Aparte: quitar un usuario por el camino de administración viejo borraba
una fila entera de la hoja de ajustes —donde cada columna es una lista
distinta— así que podía llevarse un proyecto, una categoría, un
proveedor y una locación por delante. Ningún botón de la app llega a
ese camino, así que nunca pasó; ahora vacía sólo las dos celdas del
usuario.
v11.84
Arreglado
Los mensajes de error no enseñan el cableado de la app
Cuando algo falla, el servidor a veces marca el mensaje para que la app
lo lea — texto como SYSTEM_BUSY| delante de la frase de
verdad. Casi todas las pantallas quitaban esa marca antes de
enseñarlo. Seis no, incluido el formulario de entrada, cuyo gemelo el
de salida sí lo hacía.
Ninguna podía enseñarlo todavía —las acciones que llaman esas
pantallas no producen hoy errores marcados— pero la trampa era el
desajuste, no el síntoma. Los quince mensajes de error pasan ahora por
el mismo filtro, y uno nuevo escrito sin él rompe las comprobaciones a
propósito, para que la decisión se tome mientras alguien mira.
v11.83
Más seguro
El fallo de las entradas duplicadas ya tiene una prueba que lo habría cazado
En septiembre una tarjeta de entrega podía saldarse y volver, dejando
guardar el mismo movimiento una y otra vez. Se arregló en la v11.70 —
pero había una prueba pasando por encima de ese fallo todo el tiempo,
porque comprobaba que el arreglo estuviera ESCRITO, no que se
EJECUTARA.
Ahora ese camino de guardado se ejercita de verdad: el formulario de
entrada corre contra un navegador y un servidor de mentira, y lo que se
comprueba es lo que ocurrió — la tarjeta se salda sólo después de que
el servidor aceptó el movimiento, un guardado fallido no salda nada, y
la ventana de etiquetas sale antes del "¿también llegó esto?" en vez de
las dos encima. No cambia nada de cómo se comporta la app; lo que
cambia es que esta clase de fallo ya no puede pasar desapercibida.
v11.82
Nuevo
Las entregas dicen de quién vienen
Cada tarjeta de entrega —en la ventana de la mañana y en las tarjetas
de día de la semana— dice ahora material - proveedor en una
sola línea. Si el nombre del material es muy largo se acorta con
puntos suspensivos para que el proveedor quepa al lado en vez de
bajarse a la línea siguiente, y un proveedor larguísimo se acorta
igual. Cede el que de verdad sobra: un proveedor corto no se recorta
nunca para hacer sitio. Pasando el mouse se lee entero, porque acortar
en pantalla no puede significar perder lo que se escribió. Una entrega
sin proveedor anotado enseña sólo el material, sin un guion
colgando.
v11.81
Más seguro
Renombrar un material ya no puede borrar otro
Renombrar, fusionar o cambiar de categoría cualquier cosa reescribe una
columna entera del archivo — incluidas todas las filas que no tocaste.
Al pasar, los valores con forma de fecha se convertían en fecha, y un
material llamado "07-6329" dejaba de contar en el stock sin avisar.
Siete acciones normales hacían esto, y el material que desaparecía no
tenía por qué ser el que estabas editando.
Ahora el texto sigue siendo texto en esas reescrituras, y también en la
hoja de packs, en la reparación de ids de movimiento y en el volcado de
diagnóstico, que tenían el mismo hueco.
Por debajo, dos guardianes pasaron a ser uno. El viejo sólo protegía de
las fórmulas, no de las fechas, y tener los dos significaba que cada
trozo de código nuevo era una elección entre el fuerte y el débil —
cuarenta y seis sitios habían elegido el débil. El débil ya no está.
Una consecuencia visible: un PO escrito "12345" se guarda ahora como
texto, así que se ve pegado a la izquierda de la celda en vez de a la
derecha. Un PO es una etiqueta, no una cantidad.
Esto protege lo que se escriba de aquí en adelante. Lo que ya se
convirtió en el pasado no se puede sacar de la celda — sólo de otras
filas que todavía lo tengan.
v11.80
Arreglado
Un material trabado ahora lo dice donde estás mirando
Trabar un material a un estante lo trababa, pero el candado sólo se
veía en dos sitios: el cajón del estante y el formulario de salida. A
los dos se llega después de haber decidido ya mover el material. En la
tabla de existencias —la pantalla que la mayoría tiene abierta— no
había nada.
Ahora la columna Location lleva un candado, y al pasar el mouse dice en
qué estante, quién lo trabó, por qué y qué se puede seguir haciendo con
él: si se puede mover a otros estantes o sólo a unos concretos. Un
candado sobre un estante del que el material ya salió no se enseña,
porque ya no impide nada.
Y trabar o destrabar llega ahora a todos los que tengan la app abierta,
en segundos, en vez de esperar a que recarguen. Antes un compañero
podía intentar sacar material trabado minutos atrás y enterarse sólo
por el error.
v11.79
Nuevo
Etiquetas, impresas al recibir
Guardás una entrada y Acopio te ofrece imprimir una etiqueta de 4"×6"
de lo que acabás de meter — material, cantidad, estante y PO, cada cosa
lo bastante grande para leerla de lejos, y con sitio reservado para un
QR o un código de barras.
Una etiqueta por estante, no por material: si cuarenta y cuatro
unidades fueron a dos estantes, son dos bultos en dos sitios y cada uno
lleva su cantidad. Marcá las que necesiten etiqueta —no todo la
necesita— y cuántas copias de cada una; una es el valor por defecto.
No se imprime nada más. La app desaparece para imprimir y al rollo sólo
van las etiquetas.
v11.78
Nuevo
"¿También llegó esto?"
Llega un camión con cuatro cosas y tenés los papeles en la mano, así
que entrás las cuatro de una vez. Hasta ahora sólo dejaba de esperarse
la entrega por la que entraste — las otras tres seguían ahí,
aguardando material que ya estaba en tus estantes.
Ahora, con la entrada ya guardada, Acopio enseña las entregas esperadas
que coinciden con lo que acabás de entrar y ofrece marcarlas como
llegadas. Vienen todas marcadas; desmarcá la que no haya llegado.
Pregunta en vez de decidir, y es a propósito. Nada une una entrega con
un movimiento, así que la coincidencia se deduce del material, la fecha
y el PO — y dar por recibida una entrega que sigue en la carretera
significa dejar de esperar algo que nunca llegó. Una casilla cuesta un
segundo.
v11.77
Arreglado
La campana decía 3 y enseñaba 2 — y las otras pantallas ya se enteran
El contador de avisos incluía los recordatorios naranjas de "llegó y
falta su entrada". La lista que sale al abrir la campana no, así que el
número y la lista no cuadraban. Ya están en la lista, y arriba del
todo: material en el almacén del que tus cantidades no saben nada es lo
más urgente que esa lista puede tener.
Y marcar una entrega como llegada ya llega a los demás. Las entregas
esperadas estaban fuera de la señal que avisa a las sesiones abiertas
de que algo cambió — así que una segunda ventana, o un compañero,
seguían viendo la entrega como pendiente hasta recargar a mano.
v11.76
Arreglado
El PO de una entrega esperada se quedaba vacío
Escribías 08-4885 en el PO de una entrega esperada,
guardabas, la volvías a abrir y el campo estaba en blanco. Lo escribías
otra vez, lo mismo. Las hojas de cálculo leen 08-4885 como
una fecha —mes 08, año 4885— y guardan eso en lugar de tu texto; al
leerlo de vuelta, la app se negaba a enseñar una fecha destrozada donde
va un PO, así que no enseñaba nada.
Las entregas esperadas ya guardan lo que escribes, igual que los
movimientos desde hace tiempo. Las filas viejas cuyo PO se comió no se
pueden recuperar de la celda —el texto ya no está ahí— así que hay que
escribirlos una vez más, y esta vez se quedan.
Además: la ventana de la semana ya se actualiza mientras trabajas en
ella. Marcar una entrega como llegada desde el popup y registrar su
entrada dejaba el popup enseñando el estado viejo hasta cerrarlo y
volverlo a abrir — sólo se refrescaba si la pestaña de Incoming
resultaba ser la que estaba detrás.
v11.75
Nuevo
La fila borrada se va en el momento en que pulsas
Antes se quedaba ahí, atenuada, hasta que el servidor contestaba — que
en un almacén real son unos cuatro segundos, porque cada borrado
reconstruye tus totales desde el archivo entero. Ahora la fila se
encoge al pulsar y las de abajo suben. Si el servidor dice que no, la
fila vuelve exactamente a su sitio y te lo dice.
Lo de encogerse es la parte que importa. Una fila que sólo se
desvanece deja su hueco, y las de abajo saltan cuando el hueco se
cierra. Encogiéndose, suben — y ese movimiento es lo que se lee como
"esto está pasando" en vez de como un parpadeo.
Restaurar desde la papelera usa el mismo movimiento. Los otros sitios
donde una fila desaparece —los merges, vaciar la papelera, quitar un
valor del catálogo— vienen después: varios repintan su lista entera
hoy, y una lista que se repinta no puede enseñar una fila yéndose.
v11.74
Mejorado
Una espera menos en cada guardado
Cada guardado y cada borrado reconstruye tus totales, y parte de eso
era leer la hoja de movimientos antiguos incluso cuando estaba vacía.
En un almacén real esa lectura costaba medio segundo de no hacer nada,
cada vez.
Ahora se salta cuando no hay nada. Las instalaciones cuya hoja de
movimientos antiguos ya creció no cambian: se sigue leyendo, porque
esas filas cuentan.
Y la medición detrás de esto vale la pena saberla si alguna vez te
preguntas por qué Acopio se queda pensando: leer veinticuatro mil
celdas cuesta lo mismo que no leer ninguna. Lo que una hoja de cálculo
cobra es el viaje, no los datos.
v11.73
Nuevo
La columna User ya es una persona
Antes era una dirección de correo. Ahora enseña el nombre de la
persona, con el correo en gris debajo. Al pasar el ratón sale una
ficha pequeña que ofrece escribirle, abrir un Google Meet, o dejarle
delante una invitación de calendario con su dirección ya puesta.
A quien no tenga el nombre escrito en Manage Users se le sigue viendo
la dirección, igual que antes. Y el nombre nunca se adivina a partir
del correo: que alguien escriba desde "j.castro@" no prueba que se
llame J Castro, y un nombre inventado en el registro de quién movió
material es peor que una dirección.
El nombre se busca al dibujar la fila, no se copia dentro. Corrige una
letra en Manage Users y todas las filas que esa persona guardó pasan a
decir el nombre nuevo — incluidas las de hace dos años.
v11.72
Mejorado
La ventana de la semana ya enseña la semana entera
Dos cosas se le caían en silencio. Una entrega que llegó el lunes y
sigue sin su entrada desaparecía el martes: no está entre lo que se
espera, porque ya llegó, ni entre lo de hoy, porque no es de hoy. Y una
entrega que se esperaba el lunes y nadie marcó se iba igual, por la
misma razón: las dos listas sólo miraban de hoy en adelante.
Ahora todo lo que la semana espera o ya recibió está en la ventana. Lo
que se esperaba antes y nadie marcó va arriba, en ámbar; lo que llegó
sale con el día que llegó y dónde se puso. Ninguna de las dos cambia
cuándo se cierra la ventana: eso sigue pasando cuando no queda nada por
atender de lo que viene.
v11.71
Arreglado
"Nada llegando hoy", una mañana en la que llegaron tres cosas
La ventana de la mañana listaba lo que seguía esperándose, y una
entrega marcada como llegada no bajaba en la lista: se salía de ella.
Así que la ventana podía decirte que hoy no llegaba nada con tres
entregas recibidas antes de las nueve.
Lo que llegó hoy tiene ahora su propio bloque, y cada cosa dice dónde
se puso. Si la entrada todavía no se hizo, no dice nada — y ese hueco
es justo lo que importa: es como se ve el material que está en el
almacén y del que las cantidades no saben nada.
El dónde se averigua emparejando la entrega con las entradas, porque
nada une las dos directamente. Y se equivoca hacia el lado de callar:
un estante equivocado diría que algo está registrado cuando no lo está,
que es precisamente el error que esto existe para cazar.
v11.70
Arreglado
La tarjeta del recordatorio ya se salda al hacer la entrada
Al marcar una entrega como llegada, Acopio deja una tarjeta naranja en
la esquina: llegó, falta su entrada. Guardar esa entrada tenía
que quitar la tarjeta. En la pantalla de entrada de varios materiales
—que es la que abre cualquier entrada— no la quitaba. La tarjeta se
quedaba, y su botón volvía a abrir el mismo formulario relleno con la
misma entrega, así que el mismo ingreso se podía guardar otra vez, y
otra.
Eso es material que nunca llegó apareciendo en el almacén, y por eso
se hizo antes que todo lo demás. Si te quedaron entradas repetidas de
una tarjeta que pulsaste dos veces, borra las de más desde Movements:
las cantidades se corrigen solas en cuanto la fila desaparece.
v11.69
Nuevo
Cinco cantidades se vuelven una barra
In Warehouse, Used, Available, Wasted y Reserved eran cinco columnas
sueltas que el ojo tenía que sumar para entender un material. Ahora son
una barra: lo que puedes tomar, lo que está apartado, lo que salió a una
obra y lo que se dio de baja — cada trozo, su parte de todo lo que hoy
se tiene contado de ese material.
El número se queda delante, porque en un almacén la pregunta es "¿me
alcanza para cuarenta?", y una proporción no contesta eso. Pasa el ratón
por la barra para ver las cifras exactas, y quién reservó qué y para qué
obra.
Una cosa que conviene saber del total: es lo que el material tiene
contado hoy, no todo lo que llegó alguna vez. Una corrección de
conteo mueve existencias sin que llegue ni salga nada, así que
"recibido" dejaría de cuadrar la primera vez que alguien ajusta un
estante — y una barra cuyos trozos no llegan al final es peor que no
tener barra.
v11.68
Nuevo
Elige una categoría y su columna se aparta
Con el dashboard filtrado a una sola categoría, todas las filas de la
columna Category decían lo mismo. Eso no es información, es espacio
desperdiciado — así que la columna se aparta y la categoría se dice una
vez, en el título de la lista. En una pantalla estrecha son unos 130 píxeles menos de scroll
lateral.
Vuelve sola en cuanto eliges All Categories otra vez, y tu orden de
columnas no se toca. Si abres el editor de columnas ahí está, como
siempre: no se puede reordenar lo que no está en pantalla.
v11.67
Arreglo
La cesta del dashboard enseña los números de hoy
Marcar materiales en el Stock Dashboard guardaba una copia de cada fila
tal como estaba en ese momento. Si otra persona guardaba un movimiento
mientras tanto, Exit Selected abría el formulario con las
cantidades viejas — la cesta se veía perfectamente bien y ya no era
verdad.
Ahora guarda sólo qué materiales elegiste y lee sus cifras actuales al
usarlos. Un material que deja de existir mientras tienes la cesta
abierta —fusionado con otro, renombrado— se cae de la cesta en vez de
aparecer con números de antes.
v11.66
Arreglo
Devolver varios movimientos de una vez
Pulsar Put back en una tanda de movimientos borrados parecía
haberlos olvidado: en cuanto terminaba el primero, todos los demás
botones se rearmaban como si nadie los hubiera tocado. El trabajo
siempre iba en marcha — la lista se redibujaba desde cero cada vez y
perdía lo que seguía en camino. Ahora las filas se quedan marcadas como
en camino hasta que de verdad vuelven.
Además van de una en una y piden una sola recarga al final, en vez de
una lectura completa del almacén por movimiento.
v11.66
Más seguro
Las columnas añadidas después de instalar por fin tienen nombre
Una instalación escribía los títulos de sus columnas una sola vez, al
montarse. Lo que llegó en versiones posteriores —las dos columnas de
costo, el ID de movimiento— se escribía por posición y su título se
quedaba en blanco. Una columna sin nombre parece basura sobrante, y
alguien acaba limpiándola.
Volver a pasar por Setup rellena ahora los nombres que falten. Un título
que ya tiene texto no se toca nunca, diga lo que diga: nada en la app
lee esos nombres, así que renombrar el tuyo sería un cambio que nadie
pidió.
v11.65
Arreglo
Las burbujas de ayuda salen donde estás mirando
Cada i pequeña de Ajustes ponía su explicación un par de
centímetros por debajo de su icono y la dibujaba detrás de los recuadros
de al lado. La causa era una línea: el título de cada recuadro se sube a
su línea de borde con un transform de CSS, y un transform pasa a ser en
silencio el marco de referencia de todo lo que se posicione dentro.
En vez de quitar esa subida, la burbuja vive ahora fuera de todos los
recuadros. Nada de la página la puede recortar, mover ni tapar — ni este
recuadro, ni el que se decore el año que viene. Además se acomoda sola
en ventanas bajas en vez de salirse por abajo, y se aparta al hacer
scroll.
v11.65
Arreglo
Check my data recuerda lo que encontró
Cerrar Ajustes y volver a abrirlo mostraba el recuadro vacío, como si el
barrido no se hubiera hecho nunca. Los hallazgos nunca se perdieron — el
panel simplemente se reconstruía sin dibujarlos. Ahora vuelven, sin
volver a escanear.
Y aplicar una tanda de arreglos pide una sola recarga al final en vez de
una por arreglo. Veinte arreglos eran veinte lecturas completas del
almacén.
v11.64
Arreglo
"Sistema ocupado" deja de parecer algo que rompiste tú
Cuando dos personas guardan en el mismo momento, una espera. Eso es
normal y el sistema siempre lo ha manejado — pero se rendía a los trece
segundos y entonces escribía en pantalla su propia nota interna, con
marca y código de referencia incluidos. Ahora espera unas tres veces
más, en silencio, y el botón simplemente dice Waiting….
Todas las pantallas que escriben pasan ahora por una sola cola, así que
tus propios dos clics ya no chocan entre sí. Seis de ellas no tenían
ninguna espera — entre ellas Check my data, donde aplicar un
arreglo fallaba sin más si alguien estaba guardando.
Y cuando algo de verdad no se puede hacer, el mensaje dice qué está mal
en vez de repetir "ocupado". Las marcas internas y la referencia de
soporte ya no aparecen en pantalla; la referencia se sigue guardando,
donde el soporte la puede buscar.
v11.64
Arreglo
El check de un movimiento se va cuando terminas con él
Seleccionar un movimiento, editarlo y guardarlo dejaba la fila todavía
marcada, y cambiar de pestaña y volver también. La selección se limpia
ahora al guardar una edición y al salir de la pantalla — sólo sobrevive
mientras sigues en la misma página mirando la misma lista.
v11.63
Arreglo
Un PO escrito 07-6329 se queda 07-6329
Google Sheets interpreta lo que se le da. Al recibir el texto
07-6329 decidió que eso significaba julio del año
6329, guardó una fecha y tiró la orden de compra. El número que
salía después era uno que nadie había escrito nunca.
Apareció al borrar un movimiento y devolverlo desde la papelera, que es
el camino que copia una fila de una hoja a otra. Pero la misma línea de
código está en seis sitios — guardar, editar, la papelera, restaurar y
las dos mitades de la rotación nocturna del archivo — más los resúmenes
de existencias y las listas del catálogo. Todos escriben ahora el texto
como texto.
Dos consecuencias que conviene saber. Una orden de compra escrita sólo
con dígitos se guarda a partir de ahora como texto, así que queda a la
izquierda de la celda en vez de a la derecha: un PO es una etiqueta, no
una cantidad. Y las filas escritas antes de esta versión no se reparan
con ella — un valor ya convertido perdió el original dentro de la
celda, y la única fuente honesta para recuperarlo son las otras filas
que todavía lo tienen.
v11.62
Nuevo
Varias locaciones de una vez, y una vacía se puede borrar
Montar un estante ya no son seis viajes por el mismo cuadro: escribe
A1A, A1B, A1C y salen tres. Las que ya existan se saltan y
se nombran, en vez de cancelar todo.
Una locación que no tiene nada guardado dentro se puede borrar del
todo — aparece una papelera al lado. Los movimientos anteriores no
cambian: cada uno se queda con el nombre de la locación con el que se
grabó, la misma regla que ya sigue el renombrar. Una locación que
todavía tiene material, tiene un candado encima, o está nombrada como
destino permitido de un candado, se queda sólo con el botón de
archivar, y al pasar el ratón dice cuál de las tres la retiene.
Por debajo: ahora la regla la aplica el servidor en vez de fiarse de la
pantalla. Esta pantalla siempre ha mandado la lista entera de vuelta,
así que una locación podía en principio desaparecer sin que nadie
comprobara si estaba vacía. Ahora se comprueba donde no se puede
saltar.
v11.61
Nuevo
Movements cabe en la pantalla: cuatro columnas son dos
El tipo va ahora encima de la fecha en una columna, y la categoría
encima del nombre del material en otra. La misma información, dos
columnas menos, y la tabla deja de irse por el lado de la pantalla —
sobre todo con el editor de columnas abierto, que antes lo ensanchaba
todo.
Lo que se pierde a cambio, y conviene saberlo: esas cuatro ya no se
pueden reordenar por separado, porque ya no son cuatro. El orden que
tuvieras puesto se conserva — la columna fusionada se queda con el
sitio que tenía la primera de su pareja.
v11.60
Nuevo
Al desbloquear un material te dice quién lo cerró, y por qué
Antes de desbloquear algo, el aviso enseña ahora quién lo cerró, cuándo,
la razón que dio con sus propias palabras, y a dónde se permitía
moverlo. Todo eso ya estaba guardado — sólo vivía en una ayuda flotante
sobre un icono pequeño, que se la enseña a quien pasa por al lado en vez
de a quien va a tomar la decisión.
También se arreglaron dos mensajes que no ayudaban: que te falte un
permiso ahora dice qué intentabas hacer, a quién pedírselo y dónde se
enciende; y la ventana de llegadas ya no dice "Good morning" a las ocho
de la tarde.
v11.59
Nuevo
Marca los movimientos que quieras y actúa sobre ellos
Movements tiene ahora casillas, igual que el Stock Dashboard, con una
casilla general en la cabecera que marca lo que estás viendo —
no el archivo entero. Edit y Delete están en la misma
línea que Columns, apagados hasta que marques algo. Edit trabaja sobre
un movimiento a la vez y lo dice; Delete sobre los que quieras, y todos
van a la papelera.
Ya no se mueve nada en esa fila. Los botones están siempre, el
texto largo de las columnas se fue al ⓘ, y la columna de acciones dejó
de aparecer y desaparecer — esas tres cosas eran las que hacían saltar
la tabla cada vez que pulsabas algo. Cambiar un filtro suelta lo que
tenías marcado, así que nunca puedes borrar filas que ya no ves.
v11.58
Arreglado
Borrar varios movimientos a la vez ya no dice "System busy"
Pulsar cuatro papeleras seguidas le pedía al servidor cuatro
reconstrucciones completas del stock en el mismo momento, y las últimas
volvían ocupadas. Ahora salen de una en una, en el orden en que las
pulsaste: la fila que espera su turno se ve atenuada, se reintenta sola
si otra persona está guardando, y sólo habla si de verdad no pudo
pasar.
v11.58
Nuevo
Vaciar la papelera, y Ajustes deja de volver a pedir lo que no cambió
La papelera tiene ahora su propio botón Empty the trash, dentro
del cuadro que vacía. Es la única acción de la app que de verdad no se
puede deshacer, así que sigue siendo sólo de administrador aunque
borrar un movimiento ya no lo sea.
Y abrir Ajustes ya no vuelve a preguntarle al servidor por cosas que no
han cambiado desde la última vez — la lista de borrados, los IDs de
movimiento y la lista de usuarios se conservan hasta que algo las
cambia de verdad. Ajustes también tiene ahora un filo inferior, en vez
de terminar a ras del contenido.
v11.57
Arreglado
Cambiar de tipo de movimiento dejaba media fila atrás
Pasar de Exit a Transfer arrastraba la cantidad pero no el estante de
donde salía, dejando una fila que decía "? unknown rack" con un número
de verdad dentro — una fila que parece rellena y no lo está. El
marcador de arriba contaba también esa fila, así que podía enseñar más
unidades de las que existen.
Ahora el estante y la cantidad viajan juntos o no viaja ninguno. Si el
material está en un solo estante, se rellenan los dos; si está
repartido en varios, ninguno, porque la app no sabe a qué balda fuiste.
La lista de estantes de origen también dejó de ofrecer todos los sitios
del edificio y ahora enseña sólo los estantes donde ese material está
de verdad, con cuánto hay en cada uno.
v11.56
Arreglado
El permiso de "puede borrar movimientos" nunca funcionó de verdad
Darle a un rol de almacén permiso para editar movimientos debía
dejarle corregir o borrar un movimiento ya guardado — lo dice el
propio interruptor. Corregir funcionaba; borrar seguía siendo sólo de
administrador por debajo, así que el interruptor se veía encendido, el
botón de borrar aparecía, y al pulsarlo decía "Admin only." Ya
funciona, y el permiso sigue sin abrir las operaciones masivas que
reescriben la historia entera de un material.
v11.56
Arreglado
"Load Older History" hacía desaparecer los botones de Entry y Exit
Mientras un botón trabaja, los de al lado se esconden para que una
etiqueta que crece no se les monte encima. "Load Older History" termina
con otro nombre, y cambiaba ese nombre sin avisar a sus vecinos de que
había terminado — así que + Entry (IN) y − Exit (OUT) se
quedaban escondidos hasta recargar la página. Arreglado en todos los
sitios donde podía pasar, no sólo donde se veía.
v11.55
Nuevo
Borrar un movimiento se puede deshacer
Un movimiento borrado va ahora a la papelera en vez de destruirse. En
Ajustes → System se ve lo que se ha borrado, quién lo borró y cuándo, y
se puede devolver cualquiera de ellos tal cual estaba — misma cantidad,
mismo estante, misma fecha — con los totales de stock recalculados en
el momento.
Y la fila desaparece de la pantalla en cuanto se borra, no
después de la siguiente recarga completa. El aviso ya no advierte de
que esto no se puede deshacer, porque ahora sí se puede.
v11.55
Arreglado
Borrar podía llevarse un movimiento distinto del que elegiste
Los movimientos se identificaban por su posición en la lista, y las
posiciones se mueven: al borrar uno, todos los de abajo suben. Así que
si otra persona borraba algo mientras tu pantalla estaba abierta, el
que elegías y el que se iba podían ser dos movimientos distintos — sin
error, sin aviso, y sin nada en pantalla que hiciera sospechar que algo
había salido mal.
Ahora cada movimiento lleva un identificador propio, y borrar señala ese
identificador en vez de una posición. No puede equivocarse. Que dos
personas borren el mismo movimiento también se trata con honestidad: a
la segunda se le dice quién lo borró y cuándo, en vez de decirle que
funcionó.
v11.54
Arreglado
Ya no aparece "GENERIC" donde va el nombre de un trabajo
El material que entraba al almacén sin asignar a ningún trabajo se
anotaba como si perteneciera a uno llamado GENERIC. Era la palabra que
usaba la app para decir "sin asignar", y todas las pantallas ya sabían
ignorarla — pero en la hoja se leía exactamente como el nombre de un
cliente, y eso es algo que un registro de movimientos no debe
inventarse nunca.
Una entrada sin trabajo ya no anota ningún trabajo. Las filas escritas
antes de esta versión siguen diciendo GENERIC y siguen significando lo
mismo, así que nada cambia por debajo; se pueden limpiar cuando
quieras.
v11.46 – v11.53
Nuevo
Todos ven el mismo almacén
Cuando dos o tres personas trabajan en la app al mismo tiempo, el cambio
que hace una llega ahora a las demás por su cuenta, en unos veinte
segundos — una entrada, una salida, un traspaso, un movimiento borrado.
Nadie tiene que darle a actualizar, y no parpadea nada ni se
interrumpe lo que estabas escribiendo.
Guardar en el mismo momento que otra persona ya no falla. La app
espera su turno y lo vuelve a intentar sola, hasta cuatro veces,
enseñando "Waiting…" mientras tanto. Lo que antes era un error que
había que repetir es ahora una pausa corta.
Sacar más de lo que hay ahora corrige el número en pantalla y
explica qué pasó, en vez de sólo negarse. Y si alguien se llevó lo
último mientras tenías el formulario abierto, el formulario te lo dice
en ese momento, no al darle a guardar.
v11.52
Arreglado
Un movimiento borrado podía reaparecer en la pantalla de otro
Cuatro movimientos borrados en una cuenta seguían viéndose en otra doce
minutos después, con las dos pantallas conectadas y sin nada raro a la
vista. Dos actualizaciones estaban corriendo una carrera, y cuando la
más lenta se había pedido antes del borrado y llegaba
después, pintaba el almacén viejo encima del nuevo.
No fallaba nada, y por eso no avisaba nada: las dos respuestas eran
correctas, sólo llegaban en el orden equivocado. Una respuesta a la que
ya adelantaron se descarta ahora en vez de dibujarse.
v11.51
Arreglado
Avisos fuera del borde del teléfono, y botones montados uno encima de otro
En el teléfono, los avisos de confirmación salían fuera de la parte
visible — o sea que la app contestaba donde nadie podía leerlo. Y un
botón que cambiaba de texto a mitad de la acción se hacía tan ancho que
se montaba sobre el de al lado. Las dos cosas están arregladas, y que
dos personas desbloqueen el mismo material a la vez ya no deja a una de
ellas con un error por un trabajo que ya estaba hecho.
v11.42 – v11.45
Nuevo
Marca una entrega como llegada y su entrada ya viene llena
La app ya sabía qué llegaba, cuánto, de qué proveedor y con qué PO.
Marcarla como llegada significaba volver a teclear todo eso en la
pantalla de entrada — que es justo donde empiezan a diferir lo que se
esperaba y lo que quedó registrado.
Ahora marcarla ofrece registrar la entrada, y la abre con todo lo que la
entrega ya sabía. El estante se deja vacío a propósito: la app
sabe cuánto llegó, no dónde lo pusieron, y un estante de relleno sería
inventario que dice estar en un sitio donde nadie miró.
Si no la haces en ese momento, una tarjeta espera en la esquina de la
pantalla hasta que la hagas. Se queda ahí aunque abras la entrada y la
cierres sin guardar — sólo la borra una entrada guardada.
v11.44
Corregido
El encabezado se quedaba arriba en el teléfono y se iba en la computadora
Las pestañas y el menú de la cuenta tienen que quedarse en lo alto de la
pantalla. En cualquier pantalla lo bastante ancha para mostrar el
encabezado compacto —o sea, en toda computadora— se iban con el scroll.
Dos reglas se peleaban por ello y ganaba la equivocada, justo en las
pantallas que usa casi todo el mundo.
v11.43
Corregido
El aviso de la mañana nunca reconocía que ya lo habías atendido
La lista de llegadas de la semana que te recibe por la mañana se quedaba
en pantalla enseñando entregas que acababas de marcar como llegadas.
Decidía si una entrega seguía esperando comparándola con un estado que
la app nunca ha producido, así que nada contaba como hecho.
Ahora se cierra sola cuando se atiende la última, y sigue enseñando las
demás cuando quedan más.
v11.41
Nuevo
La semana de entregas, dispuesta como una semana
Las entregas esperadas eran una lista. Ahora son siete tarjetas —cuatro
arriba y tres abajo— todas del mismo tamaño, como se ve una semana en
un calendario. Un día cargado hace scroll dentro de su propia tarjeta en
vez de estirarse y descuadrar a los demás, así que la forma de la semana
se sigue leyendo por desigual que sea.
v11.40
Términos
Qué pasa si dejas de pagar, escrito con claridad
Los Términos dicen ahora exactamente qué pasa cuando una suscripción se
vence y cuánto cuesta volver, en vez de dejarlo a decidir caso por caso.
Las devoluciones se declaran con un solo plazo —de 5 a 10 días
hábiles— en todos los documentos que las mencionan.
Lo que no ha cambiado, y vale la pena repetir: tus datos son tuyos y
viven en tu propia hoja de Google. Dejar de pagar no te quita tu
información ni la app que tienes instalada. Se pierde el soporte y las
actualizaciones, nada más.
v11.39
Corregido
Ayudas que no se podían terminar de leer
Las explicaciones pequeñas de la ⓘ se cortaban en el borde de la
ventana, y cerca del pie de la pantalla se abrían hacia abajo, hacia la
nada. Ahora se quedan dentro de la ventana estén donde estén, y se
voltean por encima del icono cuando no hay sitio debajo.
Ajustes también creció: en una pantalla grande usa el espacio que tiene
en vez de quedarse del ancho de una laptop chica.
v11.37 – v11.38
Corregido
Abrir Ajustes dejó de parecer que la app se recargaba
Cada vez que abrías Ajustes —y cada vez que cambiabas de pestaña dentro—
la página entera se ponía en blanco y se volvía a construir. Ahora
enseña lo que ya sabe de inmediato y reemplaza en silencio sólo lo que
de verdad cambió. Si no cambió nada, no se mueve nada. Y si estás
escribiendo en un campo cuando llegan datos nuevos, espera a que
termines en vez de redibujar bajo tus manos.
Cada área de Ajustes va ahora dentro de un recuadro con su nombre, así
se lee como cosas separadas y no como una columna larga de controles.
v11.35 – v11.36
Nuevo
Un reporte diario de lo que se movió, cada tarde
A la hora que elijas, la app manda por correo un resumen del día: qué
entró, qué salió, qué se corrigió y quién lo hizo. Si no se movió nada
lo dice en una línea en vez de mandar una tabla vacía — un día tranquilo
también es información.
La hora y quién más lo recibe se eligen en Settings → System. Los
costos nunca van dentro, sea cual sea el rol de quien lo recibe: un
reporte reenviado fuera de la empresa no debería ser la forma en que se
escapa el precio de un proveedor.
v11.33 – v11.34
Corregido
Dos formas de perder trabajo, las dos cerradas
Seleccionar filas y abrir un formulario soltaba la selección, así que
pulsar Guardar no registraba nada y decía que había funcionado. La
selección sobrevive ahora al formulario y sólo se suelta al cerrar la
ventana.
Y mientras un botón está trabajando, los de al lado se apartan en vez de
seguir pulsables. Un segundo clic en un botón vecino a media guardada
era una manera real de registrar algo dos veces.
v11.33
Seguridad
Un respaldo nocturno que fallaba en silencio ahora lo dice
Si la instalación del respaldo automático fallaba durante la
instalación, no se escribía nada y no se enseñaba nada — la app
simplemente no tenía respaldos y nadie lo sabía. El fallo ahora queda
registrado, y Settings → System revisa las cuatro tareas
automáticas y te dice cuáles están instaladas de verdad.