Bienvenido a los foros %s

Foro comunidad hispana Dolibarr

Identificarse Registrarse

[TakePOS 22.0.5] Error al vincular suplementos: "array offset on null" + "InvoiceLine not found" al borrar línea

Si cree que ha encontrado un error, siéntase libre de comunicarlo aquí.
bryanhh28
Novato
Mensajes: 1
Registrado: Jue, 16/07/2026, 20:32

[TakePOS 22.0.5] Error al vincular suplementos: "array offset on null" + "InvoiceLine not found" al borrar línea

Mensaje por bryanhh28 »

Hola comunidad,

Estoy configurando la función "Gestionar suplementos de productos" de TakePOS para una heladería (quiero que al vender un cono/helado se pueda elegir el sabor como suplemento). Después de configurarlo, me encuentro con un error que se repite de forma consistente, incluso empezando desde cero. Detallo todo para ver si a alguien le ha pasado o si es algo que estoy haciendo mal.

ENTORNO:
- Dolibarr 22.0.5
- PHP 8.2.12
- Servidor: Apache 2.4.58 (XAMPP)
- SO: Windows 11
- Base de datos: MySQL (mysqli)

CONFIGURACIÓN:
1. En TakePOS > Configuración > Bar Restaurante:
- "Gestionar suplementos de productos" = activado
- "Categoría de suplemento" = "Sabores"
2. Categorías creadas: "Sabores" (padre).
3. Producto "Chocolate" creado, precio $0, etiquetado DIRECTAMENTE con la categoría "Sabores".
4. Producto "CONO" creado normalmente, precio $3.000

PASOS PARA REPRODUCIR:
1. Abro un ticket nuevo en TakePOS
2. Agrego "CONO" al carrito
3. Toco la línea de CONO para seleccionarla (queda resaltada)
4. Toco el botón "Gestionar suplementos de..."
5. Toco "Chocolate"

RESULTADO OBTENIDO:
Al hacer el paso 5, aparece este warning en pantalla:

Warning: Trying to access array offset on value of type null in invoice.php on line 823

El producto Chocolate SÍ se agrega al carrito, pero como línea independiente (no vinculada/anidada a la línea de CONO como suplemento).

Después, al intentar eliminar cualquiera de las líneas del carrito, aparece un error interno de Dolibarr:

Mensaje: InvoiceLine with id 49 not found sql=SELECT fd.rowid, fd.fk_facture, fd.fk_parent_line... FROM llx_facturedet as fd LEFT JOIN llx_product as p ON fd.fk_product = p.rowid WHERE fd.rowid = 49

LO QUE YA INTENTÉ:
- Verificar que la categoría del producto Chocolate esté bien puesta (directamente en "Sabores". ✔️
- Borrar la factura/ticket corrupto desde Financiera > Facturas y empezar un ticket completamente nuevo → el error se repite igual
- Revisar si el producto "Chocolate" tenía "Gestión de stocks" activada sin almacén asignado por defecto (sospecho que esto puede estar generando el conflicto al no poder mover stock de un producto usado como suplemento)
- Aclarar que todos los productos agregados les quite la opción de stock ya que no lo necesito.

PREGUNTA:
¿A alguien más le ha pasado esto con "Gestionar suplementos" en TakePOS 22.0.5? ¿Hay algún ajuste adicional que me esté faltando, o es un bug conocido? Revisé el ChangeLog de 22.0.5 y de la versión más reciente (23.0.3) y no encontré ningún FIX relacionado con "supplements" de TakePOS.

Cualquier ayuda es bienvenida, ¡gracias de antemano!

EasySoft
Novato
Mensajes: 15
Registrado: Dom, 24/08/2025, 21:35

Mensaje por EasySoft »

Hola.

Nos hemos pegado bastante con esto, y no, no es cosa de tu configuración ni del stock. Es un bug de TakePOS que sigue presente en la 22.0.5.

Al pulsar un producto, takepos/index.php llama a invoice.php?action=addline sin pasarle la línea seleccionada (selectedline). Así que en invoice.php la consulta para buscar la línea padre se hace con rowid = 0, no encuentra nada, salta el Warning de la línea 823 y el sabor se añade como una línea normal.

Ya está corregido en la 23.0.4 (PR #38760). Si quieres seguir en la 22.0.5 puedes aplicarlo a mano. Haz antes una copia de takepos/index.php y takepos/invoice.php.

1) En takepos/index.php, dentro de la función ClickProduct, cambia esto:

Código: Seleccionar todo

&idproduct="+idproduct+"&qty="+qty+
por esto:

Código: Seleccionar todo

&idproduct="+idproduct+"&selectedline="+selectedline+"&qty="+qty+
2) En takepos/invoice.php busca if ($line->fk_parent_line != false) { (está en la línea 1953) y justo debajo añade:

Código: Seleccionar todo

if (!isset($htmlsupplements[$line->fk_parent_line])) { $htmlsupplements[$line->fk_parent_line] = ''; }
Sin esto, en cuanto los suplementos se anidan sale otro Warning distinto (también corregido en la 23.0.4, PR #39263).

Recarga TakePOS con Ctrl+F5, selecciona el CONO, pulsa "Gestionar suplementos" y toca Chocolate. Ya debería quedarte colgando debajo del CONO.

Ojo con una cosa que sigue sin arreglar en la 22 y la 23: si borras la línea padre, sus suplementos no se borran. Dejan de verse, pero siguen sumando y salen en el ticket (issue #39058, de momento solo está corregido en la versión de desarrollo). Hasta entonces, borra primero los sabores y luego el cono.

Lo de "InvoiceLine with id 49 not found" sale cuando TakePOS intenta borrar una línea que ya no existe en la base de datos. Por lo que cuentas, puede que borraras el ticket desde Financiera > Facturas con TakePOS todavía abierto: la pantalla seguía mostrando las líneas antiguas y al borrar una ya no la encuentra. Recarga TakePOS después de tocar el ticket por otro lado y no debería volver a salir. Si con el parche te sigue pasando, cuéntanos los pasos y lo miramos.

Enlaces por si quieres verlo:
https://github.com/Dolibarr/dolibarr/pull/38760
https://github.com/Dolibarr/dolibarr/pull/39263
https://github.com/Dolibarr/dolibarr/issues/39058

Un saludo.
EasySoft Tech S.L. — módulos, adaptaciones, integraciones y ERP en la nube sobre Dolibarr
Contabilidad ES (EasyConta), VeriFactu, SII, Facturae y API REST.
https://easysoft.es | Guías: https://wiki.easysoft.es