Aloquevamos.com Blog, ocasionalmente…

18Apr/120

SAP – Dar Salida a Mensajes de MM

Posted by Canyita

En este artículo se explican las principales transacciones para Impresión de mensajes de Compras dentro del módulo de MM de SAP.

Los mensajes de salida se aplican sobre infinidad de objetos, en el caso de compras solemos ver mensajes de salida en los siguientes objetos:

  • Planes de Entrega
  • Repartos de Planes de Entrega
  • Solicitudes de Pedido de Compras
  • Pedidos de Compras
  • Movimientos de Mercancías
  • Facturación Logística

Las siguientes transacciones estándar nos permiten realizar la salida de mensajes por primera vez o repetir la salida de mensajes que ya se han imprimido. Generalmente en SAP, la salida de los mensajes se configura para que se realiza al Grabar el objeto tratado (Pedido, Solicitud, etc.), pero cuando estamos realizando el desarrollo de los mensajes a través de formularios SAPScript, Smartform o PDFForm, es necesario poder probar en repetidas ocasiones la impresión, para poder validar correctamente el formato y datos de dicho formulario asociado a un mensaje.

Lista de transacciones para dar Salida a Mensajes:

  • MR90 --> para Facturas de Compras.
  • MB90 --> para Documentos de Movimiento de Mercancías.
  • ME9L --> para Pedidos de Compras y otros tipos de documentos.
  • ME9F --> para Planes de Entregas y otros tipos de documentos.

En cada transacción deberemos revisar los valores posibles de los campos de Aplicación y Clase de Mensajes para ver que es este el programa que aplica para realizar la salida de mensajes.

Deberemos jugar con el campo de Modo de Procesamiento para poder obtener resultados en el listado de mensajes de salida a imprimir o previsualizar. Los valores del modo de procesamiento son:

  • 1 - Primer Proceso
  • 2 - Proceso de repetición
  • 3 - Proceso con errores

Generalmente, buscaremos objetos que tengan clases de mensajes que ya se han imprimido, y marcaremos el Proceso de Repetición para realizar pruebas de funcionamiento del Formulario.

Cabe destacar, que en las transacciones de impresión de movimientos y las otras en algún caso, suelen validar la autorización sobre Centros, es decir, el usuario que imprime, debe estar autorizado en el Centro al que pertenece el objeto o línea del objeto tratado.

5Apr/120

ABAP OO – Tutorial ALV Simple

Posted by Canyita

Este tutorial explica y demuestra mediante un ejemplo el uso de ALV's en desarrollos a medida en el Sistema SAP. En mi caso prefiero los ALV Orientados a Objetos y además añado una capa de Objetos que
representan y permiten la interacción entre la visualización y los datos de la base de datos. Para el tutorial utilizaré el modelo de datos de Test de Vuelos y Aerolíneas (Tablas SFLIGHT, ...) que SAP proporciona de forma estándar como DEMO para las pruebas en desarrollos.

Para rellenar el modelo DEMO de tablas de SAP con datos podemos usar el programa estándar SAPBC_DATA_GENERATOR, detallado en la documentación de SAP que podemor ver en este enlace.

El siguiente diagrama muestra la forma de separar los datos mediante objetos que aplico en mis desarrollos ABAP.

Diagrama Capa Modelo de Datos

29Mar/120

Upload your data disks to Cloudstack

Posted by Chiru

I had these qcow2 volumes from test I did in the past that I wanted to import into Cloudstack. In CS you have the option to import ISO and templates via http download from a provided link, but you cannot do that with volumes. Actually I'd love to see this feature with snapshots, so once you have uploaded a snapshot it can be converted to a disk or to a template, but that's not possible by now.

So, this is what I did to import my existing volumes into Cloudstack

29Mar/120

Añadir tus discos de datos a Cloudstack

Posted by Chiru

Tenía por ahí unos cuantos volúmenes en formato qcow2 de unas pruebas que estuve haciendo con Proxmox. Unos corresponden a una VM con Ubuntu y Orchestra server para provisionar servidores vía PXE, y tenía la intención de migrarlas al Cloudstack (CS + KVM) para provar si una VM se puede arrancar por red.

En este caso, añadir el volumen correspondiente al SO es sencillo. Basta con ponerlo en un servidor http y pasarle el link a la opción "Add template" de cloudstack. Él solito lo descargará y lo pondrá a punto. Con ese nuevo template podremos arrancar el servidor. ¿Pero que pasa si el servidor tiene volúmenes de datos adicionales?

21Mar/120

Clúster de PostgreSQL en Linux

Posted by Chiru

