Publicado el Dejar un comentario

Cómo identificar los productos que llevan meses sin vender en MyBusiness POS

Uno de los errores más comunes en un negocio es seguir comprando mercancía sin saber qué productos realmente tienen movimiento.

Con MyBusiness POS puedes detectar fácilmente los artículos de baja rotación para tomar mejores decisiones de compra.

¿Por qué es importante?

Un producto que permanece mucho tiempo en inventario representa dinero inmovilizado, ocupa espacio y puede terminar deteriorándose o volviéndose obsoleto.

Revisar periódicamente estos productos te permitirá:

  • Reducir compras innecesarias.
  • Liberar espacio en almacén.
  • Crear promociones para desplazar mercancía.
  • Mejorar el flujo de efectivo.

¿Cómo obtener la información?

Una forma sencilla es utilizar los reportes de ventas por período y compararlos con la existencia actual del inventario.

Si un artículo tiene existencia disponible, pero no registra ventas durante los últimos meses, conviene analizar si debe seguir formando parte del catálogo.

También puedes ordenar los reportes por cantidad vendida para identificar rápidamente los productos con menor movimiento.

¿Qué hacer con esos productos?

Dependiendo del tipo de negocio, algunas estrategias son:

  • Crear promociones temporales.
  • Venderlos en paquete con otros productos.
  • Aplicar descuentos graduales.
  • Dejar de surtirlos cuando se agoten.
  • Sustituirlos por productos con mayor demanda.

Convierte la información en decisiones

No basta con conocer las ventas del día. Los negocios más rentables analizan constantemente qué productos generan ganancias y cuáles mantienen detenido el capital.

Dedicar unos minutos al mes para revisar la rotación del inventario puede representar un ahorro importante y mejorar la rentabilidad del negocio.


Consejo

Si administras varios almacenes, realiza este análisis por sucursal. Es común que un producto tenga excelente rotación en una tienda y prácticamente ninguna en otra.


Palabras clave SEO: MyBusiness POS, productos sin movimiento, inventario, rotación de inventario, reportes de ventas, administración de inventarios, control de almacén, punto de venta.

Publicado el Dejar un comentario

Validando información antes de guardar un documento mediante Scripts en MyBusiness POS


Una de las mayores ventajas de MyBusiness POS es la posibilidad de extender su funcionamiento mediante Scripts. Con unas cuantas líneas de código podemos validar información, mostrar mensajes al usuario e incluso impedir que un documento sea guardado cuando no cumple con las políticas de la empresa.

En este ejemplo aprenderemos a validar que el cliente tenga asignado un RFC antes de permitir guardar una factura.

¿Por qué hacerlo?

En muchos negocios es común que existan clientes registrados únicamente con nombre. Sin embargo, al momento de emitir una factura es indispensable contar con un RFC válido.

En lugar de esperar a que el CFDI genere un error, podemos realizar la validación desde el propio Script.

Código de ejemplo

'-----------------------------------------------------
' Validar RFC del cliente
' Evento: Antes de guardar el documento
'-----------------------------------------------------

Dim sRFC

sRFC = Cliente.Valor("RFC")

Si Trim(sRFC) = "" Entonces

    Mensaje "El cliente seleccionado no tiene capturado el RFC." & _
            SaltoLinea & _
            SaltoLinea & _
            "Capture el RFC antes de continuar."

    Cancelar

FinSi

Analizando el Script

Obtener el valor de un campo

La función Valor() permite recuperar el contenido de un campo del objeto actual.

sRFC = Cliente.Valor("RFC")

En este caso obtenemos el RFC del cliente asociado al documento.


Validar que exista información

Antes de guardar el documento verificamos que el campo no esté vacío.

Si Trim(sRFC) = "" Entonces

Utilizar Trim() elimina espacios al inicio y al final del texto, evitando que un campo con espacios sea considerado como válido.


Mostrar un mensaje

Para informar al usuario utilizamos el procedimiento Mensaje.

Mensaje "El cliente seleccionado no tiene capturado el RFC."

La ventaja es que el usuario conoce inmediatamente la causa del problema.


Cancelar el proceso

Cuando una condición no se cumple podemos impedir que el documento continúe.

