Número de pedido de Magento

9

Tengo un problema extraño con el número de pedido en Magento.

Recientemente, cuando se realizó un pedido en mi sitio web, apareció el número de pedido 100000350, idealmente debería haber sido 100000370como mis números de pedido anteriores eran 100000369y 100000367. He adjuntado la captura de pantalla a continuación para ello

Captura de pantalla del número de pedido

Además, he verificado los registros de errores pero no he encontrado ninguna entrada. Estamos utilizando SagePay y PayPal como la pasarela de pago para ello.

¿Alguien puede guiarme en esto?

Diestro
fuente
Puedo ver claramente que tiene instalado cualquier módulo relacionado con el pedido y esto generará un problema,
Keyul Shah
No hay ningún módulo relacionado con el pedido ... el único módulo de terceros que estamos usando son Ebizmarts_SagePay, Mass_Product_Relater, TBT_Enhancegrid y Sphinix Search
Dexter
1
No es un gran problema, alguien con una cuenta de cliente casi completó un pedido hasta el punto de enviarlo para recibir el pago, se le asignó un número de pedido de ventas y luego abandonó el carrito por un período de tiempo. Sucede todo el tiempo ... Recibió el pedido, felicitaciones, completó el pedido en lugar del abandono.
Fiasco Labs
Creo que no recibiste mi pregunta
Dexter
1
@huzefam: tome esto con el equipo de diseño de Magento, o cree su propia columna de número de serie automático que puede seleccionar para su ERP en Magento SO completado. Sí, entiendo desde una perspectiva de auditoría que si faltan números de factura, hay pañuelo. Magento parece haber tomado la postura de que no todas las órdenes son válidas, por lo tanto, faltar números SO no es gran cosa. También entiendo que algunos sistemas contables, las jurisdicciones gubernamentales sienten lo mismo acerca de los pedidos de ventas y esperan tener una pista de auditoría que muestre los pedidos anulados en una secuencia en serie completa.
Fiasco Labs

Respuestas:

28

La primera vez que obtuve un número fuera de secuencia, tuvimos sorpresa y cierta consternación hasta que descubrí lo que estaba sucediendo. Tiene que ver con cómo Magento asigna los números de pedido de ventas.

Es completamente normal tener uno fuera de secuencia como ese, ser anterior a los números asignados actuales y tener un mes o más de antigüedad. El secreto es que fue un cliente registrado que no completó el pedido después de una cierta etapa crítica, regresó, inició sesión y finalmente decidió comprar.

La cotización con el número de pedido de ventas asignado usa ese número para el número de pedido de ventas.

Ahora para la explicación.

El proceso de pedido de Magento crea una cotización la primera vez que se agrega algo al carrito.

  • Para los clientes invitados, esta cotización dura mientras su sesión no haya expirado, momento en el que existe en la base de datos, pero el cliente invitado no puede recuperarla.
  • Cuando un cliente registrado inicia sesión, la cotización del carrito recibe su identificación de cliente para que el carrito dure mientras el cliente no lo vacíe y el cliente registrado pueda recuperarlo iniciando sesión en su cuenta.

En este punto, la cotización es solo un posible pedido de cliente. No tiene un número asignado porque el cliente no se ha comprometido a pagarlo.

A medida que el cliente hace clic en el botón Continuar para pagar, ellos:

  • iniciar sesión antes de comenzar el carrito
  • o si no inició sesión, se les preguntó si desean registrarse o salir como invitados.

Lo que sigue es un punto importante: los clientes que eligen registrarse en el carrito son tratados como clientes invitados hasta que se completa el pedido y llegan a la página de éxito, momento en el que se crea su cuenta y se registran. sigue siendo una cotización de cliente invitado con la pérdida de tiempo de espera del carrito de la sesión si el pedido no se completa y se muestra una página de éxito.

Con un pedido con tarjeta de crédito, sucede lo siguiente cuando se hace clic en el botón Realizar pedido .

  • La información de la tarjeta de crédito, la información de la dirección de facturación, los totales del carrito y la información del pedido están reunidos
  • Se asigna un número de pedido de ventas para esta cotización ( sales_flat_quotetabla en la reserved_order_idcolumna)
  • El paquete de datos se envía a la puerta de enlace de la tarjeta de crédito para autorizar / calcular los fondos para pagar el pedido.
  • El procesador del carrito de crédito devuelve:
    • ya sea una autorización / captura de fondos con la información de transacción apropiada que se registrará
    • o rechazo del pago con información apropiada sobre por qué se denegó la autorización / captura.
  • Con una autorización / captura exitosa, la cotización se convierte en un Pedido de ventas y si se trata de un registro de carrito, se crea la cuenta del cliente.