Basado en hechos reales. El tema es que tuve que montar un clúster activo/pasivo de PostgreSQL con Corosync/Pacemaker y DRBD. Cómo es de esas cosas que me gustan y no hago a menudo, lo apuntaré aquí por si os apetece usarlo. El trabajo está basado en un howto que encontré hace tiempo, pero no puedo encontrar el enlace (si alguien lo reconoce que avise, que lo actualizaré).

En este ejemplo, los sistemas usados son SLES 11 SP1, pero es aplicable a cualquier distribución (sólo tendréis que vigilar con los nombres de los paquetes).

¿Listos? Púes coged un café que es larguito...

21Mar/120

Welcome to Technorati

Posted by Administrador

Here it is!

HHEJXBAUW25Z

 

Archivado en: miscelanea Nadie dijo nada
20Mar/120

Mostrar Errores Estándar en un POPUP

Posted by Canyita

Cada vez que ejecutamos un módulo de funciones estándar es habitual que dicho módulo retorne una tabla de mensajes. Esta tabla de mensajes nos indicará si la ejecución ha ido bien o en caso contrario los errores que se han producido.

En nuestros programas es habitual que tengamos que mostrar un log de errores a los usuarios una vez han ejecutado una funcionalidad. Como no queremos construir una ventana a medida para mostrar los errores, podemos utilizar la siguiente función estándar que hace dicho trabajo por nosotros:

  C14ALD_BAPIRET2_SHOW

Si rellenamos la tabla de tipo BAPIRET2, y ejecutamos el módulo de funciones podremos ver el siguiente resultado:

19Mar/120

Ayuda Z para un campo en una Screen

Posted by Canyita

Si necesitamos añadir una ayuda para búsqueda sobre un campo que facilite la entrada de datos a los usuarios, pero los datos que necesitamos añadir para la selección los queremos fijar nosotros, podemos usar el siguiente código ABAP:

* Declaraciones de Variables
****************************
 
TYPES: BEGIN OF ty_fields.
         INCLUDE STRUCTURE help_value.
TYPES: END OF ty_fields.
 
TYPES: BEGIN OF ty_helptab,
         feld(50),
       END OF ty_helptab.
 
DATA: it_centro       TYPE TABLE OF t001w,
      et_centtro      LIKE LINE OF it_centro,
      it_fields       TYPE TABLE OF ty_fields,
      et_fields       LIKE LINE OF it_fields,
      it_helptab      TYPE TABLE OF ty_helptab,
      et_helptab      LIKE LINE OF it_helptab.
 
* Variables para Tablas de Información (F1) de Ayuda de Usuario.
DATA: gv_tabla_f1 LIKE help_info-tabname,
      gv_campo_f1 LIKE help_info-fieldname.
 
* Asociar Ayuda a un Campo de la Pantalla de Selección
***************************************************************
* Variable de la Pantalla para la Ayuda
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.
 
PERFORM prepara_ayuda_centro_z.
 
PERFORM ayuda USING    'Centros de 0 a 100'
              CHANGING p_centro.
 
* Rutina de Carga de Datos de la Ayuda
***************************************************************
 
FORM prepara_ayuda_centro_z.
 
* Campo que se muestra en el F1
  gv_campo_f1 = 'WERKS'.
  gv_tabla_f1 = 'T001W'.
 
  FREE it_ihelp_fields.
  CLEAR: et_fields, it_fields[].
 
  et_fields-tabname    = 'T001W'.    " Tabla de referencia del campo
  et_fields-fieldname  = 'WERKS'.    " Campo para mostrar en la ayuda
  et_fields-selectflag = 'X'.        " Flag de Retorno del Campo
  APPEND et_fields TO it_fields.
 
* Para mostrar otro campo, en este caso la Descripción
  et_fields-tabname    = 'T001W'.    " Tabla de referencia del campo
  et_fields-fieldname  = 'NAME1'.    " Descripción
  et_fields-selectflag = ''.         " Sin Retorno
  APPEND et_fields TO it_fields.
 
  CLEAR : it_helptab[], it_centro[].
  SELECT werks name1 FROM t001w
    INTO CORRESPONDING FIELDS OF TABLE it_centro
    WHERE werks BETWEEN '0' AND '100'
    ORDER BY werks ASCENDING.
 
* Rellena la Tabla de Valores de uno a uno en orden
  LOOP AT it_centro INTO et_centro.
 
    et_helptab-feld = et_centro-werks.
    APPEND it_helptab.
 
    et_helptab-feld = et_centro-name1.
    APPEND et_helptab TO it_helptab.
 
  ENDLOOP.
 
ENDFORM.
 
* Rutina Lanzador de la Ayuda
***************************************************************
 
