Truco 69. Numeración de Facturas Personalizada. Compras (MIRO) y Ventas (VF01/VF04).


Hoy estamos de celebración por varios motivos. Por un lado, empiezo las vacaciones después de un año de mucho trabajo y muchos cambios. Pero orgulloso del camino andado. Por otro lado,  estamos de cumpleaños, pues este post cumple el número CIEN desde que en noviembre de 2010 empece con el blog Saptricks como un lugar de trabajo personal donde documentar tantas y tantas cosas de Sap imposibles de recordar en detalle sin mas y otros temas que tenía que investigar en un momento dado y de las que quería dejar constancia.

Y la vez que llegamos a la publicación cien, estamos a punto de llegar al millón de visitas (en unos días estaremos ahí), en el orden de 40 mil al mes. Toda una alegría y un reto, no es fácil dedicarle el tiempo que a uno le gustaría, a escribir cosas (tengo mil ideas en la cabeza), a contestar a todas vuestras preguntas. Se hace lo que se puede. Como os digo, todo un placer, gracias a los más de 1.100 seguidores por vuestro interés. Y lo más curioso, en mi vida profesional he conocido este año a unas cuantas personas que eran seguidores de mi blog, y nos hemos desvirtualizado.

En nuestro truco de hoy vamos a hablar de un problema frecuente que suele surgir en los proyectos de Sap: la numeración de documentos de factura por estándar es bastante limitada, tanto en la parte de compras (MIRO), como en la de ventas (VF01/VF04). Pero, al menos, Sap nos deja la puerta abierta con las exits para personalizar el sistema y adaptarlo a lo que nos pida nuestro cliente.

 Numeración de facturas en Compras.

Por estándar, en el registro de facturas de compras solo podemos utilizar dos rangos de numeración. Uno para el registro de facturas manual (MIRO) y otro para el registro de facturas automático (que incluye la anulación de facturas, autofacturación, liquidación del plan de facturas o recepción de facturas por EDI).

numeracion_facturas1

La configuración de los rangos de números la realizamos en la transacción OMRJ. A continuación, asignamos los rangos por la actividad que hemos indicado (ruta de customizing Gestión de materiales –> Compras –> Verificación de facturas de logística –> Facturas recibida –> Asignación de números –> Asignación de números para documentos de logística –> Asignar rango de números a actividad).

numeracion_facturas2

Como veis, esto da pocas posiblidades para realizar, por ejemplo, una numeración por Sociedad (podría ser el criterio habitual más solicitado) o por tipo de factura (factura, abono, carga posterior o descargo posterior; o diferenciada por proceso).

Para solucionar esto, Sap nos deja la puerta abierta con la ampliación LMR1M003, que gestionaremos con un proyecto de ampliación de la forma habitual con la transacción CMOD. En este post anterior teneís un ejemplo de todos los pasos necesarios para crear un proyecto de ampliación por si los desconocéis.

La exit usa el módulo de función EXIT_SAPLMRME_003 y podemos incluir nuestro propio código en el include ZXM08U14. Tenemos disponibles la mayoría de campos de la cabecera de la factura para determinar nuestro lógica de numeración (Sociedad, Transacción, Operación, Fechas, Proveedor, etc), así como la información de las posiciones por si fuera necesario analizarlas.

La configuración sería la siguiente:


1) Habremos de definir los rangos de números a utilizar con la transacción OMRJ.

numeracion_facturas32) Posteriormente, en el código abap de la exit devolveremos en el parámetro E_NUMKR el rango de números a utilizar (de los que acabamos de definir).


En mi ejemplo, he creado una tabla Z donde el usuario asigna, por sociedad, el rango de números a utilizar. Posteriormente, en el código de la exit leemos la sociedad de a factura, recuperamos el rango de números. Requerimiento cumplido.

numeracion_facturas4

Como podéis ver, una forma sencilla de personalizar el comportamiento de la numeración. Tener en cuenta que la numeración afecta tanto a la grabación de las facturas, como las preliminares o los documentos retenidos.

El código Abap introducido en la exit sería el siguiente:

numeracion_facturas5

Numeración de facturas en Ventas.

En la numeración de las facturas de ventas nos ocurre algo parecido. Los rangos de números se definen con la transacción VN01. Posteriormente, estos rangos se asocian por Clase de Documento de Factura, parametrización que se realiza en la transacción VOFA.

numeracion_facturas6

En este caso, tenemos igualmente una puerta abierta para personalizar la numeración con la exits de ventas. Aquí no se utilizan los proyectos de ampliación, sino unos incudes estandar que Sap nos deja “preparados” para introducir nuestro código. Realmente son una modificación del estandar. En nuestro caso, usaremos el include RV60AFZZ, en el form USEREXIT_NUMBER_RANGE.

En este caso, la lógica a aplicar sería la misma. En primer lugar, crearíamos los rangos de números a utilizar de la forma usual, con la transacción VN01. A continuación, en la exit determinaríamos la programación para determinar el rango a utilizar según la información de la factura a crear (Sociedad, Organización de Ventas, etc), y devolveremos el valor del rango de números a utilizar en la variable US_RANGE_INTERN.

Es usual utilizar esta misma exit para realizar controles de la fecha de facturación. Por ejemplo, por temas legales, en España un número de factura no puede tener una fecha de factura anterior a una factura emitida previamente.

numeracion_facturas7

En la exit se podría controlar este aspecto y otros similares a través de tablas Z: una tabla Z para definir el rango de números a usar (por Sociedad, Organización de Ventas, o por el criterio deseado) y otra tabla Z donde ir guardándonos la fecha de la última factura por rango de numeración para ir realizando el control, generando un  mensaje de error desde el mismo include.

