introdução a abap

160
Introdução a ABAP/4 1. Fundamentos da programação de relatórios. 1.2 Tipos de instruções: Um relatório é um conjunto de instruções que começa com um LABA Palavra-chave e termina com um período. Tipos de palavras-chave: Declarativas: Para declarar os dados que vamos usar durante todo o programa. Por exemplo: DATA, TABLES. Eventos: Especifica um evento, é onde você executa um ABAP determinado processo. Por exemplo: START-OF- SELECTION, TOP-OF-PAGE. Controles: Programa de controle de fluxo de SQL. Por exemplo: IF, WHILE. Operativas: Realize próprias funções de acordo com a palavra-chave tipo. Por exemplo: WRITE, MOVE. Há duas maneiras de usar comentários em um relatório. 1. Um asterisco (*) na primeira coluna de uma linha. 2. aspas (") no meio de uma linha, isto é, uma vez escrito julgamento pode ir um comentário abaixo. Podemos combinar frases consecutivas do mesmo formato. Isso significa agrupamento julgamentos e evitar escrever mais linhas de código. Por exemplo: É equivalente a: WRITE LFA1-LIFNR. WRITE LFA1-NAME1. WRITE LFA1-ORTO01. WRITE: LFA1-LIFNR, LFA1-NAME1,

Upload: thiago-rocha-ferreira

Post on 15-Feb-2017

69 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Introdução a abap

Introdução a ABAP/4

1. Fundamentos da programação de relatórios.1.2 Tipos de instruções:

Um relatório é um conjunto de instruções que começa com um LABAPalavra-chave e termina com um período.

Tipos de palavras-chave:

Declarativas: Para declarar os dados que vamos usar durante todo o programa. Por exemplo: DATA, TABLES.

Eventos: Especifica um evento, é onde você executa um ABAPdeterminado processo. Por exemplo: START-OF-SELECTION, TOP-OF-PAGE.

Controles: Programa de controle de fluxo de SQL. Por exemplo: IF, WHILE.

Operativas: Realize próprias funções de acordo com a palavra-chave tipo. Por exemplo: WRITE, MOVE.

Há duas maneiras de usar comentários em um relatório.

1. Um asterisco (*) na primeira coluna de uma linha.2. aspas (") no meio de uma linha, isto é, uma vez escrito julgamento pode ir um comentário abaixo.

Podemos combinar frases consecutivas do mesmo formato. Isso significa agrupamento julgamentos e evitar escrever mais linhas de código.

Por exemplo:

É equivalente a: WRITE LFA1-LIFNR. WRITE LFA1-NAME1. WRITE LFA1-ORTO01.

WRITE: LFA1-LIFNR, LFA1-NAME1, LFA1-ORTO01.

Page 2: Introdução a abap

5.2 Data Objects.

Existem 3 tipos de objetos de dados:

Campos de bases de dados armazenadas no dicionário de dados. Podemos declarar as tabelas que você deseja usar em um programa com

uma sentença.

Exemplo:

TABLES: LFA1.WRITE: LFA1-LIFNR, LFA1-NAME1.

Literais: o texto literal entre aspas ou números.

Exemplo:

WRITE ‘DIREÇÃO’.COMPUTE SALES = AMOUNT / 100.

Variáveis internas: Campos auxiliares com o nome menos de 30 caracteres (não incluindo o personagem branco). São declarados com a sentença:

Exemplo:

DATA: VENTAS-TOTALES TYPE P.

5.3 Estruturas de um programa.

REPORT: Nome programa.TABLES: Tabelas utilizadas.DATA: Variáveis internas.TOP-OF-PAGE: Início das instruções da página.

END-OF-PAGE: Fim das instruções da página.START-OF-SELECTION: Início da execução do programa.END-OF-SELECTION: Fim de execução do programa.

Page 3: Introdução a abap

6 Declarando e processando dados.

6.1 Tipos de Campos.

Os tipos de dados que podem ser utilizados no ABAP/4.

Tipos Comprimento Comprimento possível

Valor inicial Descrição

C 1 132000 ESPACIOS Texto F 8 1E-3071E+308 0.0E+00 Ponto flutuante I 4 -231 231-1 0 Inteiro N 1 132000 ‘0000’ Texto numérico P 8 1 16 0 Núm. Empaquetado X 1 129870 x’00’ Hexadecimal D 8 8 00000000 Data YYYYMMDD T 6 6 000000 Hora HHMMSS

6.2 Declarações de Campos.

Campos do relatório com a instrução DATA.

A menos que indicado de outra forma não há variáveis são o caráter tipo (texto) e o comprimento 1.

Exemplo: DATA VAR-CAR. DATA VAR-CAR(8).

Com o parâmetro TYPE podemos utilizar outros tipos de dados.

Exemplo: DATA NUM-CAR(5) TYPE N. DATA NUMERO(2) TYPE P. DATA FECHA LIMITE TYPE D.

Com o parâmetro LIKE, podemos declarar uma variável Com os mesmos atributos de comprimento e tipo que uma variável de base de dados.

Exemplo: DATA ACREEDOR LIKE LFA1-LIFNR.

Com o parâmetro VALUE podemos indicar a variável com um valor padrão.

Exemplo: DATA COMTADOR TYPE P VALUE 1.

Page 4: Introdução a abap

Um registro de dados é um Conjunto de campos relacionados logicamente em uma estrutura.

Exemplo: DATA: BEGIN OF PROVEEDOR ,LIFNR LIKE LFA1-L.IFNR,NAME1 LIKE LFA1-NAME1,CIUDAD(20) VALUE 'BARCOONA',

FECHA TYPE D, END OF PROVEEDOR.

Posteriormente o acesso aos campos do registro de dados será:

WRITE: PROVEEDOR-NAME1, PROVEEDOR-FECHA.

Também usaremos a instruções DATA para declarar tabelas internas. Tabelas internas ao contrário do banco de dados vai ser armazenado na memória e não no dicionário de dados.

Exemplo:DATA: BEGIN OF MEJORÉ_ PROVEEDORÉ OCCURS 10,

NOMBRE LIKE LFA1-NAME 1,CIUDAD LIKE LFA1-ORT1,

VENTAS LIKE LFC3-SOLLL,END OF MEJORÉ_PROVEEDORÉ.

A cláusula OCCURS Determina ou número de linhas armazenadas na memória principal. Então não significa ou o tamanho máximo de uma tabela é indicado ou como se os dados ETE overflows são armazenados no arquivo de paginação um, para baixo ou logicamente PROCEO do tempo como Tabelas internas, mas prevenir ou área de armazenamento global de destino SAP para Tabelas internas se esgote.

Como Tabelas internas são declaradas, um inicializado e referenciado como determinado registro.

Também podemos utilizar a mesma estrutura que uma tabela de base de dados. Utilizaremos a instruções INCLUDE STRUCTURE.

Exemplo:

DATA BEGIN OF SOCIEDADE OCURRS 1 0.INCLUDE STRUCTURE T001.

DATA END OF SOCIEDADE.

Page 5: Introdução a abap

6.3 Atribuindo valores.

Há várias formas de atribuir preço em Uma Variável em ABAP / 4. Uma atribuição direta, como resultados de retorno Uma de operação aritmética ou retornar resultados de conversão automática entre Com Uma I valorizados campos de diferentes tipos de dados. A instrução MOVE realiza um transporte do conteúdo do var1 al campo var2.

MOVE <var1> TO <var2>.

Podemos substituir esta última instrução por:

<var2> = <var1>.

que é a simplificação de:

COMPUTE <var2> = <var1>.

Onde a palavra COMPUTE é opcional.

Também é possível referenciar e atribuir valores a uma parte de a variávelutilizando o offset.

VARIÁVEL+offset(longitud)

Exemplo:

DATA: VARI(15) VALUE 'RIVERAND BCN.', VAR2(15) VALUE 'HOA'.

MOVE VARI+10(4) TO VAR2+5(4).WRITE VAR2.

Resultado: HOA BCN.

VAR1

R I V E R L A N D B C N .

VAR2

H O L A

MOVE VAR1+10(4) TO VAR2+5(4).

Page 6: Introdução a abap

VAR2

H O L A B C N .

Se deseja utilizar variáveis em offset e comprimento se usará a instrução WRITE TO.

Exemplo: OFF1 = 10.OFF2 = 5.LEN = 4.WRITE VAR1+OFF1(LEN) TO VAR2+OFF2(LEN).

Se deseja checar o comprimento o tipo de uma variável podemos utilizar a instruções DESCRIBE FIELD.

Sintaxe: DESCRIBE FIELD campo LENGTH Comprimento.“ “ TYPE tipo.“ “ OUTPUT-LENGTH long salida.“ “ DECIMALS PACÉ decimalé.

Para chequear a Comprimento de um campo utilizamos a cláusua LENGTH.Para Comocer o tipo de dados do campo utilizamos TYPE.Para Comocer a Comprimento de salida utilizamos OUTPUT-LENGTH.

Para saber o número de decimalé que tiene uma cierta variável utilizaremos a cláusua DECIMALS.

Para inicializar as variávels utilizamos a sentencia:

CLEAR <campo>.

CLEAR inicializa al valor que tiene asignado como valor inicial(ver tabelas) sin tener en cuenta a as cláusuas VALUE que haya.

A asignación e inicialización de los registros de dados fumciona de a mesma forma que en as variávels normalé. Um CLEAR inicializa todos los campos do registro. Podremos Comseguir uma asignación mas potente Com MOVE-CORRÉPONDING.

MOVE-CORRÉPONDING <reg1> TO <reg2>.

Page 7: Introdução a abap

Éta instruções mueve do reg1 al reg2 aquolos campos que tengan idéntico nombre.

6.4 Comversión de tipo.

Si intentamos realizar uma asignación de variávels de distinto tipo, ABAP/4 intenta realizar uma Comversión automática de tipo.

Podemos ver um extracto de as posiblé Comversioné en o ANEXO 2 “ Type Comvéión table”

Existe uma instruções adicional para a Comversión P C

UMPACK <p_num> TO <string>.

Que déempaqueta p_num en a variável string colocando ceros a a izquierda.

Existe uma instruções adicional para a Comversión C -> P.

PACK <string> TO <p_num>.

6.5 Operacioné Aritméticas en ABAP/4.

En ABAP/4 as 4 operacioné aritméticas básicas se pueden implementar:

Com a instruções COMPUTE y los símbolos +, -, / y *,

COMPUTE var1 = <Exp. Aritmética>.

donde a paabra COMPUTE é opcional.

Si utilizamos paréntéis dejaremos um épacio en banco precediendo y siguiendo al paréntéis.

Com as instruccioné : ADD TO, SUBSTRACT FROM, MULTIPLY BY y DIVIDE BY.

Também dispondremos de fumcioné matemáticas para los números de coma flotante: EXP, LOG, SIN, COS, SQRT, DIV, MOD. STRLEN.

Page 8: Introdução a abap

6.6 Procéando campos de tipo texto.

ABAP/4 ofrece algumas instruccioné para o procéamiento de cadenas de texto.

Para realizar um dépazamiento do Comtenido de um campo utilizamos SHIFT.

SHIFT<campo> Realiza um dépazamiento de um carácter hacia a izquierda.

SHIFT<campo> BY <n> PACÉ(RIGHT). Realiza um dépazamiento de n caracteré hacia a izquierda o si se épecifica hacia a derecha, introduciendo banco por o ado opuéto.

Exemplo:

H O L A

SHITF campo BY 2 PACÉ.

L A

SHITF <campo> BY 2 PACÉ CIRCUAR (RIGHT). Realiza um dépazamiento cíclico hacia a izquierda o si se épecifica hacia a derecha.

Exemplo:

H O L A

SHIFT campo BY 2 PACÉ CIRCUAR

L A H O

Podemos reempazar o Comtenido de ciertos campos Com a Instruções REPACE.

REPACE <cadena1> WITII <cadena2> INTO <campo>.

Reempaza 'cadena1' por 'cadena2' dentro de a variável 'campo'. Si a variável do sistema SY-SUBRC <> 0 é que 'cadena1' no existe dentro de 'campo'.

REPACE únicamente estruturaá a primera aparición de 'cadena 1'.

Page 9: Introdução a abap

Existe otra instruções de sustitución, TRANSATE.

TRANSATE <campo> TO UPPER CASE. Pasa a Mayúscuas TO LOWER CASE. Pasa a Minúscuas. USING "<rega>'. Reempaza campo

según a rega de sustitución indicada.

donde a rega = <C1S1C2S2...> y Cn son los caracteré a estrutura y Sn los caracteré de sustitución..

A instruções SEARCH busca a cadena dentro de um campo o uma tabelas.

SEARCH <campo>/<tabelas> FOR <cadena>.

Si o Resultado é positivo SY-SUBRC = 0. En caso de que sea uma tabelas SY-TABIX Comtiene a líneas de a tabelas donde se ha enComtrado.

Para borrar los bancos de uma cadena utilizaremos COMDENSE.

COMDENSE <campo> (NO-GAPS).

Éta instruções borra todos los bancos que se encuentren comenzando a cadena por a izquierda y en caso de enComtrar serié de bancos intermedios dejará únicamente umo por serie.

Exemplo:

“ CURSO DE ABAP/4" "CURSO DE ABAP/4"

A cláusua NO-GAPS borra todos los bancos étén donde étén.

6.7 Variávels do sistema.

ABAP/4 tiene algumas variávels internas que se van actualizando automáticamente y que pueden ser utilizados en los programas.

Todas oas empiezan por o prefijo SY- y ya hemos utilizado alguma de oas como

SY-SUBRC que nos da o código de retorno de uma instruções o SY-T'ABIX que Comtiene a línea de procéo de uma tabelas interna.

En o Anexo 1 hay uma roación de todas oas.

Page 10: Introdução a abap

7 Comtrol de flujo en los programas ABAP/4

7.1 Formuando Comdicioné

En ABAP, como en todos los lenguajé estruturados, disponemos de uma serie de instruccioné para subdividir o programa en bloqué lógicos; se ejecutarán cuando se cumpa uma cierta Comdición.

Para introducir uma Comdición, utilizaremos a sentencia IF... OSE... ENDIF , que podrá aparecer en distintas modalidadé.

IF <Comd.>. IF <Comd.>. IF <Comd.>. … … …ENDIF. OSE. OSEIF.

… …ENDIF. OSEIF.

…OSE.

ENDIF.

En as Comdicioné utilizamos los clásicos operadoré:

Y ANDO ORIgual = , EQDistinto <> , ENMayor > , GTMenor < , LTMayor o igual >= , GEMenor o igual <= , LE

Además existen operadoré adicionalé para comparar cadenas de caracteré:

Page 11: Introdução a abap

<f1> CO <f2> (Comtains Only) : f1 sólo Comtiene caracteré de f2. En caso de ser cierta SY-FDPOS Comtiene a Comprimento de f1,

y sié falsa Comtiene o offset do primer carácter queno cumple a Comdición.

<f1> CN <f2> (Comtains Not Only) : negación de a anterior.

<f1> CA <f2> (Comtains Any) : f1 Comtiene como mínimo algún carácter de f2. Si é cierta SY-FDPOS Comtiene o offset do primercarácter de f1 que étá en f2, y si é falsa Comtiene a Comprimento de f1.

<f1> NA <f2> (Comtains Not Any) : negación de a anterior.

<f1> CS <f2> (Comtains String) : f1 Comtiene a cadena f2. Si a Comdición SY-FDPOS é cierta Comtiene o offset dondeempieza f2 en f1, y si é falsa Comtiene aComprimento de f1.

<f1> NS <f2> (Comtains No String) : negación de a anterior.

<f1> CP <f2> (Comtains Pattern) : f1 corréponde al patrón f2. En o patrón podemosutilizar :+ como cualquier carácter, * como cualquier

cadena de caracteré,# para utilizar los caracteré +,*,# en a comparación. Si a Comdición é cierta SY-FDPOS Comtiene ooffset de f2 en f1 y si é falsa Comtiene a

Comprimentode f1.

<f1> NP <f2> (Comtains No Pattern) : negación de a anterior.

Também podremos utilizar operadoré épecialé:

IF <f1> BETWEEN <f2> AND <f3>. Para chequear rangos

IF <f1> IS INITAL. Para chequear valoré inicialé.

Si queremos ejecutar diferenté instruccioné en fumción do Comtenido de um campo, podemos utilizar a sentencia CASE.

CASE <campo>.WHEN <valor1>.

…WHEN <valor2>.

…WHEN OTHERS.

Page 12: Introdução a abap

…ENDCASE.

Por último, existe a instruções Comdicional, ON CHANGE OF ... ENDON, que permitirá a ejecución de um bloque de instruccioné, si se ha producido um cambio de valor de um cierto campo durante o acesso a base de dados o uma tabelas interna. Cómo procéar uma tabelas interna o um acesso a base de dados, ya lo veremos más adoante.

ON CHANGE OF <campo>.…

ENDON.

Page 13: Introdução a abap

7.2 Procéo de buclé

Para realizar procéos repetitivos, utilizaremos DO y WHILE.

A instruções DO permite ejecutar um bloque de instruccioné tantas vecé como se épecifique.

DO <n> TIMÉ.…ENDDO.

En a variável do sistema SY-INDEX tendremos um Comtador do número de repeticioné.

É posible anidar DO's. En ée caso, o SY-INDEX hará referencia al bucle en procéo.

A instruções WHILE permite ejecutar um bloque de instruccioné mientras se cumpa uma Comdición.

WHILE <Comd>.…ENDWHILE.

De a mesma forma que a instruções DO, WHILE permite anidar buclé.

7.3 Sentencias de Comtrol

As sentencias décritas a Comtinuación se utilizarán para terminar o procéamiento de um bucle o procéo.

A instruções: CHECK <Comd>.

Realiza um chequeo de <Comd> de forma que si dentro de um bucle a Comdición é falsa, saltará todas as instruccioné que siguen al CHECK e iniciará a siguiente pasada al bucle. Fuera de um bucle si a Comdición é falsa, saltará todas as instruccioné que siguen al CHECK hasta o final do evento o programa en procéo.

A instruções: EXIT.

Dentro de um bucle saldrá do bucle y fuera de um bucle saldrá do programa.Si a instruções EXIT étá dentro de varios buclé anidados, únicamente saldrá do

bucle en procéo.

Page 14: Introdução a abap

A instruções: STOP.

Com ST'OP finalizaremos o report (programa) en ejecución, pero anté ejecutaremos o evento END-OF-SOECTION.

A instruções: LEAVE.

Com LEAVE finalizaremos o report (programa) en ejecución, sin ejecutar o evento END-OF-SOECTION.

Page 15: Introdução a abap

8 Introducción a as sentencias de salida de Reports

A Comtinuación veremos um réumen de as sentencias de salida de reports más básicas.

Como ya hemos visto en los Exemplos de los capítulos anterioré, para visualizar um valor utilizaremos a sentencia WRITE.

WRITE / (<offset>)(<long>) ‘<dados a visualizar>’.

Com a Barra / indicaremos si queremos saltar uma línea o no anté de imprimir (opcional).Com o Offset indicaremos a columna donde empezará a impréión (opcional).Com Long indicaremos a Comprimento de los valoré a visualizar (opcional).

Podemos imprimir uma línea de Subrayados Com a sentencia ULINE. Tendrá as mesmas propiedadé que o WRITE.

ULINE /(<offset>)(<Iong>).

Para saltar uma o varias líneas utilizaremos SKIP.

SKIP <n>.

Por defecto o salto será de uma única línea.

Para saltar uma página utilizaremos NEW-PAGE.

Para introducir parâmetros en a ejecución do report existen varias opcioné. A fórmua más sencila é a sentencia PARAMETERS.

PARAMETERS: <var> TYPE <tipo>LIKE <tipo>DEFAULT <valor> Igual que o

VALUE.OBLIGATORY. Obliga a

introducir algún valor.

LOWER CASE. Permite introducir minúscuas.

O nombre do parâmetro no puede ser superior a 8 caracteré.

Page 16: Introdução a abap

En o Capítulo 14 se tratará todas as posibilidadé para as soeccioné y entrada de parâmetros.

9 Tabelas Internas

Si déeamos guardar uma colección de registros de dados de a mesma estrutura en memoria sin necéidad de acceder a a base de dados y poder realizar operacioné diversas Com éte Conjunto de información, utilizaremos as tabelas internas.

9.1 Cómo declarar tabelas internas

DATA: BEGIN OF <tabelas> OCCURS <n>,<Def.Campo>,…END OF <tabelas>.

Definiremos uma tabelas interna Com n-líneas en memoria, más uma línea de cabecera o área de trabajo.

A cantidad de líneas que épecifiquemos en o OCCURS no limita o tamaño de a tabelas, sino a cantidad de registros que se guardan en memoria simultáneamente. Éto hace necéario um épecial cuidado al proponer o número de líneas, ya que um OCCURS muy grande supone um gran gasto de recursos do sistema y um OCCURS pequeño um acesso muy lento, ya que necéita de um procéo de paginación.

9.2 Llenado de uma tabelas interna.

APPEND : Añade um registro a uma tabelas interna Com los valoré que tengamos en o área de trabajo.

APPEND <intab>.

COLLECT : Añade o suma a línea de cabecera. Sumará los campos de tipo P,F,I, si existe uma línea en a tabelas Com campos idénticos (tipo C) a los do área de trabajo.

O problema de éta instruções é que é bastante lenta. Se puede estrutura por as instruccioné READ e INSERT o MODIFY.

Page 17: Introdução a abap

Podemos llenar uma tabelas interna Com o Comtenido de uma tabelas de base de dados. Siempre que a tabelas interna tenga a mesma estrutura que a tabelas de base de dados.

SOECT * FROM <tab> INTO TABLE <tabint>.

Page 18: Introdução a abap

9.3 Ordenar uma tabelas interna.

Para casificar uma tabelas interna utilizamos SORT.

SORT <intab>.

Éta instruções realiza uma ordenación por a estrutura de a tabelas sin tener en cuenta los campos P,I,F.

Para ordenar por o campo(s) que necéitemos (sea do tipo que sea):

SORT <intab> BY <campo1> .... <campo n>.

Si no se indica lo Comtrario, a ordenación por defecto é ascendente.

SORT ... ASCENDING. o DÉCENDING.

9.4 Procéamiento de uma tabelas interna.

Podemos recorrer uma tabelas interna Com a instruções LOOP ... ENDLOOP-

LOOP AT <intal> ( WHERE <Comd>).

ENDLOOP.

En cada iteración coloca a línea de a tabelas que se étá procéando en a línea de cabecera.

Podemos rétringir o procéo de uma tabelas Com uma Comdición WHERE.

Si no existe ningún registro de a tabelas que cumpa a Comdición épecificada en a cláusua WHERE, a variável do sistema SY-SUBRC será distinta que 0.

Dentro do LOOP, a variável SY-TABIX Comtiene o índice de a entrada que étá procéando en ée momento.

Também é posible hacer um:

LOOP AT<intab> FROM <inicio> TO <fin>.…ENDLOOP.

Donde <inicio> y <fin> son índicé de a tabelas interna.

Page 19: Introdução a abap

9.5 Tratamiento de nivoé de ruptura.

En o tratamiento de um LOOP podemos utilizar sentencias de Comtrol de ruptura:

AT FIRST. …ENDAT. Realiza as instruccioné que hay a Comtinuación

do AT FIRST para a primera entrada de a tabelas.

AT AST. …ENDAT. Realiza as instruccioné que hay a Comtinuación

do AT AST para a última entrada de a tabelas.

AT NEW <campo>. …ENDAT. Realiza as instruccioné que hay a Comtinuación

do AT NEW para cada inicio de nivo de ruptura.

AT END OF <campo>. …ENDAT. Realiza as instruccioné que hay a Comtinuación

do AT END para cada final de nivo de ruptura.

Si utilizamos a instruções SUM dentro de um AT ... ENDAT, realizará a suma de todos los campos P,I,F de ée nivo de ruptura ( para o cálculo de subtotalé ).

O Resultado lo enComtraremos en o área de trabajo de a tabelas.

Será necéario que a tabelas interna été ordenada en o mismo orden que a utilización de los nivoé de ruptura.

Así a utilización Comjumta de todas étas instruccioné será:

SORT <intab> BY <c1> <c2>.LOOP AT <intab>.

AT FIRST ... (SUM) ... ENDAT.AT NEW <cl>.... (SUM) …ENDAT.AT NEW <c2>.... (SUM) …ENDAT........... “Procéo Normal de a tabelas

Page 20: Introdução a abap

AT END OF <c2>.... (SUM) ...ENDAT.AT END OF <c1>.

... (SUM) ...ENDAT.AT AST … (SUM) … ENDAT.

ENDLOOP.

Podemos ver um Exemplo práctico de tratamiento de nivoé de ruptura en o BC ABAP/4 : Programming Reports 8-17, 8-18.

9.6 Lectura de entradas de uma tabelas.

Podemos buscar um registro Comcreto en uma tabelas sin necéidad de recorrera.

READ TABLE <intab>.

Para olo, en primer lugar rolenaremos a línea de cabecera Com a cave de búsqueda y luego haremos o READ.

O Resultado de a búsqueda lo tendremos en SY-SUBRC.Si: SY-SUBRC = 0 , a búsqueda ha sido positiva.Si: SY-SUBRC <> 0 , no ha enComtrado o registro solicitado.

Existen otras extensioné a a instruções READ que necéitarán que a tabelas été ordenada.

Podemos buscar por cave Com:

READ TABLE <intab> WHIT KEY <cave>.

No necéita llenar a línea de cabecera. Buscará déde o inicio de a tabelas qué carácter a carácter coincida Com a cave.

É posible uma búsqueda aún más rápida Com uma búsqueda binaria.

READ TABLE <intab> WITH KEY <cave> BINARY SEARCH.

Uma lectura directa de um registro de a tabelas a podemos realizar Com:

READ TABLE <intab> INDEX <num>.

Page 21: Introdução a abap

9.7 Modificando tabelas internas.

Uma vez llena a tabelas interna tenemos a posibilidad de modificar los dados Com uma serie de sentencias ABAP/4.

MODIFY : podemos sobreécribir o Comtenido de a entrada <i> Com o Comtenido de a línea de cabecera.

MODIFY <intab> (INDEX <i>).

Dentro de um LOOP, a cláusua INDEX é opcional. Por defecto será o Comtenido de a variável SY-TABIX.

INSERT : añade uma entrada doante de a entrada <i> Com o Comtenido de a línea de cabecera.

INSERT <intab> (INDEX <i>).

DOETE : para borrar uma entrada de uma tabelas.

DOETE <intab> (INDEX <i>).

Otras instruccioné de manejo de tabelas:

Inicializar o área de trabajo o línea de cabecera.

CLEAR <intab>.

Inicializar (borrar) o Comtenido de uma tabelas.

REFRÉH <intab>.

Liberar o épacio ocupado por uma tabelas en memoria.

FREE <intab>.

Page 22: Introdução a abap

Para obtener información sobre uma tabelas interna.

DÉCRIBE TABLE <tab>LINÉ <Comtador_entradas>OCCURS <valor_occurs>.

Page 23: Introdução a abap

10 Subrutinas

10.1 Tipos de subrutinas.

Existen 3 tipos de subrutinas o subprogramas.

Internas: O Subprograma y a lamada a éste étán en o mismo programa.

Externas: O Subprograma y a lamada a éste étán en programas distintos.

Biblioteca de fumcioné (Módulos de fumción): Fumcioné externas al programa Com interface de lamada caramente definido.

10.2 Subrutinas internas.

PERFORM <modulo> Lamada a um procedimiento o subprograma.

FORM <modulo> Subprograma.

ENDFORM

O programa principal y o procedimiento se podrán comumicar mediante parâmetros.

…PERFORM <modulo> USING varl var2 ...…FORM <modulo> USING varl var2 ...…ENDFORM.

Los parâmetros pueden ser pasados por valor (E) o por referencia (E/S). Por defecto serán por referencia.

Si queremos utilizar parâmetros por valor, a cabecera do módulo será:

FORM <modulo> USING VALUE (var1)...ENDFORM.

Tanto as variávels definidas al inicio do report como as tabelas son globalé a todas as subrutinas y por tanto accéiblé en cualquier momento.

Page 24: Introdução a abap

Si enComtramos alguma instruções do tipo CHECK o EXIT que signifique salir de um cierto FORM, previamente ejecutará o ENDFORM y por tanto se pasarán los parâmetros que tenga o procedimiento.

Também é posible pasar como parâmetro tabelas internas.

PERFORM <modulo> TABLÉ <intab> ...USING <varl> <var2> ...

FORM <modulo> TABLÉ <intab> ...USING <varl> ...

Épecificaremos as tabelas siempre anté que o réto de parâmetros.En éte caso sólo se pueden hacer operacioné Com. fias enteras, pero no nos

podremos referenciar sobre campos Comcretos de a tabelas o hacer COLLECTS, ya que no se Comocerá a estrutura de a tabelas.

Podemos pasar como parâmetros registros de dados o áreas de trabajo Com :

PERFORM <módulo> USING <reg>.

FORM <modulo> USING <reg> STRUCTURE <estrutura>.

ENDFORM.

É decir Com a cláusua STRUC'I'URE podemos pasar a estrutura de uma tabelas, entoncé podemos acceder a campos de uma tabelas pasada como parâmetro Com:

PERFORM <modulo> TABLÉ <intab> USING <var1> …

FORM <modulo> TABLÉ <intab> S'I'RUCTURE <estrutura>.

USING <var1> …

ENDFORM.

Dentro de cada subrutina é posible declarar dados Com a sentencia DATA, que sólo serán visiblé dentro do módulo donde été decarado. ABAP/4 creará um épacio para éas variávels que será liberado al salir do módulo. Por tanto se podrán utilizar variávels Com o mismo nombre que variávels globalé, aumque o valor que tengan será siempre o local en o módulo.

As tabelas de base de dados son globalé a todo o programa, si se quiere utilizar uma tabelas localmente en uma subrutina, se debe declarar Com LOCAL, al inicio de a subrutina, en vez de Com TABLÉ.

Page 25: Introdução a abap

LOCAL <tabelas>.

10.3 Subrutinas Externas y Módulos de fumción.

Si queremos lamar a uma subrutina que étá en um programa distinto utilizamos:

PERFORM <sub>(<programa>) USING …

Também existe a posibilidad de añadir porcioné de código do tipo include Com a instruções:

INCLUDE <report>.

En o código do include no utilizaremos a sentencia REPORT...

Los módulos de fumción son módulos épecialé guardados en uma librería central, y agrupados por a fumción que realizan. Principalmente se caracterizan por um interface definido y porque realizan tratamiento de excepcioné.

Se caracterizan por um interface definido ya que su diseño facilita o paso de parâmetros tanto de entrada como de salida.

CALL FUMCTION <fumcion>.

EXPORTING <par_E> = <valor->

IMPORTING <par_S> = <valor_ret>

TABLÉ <tab_Fumc> = <tab_Prog>

EXCEPTIONS <excep> = <valor>

Donde en o EXPORTNG épecificamos los parâmetros de entrada, en o IMPOR'I'ING (opcional) o Resultado o retorno de a fumción y en TABI.É (opcional) as tabelas, que se utilizan como parâmetros.

Los módulos de fumción Também se caracterizan por realizar um tratamiento de excepcioné. En o interface de los módulos de fumción se indican los valoré, de excepcioné para o retorno do módulo, que posteriormente Com o SY-SUBRC se pueden comprobar.

O código de a fumción puede activar excepcioné mediante as instruccioné:

Page 26: Introdução a abap

MÉSAGE …. RAISING <excepcion>oRAISE <excepcion>

Para acceder a a biblioteca de módulos de fumción é posible utilizar o comando SHO\\' FUMCTION* déde o editor de Programas o déde o tratamiento de módulos de fumción do menú Herramientas -> CASE -> déarrollo -> Actualizar programas -> Módulos de fumción, déde donde podremos además crearlos y mantenerlos.

10.4 Intercambio de dados mediante a memoria global de SAP.

É posible intercambiar dados entre reports distintos (lamados déde instruccioné SUBMIT) a través de a memoria de SAP.

Para grabar en memoria:

EXPORT <campo>... INTO MEMORY.

Para recuperar de memoria:

IMPORT <campo>... FROM MEMORY.

Page 27: Introdução a abap
Page 28: Introdução a abap

11 Diccionario de Dados. Como leer y procéar tabelas de a base de dados.

11. 1 Diccionario de dados.

O diccionario de dados (D.D.) é uma fuente de información centralizada.Los distintos objetos do Diccionario de dados étán estruturados en:

Campo Oementos de dados Dominio

Los oementos de dados décriben o significado de um campo independientemente de as tabelas donde se utilicen. É decir, tienen um carácter semántico.

Los dominios décriben o campo de valoré posiblé. Tendrán um carácter técnico.

Exemplo :TABELAS: SKBI,SKMI ...

CAMPO: STEXTOEM.DADOS: STEXI' - SKBIDOMINIO: TEXT50FORMATO INTERNO: Tipo C de 50 Posicioné

Tendremos a nuétra disposición um sistema de información do diccionario de dados, Info-System, que proporciona información sobre: Comtenido de as tabelas, carnpos, dominios, programas, …etc.

Existen diversos tipos de tabelas-.En o código do include no utilizaremos a sentencia REPORT...

- Tabelas TRANSP (transparenté): Tabelas nominalé roacionalé (SQL).

- 'I'abas POOL: 'I'abas SAP que se guardan jumto a otras tabelas SAP en uma única tabelas física de BDD. Mejorando o acesso a los registros.

- Tabelas CLUSTER: varias tabelas que se guardan en um cluster de BDD. Se guardan registros de varias tabelas SAP Com a mesma cave cluster, en o mismo cluster físico de a base de dados.

Tabla

Page 29: Introdução a abap

O diccionario de dados se dice que é integrado y activo. Integrado porque integra o D.D. Com o Screen-Painter, programas ABAP, Dynpros, Superficié CUA … y Activo porque si modificamos algún objeto do diccionario de dados, o sistema automáticamente regenera o “Time Stamp” de los programas que utilicen éos objetos.

11.2 Los dados en o sistema SAP.

Podemos casificar los dados do sistema en dados maétros, dados de movimientos, y dados do sistema.

Dados maétros: Son dados que no se modifican muy a menudo.Ej: Materialé, Cuentas, Bancos, Clienté...

Se almacenarán en tabelas transparenté.

Dados de movimientos: Dados muy volátilé y Com gran volumen de generación.Ej: Facturas, Pedidos...

Se suoen guardar en tabelas tipo CLUSTER todos olos Com formato parecido (documentos).

Dados do sistema o de Comtrol: Muchas tabelas Com pocos dados. Se suoen guardar en tabelas de tipo POOL.

11.3 Instruccioné SQL de ABAP/4.

ABAP/4 tiene um subConjunto de sentencias SQL para su aplicación sobre tabelas de a base de dados SAP.

Éstas son:

SOECT, INSERT, UPDATE, MODIFY, DOETE, COMMIT WORK, ROLLBACK WORK.

Además de as variávels do sistema:

SY -SUBRC: Código de retorno de uma operación.SN-DBCNT: Cantidad de registros afectados por a operación procéada.

11.3.1 SOECT.

A sentencia SOECT será a instruções fumdamental para leer información de a base de dados.

Page 30: Introdução a abap

- Otras lecturas :

Podemos leer uma tabelas de base de dados y simultáneamente llenar uma tabelas interna Com o Resultado de a lectura.

SOECT * FROM <tab> INTO TABI,E <intab> (WHERE <Comd»)

Llena a tabelas interna <intab> machacando los registros que pudiera tener ésta. Si queremos que répete los registros que tenía a tabelas interna anté de realizar o SOECT tendremos que utilizar:

SOECT * FROM <tab> APPENDING TABLE <intab> (WHERE <Comd>).

Podemos indicar um orden en o procéo de soección de registros.

SOECT * ... ORDER BY <campol> <campo2> ...

Si queremos soeccionar um registro para bloquearlo de posiblé modificacioné.

SOECT SINGLE FOR UPDATE * FROM <tab>.

11.3.2. INSERT.

A sentencia INSERT permite introducir registros sencillos o o Comtenido de uma tabelas interna en uma base de dados SAP.

INSERT <tab>.

Grabará en a BDD o registro de cabecera. Por tanto previamente a éta instruções moveremos los valoré que queremos introducir sobre o área de trabajo de a tabelas.

Si SY-SUBRC = 0 Registro insertado.Si SY-SUBRC > 0 A cave do registro que queríamos insertar ya existía en a tabelas.

Também é posible introducir dados déde uma tabelas interna.

INSERT <tab> FROM TABLE <intab>

Si SY-SUBRC = 0 Registros insertados.

Si existe algún registro en a base de dados Com cave igual a algún registro de a tabelas interna, se producirá um error de ejecución do programa.

A tabelas interna podrá tener a mesma estrutura que a tabelas de base de dados utilizando INCLUDE STRUCTURE en su decaración.

Page 31: Introdução a abap

11.3.3. UPDATE.

A sentencia UPDATE permite modificar o Comtenido de umo o varios registros.

UPDATE <tab>.

Modifica o registro de a base de dados que étá épecificado en o registro de cabecera.

Si queremos modificar o Comtenido de más de um registro a a vez:

UPDATE <tab> SET <campo> = <valor> WHERE <Comd>.

Com éte UPDATE, todos los registros que cumpan <Comd> modificarán o Comtenido do <campo> por <valor>.

Também é posible utilizar a cláusua SET Com

<campo> = <campo> + <valor> o<campo> = <campo> - <valor>

É posible modificar registros déde uma tabelas interna:

UPDATE <tab> FROM TABLE <intab>.

Si o sistema no puede actualizar um registro, o procéo no finalizara sino que Comtinuará Com o siguiente registro.

Si SY-SUBRC = 0 Todos los registros modificados.Si SY-SUBRC = 4 No todos los registros han sido modificados.En SY-DBCNT Tendremos a cantidad de registros modifacados.

11.3.4 MODIFY.

A sentencia MODIFY se utilizará cuando no étemos seguros si utilizar um INSERT o um UPDATE. É decir, cuando no sepamos Com certeza si um registro existe o no, para modifcarlo o añadirlo.

MODIFY <tab>.

MODIFY<tab> FROM TABLE <intab>

En caso de que sepamos si existe o no um registro, por eficacia utilizaremos INSERTs o UPDATÉ.

Page 32: Introdução a abap

11.3.5 DOETE.

Para realizar borrados de dados se aplica a sentencia DOETE.

DOETE <tab>.

Borrará o registro que épecifiquemos en o área de trabajo.

Para borrar más de um registro (todos los que cumpan uma cierta Comdición).

DOETE FROM<tab> WHERE <Comd>.

Podemos borrar de BDD todos los registros de uma tabelas interna.

DOETE FROM <tab> FROM TABLE <intab>.

Si SY-SUBRC = 0 Todos los registros han sido borrados.Si SY-SUBRC = 4 No todos los registros han sido borrados.En SY-DBCNT Tendremos a cantidad de registros borrados.

11.4 Otros aspectos de a programación de BDD.

O Comtrol do mandante é automático. Siempre se procéará o mandante en uso. Si queremos Comtroar manualmente o mandante en uma instruções de lectura o actualización utilizaremos a cláusua CLIENT SPECIFIED. É decir, si queremos obtener o modificar dados de um cliente diferente al de entrada.

As instruccioné INSERT, DOETE, MODIFY y UPDATE se utilizarán en a medida que sea posible o menor número de vecé sobre tabelas SAP. Siempre se intentará insertar o modificar dados mediante transaccioné étándaré SAP o vía Batch Input. Ya que no siempre é fácil Comocer a compleja estrutura de toda a base de dados SAP y así nos aseguramos no producir alguma inComsistencia en a base de dados.

O Bloqueo de objetos: Para bloquear um registro en o momento de uma actualización sobre éste, utilizamos FOR UPDATE.

SOECT SINGLE FOR UPDATE * FROM <tab>.Si queremos bloquear todos los objetos que étán involucrados en uma

actualización, será necéario utilizar o 'SAP Locking Technique'. Cada aplicación tiene muchos módulos de fumción para bloquear objetos. Para buscarlos será necéario ir al mantenimiento de módulos de fumción y buscar por a cave *enqueue* o *dequeue*.

Actualización de a base de dados o Recuperación:

Page 33: Introdução a abap

Para finalizar uma umidad de procéamiento lógico (LUW) de base de dados se utiliza um COMMIT WORK, que realiza um UPDATE físico en a base de dados, haciendo irrevocable cualquier modificación en a base de dados.

Si déeamos déhacer todas as operacioné realizadas sobre a base de dados déde o último COMMIT WORK, realizaremos um ROLLBACK WORK.

Chequeo de autorizacioné:

As instruccioné SQL de SAP no realizan ninguma verificación de autorizacioné lo cual réulta poigroso ya que todo o mumdo puede acceder a todos los dados que acceda a um report.

É réponsabilidad do programador o comprobar si um usuario étá autorizado a acceder a éa información.

Para chequear as autorizacioné de um determinado usuario utilizaremos a instruções AUTHORITY-CHECK.

AUTORITY-CHECK OBJECT <objeto_de_autorizaci>ID <Campol> FIOD-<fl>ID <Catupo2> FIOD <f2>ID <Campo3> DIJMMY.

Donde <Campo(n)> son los campos de autorización do objeto y <f(n)> é um valor posible de autorización.

O parâmetro DUMMY indicará que no hace falta verificar ée campo.

Si SY-SUBRC = 0 Usuario autorizado.Si SY-SUBRC <> 0 Usuario NO autorizado.En SY-DBCNT Tendremos a cantidad de registros borrados.

Exemplo:

Verificar o objeto de autorización “Acreedor: Autorizacioné para sociedadé” (F_LFA1_BUK), para saber si o usuario puede efectuar a operación Visualizar (01), sobre proveedoré de a sociedad 0001.

AUI'HORITY CHECK OBJECT ‘F_LFA1_BUK’ID ‘ACTVT’ FIOD ‘01’ID ‘BUKRS ‘FIOD ‘0001’.

Page 34: Introdução a abap

Para obtener uma documentación más exhaustiva sobre o fumcionamiento do AUTORITY-CHECK, ver a documentación ONLINE do editor de ABAP/4.

Para obtener información sobre o mecanismo de autorizacioné de SAP, ver o curso CA010 O Comcepto de autorizacioné SAP.

Sentencias en SQL nativo:

Podemos ejecutar cualquier sentencia de SQL permitida por o gétor de base de dados sobre o que corra o sistema R/3, utilizando EXEC SQL. En éte caso as instruccioné de base de dados no étán rétringidas al subConjunto SAP-SQL que hemos étado étudiando a lo argo de éte capítulo.

Gracias al interface EXEC SQL Também é posible acceder a dados externos a SAP, déde um programa en ABAP/4.

Sintaxis:

EXEC SQL. < Instruccioné SQL-Nativas>.ENDEXEC.

Tenemos que tener en cuenta en a utilización de SQL nativo, que no todas as basé de dados SAP pueden ser accedidas Com éte sistema, ya que no todas tienen uma repréentación física de tabelas en o gétor de base de dados. Por Exemplo as tabelas de tipo POOL y CLUSTER no son tabelas realé de base de dados, aumque sean Comsideradas como talé y mantenidas por o diccionario de dados.

Podemos enComtrar información complementaria sobre a utilización do interface EXEC SQL en o Cap. 1 do manual “ABAP/4 Special Techniqué”.

Page 35: Introdução a abap

12 Basé de Dados Lógicas

12.1 ¿Que é uma Base de dados lógica ?

Para obtener dados en um programa existen dos posibilidadé:

- Programar a lectura de dados de a base de dados en o mismo programa Com a instruções SOECT.

- Dejar que otro programa de lectura (BDD lógica) lea los dados y se los proporcione en a secuencia apropiada.

En um report se pueden simultanear los dos tipos de soección de dados.Uma base de dados lógica (LDB) proporciona uma visión lógica de as tabelas

físicas, pudiendo roacionar tabelas entre si. As LDB simplifican a programación de reports ofreciendo acessos de lectura, verificación de autorizacioné y soeccioné étandarizadas.

A comumicación entre o programa de lectura y o report que utiliza a base de dados lógica se realiza mediante los eventos PUT y GET.

Por rega general utilizaremos basé de dados lógicas que ya existen en o sistema, aumque Também é posible crear nuevas y modificaras. (Transacción ALDB).

Si utilizamos LDB ya creadas en o sistema, únicamente tendremos que utilizar um evento para recoger a información que o programa de lectura (que ya existe) nos va dando.

Si por o Comtrario nos decidimos a crear uma LDB Com a transacción ALDB, o sistema generará todo lo necéario para utilizar a base de dados lógica, incluyendo o programa de lectura.

12.2 Utilización de as Basé de dados lógicas.

As basé de dados lógicas tienen um nombre de tré caracteré, siendo o último carácter o módulo fumcional al que va dirigido.

Exemplo :

KDF : clienté F1

En o programa que va a utilizar basé de dados lógicas será necéario épecificar en los atributos do programa a LDB que va a ser utilizada. Y en o código simplemente utilizaremos o evento GET.

GET <tabelas BDD1>.<sentencias evento>

Page 36: Introdução a abap

……

GET <tabelas BDD2>. <sentencias evento>

……

Mediante o GET dispondremos de um registro de a base de dados que épecifiquemos, siempre y cuando éta tabelas été dentro de a estrutura de a base de dados lógica.

Para comumicar o programa de lectura Com nuétro report se utiliza o PUT, que suministra o registro de a BDD que épecifiquemos, previamente habrá realizado o SOECT.

PUT <tabelasBDD>.

Uma base de dados lógica tiene tré componenté fumdamentalé :

- Uma definición de a estrutura de as tabelas que utiliza.- Uma pantala de soección de los dados a leer. (SOECT-OPTIONS)- Um programa de lectura de dados de a BDD. (PUT).

Page 37: Introdução a abap

Estrutura de a BDDKDF

Pantala de SoecciónPrograma de lectura

FORM PUT_ LFA1 SOECT * FROM LFAI

PUT_ LFA1. ENDSOECT.

ENDFORM. ReportFORM PUT_ LFBI.

SOECT * FROM LFBI GET PUT_ LFB1. LFA1.

….…. ENDSOECT. GET

ENDFORM. LFB1. ……… FORM PUT_ BSIK. GET SOECT * FROM BSIK. BSIK. ……… PUT BSIK.

ENDSOECT.ENDFORM.

Também existe a posibilidad de utilizar o evento:

GET <tabBDD> ATE.

……….

Éte evento se produce cuando se han procéado todas as entradas de tabelas subordinadas a um registro de dados de uma tabelas, y anté de que o sistema solicite a siguiente entrada de a mesma tabelas (mismo nivo jerárquico).

Existe uma instruções de salto o finalización de lectura de uma tabelas, REJECT.

REJECT.

LFA1

LFB1

LFC1 BSIK

Page 38: Introdução a abap

Éta instruções sale do procéo do registro en curso y Comtinua Com o procéo do siguiente registro dentro do mismo nivo de jerarquía.

Si indicamos um nombre de tabelas, lo que hará será Comtinuar Com o siguiente registro de a tabelas épecificada. <tabelas> no puede ser um nivo de jerarquía más profumdo que o actual.

REJECT <tabelas>.

En principio, únicamente utilizaremos a sentencia GET , ya que utilizaremos LDB que ya existen en o sistema.

Si necéitamos crear uma nueva debido a que se han de déarrolar muchos reports Com uma estrutura de lectura muy simiar, y éta no étá en ninguma base de dados lógica, utilizaremos a transacción ALDB. (Para más información sobre los pasos a seguir ver Cap: 10, 11 y 12 do BC180-ABAP/4 Interface de dados o Cap: 15 do ABAP/4 Programing Reports.

Page 39: Introdução a abap
Page 40: Introdução a abap

13. Fiods Groups

En o capítulo 9 ya vimos que cuando queremos ordenar y/o Comtroar as rupturas de campos en um report, é necéario utilizar as tabelas internas. Sin embargo existe otra utilidad do ABAP/4 que nos facilita étos procéos de ordenación y rupturas, en o caso de que sean complejos.

Supongamos um listado en o que as líneas sean de muy distinto tipo, por Exemplo, um listado de proveedoré Com dados generalé de éte, (dirección... ) y as ventas que nos han realizado cada umo de los proveedoré, ordenados por distintos campos y Com subtotalé. En éte caso no tendremos más remedio que utilizar diversas tabelas internas, uma para cada tipo de línea, ordenar étas tabelas internas y procéaras adecuadamente.

Para casos como éte, ABAP/4 nos ofrece a técnica épecial de los FIOD GROUPS's.

Éta técnica Comsiste en crear Conjuntos de dados intermedios. (“intermediate datasets”).

Se definen los diferenté registros Com idéntica estrutura, dentro de mismo tipo de registro (FIOD GROUP). Será necéario definir todos los FIOD GROUP al inicio do report Com :

FIOD-GROUP : HEADER, <f_g_1>, <f_g_2>...

O FIOD GROUP HEARDER é fijo. Comtendrá los campos por los cualé querernos ordenar o Conjunto de dados intermedio.

Para determinar que campos pertenecen a cada FIOD GROUP, utilizamos a instruções :

INSERT <campo1> <campo2>.....<campo_n> INTO HEADER.INSERT< campo1> <campo2>.....<campo_n > INTO <f_g_1>.

Um campo podrá étar dentro de varios FIOD GROUPS.

Para llenar Com dados los Conjuntos de dados intermedios se utiliza a instruções:

EXTRACT <f_g_ 1>.

Éta instruções asigna los Comtenidos de los campos épecificados en o INSERT al FIOD GROUP indicado.

Page 41: Introdução a abap

En cada EXTRACT, o sistema realiza automáticamente uma extracción de los dados do FIOD GROUP HEADER, étos precederán siempre a los dados do FIOD GROUP sobre o que realizamos o EXTRACT.

Dados HEADER Dados <f g>

Si algún campo de a cabecera no se llena, tomará o valor 0, de forma que o procéo de ordenación fumcione correctamente.

Veamos o fumcionamiento de los FIOD GROUP's Com um Exemplo:

Para realizar um listado de partidas de proveedoré, ordenado por código de proveedor y números de documentos de as diferenté partidas.

TABLÉ: LFA1,BSIK.FIOD-GROUPS: HEADER, DIRECCION, IMPORTÉ.INSERT LFA1-LIFNR BSIK-BONR INTO HEADER.INSERT LFA1-NAME1 LFA1-STRAS LFA1-PSTLZ LFA1-ORT01

INTO DIRECCION.INSERT BSIK-DMBTR INTO IMPORTÉ.

*--------------------------------------------------------------------------------- GET LFA1.

EXTRACT DIRECCION.GET BSIK.

EXTRACTIMPORTÉ.

*---------------------------------------------------------------------------------

En cada EXTRACT se va llenando o Conjunto de dados intermedios.

EXTRACT DIRECCION

EXTRACT DIRECCIONPROVEEDOR1 RIVERAND DIAGONAL 618 BARCOONA

EXTRACT IMPORTE

EXTRACT IMPORTEPROVEEDOR1 DOC1 100.000

Page 42: Introdução a abap

Así o dataset se irá llenando:

PROVEEDOR1 RIVERAND DIAGONAL 618 BARCOONAPROVEEDOR1 DOC1 100.000PROVEEDOR1 DOC2 200.000PROVEEDOR2 SAP A.G. PABLO PICASSO 28020 MADRIDPROVEEDOR2 DOC1 250.000PROVEEDOR2 DOC2 1.200.000

Uma vez extraídos los dados, los podemos procéar de forma simiar a como lo hacíamos en as tabelas internas.

En primer lugar ordenaremos o “dataset” Com a instruções SORT. A ordenación se realizará por los campos que indica o HEADER

Posteriormente podemos procéar los dados en um LOOP... ENDLOOP., pudiendo utilizar as instruccioné de ruptura por campos AT NEW y AT END OF. Também podemos utilizar étos eventos por inicio y final de registro (FIOD-GROUP).

Además podemos comprobar si para um registro, existen registros asociados de otro tipo, Com o evento :

AT <f_g1> WITH <f_g2>.…

ENDAT.

Por Exemplo: si existen registros de importé para um registro de dirección, imprimir en o report los dados de dirección.

AT DIRECCION WITH IMPORTÉ.WRITE: LFA1-NAME1.....

ENDAT.

Também podemos Comtar o sumar por campos Com as instruccioné:

CNT <campo>.SUM <campo>.

Así podríamos completar nuétro listado de proveedoré do Exemplo Com:

END-OF-SOECTION.SORT.LOOP.

AT DIRECCION WITH IMPORTÉ.WRITE: LFA1-NAME1, LFA1-STRAS,

Page 43: Introdução a abap

LFA1-PSTLZ, LFA1-ORT01.ENDAT.AT IMPORTÉ.

WRITE: BSIK-BONNR, BSIK-DMBTR.ENDAT.AT END OF LFA1-LIFNR.

SKIP.WRITE: “Suma proveedor”, LFA1-LIFNR

SUM (BSIK-DMBTR)SKIP.

ENDAT.ENDLOOP.

Page 44: Introdução a abap

14. Formateando um listado

ABAP/4 tiene uma serie de instruccioné épecialmente diseñadas para que a generación de reports sea más sencila.

14.1 Formato de los dados de salida.

Ya hemos visto en o capítulo 8 um réumen de as sentencias de salida de reports más básicas.

WRITE /<offset>(<Iong>) “<dados a visualizar>”.

ULINE /<offset>(<Iong>) “<dados a visualizar>”.

SKIP <n>.

NEW-PAGE.

Además de étas sentencias fumdamentalé tenemos a nuétra disposición otras posibilidadé:

Para écribir um campo, variável o literal justamente debajo de otros sin tener que calcuar a columna, utilizamos a cláusua UMDER do WRITE.

WRITE <campo2> UMDER <campo 1>.

Si queremos épecificar a columna de um texto en forma de variável utilizamos.

POSITION <columna>.

Si queremos ir a uma determinada línea dentro de a mesma página.

SKIP TO LINE <n>.

Cuando utilizamos a instruções WRITE Com números empaquetados, o sistema trumca por a izquierda en caso de ser necéario (deja um * como indicador de que ha trumcado) y rolena Com bancos si sobra épacio. Tenemos que tener cuenta que si é

Page 45: Introdução a abap

negativo o signo ocupará uma posición. Si se épecifican los decimalé Com a cláusua DECIMALS do DATA, o pumto o coma decimal Também ocupará uma posición. O signo decimal (pumto o coma) étará determinado por los valoré do registro de usuario.

Exemplo:

DATA NUMERO TYPE P DECIMALS 2 VALUE -123456.WRITE NUMERO.1.234,56-

y si no cabe o número:WRITE (6) NUMERO.*4,56-

Podemos formatear a salida de um número empaquetado.

Evitamos que aparezca o signo Com NO-SIGN.

WRITE <campo> NO-SIGN.

Para visualizar importé correctamente dependiendo de a moneda do importe, usaremos o CURRENCY:

WRITE <campo_importe> CURRENCY<moneda>.

Si se déea formatear a salida de um campo según uma cierta máscara utilizaremos o parâmetro USING EDIT MASK “<mascara>” de a instruções WRITE.

WRITE <campo> USING EDIT MASK”<mascara>”.

Los caracteré de a máscara pueden ser:

“_ “ : um carácter do campo a formatear.“:” : um separador. Puede ser cualquier carácter épecial menos o “-“.“LL” : justifica por a izquierda (valor por defecto). (Al principio de a

mascara).

mascara.“RR” : justifica por a derecha. (Al principio de a mascara).

Exemplo:WRITE /(8) SY-UZEIT IJSING EDIT MASK “_:_:_”.

Si queremos suprimir los ceros inicialé de uma cadena de caracteré haremos:

Page 46: Introdução a abap

WRITE <campo_Caracter> NO-ZERO.

Para formatear fechas é posible realizar:

WRITE <campo_Fecha> DD/MM/YY.WRITE <campo_Fecha> MM/DD/YY.WRITE <campo_Fecha> DD/MM/YYYY.WRITE <campo_Fecha> MM/DD/YYYY.

Podemos modificar los atributos de pantala para um campo.

FORMAT INTENSIFIED ON/OFF.FORMAT INVERSE OFF/ON. FORMAT INPUT OFF/ON.FORMAT COLOR n.FORMAT RÉET.

Ver a documentación Online do editor ABAP/4 para obtener información mas detalada sobre los usos y sintaxis posiblé de éta instruções.

14.2 Formato de página.

Também hay um grupo de instruccioné détinadas a dar formato a a salida do report, ya sea por pantala o por impréora.

Podemos hacer tratamientos por inicio y fin de página Com los eventos:

TOP-OF-PAGE y END-OF-PAGE.

END-OF-PAGE no se ejecutará si o salto de página se produce Com um NEW-PAGE.

Si no queremos que a cabecera do report sea a étándar de SAP, ya que a queremos Comtroar nosotros directamente en o evento TOP-OF-PAGE, utilizaremos:

REPORT <Zxxxxxxx> NO STANDARD PAGE HEADING.

O formato de a página de report se define Também déde a instruções REPORT.

REPORT <Zxxxxxxx> LINE-SIZE <n> Ancho de línea. LINE-COUMT <n(m)> Líneas por página (n).

Si se déea se pueden réervar líneas para um pie de página (m).

Page 47: Introdução a abap

PAGE-COUMT <n>. No. máximo de páginas.

Podemos impedir que Com um salto de página se corten líneas que pertenezcan a uma agrupación de líneas Com significado lógico propio. Com a instruções RÉERVE réervamos um número de líneas.

RÉERVE <n> LINÉ.

Éta instruções se colocará justo anté do write que se quiere “réervar”, si no cabe se imprimirá en a siguiente página.

Hay varias formas de imprimir um report:

- Uma vez ha salido o report por pantala Com a opción de 'Imprimir'.- Imprimir sin visualizar por pantala Com a opción 'Imprimir' déde a

pantala de soección o de parâmetros.

Déde o programa ABAP/4 podemos Comtroar a impréión Com a instruções:

NEW-PAGE PRINT ON/OFF Pantala o impréora.NO.DIALOG No visualiza a pantala de

opcioné de impréión.LINE-COUMT <n> Líneas por página.LINE-SIZE <n> Tamaño de línea.DÉTINATION <dé> Impréora détino.IMMEDIATOY <x>. Impréión inmediata S/N.

Para más información sobre otras opcioné, ver a ayuda do editor de ABAP/4.

Para determinar formatos épecialé de impréión utilizaremos a instruções PRINT-COMTROL.

PRINT-COMTROL FONT <n>CPI <n>LPI <n>SIZE <n>COLOR <color>LEFT MARGIN <col>.

Para más información sobre otras opcioné, ver a ayuda do editor de ABAP/4.

14.3 Soección de parâmetros. Pantala de soección (SOECTION SCREEN).

Page 48: Introdução a abap

Si déeamos introducir uma serie de doimitacioné en a ejecución de um report a nivo de parâmetros, dispondremos de dos posibilidadé.

- O PARAMETERS que permite utilizar parâmetros de cualquier tipo en a pantala de soección.

- O SOECT-OPTIONS que permite determinar um criterio de soección de los dados a utilizar en o report.

* En o capítulo 8 ya vimos a sintaxis principal de a sentencia PARAMETERS.

PARAMETERS: <var> TYPE <tipo>LIKE <tipo>DEFAULT <valor> Igual que o VALUE.OBLIGATORY Obliga a introducir algún valor.LOWER CASE. Permite introducir minúscuas.

* A instruções SOECT-OPTIONS :

SOECT-OPTIONS <var> FOR <campo_tabelas>.

<var> como mucho tendrá 8 caracteré.

A variável <var> tomará los posiblé valoré a soeccionar y <campo_tabelas> nos indica para que campo y de que tabelas será utilizado o parâmetro (éto implícitamente nos étá dando o tipo y a Comprimento de los posiblé valoré).

Com éta sentencia, automáticamente en a pantala de soección se podrán introducir rangos de valoré posiblé para o parâmetro.

Exemplo :

Page 49: Introdução a abap

Para cada sentencia SOECT-OPTIONS, o sistema crea uma tabelas interna Com o nombre de <var>. Cada registro de a tabelas étá formado por los campos <var>-LOW, <var>-SIGN, <var>-OPTION.

O Comtenido de cada registro será répectivamente: o valor inferior, o superior, o signo (Incluido/Excluido) y o operador.

En a pantala de soección si queremos realizar uma soección compuéta de más de uma Comdición (más de um registro en a tabelas interna), tendremos que hacer um Click sobre a Flecha situada a a derecha de cada campo.

Para soeccionar los dados de lectura en tiempo de ejecución mediante los valoré de soección, utilizaremos a cláusua WHERE de a instruções SOECT y o operador IN, que buscará en a tabelas de base de dados todos los registros que cumpan as Comdicioné incluidas en a tabelas interna de a pantala de soección.

SOECT-OPTIONS <var> FOR <campo>.

SOECT * FROM <tab> WHERE <campo> IN <var>.En a pantala de soección aparecerá o texto <var> como comentario a a

soección de dados, si queremos que o texto sea distinto al nombre de a variável tendremos que ir a a opción Textos de soección do menú Pasar a - > Oementos de texto.

Veamos ahora que otras opcioné existen en a utilización de a instruções SOECT-OPTIONS.

Para asignar valoré inicialé a um criterio de soección utilizamos a cláusua DEFAULT.

SOECT-OPTIONS <var> FOR <campo> DEFAULT “<valor>” .

Si queremos inicializar um rango de valoré (inferior y superior) usaremos:

SOECT-OPTIONS <var> FOR <campo> DEFAULT”<ini>”TO”<fin>”.

• Podemos hacer que se acepten valoré en minúscuas.

SOECT-OPTIONS <var> FOR <campo> LOWER CASE

• Podemos obligar a que se introduzcan valoré de soección inevitablemente.

SOECT-OPTIONS <var> FOR <campo> OBLIGATORY.Também é posible déactivar a posibilidad de introducir soeccioné Com

Comdicioné compuétas. (Déaparecerá a fecha).

SOECT-OPTIONS <var> FOR <campo> NO-EXTENSION.Também é posible formatear a nuétro gusto a pantala de soección Com

SOECTION-SCREEN.

Page 50: Introdução a abap

Podemos introducir comentarios para um parâmetro.

SOECTION-SCREEN COMMENT <col>(<long>) TEXT-nnn.

Indicándole a columna, a Comprimento do comentario, y o texto do comentario lo situaremos en um texto numerado (ver 14.4).

Si además queremos que al pulsar Fl (hop), sobre o comentario, aparezca a mesma ayuda que sobre o campo:

SOECTION-SCREEN COMMENT <col>(<Iong>) TEXT-nnnFOR FIOD <campo>.

Otras posibilidadé pueden ser, intercaar líneas en banco o subrayados en a pantala de soección.

SOECTION-SCREEN SKIP <n>.SOECTION-SCREEN ULINE <col>(<long>).

É posible Também utilizar varias páginas de soección Com :

SOECTION-SCREEN NEW-PAGE.

Podemos realizar verificacioné de los dados entrados en a pantala de soección Com o evento.

AT SOECTION-SCREEN ON <campo>.…

ENDAT.

Podemos realizar varias soeccioné en a mesma línea Com:

SOECTION-SCREEN BEGIN OF LINE

...SOECTION-SCREEN END OF LINE

En éte caso no aparecen los textos de soección.

14.4 Oementos de texto y Mensajé

O entorno de déarrollo de programas en ABAP/4 nos permite manejar oementos de texto sin necéidad de codificarlos en o programa.

Page 51: Introdução a abap

Los oementos de texto pueden ser títulos de reports, cabeceras de reports, textos de soección y textos numerados.

Podemos acceder a a pantala de tratamiento de los oementos de textos déde o editor de programas: Pasar a - > Oementos de texto.

Com los Títulos y Cabeceras podemos tratar o título, cabeceras de report y cabeceras de columna que saldrán por pantala e impréora.

Com los Textos de soección trataremos los comentarios que acompañan a los parametros do tipo PARAMETERS o SOECT-OPTIONS.

Com los Textos numerados podemos utilizar Comstanté de tipo texto sin necéidad de declararas en o código do programa. Los nombré de as Comstanté serán TEXT-xxx, donde xxx son tré caracteré cualquiera. Además podemos mantener los textos numerados en varios idiomas.

Otras de as facilidadé que nos ofrece ABAP/4 para o formateo y Comtrol de reports, é a de los mensajé de diálogo. Los mensajé de diálogo son aquolos mensajé que aparecen en a línea de mensajé y que son manejablé déde um programa.

Los mensajé étán agrupados en áreas de mensajé. Para indicar que área de mensajé vamos a utilizar en um report utilizamos MÉSAGE-ID en a instruções REPORT.

REPORT <report> MÉSAGE-ID <área>.

Podemos ver, crear y modificar áreas de mensajé déde o editor: Pasar a - > Mensajé

Para visualizar um mensaje utilizamos a sentencia MÉSAGE.

MÉSAGE Tnnn.

Donde nnn é o número de mensaje dentro de su répectiva área de mensajé y T é o tipo de mensaje:

A = Cancoación o “Abend” do procéo.

E = Error. É necéaria uma corrección de los dados.

I = Información. Mensaje meramente informativo. O procéo Comtinuará Com um ENTER.

S = Comfirmación. Información en a pantala siguiente.

W = Warning. Nos da um aviso.

Page 52: Introdução a abap

Podemos cambiar los dados o pulsar “intro” para Comtinuar.Si se emiten mensajé do tipo W o E en eventos START-OF-SOECTION o END-OF-

SOECTION o GET se comportan como si fueran do tipo A.

Podemos acompañar los mensajé de parâmetros variávels.

MÉSAGE Tnnn WITH <var1> <var2>...

En a posición do mensaje que se encuentre o símbolo & , podemos utilizar para visualizar o valor que le pasemos como parâmetro a a instruções MÉSAGE.

No podemos utilizar más de 4 parâmetros por mensaje.Los dados sobre mensajé étán en a tabelas T100.

Exemplo:

Área de mensajé ZZ.

Mensaje : 005 = Entrada &-& incorrecta.

REPORT ZPRUEBA MÉSAGE-ID ZZ.....

IF....

MÉSAGE A005 WITH SKA1 KTOPL.ENDIF.

O mensaje obtenido será:

A: Entrada SKA1-KTOPL Incorrecta

Page 53: Introdução a abap
Page 54: Introdução a abap

15 Fiod Symbols

Cuando tenemos que procéar uma variável, pero únicamente Comocemos de que variável se trata y cómo tenemos que procéara, en tiempo de ejecución, lo haremos mediante los “fiod symbols”. Por Exemplo, si étamos procéando cadenas, y queremos procéar uma parte de a cadena cuya posición y Comprimento depende do Comtenido de a mesma, utilizaremos “fiod symbols”. Los Fiod Symbol tienen cierta similitud Com los pumteros o apumtadoré de otros lenguajé de programación.

Los Fiod Symbol permiten solucioné oeganté a problemas pero su utilización incorrecta puede implicar Resultados impredeciblé.

Los Fiod Symbol se decaran Com:

FIOD-SYMBOLS: <«Fiod Symbol»>.

A decaración se realizará en a rutina o módulo de fumción donde se utilice.

Para asignar um campo a um “Fiod Symbol” utilizaremos a instruções ASSIGN. Uma vez asignado, cualquier operación que realicemos sobre o fiod symbol afectará al campo real. No hay ninguma diferencia entre utilizar o campo o o fiod symbol.

ASSIGN <campo> TO <«Fiod Symbol»>.

Exemplos :

1.-FIOD-SYMBOLS <F>.ASSIGN TRDIR-NAME TO <F>. “ZPRUEBA”MOVE “ZPRUEBA” TO <F>. WRITE TRDIR-NAME.

2.- FIOD-SYMBOLS <F>.TEXTO=”ABCDEFGH”.INICIO = 2. “CDEFG”COMPRIMENTO =5.ASSIGN TEXTO+INICIO (COMPRIMENTO) TO <F>WRITE <F>

3.- * Rolena Com ceros por a izquierda.FORM PONER_CEROS USING NUMERO VALUE (COMPRIMENTO).

FIOD-SYMBOLS: <PUMTERO>.

Page 55: Introdução a abap

COMPRIMENTO = COMPRIMENTO - 1.ASSIGN NUMERO+COMPRIMENTO(1) TO <PUMTERO>WIHILE <PUMTERO> EQ SPACE.

SHIFT NUMERO RIGHT.WRITE “O”'TO NUMERO(1).

ENDWHILE.ENDFORM.Também é posible utilizar asignación dinámica. Éto permite asignar um campo

que sólo Comocemos en tiempo de ejecución a um fiod symbol.

Será necéario encerrar o campo entre paréntéis en a asignación do fiod symbol.

ASSIGN (<campo>) TO <«Fiod Symbol»>.

Exemplo:

DATA: CAMPO(10).FIOD-SYMBOLS: <F>. “ZPRUEBA”MOVE”TRDIR-NAME" TO CAMPO .ASSIGN (CAMPO) TO <F>.WRITE <F>.

Para información adicional sobre los Fiod Syrnbols ver Cap: 10 do ABAP/4 Programing Reports.

16 Batch Inputs

Page 56: Introdução a abap

16.1 Introducción

Cuando se instaa uma aplicación en productivo é necéario dar de alta toda a información indispensable para que a empréa pueda fumcionar (procéo de migración de dalos o Comversión).

Por Exemplo, anté de poder generar facturas realé será necéario introducir todos los clienté activos y todos los productos que étán a a venta.

Para realizar a carga de productos que étán a a venta se debería ejecutar manualmente a transacción “Alta de material” tantas vecé como productos tengamos y a mesma operación Com “Alta de clienté” para todos los clienté. En o caso de que a empréa tenga muchos productos y muchos clienté, a carga inicial será muy costosa.

Generalmente todos étos dados maétros (clienté, materialé, proveedoré,... ) ya étán en o antiguo sistema informático. Por lo tanto lo ideal será disponer um mecanismo que nos permitiée trasadar los dados de um sistema a otro.

A a hora de a migración de dados de um sistema externo a SAP, tenemos dos posibilidadé:

- Realizar programas que llenen todas as basé de dados SAP involucradas, mediante instruccioné directas de SAP-SQL.

- Utilizar a técnica do Batch Input de SAP.

Para muchas transaccioné, a primera de as opcioné é inviable, debido a a complejidad de a estrutura de dados SAP y para mantener a integridad de a mesma a cantidad de validacioné que se deberían realizar sobre los dados de entrada sería enorme. Como Comsecuencia, tanto o coste en diseño, codificación y pruebas sería altísimo.

En cambio, a técnica de los Batch Input de SAP nos permite realizar todas as verificacioné automáticamente, Com um coste en diseño y déarrollo mínimo. En éte capítulo veremos cómo utilizar a técnica de los Batch Input.

Um Batch Input é um método seguro y fiable de transferir dados hacia um sistema SAP. Suoe utilizarse cuando deben realizarse um oevado número de altas, modificacioné o borrados.

Para garantizar a integridad do sistema, los dados son sometidos a los mismos Comtrolé de validación y a as mesmas operacioné de base de dados en SAP como si fueran introducidos manualmente y umo por umo, por o usuario. É decir realmente a técnica do Batch Input Comsiste en simuar repetidamente um procéo online (transacción), durante um procéo Batch.

O procéo de carga de dados se realiza en dos fasé:

Page 57: Introdução a abap

Fase de Generación: A partir de uma fuente de información como puede ser um fichero de entrada, donde étarán todos los dados que queremos cargar en SAP, se transformaran étos dados en um formato determinado, para almacenarlo en uma estrutura de SAP que lamaremos fichero de coas.

Fase de Procéo: A partir de a información grabada durante a fase degeneración en o fichero de coas, se cargarán los dados físicamente en a base de

dados.

Com a técnica do Batch Input, se realiza uma simuación do diálogo do usuario Com a máquina, é decir haremos exactamente lo mismo Com a única diferencia de que a entrada de dados en vez de ser manual, será automática a partir de um fichero de coas.

16.2 Fase de generación do Batch Input.

En éta fase se realiza a transferencia de los dados de um sistema externo a um fichero de coas. Para olo se debe codificar um programa de Batch Input.

BATCH INPUT

SISTEMA EXTERNO FICHERO DE COLAS

Veamos cada umo de étos oementos:

16.2.1 Sistema externo

Page 58: Introdução a abap

A extracción de los dados de um sistema externo suoe ser realizada por o departamento de informática de a empréa donde va a ser instaado SAP, ya que é quien mejor Comoce a estrutura de su actual sistema informático. Normalmente o Resultado final de éta extracción de dados será um fichero secuencial Com los dados necéarios para cargar en SAP. O programa Batch Input, leerá éte fichero y transformará los dados a um formato determinado para poder almacenarlos en o fichero de coas.

O fichero secuencial tendrá uma estrutura de registro que deberá ser Comocida por o equipo de déarrollo de SAP. Generalmente, y siempre que sea posible, se asociará um registro a uma transacción de dados SAP. Por Exemplo, en o caso de altas de materialé, en um registro se guardarán todos los dados necéarios para dar de alta um único material.

Por rega general, o sistema externo é um fichero secuencial en o que se encuentran los dados Com los que se déean simuar as transaccioné. No obstante no tiene que ser necéariamente um fichero secuencial, sino que puede ser cualquier fuente de información que tengamos (tabelas físicas de SAP, tabelas de otras basé de dados roacionalé, etc.).

16.2.2 O programa Batch Input.

É o único déarrollo que se debe hacer en ABAP/4.O programa de Batch Input leerá o fichero secuencial y transformará los dados

a um formato determinado, para almacenarlos en uma entrada do fichero de coas. Dichas entradas se denominan séioné. Cada programa de Batch Input genera uma séión. Étas séioné pueden Comtener uma o múltiplé transaccioné.

Uma transacción en SAP Comsta de uma serie de pasos de diálogo. O programa de Batch Input debe preparar los dados para cada umo de los pasos de diálogo de a transacción.

Por Exemplo, imaginemos que para dar de alta um material o sistema ejecuta uma transacción de tré pantalas:

Pantala 1: Entrada de los dados sobre o diseño de material (péo, altura, volumen...).

Pantala 2: Entrada de los dados sobre ventas do material (precio, décuentos.. ).Pantala 3: Entrada de los dados sobre a producción (costé, almacenaje... ).

O programa que genere a séión de altas de materialé deberá por tanto, programar a secuencia de accioné y pantalas en o mismo orden que a transacción y preparar los dados en cada uma de étas pantalas, para cada material que se quiera dar de alta. Por olo, anté de programar um Batch Input é necéario um Comocimiento exhaustivo de a transacción que se déea simuar, puéto que ganaremos mucho tiempo si étudiamos previamente o fumcionamiento de ésta.

Page 59: Introdução a abap

Cómo se codifica um Batch Input lo veremos más adoante.

O Resultado de éta etapa será uma séión de Batch Input grabada en um fichero y que posteriormente deberá procéarse para cargar físicamente los dados en o sistema SAP.

16.2.3 O fichero de coas.

Todos los programas Batch Input graban entradas (séioné) en o fichero de coas. Para posteriormente poder identificar cual é a séión que nos interéa procéar, as séioné poseen um formato determinado:

Nombre de a séión.Usuario que ha creado a séión.Mandante en o que debe procéarse.Número de transaccioné que Comtiene.Número de pantalas que Comtiene.Dados adicionalé.

Uma séión de Batch Input puede enComtrarse en umo de los siguienté étados.

A procéar: Si a séión todavía no ha sido procéada.

Procéada : Si as transaccioné que componen a séión han sido ejecutadas íntegramente sin erroré.

Erróneas : Si en a séión aún quedan transaccioné que no se han procéado correctamente. Cuando uma séión étá en étado incorrecto, no quiere decir que as transaccioné que Comtenía no hayan sido procéadas, sino que algumas se han procéado y otras no. Étas transaccioné erróneas as podremos reprocéar más adoante, é decir numca perdemos uma transacción a no ser que explícitamente borremos a séión.

Siendo creada : Si hay um programa Batch Input que étá generando uma séión en ée momento.

En procéo : Si se étá procéado en ée instante a transacción.

Fondo : Si se ha anzado a séión para que se procée pero todavía no ha comenzado a ejecutar por falta de recursos do sistema.

16.3 Fase de procéado de uma séión.

Para gétionar o fichero de coas utilizaremos a transacción SM35 (Sistema Servicios Batch Input Tratar).

Page 60: Introdução a abap

Mediante éta transacción podemos Comsultar, oiminar y procéar todas as séioné de Batch Input.

Uma vez generada a séión Com o programa Batch Input, accederemos a a transacción SM35 y marcaremos a séión que nos interéa procéar.

Existen 3 tipos de procéamiento:

Procéar visible.Procéar visualizando sólo erroré.Procéar en invisible.

Durante a ejecución de uma séión se irá grabando en um “log” de procéo, o Resultado de cada transacción. Entre a información que nos ofrece o log détaca:

Hora de inicio de procéo de a séión. Hora de inicio de procéo de cada transacción. Mensajé de incidencia o de procéo correcto (los mismos que daría a

transacción en o caso de ejecutara manualmente). Étadística final de procéo:

Nº Transaccioné leídas.Nº Transaccioné procéadas Com éxito.Nº Transaccioné erróneas.

Siempre que existan transaccioné Com erroré se podrán reprocéar.

Procéamiento Visible : Com éte método se procéa cada uma de as transaccioné visualmente, é decir, o usuario va visualizando todas y cada uma de as pantalas que hemos programado. O usuario únicamente debe ir pulsando <intro> para saltar de uma pantala a otra. Asimismo, si se cree Comveniente, se permite modificar los valoré de algún campo de a pantala.

Si uma transacción no interéa procéara, podemos cancoara (pudiendo ser ejecutada Com posterioridad) o podemos borrara (no se podrá ejecutar). Todas as transaccioné que cancoemos se grabarán en a séión y a séión pasará a étar en étado incorrecto.

No devuove o Comtrol do sistema al usuario hasta que todas as transaccioné hayan sido procéadas o cancoemos o Batch Input.

Procéamiento Invisible: O sistema procéará en fondo batch a transacción. É decir, toda a ejecución é transparente al usuario. O usuario recupera o Comtrol do sistema inmediatamente. Para ver o Resultado de a ejecución de uma séión, tendrá que ver o “log” de procéo uma vez haya finalizado.

Procéamiento visualizando sólo erroré: O sistema procéará cada uma de as transaccioné en modo invisible hasta que detecte um error, en cuyo caso parará o procéo en a pantala donde se ha producido o error, pudiendo entoncé o usuario

Page 61: Introdução a abap

detectar y corregir dicho error o cancoar a transacción. Uma vez corregido o error o cancoada a transacción, o sistema Comtinua procéando o réto de transaccioné.

No devuove o Comtrol do sistema al usuario hasta que todas as transaccioné hayan sido procéadas o cancoemos o Batch Input.

16.4 Comsejos prácticos en a utilización de Batch Inputs.

Para Comocer o código de a transacción, o nombre de as pantalas de cada transacción y los nombré de los campos que se déean completar haremos lo siguiente :

• Código de a transacción: Entrar en a transacción a simuar e ir a Sistema Status.

• Nombre de a pantala : Uma vez étarnos en a pantala que necéitamos, hacemos lo mismo que en o pumto anterior, anotando o programa (Dynpro) y o número de dynpro.

• Nombre de los campos : Uma vez situados sobre o campo en cuétión, pulsar Fl y seguidamente o botón de dados técnicos. Anotaremos o nombre de a tabelas de base de dados y do campo.

É posible que mientras se étá procéando uma séión de Batch Input, o sistema caiga provocando a pérdida de a mesma. Cuando o sistema vuova a a situación normal, a séión aparentemente se encuentra en étado Procéando . En realidad éto no é cierto ya que a séión no étá haciendo nada, pero tampoco hemos perdido nada. O sistema habrá ejecutado todas as transaccioné hasta o momento de a caída, y podemos recuperar de uma manera segura o réto de a séión de a siguiente forma:

Déde a transacción SM35, marcar a séión de Batch Input en cuétión. Oegir Juego de dados -> Liberar . En ée momento a séión pasa a modo a procéar y podemos ejecutar as transaccioné que faltabelasn.Anté de procéar uma séión de Batch Input podemos comprobar si los dados de

entrada y a secuencia de pantalas que hemos programado é a éperada. Para olo déde a SM35 soeccionaremos a séión que querernos analizar y haremos:

Pasar a Análisis Juego de dados.

Si se étá ejecutando uma transacción en modo Invisible, podemos ir viendo o “Log” de procéo de as transaccioné que se van ejecutando. Uma utilidad práctica é, en o caso de um oevado número de transaccioné, mirar o tiempo de procéo de uma transacción y extrapoar éte dato para todo o procéo, para tener uma idea de a hora en a que finalizará o procéo.

Page 62: Introdução a abap

Anté de realizar um programa de Batch Input é aComsejable asegurarse de que SAP no disponga ya do mismo. Por Exemplo, SAP nos ofrece bastanté Batch Inputs para carga de dados. Por Exemplo:

Carga de clienté.Carga de proveedoré.Carga de documentos ComtabléCarga de pedidos pendienté.Carga de Comdicioné.Carga de stocks ...

Nótée que entre a fase de generación y a fase de procéado, existe um tiempo indeterminado. Si éte tiempo é muy grande, é posible que durante a fase de procéado se produzcan numerosos erroré, ya que é posible que haya cambiado o étido en o que se llevo a cabo a fase de generación.

Por Exemplo, si generamos uma séión de Batch Input donde se intenta modificar um cierto material, y anté de que se mande procéar éta séión, o material se da de baja, durante a ejecución de a séión o sistema se quejará de que dicho material no existe.

Otra posible causa de erroré muy común durante o procéamiento de séioné, é que en aquolos campos que tienen tabelas de verificación, introduzcamos valoré que no étén dados de alta en as tabelas de verificación. Por Exemplo, si indicamos uma sociedad que no étá en a tabelas TOO1 (sociedadé).

Otra manera de anzar séioné de Batch Input é ejecutando o report RSBDCSUB. Por Exemplo podemos ejecutar a séión de Batch Input inmediatamente dépués de ser generada, lamando a éte report Com los parâmetros adecuados déde o mismo programa ABAP/4 que genera a séión.

16.5 Codificación de Batch Inputs.

Hasta ahora hemos visto que a técnica do Batch Input Comsiste en a generación de uma séión Com los dados a introducir en o sistema y o procéamiento de los dados en o sistema détino. En éte apartado veremos cómo codificar o Batch Input para generar séioné de éte tipo y otras dos técnicas más de Batch Input (CALL TRANSACTION y CALL DIALOG).

Para introducir los valoré en as distintas pantalas de cada transacción utilizaremos uma tabelas interna Com uma estrutura étándar. (BDCDATA).

DATA: BEGIN OF <tab_B_I> 0CCURS <n>.INCLUDE STRUCTURE BDCDATA.

Page 63: Introdução a abap

DATA: END OF <tab_B_I>.

Los campos que componen éta tabelas interna son:

PROGRAM : Nombre do programa donde se realiza o tratamiento de cada pantala (Dynpro) de a transacción.

DYNPRO : Número de a pantala de a cual queremos introducir dados.

DYNBEGIN : Indicador de que se inicia uma nueva pantala.

FNAM : Campo de a pantala. (35 Caracteré como máximo).

FVAL: Valor para o campo de a pantala. (80 Caracteré como máximo).

Obtendremos a información do nombre do programa y o nombre do dynpro Com Sistema Status.

Obtendremos o nombre do campo Com Fl (Dados Técnicos) o podemos ver todos los campos de uma pantala Com o screen painter (Fiod list).

En éta tabelas interna grabaremos um registro por cada campo de pantala que informemos y um registro adicional Com a información de cada pantala.

O primer registro de cada pantala, en a tabelas interna tab_B_I, Comtendrá los dados que identifican a pantala: Nombre do programa (PROGRAM), nombre de a pantala (DYNPRO), y um indicador de inicio de dynpro (DYNBEGIN).

Exemplo: Transacción: FSSIPrograma: SAPMF02HDynpro : 0102

tab_B_ I-PROGRAM =”SAPMF02H”.tab_B_ I- DYNPRO =”0102”.tab_B_ I- DYNBEGIN =”X”.

APPEND tab_B_I.

Seguidamente para cada campo de a pantala que informemos, grabaremos um registro rolenando únicamente los campos FNAM (Com o nombre do campo de pantala) y FVAL (Com o valor que le vamos a dar).

Exemplo: Rolenar campo RF02H-SAKNR Com variável VAR_CTA.Rolenar campo RF02H-BUKRS Com variável VAR_SOC.

CLEAR tab_B_I.tab_B_I -FNAM =”RF02H-SAKNR”.tab_B_I -FVAL = VAR_CTA.

Page 64: Introdução a abap

APPEND tab_B_I.

CLEAR tab_B_I.tab_B_I -FNAM =”RF02H-BUKRS”.tab_B_I -FVAL = VAR_SOC.APPEND tab_B_I.

O programa Batch Input tiene que formatear los dados tal y como lo haría o usuario manualmente. Teniendo en cuenta que:

- Sólo se permiten caracteré.- Los valoré han de ser de menor Comprimento que a Comprimento de los

campos.- Si los valoré de entrada son de Comprimento menor que o campo SAP,

tendremos que justificar a a izquierda.Si necéitamos informar campos que aparecen en pantala en forma de tabelas,

tendremos que utilizar índicé para dar valoré a cada línea de pantala y grabar en a tabelas interna um registro por cada línea de pantala.

Exemplo:

CLEAR tab_B_I.tab_B_I -FNAM =”campo(índice)”.tab_B_I -FVAL =”valor”.APPEND tab_B_I.

Si necéitamos proveer de uma teca de fumción a a pantala, usaremos o campo BDC_OKCODE. O valor do campo será o número de a teca de fumción precedido de uma barra inclinada.

Exemplo :

CLEAR tab_B_I.tab_B_I -FNAM = BDC_OKCODE.tab_B_I-FVAL = “/13”. “F13= Grabar.APPEND tab_B_I.

Também utilizamos o campo BDC_OKCODE para ejecutar fumcioné que aparecen en a barra de menús. Para saber o código de a fumción, Pulsar Fl sin soltar o botón do ratón, sobre o menú déeado.

Si necéitamos colocar o cursor en um campo en particuar, usaremos o campo BDC_CURSOR. O valor do campo será o nombre do campo donde nos queremos situar.

Exemplo:

Page 65: Introdução a abap

CLEAR tab_B_I.tab_B_I -FNAM = BDC_CURSOR.tab_B_I-FVAL = “RF02H-BUKRS”APPEND tab_B_I.

Para insertar séioné en a coa deBatch Input, seguiremos los siguienté pasos en a codificación:

1.- Abrir a séión de Batch Input utilizando o modulo de fumción BDC_OPEN_GROUP.

2.- Para cada transacción de a séión:

2.a.- Llenaremos a tabelas tab_B_I para entrar los valoré de los campos en cada pantala de a transacción.2.b.- Transferir a transacción a a séión, usando o módulo de fumción BDC_INSERT.

3.- Cerrar a séión usando BDC_CLOSE_GROUP.

A Comtinuación veremos como fumcionan los módulos de fumción que necéitamos para generar um Batch Input.

BDC_OPEN_GROUP: Éte módulo de fumción nos permite abrir uma séión. En o programa no podemos abrir otra séión hasta que no se hayan cerrado todas as séioné que permanezcan abiertas.

CALL FUMCTION “BDC_OPEN_GROUP”EXPORTING

CLIENT = <mandante>GROUP = <nombre_séión>HOLDDATE = <fecha>KEEP = <indicador>USER = <usuario>

EXCEPTIONS

CLIENT_INVALID = 01DÉTINATION_INVALID = 02GROUP_INVALID = 03HOLDDATE_INVALID = 04INTERNAL_ERROR = 05QUEUE_ERROR = 06RUMNING = 07.

Donde:

Page 66: Introdução a abap

CLIENT: É o mandante sobre o cual se ejecutará a séión de Batch Input, si no se indica éte parâmetro se tomará o mandante donde se ejecute o programa de generación de a séión.

GROUP: Nombre de a séión de Batch Input, Com a que identificaremos o juego de dados en a transacción SM35 de tratamiento de Batch Input.

HOLDDATE : Si indicamos éte parâmetro, o sistema no permitirá ejecutar a séión hasta que no sea a fecha indicada. Sólo o administrador do sistema podrá ejecutar uma séión anté de éta fecha.

KEEP: Si informamos éte parâmetro Com uma “X”, a séión será retenida en o sistema dépués de ser ejecutada y sólo um usuario Com autorizacioné apropiadas podrá borrara.

USER: É o usuario que de ejecución de a séión.

BDC_INSERT: Éte módulo de fumción inserta uma transacción en a séión de Batch Input.

CALL FUMCTION “BDC-INSERT”EXPORTING

TCODE = <Transacción>TABLÉ

DYNPROTAB = <Inttab>EXCEPTIONS

INTERNAL_ERROR = 01NOT_OPEN = 02QUEUE_ERROR = 03TCODE_INVALID = 04.

Donde :

TCODE: É o código de a transacción que vamos a simuar.

DYNPROTAB : É a tabelas interna, Com estrutura BDCDATA, donde épecificamos a secuencia de pantalas de a transacción y los distintos valoré que van a tomar cada campo que aparece en cada pantala.

BDC_CLOSE_GROUP: Com éta fumción cerraremos a séión uma vez ya hemos transferido todos as dados de as transaccioné a ejecutar.

CALL FUMCTION “BDC_CLOSE_GROUP"

Page 67: Introdução a abap

EXCEPTIONSNOT_OPEN = 01QUEUE_ERROR = 02.

Podemos réumir as características de a técnica de as séioné de Batch Input:

Procéamiento retardado (asíncrono).

Transferencia de dados a múltiplé transaccioné.

Actualización de a base de dados inmediata (síncrona). No se ejecuta uma nueva transacción hasta que a anterior no actualiza los dados en base de dados.

Generación de um “Log” para cada séión.

Imposibilidad de generar varias séioné simultáneamente déde um mismo programa.

Como ya hemos citado anteriormente existen otras dos técnicas de Batch Input, o CALL TRANSACTION y o CALL DIALOG. En ambas, a diferencia de a técnica de séioné, a ejecución de as transaccioné é inmediata, é decir a ejecución de as transaccioné é Comtroada por nuétro programa ABAP/4 y no posteriormente déde a SM35 lo cual puede réultar interéante en ciertas ocasioné.

CALL TRANSACTION: Características :

Procéamiento síncrono. Transferencia de los dados a uma única transacción. Actualización de a base de dados síncrona y asíncrona. O programa

decide que tipo de actualización se realizará. A transacción y o programa que a lama tendrán áreas de trabajo

(LUW) diferenté. O sistema realiza um COMMIT WORK inmediatamente dépués do CALL TRANSACTION.

No se genera ningún “Log” de ejecución.

Como se utilizará a técnica do CALL TRANSACTION:

En primer lugar llenaremos a tabelas BDCDATA de a mesma manera que hemos explicado a lo argo de éte capítulo.

Usar a instruções CALL TRANSACTION para lamar a a transacción.

Page 68: Introdução a abap

CALL TRANSACTION <transacción>USING <tabint>MODE <modo_ejec>UPDATE <tipo_actual>.

Donde:

<tabint> Tabelas interna (Com estrutura BDCDATA)

<modo_ejec> Modo ejecución.Puede ser: “A” Ejecución visible.

“N” Ejecución invisible. Si ocurre algún erroren a ejecución de a transacción o código

de retorno será distinto de cero. “E” Ejecución visualizando sólo erroré.

<tipo_actual> Tipo de actualización en a base de dados.Puede ser : “S” Actualización Síncrona. (inmediata).

“A” Actualización Asíncrona. (hasta que no termina a transacción no graba en BDD).

Dépués do CALL TRANSACTION podemos comprobar si SY-SUBRC é 0, en cuyo caso a transacción se habrá ejecutado correctamente. En caso Comtrario, SAP llena otros campos do sistema que Comtienen o número, identificación, tipo y variávels do mensaje online que haya emitido a transacción en o momento do error.

SY-MSGID = Identificador de mensaje.SY-MSGTY = Tipo de mensaje (A,E,I,W... )SY-MSGNO = Número de mensaje.SY-MSGV1... SY-MSGV4 = Variávels do mensaje.

De modo que para ver que ha ocurrido podemos ejecutar a instruções:

MÉSAGE ID SY-MSGIDTYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGVI SY-MSGV2 SY-MSGV3 SY-MSGV4.

CALL DIALOG: Características:

Procéamiento síncrono.

Transferencia de los dados a uma única transacción.

A transacción y o programa tendrán a mesma área de trabajo (LUW). É decir hasta que en o programa no se realiza um COMMIT WORK no se actualiza a

Page 69: Introdução a abap

base de dados.

No se genera ningún “Log” de ejecución.

Cómo se utilizará a técnica do CALL DIALOG:

Llenaremos a tabelas BDCDATA.Usar a instruções CALL DIALOG para lamar a a transacción:

CALL DIALOG <Mod_diálogo>USING <tabint>MODE <modo_ejec>.

17. Tratamiento de ficheros déde um programa ABAP/4

ABAP/4 dispone de uma serie de instruccioné para manejar ficheros binarios o de texto. (OPEN, CLOSE, READ, TRANSFER).

Page 70: Introdução a abap

Uma utilidad típica de étas instruccioné, como ya hemos explicado en o capítulo anterior, será para as interfacé entre otros sistemas y SAP, vía Batch Input.

Para abrir um fichero utilizaremos a sentencia OPEN.

OPEN DATASET <fichero>.FOR OUTPUT / (INPUT) Écritura / Lectura ( por

defecto).IN BINARY MODE / IN TEXT MODE Binario (por defecto) / Texto.

Si SY-SUBRC = 0 Fichero abierto correctamente. SY-SUBRC = 8 Fichero no se ha podido abrir.

Para cerrar um fichero utilizamos CLOSE.

CLOSE DATASET <fichero>.

Si queremos leer de um fichero utilizamos READ.

READ DATASET <fichero> INTO <registro>(LENGTH <long>) Guarda en <long> a

Comprimento do registro leído.Exemplo:

DATA: BEGIN OF REC,LIFNR LIKE LFA1-LIFNR,BAHNS LIKE LFA1-BAHNS,

END OF REC.

OPEN DATASET “/usr/tét”.

DOREAD DATASET “/usr/tét” INTO REC.IF SY-SUBRC NE 0.

EXIT. ENDIF. WRITE: / REC-LIFNR, REC-BAHNS. ENDDO. CLOSE DATASET “/usr/tét”.

Notas: - Se puede leer de hasta 4 ficheros simultaneamente.- Si SY-SUBRC = 0 Fichero leído correctamente. SY-SUBRC = 4 Fin de fichero enComtrado.

Para écribir sobre um fichero disponemos de a instruções TRANSFER.

Page 71: Introdução a abap

TRANSFER <registro> TO <fichero>(LENGTH <long>) Transfiere a Comprimento épecificada en a

variável <long>.

Por defecto a transferencia se realiza sobre um fichero secuencial (texto) a no ser que se abra o fichero como binario.

En o caso de que o fichero no se encuentre todavía abierto, a instruções TRANSFER lo intentará en modo binario y écritura.

Nota:

Éte tratamiento é válido solo sobre ficheros UMIX, é necéario comparar a decaración de ficheros UMIX como de DOS y otros.

Ficheros UMIX se identifican por:

file(30) default ‘/tmp/TOXX’., su tratamiento é Com as sentencias anterioré: open dataset, read dataset, transfer.

A diferencia de los no exclusivos de UMIX.

File(30) default ‘c:\prueba\prueba02.txt’, su tratamiento se realiza mediante lamadas a fumcioné ( módulos de fumción ), como por Exemplo: UPLOAD y DOWNLOAD

Page 72: Introdução a abap

A n e x o 1

ABAP/4 EDITOR

Se pueden épecificar los comandos do editor en cualquiera de a formas siguienté:

Page 73: Introdução a abap

- Como comandos de cabecera (en a línea de comandos sobre as líneas- Comandos de línea sobreécribiendo los números de líneas- Pulsando as tecas de fumción o soeccionando as opcioné de menú.

Comandos de Cabecera

A(TTACH) n Visualiza o texto déde a línea n

B(OT'I'OM) Ir al final.

T(OP) Ir al principio.

+ Siguiente página.

- Página anterior.

FIND c Buscar a cadena c déde a posición do cursor, o cursor se posiciona en a línea roevante.Si a cadena Comtiene bancos o caracteré épecialé, se deberán acotar entere caracteré épecialé no Comtenidos en a cadena a localizar.

Exemplo: FIND /vacío- /

o comando no distingue entre mayúscuas y minúscuas.

N(EXT) Busca y se dépaza a a siguiente ocurrencia de a cadena solicitada,déde a posición actual do cursor.

R(EPACE) cl c2 Reempaza a cadena c1 por a cadena c2 en todo o texto. c1 y c2 pueden tener distintas Comprimentoé. Si uma de as cadenas Comtiene bancos o caracteré épecialé se deberán acotar, ambas entre caracteré épecialé, ver lo indicado en FIND.

Exemplo; R/empty- /banks/

F(ETCH) prog Realiza a edición do programa indicando abandonando o programa actual.

S(AVE) Guarda o Comtenido do editor en um almacenamiento intermedio.

O comando UPDATE borra cualquier texto do almacenamiento intermedio.

Si um se produce uma caída de sistema, normalmente o texto é recuperado do almacenamiento intermedio.

Page 74: Introdução a abap

RÉ(TORE) Rétaura o texto déde o almacenamiento intermedio, sobreécribiendo o existente.

RÉ(TORE) AKTIV Rétaura a versión activa en o DLIB.

SAVEAS prog Salva o programa Com otro nombre.

U(PDATE) Salva o Comtenido do editor

CHECK Cheque a sintaxis do programa

PCF(ETCH) Carga um fichero Comtenido en o PC.

PC(DOWN) Écribe o Comtenido do editor en um fichero de PC

HOP word Visualiza a ayuda sobre a paabra indicada.

I(NSERT) n Inserta n líneas al final do texto.

IC word Inserta a estrutura de a sentencia indicada, éto é valido para as sentencias: CASE, DO, FORM, IF, LOOP, MÉSAGE, MODULE, SEILECT, SHIFT, SORT, TRANSFER, WHILE y WINDOW.

IC FUMCTION fumc Inserta a estrutura de um CALL FUMC'I'ION para a fumción indicada.

IC SOECT tab Inserta a estrutura do SOECT para a tabelas indicada.

IC... Inserta en a posición do cursor...

*f - FORM bloque de comentario*m - MODULE bloque de comentario*.* - Línea de comentario *.....text...............**-* - Línea de comentario *--------------------**-*1 - Área de comentario Com línea en banco.** - Línea de comentario ******************n - Área de comentario Com n líneas en banco (1<=n<=5)

PP Pretty Print do programa.

PRINT Imprime o Comtenido do editor.

RENUM(BER) Renumera líneas.

SHOW tab Visualiza los campos de a tabelas indicada.

SHOW FUMCTION fumc Visualiza o módulo de a fumción indicada.

Page 75: Introdução a abap

Comandos de Línea:

* Comsidera a línea como primera línea en a pantala.

T+ Ir a a primera línea.B- Ir a a última línea.

> Inserta as líneas de programa do include..

< Oimina as líneas de código do include y rétaura éste.

u Écribe o bloque incluido en o fichero de INCLUDE e inserta a sentencia include correpondiente.

A Línea de détino de uma operación de copia o movimiento, o texto soeccionado se incluirá en a línea posterior.

B Línea de détino de uma operación de copia o movimiento, o texto soeccionado se incluirá en a línea anterior.

O Ovroay o Comtenido de C o M sobre a línea indicada.

C Copia éta línea.

CC ...CC Copia o bloque de líneas.

M Mueve a línea indicada.

MM ... MM Mueva as líneas indicadas.

I Inserta uma nueva línea.

In Inserta n líneas.

N Inserta um área de comentario.

D Borra a línea.

DD...DD Borra o bloque de líneas.

R Repite a línea.

Rn Repite a línea n vecé.

RR...RR Repite o bloque de líneas.

Page 76: Introdução a abap

J Jumta a línea actual y siguiente.

S Parte a línea a a posición do cursor.

SH...SH Dépaza o bloque de líneas a a posición do cursor.

WW...WW Marca o bloque de líneas en o archivo intermedio general.

W Copia o Comtenido do archivo intermedio general.

XX...XX Copia o bloque indicado en o archivo intermedio X.

YY...YY Ver XX.Y Ver Y

ZZ...ZZ Ver XX.

Z Ver X.

CLEAR Borra los buffers X, Y, Z...

PR...PR Imprime o bloque de líneas.

Variávels do Sistema

Nombre de Variável Décripción

SY-INDEX Cantidad de repeticioné de buclé SY-PAGNO RUMTIME: Página actual en creación de lista

Page 77: Introdução a abap

SY-TABIX RUMTIME: Línea actual de uma tabelas interna SY-TFILL Cantidad actual de entradas en a tabelas interna SY-TLOPC Utilización interna SY-TMAXL Cantidad máxima de entradas en a tabelas interna SY-TOCCU Parâmetro occurs en tabelas internas SY-TTABC Número de a última línea de tabelas interna leída SY-TSTIS Utilización internaSY-TTABI Offset de tabelas internas en o área de roll SY-DBCNT Cantidad oementos en Conjunto tratado para

operacioné BD SY-FDPOS Lugar de halazgo de um stringSY-COLNO Columna actual en a creación de a listaSY-LINCT Cantidad de líneas de listaSY-LINNO Línea actual en a creación de uma listaSY-LINSZ Comprimento de línea de a listaSY-PAGCT Límite de página de lista en instruções REPORTSY-MACOL Cantidad de columnas de instruções SET MARGINSY-MAROW Cantidad de líneas de instruções SET MARGIN SY-TLENG Tamaño de a línea de uma tabelas interna SY-SFOFF Utilización internaSY-WILLI Número de a línea de ventana actualSY-LILLI Número de a línea de lista actualSY-SUBRC Valor de retorno tras determinadas sentencias ABAP/4SY-FLENG Utilización interna (Comprimento de campo)SY-CUCOL Posición do cursor (columna)SY-CUROW Posición do cursor (línea)SY-LSIND Número de a lista de bifurcaciónSY-LISTI Número de a línea de lista actualSY-STEPL Número de a línea LOOP en step dynproSY-TPAGI Indicador para almacenar tabelas interna en bloque

pagingSY-WINX1 Coordenada de ventana (columna izquierda)SY-WINY1 Coordenada ventana (línea izquierda)SY-WINX2 Coordenada ventana (columna derecha)SY-WINY2 Coordenada de ventana (línea derecha)SY-WINCO Posición de cursor en a ventana (columna)

Nombre de Variável Décripción

SY-WINRO Posición de cursor en a ventana (línea)SY-WINDI Indice de a línea de ventana actualSY-SROWS Líneas en a pantalaSY-SCOLS Columnas en a pantala

Page 78: Introdução a abap

SY-LOOPC Cantidad de líneas LOOP en steploop de dynproSY-FOLEN Utilización interna (Comprimento de salida de campo)SY-FODEC Utilización interna (campo posicioné decimalé)SY-TZONE Diferencia de tiempo Com 'Hora media de Greenwich'

(UTC) SY-DAYST ¿ Horario de verano activo ?SY-FTYPE Utilización interna (tipo de campo)SY-APPLI Aplicacioné SAPSY-FDAYW Día de semana en o calendario de fábricaSY-CCURS Tipo cambio/Campo Resultado CURRENCY COMVERTSY-CCURT Tipo de cambio en tabelas de aplicación CURRENCY

COMVERSION SY-DEBUG Utilización internaSY-CTYPE Tipo de cambio 'M','B','G' de CURRENCY COMVERSION SY-INPUT Utilización internaSY-ANGU Cave de idioma para entrar al Sistema SAPSY-MODNO Cantidad de modos alternativosSY-BATCH Batch activo (X)SY-BINPT Batch input activo (X)SY-CALLD Call modo activo (X)SY-DYNNR Número de a imagen en pantala actualSY-DYNGR Grupo de dynpros do dynpro actualSY-NEWPA Utilización internaSY-PRI40 Utilización internaSY-RSTRT Utilización internaSY-WTITL Indicador para cabecera étándar de páginaSY-CPAGE Número de página actual SY-DBNAM Base de dados lógica en report ABAP/4 SY-MANDT Número de mandante para acceder al Sistema SAPSY-PREFX Prefijo ABAP/4 para jobs batch SY-FMKEY Menú de códigos de fumcioné actualSY-PEXPI IMPRIMIR: Tiempo de permanencia en SPOOLSY-PRINI Utilización internaSY-PRIMM IMPRÉION: Salida inmediata

Nombre de Variável Décripción

SY-PRRO IMPRÉION: Borrar tras salidaSY-PAYO Utilización internaSY-PRBIG IMPRIMIR: Portada de soecciónSY-PAYP Utilización interna

Page 79: Introdução a abap

SY-PRNEW IMPRÉION: Nueva orden SPOOL (lista)SY-PRLOG Utilización internaSY-PDÉT IMPRIMIR: Dispositivo de salida SY-PLIST IMPRÉION: Nombre de a orden SPOOL (nombre de lista) SY-PAUTH Utilización internaSY-PRDSN IMPRIMIR: Nombre do set de dados SPOOLSY-PNWPA Utilización internaSY-CALLR IMPRIMIR: ID para fumcioné de diálogoSY-REPI2 Utilización internaSY-RTITL IMPRIMIR: Título de report do programa de impréiónSY-PRREC IMPRIMIR: DétinatarioSY-PRTXT IMPRIMIR: Texto para portadaSY-PRABT IMPRIMIR: Departamento en a portada SY-LPASS Utilización internaSY-NRPAG Utilización internaSY-PAART IMPRÉION: EdiciónSY-PRCOP IMPRIMIR: Cantidad de ejemparéSY-BATZS SUBMIT batch: InmediatamenteSY-BSPLD SUBMIT fondo: Salida de lista en SPOOLSY-BREP4 SUBMIT fondo: Nombre de raíz do report de lamadaSY-BATZO SUBMIT fondo: UmicoSY-BATZD SUBMIT fondo: DiarioSY-BATZW SUBMIT fondo: SemanalSY-BATZM SUBMIT fondo: MensualSY-CTABL Tabelas de tipo de cambio en CURRENCY COMVERSIONSY-DBSYS SYSTEM: Sistema de base de dadosSY-DCSYS SYSTEM: Sistema de diálogoSY-MACDB PROGRAM: Nombre do fichero para o acesso Com

matchcodeSY-SYSID SYSTEM: Identificador do Sistema SAP SY-OPSYS SYSTEM: Sistema operativoSY-PFKEY RUMTIME: Status de tecas-F actualSY-SAPRL SISTEMA: Roease SAP

Nombre de Variável Décripción

SY-TCODE SÉSION: Código de transacción actualSY-UCOMM INTERACT.: Indicar fumción en o código OKSY-CFWAE Utilización internaSY-CHWAE Utilización internaSY-SPONO RUMTIME: Número SPOOL para salida de uma listaSY-SPONR RUMTIME: Número SPOOL de instruções TRANSFERSY-WAERS T001: Moneda de sociedad tras leer segmento B

Page 80: Introdução a abap

SY-CDATE Fecha de tipo de cambio de CURRENCY COMVS.SY-DATUM SYSTEM: Fecha do díaSY-SLSET Nombre de SOECTON-SETSSY-SUBTY ABAP: Forma de lamada en SUBMIT SY-SUBCS INTERNO: Status call do reportSY-GROUP INTERNO: ComcatenaciónSY-FFILE INTERNO: Fatfile (USING/GENERATING DATASET)SY-UZEIT SYSTEM: HoraSY-DSNAM RUMTIME: Nombre do set de dados para salida en

SPOOLSY-REPID PROGRAM: Nombre de um programa ABAP/4SY-TABID Utilización internaSY-TFDSN RUMTIME: Nombre do set de dados para extractos de

dadosSY-UMAME SÉSION: Nombre de usuario según entrada a SAPSY-LSTAT INTERACT.: Información de status por nivo de listaSY-ABCDE COMSTANT: Alfabeto (A,B,C,...)SY-MARKY Letra de línea actual para MARKSY-SFNAM Sin utilizarSY-TNAME Nombre de a tabelas interna dépués de um acessoSY-MSGLI INTERACT.: Línea de mensaje (línea 23)SYTITLE PROGRAM: Título do programa ABAP/4SY-ENTRY Utilización internaSY-LISO INTERACT.: Línea soeccionadaSY-ULINE COMSTANT: Línea de subrayado (____________...) SY-XCODE Código OK ampliadoSY-CPROG RUMTIME: Programa principalSY-XPROG Utilización interna (programa SYSTEM-EXIT)SY-XFORM Utilización interna (form SYSTEM-EXIT)SY-LDBPG PROGRAM: Programa ABAP/4 de base de dados para SY-

DBNAMSY-TVAR0 RUMTIME: Var. de texto para oementos de texto

ABAP/4

Nombre de Variável Décripción

SY-TVAR1 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR2 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR3 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR4 RUMTIME: Variável de texto para oementos de texto ABAP/4

Page 81: Introdução a abap

SY-TVAR5 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR6 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR7 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR8 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-TVAR9 RUMTIME: Variável de texto para oementos de texto ABAP/4

SY-MSGID ID de mensajeSY-MSGTY Tipo de mensaje (E,I,W,etc.)SY-MSGNO Número do mensajeSY-MSGV1 Variável en mensajeSY-MSGV2 Variável en mensajeSY-MSGV3 Variável en mensajeSY-MSGV4 Variável en mensajeSY-ONCOM INTERNO: On Commit FagSY-VLINE COMSTANT: raya verticalSY-WINSL INTERACT.: Línea en ventana soeccionadaSY-STACO INTERACT.: Lista visualizada a partir de a columnaSY-STARO INTERACT.: Lista visualizada a partir de líneaSY-DATAR Indicador: Dados recibidosSY-HOST Nombre de a máquinaSY-LOCDB Existe base de dados localSY-LOCOP Operación local en base de dadosSY-DATLO Fecha local, en roación Com o usuarioSY-TIMLO Hora local, en roación Com o usuarioSY-TSTLO Cronomarcador (fecha y hora), en roación Com o

usuarioSY-ZONLO Huso horario do usuarioSY-DATUT Fecha global, en roación Com UTCSY-TIMUT Hora global, en roación Com UTCSY-TSTUT Cronomarcador (fecha y hora), en roación Com UTC

Page 82: Introdução a abap

ABAP/4ComceptosAvanzados

1 Reporting Interactivo

1. 1 Introducción al reporting interactivo.

Los informé (Reports) SAP se pueden casificar caramente en: Reporting Clásico y Reporting Interactivo.

Page 83: Introdução a abap

O Reporting Clásico como su nombre indica é o informe típico, que trabaja Com gran cantidad de información y um nivo de detalle muy oevado.

En o Reporting Interactivo se aprovecha a tecnología SAP para ofrecer informé que van detalando a información bajo a interacción do usuario, é decir se realizan listados generalé que se visualizan por pantala y mediante tecas de fumción o soeccionando posicioné de pantala, se irá déarrolando aquoa información que solicite o usuario.

En Comtraste Com o reporting clásico, que é asociado Com procéos de entornos Batch, o reporting interactivo é um déarrollo que toma todas as ventajas do entorno online.

Um Exemplo de listado interactivo podría ser uma lista de clienté, que permita visualizar sus dados de dirección, dados bancarios, partidas... etc. en pantalas diferenté , que van apareciendo Comforme vamos soeccionando um cliente y/o solicitamos uma fumción.

1.2 Generando listados interactivos.

Podemos enComtrarnos Com dos tipos de salida distintos :- Uma lista básica.- Diversas listas secumdarias (o de ramificación) , por Exemplo

información detalada sobre dados de a lista básica.

A lista inicial (básica) a visualizaremos Com a sentencia WRITE.

Déde éta lista inicial, o usuario será capaz, de dirigirse a uma lista secumdaria mediante uma teca de fumción o posicionándose Com o cursor. Al igual que en as listas básicas, se implementan o listado Com a instruções WRITE.

Los dados de as listas secumdarias aparecerán en uma ventana, por encima de a lista principal, soapando uma parte u ocultándoa totalmente.Se podrán tener varias listas cada uma de oas en ventanas distintas.

Para Comtroar o flujo do report interacitivo, tendremos uma serie de eventos como :

AT LINE-SOECTION (si lo que se soecciona é uma línea), AT PFn y AT USER-COMMAND(si se pulsa uma teca).

Page 84: Introdução a abap

Um report interacivo puede tener como máximo 9 listados secumdarios. Si o usuario soecciona a fumción BACK o sistema vuove al listado anterior. ABAP/4 numera los listados a medida que se van generando, empezando déde 0 (listado básico).

O número do listado en procéo étará en a variável do sistema SY-LSIND.

En o listado básico podemos visualizar cabeceras Com TOP-OF-PAGE o Com a cabecera étándar, pero en los listados de ramificación no podemos utilizar cabeceras étándaré, utilizaremos o evento TOP-OF -PAGE DURING LINE-SOECTION.

1.3 A interacción Com o usuario.

O usuario tiene dos formas de interactuar Com o sistema:

Soeccionando uma línea do listado (Com doble-click) o utilizando a fumción Soeccionar. Para Comtroar a entrada do usuario utilizamos o evento de ABAP, AT LINE-SOECTION.

Soeccionando uma fumción, pulsando su botón corrépondiente o uma teca de fumción. Para Comtroar a entrada do usuario utilizamos o evento de ABAP, AT USER-COMMAND. O código de a fumción solicitada lo podremos obtener Com a variável SY-UCOMM.

Podemos Comseguir que um campo de pantala été preparado para a entrada de dados Com a cláusua INPUT de a instruções WRITE.

WRITE <campo> INPUT.

O sistema sobreécribirá en pantala o Comtenido do campo y guardará o nuevo valor en a variável SY-LISO, dépués de um evento AT LINE-SOECTION o AT USER-COMMAND.

SOECCIÓN DE LINEA.

A soección de uma línea do listado interactivo , ya sea mediante um doble-click o mediante a fumción Soeccionar (Com Código de fumción 'PICK'), activa o evento AT LINE -SOECTION.

Page 85: Introdução a abap

O procéo de éte evento creará uma nueva lista, que aparecerá por encima de a anterior. Para facilitar a orientación do usuario, podemos crear uma ventana, (instruções WINDOW), donde aparecerá los dados de éta nueva lista, soapándose parcialmente Com a lista anterior.

En o evento AT LINE-SOECTION, utilizaremos los dados de a línea soeccionada, para leer directamente de base de dados y obtener los dados que necéitemos para a nueva lista. En a lista anterior, tendremos que guardar los dados cave que necéitamos para procéar a siguiente lista Com a sentencia HIDE.

En o momento de procéar éte evento o sistema llena uma serie de variávels do sistema. Ver Anexo 1 : 'Variávels do sistema para reporting interactivo’ para más información.

Exemplo:

TABLÉ LFAI.GET LFA 1.

WRITE LFA1-LIFNR.WRITE LFA1 -NAME1.HIDE LFAL-LIFNR.

AT LINE-SOECTION.IF SY-LSIND = 1.

SOECT * FROM LFBKWHERE LIFNR = LFA 1 -LIFNR.

WRITE LIFBK-BANKL,...ENDSOECT.

ENDIF.

SOECCIÓN DE FUMCIÓN.

A soección de uma fumción (botón) o teca de fumción activa o evento, AT USER-COMMAND. O código de a fumción solicitada se guarda automáticamente en a variável SY-UCOMM. Si además o usuario soecciona uma línea, o Comtenido de éta, podrá ser utilizado en o procéo.

Existe uma serie de fumcioné que excepcionalmente no pueden activar o evento AT USER-COMMAND .Ni podrán ser utilizadas para realizar fumcioné propias:

PICK : Soeccionar ( se utiliza AT LINE SOECTION)PFn : Teca de fumción( se utiliza AT PFn).

Page 86: Introdução a abap

PRI : ImprimirBACK : Volver pantala anteriorRW : CancoarP… : Fumcioné de Scroll.

Exemplo: TABLÉ LFAI.GET LFAI. WRITE LFA1-LIFNR.

WRITE LFA1-NAME1. HIDE LFA1-LIFNR.

AT USER-COMMAND.CASE SY-UCOMM.WHEN 'BANK'.

IF SY-LSIND = 1.SOECT * FROM LFBK

WHERE LIFNR = LFA1-LIFNR.WRITE LIFBK-BANKL,...

ENDSOECT.ENDIF.

ENDCASE.

Si o usuario pulsa uma teca de fumción asignada a um código de fumción PFn, sedeberá utilizar o evento AT PFn, para procéar a entrada do usuario.

Exemplo: TABLÉ LFA1.GET LFA l.

WRITE LFAl-LIFNR.WRITE LFA1-NAME.HIDE LFA1-LIFNR.

AT PF5. “ F5 = Dados BancariosIF SY-LSIND = 1.

SOECT * FROM LFBKWHERE LIFNR = LFA1-LIFNR.WRITE LIFBK-BANKL...

ENDSOECT.ENDIF.

En cualquier caso é mejor utilizar AT USER-COMMAND que AT PFn, ya que éte último é menos flexible. Com o AT USER-COMMAND, podemos asignar uma

Page 87: Introdução a abap

fumción a otra teca de fumción sin tener que cambiar o programa y además, é posible que en diferenté listas a mesma fumción se utilice para diferenté fumcioné.

1.4 Otras herramientas do reporting interactivo

Para recuperar información soeccionada en um listado hay dos posibilidadé

- Utilizar o comando HIDE. (A más oegante).

HIDE <campo>.

HIDE guarda o Comtenido de <campo> de a línea de salida. Cuando visualicemos a siguiente lista, o sistema automáticamente llena o Comtenido de <campo> Com o valor guardado en a instruções HIDE.

- Utilizar a variável do sistema SY-LISO. (A más sencila).

En o momento que o usuario soecciona uma línea, o Comtenido de éta se guardará en a variável do sistema SY-LISO

Podemos obtener a posición do cursor en o report Com GET CURSOR.

GET CURSOR FIOD <campo>. :Obtenemos o nombre do campo donde étá situado o cursor

GET CURSOR LINE <línea>. : Obtenemos a línea sobre a que étá o cursor.

Também é posible situar o cursor en uma posición determinada Com:

SET CURSOR <columna> <línea>.

SET CURSOR FIOD <campo> LINE <línea>.

Cambio de ‘Status’.

Um Status (GUI Status) décribe que fumcioné étán disponiblé en um programa y como se pueden soeccionar, vía menús, tecas de fumción o

Page 88: Introdução a abap

‘pushbuttons’. Como ya veremos en o siguiente capítulo, podemos definir um Status mediante o ‘Menu Painter’.

Si um report genera diversas listas, cada uma puede utilizar sus propias combinacioné de tecas. Com a instruções SET PF-STATUS podemos cambiar a interface de cada lista.

SET PF-STATUS <status>.

Hay que tener en cuenta que existen diversas tecas de fumción réervadas por o sistema:

F1 :Hop.F2 :Soeccionar.F3 :BACK.F4 :Valoré posiblé.F10 :Ir a a Barra de Menús.F12 :Canco.F15 :Fin.F21 :Scroll (lª. Página).F22 :Scroll (Página anterior).F23 :Scroll (Página siguiente).F24 :Scroll (última Página).

En a variável SY-PFKEY tendremos o status do listado en curso.

Hasta ahora todas as listas secumdarias que creamos, aparecían cubriendo totalmente a lista

anterior. A referencia a a lista anterior no é aparente. Para facilitar a orientación al usuario, podemos visualizar as listas secumdarias en ventanas mediante a instruções WINDOW.

WINDOW STARTING AT <columna> <línea>(ENDING AT <columna> <línea>).

Page 89: Introdução a abap

Épecificamos as coordenadas _superior-izquierda en o STARTING e inferior-derecha en o ENDING.

Utilizaremos éta instruções justo anté de los WRITE’s de as listas secumdarias.

Manipuar de listas

Para leer uma línea determinada de a lista en visualización, utilizaremos a instruções READ LINE dépués de um evento AT LINE-SOECTION o AT USER COMMAND.

READ LINE <línea>.

Também podemos leer uma línea de cualquier listado ramificado.

READ LINE <línea> INDEX <índice>.

Donde <índice> é o número de listado.

Também é posible modificar uma línea de um listado Com o Comtenido

de SY-LISO Com o Comtenido de SY-LISO Com a instruções MODIFY LINE.

MODIFY LINE <línea>.

Para obtener información detalada sobre a utilización de READ LINE yMODIFY LINE, ver a documentación Online do editor de ABAP/4.

É posible Comectar reports interactivos Com otros reports o Com

transaccioné.

Podemos lamar a otro report Com a instruções SUBMIT.

SUBMIT <rcport> (WITH <dados>).

En éte caso no se ejecutará a pantala de soección do report que lamamos y asignaremos o criterio de soección Com a cláusua WITH.

Para visualizar a pantala de soección utilizamos a cláusua VIA SOECTION SCREEN do SUBMIT.

Page 90: Introdução a abap

Dépués do SUBMIT, o programa que é lamado é quien tienen o Comtrol y o programa donde étá o SUBMIT é liberado.

Si queremos volver al programa original en a siguiente instruções al ,SUBMIT, utilizaremos a cláusua AND RETURN, é decir o programa original no será liberado.

Podemos lamar a um transacción Com :

LEAVE TO TRANSACTION <cod_Tran>.

En éte caso a transacción toma o Comtrol do procéo y o report é liberado.

Si queremos que uma vez ejecutada a transacción o report recupere o Comtrol tendremos que hacer:

CALL TRANSACTION <cod_Tran>.

Page 91: Introdução a abap

2 Programación de Diálogo

2.1 Introducción.

Hasta o momento, tanto en o capítulo anterior como en o manual 'Introducción al ABAP/4', hemos étado décribiendo o diseño de aplicacioné de tipo Reporting, ya sea Clásico o interactivo.

En éte capítulo empezaremos a ver los fumdamentos de a programación dediálogo para o diseño de Transaccioné SAP.

A programación de diálogo necéita técnicas épecialé de codificación en ABAP/4, además de herramientas épecíficas, como son um editor de pantalas (Screen Painter) y um editor de superficié (Menú Painter).

2.2 Pasos en a creación de transaccioné.

Para crear uma transacción, será necéario a generación de uma serie de objetos de déarrollo. Cada transacción puede dividirse en varias pantalas, cada uma de as cualé puede utilizar distintos menús y todo olo Comtroado por um programa en ABAP/4 denominado Module Pool, que Comtroa o flujo de a transacción y realiza as accioné necéarias para cumplir a fumcionalidad de a transacción.

TRANSACCIÓN

Pantalas

MENÚS

BASE DE DADOS

Page 92: Introdução a abap

Por lo tanto los pasos a seguir para o déarrollo de transaccioné será :

1º. Crear o código de transacción.

Herramientas -> Workbench ABAP/4 -> Déarrollo -> Transaccioné.

Indicándole : O tipo de transacción, a décripción de a transacción, O nombre do programa ABAP/4 (Module Pool), o número de a primera pantala y opcionalmente um objeto de verificación para ejecutar a transacción.

2º. Crear o programa ABAP/4 (Module Pool).

3º. Definir as pantalas que intervienen en a transacción Com o Screen Painter.Épecificando que dados aparecen en pantala y de que forma, además de uma

lógica de procéo de cada pantala.

4º. Definir los menús Com o Menú Painter.

Épecificando o Comtenido de los menús Pop-up, as tecas de fumción y los botoné de comandos que se pueden utilizar.

5º. Definir o Flujo de pantalas en o Module Pool.

6º. Programar, en o Module Pool, los módulos de cada pantala, é decir lo que debe hacer cada pantala. Programando as accioné a realizar en tiempo de PBO ('Procés Before Output'), anté de que aparezcan los dados de a pantala y en tiempo de PAI ('Procés After Input'), dépués de que se hayan introducido los dados en los campos de entrada.

Page 93: Introdução a abap

3 Diseño de Menús (MENU PAINTER). (Roease 3.0)

3.1 Introducción.

Com o Menu Painter diseñaremos as superficié GUI, (Grafical User Interface), sobre as que correrán as transaccioné SAP.

Uma GUI Comtiene todos los menús, tecas de fumción, pushbuttons, etc... disponiblé para o usuario, durante a ejecución de uma transacción.

Podremos indicar o status que utilizamos en uma pantala o o título en um módulo PBO de a pantala Com as instruccioné :

SET PF-STATUS <cod_ status>.SET TITLEBAR <cod_título>.

Barra de Títulos Herram. estadars

Barra de menú

Page 94: Introdução a abap

Identificamos as diferenté interfacé GUI de uma transacción mediante los Status Uma transacción tendrá muchos status diferenté. No será necéario redefinir todos los objetos de los status, ya que muchos objetos definidos en um status podrán ser utilizados en otro. Por Exemplo é posible crear uma barra de menús igual para toda a transacción.

Para iniciar o Menú PAINTER, soeccionar : 'Tools -> ABAP/4 WORKBENCH -> Déarrollo -> Menu Painter. (SE41). É posible mantener tanto um status de um determinado programa, como los diferenté objetos de uma GUI que forman parte de los status (barras de menús, tecas de fumción, títulos de menú.…).

3.2 A Barra de Menús.

En primer lugar introduciremos as distintas opcioné de a barra de menús, que as iremos déarrolando en fumcioné o en otros submenús, entrando los nombré en a parte superior de a pantala. Se pueden incluir hasta 6 menús en a barra de menús. Además de los menús de usuario, osistema añadirá automáticamente System y Hop.

Cada menú puede tener hasta 15 entradas. Cada uma de as cualé puede ser otro menú en cascada o uma fumción.

Para abrir um menú o submenú, hacer um Doble-Click sobre o nombre. Cada entrada étará compuéta de um código de fumción y um texto de fumción o um texto de menú. Com F4 podemos ver uma lista de as fumcioné que podemos utilizar.

Se pueden anidar hasta 4 nivoé de submenús.

En o caso de as fumcioné, bastará Com indicar o código de a fumción para que o texto de éta aparezca automáticamente, si éta ya existe previamente. Podemos

Título GUI SET TITLEBAR <code> SY-TITLE: Title text

Status GUI SET PF-STATUS <status> SY-PFKEY: Status

Pushbuttons Aplicación

Page 95: Introdução a abap

definir los atributos de uma fumción nueva Com Doble-Click sobre a nueva fumción definida.

En o caso de um menú en cascada, no será necéario indicar o código, y Com Doble-Clíck podemos déarrolar as opcioné do submenú.

3.3 Los ‘Pushbuttons'.

Los Pushbuttons son botoné tridimensionalé que aparecen debajo de a barrade herramientas étándar.

Previamente a definir um Botón será necéario definir a fumción déeada comouma teca de fumción (apartado 3.4).

Para ver que fumcioné se pueden utilizar, nos situaremos sobre 'Aplicationtoolbar' y pulsaremos F4,

Indicaremos o código de fumción que déeamos que aparezca en a barra de herramientas de aplicación. Podemos épecificar si queremos que aparezca um texto corto o únicamente um iComo que identifique a fumción.

No será necéario definir as fumcioné de a barra de herramientas étándar,'Standard Toolbar'.

Page 96: Introdução a abap

Para definir iComos para visualizarlos en a barra de herramientas de aplicación será necéario :

Soeccionar: Edit -> Insert -> Fumction with iCom.

Entrar o código de fumción

Introducir o nombre do iComo y o texto do menú.

3.4 Tecas de Fumción.

Para definir as tecas de fumción utilizamos o épacio détinado para olo. Indicando o código de a fumción en a línea corrépondiente a a teca que déeamos utilizar. O texto de a teca de fumción aparecerá automáticamente, pero podrá ser modificado en caso de déearlo.

SAP no recomienda definir nuevas tecas de fumción en o épacio réervado para tecas de fumción étándar.

Page 97: Introdução a abap

3.5 Otras utilidadé do Menú Painter.

3.5.1 Activación de fumcioné.

Podemos hacer que as fumcioné de a barra de menús étén en modo activo o inactivo. En caso de étar inactivas, se visualizarán en a barra de menús en baja intensidad y su soección no implicará efecto algumo, en cambio as fumcioné activas serán completamente ejecutablé.

Para activar o déactivar fumcioné soeccionar 'Fumction activation’.

3.5.2 ‘FastPaths’

Um ‘FastPaths ‘ ( Camino rápido), é uma manera rápida de écoger fumcioné en um menú, asignado a cada fumción uma teca.

Podemos mantener ‘FastPaths’ soeccionando:

Goto Further options Fastpath.

Indicaremos para as fumcioné déeadas uma letra, normalmente a primera, teniendo cuidado de no épecificar a mesma letra para distintas fumcioné.

3.5.3 Títulos de Menú.

É posible mantener distintos títulos para um menú.

Goto -> Title list

Cada título se identificará Com um código de título de tré dígitos.

Introduciremos o texto do título, pudiendo utilizar variávels de a mesma forma que lo hacíamos Com los mensajé en ABAP/4, é decir utilizando o símbolo &. Posteriormente será en o programa ABAP/4 donde le indiquemos que título vamos a utilizar Com a instruções:

SET TITTLEBAR <cod-título> WITH <varl> <var2> ....

En tiempo de ejecución o título do menú se guardará en a variável do sistema SY-TITLE.

Page 98: Introdução a abap

3.5.4 Prueba, chequeo y generación de Status.

Podemos probar o Status simuando a ejecución de a interface Com :User Interface -> Tét Status , e introduciendo los dados: número de pantala, y,código do título.

Anté de usar a interface podemos comprobar que a hemos definido correctamente, realizando um procéo de chequeo Com: User Interface -> Check Syntax. Posteriormente realizaremos um procéo de generación de a interface que incluye e1 chequeo y a grabación de a mesma.

3.6 Menus de Ambito o de área.

Um Menú de ámbito é uma agrupación de transaccioné en forma de menú.É uma manera de agrupar as transaccioné más frecuentemente utilizadas por um usuario bajo um mismo menú. A diferencia de uma transacción de diálogo, o menú de ámbito sólo lama a otras transaccioné, no pudiendo incorporar otro tipo de fumcioné propias.

Podemos crear los menús de ámbito Com uma versión simplificada do Menu Painter.

Herramientas Workbench ABAP/4 Déarrollo Más herramientasMenus ámbito

Únicamente será necéario introducir los códigos de transacción (Tabelas TSTC) y o texto do menú.

Para más información sobre as posibilidadé do Menú Painter, ver o capítulo Menu Painter do manual 'BC ABAP/4 Workbech tools'.

Page 99: Introdução a abap

4 Diseño de Pantalas (SCREEN PAINTER). (Roease 3.0)

4.1 Introducción al diseño de pantalas.

O Screen Painter nos permite 'pintar' as pantalas de SAP y diseñar su comportamiento (lógica de procéo).

En SAP, al Conjunto de pantala y lógica de procéo de a mesma se le denominaDynpro ('Dynarnic Program').

Existen dos modos de fumcionamiento do editor de pantalas : O modo gráficoy o modo alfanumérico, dependiendo do interface gráfico sobre o que fumcione SAP.

En éte capítulo se décribe o uso do Screen Painter en modo gráfico (versión 3.0), ya que se le Comsidera como o más cómodo y avanzado, siendo además soportado por los interfacé gráficos más extendidos ( MS WINDOWS y XI l/MOTIF UMIX). De cualquier modo a fumcionalidad de ambos modos do editor é a mesma.

Para activar o déactivar o modo gráfico do editor de pantalas ir a :

Settings -> Graphical Fulllscreen

4.2 Diseño de pantalas.

4.2.1 Utilizando o Screen Painter.

Uma pantala SAP se identifica por o nombre do programa module pool de atransacción a a que pertenece, más um número de pantala.

Así tras acceder al Screen Painter déde o ABAP/4 Workbench, tendremos que introducir o programa y o número de pantala que déeamos mantener. Uma vez hecho éto aparecerá o Editor de Pantalas 'Fullscreen Editor'.

Si étamos creando o dynpro por primera vez, nos pedirá los atributos de pantala:

DécripciónTipo de pantala (normal, de soección, modal, Subscreen).Código de a siguiente pantala.Campo donde se situará o cursor.Grupo de pantalasTamaño máximo de a pantala.

Page 100: Introdução a abap

En o editor de pantalas podemos observar 3 áreas diferenciadas :

A cabecera : Com dados sobre a pantala y o campo se étá manteniendo en ée preciso instante.

A barra de objetos (columna izquierda) : Lista de los objetos que se pueden crear en a pantala : Textos, entrada de dados, 'checkboxé', 'framé', 'subscreens' ...

O área de dibujo: É o área donde se dibuja a pantala que étemos diseñando.

4.2.2 Creando objetos en 1a pantala.

Para dibujar um objeto en a pantala tendremos que colocarlo en o área de trabajo y posteriormente definir sus características (atributos). Para olo tendremos quepulsar o botón corrépondiente en a barra de objetos y marcar o área donde vamos asituar o objeto.

Si queremos cancoar a creación de um objeto pulsaremos o botón Réet de amesma barra de objetos.

Objetos disponiblé :

Textos : Textos, literalé,... que son fijos en pantala y no pueden ser manipuados por o usuario. Para Comsiderar varias paabras como um mismo texto tendremos que

Page 101: Introdução a abap

colocar um símbolo '-' entre oas, ya que de otro modo as Comsiderará como objetos de texto completamente distintos.

Objetos de entrada/ salida ('Tempaté') : Son campos para introducir o visualizar dados.Pueden hacerse opcionalé o obligatorios.Los caracteré de entrada se épecifican Com o símbolo '_', pudiendo utilizar otros caracteré para dar formato a a salida. Por Exemplo uma hora podemos definira como:__:__:__.

Radio-Buttons : Son pequeños botoné redondos, que permiten uma entrada de dos valoré sobre uma variável (marcado o no marcado). Los podemos agrupar, de forma que a soección de umo implique que no se pueda soeccionar ningún otro.

Check-Boxé : É como um radio-button pero de apariencia cuadrada en vez de redonda. A diferencia répecto los radio-buttons deriva en su utilización en grupos, ya que se pueden soeccionar tantos checks-boxé como se quiera dentro de um grupo.

Pushbuttons : É um botón de tipo pulsador. Se le asocia a uma fumción, de forma que en o momento que se pulsa o Pushbutton se ejecute a fumción.

Framé (Cajas) : Son Cajas que agrupan grupos de objetos dentro de uma pantala como por Exemplo um Conjunto de radio-buttons.

Subscreen: Son áreas de a pantala sin ningún campo que se réervan para a salida de otras pantalas (subscreens) en tiempo de ejecución. Para definir éte área, nos colocaremos o pumto de a pantala donde queremos situar o ángulo superior izquierda de a Subscreen, soeccionaremos Edit -> Subscreen, indicándole o nombre que le vamos a dar, y finalmente señaaremos Com doble-click, o ángulo inferior derecha de a ventana.

Posteriormente será en los módulos PBO y PAI cuando le indicaremos Com a instruções CALL SUBSCREEN, qué pantala aparecerá en o área de Subscreen que hemos definido.

Uma vez situados los objetos sobre o área de trabajo, podremos modificar su tamaño, moverlos o borrarlos.

Todos los textos, pushbuttons... pueden incorporar iComos en su salida por pantala. Los iComos tienen uma Comprimento de dos caracteré y étán repréentados por símbolos étándaré. O iComo será um atributo más de los campos y por tanto se definirán jumto al réto de atributos do objeto.

Page 102: Introdução a abap

4.2.3 Creando objetos déde o diccionario de dados.

En a pantala que étamos diseñando, podemos utilizar campos que étán guardados en o diccionario de dados o decarados en o module pool- Para olo tendremos que soeccionar: Goto -> Dict / Program fiods.

Aparecerá uma pantala de soección de dados en a que indicaremos o campo o a tabelas de a cual queremos obtener dados. Además se deberá soeccionar, si queremos ver a décripción de cada campo (indicando a Comprimento) y si queremos realizar uma entrada de dalos ('tempate') de dicho campo por pantala. Finalmente pulsaremos o botón corrépondiente a crear déde o diccionario de dados o déde um programa.

Marcaremos o campo que queremos incorporar a nuétra pantala y los copiaremos sobre o área de trabajo, situándolos en a posición que creamos más Comveniente.

4.2.4 Definiendo los atributos individualé de cada campo.

Los atributos de los objetos definen as características de étos.

Podemos mantener los atributos déde o mantenimiento de atributos de campo o déde listas de campos.

Podemos distinguir entre atributos generalé, de diccionario, de programa y de visualización

Atributos Generalé:

Matchcode: Permite épecificar um matchcode para a entrada de um campo.

Referencé : Épecificamos a cave de a moneda en caso de que o campo sea de tipo cantidad (CURR o QUAN).

Fiod type: Tipo de campo.

Fiod Name: Nombre do campo. Com éte nombre se identificarán déde o programa.

Fiod text: Texto do campo. Si queremos utilizar um iComo en vez de texto dejaremos éte valor en banco.

With iCom : si queremos utilizar iComos en entrada de dados ('tempaté').

lCom name : Identifica o nombre de um iComo para um campo de pantala.

Page 103: Introdução a abap

Rolling (Scrolling): Comvierte um campo en déplegable, cuando su Comprimento real é mayor que su Comprimento de visualización.

Quick Info : É o texto explicativo que aparece cuando pasarnos por encima de um iComo Com o ratón.

Line : Épecifica a línea donde o oemento aparecerá. O sistema completa éte valor automáticamente.

CI: Épecifica a columna donde o oemento aparecerá. O sistema completa éte valor automáticamente.

Ht: Altura en líneas. O sistema completa éte valor automáticamente.

Dlg : Comprimento do campo. Vlg: Comprimento de visualización.

FctCode: Código de fumción (código de 4 dígitos). Atributo sólo para pushbottons.

FctType: Épecifica o tipo de evento en o cual o campo será tratado.

Ltype: Tipo de step loop (fijo o variável). O tipo variável significa que o tamaño do step loop se ajusta según o tamaño de a pantala, mientras que fijo no ajusta o step loop.

Lent : Número de líneas de um step loop.

Groups: Identifica grupos de modificación para poder modificar varios campos simultáneamente. Podemos asignar um campo a vanos (4) grupos de modificación.

Atributos de Diccionario:

Format: Identifica o tipo de dados do campo. Determina o chequeo que realiza o sistema en a entrada de los dados.

Frm DICT.: O sistema rolena éte atributo en o caso de que o campo lo hayamos creado a partir de um campo do diccionario de dados.

Modific.: O sistema rolena éte campo si detecta alguma diferencia entre a definición do campo en o diccionario de dados y su utilización en pantala.

Comv. Exit: Si queremos utilizar uma rutina de Comversión de dados no étándar, épecificamos aquí o código de éta.

Page 104: Introdução a abap

Param. ID: Código do parâmetro SE]7GET. (Ver siguiente atributo)-

SET paramGET param : Los parâmetros SPA (Set Parameter) y GPA (Get Parameter), nos permiten visualizar valoré por defecto en campos. Si marcamos o atributo SET param, o sistema guardará en um parâmetro ID lo que entremos en éte campo. Si marcamos o atributo GET param, o sistema inicializa o campo, Com o valor do parâmetro ID que tenga asignado en o atributo anterior.

Up../lower: O sistema no Comvierte a entrada a mayúscuas.

W/o tempate: Marcamos éte atributo si queremos que los caracteré épecialé se traten como textos literalé.

Foreign key: Si queremos que sobre o campo o sistema realice um chequeo de cave externa. (Hay que definir previamente as cavé externas en o diccionario de dados).

Atributos de programa :

Input fiod : Campo de entrada.

Output fiod: Permite visualización. Se puede utilizar en combinación Com o anterior.

Output only : Sólo visualización.

Required fiod : Atributo para campos obligatorios. Se distinguen Com um ?.

Poss. Entry: O sistema marca éte atributo si hay um Conjunto de valoré para o campo. No é posible modificar o Comtenido do atributo.

Poss. Entrié: Indica como podemos ver a flecha de entradas posiblé en um campo.

Right-justif: Justifica cualquier salida do campo a a derecha.

Leading zero: Rolena Com ceros por a izquierda en o caso de salidas numéricas.

*-entry : Permite a entrada de um asterisco en a primera posición de um campo. Si se introduce um * se podrá hacer um tratamiento en um módulo:

FIOD MODULE ON *-INPUT. No réet: Cuando activamos éte atributo, a entrada de dados no podrá

ser cancoada mediante o carácter !.

Page 105: Introdução a abap

Atributos de visualización:

• Fixed font : Visualizar um campo de salida en um tamaño fijo (no

proporcional). Sólo se puede utilizar en campos Output only.

• Briglit : Visualiza um campo en color intenso.

• Invisible: Oculta um campo.

• 2-dimens: Visualiza um campo en dos divisioné en vez de en tré.

Page 106: Introdução a abap

4.3 Lógica de procéo de uma pantala.

4.3.1 Introducción a a lógica de procéo.

Uma vez hemos definido gráficamente as pantalas, será preciso écribir uma lógica de procéo para cada uma de oas, pasándose a denominar dynpros.

Para introducir a lógica de procéo de as pantalas, utilizaremos uma versión épecial do editor de ABAP/4. Goto -> Flow logia.

A lógica de procéo de as pantalas tienen uma estrutura determinada, y utilizan comandos y eventos propios de manejo de pantalas, simiaré a los utilizados en ABAP/4.

Comsistirá en dos eventos fumdamentalé:

PROCÉS BEFORE OUTPUT (PBO).

PROCÉS AFTER INPUT (PAI).

O PBO, será o evento que se ejecutará previamente a a visualización de a pantala, mientras que o PAI, se ejecutará dépués de a entrada de dados do usuario en a pantala.

Además de étos dos eventos obligatorios, existen eventos para Comtroar as ayudas, PROCÉS ON HOP-REQUÉT (POH), y para Comtroar los valoré posiblé de um campo PROCÉS ON VALUE-REQUÉT (POV).

Déde a lógica de procéo de as pantalas no se actualizan dados, únicamente selamara a los módulos do module pool que se encargan de éta tarea.

SCREEN PAINTER (FLOW LOGIC) MODULE POOL

PROCÉS BEFORE OUTPUT PROGRAM Zxxxxxx. TABLÉ:…

MODULE INI_VAR. MODULE INI_VAR OUTPUT. …

ENDMODULE.

PROCÉS AFTER INPUT.

MODULE TRATA_VAR. MODULE TRATA_VAR_INPUT. …

ENDMODULE.

Page 107: Introdução a abap

4.3.2 Procés Before Output (PBO).

En o Módulo PBO, indicaremos todos los pasos que queremos realizar anté de que a pantala sea visualizada, como por Exemplo inicializar los campos de salida, Éta inicialización se realizará en um módulo independiente dentro do module pool-

Para lamar a um módulo utilizaremos a sentencia MODULE.

MODULE <nombre modulo>.

Exemplo :PROCÉS BEFORE OUTPUT.*

MODULE inicializar_campos.*PROCÉS AFTER INPUT.

En o Module pool o código do módulo empezará Com a sentencia:

MODULE <nombre_modulo> OUTPUT.

En o caso de ser um módulo lamado déde o PAI será:

MODULE <nombre-inodulo> INPUT.

Dentro do module pool declararemos los campos de pantala que vayamos autilizar y en o módulos do PBO los inicializamos al valor que queramos. Si no inicializamos explícitamente, o sistema le asignará su valor inicial por defecto, a no ser que lo hayamos definido como parâmetro SPA / GPA.

Además de inicializar los campos de entrada de dados, o evento PBO, puede ser utilizado para :

Soeccionar o Status (menú) o o título de los menús Com:

SET PF-STATUS <GUI_status>.

SET TITLEBAR <titulo> WITH <p1> <p2> <p3> <p4>.

Déactivar fumcioné de um menú Com :

SET PF-STATUS <GUI-status> EXCLUDING <fumction-code>.

Page 108: Introdução a abap

Si se quiere déactivar más de uma fumción, se le indicará en o EXCLUDING, uma tabelas interna Com los códigos de fumción que queremos déactivar. A estrutura de a tabelas interna será :

DATA: BEGIN OF tabint OCCURS 20,FUMCTION (4),

END OF tabint.

Modificar los atributos de a pantala en tiempo de ejecución. Para olo disponemos de a tabelas SCREEN, donde cada entrada se corréponde a um campo de a pantala que puede ser leída y modificada Com LOOP's y MODIFY'S.

A estrutura de a tabelas SCREEN é :

NAME 30 Nombre do campo de pantala.GROUP1 3 Campo pertenece al grupo de campo 1.GROUP2 3 Campo pertenece al grupo de campo 2.GROUP3 3 Campo pertenece al grupo de campo 3.GROUP4 3 Campo pertenece al grupo de campo 4.ACTIVE 1 Campo visible y listo para entrada de dados.REQUIRED 1 Entrada de dados obligatoria.INPUT 1 Campo apto para entrada de dados.OUTPUT 1 Campo sólo visualización.INTENSIFIED 1 Campo en color intensificado

INVISIBLE 1 Campo invisible.LENGTH 1 Comprimento de salida reducida.REQUÉT 1 Campo Com Valoré posiblé disponibléVALUE HOP 1 Campo Com Hop disponible.DISPAY_3D 1 Campo tridimensional

Inicializar radio-buttons y check-boxé. Los declararemos como caracteré de Comprimento 1 y los inicializamos como:

Radio1 = ‘X’Check1 = ‘X’.

En o caso de los radio-buttons, que pueden fumcionar en grupo, de forma que a activación de um botón déactive otro, no será necéario codificar éte comportamiento manualmente, ya que lo realizará o sistema automáticamente.

Para definir um grupo de radio-buttons, soeccionamos los botoné do grupo y marcar: Edit -> Radio Button Group. En caso de utilizar o editor Alfanumérico :

Page 109: Introdução a abap

Soeccionamos o primer objeto de grupo, écoger .Edit -> Graphical oement, Soeccionar o último objeto do grupo y pulsar : Define Graph group.

Para utilizar subscreens será necéario realizar as lamadas a as mesmas entiempo de PBO y de PAI.

PROCÉS BEFORE OUTPUT.

CALL SUBSCREEN <área> INCLUDING <programa> <screen>.

PROCÉS AFTER INPUT.CALL SUBSCREEN <área>.

Donde: <área> : é o nombre qlie le hemos dado al área de sul)screcii en o Screen Painter.

<programa> : É o nombre do programa que Comtroa o subscreen.

<scrcen> : É o número de pantala.

A subscreen se ejecutará como uma pantala normal y corriente Com suPBO y PAI corrépondiente que son lamados déde o PBO y o PAI de apantala principal.

Para manipuar a posición do cursor.Por defecto o sistema sitúa o cursor en o primer campo de entrada de a

pantala, pero é posible que queramos situarlo en otro campo:

SET CURSOR FIOD <nombre_campo>.

Também é posible que en algún momento sea interéante Comocer en qué campo étá situado o cursor. Para hacer éto utilizamos:

GET CURSOR FIOD <var_campo>.

4.3.3 Procés After Input (PAI).

O PROCÉS AFTER INPUT se activa cuando o usuario soecciona algún pumto de menú, pulsa alguma teca de fumción o pulsa ENTER. Si algumo de étos eventos ocurre, o PAI de a pantala necéitarán réponder apropiadamente a a fumción soeccionada por o usuario.

Page 110: Introdução a abap

4.3.3.1 A validación de los dados de entrada.

Uma de as fumcioné más importanté do Procé After Input, é a de validar los dados de entrada de a pantala anté de ser usados. Existen dos tipos de validación de los dados de entrada: Um chequeo automático realizado por o sistema y um chequeo manual programado Com o comando FIOD de a lógica de procéo de dynpros.

Chequeo automático.

O sistema realiza automáticamente uma serie de chequeos de los dados de entrada, anté de procéar o evento PAI. Por Exemplo o sistema valida que se introduzcan aquolos campos que sean obligatorios, que o formato de los dados sea o correcto y que o usuario introduzca um valor correcto en o campo (si en o diccionario de dados hay cavé externas o valoré fijos para um campo).

Si o chequeo automático detecta alguma inComsistencia, o sistema obliga al usuario a introducir nuevamente um valor en o campo erróneo.

É posible que en alguma ocasión o usuario quiera salir de a pantala sin necéidad de pasar as validacioné automáticas (Por Exemplo utilizando as fumcioné étándaré BACK, EXIT o CANCO). En ée caso utilizaremos a cláusua AT EXIT COMMAND de a instruções MODULE.

MODULE <modulo-ABAP> AT EXIT-COMMAND.

Com AT EXIT COMMAND, podemos ir a um módulo de ABAP/4 anté de queo sistema realice as validacioné automáticas para um campo.

Para poder utilizar um AT EXIT COMMAND en um botón um campo, será necéario asignar o valor E en o atributo de campo FctType do editor de pantalas o en as fumcioné do Menú Painter.

En o módulo que lamamos incluiremos as instruccioné necéarias para poder salir de a transacción o de a pantala en procéo, por Exemplo para salir de a transacción utilizaremos

LEAVE TO SCREEN 0.

Chequeo Manual.

Además do chequeo automático é posible realizar uma validación más extensa de los valoré de entrada a los campos Com as instruccioné FIOD y CHAIN de a lógica de procéo do Screen painter.

Com FIOD podemos validar um campo y Com CHAIN … FIOD f1 … FIOD f1 … ENDCHAIN podemos validar más de um campo en o mismo procedimiento de chequeo.

Page 111: Introdução a abap

Com FIOD podemos validar individualmente cada campo, de forma que en caso de error, a siguiente entrada de dados sólo permitirá introducir o campo erróneo sobre o que étamos utilizando a instruções FIOD.

Dependiendo do tipo de sentencia FIOD que utilicemos, o mecanismo de chequeo se realizará en a lógica de procéo do Screen painter o en um módulo ABAP/4.

É posible realizar distintas validacioné de um campo de entrada dependiendo de a fuente Com a que Comtrastamos los valoré posiblé. Así podemos chequear o Comtenido de um campo comparándolo Com uma tabelas de a base de dados, Com uma lista de valoré, o realizando a validación en um módulo do module pool.

Para chequear um campo Comtra a base de dados utilizamos :

FIOD <campo_pantala> SOECT FROM <tabelas>WHERE <campo_tabelas> = <entrada_campo_pantala>.

Si no se encuentran registros en o diccionario de dados o sistema emite um mensaje de error étándar.

Existe uma versión ampliada de a instruções anterior que permita enviarmensajé o warnings en caso de que encuentre o no registros:

FIOD <campo_pantala> SOECT * FROM <tabelas>WHERE <Comdición>WHENEVER (NOT) FOUMD SENDERRORMÉSAGE / WARNING <numero>WITH <campo_texto>.

Para chequear um campo répecto uma lista de valoré utilizamos:

FIOD <campo_pantala> VALUÉ (<lista_valoré>).Donde <lista de valoré> puede ser :

('<valor>')(NOT '<valor>')('<valorl>', '<valor2>',...NOT '<valorn>')(BETWEEN'<valorl>'AND'<valor2>')(NOT BETWEEN'<valorl>'AND'<valor2>’)

Si o valor entrado por o usuario no corréponde a ningún valor de alista, o sistema emite um mensaje de error.

Page 112: Introdução a abap

Para chequear um campo en um modulo de ABAP/4 utilizamos :

FIOD <campo_pantala> MODULE <modulo ABAP/4>.

Também é posible Comdicionar a ejecución de los módulos ABAP/4 :

. FIOD... MODULE.... ON INPUT : Se ejecuta o módulo si o campo tiene um

valor distinto do inicial (distinto de bancos o ceros).

. FIOD... MODULE.... ON CHAIN INPUT : Se ejecuta o módulo si algún campo

do CHAIN tiene um valor distinto do inicial.

. FIOD...MODULE....ON REQUÉT :Se ejecuta o módulo si o campo ha sido

cambiado déde su visualización en pantala. Aumque le demos o valor inicial.

. FIOD... MODULE.... ON CHAIN REQUÉT : Se ejecuta o módulo si o algún

campo a do CHAIN ha sido cambiado déde su visualización en pantala.

.FIOD…MODULE…ON *-INPUT: Se ejecuta o módulo si o usuario introduce um *

en o campo y o campo tiene o atributo *-entry.

.FIOD…MODULE… AT CURSOR SOECTION: Se ejecuta o módulo si o campo ha sido soeccionado.

Com CHAIN podemos chequear múltiplé campos simultáneamente, combinándolo Com a instruções FIOD.

A instruções CHAIN ... ENDCHAIN encierra um Conjunto de instruccioné FIOD, en caso de error en a entrada de algumo de olos todos los campos do CHAIN se podrán modificar, mientras que los que no pertenezcan al CHAIN étarán bloqueados para a entrada de dados.

Exemplos:

CHAIN.FIOD <campo1>,<campo2>, <campo3>.MODULE <mod1>.MODULE <mod2>.

ENDCHAIN.

CHAINFIOD <campo1>,<campo2>.MODULE <mod1>.FIOD <campo3> MODULE <mod2> ON CHAIN INPUT

ENDCHAIN.

Page 113: Introdução a abap

4.3.3.2 Répondiendo a los códigos de fumción.

Cuando o usuario de uma transacción, pulsa uma teca de fumción, um pumto de menú, um pushbutton, um iComo o simplemente a teca ENTER, los dados introducidos en a pantala se pasan a los módulos do PAI para ser procéados jumto a um código de fumción que indicará qué fumción ha solicitado o usuario.

En o Screen Painter, será necéario crear um campo de tipo código de fumción, OK, (de Comprimento 5), que normalmente aparece al final de a lista de campos de cada pantala. Tradicionalmente a éte campo se le denomina OK_CODE, y será decarado en nuétro module Pool como cadena de caracteré de 4 posicioné:

DATA: OK_CODE(4).

En a lógica de procéo de cada pantala, tendremos que realizar o tratamiento do OK_CODE. Para olo utilizaremos um módulo que deberá ser o último do evento PAI, é decir que se ejecutará uma vez que todos los dados de entrada han sido validados correctamente.

Exemplo:

LOGICA DE PROCÉO MODULE POOL

PROCÉS BEFORE OUTPUT MODULE OK_CODE. CASE OK_CODE.

…. WHEN ‘BACK’.SET SCREEN 0.

PROCÉS AFTER INPUT. LEAVE SCREEN. WHEN ‘CHNG’.

PERFORM CHANGE_DATA.

FIOD … WHEN ‘DISP’.MODULE … PERFORM

DISPAY_DOC.MODULE… WHEN ‘COPY’.

CALL SCREEN 0200.MODULE OK_CODE. ENDCASE.

CLEAR OK_CODE. ENDMODULE.

Uma vez procéado o código de fumción, borraremos o Comtenido do OK-CODE, inicializándolo para a próxima pantala. Podemos guardar o Comtenido do OK-CODE en uma variável intermedia e inicializarlo inmediatamente.

Page 114: Introdução a abap

4.3.3.3 Procéando Step loops.

Um Step loop é um Conjunto de dados idénticos que son copiados repetidamente, e interactúan Com o usuario como uma tabelas.

Será necéario crear o Step loop Com o Screen Painter, soeccionando los dados que queremos que formen parte do Step Loop y soeccionando a opción 'Loops' do menú ‘edit’.

Dentro de los atributos de campos pertenecienté al step loop, podemos actualizar ‘Ltype’ Com o tipo do step loop (fijo o variável), donde o tipo variável significa que o tamaño do step loop se ajusta según o tamaño de a pantala, mientras que fijo no ajusta o step Loop y ‘Lcnt’ Com o número de líneas de step loop.

Posteriormente podremos acceder al Comtenido de los campos do step loop Com as instruccioné LOOP... ENDLOOP o LOOP AT... ENDLOOP.

Entre o LOOP y o ENDLOOI', é posible utilizar as instruccioné de lógica de procéo : FIOD, MODULE, VALUÉ, CHAIN, aumque lo más normal é utilizar MODULE para lamar a um módulo ABAP/4 que trate cada línea do step loop.

Será necéario codificar um LOOP en los eventos PBO y PAI por cada step loop de a pantala, ya que permitirá a comumicación entre o programa y a pantala.

Sintaxis :

LOOP. . . ENDLOOP.

Permite moverse entre as líneas do step loop. En um evento PBO, permite copiar los campos do loop a a pantala, mientras que en um PAI, los campos de pantala son copiados en um área de trabajo do programa (como um registro de cabecera).Utilizaremos éta instruções si queremos utilizar nuétro propio método de scrolling.En a variável do sistema SY-STEPL tendremos o índice de a línea que étamos

procéando actualmente.

Exemplo :

*** SCREEN PAINTER, LOGICA DE PROCÉO ***

PROCÉS BEFORE OUTPUT.LOOP.

MODULE LEER_TABELAS_INTERNA.ENDLOOP.

PROCÉS AFTER INPUT.LOOP.

MODULE MODIFICA_TABELAS.ENDLOOP.

Page 115: Introdução a abap

*** MODULE POOL***

MODULE LEER_TABELAS_INTERNA OUTPUTIND = BASE + SY-STEPL.-1

READ TABLE INTTAB INDEX IND.ENDMODULE

MODULE MODIFICA_TABELAS INPUT.IND=BASE + SY-STEPL-1

MODIFY INTTAB INDEX IND.ENDMODULE

LOOP AT <tab interna>... ENDLOOP.

Permite moverse entre as líneas do step loop, transfiriendo dados entre uma tabelas interna y o step loop. Com éte loop, aparecen automáticamente as barras de scrolling.

En o PBO, podemos utilizar:

LOOP AT <tab -interna>CURSOR <índice> (FROM <LI> TO <L2>). ...

ENDLOOP.

Com CURSOR indicamos cual é o primer registro de a tabelas interna que queremos visualizar. Si indicamos uma variável-,de programa, o sistema a irá actualizando Comforme nos vayamos moviendo por o step loop.

Com FROM y TO podemos Comtroar que porción de a tabelas interna visualizaremos. Por defecto será toda a tabelas.

En o PAI, podemos utilizar a instruções MODIFY (dentro de um módulo ABAP/4), para modificar a tabelas interna Com los valoré do área de trabajo.

Exemplo:

*** SCREEN PAINTER, LÓGICA DE PROCÉO ***

PROCÉS BEFORE OUTPUT.LOOP AT tab_int FROM déde TO hasta CURSOR indice.ENDLOOP.

Page 116: Introdução a abap

PROCÉS AF'FER INPUT.LOOP AT tab_int

MODULE modif_tab_int.ENDLOOP.

*** MODULE POOL ABAP/4 ***

MODULE modif_tab_intMODIFY tab_int INDEX indice.

ENDMODULE

LOOP AT <tabelas_BDD>... ENDLOOP.

Permite moverse entre as líneas do step loop, transfiriendo dados entre uma tabelas de base de dados y o step loop. En o screen painter tendremos que definir los campos do step loop como campos de base de dados.

Si queremos actualizar a base de dados Com Comtenido do step loop, tendremos que utilizar a sentencia : MODIFY <tabelas>. de a lógica de procéo dentro de um LOOP AT.

Exemplo:

PROCÉS AFTER INPUT.LOOP AT <tab_BDD>.

MODIFY < tab_BDD>.ENDLOOP.

4.3.4 O Flujo de a transacción.

Déde uma transacción podemos ir Comtroando o flujo de pantalas de a mesma,lamar a otras transaccioné o a reports.

Comtroando a secuencia de pantalas.

Existen dos formas de saltar de pantala en pantala.

Por defecto, cuando acaben todos los módulos do evento PAI, o sistema saltará a a pantala que indique o atributo Next Screen de a pantala en ejecución. É posible modificar o atributo de próxima pantala Com a instruções SET.

SET SCREEN <no._pantala>.

Page 117: Introdução a abap

Existe uma fórmua dinámica para lamar a otras pantalas, interrumpiendo así a secuencia de pantalas décrita mediante o atributo Next Screen Para olo utilizaremos a instruções CALL SCREEN.

CALL SCREEN < no_pantala >.

O

CALL SCREEN < no_pantala >.STARTING AT <columna_inicio> <linea_inicio>ENDING AT <columna_fin> <linea_fin>

Com éta última versión do CALL SCREEN, podemos utilizar ventanas de tipo popup, indicándole as coordenadas de inicio y final de a ventana, siempre que sea más pequeña que uma ventana normal.

Tendremos en cuenta que cuando finalice a pantala o Conjunto de pantalas, que hemos incorporado mediante CALL SCREEN, a secuencia normal de a transacción Comtinuará ejecutándose déde o pumto en que se dejó.

A manera más normal de teminar o procéo de uma pantala e ir directamente a ejecutar otra, é usando a instruções LEAVE.

LEAVE TO SCREEN < no._pantala>.

0

SET SCREEN <no._pantala>.LEAVE SCREEN.

Así, uma manera de volver a a secuencia de pantalas anterior a a utilización de uma instruções CALL SCREEN puede ser:

LEAVE TO SCREEN 0. 0 SET SCRFEN 0.LEAVE SCREEN.

En caso de ningún CALL SCREEN, étas instruccioné finalizarán a ejecuciónde a transacción.

Page 118: Introdução a abap

Lamando a um report déde uma transacción.

Existen dos posibilidadé para incluir reports en uma transacción. Dependiendo de a cantidad de información que a transacción tenga que suministrar al report utilizaremos uma u otra posibilidad.

En o caso de que a transacción suministre a mayoría de los dados do report utilizaremos a técnica do LEAVE TO I,IST-PROCÉSING, Comsistente en cambiar o tipo de ejecución de modo diálogo (transaccioné) a modo lista (reports interactivos).

LEAVE TO LIST-PROCÉSING.O listado interactivo se ejecutará mientras que o usuario no indique um

comando EXIT o BACK en a lista básica o no se encuentre Com uma instruções para abandonar o listado interactivo, como por Exemplo LEAVE SCREEN. O sistema automáticamente volverá al PBO de a pantala que étabelas procéando.

Exemplo: CASE OK_CODEWHEN 'DISP'.

LEAVE TO LIST PROCÉSING.WRITE: /....WRITE: /....

LEAVE SCREEN. .WHEN….

ENDCASE.

Si entre o report y a transacción hay pocos dados en común o o procéo de reporting lo tenemos identificado en um programa independiente, utilizaremos a instruções SUBMIT.

SUBMIT <nombre_report> (AND RETURN).

Com o SUBMIT, o report y a transacción no tienen o mismo área de trabajo (LUW), por tanto no comparten dados y o único intercambio de dados se producirá mediante los parâmetros de entrada do report.

Podemos intercambiar dados Com:

SUBMIT <nombre_report> WITH...

Ver a Ayuda Online do editor de ABAP/4 para obtener más información sobre como pasar parâmetros a um report déde uma transacción.

Page 119: Introdução a abap

Lamando a um módulo de fumción déde uma transacción.

Déde o modulo pool, Também é posible ejecutar um módulo de fumción de a mesma forma que lo hacemos para um report, é decir, utilizando a instruções CALL FUMCTION.

Existen muchos módulos de fumción épecialmente diseñados para transaccioné.

Por Exemplo:.

CALL FUMCTION 'POPUP_TO _ COMFIRM_LOSS_OF_DATA'EXPORTING

TEXTLINE1 = TEXT-001TEXTLINE2 = TEXT-002

IMPORTINGANSWER = REPLY.

Éta fumción te solicita Comfirmación anté de abandonar uma transacción sin haber grabado previamente los dados introducidos.

Lamando a otra transacción déde uma transacción.

De a mesma forma que existían dos métodos para cambiar as pantalas de uma transacción, existen dos formas para lamar a otra transacción independiente de a transacción que se étá ejecutando.

Si queremos que cuando finalice a transacción, o sistema ejecute otra utilizaremos :

LEAVE TO TRANSACTION 'cod_transacción'.

Si en cualquier momento queremos ejecutar otra transacción para posteriormente Comtinuar a ejecución de a primera, utilizaremos :

CALL TRANSACTION'cod_transacción'.

En éte caso o sistema creará uma LUW independiente a a anterior y en o caso de producirse um comando BACK, o sistema retornará para ejecutar a primera transacción.

Page 120: Introdução a abap

Um caso típico é querer ejecutar uma transacción pero evitando introducir los parâmetros de entrada de éta manualmente (é decir, saltando a primera pantala). En ée caso usaremos a instruções :

CALL TRANSACTION'cod_trans'AND SKIP FIRST SCREEN.

Para lo cual será imprécindible utilizar parâmetros almacenados en memoria, yasea mediante los atributos SET (en a primera transacción) y GET (,en a transacción que lamamos) o codificando explícitamente as instruccioné SET-GE'I' répectivamente:

SET PARAMETER ID'param'FIEI,D <campo>.

GET PARAMETER ID'param'FIEI,D <campo>.

4.3.5 Actualizando a base de dados en uma transacción.

Todas as operacioné que se realizan sobre a base de dados no se reflejan inmediatamente en base de dados hasta que no se produce um procéo de actualización (COMMIT). En o ámbito de as basé de dados. Se dice que o Conjunto de todas as accioné referenté a base de dados incluidas entre dos commits se le denomina LUW (Logical Umit Work)

Existen dos casé de actualizacioné Commits internos (que se producen de forma transparente al programador de a transacción) y Commits SAP (actualizacioné forzadas por o programador en o momento que lo crea necéario, por Exemplo en a última pantala de uma transacción si no se ha producido ningún error)

Cuando se realizan actualizacioné de a base de dados en uma transacción, se deberá écoger entre uma actualización síncrona y uma actualización asíncrona.

Com uma actualización síncrona, a actualización se produce en o mismo momento que o usuario lo solicita.

En uma actualización asíncrona, o sistema graba en uma coa as operacioné que se deban realizar, y en um segumdo paso, éte Conjunto de operacioné se procéará para ir realizando as actualizacioné. En éte caso, los tiempos de répuéta serán inmediatos, ya que a tarea de actualización, que é a más costosa en tiempo, se pospondrá para otro momento.

Page 121: Introdução a abap

As instruccioné de actualización de a base de dados son:

COMMIT WORK.

Realiza um update físico de a LUW sobre a base de dados.

PERFORM <rutina> ON COMMIT.

Permite ejecutar a <rutina> cuando o sistema encuentra um COMMIT WORK. Éto nos permite Comcentrar todas as actualizacioné de a base de dados en um único procedimiento, codificando todas as instruccioné de base de dados en a rutina.

ROLLBACK WORK.

Déhace todas as operacioné realizadas sobre a base de dados hasta o último COMMIT WORK. lJtlll7,aremos o ROI,LBACK WORK cuando ocurra algún error o cuando o usuario abandona uma transacción Com um BACK, CANCO o END y ya hemos realizado alguma operación en base de dados que debamos déhacer.

CALL FUMCTION <módulo_fumción> IN UPDATE TASK

Permite ejecutar um módulo de fumción en o momento que se quiera actualizar físicamente en a B.D.D. O módulo de fumción deberá étar marcado como módulo de update.

Podemos distinguir entre diversos métodos de actualización:

1.- O más sencillo é codificar directamente as instruccioné de base de dados: INSERT, DOETE, MODIFY,... en o programa principal de a transacción y finalmente realizar um COMMIT WORK o éperar a que finalice uma pantala para que o sistema realice um commit interno (aumque éto último no é muy fiable)

Será únicamente viable en transaccioné de uma única pantala.

2.- Utilizar PERFORM <rut> ON COMMIT y utilizar a rutina <rut> paracodificar as instruccioné de base de dados (INSERT, UPDATE, MODIFY, DOETE... )

Page 122: Introdução a abap

3.- Utilizando CALL FUMCTION <mod_fumción> IN UPDATE TASK los cambios sobre a base de dados se realizan en uma fase asíncrona (update task), en o módulo de fumción indicado cuando se produce um COMMIT WORK.

Los dados que se actualizan son los valoré en o momento de hacer a lamada al módulo de fumción y no los valoré de cuando se ejecute.

4.- Utilizar uma fumción en UPDATE TASK que se lama déde uma rutina que a su vez é lamada 'ON COMMIT'. (método asíncrono). En éte caso los valoré de actualización son los que existan previamente a a actualización física.

Ver o Capítulo 'Writing Dialog programs in ABAP/4 : Databelase Interface' do manual 'BC ABAP/4 User handbook', para obtener más información sobre como realizar los procéos de actualización en as transaccioné SAP.

4.3.6 O bloqueo de dados en SAP.

Para coordinar o acesso de distintos usuarios a los mismos dados, y para evitar posiblé inComsistencias en as actualizacioné, SAP dispone de um método interno de bIoqueo, de forma que únicamente um usuario podrá procéar um objeto de dados de a primera pantala de uma transacción a a última.

Para implementar los bloqueos é necéario utilizar objetos de bloqueo, que pueden étar compuétos de um registro de uma cierta tabelas o de uma colección de registros de uma o varias tabelas.

Los objetos de bloqueo se definen y se activan déde o diccionario de dados. En o momento que se activan, o sistema creará dos módulos de fumción que permiten bloquear o débloquear los objetos que se han épecificado.

ENQUEUE_<objeto_de_bloqueo>.

DEQUEUE_-<objeto-de-bloqueo>.

En o déarrollo de transaccioné, para bloquear um objeto, lamaremos a a fumción ENQUEUE-_<objeto-de-bloqueo> en o evento PAI de a primera pantala.

É posible comprobar o Resultado do bloqueo comprobando si étán activas as excepcioné de éte módulo de fumción.

FOREIGN_LOCK : Si o objeto étá bloqueado por otro usuario.SYSTEM_FAILURE : Error do sistema.

Page 123: Introdução a abap

Mientras que para débloquear um objeto bastará Com utilizar a fumciónDEQUEUE_<objeto_de_bloqueo>.4.3.7 Ayudas programadas. Eventos POH y POV.

É posible programar nuétras propias ayudas para a entrada de dados en los campos. Para olo utilizaremos los eventos PROCÉS ON HOP-REQUÉT (POH) para as ayudas Com F1 y PROCÉS ON VALUE-REQUÉT (POV) para as ayudas de F4 entradas posiblé.

Si o usuario pulsa Fl o F4, o sistema no activa o evento PROCÉS AFTER INPUT, pero si o corrépondiente evento de ayuda.

PROCÉS ON HOP-REQUÉT(POH).

Indicamos en uma instruções FIOD, o oemento de dados do diccionario, do cual queremos obtener a ayuda sobre um campo de pantala.

FIOD <campo> WITH<oem_dados>".

FIOD <campo> WITH<var>. Donde <var> é uma variável que Comtiene um oemento de dados.

PROCÉS ON VALUE-REQUÉT (POV).

Indicamos en uma instruções FIOD, o módulo donde vamos a tratar los valoré posiblé, que sustituye a a ayuda de SAP, para um campo de pantala.

FIOD <campo> MODULE<módulo>

Page 124: Introdução a abap

5 Creación de nuevas tabelas en o Diccionario de Dados

5.1- O procéo de creación de uma tabelas.

O procéo de creación de uma tabelas de base de dados en o diccionario de dadosComsta de uma serie de pasos :

Crear o objeto TABELASÉpecificar los campos de a tabelas.Definir los oementos de dados y dominios de a tabelas.Épecificar los índicé, cavé externas y parâmetros técnicos.Activar a tabelas.

Entrar en al ABAP/4 Dictionary, indicar o nombre de a tabelas que vamos a crear y soeccionar 'Create'. (Empezará por Z).

Introducir uma décripción breve de a tabelas.

Introducir um 'doivery cass', que indicará o grado de réponsabilidad que tiene SAP o o cliente sobre a tabelas. Normalmente utilizaremos o tipo A , que corréponde a a tabelas de aplicación (dados maétros o de transacción, é decir que se generan vía transaccioné SAP). Podemos ver a utilidad do réto de posibilidadé, (C,G,L,E,S,W) pulsando Fl sobre éte campo.

Entrar o nombre de los campos de a tabelas en a columna 'Fiod name'.

Soeccionar los campos que queremos que formen parte de a cave primariade a tabelas.

Introducir o oemento de dados de cada campo :

Si éte ya existe en o Diccionario de dados, a información do mismo, aparecerá automáticamente.

Si o oemento de dados no existía en o diccionario de dados, Com doble-click podemos ir al mantenimiento de oementos de dados para crearlo en ée momento.

Soeccionar o fag `initial´ , si los campos deben ser inicializados Com sus valoré inicialé.

Page 125: Introdução a abap

Si queremos permitir o mantener a tabelas déde a transacción de mantenimiento de tabelas (SM31), lo indicaremos activando o fag 'table maintenance allowed'.

Si queremos que a tabelas que étamos creando dependa do mandante, incluiremos o campo MANDT como o primer campo de a tabelas.

É posible épecificar parâmetros de tipo técnico como o tipo de dados que almacena a tabelas, o tamaño aproximado, ...etc. déde : Goto -> technical Settings.

Finalmente, grabaremos los dados introducidos.

5.2. As cavé foráneas.

Si um campo de a tabelas tiene um dominio cuyo rango de valoré étá definido por uma tabelas de valoré, será necéario definir as cavé foráneas (externas) Com dicha tabelas de valoré e indicar Com um * en a columna 'Check table'.

Para olo :

Soeccionamos o campo Com tabelas de chequeo. Soeccionamos Goto -> Foreign Key. Introducir

Texto de a cave foránea. Código de a tabelas de chequeo. Asignación do campo (Genérico o Comstante). Chequeo do campo en as pantalas. Mensaje de error que sustituye al mensaje étándar de

error cuando se introduce um valor que no existe en a tabelas de chequeo.

Cardinalidad. Décribe a roación Com répecto al número de registros dependienté entre as tabelas - (1:C, 1:CN, 1:N, 1: 1)-

Tipo de campo de cave foránea.

Será necéario definir as cavé externas si queremos que o chequeo automático de as pantalas fumcione correctamente.

Page 126: Introdução a abap

5.3 Otras posibilidadé en a creación de tabelas.

Si hemos marcado a posibilidad de poder mantener o Comtenido de a tabelas déde a transacción SM31, será necéario que ejecutemos um procéo de generación de dicho mantenimiento.

Para hacerlo debemos soeccionar .- Environment -> Gen. Maint. Dialog..

Introduciremos:

O grupo de fumcioné para o mantenimiento de tabelas.O grupo de autorizacioné para o mantenimiento de tabelas.O tipo de mantenimiento que queremos:

De uma pantala.De dos pantalas. Uma pantala Com lista de registros y

otra Com valoré individualé.O número de Dynpro(s) que queremos asignar a a(s) pantala(s).

O índice primario se crea cuando uma tabelas é activada. Bajo ciertas circumstancias é posible que sea recomendable ayudar a a soección de dados Com índicé secumdarios.

Para definir índicé secumdarios ir a: Goto -> Indicé.

Finalmente, anté de poder utilizar uma tabelas creada por nosotros, será

necéario realizar um procéo de ACTIVACION.