Ejemplo: Planificación con Excel integrado 

Esta sección describe cómo puede usar mejor Excel integrado en su planificación de ventas y resultados.

Excel integrado soporta el escenario siguiente, por ejemplo, de forma muy eficaz:

Un coordinador de planificación es responsable de la planificación de ventas en un grupo de empresas. Éste crea modelos para las organizaciones de ventas individuales mediante las que se planifican las cifras de ventas antes de devolverlas a la planificación central para el grupo. El coordinador de planificación agrupa entonces todos los datos planificados para el grupo y los procesa.

El uso de Excel integrado significa que, en este escenario únicamente está trabajando con el Sistema R/3 el coordinador de la planificación. Para configurar el Customizing, el coordinador edita un modelo de Excel, graba copias del mismo localmente y las envía como simples ficheros Excel a las organizaciones de ventas. En las organizaciones de ventas, la planificación tiene lugar sin que Excel esté conectado con el Sistema R/3, por lo que los ficheros se devuelven a la central, donde el coordinador de planificación importa los datos planificados al Sistema R/3, mediante la función de upload del Excel.

Para este escenario, es conveniente tener la menor cantidad posible de responsabilidad técnica junto con las organizaciones de ventas locales. Asegúrese de que a los planificadores locales se les permite únicamente planificar los datos que son relevantes para ellos, en el Customizing. Además, es conveniente que las restricciones técnicas acerca de la utilización del Excel integrado afecten lo menos posible a los planificadores locales (véanse las secciones Configuración de Excel integrado y Cómo planificar la utilización del Excel integrado).

Se pueden alcanzar estos objetivos observando lo siguiente:

Dado que el upload de los datos se ejecuta desde la primera hoja de cálculo del coste, ésta debe apartarse como "hoja SAP". De este modo, no será posible procesar datos en esta hoja. En una segunda hoja de cálculo del coste, se pueden copiar y procesar los datos de cualquier posición que se elija. Deben usarse macros para garantizar que los datos sean consistentes en ambas hojas de cálculo del coste.

Conversión práctica

Primera hoja de cálculo del coste

Se usa la primera hoja de cálculo del coste para proporcionar un resumen. Se organizan los datos del mismo modo que cuando se hizo el download desde el Sistema R/3. Los objetos PA individuales se relacionan en líneas. Para separar los datos planificados de los datos de cabecera, el área de los datos planificados se sitúa dos líneas por debajo de los datos de cabecera (utilizando la función en el Sistema R/3). A título de ejemplo, se han guardado las celdas en colores.

La primera hoja de cálculo del coste está protegida como un todo.

Este procedimiento tiene la ventaja de que se pueden importar los datos sin que peligre la primera hoja de cálculo del coste. La protección de la hoja de cálculo del coste evita el riesgo de que los datos se desplacen con la función de Excel y de que se pierda la asignación al Sistema SAP utilizando Descripción de ficheros. Además, no hay ninguna manera de añadir datos que se podrían malinterpretar como un objeto PA durante el upload. Se descarta sencillamente la edición, que teóricamente podrían plantear problemas durante el upload, durante la conversión del fichero al formato ".TXT". El planificador central necesita únicamente borrar la línea de totales antes de ejecutar un upload para asegurarse de que la importación se lleva a cabo correctamente. Véase también Planificación offline y ejecución de uploads en el Sistema R/3.

Segunda hoja de cálculo del coste

Se estructura la segunda hoja de cálculo del coste de modo que los objetos PA se puedan importar y procesar individualmente. Para cambiar entre objetos PA, puede utilizar pulsadores configurados por macros.

La protección de la hoja de cálculo del coste se puede configurar con mayor flexibilidad en la segunda hoja de cálculo del coste que en la primera. Es posible eliminar la protección precisamente de las celdas en las cuales se deben introducir los datos planificados. Puede eliminar también la protección de toda la hoja de cálculo del coste a fin de posibilitar, entre otras cosas, los cálculos adicionales.

En el ejemplo actual, se pueden hacer únicamente entradas en el campo de valor para el volumen, de modo que los otros campos de valor para el objeto PA (celdas B13 a B17) permanecen protegidos. En los cálculos adicionales, es posible incluir información sobre el precio negociado, la media de descuentos de ventas y la media de costes del producto.

Se calculan todos los otros valores para los objetos PA usando las fórmulas siguientes, guardadas en las celdas respectivas:

Ingresos = cantidad * precio (contenido de celda: =B13*F27)

Reducciones de ingresos = ingresos * media de descuentos de ventas / 100 (contenido de celda: =B14*F28/100 )

Precio de coste = ingresos * media de costes del producto / 100 (contenido de celda: =B14*F29/100 )

Margen de cobertura I = ingresos - reducciones de ingresos - precio de coste (contenido de celda: =B14-B15-B16 )

Macros

Debido a la conexión a OLE (Object Linking and Embedding), cuando se trabaja con Excel, en la interfase SAP, el trabajo con macros de Visual Basic presenta ciertas restricciones. Por ejemplo, las macros no se pueden grabar. Asimismo, no hay ningún elemento de operación disponible (que inicia normalmente las macros). En su lugar, deberá insertar objetos gráficos en Excel y utilizarlos para guardar las macros (los rectángulos grises de la representación superior).

El ejemplo anterior contiene las macros siguientes:

Definición de variables globales:
Public firstline As Integer
Public lastline As Integer
Public actline As Integer