FORM ayuda USING    p_titulo
           CHANGING p_return.
 
  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
    EXPORTING
      TITEL = p_titulo
      fieldname = gv_campo_f1
      tabname = gv_tabla_f1
    IMPORTING
      SELECT_VALUE = p_return
    TABLES
      FIELDS = it_fields
      VALUETAB = it_helptab
    EXCEPTIONS
      FIELD_NOT_IN_DDIC = 1
      MORE_THEN_ONE_SELECTFIELD = 2
      NO_SELECTFIELD = 3
      OTHERS = 4.
 
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
 
ENDFORM.

19Mar/120

Convertir Importes de Carácter a Decimal

Posted by Canyita

La conversión de importes en ABAP es un poco liosa y se generan dumps a menudo debido a una mala conversión de importes recibidos en formato carácter o String. En ABAP los importes se guardan en un tipo CURRENCY, es decir, un número decimal.

Si queremos convertir de formato carácter a un formato CURRENCY, como por ejemplo el elemento de datos DMBTR de la tabla estándar de posiciones contables FI de SAP podemos usar el siguiente código para convertir las variables:

" Quito el separador
REPLACE ALL OCCURRENCES OF '.' IN string_importe WITH space.
 
" Elimino Posibles Espacios
CONDENSE string_importe NO-GAPS.
 
" Convierto a DMBTR que es una variable ABAP de tipo decimal
" para importes, concretamente de posiciones de documentos FI
PACK string_importe TO dmbtr.

 

27Jan/120

Mirror de repositorios con apt-mirror

Posted by Chiru

Respecto a lo que os comentaba el otro dia, el provisionamiento de servidores con Cobbler, me di cuenta de una cosita.

Al instalar un CentOS, la instalación era realmente muy rápida (un sistema base). Pero, al instalar Ubuntu, los tiempos de descarga se notaban. No es que sea un problema exasperante, pero si que era notablemente superior.

Para solucionar este tema, he visto un par de opciones que me he decidido a probar. Una de ellas es apt-mirror. Básicamente lo que hace es crear un mirror local de los repositorios Debian / Ubuntu que le configuremos. De ese modo, podemos usar tal mirror para las instalaciones de manera que la descarga de contenidos sea a velocidades de LAN.

23Jan/120

Provisionamiento de servidores Linux

Posted by Chiru

Una de las últimas cosas que me miré en UPCnet y que intenté entender fué el uso de cobbler para el aprovisionamiento de servidores. El caso es que en el servidor que uso en casa a modo de laboratorio he instalado Proxmox para usar VM's con KVM y no tengo directamente disponible la opción de clonar imágenes de disco para clonar plantillas de servidores. Bueno, la opción está, pero vía comandos y sin "personalización" en tiempo de deploy.

Así pués, retomé el tema de cobbler en casa. Supongo que para ninguno es nuevo el tema del arranque de servidores vía PXE para instalar SO, etc. Cobbler se ocupa de generar los ficheros de arranque PXE para poder hacer el provisionamiento de servidores mucho más dinámico. En mi caso, uso para el DNS y el DHCP el programa dnsmasq, que es más que suficiente para un entorno pequeño, pero cobbler es capaz de gestionar él mismo un servidor DHCP ISC o un servidor Bind para el DNS.

A grandes rasgos, lo que haremos con cobbler es importar una série de distros que luego podrán ser servidas por red para instalar en servidores nuevos. Estas instalaciones se pueden parametrizar a su vez vía kickstart o preseed, de manera que teniendo algunas plantillas podemos simplemente crear nuevas VM que arranquen por red y esperar a que finalice la instalación.

Probé cobbler sobre un CentOS 6, pero encontré un problema a la hora de importar la distro de ubuntu (creo que se ha abandonado el soporte para Debian/Ubuntu en cobbler, ¿puede ser?). Así pués, he cambiado el servidor donde tenía el cobbler por un Ubuntu Server 11.10 donde he instalado Orchestra, que a grandes rasgos es un conjunto de paquetes para el provisionamiento de servidores Ubuntu. Orchestra está basado en cobbler, pero como está distribuido por Ubuntu, si que podemos importar la ISO (faltaría mas).

Lo iremos probando.

17Jan/120

Puppet + Ruby + Foreman + Passenger “all in one” “superfast”

Posted by Chiru

Mira tu!

Un tutorial para instalar Puppet, ruby, passenger y Foreman en un RHEL (o basado en). Es muy express sin dar muchos detalles, pero una buena guía de instalación.

http://miao5.blogspot.com/2010/01/setup-puppetmaster-foreman.html

Saludos!

17Jan/120

