Modificación de Pedidos de Ventas con el Programa MV45AFZZ

El programa MV45AFZZ es uno de los elementos más utilizados para modificar la lógica estándar relacionada con los pedidos de ventas en SAP, específicamente en las transacciones VA01 (Crear pedido de ventas), VA02 (Modificar pedido de ventas) y VA03 (Visualizar pedido de ventas). A través de los forms disponibles en este programa, los desarrolladores ABAP pueden agregar lógicas personalizadas que se ejecutan en diferentes momentos del procesamiento de pedidos de ventas.

Este artículo está dirigido a consultores SAP junior que buscan comprender cómo se pueden modificar los pedidos de ventas mediante el programa MV45AFZZ, comentando cada form disponible y proporcionando ejemplos prácticos que ayuden a implementar soluciones personalizadas.

Índice de Contenidos

Introducción al Programa MV45AFZZ

El programa MV45AFZZ está diseñado para proporcionar puntos de ampliación (user exits) donde se puede introducir lógica de negocio adicional sin modificar el código estándar de SAP. Esto asegura que las personalizaciones puedan ser mantenidas de manera más fácil y no se vean afectadas por futuras actualizaciones del sistema.

Las modificaciones en este programa se realizan a través de forms que permiten agregar código ABAP en momentos clave del ciclo de vida de los pedidos de ventas. Estos momentos incluyen la creación, modificación, y grabación de datos de los pedidos.

Principales FORM en el Programa MV45AFZZ

1. FORM USEREXIT_MOVE_FIELD_TO_VBAP

Este form se utiliza para modificar los valores que se copian a la tabla VBAP (tabla de posiciones del pedido de ventas) cuando se crea o modifica un pedido. Aquí es donde se pueden asignar valores personalizados o modificar datos provenientes del maestro de materiales o clientes antes de que se almacenen en la tabla de posiciones.

Uso Común:

  • Modificar o asignar valores en la tabla de posiciones antes de guardar el pedido.
  • Realizar cálculos basados en condiciones especiales y asignarlos a las posiciones del pedido.

Ejemplo de Código:

FORM userexit_move_field_to_vbap.

    » Asignar un campo de texto personalizado para productos especiales
IF vbap-matnr = ‘MATERIAL001’.
vbap-zzcampo_texto = ‘Producto con tratamiento especial’.
ENDIF.

ENDFORM.

En este ejemplo, se asigna un valor personalizado al campo zzcampo_texto si el material es «MATERIAL001». Esto es útil para añadir información adicional específica del producto al pedido.

2. FORM USEREXIT_MOVE_FIELD_TO_VBKD

Este form permite modificar los valores en la tabla VBKD (tabla de datos de cabecera de ventas relacionados con clientes) antes de que los datos se graben en el pedido de ventas.

Uso Común:

  • Personalizar datos a nivel de cabecera del pedido de ventas.
  • Ajustar información de condiciones de ventas, como los plazos de entrega, tipo de ventas o región.

Ejemplo de Código:

FORM userexit_move_field_to_vbkd.

    » Ajustar el campo de prioridad del pedido basado en el tipo de cliente
IF kna1-kunnr = ‘1000’. » Cliente VIP
vbkd-prio_urg = ‘1’. » Alta prioridad
ELSE.
vbkd-prio_urg = ‘3’. » Baja prioridad
ENDIF.

ENDFORM.

Aquí, el código asigna una prioridad alta o baja al pedido dependiendo del tipo de cliente. Esta lógica se puede utilizar para asegurar que ciertos clientes tengan un tratamiento preferencial.

3. FORM USEREXIT_SAVE_DOCUMENT_PREPARE

Este form se ejecuta antes de que los datos del pedido de ventas sean guardados en la base de datos. Es uno de los puntos de ampliación más usados, ya que permite realizar validaciones finales, ajustes o incluso abortar la creación o modificación del pedido si no se cumplen ciertas condiciones.

Uso Común:

  • Validar los datos antes de que el pedido se grabe.
  • Modificar campos específicos antes de que se realice la grabación en la base de datos.
  • Calcular y asignar valores dinámicos.

Ejemplo de Código:

FORM userexit_save_document_prepare.

» Validar si el centro de ventas es correcto antes de guardar el pedido
IF vbap-werks = ‘0001’. » Centro no permitido
MESSAGE e001(zsd_error) WITH ‘Centro no permitido para este pedido’.
» Cancelar la grabación del pedido si el centro es incorrecto
ENDIF.

» Calcular un campo de descuento personalizado basado en cantidad
LOOP AT xvbap.
IF xvbap-kwmeng > 100. » Si la cantidad es mayor a 100
xvbap-zzdescuento = ’10’. » Aplicar un descuento del 10%
ENDIF.
ENDLOOP.

ENDFORM.

Este ejemplo muestra dos casos de uso: primero, valida que el centro de ventas no sea «0001», y si lo es, muestra un mensaje de error y cancela el proceso de guardado. Segundo, se aplica un descuento del 10% si la cantidad pedida es mayor a 100 unidades.