La macro initialize se ejecuta en cuanto se activa la segunda hoja de cálculo del coste deudor. Primero, se usan las asignaciones variables como la línea inicial para determinar el número 14 (la primera línea de datos en la primera hoja de cálculo del coste). A continuación, se llama la macro get_item y se usa para leer y copiar los datos en esta línea. Se calcula también el número total de líneas de datos. El sistema supone que la última línea es la línea de totales y, por lo tanto, no comprende los registros de datos que deben procesarse. Por lo tanto no se incluye la última línea en el cálculo.
Sub initialize()
  Dim counter As Integer
  firstline = 14
  actline = firstline
  Call get_item
  counter = 14
  While Sheets(1).Cells(counter + 2, 1).Value <> initial
    counter = counter + 1
  Wend
  lastline = counter
End Sub

La macro get_item lee los datos de una línea de la primera hoja de cálculo del coste y, en primer lugar, los copia en las celdas auxiliares de la segunda hoja. En la codificación, estas celdas presentan 100 como segundo valor (en la hoja de cálculo del coste de arriba, las celdas CV13 a CV17). Pueden colocarse en cualquier parte de la hoja de cálculo del coste u ocultarse. En la celda, únicamente se coloca el valor de cantidad, pues el objeto PA puede aceptar entradas. Si también fuese necesario transferir los otros datos directamente a los campos de valor del objeto PA, se sobrescribirían las fórmulas guardadas en las celdas (mencionadas anteriormente). Para que estas celdas también contengan datos, las tres celdas necesarias para las fórmulas (las celdas utilizadas para los cálculos adicionales) deben tener introducidos aquellos valores utilizados en la fórmula para llegar a los valores correspondientes de la primera hoja de cálculo del coste. A tal fin, el resultado de cada fórmula invertida se escribe en las celdas para cálculos adicionales (véase las últimas líneas de la macro).
Sub get_item()
  Sheets(2).Cells(9, 2).Value = Sheets(1).Cells(actline, 1).Value
  Sheets(2).Cells(9, 4).Value = Sheets(1).Cells(actline, 2).Value
  Sheets(2).Cells(10, 2).Value = Sheets(1).Cells(actline, 3).Value
  Sheets(2).Cells(10, 4).Value = Sheets(1).Cells(actline, 4).Value
  Sheets(2).Cells(13, 100).Value = Sheets(1).Cells(actline, 5).Value
  Sheets(2).Cells(13, 2).Value = Sheets(1).Cells(actline, 5).Value
  Sheets(2).Cells(13, 3).Value = Sheets(1).Cells(actline, 6).Value
  Sheets(2).Cells(14, 100).Value = Sheets(1).Cells(actline, 7).Value
  Sheets(2).Cells(15, 100).Value = Sheets(1).Cells(actline, 8).Value
  Sheets(2).Cells(16, 100).Value = Sheets(1).Cells(actline, 9).Value
  Sheets(2).Cells(17, 100).Value = Sheets(1).Cells(actline, 10).Value
  Sheets(2).Cells(27, 6).Value = Sheets(2).Cells(14, 100).Value / Sheets(2).Cells(13, 100).Value
  Sheets(2).Cells(28, 6).Value = (Sheets(2).Cells(15, 100).Value / Sheets(2).Cells(14, 100).Value) * 100
  Sheets(2).Cells(29, 6).Value = (Sheets(2).Cells(16, 100).Value / Sheets(2).Cells(14, 100).Value) * 100
End Sub

La macro update_item copia cualquier dato, modificado o no, para el objeto PA en la segunda hoja de cálculo del coste y lo transfiere de vuelta a la primera hoja de cálculo del coste.
Sub update_item()
  Sheets(1).Cells(actline, 1).Value = Sheets(2).Cells(9, 2).Value
  Sheets(1).Cells(actline, 2).Value = Sheets(2).Cells(9, 4).Value
  Sheets(1).Cells(actline, 3).Value = Sheets(2).Cells(10, 2).Value
  Sheets(1).Cells(actline, 4).Value = Sheets(2).Cells(10, 4).Value
  Sheets(1).Cells(actline, 5).Value = Sheets(2).Cells(13, 2).Value
  Sheets(1).Cells(actline, 6).Value = Sheets(2).Cells(13, 3).Value
  Sheets(1).Cells(actline, 7).Value = Sheets(2).Cells(14, 2).Value
  Sheets(1).Cells(actline, 8).Value = Sheets(2).Cells(15, 2).Value
  Sheets(1).Cells(actline, 9).Value = Sheets(2).Cells(16, 2).Value
  Sheets(1).Cells(actline, 10).Value = Sheets(2).Cells(17, 2).Value
End Sub

La macro first_item se llama seleccionando First.
Sub first_item()
  Call update_item
  Call initialize
End Sub

La macro next_item se llama seleccionando Next.
Sub next_item()
  Call update_item
  actline = actline + 1
  If actline > lastline Then
    MsgBox ("Last item!")
    actline = actline -1
  Else
    Call get_item
  End If
End Sub

La macro previous_item se llama seleccionando Previous.
Sub previous_item()
  Call update_item
  actline = actline - 1
  If actline < firstline Then
    MsgBox ("First item!")
    actline = actline + 1
  Else
    Call get_item
  End If
End Sub

La macro last_item se llama seleccionando Last.
Sub last_item()
  Call update_item
  actline = lastline
  Call get_item
End Sub

Se aconseja crear macros primero en Excel y utilizar después el Customizing para copiarlas en el modelo de hoja de cálculo del coste. De este modo, puede volver siempre a una versión de sus macros. De lo contrario, si una macro contiene un error o si no se puede ejecutar una sentencia ABAP con OLE, puede que ya no sea posible abrir el modelo de hoja de cálculo del coste, grabado en Excel integrado.