Si la pasarela de pago de la tarjeta de crédito rechaza la transacción de la tarjeta de crédito para cualquier cliente, y el siguiente cliente realiza un pedido exitoso , se omitirá la secuencia del número de pedido de ventas debido a que el pedido rechazado se le asignó un número de pedido de venta reservado y al siguiente pedido de cliente exitoso se le asigna el siguiente número disponible.

Para los carritos de invitados (pedidos de invitados y clientes que no se registraron correctamente en el carrito) que exceden el tiempo de espera de la sesión, este número de pedido de ventas reservado se perderá cuando la sesión caduque, dejando huecos en la secuencia del pedido de ventas.

Para los clientes que iniciaron sesión antes de hacer clic en el botón Continuar , a la cotización se le asigna una identificación de cliente, por lo que si intentan hacer un pedido y descubren que se ha rechazado, pueden regresar, iniciar sesión, encontrar que el carrito todavía tiene contenido y colocar el orden, a veces mucho más tarde (el más largo hasta la fecha fue de cuatro meses). El presupuesto utilizará el número de pedido de cliente reservado asignado, lo que dará lugar a un número de pedido de cliente fuera de secuencia que se mostrará en la pantalla de gestión de pedidos de cliente.

Laboratorios Fiasco
fuente
Para fines de verificación, fingí quedarme atrapado en el proceso de pago al no seleccionar el método de pago y finalmente cerrar el navegador (en la computadora que abrió el sitio + pago primero). y mientras tanto terminó el segundo pedido de computadoras (que debería obtener el siguiente incremento de ID). El resultado es que no salta sobre el número. Si funcionó de esa manera, habría agregado una ID no utilizada entre la orden 10 y la orden 11, que no fue así. Según su información, he intentado verificar y hacer exactamente lo que está especificando, pero no está dando el resultado.
Siva
En cambio, si un cliente falla en Payement Gateway, se mostrará como pago pendiente o cancelado, y si el pedido falla en la última parte del proceso de pago, no aparecerá en absoluto (y solo continuará con la identificación correcta en el secuencia). Así que ahora estoy confundido con esto. Por favor, ayúdame a entender por qué el número de pedido salta al azar Gracias
Siva
Gran explicación
Wolfack
2

Estaba enfrentando el mismo problema, pero fue solo cuando el servidor recibió una gran cantidad de carga. Este problema se produce porque la base de datos pasa al estado de bloqueo al convertir la cotización en orden. En una inspección adicional, descubrí que el problema era que intentaba escribir en la tabla sales_flat_order_grid dentro de la transacción justo después de insertarla en la tabla sales_flat_order. Con consultas simultáneas, provocó colisiones de bloqueo. La solución real es mover cosas de sales_flat_order_grid fuera de la transacción.

El enlace me ayudó a entender el problema.

El parche resolvió el problema por mí.

Debe eliminar la función _afterSave del Mage_Sales_Model_Abstract y agregar

public function afterCommitCallback(){
    if (!$this->getForceUpdateGridRecords()) {
         $this->_getResource()->updateGridRecords($this->getId());
     }
    parent::afterCommitCallback();
}

Avísame si te resuelve el problema.

Shaily
fuente
¿Alguien intentó este método como lo dijo Shaily ?
Siva
0

No estoy seguro, pero esto podría resolver su problema:

Por lo que creo, algo podría haber perturbado tu eav_entity_storemesa. Contiene información sobre el próximo increment_id, es decir, order_id que se utilizará. Puede haber algún módulo o código en su sistema magento que podría haberlo cambiado.

Abra esta tabla y actualice la columna increment_last_id con su último ID de pedido. Tenga cuidado, que contiene el id del incremento de los demás, así como la factura, envío, etc. Para estar seguro, sólo tiene que ir a la eav_entity_typesmesa y ver cuál es la entity_type_idde sales/order(columna entity_model). En mi magento, es 5. Así que ahora vaya a la eav_entity_storetabla y simplemente actualice el increment_id para la fila cuyo entity_type_ides 5. Puede actualizarlo directamente a través de phpmyadmin o puede ejecutar una consulta como,

update eav_entity_store set increment_last_id = 'your_last_order_id' where entity_type_id = 5; 

Tenga en cuenta que 5 es entity_type_id en mi magento para ordenar

Puede haber muchas razones para su problema, pero creo que esto podría resolverlo.

Pradeep
fuente
Gracias ... pero ya comprobé la tabla y tiene la identificación de incremento correcta
Dexter
¿Cuál es su ID de pedido máximo (no el último) en ventas administrativas -> pedidos? Ponga ese valor en la tabla que dije ... coloque una orden de prueba y verifique ...
Pradeep