Cancelar

Dependiendo del evento donde se ejecute el Script, MyBusiness POS regresará el control al usuario para corregir la información.


Agregando una confirmación

En algunos casos no queremos cancelar automáticamente el proceso, sino permitir que el usuario decida.

Si Pregunta("El cliente no tiene RFC." & SaltoLinea & _
            "¿Desea continuar?") = No Entonces

    Cancelar

FinSi

La función Pregunta() resulta muy útil cuando la decisión depende del operador.


Validando el importe del documento

Otro ejemplo práctico consiste en advertir cuando una venta supera cierto importe.

Dim dTotal

dTotal = Documento.Valor("TOTAL")

Si dTotal > 50000 Entonces

    Mensaje "Esta venta supera los $50,000." & _
            SaltoLinea & _
            "Solicite autorización."

    Cancelar

FinSi

Este tipo de validaciones son comunes para restringir ventas de alto importe sin autorización.


Buenas prácticas

Cuando desarrolles Scripts para MyBusiness POS procura seguir estas recomendaciones:

  • Utiliza nombres descriptivos para las variables.
  • Coloca comentarios en cada bloque importante.
  • Evita repetir el mismo código en varios eventos.
  • Aprovecha las funciones propias del motor de Scripts antes de recurrir a soluciones externas.
  • Realiza las pruebas en una empresa de demostración antes de implementar los cambios en producción.

Conclusión

Los Scripts de MyBusiness POS permiten adaptar el sistema a las necesidades específicas de cada empresa sin modificar el código fuente. Funciones como Valor(), Mensaje, Pregunta y Cancelar facilitan la implementación de reglas de negocio de una forma sencilla y fácil de mantener.

En una siguiente publicación exploraremos cómo recorrer las partidas de un documento para validar artículos, cantidades y precios de manera automática.

Publicado el Dejar un comentario

error de sistema 380 en MyBusinessPOS

TIMER 11:40:17 0: in line 0  Error de sistema: 380 A script engine for the specified language can not be created.

Publicado el Dejar un comentario

Como cobrar con tareta sin ser afectado por las comisiones


💳 Cómo vender con comisión sin infringir la ley (y cómo usar tu sistema de punto de venta para hacerlo correctamente)

Muchos negocios enfrentan este dilema:

➡ El cliente paga con tarjeta
➡ La terminal cobra comisión
La ley no permite que se le cobre esa comisión directamente al cliente

La Comisión Nacional para la Protección y Defensa de los Usuarios de Servicios Financieros (CONDUSEF) es clara: no puedes cobrarle al cliente una comisión adicional por pagar con tarjeta. Hacerlo puede generar multas que realmente afectan a tu negocio.

Entonces, ¿qué se hace?


🧾 1️⃣ Maneja tus precios estratégicamente

💸 Precio con comisión ya considerado

En lugar de cobrarle extra al cliente por el uso de tarjeta… incluye la comisión en tu precio normal de venta. Esto te deja tranquilo, acorde a la ley, y mantiene tu estructura de precios clara.

📊 Precio de mayoreo separado

Si vendes productos a clientes mayoristas, puedes tener otro precio más bajo.

📌 En MyBusiness POS puedes manejar tanto precio de menudeo como precio de mayoreo fácilmente dentro del catálogo de productos.
Esto te permite tener:

  • Un precio normal (incluyendo comisión).
  • Un precio de mayoreo (sin incluir comisión).

Así el monto que el cliente mayorista paga puede ser menor cuando corresponde.
Esto ayuda mucho para ventas en efectivo o compras grandes en tu negocio.


👥 2️⃣ Usa perfiles de cliente inteligente

En MyBusinessPOS ya existe por default un cliente como SYS – Cliente General.

👉 Puedes crear otro cliente, por ejemplo:

🔹 SYS – E (clientes en efectivo)
Y usarlo para aplicar el precio de mayoreo cuando la venta sea en efectivo.

✔ Es una forma práctica de separar ventas en efectivo y aplicar descuentos de forma ordenada en tu sistema.


🤔 ¿Y en Eleventa?