4. FORM USEREXIT_READ_DOCUMENT

Este form se utiliza cuando se leen los datos de un pedido de ventas, ya sea en modo de visualización o modificación. Es útil si necesitas modificar cómo se presentan los datos al usuario sin cambiar los valores almacenados en la base de datos.

Uso Común:

  • Ajustar la visualización de campos cuando se muestran los datos del pedido.
  • Modificar o recalcular campos dinámicamente sin cambiar el valor original en la base de datos.

Ejemplo de Código:

FORM userexit_read_document.

» Mostrar un valor de campo modificado para pedidos específicos
IF vbak-auart = ‘ZORD’. » Si el tipo de pedido es ZORD (personalizado)
vbap-arktx = ‘Pedido con entrega urgente’.
ENDIF.

ENDFORM.

5. FORM USEREXIT_SAVE_DOCUMENT

Este form se ejecuta después de que el pedido de ventas se ha guardado en la base de datos. Es útil para realizar acciones adicionales, como actualizaciones en otras tablas, envío de notificaciones o registro de logs para auditoría.

Uso Común:

  • Ejecutar procesos adicionales después de guardar el pedido.
  • Registrar cambios en logs de auditoría.
  • Actualizar otras tablas o datos relacionados.

Ejemplo de Código:

FORM userexit_save_document.

» Registrar log personalizado después de guardar el pedido
PERFORM registrar_log_pedido USING vbak-vbeln sy-datum sy-uzeit.

ENDFORM.

6. FORM USEREXIT_PRICING_PREPARE_TKOMK y USEREXIT_PRICING_PREPARE_TKOMP

Estos forms se utilizan cuando se realiza la determinación de precios en un pedido de ventas. Aquí puedes modificar las estructuras TKOMK (cabecera de condiciones de precios) y TKOMP (posiciones de condiciones de precios) antes de que se calcule el precio del pedido.

Uso Común:

  • Ajustar la lógica de precios para incluir descuentos, recargos o precios especiales.
  • Modificar datos relevantes para la determinación de precios antes de que se calcule el total.

Ejemplo de Código:

FORM userexit_pricing_prepare_tkomp.

» Aplicar un descuento especial si el cliente es VIP
IF tkomp-kunnr = ‘1000’. » Cliente VIP
tkomp-kzwi1 = tkomp-kzwi1 * 0.90. » Aplicar un descuento del 10%
ENDIF.

ENDFORM.

Ejemplo Completo: Caso de Uso en VA02 (Modificación de Pedido)

A continuación, se presenta un ejemplo más detallado de cómo usar varios forms en MV45AFZZ para realizar una modificación completa en un pedido de ventas.

Requisito: Aplicar un Descuento Automático Basado en la Cantidad y Validar el Centro de Ventas

  1. FORM USEREXIT_SAVE_DOCUMENT_PREPARE:
    • Aplicar un descuento del 5% si la cantidad pedida supera las 50 unidades.
    • Validar que el centro de ventas sea correcto.

Código:

FORM userexit_save_document_prepare.

» Validar que el centro de ventas no sea 0001
IF vbap-werks = ‘0001’.
MESSAGE e001(zsd_error) WITH ‘Centro de ventas 0001 no está permitido’.
EXIT.
ENDIF.

» Aplicar descuento si la cantidad pedida es mayor a 50 unidades
LOOP AT xvbap.
IF xvbap-kwmeng > 50.
xvbap-zzdescuento = ‘5’. » Descuento del 5%
ENDIF.
ENDLOOP.

ENDFORM.

En este ejemplo, validamos que el centro de ventas no sea «0001» y, si lo es, se cancela la modificación del pedido. Además, si la cantidad supera las 50 unidades, se aplica automáticamente un descuento del 5%.

Conclusión

El programa MV45AFZZ ofrece una amplia gama de posibilidades para personalizar el comportamiento de los pedidos de ventas en las transacciones VA01, VA02 y VA03. A través de sus diversos forms, los consultores SAP pueden ajustar validaciones, cálculos de precios, asignaciones de valores y otros procesos clave en el ciclo de vida de un pedido de ventas, todo sin modificar el código estándar de SAP.

Para los consultores SAP junior, dominar este programa es esencial para implementar soluciones que se ajusten a los requisitos de negocio de cada cliente, manteniendo la flexibilidad y la capacidad de adaptación del sistema. ¡Sigue explorando estas herramientas y verás cómo tu capacidad para personalizar SAP se expande considerablemente!

Deja un comentario

¡Contesta esta pregunta!

¿Cuál es la capital de España?

  1.    Madrid
  2.    Salamanca
  3.    Barcelona
  4.    Gandía
  5.    Segovia
  6.    Valencia
Simplemente seleccione las respuestas correctas entre las propuestas

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.> ACEPTAR

Aviso de cookies

Pin It on Pinterest

Share This