TIP: podemos tener la misma problemática para la numeración de pedidos de ventas. En este caso, la asignación a las clases de documento se realiza con la transacción VOV8. Podemos personalizar igualmente su funcionamiento utilizando el include MV45AFZZ y el  form USEREXIT_NUMBER_RANGE. Recordar que tanto los números de pedidos de ventas como de facturas comparten los rangos de números (que definimos como ya comentamos con la transacción VN01). Habremos de tener en cuenta este aspecto a la hora de definir los rangos y la disponibilidad de intervalos de cada uno de ellos.

¡¡¡Buen verano y feliz MILLON!!!

numeracion_facturas8

Anuncios
Esta entrada fue publicada en Formacion, SAP MM, Sap SD y etiquetada , , , , , . Guarda el enlace permanente.

21 respuestas a Truco 69. Numeración de Facturas Personalizada. Compras (MIRO) y Ventas (VF01/VF04).

  1. No soy MM o SD, soy Abap, pero ,igualmente un comentario acertado en reuniones de trabajo con el cliente, donde aun cuando un funcional esta presente no recuerda una solución como esta, nos deja bien a todos… !!! Gracias por compartir…Felices Vacaciones.

  2. Elizabeth dijo:

    Felicitaciones Roberto!!!!!!!!!!! Gracias por compartir tu conocimiento!!!!! Felices vacaciones!!!

    Un abrazo desde Uruguay!!!

  3. Julio dijo:

    Roberto,
    Mil gracias por tus aportes, siempre tan claros y acertados.
    Felicitaciones por el proximo millon de visitantes.
    Saludos, desde Lima PERU
    Julio

  4. mikevincci . dijo:

    Estimado Roberto:

    Necesito tu consejo sobre los productos Winshuttle (query, transaction, etc).

    Dime si los has probado, precio, etc.

    Muchas gracias por todo.

    Saludos Miguel de Cabo

  5. David Morales dijo:

    Muchas gracias por tus apuntes….muy prácticos y de fácil entendimiento, en hora buena por los logros obtenidos 1 millón de visitas 1100 seguidores y el cumpleaños….

  6. David Morales dijo:

    saludos desde Cali, Colombia

  7. Rayo, Maria Eugenia dijo:

    Señor Roberto tengo una consulta tenemos el caso de una empresa que vende normalmente a sus clientes, pero además tiene un tienda y vende de contado, como debe ser el manejo de estas ventas en SAP , ya que se quiere que descargue el inventario, realice la entrega, que facture y que reciba el pago en la cuenta de caja, que se debe hacer en SAP para que este proceso se realicen en un solo paso??

    Gracias,

    Maria Eugenia Rayo Varela
    Analista departamento de sistemas

  8. Patricia Aguilar dijo:

    Felicidades !
    y muchas gracias por compartir tus notas, son muy utiles y de gran ayuda!

  9. Leonardo Gobbi dijo:

    Existe alguna manera de cambiarle el plazo a una factura de ventas ya contabilizada? Ej: algo que por error se cargó a 30 dias y debía ir a 90.
    Agradezco ayuda!

  10. Osvaldo dijo:

    Hola Roberto,

    Estoy realizando una sustitucion FI (obbh), para los documentos financieros que se realizan por SD, y se toma el documento completo con la BSEG, cuando realizo el proceso manual con la fb01 me funciona la sustitucion, pero cuando la realizo desde el proceso de compras no me realiza ningun cambio. Que debo tener en cuenta para que realice el cambio en este tipo de procesos.

    Muchas Gracias

    Osvaldo

  11. Homero Pérez dijo:

    Hola Roberto, estoy por iniciar la configuración contable de inventarios. ¿Podrias darme una guía de la mejor forma de hacerlo a fin de no llenar tablas contables que a lo mejpr no se utilizan?
    Gracias por tu colaboración

  12. Hola estimado Roberto.
    Soy consultor Abap.
    Tus aportes sin duda que nos han y siguen ayudando.

    Ahora, quisiera que me ayudaras en lo siguiente.

    Un cliente requiere asignar el numero de factura VBRK-VBELN (generado por el sistema) concatenado con el año de la fecha de la misma factura, p.e: nro de factura/año (9000001/2016) al campo Asignación (VBRK-ZUONR) al momento de generar la factura. Alguna vez haz hecho esto? Sabrás de algún exit que pueda implementar para alcanzar lo anterior expuesto?

    Quedo atento a tus comentarios.

    • Hola, si se puede.

      Con la exit EXIT_SAPLV60B_008 podemos modificar las estructuras de transferencia ACCCR, ACCIT y ACCHD. Se ha de crear un proyecto de ampliación (transaccion CMOD) que incluya el componente SDVFX008 e introducir el código abap zxvvfu08.

      Saludos

  13. Carmen Cardozo dijo:

    Hola Roberto

    ¿Podría hacerse algo similar con los documentos de materiales al hacer entradas a almacén? Nuestro requerimiento es que funcione el rango estándar para unas sociedades y otro rango nuevo para otras sociedades. El único inconveniente que encuentro con lo que tu planteas, es que no tengo la opción de crear como tal otro “N°” de rango para diferenciar los dos rangos por lo que siempre utilizaría el 02 por ejemplo y lo podría diferenciar sólo por el “Año” en cada rango. ¿La Exit podría asignarlo de esta forma desde una tabla Z?

    Gracias de antemano.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s