manual de sap lenguaje de programación abap

Download Manual de Sap Lenguaje de programación Abap

If you can't read please download the document

Upload: marce-cisternas

Post on 28-Oct-2015

41 views

Category:

Documents


1 download

TRANSCRIPT

SCREEN PAINTER.................................................................. .....................................4 DISPOSICION DE CAMPOS EN PANTALLA (FULL SCREEN)................................. ............5 BOTONES......................................................................... ........................................7 Propiedades de los botones...................................................... .......................................................................8 ENTRY........................................................................... ...........................................8 PROPIEDADES ENTRY............................................................... ................................................................8 RADIO BUTTON.................................................................... ..................................9 Paso 1 (crear un box)........................................................... ...........................................................................9 Paso 2 (poner los tres buttons)................................................. ....................................................................10 Paso 3 (seleccionarlos y unirlos)............................................... ...................................................................10 Paso 4 (cmo lo relacionamos con el programa)..................................... .....................................................11 Propiedades del radio button.................................................... ....................................................................12 CHECK BOX....................................................................... ...................................12 Propiedades del check box....................................................... ...................................................................12 BOX............................................................................. ...........................................13 Propiedades del box............................................................. ........................................................................13 STEPLOOP........................................................................ .....................................13 Paso 1 (crear el objeto)........................................................ .........................................................................13 Paso 2 (definir el steploop).................................................... ......................................................................14 Consejos........................................................................ ...............................................................................1 6 GRUPOS DE OBJETOS............................................................... ..........................16 Son tiles?........................................................................ ..........................................................................16 Cmo se crean?..................................................................... .....................................................................16 En que grupo estoy?.............................................................. .....................................................................16 DICT/PROG. FIELDS............................................................... .............................16 MENUS DE LA EDICIN DE LA SCREEN PAINTER.........................................1 9 LISTA DE CAMPOS................................................................. ................................21 LOGICA DE PROCESO............................................................... .............................22 COMO ESTRUCTURAR UNA SCREEN PAINTER............................................. .23 MENU PAINTER.........................................................................................................24 BARRA DE MENS.................................................................... .............................25 BARRA DE SIMBOLOS............................................................... ............................26 BARRA DE PULSADORES............................................................. ........................27 PASO 1 (CREAR FUNCIN)............................................................ .....................28 PASO 2 (ASOCIAR FUNCIN A UN BOTN)................................................. ....29 MIRAR COMO QUEDA................................................................ .........................30 AVISOS.......................................................................... .........................................30 FUNCIONES DEL SISTEMA........................................................... ........................31 TITULO DE LA DYNPRO............................................................. ...........................33 DYNPROS......................................................................... ............................................34 TIPOS DE DYNPRO:................................................................ ......................................34 ATRIBUTOS DE LA DYNPRO:......................................................... ...............................34 Retener datos................................................................... .......................................34 Posicin del cursor............................................................... ..................................34 FUNCIONES DE TRATAMIENTO DE CAMPOS.............................................. ....................34 COMO ASOCIAR VARIAS SCREENS A UN MISMO PROGRAMA................................. ........34 COMO PASAR PARMETROS DE UNA DYNPRO A OTRA........................................ ..........35 DYNPROS DE UN MISMO PROGRAMA.................................................... .........35 ENTRE DIFERENTES PROGRAMAS...................................................... .............35 EXPORT.......................................................................... ............................................................................35 IMPORT.......................................................................... ............................................................................36 COMO SE UTILIZAN................................................................ .................................................................36COMO MODIFICAR LOS OBJETOS DE UNA DYNPRO........................................ ................38 PASO 1 (Poner el mdulo).......................................................... ...........................38 PASO 2 (Llamarlo desde el programa)............................................. .....................39 INCOVENIENTES................................................................... ...............................40 COMO ASOCIAR UNA TABLA A UNA DYNPRO............................................. ...................40 CONTROL DE PROCESO DE DIALOGO................................................... .........................43 EJEMPLO PRCTICO DE LA SCREEN PAINTER, MENU PAINTER, TRANSACCIONES Y MODUL-POOL...................................................... ...............44 PASO 1 (CREAR MODUL-POOL)....................................................... ..........................44 PASO 2 (ASOCIAR AL MODUL POOL UNA TRANSACCIN).................................... ......46 PASO 3 (CREAR UNA SCREEN PAINTER)............................................... ...........47 PASO 4 (SOLO FALTA EJECUTARLO).................................................. .............53 EJEMPLO DE UN MODUL-POOL CON DOS DYNPROS ASOCIADAS Y EN UNA DE ELLAS UN STEPLOOP........................................................ ......................55 PASO 1 ( CREAR EL MODULPOOL).................................................... ............................55 PASO 2 (CREAR LA PRIMERA DYNPRO)................................................ .......................55 PASO 3 (CREAR LA SEGUNDA DYNPRO)................................................ .......................58 PASO 4 (SOLO FALTA EJECUTARLO).................................................. ...........................62 POR LTIMO........................................................................ ........................................62 FORMULARIOS..................................................................... .....................................65 MENSAJES EN SAP................................................................. ...................................67 TIPOS DE MENSAJES............................................................... ..............................69 VARIABLES DEL SISTEMA SOBRE MENSAJES............................................ ....69 DEBUGGING....................................................................... ........................................70 TIEMPOS DE VELOCIDAD............................................................ ..........................72 OPTIMIZACION DE LOS TIEMPOS DE EJECUCIN.........................................7 4 DISTINCION DE CASOS............................................................. ..........................74 TECNICAS SUBPROGRAMAS. VARIABLES LOCALES......................................74 TRATAMIENTO DEL SPOOL........................................................... .......................75 LLAMADA A TRAVS DE UN ABAP....................................................... ............75 JOB................................................................................................................................76 GENERAR UN JOB MEDIANTE UN PROGRAMA ABAP/4...............................80 ACTUALIZACION ASINCRONA......................................................... ....................85 INCLUIR UNO O VARIOS REGISTROS DE ACTUALIZACION........................85 F3/F11 DESPUES DE CREAR EL REGISTRO LOG......................................... .....85 PANTALLAS DE SCROLL (BSICO)...................................................... ...............87 VARIANTES....................................................................... ..........................................90 PROGRAMAS DE EJEMPLO............................................................ .......................92 PAGINACIN........................................................................ ...................................92 LISTADO......................................................................... ..........................................95CAMPOS CURRENCY................................................................. ..............................99 VARIABLES INTERMEDIAS........................................................... ................................99 TIPOS DE OPERACIONES............................................................ ...................................99 FUNCIONES DE CONVERSIN........................................................... ..........................100 RECOMENDACIONES................................................................. .................................102 ERRORES DEL SISTEMA............................................................. ..........................103 NOMENCLATURA DE SAP............................................................. .......................104 CO-CCA /CO-PA /FI / HR/CO-PC.................................................... ......................104 SD / MM/PM...................................................................... ......................................105 ICONOS DE SAP................................................................... ....................................107 NOTA DEL AUTOR.................................................................. ................................109 AGRADECIMIENTOS................................................................. ...................................110SCREEN PAINTERPara crear una SCREEN PAINTER hemos de ir a la pantalla de ABAP/4 Development Workbench.La SCREEN PAINTER sirve para crear las pantallas de introduccin de datos. Estas pantallas las denominamos dynpros.Si en la pantalla de ABAP/4 Development Workbench no aparece el botn de SCREEN PAINTER podemos acceder a travs del men Desarrollo y pulsaremos F9.Cuando seleccionemos SCREEN PAINTER nos saldr la siguiente pantalla:Cuadro de texto: Generar screen painter Cuadro de texto: Verificar Cuadro de texto: Borrar screen painterFig. Acceso.En programa introduciremos el nombre del programa al que le asociaremos la SCREEN PAINTER, que debe existir.El N de Dynpro es el nmero de pantalla que tendr en ese programa.Si la creamos nos saldr una pantalla para poner el mensaje breve de la SCREEN PAINTER.La pantalla que sale es la siguiente:Cuando hayamos puesto los atributos de la SCREEN PAINTER, la grabaremos.Desde aqu podemos irnos a diferentes partes de la SCREEN.Desde el botnFULL SCREENva al diseo de la pantalla. va a la lista de los campos que se utilizan en laDesde el botn LISTA CAMPOS SCREEN. Y desde el botn PROCESOnos vamos al cdigo de la SCREEN PAINTER.DISPOSICION DE CAMPOS EN PANTALLA (FULL SCREEN)En la FULL SCREEN inicialmente nos saldr la siguiente pantalla (en la pgina siguiente):Cuadro Cuadro Cuadro Cuadro Cuadro Cuadro Cuadro Cuadro Cuadrode de de de de de de de detexto: texto: texto: texto: texto: texto: texto: texto: texto:Objeto para visualizar datos Objeto para introducir datos Objeto Botn Propiedades de un objeto Insertar objetos de una tabla de diccionario o un programa Ver los atributos de un campo de forma ms amigable Radio button Check box Objeto boxA partir de ahora explicaremos cmo se crean los objetos en la FULL SCREEN.Para crearlo pulsamos sobre el objeto que queramos insertar y lo situamos donde lo queremos poner en la pantalla. Cuando est creado hacemos doble clic sobre el obje to o pulsamos en el botn attributes y nos aparece la siguiente caja:Cuadro de texto: Permite mover la caja de atributos, para poder ver el contenido que hay por abajo Cuadro de texto: Nombre del objeto Cuadro de texto: Texto que tendr ese campo Cuadro de texto: Funcin asociada a un objeto Cuadro de texto: Tipo de funcin Cuadro de texto: Grupo o grupos a los cuales pertenece el objeto Cuadro de texto: Tipo de steploop Cuadro de texto: Permite mover los atributos, para poder ver lo que hay ms abajo.Fig. ventana de propiedadesCuadro de texto: Este icono permite poner un icono a un objeto, si en objeto no aparece es que no se le puede poner.Los campos comnes para todos los objetos son:Nom.cpo -> Nombre del objeto Text.cpo -> texto del objeto, lo que saldr en pantalla.BOTONESCrear botones es relativamente sencillo, como hemos visto antes, pero lo que con viene saber son los tipos de funcin que se pueden relacionar al cdigo de funcin de un objeto (vase Fig. Ventana Propiedades).Los tipos de funciones son las siguientes:- -> No se les asocia ningn tipo de funcin. Personalizada por el programador. - E -> Exit command -> Sirve cuando asociamos un botn para salir de una pantalla. Cuando la ponemos, SAP no realiza ningn tipo de comprobacin al salir por este botn, todo lo contrario ocurre cuando no lo ponemos, SAPhace comprobaciones antes de salir (y no se sabe lo que puede pasar.....). Esta funcin por s sola no se ejecuta, hay que poner una orden para que salga. - T -> Transaction -> Es una forma de llamar a otra transaccin a travs de un botn, aunque tambin se puede hacer a travs del programa. Para un programador sera ms fcil y cmodo hacerlo a travs del botn, pero si viene otro a modificar el programa no sabr que se llama desde ah (a no ser que el programa este documentado). Pero si se hace a travs del programa se ve (aunque no est documentado) lo que se hace, por ejemplo si queremos llamar a transaccin TZ10 desde un botn donde pone Cod. func. escribiremos la transaccin: TZ10 y Tpo. Func le pondra el tipo T. - H -> Help function - S -> System function - P -> Tabscript codePropiedades de los botonesNom. Icono -> Permite asociar un icono al botn. Si pulsamos el icono que est a la derecha del campo nos saldr una lista de los iconos que SAP tiene. Si lo activamo s veris que el campo de abajo ( Quick info ) se activa poniendo el nombre de la funcin de ese icono.Del Dict. -> Atributos , pestaa Dict -> Sirve para asociar el campo de una tabla de diccionario a un botn. El nombre del botn ha de estar puesto en el campo de la tab la que queramos, ejemplo: SPFLI-FLDATE .Campo salida -> Atributos, pestaa programa -> Sirve para indicarle si ese botn va a visualizar algo o no.Invisible -> Atributos, pestaa visual -> Indicamos si se va a mostrar ese campo o no.ENTRYLos entry son un tipo de objeto que sirven para introducir datos por tecladoPROPIEDADES ENTRYNom. Icono -> Permite asociar un icono al botn. Si pulsamos el icono que est a la derecha del campo nos saldr una lista de los iconos que SAP tiene. Si lo activamo s veris que el campo de abajo ( Quick info ) se activa poniendo el nombre de la funcin de ese icono.Del Dict. -> Atributos , pestaa Dict -> Sirve para asociar el campo de una tabla de diccionario a un botn. El nombre del botn ha de estar puesto en el campo de la tab la que queramos, ejemplo: SPFLI-FLDATE .Campo salida -> Atributos, pestaa programa -> Sirve para indicarle si ese botn va a visualizar algo o no.Invisible -> Atributos, pestaa visual -> Indicamos si se va a mostrar ese campo o no.RADIO BUTTONLos radio button se utilizan para que el usuario pueda escoger de una forma u ot ra cmo tratar los datos.Al principio se puede pensar que es fcil de utilizar, caso correcto si slo ponemos uno. Pero si queremos poner tres y cuando se pulse uno se desactiven los otros pulsad os ya es ms difcil de hacer. Vamos a poner un ejemplo ilustrado de cmo crearamos tres radio button.Paso 1 (crear un box)Un box es un recuadro donde podemos introducir cualquier objeto, es muy til cuand o tenemos varios objetos y queremos separarlos unos de otros.Primero haremos el box, lo haremos suficientemente grande para que entren los tr es radio buttons. Hacemos doble clic en un sitio (se pondr en la imagen) y nos saldr la ventana de propiedades (Fig. Ventana propiedades) y pondremos un ttulo al box. Veamos esta imagen:Cuadro de texto: En el recuadro blanco es donde se hace doble clic para que salg a la ventana de propiedades.En este caso, el box es bastante grande.Paso 2 (poner los tres buttons)Este paso es fcil, ponemos los tres radio buttons y a cada uno le pondremos un no mbre diferente. Que no se nos olvide ponerle un nombre diferente a cada uno, ya que a l generarlo no dar error pero cuando lo ejecutemos nos llevaremos una desagradable sorpresa. As quedara:Cuadro de texto: Para poder asociar un icono a un radio buttonPaso 3 (seleccionarlos y unirlos)Ahora con el botn izquierdo seleccionamos los tres radios buttons. Cmo se hace?. Pulsando el botn izquierdo (solo en ratones con configuracin para personas diestra s, si el ratn es para zurdos sera el botn derecho) en el extremo superior izquierdo y si movemos el ratn, sin soltar el botn izquierdo, veremos como aparece un recuadro, entonces lo movemos hasta seleccionar los tres. El resultado seria el siguiente:Cuando lo seleccionamos vemos que aparece un recuadro negro que envuelve a los t res radio buttons , aseguraros que envolvis a los tres. Despus lo grabaremos.Ahora solo queda ir al men: Edit , Radio button group , define y automticamente nos unir los tres radio buttons . Si queremos probarlos vamos al men: Screen , test . Para comprobar que se han unido aparecer un recuadro con lneas discontinuas que envuelve a los tres botones.Despus os saldr una pantalla para el tipo de simulacin que queris, la pantalla es la siguiente:Cuadro de texto: Arrancar la simulacinSi pulsis el botn de arrancar la simulacin, veris como queda la pantalla.Paso 4 (cmo lo relacionamos con el programa)A los radio buttonsno se les puede asociar un cdigo de funcin.En el programa o modul-pool que tenemos asociado declaramos una o ms variables dependiendo de cuantos radio buttons tengamos. En el caso anterior tenemos tres radio buttons con los nombres: opcion1, opcion2, opcion3. En el programa declararamos lo siguiente:DATA: OPCION1 TYPE C. DATA: OPCION2 TYPE C. DATA: OPCION3 TYPE C.Recordar que los nombres que declaremos han de tener el mismo nombre que los radio buttons que tengamos en la SCREEN PAINTER .Ahora para saber que radio button se ha pulsado SAP pone una X (mayscula) a la variable que esta activa. Es decir, si pulsamos el radio button con el nombre op cion2 la variable opcion2 tendr una X (mayscula) y el resto de opciones estar en blanco. Y a partir de ah averiguando que radio button tiene una X haremos una cosa u otra .Propiedades del radio buttonDel Dict. -> Atributos, pestaa Dict -> Sirve para asociarle un campo de una tabla de diccionario a un radio button . Para poder relacionarlo en nombre del radio button ha de ser el mismo que un campo de la tabla que seleccionemos.Campo salida -> Atributos , pestaa programa -> Sirve para indicar si ese button puede ser pulsado o no, o sea si esta activado o no.radioInvisible -> button .Atributos , pestaa visual-> Indicamos si se va a mostrar eseradioCHECK BOXLos check box son parecidos a los radio buttons pero la diferencia es que de buttons solo se puede escoger uno, mientras que de check box podemos escoger varios de ellos.radioPor ello, la opcin de unirlos como los radio buttons no existe. Pero la forma de sa ber que check box se ha pulsado es la misma que en los radio buttons .Primero declaramos la variable o variables con los mismos nombres que les hemos puesto en la pantalla (acordados de poner nombre a los check box que hagis). Las variables han de ser de tipo C (Char).Para saber si se ha activado o no, hay que mirar si la variable contiene una X (maysculas) o esta en blanco.Propiedades del check box.Del Dict. -> Atributos , pestaa Dict -> Sirve para asociarle un campo de una tabla de diccionario a un radio button . Para poder relacionarlo el nombre del radio butto n ha de ser el mismo que un campo de la tabla que seleccionemos.Campo salida -> Atributos , pestaa programa -> Sirve para indicar si ese box puede ser pulsado o no, o sea si esta activado o no.checkInvisible -> box .Atributos , pestaa visual-> Indicamos si se va ha mostrar esecheckBOXLos box sirven para separar unos objetos de otros. Muy til cuando hay bastantes objetos por la pantalla.Propiedades del box.Del Dict. -> Atributos , pestaa Dict -> Sirve para asociar un campo de una tabla de diccionario a un radio button . Para poder relacionarlo el nombre del radio button ha de ser el mismo que un campo de la tabla que seleccionemos.Campo salida -> Atributos , visualizar algn dato o no.pestaa programa -> Sirve para indicar si elboxva aInvisible -> Atributos , pestaa visual-> Indicamos si se va a mostrar el boxo no.STEPLOOPLos steploop sirven para crear un array de un campo. Solo se pueden crear como o bjeto de entrada, es decir de tipo entry .Se crean desde la full screen de la screen painter. Para hacerlo hemos de seguir los siguientes pasos:Paso 1 (crear el objeto)En este ejemplo haremos un sencilloentry , como en la siguiente pantalla:Hemos creado un objeto de tipoentrycon el nombreidiomas .Paso 2 (definir el steploop)A continuacin vamos al men saldr lo siguiente:edit ,steploop ,define . Cuando lo hagamos nosCuadro de texto: Sirven para cambiar de tamao Cuadro de texto: Permite ver los atributosAl definirlo ha pasado a tener 2 campos (antes solo tenia 1). En est pantalla el cuadrado que sale encima del objeto sirve para ver los atributos de ese objeto ( hacemos doble clic y nos saldr) y donde aparecen los rombos sirve para cambiar de tamao. Por ejemplo con el rombo de abajo lo pulsamos y si lo estiramos apareciendo ms entrys . Como en la siguiente imagen: veremos como vanComo vemos, el objeto idiomas ha pasado de tener 5 campos. Podemos crear tantos campos como queramos, salvo la limitacin de la pantalla.ConsejosAntes de definir el steploop hemos de darle un nombre al objeto, porque si no SAP no nos deja introducir el nombre ms adelante.Como he dicho solo se puede hacer como objeto de entrada, como tipoentry .Ms adelante se explica un ejemplo de cmo se hara un modul-pool con dos dynpros y en una de ellas un steploop en el que se utiliza una tabla interna y externa.GRUPOS DE OBJETOSEn una SCREEN PAINTER podemos agrupar los objetos, es ms, un objeto puede estar en cuatro grupos diferentes.Son tiles?Los grupos son muy tiles cuando queremos que los objetos de un determinado grupo se escondan, que no se les puedan introducir datos o cualquier otro atributo que hemos visto en el captulo anterior. Por ejemplo, dependiendo de los datos que introduzc amos en una pantalla, modificar los atributos de un grupo o grupos de otra pantalla.Cmo se crean?Para crearlos solo tenemos que hacer que nos salga la ventana de propiedades de un objeto (Vase. Fig. Ventana de propiedades) y donde pone Grupos, poner el nombre d el grupo (de tres letras). Podemos ponerle hasta cuatro grupos diferentes a un mism o objeto.En que grupo estoy?Para saber en que grupo estamos, lo miramos a travs de la tabla del sistema SCREEN , esta tabla tiene los campos siguientes:SCREEN-GROUP1. SCREEN-GROUP2. SCREEN-GROUP3. SCREEN-GROUP4.En estas variables se almacena el grupo o grupos al cual pertenece el objeto (si empre y cuando le hayamos puesto algn grupo).DICT/PROG. FIELDSEste botn que aparece en la parte de arriba de la full screen nos permite inserta r campos de una tabla interna o de diccionario e incluso variables definidas por n osotros en el programa asociado a la dynproRecordar que para poder insertarse estos objetos, el programa ha de estar genera do (CTRL+F3) con anterioridad a la creacin de la dynpro.Al pulsar el botn nos sale la siguiente ventana:Donde pone Nom. Tabla/Campo diccionario o una variable.pondremos el nombre de la tabla interna o deSi ponemos una tabla interna o una variable se debe pulsar el botn que pone Traer programa y si es una tabla de diccionario se debe pulsar el botn que pone Traer diccionario . Estos dos botones estn a la derecha, aunque aqu no salgan (Se ve un trozo del prim er botn que corresponde a Traer diccionario ).Como ejemplo, pondremos el nombre de la tabla interna TABLA. Pulsaremos al botn de Traer programa y automticamente aparecen los campos de la tabla interna.Si hubiramos puesto una variable o una tabla de diccionario SAP me hubiese puesto los campos relacionados con la tabla de diccionario o variable.La pantalla que saldra sera la siguiente:Fig. Campo Dict/programa. MANUAL DE SAP. LENGUAJE DE PROGRAMACIN ABAP/4. Despus escogeremos los campos que queramos visualizar, los escogeremos pulsando sobre el botn que est a la izquierda del nombre del campo. Vase este ejemplo: Por ejemplo escogeremos los campos CONNID y CITYFROM .Despus los escogeremos con botn siguiente: Cuadro de texto: Confirmacin de los camposY slo hace falta ponerlo en la Pantalla. Quedara as: Cuadro de texto: Campos de la tabla Como vemos esos campos no tienen descripcin (todo lo contrario ocurre cuando se utiliza una tabla de diccionario que ya posee una descripcin). La descripcin la pondremos nosotros con el objeto: Text .MENUS DE LA EDICIN DE LA SCREEN PAINTEREl primer men que tenemos es Screendonde tenemos:Other Screen -> Sirve para pasar de unadynpro a otra.Display Change -> Cambia el modo de visualizacin al modo de modificacin y viceversa. Check -> Realiza un chequeo de la pantalla. Dentro de este men hay 3 submens ms: Syntax (Sintaxis), Consistency (Consistencia), Layout . Save without check -> Graba la pantalla pero no la chequea. Generate -> Genera la pantalla. Test -> Podemos ver como queda la pantalla, sin tener que ejecutar todo el progr ama. Muy til para comprobar el diseo de la pantalla.Print -> Imprime la pantalla.El segundo es el Edit , que tiene las siguientes opciones:Redraw -> Refresca la pantalla.Radio Button group -> Cuando hemos seleccionado un grupo de permite agruparlos. Steploop -> Los Steploop nos permite hacer unradio buttons ,array de un campo.Delete -> Borro un objeto que tengamos seleccionado. Cancel -> Cancela la pantalla.El tercer men es del GOTO , que tiene las siguientes opciones:Field list -> Saca una lista con los objetos que utilizamos, un ejemplo de lista sera este :Aqu nos saldran de una forma ms visual los objetos que utilizamos.Attributes -> Nos muestra los atributos del objeto seleccionado (Vase Fig. Ventan a de propiedades). Screen attributes -> Nos saca la pantalla de propiedades de la Flow logic -> Nos va al proceso lgico del programa. Dict/Prog Fields -> Nos saca una ventana con la que podemos insertar una variabl e o un campo en la pantalla (Vase Fig. Campo Dict/programa). Next element y Previous element -> Permite pasar de un objeto a otro, es como pu lsar el tabulador. Back -> Permite volver atrs. dynpro .El cuarto men es deUtilities , cuya opcin ms importante es la siguiente:Global search y global replace -> Permite buscar o reemplazar un texto que introduzcamos.LISTA DE CAMPOSEn lista de campos nos aparecern todos los objetos que utilizamos en la SCREEN , la pantalla que sale es la siguiente:FULLCuadro de texto: Variable de control Cuadro de texto: Nombre que utilizaremosEn este caso lo he realizado de unaFULL SCREENque ya contiene datos.Al final de la lista nos aparece un objeto llamado OK esta variable sirve para controlar que botn (nos devuelve el cdigo de funcin asociado al botn) o que tecla de funcin (F1 a F11, ENTER, etc.) se ha pulsado. El uso de esta variable es opcio nal ya que podemos utilizar la variable del sistema SY-UCOMM que sirve para el mismo cometido.Si queremos utilizarla primero le pondremos un nombre para poder utilizarla en e l programa, en este caso le hemos puesto el nombre OKCODE1 . Despus tenemos que declararla en el programa se hara de la siguiente forma:DATA: OKCODE1(4).La variable ha de ser declarada como un CHAR de 4 posiciones.LOGICA DE PROCESOPara ir a este punto desde la FULL SCREEN volveremos atrs pulsando F3 y nos iremos a la pantalla inicial ( Fig. Acceso. ). Despus en objetos parciales seleccionaremos lgica de proceso y modificar . O si no, desde la FULL SCREEN a travs del men GOTO , Flow Logic . La pantalla que sale es esta: Fig. Lgica de proceso.SAP ya pone una parte del cdigo.El PROCESS BEFORE OUTPUT es el proceso que se ejecuta antes de cargarse el programa. Si hacemos doble clic donde pone: STATUS_0106, sale la siguiente panta lla:El PF-STATUS se explicar ms adelante (su funcin es indicar que mens o botones queremos que salgan con la pantalla).Si queremos poner los mens o los ttulos tenemos que quitar l * que encontramos al principio (l * al principio es un comentario).El PROCESS AFTER INPUT son las instrucciones que se ejecutan cuando se pulsa alguna tecla de funcin, el enter, algn botn del MENU PAINTER o de la SCREEN PAINTER . Por defecto tiene el MODULE USER_COMMAND_016 . Si hacemos doble clic sobre este module nos saldr la siguiente pantalla:Aqu sera donde escribiramos el cdigo de nuestro programa.COMO ESTRUCTURAR UNA SCREEN PAINTERComo ya hemos dicho una SCREEN PAINTER esta ligada a un Modul-Pool, es decir, todos los mdulos, procedimientos y declaracin de variables estn declarados e n el Modul-Pool, esto puede traer confusin si un programa tiene muchas pantallas y muchos procedimientos. Para que quede bien estructurado hemos de utilizar cuatro INCLUDES , a saber, uno para la declaracin de variables, otro para los mdulos del PBO, otro para los mdulos del PAI y el ltimo para los procedimientos del programa.MENU PAINTEREl MENU PAINTER es la herramienta que permite disear en la dynpro (o en una ventana) un men con distintas opciones (barra de men, botones, etc.).El men painter se llama a travs de la orden SET PF-STATUS, que est dentro de la lgica de proceso de la dynpro. Su sintaxis sera esta:SET PF-STATUS nombre .Nombrees un identificador para asociar el men a la dynpro concreta. Por ejemplo:SET PF-STATUS PANT-1 .Sobre PANT-1, haciendo doble clic nos saldr la siguiente pantalla:Si le decimos que s saldr esta otra:Adems de poner un texto de explicacin, es aqu donde se especifica si el status a cr ear es para una dynpro, una ventana, etc..Pulsando enter (o el botn del icono verde) nos saldr la pantalla de creacin de PFSTATUS. La pantalla que aparece es la siguiente:Cuadro Cuadro Cuadro Cuadro Cuadro Cuadrode de de de de detexto: texto: texto: texto: texto: texto:Grabar pantalla Generar pantalla Cambiar texto/icono Barra mens Botones de abajo del men Activar/Desactivar algn objeto de la pantallaFig. PF-STATUS.Ms abajo (no se ve) est la barra de pulsadores. Esta barra permite poner botonesdebajo de la barra de smbolos.BARRA DE MENSLos mens se crean en la barra de mens. A modo de ejemplo vamos a crear un sencillo men con dos opciones y dos submens en la primera y un submen en el segunda. La estructura sera la siguiente:Archivo Buscar archivo SalirEdicin PegarCuadro Cuadro Cuadro Cuadro Cuadrode de de de detexto: texto: texto: texto: texto:Nombres de los mens Funciones de los mens Mens principales Funcin asociada a un submen Nombre de los submensFig. Submen.Donde est la Fen azul ponemos debajo la funcin que esta relacionada con elnombre del men. Aqu la funcin BUS est relacionada con el submen BUSCAR y la funcin del sistema %EX (salir) est relacionada con el submen SALIR. En el men Edicin he puesto la funcin PEG relacionada con el submen PEGAR.Nota: para poder introducir los submens del men Archivo, hacemos doble clic en Archivo y nos saldr la pantalla de submen (Fig. Submen) y si se vuelve a hacer doble clic en Archivo esta pantalla se esconde.Cabe sealar que SAP pone dos mens por defecto (Sistema y Ayuda) aunque no se vean en tiempo de diseo s aparecen en tiempo de ejecucin.BARRA DE SIMBOLOSEsta parte es para activar cualquiera de los iconos comunes de SAP. Solo es nece sario poner el nombre de la funcin en los espacios que hay encima de los iconos y pulsa r ENTER. Como ejemplo vamos a poner los 3 botones tpicos de SAP (atrs, salir, cancelar) .La pantalla quedara como sigue:Cuadro de texto: Volver atrs Cuadro de texto: Salir Cuadro de texto: CancelarLas funciones: BACK, %EX y RW son funciones ya definidas por SAP. Se suelen poner estas tres (volver, salir y cancelar). Hay ms funciones internas de SAP com o la de grabar, imprimir, buscar, ayuda, pero aqu no las pondremos.BARRA DE PULSADORESAqu podemos crear una funcin propia o tambin podemos tomar una que ya existaPrimero crearemos una funcin en la barra de pulsadores. Para ello nos posicionare mos en la barra de pulsadores y escribimos un nombre de funcin. Vamos a crear la func in HOL , como se ve en la imagen siguiente:Nombre que se asocia a esa Cuadro de texto: Cdigo de funcin Cuadro de texto: Nombre que se asocia a esa funcin Cuadro de texto: Icono asociado a la funcin Cuadro de texto: Paso 1 Cuadro de texto: Funciones ya predefinidas Cuadro de texto: Nombre de funcin asociada a un botn Cuadro de texto: Paso 2 Fig. Barra pulsadores.Para hacer un botn tan sencillo, se puede hacer de varias formas, una de ellas es esta:PASO 1 (CREAR FUNCIN)Donde pone teclas funcin de libre defin funciones.es donde creamos o modificamos lasEn cualquiera de ellas se pone el cdigo de funcin seguido del nombre que aparecer en el botn. Despus, si queremos asociarle un icono a esa funcin o cambiarlo, posicionamos el cursor en el campo donde hemos escrito HOLA y seguidamente pulsamos el botn del men de arriba que pone Modif.texto/cl.texto . Cuando lo pulsemos aparecer la siguiente ventana:Para asignar o cambiar un icono pulsamos el radiobutton que pone Iconos . Despus pulsando enter o el icono de confirmacin sale esta otra pantalla:Cuadro de texto: Ver los iconos que hay.Podemos ver los iconos que hay pulsando el matchcode como se ve en la figura o posicionandonos en el campo que pone Icono y haciendo doble clic o pulsando F4.Cuando hayamos seleccionado uno, pulsaremos el botn de confirmacin o enter. No padezcis ya que SAP nos avisar si nos hemos olvidado de poner algn dato.Al volver veremos como sale un icono en la parte derecha del nombre de la funcin (vase Fig. Barra pulsadores.)PASO 2 (ASOCIAR FUNCIN A UN BOTN)En la barra de pulsadores donde hemos puesto el texto ( Nombre de funcin asociada a un botn ), justo debajo, donde pone Barra de pulsadores , ponemos el nombre del cdigo de funcin que hemos creado (en el nuestro solo hay uno que se llama HOL ). Si lo escribimos y pulsamos enter veremos que debajo se pone el icono asociado a la funcin. Si no hay icono sale el nombre de la funcin.Como ya hemos dicho antes, podemos crear funciones propias o unas que ya tiene definidas. Estas funciones se encuentran en la box definicin recomendada teclas de funcin , los pasos a seguir son los mismos que en una funcin creada por nosotros. En el recuadro que pone escribiremos el nombre de la funcin y donde hemos escrito antes la funcin HOL ahora escribiremos la funcin escogida y automticamente SAP nos tomar todos los valores de la funcin.MIRAR COMO QUEDADespus de haber creado todo esto grabamos el men y lo siguiente es generarlo. Y si queremos probarlo sin tener que compilar y/o generar programas ni nada por el es tilo, vamos al men Superficie , Probar status o F8 y nos saldr la siguiente pantalla:Luego pulsamos el botn: Ejecutar. Y nos sale la pantalla.AVISOSAhora, cuando borramos una funcin con el SUPR se eliminan de la pantalla pero no de la SCREEN PAINTER. Para probarlo borramos la que hemos hecho y ponemos de nuevo slo el cdigo de la funcin y damos al enter. Veris como aparece el nombre en el icono relacionado a ella. Para borrarlo tenemos que ir al men Pasar a , lista funciones o CTRL E. Y vamos a la siguiente pantalla:Cuadro de texto: Borrar funcin Cuadro de texto: Crear una nueva Cuadro de texto: Cambiar de modo visualizacin/modificacinSeleccionando una funcin la puedo modificar y borrarA travs de esta pantalla podemos crear, modificar o borrar una funcin.Por ejemplo para borrar una funcin nos posicionamos con el cursor en la funcin que deseemos borrar y pulsamos el icono donde sale la papelera y borraremos la funcin .FUNCIONES DEL SISTEMAAntes he utilizado funciones como RW (Cancelar), %EX (Salir), BACK (Volver). Est as tres son funciones que SAP ya las tiene hechas. Para poder ver las funciones que tienen (hay bastantes) desde la pantalla principal (Vase Fig. PF-STATUS), vamos al men Utilidades , explicaciones , Normas/Propuestas . La pantalla que sale es la siguiente:Ahora donde pone Funciones lista (la u est en azul) hacemos doble clic y nos saldr la siguiente pantalla con las funciones del sistema :Hay ms funciones que aqu no se ven, pero con la barra de desplazamiento las podemos ver.TITULO DE LA DYNPROPor defecto SAP pone un ttulo a la ventana, para cambiar el ttulo se utiliza la or den:SET TITLEBAR nombre-ttulo .Cuando hallamos escrito esta orden, hacemos doble clic en nombre-ttulo y nos dir q ue ese ttulo no esta creado y preguntar si lo queremos crear. Si decimos que s nos sal dr esta ventana para introducir el ttulo:Cuando lo hallamos introducido lo grabaremos y volveremos al editor de programa. Ahora para que SAP coja ese ttulo tenemos que grabar el programa, compilarlo y generarlo, si no lo hacemos SAP ignorar el ttulo que hallamos creado.La orden SET TITLEBAR..... va despus de la orden SET PFSTATUS.DYNPROSLas Dynpros son las pantallas con las que SAP pide o visualiza datos. Como hemos visto, se construyen en la SCREEN PAINTER.Tipos de Dynpro:- Dynpro de include: La dynpro ser definida como un subscreen y la lgica de proces o deber contener tanto en el PBO como en la PAI la llamada CALL SUBSCREEN que procesar la parte PBO y PAI del subscreen. Un subscreen podr ser llamado por distintas dynpros pero un subscreen a su vez no deber llamar otros subscreens. - Dynpro normal: La descrita en la SCREEN PAINTER. - Ventana de dilogo modal: La llamada se realiza mediante:CALL SCREEN STARTING AT ENDING AT .Atributos de la Dynpro:Retener datosUna dynpro retiene los datos incluidos en ella. Al procesar la dynpro la siguien te vez, el sistema presentar automticamente en los campos de entrada los datos retenidos. Si no nos interesa es suficiente refrescar la memoria.Posicin del cursorCuando no se desee que el cursor sea posicionado en el primer campo de entrada, sino el otro campo, es necesario indicar el nombre de este campo. Esta funcin pue de ser ejecutada de forma dinmica en el Modul-Pool mediante la instruccin ABAP: SET CURSOR FIELD .Funciones de tratamiento de camposDesplazar. Copiar. Borrar.Para mover o copiar los campos en la pantalla, debern marcarse primero.Como asociar varias screens a un mismo programaEl programa siempre ser el mismo, pero cambiaremos el nmero de dynpro tiene su propia full screen ). Ejemplo:dynpro(cadaMODULE USER_COMMAND_0001 INPUT. Cuadro de texto: Dynpro n 0001 INSTRUCCIONESENDMODULE. " USER_COMMAND_0001 INPUTMODULE USER_COMMAND_0002 INPUT. Cuadro de texto: Dynpro n 0002 INSTRUCCIONESENDMODULE. " USER_COMMAND_0002 INPUTComo pasar parmetros de una dynpro a otra.Podemos pasar parmetros entre dynpros dynpros de diferentes programas.diferentes de un mismo programa o entreDYNPROS DE UN MISMO PROGRAMAPara poder pasar los valores, tenemos que declarar las variables al principio de l programa, para que se puedan utilizar en todo el programa. Para que los valores de las variables se pasen sin perder su valor, lo haremos con las instrucciones explica das anteriormente, o sea, con el SET SCREEN y CALL SCREEN . Por ejemplo si queremos llamar a la dynpro 100 de un mismo programa se hara de la siguiente forma:SET SCREEN 100. LEAVE SCREEN. CALL SCREEN100AND RETURN.El AND RETURN del CALL SCREEN lo pongo para que despus me devuelva a la siguiente instruccin de la dynpro .ENTRE DIFERENTES PROGRAMASCuando en una pantalla realizamos una bsqueda de un dato introducido por teclado y queremos utilizarlo en una pantalla de otro programa hay que guardar primero ese dato en memoria para despus recuperarlo.Para solucionar esto se utiliza las ordenesIMPORT yEXPORT .EXPORTEXPORT se utiliza para guardar una variable, tabla interna o externa en la memoria . Su sintaxis es la siguiente:EXPORT variable TO MEMORY IDnombre .Variable -> es el nombre de una variable, una tabla de diccionario o tabla inter na cuyo valor o valores se guardaran en memoria.Nombre -> Es el nombre que le damos al identificador en la memoria. Puede ser un nombre de hasta treinta y dos caracteres.Un ejemplo de ello sera:EXPORT TABLA TO MEMORY ID 'TABLA'.Cuadro de texto: Nombre de la tabla interna cuyos datos sern guardados en memoria . Cuadro de texto: Nombre del identificador que guardara los datos en memoria.El nombre del identificador suele ser el mismo que el nombre de la variable o ta bla a guardar.IMPORTSi con el EXPORT hemos guardado la variable en memoria, con el IMPORT recuperamos esa variable que est en memoria. Su sintaxis es parecida a la anterio r:IMPORT variable FROM MEMORY IDnombre .Variable -> es el nombre de la variable o tabla donde se guardarn los datos que e stn en memoria.Nombre -> Es el nombre del identificador donde estn guardados los datos en la memoria. Su longitud mxima ha de ser de 32 caracteres.Un ejemplo del IMPORT sera este:IMPORT TABLA FROM MEMORY IDTABLA .Cuadro de texto: Tabla interna donde se guardarn los datos recuperados de la memo ria Cuadro de texto: Identificador donde estn los datos almacenadosCOMO SE UTILIZANExplicaremos cmo se utilizan en un Modulpool . Hemos creado un programa en el que se introduce el nombre de una compaa area. Una vez introducido y cuandopulsamos el botn Buscar nos busca los vuelos de esa compaa (hay hecha una paginacin que nos permite navegar por los vuelos de esa compaa) y si la encuentra nos sacar una informacin reducida sobre los vuelos.Queremos hacer que cuando pulse el botn Ver todos los datos nos lleve a una Dynpro en otro programa y nos saque toda la informacin de vuelo escogido.Solo explicaremos cmo se guardan y recuperan los datos (el resto del problema se puede resolver utilizando las ordenes explicadas en captulos anteriores).La primera fase sera guardar los datos de donde estoy cuando pulse el botn s los datos . El cdigo del programa sera este:Ver todoMODULE STATUS_0001 INPUT.CASE SY-UCOMM WHEN 'VER'.EXPORT TABLA TO MEMORY ID 'TABLA'.EXPORT PA TO MEMORY ID 'PA'.CALL TRANSACTION 'ZZIV'. Cuadro de texto: Cdigo de funcin que tiene el botn Ver todos los datos . MODULE STATUS_0001 INPUT.CASE SY-UCOMM Cuadro de texto: Guardo la tabla en memoria. WHEN 'VER'.EXPORT TABLA TO MEMORY ID 'TABLA'. Cuadro de texto: Guardo la variable, para indicarme qu registro estoy visualizand o EXPORT PA TO MEMORY ID 'PA'.CALL TRANSACTION 'ZZIV'.Cuadro de texto: Llamo a la transaccin, que me mostrar toda la informacin de un det erminado vueloENDCASE.ENDMODULE.Como suponis, el control de la tecla que se pulsa se realiza en el PAI (Process A fter Output). La variable PA me controla en qu registro estoy cuando hago la paginacin.La segunda fase sera, antes de visualizar la siguiente Dynpro , cargar los datos almacenados en la memoria. Se hara de la siguiente forma:MODULE STATUS_0002 OUTPUT. Cuadro de texto: Recupero de la memoria la tabla y la variable que he guardado e n la anterior Dynpro IMPORT TABLA FROM MEMORY ID 'TABLA'.IMPORT PA FROM MEMORY ID 'PA'.Cuadro de texto: Visualizo el registro a travs de la variable PA. PERFORM VISUALIZAR.SET PF-STATUS 'PANT-2'. Cuadro de texto: Visualizo el men Painter de la Dynpro 0002 * SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0002 OUTPUTCuadro de texto: Subrutina donde me posiciono y visualizo el vuelo escogido FORM VISUALIZAR. READ TABLE TABLA INDEX PA. ENDFORM.Las variables o las tablas se recuperan de la memoria en el ut), es decir, antes de que se visualice la pantalla.PAI(Process After InpLlamo a la subrutina externa para visualizar el registro donde estn los datos com pletos del vuelo que hemos seleccionado en la pantalla anterior.Como modificar los objetos de una dynproEn SAP tenemos la posibilidad de cambiar los atributos de una Dynpro en tiempo de ejecucin. Estos atributos se modifican en la PBO (Antes de que salga la pantalla).Como ya hemos visto antes, la tabla donde se guardan los objetos de la pantalla se llama SCREEN. Para ver como funciona haremos un pequeo ejemplo:El ejemplo consistir en que cuando demos a un botn (Su cod. func. ser: DES) los campos que pertenezcan al grupo: 'MOD' se desactiven. El ejemplo se explicar en diversos pasos:PASO 1 (Poner el mdulo)Para modificar los atributos de una pantalla hemos de crear un mdulo en la mdulo se pone en la lgica de proceso de la SCREEN PAINTER .PBO . ElPor ejemplo podemos crear uno que se llame: MODULE MODIFY_SCREEN.Entonces la lgica de proceso de la SCREEN PAINTER quedara de la siguiente forma:Cuadro de texto: Mdulos que se cargan antes de que salga la pantalla Cuadro de texto: Donde se cargan los mens Cuadro de texto: Donde se modifican los atributos de la pantalla PROCESS BEFORE OUTPUT.MODULE STATUS_0001 . MODULE MODIFY_SCREEN.PROCESS AFTER INPUT. MODULE USER_COMMAND_0001. Cuadro de texto: Mdulos que se ejecutan cuando pulsemos alguna tecla, botn, etc.Y dentro de este MODULE escribiremos lo siguiente ( para acceder a ese mdulo hacemos doble clic sobre MODIFY_SCREEN y iremos directamente al nuevo mdulo):CHECK MODO = 'TRATAR'. LOOP AT SCREEN. CHECK SCREEN-GROUP1 = 'MOD'. SCREEN-INPUT = 0. MODIFY SCREEN. ENDLOOP.El primer CHECK se utiliza para comprobar el modo en que est el programa. Si el MODO contiene el valor TRATAR entonces ir al LOOP , en caso contrario saldr del modulo.Seguidamente se hace una lectura secuencial de la tabla s datos de la pantalla).SCREEN (la que contiene loEl segundo CHECK comprueba si el objeto o campo pertenece al grupo 'MOD'. Si es as, no se pueden introducir datos en l.Por ltimo, est el MODIFY SCREEN . Esta orden sirve para confirmar la modificacin de la pantalla. Esta orden siempre se pone cuando hagamos algn cambio en la pantalla.PASO 2 (Llamarlo desde el programa)Llamarlo, lo que se dice llamarlo, no lo llamamos, lo que hacemos es obligar a S AP a leer de nuevo la SCREEN . Lo hacemos a travs de la orden MESSAGE . Esta orden saca un mensaje por pantalla (suele ser de error). Cuando saca este mensaje, SAP relee de nuevo la SCREEN(incluyendo el PBO). En este caso haremos que cuando se pulse un botn se visualic e un mensaje. Lo codificaramos de la siguiente forma:CASE SY-UCOMM. WHEN DES . MESSAGE E005 WITH ENDCASE. PRUEBA DE MENSAJE .Esta parte la codificaramos en la PAI . Con esta sencilla instruccin hacemos que SAP lea de nuevo la pantalla.Hacemos un ejemplo para probarlo.INCOVENIENTESEn SAP no es oro todo lo que reluce, como dira el refranero popular. Por qu digo esto?, pues porque eso de modificar los objetos est muy bien, pero (siempre hay p eros) los objetos no se modifican cuando y donde nosotros queramos sino que hay que modificarlos cuando SAP nos lo deje hacer.Donde nos los deja hacer? En la PBO, o sea, antes de que se visualice la pantalla .En el ejemplo anterior solo modifica los objetos cuando cumple una condicin (que ocurre cuando le damos a un botn), es decir, no siempre cuando carga esa pantalla nos modifica ese grupo de objetos.Tambin hay que resaltar que hay que utilizar unas instrucciones para que SAP vuel va a leer la pantalla (En nuestro caso utilizamos la orden MESSAGE).Como asociar una tabla a una dynproSAP nos permite hacer una dynprode una tabla.Para hacerlo primeramente tenemos que haber hecho una vista de la tabla para pod er asociarle un grupo de funcin. En la vista se pone un nmero de imagen sencilla, que es el nmero de dynpro de esa tabla.En la tabla de prueba que hemos hecho en el captulo de tablas, le hemos puesto de nombre ZZP1, en la vista hemos puesto el grupo de funcin ZZF1 y en el nmero de imagen hemos puesto el uno.Para ver esa tabla en la SCREEN PAINTER , tenemos que hacer lo siguiente:1.- Primero vamos a la SCREEN PAINTER2.- En la SCREEN PAINTER , donde pone programa, ponemos SAPLZZF1. Donde ZZF1 es el grupo de funcin y SAPL es la constante. La sintaxis sera la siguiente:SAPL Cdigo de funcin.SAPL siempre ha de ponerse y junto el grupo de funcin.Y donde pone dynpro ponemos 0001 que es el nmero de la imagen sencilla.3. - Pulsamos el botnModificary la pantalla que veremos es la siguiente:Ahora, al objeto que pone ID SCREEN PAINTER .le cambiaremos el texto porDNI , y activaremos laSeguidamente lo que haremos es introducir los datos en la tabla. O sea, vais a l a pantalla de ABAP/4 Development Workbench y al men Resumen , Data browser . Cuando nos salga la pantalla del Data browser escribimos el nombre de la tabla, que en nuestro caso es ZZP1 y pulsaremos al botn que sale una hoja en blanco. Veremos qu e la pantalla que sale es esta (en la pgina siguiente):Como veis donde antes pona ID, ahora pone DNI.Control de proceso de dialogoCuadro de texto: Screen Painter Cuadro de texto: ABAP/4Program zzzzz.PROCESS BEFORE OUTPUT (1) MODULE OUTPUT1 OUTPUT MODULE OUTPUT1. (2) ENDMODULEPROCESS AFTER INPUT(1) MODULE INPUT1 INPUT. Perform xxxx. (2) ENDMODULECuadro de texto: (2) Control del ABAP/4 despus del procesador Cuadro de texto: (1) Control del procesador de dynpros despus de ABAP/4EJEMPLO PRCTICO DE LA SCREEN PAINTER, MENU PAINTER, TRANSACCIONES Y MODUL-POOL.El programa que haremos se trata de que el usuario introduzca un nombre de una compaa area y el programa busca datos sobre sus vuelos, sus conexiones areas, etc.Para ello utilizaremos las siguientes tablas de diccionario: SPFLI, SFLIGHT.Para mejorar el rendimiento pasaremos los datos de la tabla de diccionario a una tabla interna, la tabla interna tendr la siguiente estructura:DATA: BEGIN OF TABLA OCCURS 0, CARRID LIKE SFLIGHT-CARRID, FLDATE LIKE SFLIGHT-FLDATE, CONNID LIKE SFLIGHT-CONNID, FLTIME LIKE SPFLI-FLTIME, CITYFROM LIKE SPFLI-CITYFROM, DEPTIME LIKE SPFLI-DEPTIME, AIRPFROM LIKE SPFLI-AIRPFROM, CITYTO LIKE SPFLI-CITYTO, NAME LIKE SAIRPORT-NAME, ARRTIME LIKE SPFLI-ARRTIME, PLANETYPE LIKE SAPLANE-PLANETYPE, SEATSMAX LIKE SAPLANE-SEATSMAX, CARRNAME LIKE SCARR-CARRNAME, END OF TABLA.Esto es una declaracin de un ejercicio completo pero se le pueden poner los campo s que queramos.A partir de ahora vienen los pasos a seguir:PASO 1 (Crear Modul-Pool)Primero hemos de crear un programa nuevo de tipo Modul-Pool.Es igual que crear un programa normal, pero cuando nos pida el tipo de programa le pondremos de tipo M (Modul Pool).Cuando est en texto fuente declararemos todas las tablas, variables, etc. que utilizaremos en el programa (slo declararemos eso).En el programa quedara esto:Cuadro de texto: Nombre del programa de tipo modul poolPROGRAM ZZII5. Cuadro de texto: Tablas de diccionario TABLES: SPFLI, SFLIGHT.DATA: BEGIN OF TABLA OCCURS 0, CARRID LIKE SFLIGHT-CARRID, FLDATE LIKE SFLIGHT-FLDATE, CONNID LIKE SFLIGHT-CONNID, FLTIME LIKE SPFLI-FLTIME, CITYFROM LIKE SPFLI-CITYFROM, Cuadro de texto: Campos de la tabla interna DEPTIME LIKE SPFLI-DEPTIME, AIRPFROM LIKE SPFLI-AIRPFROM, CITYTO LIKE SPFLI-CITYTO, NAME LIKE SAIRPORT-NAME, ARRTIME LIKE SPFLI-ARRTIME, PLANETYPE LIKE SAPLANE-PLANETYPE, SEATSMAX LIKE SAPLANE-SEATSMAX, CARRNAME LIKE SCARR-CARRNAME, END OF TABLA. Cuadro de texto: Variable relacionada con un campo de la SCREEN PAINTER DATA: NOM_CIA LIKE SPFLI-CARRID.Despus de declarar todas las tablas ya sean de diccionario, internas, variables, etc.hemos de grabarlo.Cuadro de texto: Botn para grabar sin verificar.Una vez creado hemos de verificar la consistencia del ndice, lo haremos con el bo tn:Cuadro de texto: Verificar o Ctrl+F2Y por ltimo hemos de generar el programa. Se genera desde el editor de programas men programa , Generar o CTRL+F3.IMPORTANTE: si no lo generamos, los datos que declaremos no los podremos utilizar en el SCREEN PAINTER.Cada vez que hagamos algn cambio en el programa lo hemos de VERIFICAR y GENERAR.PASO 2 (Asociar al Modul Pool una transaccin)Para asociar una transaccin a un Modul Pool, se hace lo siguiente:Desde la pantalla de ABAP/4 Development Workbench en el men Desarrollo , Ms herramientas , transacciones , nos saldr la siguiente pantalla:Cuadro Cuadro Cuadro Cuadro Cuadrode de de de detexto: texto: texto: texto: texto:Crear transaccin Modificar una transaccin ya existente Ver una transaccin Buscar transacciones Borrar transaccinEn el cdigo transaccinpondremos uno nuevo o uno que ya exista.Si no sabemos qu transaccin queremos modificar podemos buscarla, pulsando F4 o los prismticos que hay en el men painter.Cuando hayamos puesto una transaccin y hemos pulsado crearla nos saldr esta pantalla:Esta pantalla solo aparecer cuando creemos una transaccin nueva.Escogeremos la primera opcin y pulsaremos enter.Despus nos aparecer la siguiente pantalla. Esta pantalla aparecer directamente cuando modifiquemos una transaccin. La pantalla en cuestin es la siguiente:Texto transaccin es el mensaje explicativo de qu hace esa transaccin.Programa es el nombre del programa (en nuestro caso Modul Pool) al que relacionamos la transaccin.N Dynpro es el nmero de Dynpro que tiene ese programa. La Dynpro se la ponemos cuando creemos la SCREEN PAINTER. Por ello hay que acordarse de poner la misma Dynpro en los dos sitios, si no, no funcionar.Despus de introducir los datos, que son obligatorios, grabaremos la transaccin.PASO 3 (CREAR UNA SCREEN PAINTER)Ahora crearemos un entry para introducir el nombre de la compaa al que llamaremos NOM_CIA . Recordis que este nombre ya est definido en el programa Modul Pool. Se definen con el mismo nombre para poderlo relacionar tanto en la SCREEN PAINTER como el Modul Pool.Esta forma de relacionar sirve para cualquier otro objeto.Despus escogeremos los campos que queramos visualizar, escogeremos los campos CONNID y CITYFROM de la tabla interna TABLA .Y slo hace falta ponerlo en la Pantalla. Quedara as:Cuadro de texto: Campos de la tabla Como vemos esos campos no tienen descripcin (todo lo contrario ocurre cuando se utiliza una tabla de diccionario que ya posee una descripcin). La descripcin la pondremos nosotros con el objeto: Text .Ahora, por ltimo, crearemos dos botones. Uno para buscar la compaa y otro para poder salir.En el botn de buscar pondremos: BUS como cdigo de funcin y en el de salida escribiremos: SAL. Tambin como cdigo de funcin. En la salida pondr el tipo de funcin E ( Exit ) que est al lado de Cod. Func. .La ponemos de tipo E (Exit) ya que SAP , cuando salimos de la SCREEN PAINTER (en tiempo de ejecucin) se dedica a comprobar cosas internamente. Para que salga sin comprobar nada le ponemos el tipo de funcin E.Un consejo: en aquellos objetos a los que no se les pueda poner Cod. Func. y queramos relacionarlos con el programa, slo hay que declarar en el programa una variable del mismo tipo del que hemos creado en la FULL SCREEN , (es el caso de NOM_CIA ).La pantalla final que nos quedara sera la siguiente:Por ltimo, slo hace falta grabarlo con el botn siguiente:Cuadro de texto: Botn para grabar sin verificar o F11Despus para poderlo utilizar hay que generarlo, lo realizaremos con el siguiente botn:Cuadro de texto: General CTRL+F3Es importante que no nos olvidemos de hacer los ltimos pasos cada vez que hagamos alguna modificacin en la pantalla.El siguiente paso es realizar la lgica de proceso asociada a la dynpro.Fig. Lgica de proceso. Fig. Lgica de proceso.SAP ya pone una parte del cdigo .Realizamos primero el PBO.Si le damos doble clic donde pone:INES3nos iramos al MENU PAINTER .Es aconsejable hacer un PF-STATUS sencillo para que pueda salir del programa (en nuestro caso no hace falta porque ya hemos puesto un botn que permite salir). Un P FSTATUS sera el siguiente: Cuadro de texto: Tecla de volver Cuadro de texto: Salir del sistema Cuadro de texto: Cancelar En la parte de arriba de la pantalla (no se ve) se ponen los mens y abajo (no se ve) los botones.Cuando hayamos activado los tres iconos tpicos que siempre aparecen en SAP, lo grabaremosCuadro de texto: Botn para grabar sin verificar o F11Despus, para poderlo utilizar hay que generarlo, que lo haremos con el siguiente botn:Cuadro de texto: General CTRL+F3Es importante que no nos olvidemos de hacer los pasos ltimos cada vez que hagamos alguna modificacin en el MENU PAINTER .El SET TITLEBAR xxx es el nombre que contiene el ttulo de la ventana. Haciendo doble clic en xxx accedemos al ttulo real de la ventana.Si queremos poner los mens o los ttulos tenemos que quitar el * que encontramos al principio (l * al principio es un comentario).Despus de esto lo grabaremos aunque no lo generaremos, porque an faltan algunas cosillas.Volviendo a la pantalla de los procesos (Fig. Lgica de proceso), realizaremos el PAI.Por defecto tiene el MODULE USER_COMMAND_016 . Si hacemos doble clic sobre este module nos saldr la siguiente pantalla:Al principio miraremos si se ha pulsado algn botn, esto se averigua a travs de la variable del sistema SY-UCOMM . Esta variable contiene el nombre del cdigo de funcin del botn pulsado (por ello la importancia de poner el cod. Func. en los objetos que creemos en la SCREEN PAINTER , siempre que se pueda poner). Esto se controla a travs del CASE .*&---------------------------------------------------------------------* *& Module USER_COMMAND_0106 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_0106 INPUT. CASE SY-UCOMM. WHEN 'BUS'. Corresponde al botn de buscar. SELECT SINGLE * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLA WHERE CARRID = NOM_CIA. WHEN 'SAL'. Es el botn de Salir. SET SCREEN 0. LEAVE SCREEN. ENDCASE.ENDMODULE. " USER_COMMAND_0106 INPUTLos botones que hay en PF-STATUS , al asignarles funciones del sistema ( BACK , % , EX , RW ) no hace falta controlar la tecla de funcin pulsada.Ahora grabamos el programa:Cuadro de texto: Botn para grabar sin verificar o F11Despus lo verificamos con este botn:Cuadro de texto: Verificar o CTRL+F2.Seguidamente volvemos hacia atrs a travs de F3 y volvemos a la pantalla de los procesos (Fig. Lgica de proceso). Por ltimo, volvemos a grabar con el botn de siempre y lo generamos.PASO 4 (SOLO FALTA EJECUTARLO)Ahora, una vez generado, lo podemos ejecutar desde cualquier punto del SAP, en l a lnea de comandos.Cuadro de texto: Lnea de comandosIntroduciremos el cdigo de transaccin que hemos creado en el Paso 2 (os acordis?)Las transacciones se ejecutan poniendo: /nxxxx , donde xxxx es la transaccin. En nuestro caso hemos creado la transaccin ZZII por lo tanto pondramos /NZZII y pulsaramos ENTER y nos saldra la siguiente pantalla:Si en el nombre de la compaa ponemos resultado ser el siguiente: Si en el nombre de la compaa ponemos resultado ser el siguiente:LH y le damos al botn de buscar, el LH y le damos al botn de buscar, elLo malo de este programa es que solo saca un registro (para ser ms concreto el lti mo). Para acceder a todos los registros solo hay que hacer la paginacin.EJEMPLO de UN MODUL-POOL CON DOS DYNPROS ASOCIADAS Y EN UNA DE ELLAS UN STEPLOOPLo que vamos a hacer es que el usuario introduzca una compaa area (en una dynpro) y muestre los vuelos de esa compaa (en otra dynpro). Los pasos a seguir son los siguientes:Paso 1 ( crear el modulpool)Lo primero es crear el modul-pool al que llamaremos siguiente:ZZII y donde escribiremos loPROGRAM ZZII . Cuadro de texto: Tablas donde buscaremos los datosTABLES: SFLIGHT, SPFLI.DATA: BEGIN OF TABLA OCCURS 0, Cuadro de texto: Tabla interna donde se guardar los resultados de la bsqueda CONNID LIKE SFLIGHT-CONNID, CITYFROM LIKE SPFLI-CITYFROM, AIRPFROM LIKE SPFLI-AIRPFROM, CARRID LIKE SPFLI-CARRID, END OF TABLA.DATA: DATOS LIKE TABLA. Cuadro de texto: Steploop con la estructura de fitablaflCuadro de texto: Variables donde guardar, el inicio y nmero de lneas del steploop DATA: LINEA_TOPE TYPE I VALUE 1, NUM_LINEAS TYPE I.Datos -> Es el nombre del steploop, tendr las mismas caractersticas que la tabla interna tabla ya que haremos un steploop de los 4 campos de la tabla interna.Linea_tope-> Es el inicio donde escribiremos el steploop que inicialmente vale 1 .Num_lineas->Nmero de lneas que tiene el steploop.Por ltimo lo grabamos, verificamos y generamos.Paso 2 (Crear la primera dynpro)El segundo paso ser crear las pantallas con su respectivo cdigo. En este paso hare mos la pantalla donde se introducen los datos y en el siguiente paso haremos la pant alla de visualizacin.Vamos a la SCREEN PAINTER . La primera pantalla tendr la dynpro hecho quedara:0001 , queEl primer campo de entrada tendra el nombre TABLA-CARRID , que lo haramos a travs del botn DICT/PROG fields . Acordados que este botn permite insertar campos o tablas que tengamos declarados en el programa, Recordar: Para que se puedan insertar los campos o tablas, el programa ha de estar generado.Despus insertaremos dos botones, el botn MOSTRAR tiene el cdigo de funcin MOS y el botn SALIR con el cdigo de funcin SAL . Despus de hacer esto grabaremos el programa y lo generaremos.La lgica de proceso de esta dynpro sera la siguiente:Como vemos los mdulos son los de siempre, salvo que en la PAI pongo la orden FIELD (a grandes rasgos la orden FIELD sirve para que cuando se modifique elcampo TABLA-CARRID se ejecuten las rdenes que hay en el modulo BUSCAR . El mdulo BUSCAR sirve para buscar la compaa area introducida y poner todos sus vuelos en la tabla interna).Si hacemos doble clic donde pone BUSCAR tendra las siguientes instrucciones:podemos crearlo. El modulo buscarCuadro de texto: Busco la compaa area en la tabla SPFLI por la compaa introducida MODULE BUSCAR INPUT. SELECT * FROM SPFLI WHERE SPFLI-CARRID = TABLA-CARRID.Cuadro de texto: Si no hay errores, es que hay registros IF SY-SUBRC = 0. Cuadro de texto: Muevo los datos encontrados a la tabla interna. MOVE-CORRESPONDING SPFLI TO TABLA.Cuadro de texto: Busco los datos que me faltan SELECT * FROM SFLIGHT WHERE CARRID = SPFLI-CARRID.Cuadro de texto: Muevo los datos que me faltan y los aado a la tabla MOVE-CORRESPONDING SFLIGHT TO TABLA. APPEND TABLA. ENDSELECT. ENDIF. ENDSELECT.ENDMODULE. " BUSCAR INPUTSolo aadir los datos a la tabla interna, siempre y cuando los encuentre en las dos tablas de diccionario y solo en el segundo la tabla SPFLI. SELECT cuando la compaa area este enEl mdulo USER_COMMAND_001tendra las siguientes instrucciones:MODULE USER_COMMAND_0001 INPUT.Cuadro de texto: Contiene el cdigo de funcin del botn pulsado CASE SY-UCOMM.WHEN 'SAL'. Cuadro de texto: Si pulsamos el botn de salir, saldremos del programa SET SCREEN 0. LEAVE SCREEN.WHEN 'MOS'. Cuadro de texto: Si pulsamos el botn de mostrar, me voy a la dynpro 0002 2. SET SCREEN 2. LEAVE SCREEN.ENDCASE. ENDMODULE.Paso 3 (Crear la segunda dynpro)Esta dynpro servir para visualizar los datos que tengamos en la tabla interna, qu e se ha rellenado en la anterior dynpro con la compaa area introducida.El nmero de la dynpro ser 0002 . En este caso, primero haremos la lgica de proceso, ya que si hacemos primero la pantalla cuando la generemos nos dar error. Por ello primero haremos la lgica de proceso y despus haremos la pantalla.La lgica de proceso sera la siguiente:Esta lgica de proceso ya tiene ms instrucciones. El primer LOOP sirve para rellenar el steploop con los datos de la tabla interna (rellenada en la dynpro anterior). La opcin CURSOR LINEA_TOPE sirve para que empiece a rellenar el steploop a partir de la primera posicin, ya que inicialmente,LINEA_TOPEvale 1.Dentro del LOOP llamamos al mdulo VISUALIZAR que lo que hace es poner los datos de la tabla interna al steploop . El mdulo VISUALIZAR tendra las siguientes instrucciones:MODULE VISUALIZAR OUTPUT. MOVE-CORRESPONDING TABLA TO DATOS. ENDMODULE. " VISUALIZAR OUTPUTComo se ve, se copian los datos que hay en la tabla interna que se llama DATOS .TABLA en elsteploopUtilizo el MOVE-CORRESPONDING porque tanto TABLA como DATOS tienen la misma estructura. Si no la tuviesen se hara con la instruccin = o con elMOVE .Os preguntaris por qu hacemos un mdulo para una sola instruccin. Si pongo la instruccin MOVE-CORRESPONDING en la lgica de proceso, al compilar me dar el error la instruccin MOVE-CORRESPONDING no esta definida o declarada . Esteerror da porque solo puede haber una serie de instrucciones en la lgica de proces o como el LOOP , CHAIN , FIELD y alguna ms, por ello hay que hacer el mdulo.El segundo LOOP , si no lo ponemos, nos da el siguiente error El campo DATOSCARRID no esta asignado al LOOP...ENDLOOP debe aparecer en PBO y en el PAI . Por este error ponemos un LOOP tanto en el PBO y en el PAI.En el segundo LOOP llamamos al mdulo SET_NUM_LINEAS , que guarda el nmero de lneas que tiene el steploop . Tendra el siguiente cdigo:MODULE SET_NUM_LINEAS INPUT. NUM_LINEAS = SY-LOOPC. ENDMODULE. " SET_NUM_LINEAS INPUTSY-LOOPC es una variable de sistema que dice cuantas lneas tiene el guardan en la variable NUM_LINEAS .steploopy seY el mduloUSER_COMMAND_002 tendra las siguientes instrucciones:MODULE USER_COMMAND_0002 INPUT. REFRESH TABLA. CLEAR TABLA. SET SCREEN 1. LEAVE SCREEN. ENDMODULE. " USER_COMMAND_0002 INPUTEn este mdulo lo que hara es limpiar el header y el contenido de la tabla interna TABLA y a continuacin me ira a la dynpro 0001 1 . Este modulo se cumplira al pulsar cualquier tecla o botn.Despus de poner todo el cdigo solo nos faltara hacer la pantalla. La pantalla la haremos paso a paso.El primer paso sera hacer esta pantalla:Primero haremos una box con el texto VUELOS DE LA COMPAA . Dentro de la BOX pondremos 4 TEXT , cuyo texto ser el nombre de los campos del steploop DATOS .Fuera de la box pondremos un botn para volver a la dynpro anterior (como hemos vi sto en la lgica de proceso este botn solo esta para hacer bonito, ya que en realidad n o hace absolutamente nada)Ahora falta poner los campos del steploop DATOS en la pantalla. Como sabis lo haramos con el botn Dict/Prog Fields y nos triaramos a la estructura DATOS y la insertaramos en la pantalla. Recordar poner los campo debajo de cada etiqueta.La pantalla que saldra sera la siguiente (en la pgina siguiente):Como se ve hemos puesto 4 campos del steploop de seleccionar los 4 campos para poder hacer el Despus vamos al men edit , steploop , defineDATOS . A continuacin hemos steploop . y nos crear el steploop .NOTA: Tenemos que englobar los campos que queremos hacer el steploop , ya que en la lgica de proceso hay que hacer 2 loops (uno en el PAI y el otro en el PBO) por cada steploop que halla en la pantalla. Por eso es bueno, agrupar los campos y hacer un steploop de esos campos englobados.La pantalla que saldra cuando definiramos elsteploopsera la siguiente:Veris en la imagen que el steploop agrupa a los 4 campos. Aqu tambin podemos estirar el steploop (lo hemos visto como se hacia, cuando he explicado como se h acia un sencillo steploop ), se estira para poder insertar ms campos al steploop .Un steploop puede ser fijo ( fix ) o variable ( var ). Para saber de que tipo es miramos los atributos del steploop y en la ventana de propiedades (Vase Fig. Ventana de propiedades) hay un recuadro que pondr el tipo de steploop . La diferencia entre uno y otro es que en el fijo si tenemos 2 campos (como en el que hemos hecho) y queremos visualizar 5 campos, solo nos mostrar los dos primeros campos mientras que en el variable el nmero de campos se adapta al nmero de campos a visualizar, es decir, si hemos creado un steploop de 5 campos y solo visualizamos uno, solo nos visualizar ese campo, los 4 restantes los oculta.Para cambiar entre un tipo u otro, vamos al men edit ,steploop ,fixovariable .Este men se encuentra en la full screen cambiar entre un tipo u otro.de lascreen paintery automticamente nosLo malo del tipo variable es que si hay muchos datos a visualizar el steploop nos puede ocupar toda la pantalla y lo malo del fijo es que puede ocultarnos datos p or que hay ms campos a visualizar que campos tiene el steploop .Una curiosidad es que si el steploop es variable y visualizamos muchos datos y est os datos sobrepasan el limite inferior de la box , que tambin hemos creado, tambin se estira como el steploop , pero lo malo es que no se vuelve a encoger como tambin lo hace el steploop .En resumen que elegir entre un tipo u otro depende de la cantidad de datos a vis ualizar.Paso 4 (Solo falta ejecutarlo)Para ejecutarlo tenemos que hacer una transaccin (ya explicada anteriormente). Cuando lo hagamos la ejecutaremos y para probar podemos introducir la compaa LH o SQ que seguro que tiene vuelos.Por ltimoA continuacin escribir el cdigo completo del programa como quedara:ZZII , para que podis verPROGRAM ZZII . TABLES: SFLIGHT, SPFLI. DATA: BEGIN OF TABLA OCCURS 0, CONNID LIKE SFLIGHT-CONNID, CITYFROM LIKE SPFLI-CITYFROM, AIRPFROM LIKE SPFLI-AIRPFROM, CARRID LIKE SPFLI-CARRID, END OF TABLA.DATA: DATOS LIKE TABLA.DATA: LINEA_TOPE TYPE I VALUE 1, NUM_LINEAS TYPE I.*&---------------------------------------------------------------------* *& Module USER_COMMAND_0001 INPUT *&---------------------------------------------------------------------* * MIRO QUE BOTON SE HA PULSADO *----------------------------------------------------------------------* MODULE USER_COMMAND_0001 INPUT.CASE SY-UCOMM. WHEN 'SAL'. SET SCREEN 0. LEAVE SCREEN. WHEN 'MOS'. SET SCREEN 2. LEAVE SCREEN. ENDCASE. ENDMODULE. *&---------------------------------------------------------------------* *& Module STATUS_0001 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_0001 OUTPUT. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'.ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_0002 INPUT*&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_0002 INPUT. REFRESH TABLA. CLEAR TABLA. SET SCREEN 1. LEAVE SCREEN. ENDMODULE. " USER_COMMAND_0002 INPUT *&---------------------------------------------------------------------* *& Module STATUS_0002 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_0002 OUTPUT. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0002 OUTPUT *---------------------------------------------------------------------* * MODULE VISUALIZAR OUTPUT * *---------------------------------------------------------------------* * MUEVO LOS DATOS DE LA TABLA INTERNA AL STEPLOOP * *---------------------------------------------------------------------* MODULE VISUALIZAR OUTPUT. MOVE-CORRESPONDING TABLA TO DATOS. ENDMODULE. " VISUALIZAR OUTPUT*---------------------------------------------------------------------* * MODULE SET_NUM_LINEAS INPUT * *---------------------------------------------------------------------* * CUENTO EL NUMERO DE LINEAS QUE TIENE EL STEEPLOOP **---------------------------------------------------------------------* MODULE SET_NUM_LINEAS INPUT. NUM_LINEAS = SY-LOOPC. ENDMODULE. " SET_NUM_LINEAS INPUT *&---------------------------------------------------------------------* *& Module BUSCAR INPUT *&---------------------------------------------------------------------* * BUSCO LA COMPAIA INTRODUCIDA Y LA GUARDO A UNA TABLA INTERNA *----------------------------------------------------------------------* MODULE BUSCAR INPUT. SELECT * FROM SPFLI WHERE SPFLI-CARRID = TABLA-CARRID. IF SY-SUBRC = 0. MOVE-CORRESPONDING SPFLI TO TABLA. SELECT * FROM SFLIGHT WHERE CARRID = SPFLI-CARRID. MOVE-CORRESPONDING SFLIGHT TO TABLA. APPEND TABLA. ENDSELECT.ENDIF. ENDSELECT. ENDMODULE. " BUSCAR INPUTFORMULARIOS1 PginaVentanas Strings Prrafos Variables0. Cabecera: Donde se pone la pgina inicial, prrafo inicial, etc. 1. Definir pginas: Donde se pone, nombre de la pgina siguiente, modo START para la 1 pgina, /NC, incrementar las siguientes, y el tipo de numeracin que el normal es ARABIC .2. Definir ventanas Donde ponemos el nombre y la descripcin, una ser MAIN pueden ser variables (si son diferentes en cada pgina), n iguales). En ELEMENTOS TEXTO se ha de codificar lo que (que sern unos determinados prrafos, identificados con primeras posiciones. , principal, y las otras constantes (si siempre so tendr la ventana el nombre en las 23. Definir Prrafos: Nombre de las posiciones, alineacin, left o right de todas las lneas y si se puede decir un margen o un interlineado, con FONT se puede cambiar la letra y con TABULADORES se pueden definir las posiciones de los diferentes campos.4. Definir Strings: Son atributos que se asignan a los campos.Lnea unida es que en el salto de lnea se pueda o no partir el campo Oculto que el campo sea invisible ndice escribira el campo con formato ndice subndice escribira el campo con formato subndice FONT para cambiar tipo de letra5. Ventana pgina A una pgina se le asignar todas las ventanas que tendr, con la posicin de cada una.Izquierda: posicin a izquierda Arriba: n de lneas que tendr por encimaAncho: n posiciones que ocupar Altura: n de lneas que ocupar Los elementos de texto strings que interese. son por cada ventana, haciendo servir los prrafos,TEXTOS STANDARDS: se usan en el programa. HERRAMIENTAS TRATAMIENTOS TEXTOS TEXTO STANDARD En las includes dicen:Nombre del texto Nombre del objeto identificador texto Tablas STXH-STXL identificador idioma identificador prrafoCon el cdigo de ELEMENTOS DE TEXTOse pueden tratarSmbolos, valores que se pueden incluir en el print. Incluir / smbolos / texto programa sistema da, hora standard nuevoComandos de control que se pueden utilizar:IF .. elseif ..else..endif Case .. WHEN .. OTHERS.. endcase Include Define New-Page Protect .. endprotect Reset Address .. enaddress.Por UTILIDADES / CONV. FDLOMA ORIGEN se puede cambiar el idioma del formulario, porque si no coincide el que ponemos en la 1 pantalla con el de origen no nos dejar crear nuevos prrafos, ni ventanas, ni nada.MENSAJES EN SAPLa librera donde estn los mensajes se declara en el REPORT(On line) o en el PROGRAM (Modul Pool). En el siguiente ejemplo, se declaran los mensajes tanto en el REPORT como en el PROGRAM.REPORT ZZIIP2 MESSAGE-ID CU. Cuadro de texto: CU es la librera donde estn los mensajes. PROGRAM ZZIIP1 MESSAGE-ID CU.CU es una librera que ya existe en SAP (hay muchas ms). Para ver esa librera hacemos doble clic y nos saldr la siguiente pantalla:Cuadro de texto: Mensajes de la libreraComo vemos nos sale informacin sobre la librera. Ahora para ver los mensajes que tiene esa librera, le damos al botn que pone Mensajes y nos saldr la siguiente pantalla con los mensajes de la librera escogida (En la pgina siguiente):Como veis hay bastantes mensajes.Para poder mostrar los mensajes se utiliza la orden MESSAGE. La sintaxis de la o rden sera la siguiente:MESSAGE Enumero WITH texto.La E (es el tipo de error, hay muchos tipos de errores diferentes) siempre se po ne y despus va precedida por el nmero de mensaje.En texto, son los mensajes que se sustituyen por l &, es decir, en los mensajes d e arriba vemos tienen este carcter & . Este carcter es comodn, y sirve para ser sustituido por un mensaje nuestro, una variable o un campo de una tabla.Ejemplo:MESSAGE E001 WITH PRUEBA .El mensaje que saldra sera el siguiente:Ya existe la relacin PRUEBAExiste otra forma de visualizar los mensajes sin indicar en el REPORT o en el PROGRAM a que librera hay que buscar los mensajes. Se hara de la siguiente forma: MESSAGE Enumero(librera).En nuestro caso el ejemplo sera el siguiente:MESSAGE E005(CU).El resultado es el mismo, excepto que no se puede visualizar los mensajes puesto s por nosotros.TIPOS DE MENSAJESLos tipos son los siguientes: E, W, I, A, S.- E -> Cuando se produce este error todos los campos se desactivan, y el usuario ha de introducir un nuevo valor. - W ->Como en el anterior los campos se desactivan, el usuario no necesita introducir nuevos valores, se los introduce SAP y procesa de nuevo la PAI con los nuevos valores. Si pulsamos ENTER el sistema ejecuta las rdenes que hay despus del MESSAGE. - I -> El sistema se para, y automticamente SAP nos saca un mensaje contextual (popup). - S->El mensaje se visualiza en la PBO de la siguiente pantalla. Estos mensajes son para el funcionamiento del programa, ya que slo son informativos. - A-> Cuando el usuario presiona ENTER, el sistema se para y SAP vuelve al men principal.VARIABLES DEL SISTEMA SOBRE MENSAJESHay una serie de variables del sistema que se utilizan para los mensajes:-SY-MSGID SY-MSGTY SY MSGNO SY-MSGVx-> -> -> ->Identificador de mensaje. Tipo de mensaje (E, I, W, S, A). Nmero de mensaje. Variable x del mensaje.DEBUGGINGEsta funcin permite ejecutar el programa lnea a lnea.Se puede activar, /h en el campo de OK-CODE. Desde el men de utilidades. Definir un BREAK-POINT en el programaLos BREAK-POINT se definen de la siguiente forma:Nos posicionamos sobre la lnea en la que queramos hacer la ruptura, despus vamos a l men de utilidades , breakpoints , fijar , y entonces tendremos un punto fijado.Yo personalmente prefiero esta opcin ya que es ms cmoda y no hay que activar el DEBUGGING, ya que SAP se detiene automticamente cuando encuentra un punto de ruptura sin necesidad de activarlo. Un ejemplo de ruptura es el siguiente:Aqu inspeccionamos las variable CARRID y CONNID de la tabla interna TABLA. Se miran haciendo doble clic sobre un campo o variable y automticamente saldr su contenido.Si vamos al men Pasar a , visualizar tabla o SHIFT+F2, nos saldr una pantalla, donde pondremos la tabla que queramos ver apareciendo una pantalla en el registr o donde est, la pantalla que sale es la siguiente:Para ver el contenido de un campo, vamos al men pasar a pantalla donde introduciremos el nombre de un campo y nos tctera de ese campo, un ejemplo: Para ver el contenido de un campo, vamos al men pasar a pantalla donde introduciremos el nombre de un campo y nos tctera de ese campo, un ejemplo:, campos . Nos sale una sale el tipo, valor, e , campos . Nos sale una sale el tipo, valor, eTIEMPOS DE VELOCIDADEs una forma de comprobar los tiempos de respuesta de nuestro programa, se acced e a travs del men sistema , utilidades , Anlisis tmpo. Ejec. Pero esto tiene un inconveniente ya que el programa encargado de realizar los clc ulos va creando unos ficheros en el HOST los cuales SAP no los borra y poco a poco pu ede llenar el disco duro del HOST. La pantalla que sale es la siguiente, antes de que salga la pantalla nos dice el nmero de procesadores que tiene el HOST: Fig. Anlisis.Podemos medir el tiempo de un programa as como el de una transaction. Ahora vamos a introducir la transaccin que hemos creado antes (la ZZII). Activamos el radio b utton de transaction y ponemos la transaction ZZII . Despus ejecutamos el programa (con el botn que pone execute) despus de ejecutarlo volvemos atrs (hasta volver a la pantal la de anlisis, Fig. Anlisis) y por ltimo pulsamos el botn de abajo que pone Analyze y saldr la siguiente pantalla:Nuestro programa utiliza mucho el R/3 System y slo ocupa 511 Kb.Volviendo a la pantalla de anlisis (Vase Fig. Anlisis), si le damos al botn TRIPS & TRICKS sale una pantalla donde podemos ver una comparacin de velocidad de dos instrucciones que realizan lo mismo pero de diferente forma. Podemos escoger bastantes tipos de comparaciones de lectura de tablas, tratamiento de string, et ctera. La pantalla que sale es esta:Debajo de la pantalla podemos ver ms comparaciones.Tambin podemos calcular lo que tarda en ejecutar una serie de instrucciones a niv el de programa, esto se realiza con la orden GET RUN TIME FIELD. Con esta instruccin de ABAP/4 determina el consumo de CPU de una secuencia de instrucciones.La sintaxis de su funcionamiento sera la siguiente:GET RUN TIME FIELD .ORDENES.GET RUN TIME FIELD.En la primera llamada a esta instruccin s inicializa el campo . En cada llamada posterior se almacena en el tiempo de CPU en microsegundos transcurridos des de la primera llamada.OPTIMIZACION DE LOS TIEMPOS DE EJECUCINDISTINCION DE CASOSSi el nmero de posibilidades es limitado se puede saltar de un caso a otro de for ma sucesiva. Una vez alcanzada la condicin deseada se procesa IF, ELSEIF y CASE la correspondiente secuencia de instrucciones. Cuando existen muchos casos (p. Ej. + de 100=, sera mejor saltar directamente a la parte de cdigo fuente deseada (PERFORM).TECNICAS SUBPROGRAMAS. VARIABLES LOCALESSe deberan tener en cuenta:- El coste de inicializar variables locales - La utilizacin local de la instruccin TABLES es muy costosa. - La definicin de tablas internas locales tambin son costosas porque para cada llamada al FORM son construidas de nuevo y liberadas al llegar al ENDFORM. - Consumo CPU en la cesin de parmetros, en especial en el traspaso de valores /VALUE o CHANGING) - En las expresiones lgicas se reduce el nmero de instrucciones, pero se debern utiliza de forma meditada: IN muy costoso.Las expresiones lgicas se resuelven de izquierda a derecha. En el caso de OR debera poner 1 la condicin que se cumpla ms frecuentemente; en el caso de AND al revs.La comparacin entre operandos deber ser del mismo tipo.- Al indicar el n de decimales disminuye el rendimiento. - En ABAP/4 se pueden realizar clculos con casi todos los tipos de datos, pero internamente se calculan con formatos enteros y coma flotante, siendo el clculo con enteros el que menos tiempo de CPU consume. Los clculos con formatos distintos requieren una conversin previa. - En las unidades de modularizacin puede ser interesante unificar para losclculos los parmetros de entrada (tipo), mediante variables locales. Se deber evaluar los costes de conversin calculo contra los costes de las variables locales y su conversin en el transporte.TRATAMIENTO DEL SPOOLEl SPOOL es la orden de cola que se genera en la impresin. Su tratamiento depende de las necesidades individuales de cada proceso. Se accede por la transaccin SP01 o po r el men Sistema , servicios , Control impresin .LLAMADA A TRAVS DE UN ABAPSe realiza con la orden. SUBMIT .... TO SAP-SPOOL. Realiza llamadas de reports c on salida de fichero de SAP.Tiene las siguientes opciones:1 ... DESTINATION dest -> Salida a impresora ... COPIES cop -> Nmero de copias ... LIST NAME name -> Nombre de lista ... LIST DATASET dsn -> Nombre de salida de fichero de cola ... COVER TEXT text -> Ttulo alternativo de la cola ... LIST AUTHORITY auth -> Autorizacin para visualizar ... IMMEDIATELY flag -> Imprimir inmediatamente ... KEEP IN SPOOL flag -> Guardar lista despus de impresin ... NEW LIST IDENTIFICATION flag -> Nuevo fichero de cola cada vez que cambie. ... DATASET EXPIRATION days -> Listado de nmeros retenidas ... LINE-COUNT lin -> Lneas por pgina ... LINE-SIZE col -> Nmero de columnas por lneas ... LAYOUT layout -> Imprimir formato ... SAP COVER PAGE mode ... COVER PAGE flag ... RECEIVER rec ... DEPARTMENT dep -> Nombre de departamento ... ARCHIVE MODE armode -> Forma de archivado ... ARCHIVE PARAMETERS arparams -> Estructura de archivado ... WITHOUT SPOOL DYNPRO -> Controlar pantalla con salto de impresin2... SPOOL PARAMETERS params ... ARCHIVE PARAMETERS arparams... WITHOUT SPOOL DYNPROCon los parmetros IMMEDIATELY, KEEP IN SPOOL, NEW LIST IDENTIFICATION y COVER TEXT, flag el flag debe ser un literal o campo carcter con longitud 1. Si el flag est en blanco el parmetro switch esta apagado, pero nin gn otro carcter de switch debe estar activado.Cuadro de texto: Generar screen painter JOBUn job es un proceso que lanza la ejecucin de un programa ABAP/4 o un programa externo a una hora o da determinado.Son tiles cuando queremos ejecutar un programa a una determinada hora, por ejempl o, cuando el servidor este menos ocupado(suele ser por las noches) lanzaremos un programa que haga un uso intensivo del servidor.Para poder crear un job tenemos que ir al men nos saldr la siguiente pantalla:sistema , jobs , definicin jobs . YCuadro de texto: Fecha y hora en que se ejecutara el programa Cuadro de texto: Programas que ejecutar el job Cuadro de texto: Graba el jobFig. Definir job.En el campo Job escribiremos el nombre del job que deseamos crear, como ejemplo pondremos el nombre ZZII y en el campo Maq.destino escribiremos la maquina de destino donde se ejecutar el job, para ver que mquinas hay nos posicionamos con el cursor y pulsamos F4 o le damos al mathcode, en los dos casos sale la siguiente imagen:Cuadro de texto: Seleccionar mquina Para seleccionar una mquina, hacemos doble clic en la mquina que queramos o nos posicionamos con el cursor en la mquina en cuestin y le damos al botn de seleccionar.Despus de introducir el nombre del job y la maquina de destino donde se ejecutara el programa, solo nos falta indicarle cuando y que queremos que se ejecute.Primero seleccionaremos la fecha y la hora en que se ejecutara el o los procesos seleccionados. Para poder introducir le daremos al botn a pantalla: fecha inicio y nos saldr estCuadro de texto: Fecha y hora en que se ejecutar el procesoEn este caso como ejemplo solo lo haremos que se ejecute ha una hora y un da determinado. Para poderlo hacer pulsaremos al botn Fecha/Hora y nos saldr la pantalla anterior pero con ms datos:Cuadro de texto: Tomar o grabar la hora en que se ejecutar el jobEn este caso he puesto que se ejecute el da 27.01.1999 a las 17:10:19 horas. Como pongo la fecha pues, a travs de los mathcodes o posicionandonos sobre el campo y pulsando F4 y entonces nos saldr una pantalla donde podremos elegir el da o la hor a dependiendo en campo hemos pulsado F4 o el matchcode.Despus de seleccionar el da y la hora grabaremos la fecha dando al botn de grabar. Por ltimo seleccionaremos que procesos se van a ejecutar, o sea, volveremos a la pantalla inicial (Vase Fig. Diseo job) y pulsaremos el botn Steps y nos saldr la siguiente pantalla (en la siguiente pgina):Cuadro de texto: Graba los procesos seleccionados Cuadro de texto: Programa de ABAP/4 Cuadro de texto: Un programa externo Aqu tenemos la posibilidad de ejecutar tanto programas creados por nosotros o programas externos. Como ejemplo haremos un que se ejecute un programa creado por nosotros, para hacerlo pulsaremos el botn ABAP , y se activar la box Programa ABAP/4 , despus escribiremos el nombre del programa a ejecutar (en nuestro caso es un simp le listado) y tambin nos da la posibilidad de incluir una variante ese programa (tam bin en nuestro caso no pondremos ninguna, pero las variantes se explicarn ms adelante)Si queremos ejecutar un programa externo pulsaremos el botn Programa externo y se activar la box Programa externo y entonces escribiremos el nombre del programa, los parmetros que le pasaremos y la mquina de destino donde se ejecutarn los programas.Despus de todo esto lo grabaremos y nos saldr la siguiente pantalla (en la pgina siguiente):Cuadro Cuadro Cuadro Cuadrode de de detexto: texto: texto: texto:Modificar un step ya existente Crear uno nuevo Visualizar uno ya existente Borrar un stepEn esta pantalla podemos modificar, crear, borrar, etc. un step. Ya que un job p uede ejecutar ms de un proceso.Si no queremos hacer nada ms, pulsamos F3 o el botn Volver pantalla donde estabamos.para volver a laSi queremos ver que jobs estn pendientes de ejecucin, los que sean han ejecutando ya o realizar cualquier otra operacin con un job, pues entonces vamos al men Sistema , Jobs , Lista jobs y nos saldr la siguiente pantalla:Desde aqu podemos visualizar, refrescar, etc. ha un job. El que hemos creado ante s est liberado por lo que solo hace falta esperar a que llegue la ho