La buena noticia es que Eleventa también maneja precio de mayoreo y precio de menudeo.
Según su manual, al crear un producto puedes asignar:

✔ Precio de venta
✔ Precio al mayoreo

Y al momento de la venta, con una tecla (por ejemplo F11) o un botón puedes cambiar entre uno y otro precio para aplicar el que corresponda.

Esto significa que, si usas Eleventa en lugar de MyBusinessPOS, también puedes tener:

🌟 Precio con comisión (venta normal)
🌟 Precio sin comisión (mayoreo / especial / efectivo)

Lo único que cambia es cómo decides cuándo aplicar cada uno durante la venta.


🏦 3️⃣ Elige tu terminal con criterio

Si tienes pocos pagos con tarjeta, puedes amortiguar la comisión con los precios normales.

Si ya tienes volumen, elige una terminal con menor comisión.

Por ejemplo:

👉 La terminal de Getnet tiene una comisión aproximada de 2.18% ya con IVA incluido, lo cual es más competitivo que muchas terminales conocidas que cobran mucho más.


📊 4️⃣ ¿Cómo afecta la comisión realmente?

A mí me sirve de ejemplo:

🔹 Mi ganancia promedio es 23%
🔹 Si tomo en cuenta comisión de tarjeta, mi margen baja a ~19.5%
🔹 Sin embargo, aceptar pagos con tarjeta me ayuda a vender más porque:

✔ Más clientes pueden pagar
✔ Genera confianza
✔ Las ventas aumentan
✔ El ticket promedio sube

Yo lo veo como una situación ganar–ganar:

💳 El cliente tiene opciones de pago
🏪 El negocio vende más
📈 Creces con mayor clientela


🧠 Conclusión sencilla

✅ Incluye la comisión en tu precio normal
✅ Mantén un precio de mayoreo o especial para efectivo
✅ Usa la funcionalidad de precios de tu POS (MyBusinessPOS o Eleventa)
✅ Evita cobrar la comisión directamente al cliente (eso está prohibido por CONDUSEF)
✅ Busca terminales con menor comisión, como bbva o Getnet


Publicado el Dejar un comentario

Actualizar Woocommerce directo desde MyBusinessPOS con IA

Este ejemplo incorpora lo que se sabe sobre la estructura de la base de datos de MyBusiness POS (por ejemplo la tabla prods que contiene los artículos y precios) y cómo hacer consultas SQL desde VBScript en el entorno del propio sistema (porque esta tabla y otras son conocidas dentro de la comunidad técnica de helpmybusinesspos.info)

' ==========================================
' Script VBScript para MyBusiness POS v20
' Actualiza precio de producto en WooCommerce
' ==========================================