“5 bad checksums” dhclient en Ubuntu

Posted by Chiru

Últimamente me he estado peleando con ciertas plataformas de virtualización... bueno básicamente 2, XenServer y KVM.

Uno por motivos profesionales, haciendo el deploy de un cloud usando Cloudstack + XenServer en UPC y el otro en casa, haciendo pruebas.

El caso es que con ambos me he encontrado un problema con las máquinas virtuales Ubuntu confiugradas para adquirir una IP via DHCP. Después de unos cuantos intentos nos aparece un mensaje. Algo como...

"5 bad checksums in last 5 udp responses" (edito cuando tenga el mensaje literal).

En su día encontré esto identificado como un "known issue" en XenServer (aqui). El caso es que la versión del ISC DHCP client que usan en ubuntu carece de un parche que soluciona este problema (y que si que se incorpora en distros basadas en RHEL (RHEL, CentOS, Fedora...)). Hay dos opciones. Una es usar el paquete del cliente DHCP de una de estas distros en Ubuntu (ya os aviso que el rpm tal cual no anda, por dependencias y rutas de archivos incorrectas), o, en el servidor DHCP ejecutar:

ethtool -K etho tx off

De este modo, se deshabilita el checksumming de UDP en la interfaz eth0 (asumiendo que servis el DHCP por esa interfaz, si no, usad la interfaz que os convenga). El cambio es immediato y veremos que las MV con Ubuntu ya cogen IP.

En el caso de KVM lo estoy probando con una VM que he creado, por lo que he añadido esta línea directamente en el archivo /etc/rc.local para que se ejecute en cada reinicio.

En el caso de cloudstack, ya que los routers virtuales que sirven DHCP se crean automáticamente a partir de una plantilla base + scripts de configuración, lo que hice fué seguir éste procedimiento para modificar la ISO que contiene los scripts de inicio de las MV de sistema, y añadir en el correspondiente /etc/rc.local el comando que os pongo arriba.

Saludos!

Archivado en: linux, ubuntu, vm Nadie dijo nada
17Jan/121

Proxmox VE beta 2.0

Posted by Chiru

Hola!

Buff cuanto tiempo sin escribir... Me da hasta pereza... Bueno a lo que venía.

Hace ya un tiempo os hablé de Proxmox VE, y por lo que veo, era la versión 1.6. El otro día me acordé de él haciendo más pruebas para el mini laboratorio que tengo en casa y me encontré con que hay una beta de la versión 2.0. Por cierto el laboratorio ya no es ESXi desde hacía algun tiempo (cambié a XenServer 5.6 y después a un intento fallido de OpenStack)

A parte de nuevas versiones de paquetes y que está basado en Debian 6, lo que más llama la atención de Proxmox VE 2 es el rediseño de la interfaz. No se a cuantos os pasaba como a mi, pero la verdad es que la interfaz de la serie 1.X es bastante horrenda. Funcional, muy funcional, pero fea hasta con avaricia.

Por el resto de cosas, no veo muchos cambios a nivel funcional respecto a la serie 1.x (no probé mucho aquella y llevo poco con ésta) aunque es muy posible que la implementación interna sea distinta.

Usar qemu-img para convertir las imagenes de XenCenter (VHD) a imagenes raw o qcow2 para KVM también fué un plisplas.

En definitiva. Si tenéis poco presupuesto para virtualización y no requerís de muchas florituras, Proxmox es muy buena opción (no uséis la 2.0 en producción ya que aún está un poco verde, pero con la 1.9 podréis hacer, a grandes rasgos, lo mismo).

Ah, si usáis Ubuntu 11.10 con Firefox y no os funciona la consola web en la beta 2.0, echadle un ojo a ésta página.

Archivado en: linux, sistemas, vm 1 Comment
12Dec/100

Acceso a la pila de Memoria de Ejecución ABAP o Hachazo

Posted by Canyita

El sistema SAP está basado en un código de programación estático que puede ser personalizado y adaptado en puntos especificos del proceso de ejecución. Esto es que SAP nos permite escribir código ABAP en ciertos puntos de ejecución del proceso estándar para adaptarlo a las necesidades del cliente.

En muchas ocasiones, cuando estamos programando una Exit, dentro de la exit no tenemos acceso a todos los datos necesarios para llevar a cabo la tarea o decisión que tiene como objetivo la exit en cuestión.

Para solucionar este problema de datos, mediante debugging de la exit, podemos acceder a la pila de memoria ABAP de ejecución del programa estándar que estamos adaptando, y en este punto rastrear los datos que necesitamos a lo largo de las diferentes llamadas de programa que sean realizado durante el proceso estándar.