Sub ActualizarPrecioWoo()

    On Error Resume Next

    Dim rst, sSQL
    Dim sku, nuevoPrecio
    Dim httpReq, url
    Dim consumerKey, consumerSecret
    Dim jsonBody

    ' ----------------------------------------------------
    ' 1) Pedir al usuario el SKU a actualizar
    ' ----------------------------------------------------
    sku = InputBox("Ingrese el SKU del producto a actualizar en WooCommerce:", "Actualizar Precio Woo")

    If Trim(sku) = "" Then
        MsgBox "No se ingresó ningún SKU.", vbExclamation, "Aviso"
        Exit Sub
    End If

    ' ----------------------------------------------------
    ' 2) Consultar precio desde MyBusiness POS v20 (tabla prods)
    ' ----------------------------------------------------
    sSQL = "SELECT precio1 FROM prods WHERE articulo = '" & Replace(sku, "'", "''") & "'"

    Set rst = CreateObject("ADODB.Recordset")
    rst.Open sSQL, Ambiente.Connection, 1, 1

    If rst.EOF Then
        MsgBox "Producto no encontrado en MyBusiness POS.", vbCritical, "Error"
        rst.Close
        Set rst = Nothing
        Exit Sub
    End If

    nuevoPrecio = rst("precio1")

    rst.Close
    Set rst = Nothing

    ' ----------------------------------------------------
    ' 3) Preparar API de WooCommerce
    ' ----------------------------------------------------
    consumerKey = "ck_tu_consumer_key"
    consumerSecret = "cs_tu_consumer_secret"

    ' Construir data JSON para actualizar el precio
    jsonBody = "{""regular_price"": """ & CStr(nuevoPrecio) & """}"

    ' Formar URL para actualizar por SKU
    url = "https://tu-tienda.com/wp-json/wc/v3/products?sku=" & sku & _
          "&consumer_key=" & consumerKey & "&consumer_secret=" & consumerSecret

    ' ----------------------------------------------------
    ' 4) Primero buscar el producto por SKU (GET)
    ' ----------------------------------------------------
    Set httpReq = CreateObject("MSXML2.ServerXMLHTTP")

    httpReq.Open "GET", url, False
    httpReq.setRequestHeader "Content-Type", "application/json"
    httpReq.Send

    If httpReq.Status <> 200 Then
        MsgBox "Error al buscar producto en WooCommerce: " & httpReq.Status & " " & httpReq.statusText, vbCritical
        Set httpReq = Nothing
        Exit Sub
    End If

    ' ----------------------------------------------------
    ' 5) Extraer ID de producto de la respuesta
    '    (Se espera que la respuesta sea un array JSON con al menos un producto)
    ' ----------------------------------------------------
    Dim responseText, productId
    responseText = httpReq.responseText

    ' Aquí se asume que el primer objeto JSON tiene un id
    ' Se extrae usando métodos VBScript básicos (parser simple)
    productId = ""
    Dim startPos, endPos
    startPos = InStr(responseText, """id"":")
    If startPos > 0 Then
        endPos = InStr(startPos, responseText, ",")
        productId = Mid(responseText, startPos + 5, endPos - (startPos + 5))
    End If

    If productId = "" Then
        MsgBox "No se encontró ID de producto para SKU " & sku, vbCritical, "Error"
        Set httpReq = Nothing
        Exit Sub
    End If

    ' ----------------------------------------------------
    ' 6) Actualizar precio en WooCommerce
    ' ----------------------------------------------------
    Dim updateUrl
    updateUrl = "https://tu-tienda.com/wp-json/wc/v3/products/" & productId & _
                "?consumer_key=" & consumerKey & "&consumer_secret=" & consumerSecret

    httpReq.Open "PUT", updateUrl, False
    httpReq.setRequestHeader "Content-Type", "application/json"
    httpReq.Send jsonBody

    If httpReq.Status = 200 Or httpReq.Status = 201 Then
        MsgBox "Precio actualizado para SKU " & sku & " a $" & nuevoPrecio, vbInformation, "OK"
    Else
        MsgBox "Error al actualizar precio: " & httpReq.Status & " " & httpReq.statusText, vbCritical, "Error"
    End If

    Set httpReq = Nothing
    On Error GoTo 0

End Sub

¿Cómo funciona este script?

  1. Solicita el SKU al usuario (para identificar el producto).
  2. Consulta el precio actual desde la tabla prods de MyBusiness POS usando Ambiente.Connection.
  3. Hace una petición GET a la API REST de WooCommerce para buscar el producto por SKU (esto devuelve datos en JSON).
  4. Extrae el ID del producto de la respuesta.
  5. Hace una petición PUT para actualizar el precio usando MSXML2.ServerXMLHTTP.
  6. Muestra un mensaje indicando si la actualización fue exitosa o si ocurrió un error.

Requisitos para que este script funcione

✔ WooCommerce con API REST habilitada y llaves de acceso (consumer_key, consumer_secret).
✔ MyBusiness POS v20 con acceso a la base de datos y tabla prods.
✔ Permiso para ejecutar VBScript dentro del sistema (como procedimiento, evento o botón).
✔ La tienda WooCommerce debe permitir peticiones HTTPS a su API desde la red donde se ejecuta MyBusiness.


Consideraciones importantes

🔹 VBScript no tiene un parser JSON nativo, por lo que la extracción del ID es muy básica. Para JSON más complejo necesitarás librerías adicionales o manejar el texto cuidadosamente.
🔹 En producción es ideal no pasar keys directamente en la URL y usar HTTPS con autenticación más segura.
🔹 Asegúrate de que el SKU en WooCommerce realmente coincide con el campo articulo de MyBusiness.