Sunteți pe pagina 1din 51

EjemplosAbap

JordiCalopaBosch

Revisin151006
Ejemplos Abap Jordi Calopa Bosch

ndice

1. Introduccin....................................................................................................................................3
2. El lenguaje Abap.............................................................................................................................4
2.1 Parte DECLARATIVA del programa.....................................................................................4
2.2 Parte OPERATIVA del programa ........................................................................................ 4
2.3 Operadores Relacionales....................................................................................................... 6
2.4 Campos del Sistema...............................................................................................................6
2.5 Tipos de Datos Predefinidos..................................................................................................8
2.6 Tablas Internas....................................................................................................................... 9
3. Ejemplos....................................................................................................................................... 12
3.1 Tratamiento de Strings.........................................................................................................12
3.2 Clculos............................................................................................................................... 15
3.3 Tablas de Base de Datos (SQL Open)..................................................................................17
3.4 Varios................................................................................................................................... 19
3.5 Programas ........................................................................................................................... 27

2 / 51
Ejemplos Abap Jordi Calopa Bosch

1.Introduccin
EllenguajeABAP,cuyassiglassignificanAdvancedBusinessApplicationProgramming,esunlenguajede
programacinimplementadonicamentedentrodelentornodeSAP;Esdecir,quenodisponedecompilador
independiente, sino que los programas se ejecutan mediante un runtime incorporado al entorno de
desarrollodeSAP.

ABAPesunlenguajedeprogramacinqueamalgamacaractersticasdeotrosmsantiguoscomoCOBOL,
RPG y Assembler. En los entornos host fue desarrollado en lenguaje assembler de dichos entornos y
funcionaba como un subprograma del monitor de teleproceso CICS. Es un lenguaje que dispone de los
elementosnecesariosparalaprogramacinestructuradayesespecialmenteprcticoparaprogramacinpor
refinamientossucesivos.

3 / 51
Ejemplos Abap Jordi Calopa Bosch

2.EllenguajeAbap

Adentrndonosenlaestructuradellenguaje,cabedestacarqueunprogramaABAP,constadedosgrandes
bloques:unaparteDECLARATIVA,enlaquepodemosdefinirtodaslastablas,estructuras,vistas,variables,
constantes,parmetrosyopcionesdeseleccin,entreotros,yunasegundaparteOPERATIVAenlaquese
codificanlassentenciasquemarcarnelflujodelproceso.

2.1ParteDECLARATIVAdelprograma

CONSTANTS Definicindeconstantes
DATA Definicindevariables:camposinternos,strings,tablasyreasdetrabajo
INCLUDE Includedeestructurasotipos
PARAMETERS Definicindecamposinternosinicializablesporelusuario
PROGRAM Iniciodeprograma
REPORT Iniciodeprograma(EquivalenteaPROGRAM)
SELECTOPTIONS Definicindeloscriteriosdeseleccininicializablesporelusuario
STATICS Definicindedatosestticosparasubrutinas
TABLES DefinicindetablasdeSAP(tablasdeBD,estructurasetc)
TYPES Definicindetipos

2.2ParteOPERATIVAdelprograma

Eventos

INITIALIZATION Antesdelasalidadelapantalladeseleccin(soloOnLine)
ATSELECTIONSCREENDespusdelaentradadedatosdelapantalladeseleccin
STARTOFSELECTION Alprincipiodelprograma(parteoperativa)
GET DespusdeleerunregistrovaBDlgica
ENDOFSELECTION Alfinaldelaseleccin/programa
TOPOFPAGE Alprincipiodeunanuevapgina
ENDOFPAGE Despusdelasalidadelaltimalneadelapgina
ATLINESELECTION Despusdeseleccionarunalnea
ATPfn Despusdepulsarunatecladefuncin
ATUSERCOMMAND Despusdelaentradadedatosenelcampodecomandos

SQLOpen(TratamientodetablasdeBD)

COMMITWORK FinalizaLUWyRealizaloscambiosenlaBD
DELETE BorradoderegistrosdetablasdeBD
FETCH LeeregistrodetabladeBD(OPEN/CLOSECURSOR)
INSERT InsercinderegistrosentablasdeBD
MODIFY SiexisteUPDATE;sinoexisteINSERT
ROLLBACK DeshaceractualizacionesdeBDhastaelltimoCOMMIT
SELECTENDSELECT SeleccinderegistrosdetablasdeBD
SELECTSINGLE LeeregistrodetabladeBD
UPDATE ActualizaunregistrodeunatabladeBD

4 / 51
Ejemplos Abap Jordi Calopa Bosch

Tratamientodeficherossecuenciales(Linux)

CLOSEDATASET Cierredeunficherosecuencial
OPENDATASET Aperturadeunficherosecuencial
READDATASET Lecturadeunficherosecuencial
TRANSFER Grabacinderegistroenficherosecuencial

Tratamientodeficherosinternos

XTRACT Grabacindeunregistroenunficherointerno
FIELDGROUPS Definicindegruposdecampos
INSERT Asociarcamposaundeterminadogrupo
LOOPENDLOOP Loopdeunficherointerno
SORT Ordenarunficherointerno

Tratamientodetablasdinmicasenmemoriaprincipal

APPEND Aadirentradaenunatablainterna
COLLECT Aadirentradaenunatablainterna(Sinoexiste,laaade)
CONTINUE ReiniciodelLOOP
DELETE Deletederegistrosdetablasinternas
DESCRIBETABLE Devuelveinformacindeunatablainterna
EXIT Salirdeloopsysubrutinas
LOOPATENDLOOP Loopdeunatablainterna
MODIFY Modificacinderegistrosdetablasinternas
READ LecturadetablasinternasydeBD
REFRESH Limpiar(vaciar)unatablainterna
SORT Ordenarunatablainterna

Operacionesaritmticas

ADD Suma
COMPUTE Calcular
DIVIDE Divisin
MULTIPLY Multiplicacin
SUBTRACT Resta

Tratamientodestrings

CONDENSE Eliminaespaciosenblancodeunacadenadecaracteres
CONCATENATE Concatenavariosstringsovariables(enunasola)
OVERLAY Enmascaraunacadenaconotracadenadecaracteres
REPLACE Remplazaunstringporotro(dentrodeunavariable)
SEARCH Bsquedadecaracteres
SHIFT Mover(shiftar)elcontenidodeuncampo
SPLIT Separaunstringovariable(envarias)
TRANSLATE ConversinMaysculas/minsculas

5 / 51
Ejemplos Abap Jordi Calopa Bosch

2.3OperadoresRelacionales

EQ,= Igual
NE,>< NoIgual
GT,> Mayorque
LT,< Menorque
GE,>=,=> MayoroIgual
LE,<=,=< MenoroIgual

CO ComparacindeStrings:ContainsOnly
CN ComparacindeStrings:ContainsNOTOnly
CA ComparacindeStrings:ContainsAny
NA ComparacindeStrings:ContainsNOTAny
CS ComparacindeStrings:ContainsString
NS ComparacindeStrings:ContainsNOString
CP ComparacindeStrings:ContainsPattern
NP ComparacindeStrings:ContainsNOPattern

O Ciertosic1contiene1enlasposicionesindicadasporc2
Z Ciertosic1contiene0enlasposicionesindicadasporc2
M Ciertosic1contiene10enalgunadelasposicionesindicadasporc2

BETWEEN...AND Compruebasielvalorestdentrodeunrango
ISINITIAL Compruebasielvaloreselinicialdelcampo
IN Compruebasielvalorestdentrodelrangodelaselectoptions

*EjemplodeutilizacindeloperadorCO

programzjcbxxx.

data:var1(10)typecvalue'A1B2C3D4E5',
var3(10)typecvalue'ABCABCABCA'.

STARTOFSELECTION.

ifvar1CO'ABC'.ImprimeNO
write:/01'SI'.
else.
write:/01'NO'.
endif.

ifvar3CO'ABC'.ImprimeSI
write:/01'SI'.
else.
write:/01'NO'.
endif.

2.4CamposdelSistema

Seguidamente se detallan algunas variables del sistema y los contenidos que son accesibles desde un
programaABAP.

6 / 51
Ejemplos Abap Jordi Calopa Bosch

SYABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ
SYBATCH Informasilaejecucinesenbatch
SYCPROG Nombredelprogramaprincipal
SYCUCOL Columnaseleccionada
SYCUROW Filaseleccionada
SYDATLO Fechadelda(AAAAMMDD)local
SYDATUM Fechadelda(AAAAMMDD)delservidor
SYDBCNT cantidadderegistrosseleccionados(select)
SYDBSYS NombredelSistemadegestindeBasedeDatos
SYFDPOS Posicinencontradaenelstring(despusdelaconsulta)
SYHOST Nombredelhost
SYINDEX Cantidaddepasesdentrodeunloop(do)
SYLANGU Lenguajepordefecto
SYLINSZ Tamaodelalneadesalida(write)
SYLISEL Contenidodelalneaseleccionada
SYLSIND Niveldeentradasenlistasinteractivas
SYMANDT Mandante
SYMSGID Identificadordemensajes
SYOPSYS SistemaOperativo
SYPAGNO Nmerodepgina
SYREPID Nombredelprograma(Inexistenteennuevasversiones)
SYSAPRL ReleasedeSAP
SYSCOLS Cantidaddecolumnasenpantalla
SYSROWS Cantidaddefilasenpantalla
SYSTACO Columnainicialdelapantallaencurso
SYSTARO Filainicialdelapantallaencurso
SYSUBRC Cdigoderetorno
SYSYSID Identificacindelsistema(xxx,yyy..)
SYTABIX Indicedeunatablainterna
SYTCODE NombredelaTransaccin
SYTIMLO Horalocal(HHMMSS)
SYTITLE TtulodelListado
SYTZONE Zonahorariadelservidor
SYUCOMM CampoOKcode
SYULINE
SYUNAME Nombredeusuario
SYUZEIT Horadelservidor(HHMMSS)
SYVLINE |
SYWAERS Moneda(PTS,DM.)
SYZONLO Zonahorarialocal

*Ejemplo:ListaelcontenidodetodoslosSystemFields

programyxxxxxxx.

tables:dd03l.

data:nomcamp(8)typecvalue'SY',
valcamp(50)typec.

startofselection.

select*fromdd03lwheretabnameeq'SYST'.
nomcamp+3=dd03lfieldname.
write(nomcamp)tovalcamp.
write:/01nomcampcolorcol_key,
valcampcolorcol_normal.

7 / 51
Ejemplos Abap Jordi Calopa Bosch

endselect.

2.5TiposdeDatosPredefinidos

5.5.1Numricos

PEmpaquetado
IEntero
FComaflotante

5.5.2NoNumricos

CTexto
DFechaYYYYMMDD
THoraHHMMSS
XHexadecimal

5.5.3Especiales

NAlfanumricoquesoloadmiteNmeros

5.5.4Ejemplos

*Ejemplodeutilizacindecamposnumricos

programzxxxxxx.

data:var01typepvalue99,"Packed
var02typei,"Integer
var03typef,"Float
var04(11)typen."NumricoSINSIGNO

startofselection.
write:/01'PackedIntegerFlo'nogap,
'atNumeric'.
write:/01'....+....1....+.....+....1.....+....1.'nogap,
'...+....2......+....1.'.
formatintensifiedoff.

do16times.
var04=var03=var02=var01.
write:/01var01colorcol_normal,
var02colorcol_normal,
var03colorcol_normal,
var04colorcol_normal.
var01=var011.
enddo.

*EjemplodeutilizacindecamposAlfanumricos

8 / 51
Ejemplos Abap Jordi Calopa Bosch

programZJCBxxx.

data:var1(15)typecvalue'123456789ABCDEF'.

startofselection.

write:/01var1."Imprime123456789ABCDEF
write:/01var1+09(05)."ImprimeABCDEFvariable+offset(longitud)

2.6TablasInternas

Una tabla interna esun conjuntodedatos,en forma de matriz, que se graban en memoria interna (en
principioRAM)ysobreloscualespodemosejecutarpotentessentencias,queelpropiolenguajeAbapnos
facilita.Podramosafirmarquesetratadeunficherotemporalenmemoriainterna,tratablemedianteAcceso
DirectooSecuencial.

***DEFINICION***

Para definir tablas interna utilizaremos la instruccin genrica de definicin de datos, con el formato
especficoparatablas:

Ejemplos

data:beginofmitabla1occursN,(DondeNeslacantidadderegistrosprevistos)
campo1(10)typeC,
campo2typeP,
endofmitabla1.

data:beginofmitabla2occursN.
includestructuremitabla1.
data:endofmitabla2.

En este punto realizaremos algunas observaciones al respecto. En primer lugar que la cantidad (N) de
registrosesaproximadaporquelareservadelespaciodememoriaserealizadeformadinmica,tomando
progresivamentetantoespaciocomoseanecesario.

***CARGADEDATOSENTABLAS***

Existen varias formas de cargar datos en una tabla interna; la primera y ms elemental consiste en ir
aadiendodatosporlacola,comoharamosenunficherodetiposecuencial,mediantelasentenciaAPPEND.
NtesequeconlautilizacindelasentenciaAPPENDesposiblecargarregistrosduplicados.

Ejemplo

move'ABCDEFGHIJ'tomitabla1campo1.
move1000tomitabla1campo2.
appendmitabla1.(Aadimosregistro)
move'ABCDEFGHIJ'tomitabla1campo1.
move1000tomitabla1campo2.
appendmitabla1.(Aadimosotroregistro)

9 / 51
Ejemplos Abap Jordi Calopa Bosch

OtraformadecargardatosenunatablaconsisteenutilizarlasentenciaCOLLECT,lacualadiferenciade
APPEND,noaaderegistrosduplicadossinoquesumaelcontenidodeloscamposnumricos,cuandoel
contenido de los alfanumricos es igual. Lgicamente si el contenido de los campos alfanumricos es
diferente,entoncesaadelosregistrosaligualquelohacelasentenciaAPPEND.

Ejemplo

move'ABCDEFGHIJ'tomitabla1campo1.
move1000tomitabla1campo2.
collectmitabla1.(Aadimosregistro)
move'ABCDEFGHIJ'tomitabla1campo1.
move1000tomitabla1campo2.
collectmitabla1.(Sumamosalprimerregistro)

Porltimo,cuandodostablasinternastienenelmismoformato,esposiblecopiartodoelcontenidodeuna
sobreotra.

Ejemplo

tabla2[]=tabla1[]. (CopiatodalaTabla1sobrelaTabla2,
borrandoelanteriorcontenidodeTabla2)

***CALSIFICARDATOSENTABLASINTERNAS***

SORTOrdenarunatablainterna

***PROCESARELCONTENIDODEUNATABLA***

CONTINUE ReiniciodelLOOP
DELETE Deletederegistrosdetablasinternas
DESCRIBETABLE Devuelveinformacindeunatablainterna
EXIT Salirdeloopsysubrutinas
LOOPATENDLOOP Loopdeunatablainterna
MODIFY Modificacindergistrosdetablasinternas
READ LecturadetablasinternasydeBD

***BORRARELCONTENIDODEUNATABLA***

REFRESHLimpiar(vaciar)unatablainterna

10 / 51
Ejemplos Abap Jordi Calopa Bosch

Programadeejemplo:

programzjcbxxx.

****DefinicindelaTabladinmicaenmemoriaInterna***
data:beginofTabla1occurs30,
campo1(3)typeN,
campo2(7)typeC,
endofTabla1.

startofselection.

****Cargadetresregistrosenlatablainterna***
Tabla1Campo1='001'.
Tabla1Campo2='ABCDEFG'.
appendTabla1."Aadimosprimerregistro
*
Tabla1Campo1='002'.
Tabla1Campo2='HIJKLMN'.
appendTabla1."Aadimossegundoregistro
*
Tabla1Campo1='003'.
Tabla1Campo2='NOPQRST'.
appendTabla1."Aadimostercerregistro

endofselection.

****Bucleparalistarelcontenidodelatablainterna***
loopattabla1.
write:/01Tabla1Campo1,
Tabla1Campo2.
endloop.

==================================

elresultadoimpresoeselsiguiente:

001ABCDEFG
002HIJKLMN
003NOPQRST

11 / 51
Ejemplos Abap Jordi Calopa Bosch

3.Ejemplos

3.1TratamientodeStrings

*BUSCARUNSTRING
reportyxxxxxxx.
data:a(10)typecvalue'aeioujklmn'. 'campoenelcualsebusca
data:b(01)typecvalue'j'. 'valorabuscar
startofselection.
searchaforb.
write:sysubrc,syfdpos. 'syfdposcontienevalordeloffset
dondesehaencontradoelstring
buscado(ennuestroejemplo,el5)

*CONDENSARELCONTENIDODEUNAESTRUCTURA.
reportyxxxxxxx.
data:beginofnombre_struc,
a(10),b(7),c(12),d(10),e(14),
endofnombre_struc.
startofselection.
nombre_struca='uno'.
nombre_strucb='dos'.
nombre_strucc='tres'.
nombre_strucd='cuatro'.
nombre_struce='cinco'.
condensenombre_struc. 'concatena
write:/01nombre_struc. 'imprimeunodostrescuatrocinco

*CONVERTIRMAYUSCULAS/MINUSCULAS
programzxxxxxx.
data:campotypestringvalue'abcd'.
startofselection.
write:/01Campo.
performMayMinusingCAMPO'U'. 'ConvertiraMaysculas
write:/01Campo.
performMayMinusingCAMPO'L'. 'ConvertiraMinsculas
write:/01Campo.
*
formMayMinusingstringtipo.
iftipo='U'.
translatestringtouppercase.
else.
translatestringtolowercase.

12 / 51
Ejemplos Abap Jordi Calopa Bosch

endif.
endform.

*CONVERTIRUNTIPOPACKEDCONDECIMALESACHARACTER
reportyxxxxxxx.
data:campo1typepdecimals2value'123,45',
campo2(10)typec.
writecampo1tocampo2nosign. 'convertimostipo
translatecampo2using'0'. 'cambiamosblancosporceros
write:/campo1,campo2."

*Alobjetodefacilitarlautilizacindedecimales,esposiblerealizartodoslosclculosencomaflotantey
posteriormenteconvertirelcampoalformatorequerido.
reportyxxxxxxx.
data:c1(8)typec.
data:a(8)typecvalue'3'.
data:b(10)typepdecimals2.
data:ftypef.
f=100/a.
writefexponent0decimals2toc1. '<conversinalformato
movec1tob. '<requerido.
write:/a,f,b,c1."

*JUSTIFICARALADERECHAUNCAMPODETIPOCHARACTER
programysux0800.
parameters:inp(10)typec.
data:out(10)typec.
startofselection.
writeinptooutrightjustified.
write:/01inp,
/01out.
Nota:EstasentenciaactacorrectamentesiloscamposhansidodefinidoscomoTYPEC,peronofunciona
correctamentecuandosedefinencomoLIKEdeuncampoCHAR.Paraeste ltimocasovaselasentencia
SHIFT.

*OBTENERLALONGITUDDEUNCAMPO
reportyxxxxxxx.
data:campo(15)typecvalue'0123456789',
longitypei.
longi=strlen(campo).
write:/01longi.'Imprimeelvalor10

*QUITARLOSBLANCOSDEUNCAMPOTIPOSTRING.
reportymltest.
data:beginofnombre_struc,
a(10),
endofnombre_struc.
startofselection.
nombre_struca='abc'.
condensenombre_strucnogaps. 'nogapsquitalosblancos

13 / 51
Ejemplos Abap Jordi Calopa Bosch

write:/01nombre_struc. 'imprimeelliteralabc

*ROMPER(SPLIT)ELCONTENIDODEUNAVARIABLE
reportyxxxxxxx.
data:a(40)typecvalue'PRIMEROSEGUNDOTERCEROCUARTOQUINTO',
b(10)typec,
c(20)typec,
d(30)typec.
startofselection.
splitaatspaceintobcd.
write:/01b, 'b=PRIMERO
/01c, 'c=SEGUNDO
/01d. 'd=TERCERO;CUARTO;QUINTO

*SHIFTARELCONTENIDODEUNCAMPO
reportyxxxxxxx.
data:campo(20)typec.
startofselection.
campo='.+.1.+.2'.
do20times.
shiftcampo. 'DesplazastringhacialaIzquierda
write:/01campo.
enddo.
campo='.+.1.+.2'.
do20times.
shiftcamporight. 'DesplazastringhacialaDerecha
write:/01campo.
enddo.

*TRUNCARUNVALOR
reportyxxxxxxx.
data:valor1typefvalue'123.45',
valor2typef.
computevalor2=trunc(valor1).
write:/01valor1, Imprime;1,2.345E+16
valor2. Imprime;1,2.3E+16

*UTILIZAROFFSETS
reportyxxxxxxx.
data:a(10)typecvalue'abcdefghij'.
data:b(10)typec.
data:offsettypeivalue1,
longitypeivalue2.
startofselection.
movea+offset(longi)tob.
write:/01a, 'Imprimeabcdefghij
/01b. 'Imprimebc

14 / 51
Ejemplos Abap Jordi Calopa Bosch

3.2Clculos

*CALCULARLARAIZCUADRADADEUNNUMERO
reportyxxxxxxx.
data:ind2(3)typenvalue100,
raiztypef.
raiz=sqrt(ind2).
write:/'larazcuadradade',ind2,'es',raiz.

*CALCULARELFACTORIALDEUNNMERO
reportyxxxxxxx.
data:factorialtypefvalue1,
numero(02)typenvalue1.
whilenumerolt'51'.
write:/'elfactorialde',
numero,
'es',
factorial.
numero=numero+1.
factorial=factorial*numero.
endwhile.

*CALCULARELLOGARITMONEPERIANO
reportyxxxxxxx."
data:campo1typefvalue1,
campo2typefvalue0,
numero_etypefvalue0.
numero_e=exp(campo1).
write:/01'1elevadoae=',numero_ecolor5.
campo2=log(numero_e)."
write:/01'logaritmoneperianodee=',campo2color5.

*CALCULARELVALORABSOLUTODEUNNUMERO
reportyxxxxxxx.
data:valor1typepvalue'123',
valor2typep.
computevalor2=abs(valor1).
write:/01valor1, 'Imprime123
valor2. 'Imprime123

*CALCULARPOTENCIASDEBASEbase
reportyxxxxxxx.
data:ind1(2)typenvalue0,

15 / 51
Ejemplos Abap Jordi Calopa Bosch

potencia(10)typenvalue1,
base(01)typenvalue2."
whileind1lt'32'.
ind1=ind1+1.
potencia=potencia*base.
write:/'2elevadoa',ind1,'=',potenciacolor7"
endwhile.

*CALCULARLAINTEGRALDEFINIDADELAFUNCINY=2XENELINTERVALODEXDE0A10
reportyxxxxxxx.
data:y(5)typepdecimals2value'0,00',
x(5)typepdecimals2value'0,00',
incremen(5)typepdecimals2value'0,01',
maximo_de_x(5)typepdecimals2value'10,00',
mini_area(7)typepdecimals4value'0,0000',
integral_definida(7)typepdecimals4value'0,0000'.
startofselection.
whilexltmaximo_de_x.
x=x+incremen.
y=x+x.
mini_area=incremen*y.
integral_definida=integral_definida+mini_area.
endwhile.

*CALCULARLOSnTERMINOSDEUNAPROGRESINARITMTICA
reportymltest.
data:n typeivalue0, 'cantidaddeelementos
suma typefvalue0,
w1 typeivalue0.
parameters:a1 typeidefault1, 'primertrmino
an typeidefault9, 'ultimotrmino
increm typeidefault1. 'incremento
startofselection.
w1=a1.
whilew1lean.
w1=w1+increm.
n=n+1.
endwhile."
suma=(n*((a1+an)/2)). 'sumantrminosdeunap.a.
write:/01suma.

*MULTIPLICARSHIFTANDO
programzxxxxxx.
data:numero(8)typenvalue1,
enterotypei.
startofselection.
do7times.
movenumerotoentero.
write:/01entero.
shiftnumerocircular.
Enddo.

16 / 51
Ejemplos Abap Jordi Calopa Bosch

*SENO,COSENOYTANGENTE
formseno_coseno_tangente.
data:ind2(3)typenvalue0,
ind3typefvalue0,
pitypefvalue'3.14159',
senotypefvalue0,
cosenotypefvalue0,
tangentetypefvalue0.
do360times.
ind2=ind2+1.
ind3=(ind2*2*pi)/360. Convertiraradianes
seno=sin(ind3).
coseno=cos(ind3).
tangente=seno/coseno.
write:/ind2,'>',
senocolor1,
cosenocolor2,
tangentecolor3.
enddo.
endform.

3.3TablasdeBasedeDatos(SQLOpen)

EllenguajeAbaptambindisponedepotentessentenciasparaeltratamientodetablas,clasificadasendos
grandesgruposdenominados'SQLNativo'y'SQLOpen'.Elprimero(SQLNativo)eselconjuntodesentencias
detratamientodetablasquedependedelSGBD(SisteadeGestindeBasedeDatos)instaladoyquepuede
variardeunentornoaotro.Elsegundo,denominado'SQLOpen'sonsentenciasstandarddeAbap,queel
propio'interpretador'transcribeallenguajenativo.Esteconjuntoeselmsrecomendable,puestoqueencaso
demigracindelSGBDnoseranecesarioreescribirelcdigofuentedelosprogramas.

*TRATAMIENTODEUNATABLADECLARADAENTIEMPODEEJECUCIN(SINSENTENCIATABLES).
reportyxxxxxxx.
data:nombre(10)typecvalue'T9JCB',
work_area(100).
startofselection.
selectdescr1from(nombre)intowork_area.
write:/01work_area.
endselect."

*SELECCINUTILIZANDOELWILDCARD%
programyxxxxxxx.
tables:t9jcb.
select*fromt9jcb
wheredescr1like'REVIS%'.'LoqueempiezaporREVIS
extractdatos.
endselect.

17 / 51
Ejemplos Abap Jordi Calopa Bosch

*SELECCINUTILIZANDOLOSWILDCARD_Y%.
programysux0800.
tables:ekko.
select*fromekko
whereebelnlike'_4%'.'Loquetenga4enlasegundapos.
write:/01ekkoebeln.
endselect.

*UTILIZANDOLACLUSULAGROUPBY
reportyxxxxxxx.
tables:t9jcb.
data:codiliket9jcbcodigo,
actiliket9jcbactividad.
startofselection."
selectcodigoactividadinto(codi,acti)fromt9jcb
groupbyactividadcodigo.'AgruparyOrdenar
write:/01codi,acti.
endselect.
write:/01sydbcnt.

*SELECCINRPIDASOBREUNATABLAINTERNA(INICIALIZNDOLA)
reportyxxxxxxx.
tables:usr03.
data:beginoft1occurs1000,
bnamelikeusr03bname, 'cdigodeusuario
name1likeusr03name1, 'nombreprimero
endoft1.
startofselection.
selectbnamename1intotablet1fromusr03. 'Refresht1
sortt1.
loopatt1.
write:/01t1bname,
t1name1.
endloop.

*SELECCINRPIDASOBREUNATABLAINTERNA(SININICIALIZAR)
reportyxxxxxxx.
tables:usr03.
data:beginoft1occurs1000,
bnamelikeusr03bname, 'cdigodeusuario
name1likeusr03name1, 'nombreprimero
endoft1.
startofselection.
select*appendingcorrespondingfields 'appendt1
oftablet1fromusr03.
sortt1.
loopatt1.
write:/01t1bname,
t1name1.
endloop.

18 / 51
Ejemplos Abap Jordi Calopa Bosch

*UTILIZARROLLBACK
programyxxxxxxx.
tables:t9jcb.
startofselection.
selectsingleforupdate*fromt9jcbwherecodigoeq'ZZZZZ'.
ifsysubrceq0.
move'primeramodificacin'tot9jcbdescr1.
updatet9jcb.
commitwork.
move'segundamodificacin'tot9jcbdescr1.
updatet9jcb.
rollbackwork. 'Deshacesolamentelasegundamodificacin
endif.

*INSERTARUNREGISTROENUNATABLA
reportyxxxxxxx.
tables:tvarv.
startofselection.
tvarvname='FI_NUEVA_VARIABLE'. 'informamosloscamposclave
tvarvtype='P'.
tvarvnumb='0000'.
insertintotvarvvaluestvarv. 'insertamosregistro

*UTILIZARAVERAGE
reportyxxxxxxx.
data:cantidadtypei, 'cantidad
mediatypepdecimals2, 'Media
tecnicliket9jcbtecnic.
startofselection.
selecttecniccount(*)avg(horasd)
into(tecnic,cantidad,media)
fromt9jcb
wheretecniceqsyuname
groupbytecnic.
endselect.
Endofselection.

write:/tecnic,cantidad,media.

3.4Varios

*ARRANCARUNPROGRAMACONCRETODESDENUESTROPROGRAMAABAP
reportyxxxxxxx.
submitnombre_del_programa.

19 / 51
Ejemplos Abap Jordi Calopa Bosch

*ARRANCARUNLPROGRAMACUYONOMBREESTCONTENIDOENLAVARIABLENOMBRE
reportyxxxxxxx.
data:nombre(8)typecvalue'nombre_de_programa'.
submit(nombre).

*BLOQUEARLAENTRADADEUNCRITERIODESELECCION
.
selectoptions:socfort001bukrs,
cenfort001wwerks.
.
.
initialization.
socsign='i'.
socoption='bt'.
soclow='0200'.
sochigh='0299'.
appendsoc.
censign='i'.
cenoption='bt'.
cenlow='01b1'.
cenhigh='01c1'.
appendcen.
*
loopatscreen.
ifscreenname+00(3)eq'SOC'.
screeninput=0. 'BloqueamoslaentradaSOC
screenintensified=1.
modifyscreen.
endif.
endloop.

*BORRARTODOSLOSVALORESPERSONALESDEUNMATCHCODE
programzjcbxxx.
includeradshmac.
typepools:SHLP.
data:campoTYPEshlp_descr_t.
camposhlpname='ZSAKO1'. NombredelMatchCode
camposhlptype='SH'.
performpersonal_values_del_all(saplsdsd)usingcampo.
*
Nota:tambinpodemosaccederdirectamentealatablaDDSHPVAL50oDDSHPVALUE

*CAMBIARDEPASSWORDTANTASVECESCOMOSEPRECISE
Programyxxxxxxx.
tables:usr02.
startofselection.
*ejecutaresteprogramaantesdecambiarelpassword
selectsingle*fromusr02
wherebnameeqsyuname.
ifsysubrceq0.

20 / 51
Ejemplos Abap Jordi Calopa Bosch

usr02ocod1='00000000'.
usr02bcda1='99991231'.
usr02ocod2='00000000'.
usr02bcda1='99991231'.
usr02ocod3='00000000'.
usr02bcda3='99991231'.
usr02ocod4='00000000'.
usr02bcda4='99991231'.
usr02ocod5='00000000'.
usr02bcda5='99991231'.
usr02trdat=sydatum1.
updateusr02.
endif.

*DETECTARUNAOBISIESTO(Funcinexterna)
FunctionY_BISIESTO.
DATA:ANYTYPEIVALUE0,
ENTEROTYPEP,
RESTOTYPEP.
*
IFPARAM1CO'0123456789'.Validamosenvalordeentrada
MOVEPARAM1TOANY.
ELSE.
PARAM2='E'.E=Error
EXIT.Salidadelafuncin,conerror
ENDIF.
*
RESTO=ANYMOD4.
IFRESTONE0.
PARAM2='N'.N=Nobisiesto
EXIT.
ELSE.
RESTO=ANYMOD100.
IFRESTONE0.
PARAM2='S'.S=Sibisiesto
EXIT.
ELSE.
RESTO=ANYMOD400.
IFRESTO=0.
PARAM2='S'.S=Sibisiesto
ELSE.
PARAM2='N'.N=Nobisiesto
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.

*EJECUTARCOMANDOSDELINUX
reportyxxxxxxx
linesize250
nostandardpageheading.
data:beginoft1occurs100,
line(200),
endoft1.

21 / 51
Ejemplos Abap Jordi Calopa Bosch

data:w_comando_unix(250)typec.
parameters:wcom(70)typeclowercaseobligatory.
startofselection.
performejecuta_comando.
performlistar_t1.
endofselection.
*
formejecuta_comando.
concatenatewcom''intow_comando_unixseparatedbyspace.
refresht1.
CALL'SYSTEM'ID'COMMAND'FIELDW_COMANDO_UNIX
ID'TAB'FIELDT1*SYS*.
endform.
*
formlistar_t1.
formatintensifiedon.
formatcolorcol_heading.
uline.
loopatt1.
write:/01syvline,
t1line,
atsylinszsyvline.
endloop.
uline.
endform.

*ENVIARMENSAJESAUNUSUARIO(Conectadoalsistema)
programzxxxxxxx.
data:opcode_send_pop_up(1)typexvalue31,
longitudlikesyindex,
loc_cut_blankstypexvalue1,
wuserlikesyuname.
selectionscreen:beginofblockb1withframetitletext001.
selectionscreen:skip.
parameters:mensaje(128)typeclowercase.
parameters:usuariolikesyunamedefaultsyuname,
mandantelikesymandtdefaultsymandt.
selectionscreen:skip.
selectionscreen:endofblockb1.
*
initialization.
mensaje='escribaaquisumensaje'.
startofselection."
describefieldmensajelengthlongitud.
performfuncion_enviar_mensaje.
*
formfuncion_enviar_mensaje.
CALL'ThUsrInfo'ID'OPCODE'FIELDOPCODE_SEND_POP_UP
ID'CLIENT'FIELDMANDANTE
ID'USR'FIELDUSUARIO
ID'MSG'FIELDMENSAJE
ID'MSG_LEN'FIELDLONGITUD
ID'CUT_BLANKS'FIELDLOC_CUT_BLANKS.
endform.

22 / 51
Ejemplos Abap Jordi Calopa Bosch

*EVITARQUECADUQUELACONSTRASEAPERIODICAMENTE
reportzxxxxxxx.
tables:usr02.
startofselection.
selectsingleforupdate*fromusr02
wherebnameeqsyuname.
ifsysubrceq0.
usr02bcda1='99991231'.
updateusr02.
endif.

*GENERARUNPROGRAMADINAMICAMENTE
programzxxxxxxx.
data:NomProglikesyrepidvalue'ZJCB018'.
data:beginoft1occurs999,
reg(255)typec,
endoft1.
startofselection.
t1reg='**********************************************'.appendt1.
t1reg='****Autor:****'.appendt1.
t1reg='**********************************************'.appendt1.
t1reg='programZJCB018.'.appendt1.
t1reg='startofselection.'.appendt1.
t1reg='write:/01''Programageneradodinmicamente''.'.appendt1.
INSERTREPORTNomProgFROMT1.

*GENERARYBORRARUNATABLADEBD(utilizandoSQLNativo)
execsql.
createtabletabla_work(
campo1char(20)notnull,
primarykey(campo1)
)
endexec.
*
execsql.
droptabletabla_work
endexec.

*GENERARMENUDINAMICAMENTE(ApartirdelasFORMsdelpropioprograma)
programzxxxxxx.
data:beginoft1occurs3000,
reg(255)typec,
endoft1.
data:beginoft2occurs5,
mnu(30)typec,
endoft2.
data:selecclikesytabix,
longitypei.
startofselection.
readreportsyrepidintot1.
loopatt1.

23 / 51
Ejemplos Abap Jordi Calopa Bosch

ift1reg+00(04)='form'.
longi=strlen(t1reg)5.
movet1reg+04(longi)tot2mnu.
appendt2.
endif.
endloop.
CALLFUNCTION'POPUP_WITH_TABLE_DISPLAY'
EXPORTING
ENDPOS_COL=70
ENDPOS_ROW=21
STARTPOS_COL=41
STARTPOS_ROW=3
TITLETEXT='JCBTOOLS'
IMPORTING
CHOISE=selecc
TABLES
VALUETAB=t2
EXCEPTIONS
BREAK_OFF=1
OTHERS=2.
ifsysubrceq0.
performseleccOFsubrutina1subrutina2subrutina3.
endif.
formsubrutina1.
write:/01'UNO'.
endform. "subrutina1
formsubrutina2.
write:/01'DOS'.
endform. "subrutina2
formsubrutina3.
write:/01'TRES'.
endform. "subrutina3

*INSERTARREGISTROSENTABLAINTERNA

Inicializndola
reportyxxxxxxx.
tables:usr03.
data:beginoft1occurs1000,
bnamelikeusr03bname, 'cdigodeusuario
name1likeusr03name1, 'nombreprimero
endoft1.
startofselection.
selectbnamename1intotablet1fromusr03. '=Refresht1
sortt1.
loopatt1.
write:/01t1bname,
t1name1.
endloop.

SINInicializarla
reportyxxxxxxx.
tables:usr03.
data:beginoft1occurs1000,
bnamelikeusr03bname, 'cdigodeusuario
name1likeusr03name1, 'nombreprimero

24 / 51
Ejemplos Abap Jordi Calopa Bosch

endoft1.
startofselection.
select*appendingcorrespondingfields '=appendt1
oftablet1fromusr03.
sortt1.
loopatt1.
write:/01t1bname,
t1name1.
endloop.

*LISTARLOSCOLORESSTANDARD
programzcolors.
data:variable_colortypeivalue0.
startofselection.
do8times.
formatintensifiedoncolor=variable_color.
write:/01'intensifiedON;color',
variable_color.
formatintensifiedoffcolor=variable_color.
write:/01'intensifiedOFF;color',
variable_color.
variable_color=syindex.
enddo.

*OBTENERINFORMACIONDELSISTEMA
programyxxxxxxx.
data:nombre_del_sistema(100)typec,
sistema_gestion_bd(100)typec.
startofselection.
*Lalistacompletadetodoslosparmetrosdisponiblessepuedeobtener
*medianteelreportRSPARAM,facilitadoporSAP.
*
****IdentificacindelSistema***
call'C_SAPGPARAM'id'NAME'field'SAPSYSTEMNAME'
id'VALUE'fieldnombre_del_sistema.
write:/01nombre_del_sistema.
****SistemadeGestindeBD***
call'C_SAPGPARAM'id'NAME'field'dbms/type'
id'VALUE'fieldsistema_gestion_bd.
write:/01sistema_gestion_bd.

*PROVOCARUNTIEMPODEESPERA(entre1y5segundos)
reportyxxxxxxx.
data:int_secondstypeivalue5.
startofselection."
gettime.
write:/01syuzeit.
call'ALERTS'id'ADMODE'field50
id'STORAGE_OPCODE'field'SLEEP'
id'TIME'fieldint_seconds.
gettime.
write:/01syuzeit.

25 / 51
Ejemplos Abap Jordi Calopa Bosch

*TRATARHEXADECIMALES
programZJCBxxx.
data:oper1(2)typeX, "(2)==>de0000aFFFF
oper2(2)typeX,
total(2)typeX.
parameters:num1(4)typeN,
num2(4)typeN.
startofselection.
oper1=num1.
oper2=num2.
total=oper1+oper2.
write:/01total.

*UTILIZARSENTENCIAHIDE
reportyxxxxxxx"
nostandardpageheading.
data:campo(3)typec.
startofselection.
write:/01'primeralinea'.
campo='111'.
hidecampo.'asociamosvalor111alalineaescritaanteriormente.
write:/01'segundalinea'.
campo='222'."
hidecampo.'asociamosvalor222alalineaescritaanteriormente.
atlineselection.
write:/01campo. 'campovaldr111siseseleccionalaprimeralnea
'ovaldr222siseseleccionalasegunda

*VISUALIZARLISTADEUSUARIOSCONECTADOS
reportzxxxxxxx
linesize120
nostandardpageheading.
data:beginoft1occurs1.
includestructureuinfo.
data:endoft1.
data:w_conectstypei.
startofselection.
refresht1.
CALLFUNCTION'THUSRINFO'
TABLES
USR_TABL=T1
EXCEPTIONS
OTHERS=1.
describetablet1linesw_conects.
sortt1bymandtbname.
formatcolorcol_heading.
formatintensifiedoff.
uline.
loopatt1.
write:/01syvline,
t1mandtintensifiedon,

26 / 51
Ejemplos Abap Jordi Calopa Bosch

t1bname,
t1tcodeintensifiedon,
t1zeit,
t1extmodiintensifiedon,
t1hostadr,
t1termintensifiedon,
t1tid,
atsylinszsyvline.
endloop.
uline.
formatcolorcol_positive.
write:/01syvline,
'usuariosconectadosalsistema',
w_conectscolorcol_normal,
atsylinszsyvline.
uline.

3.5Programas

****************************************************************
*Autor...........................JordiCalopaBosch(JCB)*
*Ultimaactualizacin............09.10.2002*
*Entornodedesarrollo...........SAP/R3(31I)bajoUnix*
*Lenguajedeprogramacin........ABAP/4*
**
*BackupAutomticodeProgramasdelUseractivo.Esteprograma*
*revisalatablaTRDIRycuandoencuentraunprogramagenerado*
*y/omodificadoporelusuarioactivo,lovuelcaaPC,*
*aadindolelaextensinTXT*
**
****************************************************************
programzxxxxxxx
linesize120
nostandardpageheading.

includezjcb_include.

****DeclaracindetablasyVistasdeBasedeDatos****
TABLES:TRDIR.

****Declaracindetablasdinmicasdememoriainterna****
DATA:BEGINOFt1OCCURS5000,"Tabladevolcado
reg(255)typec,
endoft1.

DATA:BEGINOFt2OCCURS10000,"Tabladirectorio
nameliketrdirname,
clasliketrdirclas,
cnamliketrdircnam,
cdatliketrdircdat,
unamliketrdirunam,
udatliketrdirudat,

27 / 51
Ejemplos Abap Jordi Calopa Bosch

seculiketrdirsecu,
applliketrdirappl,
endoft2.

****Declaracindevariablesglobales****
data:wdirtypestring,
tipo(10)typecvalue'ASC',
foundstypeivalue0,
longitypeivalue0,
campotypec,
numero(4)typen.

****DefinicindelosCriteriosdeSeleccin****
SELECTIONSCREEN:BEGINOFBLOCKBL1WITHFRAMETITLETEXT001.
SELECTIONSCREEN:SKIP.
PARAMETERS:DIRPC(25)TYPECOBLIGATORY.
SELECTIONSCREEN:SKIP.
SELECTOPTIONS:WMODIFFORsydatlo
NOEXTENSION.
SELECTIONSCREEN:SKIP.
SELECTIONSCREEN:ENDOFBLOCKBL1.

INITIALIZATION.
DIRPC='c:\temp\'.
WMODIFSIGN='I'.
WMODIFOPTION='EQ'.
WMODIFLOW=sydatlo1.
WMODIFHIGH=sydatlo.
APPENDWMODIF.

STARTOFSELECTION.
cleart2.
refresht2.

*SeleccindeProgramas
SELECTNAMECLASCNAMCDATUNAMUDATSECUAPPL
INTOTABLEt2
FROMTRDIR
WHERE(CNAMEQsyunameORUNAMEQsyuname)AND
UDATINWMODIFand
(namelike'Y%'or
namelike'Z%'or
namelike'SAPMY%'or
namelike'MY%')
ORDERBYNAME.

****Procesodelatablainternaconlosprogramasseleccionados
FORMATINTENSIFIEDOFF.
FORMATCOLORCOL_NORMAL.
ULINE.

loopatt2.

numero=sytabix.
CALLFUNCTION'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE=sytabix
TEXT=Numero.

28 / 51
Ejemplos Abap Jordi Calopa Bosch

CHECKt2+00(01)GE'A'ANDt2+00(01)LE'Z'.
LONGI=STRLEN(DIRPC).
LONGI=LONGI1.
MOVEDIRPC+LONGI(01)TOCAMPO.
IFCAMPOEQ'\'.
CONCATENATEDIRPCt2NAME'.txt'INTOWDIR.
ELSE.
CONCATENATEDIRPC'\'t2NAME'.txt'INTOWDIR.
ENDIF.

readreportt2nameintot1.

CALLFUNCTION'GUI_DOWNLOAD'
EXPORTING
filename=wdir
FILETYPE=tipo
TABLES
data_tab=t1
EXCEPTIONS
FILE_WRITE_ERROR=1
NO_BATCH=2
GUI_REFUSE_FILETRANSFER=3
INVALID_TYPE=4
NO_AUTHORITY=5
UNKNOWN_ERROR=6
HEADER_NOT_ALLOWED=7
SEPARATOR_NOT_ALLOWED=8
FILESIZE_NOT_ALLOWED=9
HEADER_TOO_LONG=10
DP_ERROR_CREATE=11
DP_ERROR_SEND=12
DP_ERROR_WRITE=13
UNKNOWN_DP_ERROR=14
ACCESS_DENIED=15
DP_OUT_OF_MEMORY=16
DISK_FULL=17
DP_TIMEOUT=18
FILE_NOT_FOUND=19
DATAPROVIDER_EXCEPTION=20
CONTROL_FLUSH_ERROR=21
OTHERS=22.

CASESYSUBRC.

WHEN'0'.
WRITE:/01SYVLINE,
'Volcadodelfichero'(002),
WDIRCOLORCOL_POSITIVE,
ATSYLINSZSYVLINE.

WHENOTHERS.
WRITE:/01SYVLINE,
'ERRORALVOLCAR...'(003)COLORCOL_NEGATIVE,
WDIRCOLORCOL_NEGATIVE,
ATSYLINSZSYVLINE.

ENDCASE.

29 / 51
Ejemplos Abap Jordi Calopa Bosch

ENDLOOP.

ULINE.

ENDOFSELECTION.

****Cabecerasdellistado****
topofpage.

WRITE:/01'BackupAutomticodeProgramasdelUser:',
SYUNAME.

***************************************************************
*Autor...........................JordiCalopaBosch(JCB)*
*Ultimaactualizacin............16.01.2001*
*Entornodedesarrollo...........SAP/R3(31H)bajoUnix*
*Lenguajedeprogramacin........ABAP/4*
**
*Esteejemplomuestracomorealizarunprogramaenelcualla*
*pantalladesalidaserefresqueautomticamentecadasegundo*
**
**************************************************************
PROGRAMZxxxxxxx
LINESIZE250
NOSTANDARDPAGEHEADING.

CONSTANTS:COMANDO(4)TYPECVALUE'XXXX'.

**"
*STARTOFSELECTION*"
**"
STARTOFSELECTION.

PERFORMPROCESO_PRINCIPAL.
SETUSERCOMMANDCOMANDO.

**"
*FORMPROCESO_PRINCIPAL*"
**"
FORMPROCESO_PRINCIPAL.

Skip10.
WRITE:/30SYULINE(23).
WRITE:50SYULINE(21).
WRITE:/30SYVLINE,'Host:',SYHOST,SPACE,SYVLINE.
WRITE:50SYVLINE,'Fecha:',SYDATUMINTENSIFIEDOFF,
SYVLINE.
WRITE:/30SYVLINE,'Entorno:',SYSYSID,SPACE,SYVLINE.
WRITE:50SYULINE(21).
WRITE:/30SYVLINE,'S.O.:',SYOPSYS,SYVLINE.
WRITE:50SYVLINE,'Hora:',SYUZEITINTENSIFIEDOFF,
'',SYVLINE.
WRITE:/30SYULINE(23).
WRITE:50SYULINE(21).

30 / 51
Ejemplos Abap Jordi Calopa Bosch

SKIP."

ENDFORM.
**"
*ATUSERCOMMAND*"
**"
ATUSERCOMMAND.

SYLSIND=0.

IFSYUCOMMEQCOMANDO.
PERFORMPROCESO_PRINCIPAL.
CALLFUNCTION'Y_DUMMY'
STARTINGNewTASK'IF'
PERFORMINGREFRESCARONENDOFTASK.
ENDIF.
**"
*FORMREFRESCAR*"
**"
FORMREFRESCARUSINGTASKNAME.
DATA:INT_SECONDSTYPEIVALUE1.

CALL'ALERTS'ID'ADMODE'FIELD50
ID'STORAGE_OPCODE'FIELD'SLEEP'
ID'TIME'FIELDINT_SECONDS.

SETUSERCOMMANDCOMANDO.
ENDFORM.

***************************************************************
*Autor...........................JordiCalopaBosch(JCB)*
*Ultimaactualizacin............16.01.2001*
*Entornodedesarrollo...........SAP/R3(31H)bajoUnix*
*Lenguajedeprogramacin........ABAP/4*
**
*EsteprogramapermiteVisualizar,Renombrar,Copiar,*
*Borrar,Bloquear,Desbloquear,Regenerar,Imprimir*
*VolcaraPCy/oEjecutar(enlocal)unreport*
*existenteenlatabladeprogramasTRDIR.*
**
**************************************************************
REPORTYxxxxxxx
linesize120
NOSTANDARDPAGEHEADING.

INCLUDE<LIST>.
INCLUDEYSU0000.

TABLES:TRDIR,DD02L,DD03L,USR03.

DATA:NOMPROGLIKESYREPID,
NOMPNEWLIKESYREPID,
NUMLINESTYPEI,
RESP(01)TYPEC,
NAMETAB(10)TYPEC,

31 / 51
Ejemplos Abap Jordi Calopa Bosch

FOUNFLD(01)TYPECVALUE'F',
FIELD_CLASIF(30)TYPEC,
RETCODELIKESYSUBRC.

DATA:BEGINOFT0OCCURS5000,
C(72)TYPEC,
ENDOFT0.

DATA:BEGINOFT1OCCURS1,
TABNAMELIKEDD03LTABNAME,
FIELDNAMELIKEDD03LFIELDNAME,
ENDOFT1.

DATA:BEGINOFT2OCCURS1,
r(72)typec,
ENDOFT2.

DATA:BEGINOFT3OCCURS50.
INCLUDESTRUCTURETEXTPOOL.
DATA:ENDOFT3.

**"
*STARTOFSELECTION*"
**"
STARTOFSELECTION."

SYTITLE='ProgramManager'.

PERFORMPEDIR_NOMBRE_PGM.
IFRETCODENE0.
EXIT.
ENDIF.
IFNOMPROGEQSYREPID.
EXIT.
ENDIF.

READREPORTNOMPROGINTOT0.
IFSYSUBRCNE0.
EXIT.
ENDIF.
DESCRIBETABLET0LINESNUMLINES.

PERFORMTRATAMIENTO_GRAL.
IFRETCODENE0.
EXIT.
ENDIF.

ENDOFSELECTION.

**"
*FORMPEDIR_NOMBRE_PGM*"
**"
FORMPEDIR_NOMBRE_PGM.

DATA:VALOR_INPLIKENOMPROG,
VALOR_OUTLIKENOMPROG,
VALOR_RES.

32 / 51
Ejemplos Abap Jordi Calopa Bosch

CLEAR:NOMPROG.

CALLFUNCTION'POPUP_TO_GET_VALUE'
EXPORTING
FIELDNAME='NAME'
TABNAME='TRDIR'
TITEL='IndiqueelNombredel'
VALUEIN=VALOR_INP
IMPORTING
ANSWER=VALOR_RES
VALUEOUT=VALOR_OUT
EXCEPTIONS
FIELDNAME_NOT_FOUND=1
OTHERS=2.

IFVALOR_OUTISINITIAL.
RETCODE=4.
ELSE.
SELECTSINGLE*FROMTRDIR
WHERENAMEEQVALOR_OUT.
RETCODE=SYSUBRC.
IFRETCODEEQ0.
NOMPROG=VALOR_OUT.
ENDIF.
ENDIF.

ENDFORM.

**"
*FORMTRATAMIENTO_GRAL*"
**"
FORMTRATAMIENTO_GRAL.

REFRESHT3.
CLEAR:T3.
READTEXTPOOLNOMPROGINTOT3LANGUAGE'S'.
READTABLET3WITHKEY'R'.

FORMATINTENSIFIEDOFF.
FORMATCOLORCOL_HEADING.
ULINE.

WRITE:/01SYVLINE,
120syvline.
WRITE:/01SYVLINE,
NOMPROGCOLORCOL_NORMAL,
T3ENTRY(70),
120syvline.
WRITE:/01SYVLINE,
120SYVLINE,
/01SYVLINE,
'Grupoautorizaciones..',TRDIRSECUCOLORCOL_NORMAL,
40'Autor..',TRDIRCNAMCOLORCOL_NORMAL,
80'Fechageneracin',TRDIRCDATCOLORCOL_NORMAL,
120SYVLINE,
/01SYVLINE,
'Versin',TRDIRVERNCOLORCOL_NORMAL,
40'Modificador..',TRDIRUNAMCOLORCOL_NORMAL

33 / 51
Ejemplos Abap Jordi Calopa Bosch

INTENSIFIEDOFF,
80'Fechamodificacin.',TRDIRUDATCOLORCOL_NORMAL,
120SYVLINE,
/01SYVLINE,
'Proteccinfuente.',TRDIRSQLXCOLORCOL_NORMAL,
40'Proteccinedicin',TRDIREDTXCOLORCOL_NORMAL,
80'Mayusculas/minusculas.',TRDIRVARCLCOLORCOL_NORMAL,
120SYVLINE,
/01SYVLINE,
'Generadoautomtico',TRDIROCCURSCOLORCOL_NORMAL,
40'Tipodeprograma',TRDIRSUBCCOLORCOL_NORMAL,
80'BasedeDatosLgica..',TRDIRDBNACOLORCOL_NORMAL,
TRDIRDBAPLCOLORCOL_NORMAL,
120SYVLINE,
/01SYVLINE,
'Nivel..',TRDIRLEVLCOLORCOL_NORMAL,
40'Status.',TRDIRRSTATCOLORCOL_NORMAL,
80'Mandante..',TRDIRRMANDCOLORCOL_NORMAL,
120SYVLINE,
/01SYVLINE,
'Idiomamaestro..',TRDIRRLOADCOLORCOL_NORMAL,
40'Comafija.',TRDIRFIXPTCOLORCOL_NORMAL,
80'Soloconvariante..',TRDIRSSETCOLORCOL_NORMAL,
120SYVLINE.
WRITE:/01SYVLINE,
'CantidadLneas',NUMLINESCOLORCOL_NORMAL,
120syvline.
WRITE:/01SYVLINE,
120syvline.

WRITE:/01SYVLINE,
10ICON_DISPLAYASICON,
20ICON_RENAMEASICON,
30ICON_COPY_OBJECTASICON,
40ICON_DELETEASICON,
50ICON_LOCKEDASICON,
60ICON_UNLOCKEDASICON,
70ICON_GENERATEASICON,
80ICON_PRINTASICON,
90ICON_MOVEASICON,
100ICON_EXECUTE_OBJECTASICON,
120SYVLINE.

WRITE:/01SYVLINE,
120SYVLINE.
ULINE.

ENDFORM.

**"
*ATLINESELECTION*"
**"
ATLINESELECTION.

SYLSIND=0.

IFSYCUROWEQ13.
IFSYCUCOLEQ11ORSYCUCOLEQ12.

34 / 51
Ejemplos Abap Jordi Calopa Bosch

PERFORMDISPLAY_PGM.
ELSEIFSYCUCOLEQ21ORSYCUCOLEQ22.
PERFORMRENAME_PGM.
PERFORMTRATAMIENTO_GRAL.
ELSEIFSYCUCOLEQ31ORSYCUCOLEQ32.
PERFORMCOPY_PGM.
PERFORMTRATAMIENTO_GRAL.
ELSEIFSYCUCOLEQ41ORSYCUCOLEQ42.
PERFORMDELETE_PGM.
IFRETCODE=0.
LEAVETOSCREEN0.
ENDIF.
ELSEIFSYCUCOLEQ51ORSYCUCOLEQ52.
PERFORMLOCKED_PGM.
PERFORMTRATAMIENTO_GRAL.
ELSEIFSYCUCOLEQ61ORSYCUCOLEQ62.
PERFORMUNLOCKED_PGM.
PERFORMTRATAMIENTO_GRAL.
ELSEIFSYCUCOLEQ71ORSYCUCOLEQ72.
PERFORMGENERATE_PGM.
ELSEIFSYCUCOLEQ81ORSYCUCOLEQ82.
PERFORMPRINT_PGM.
ELSEIFSYCUCOLEQ91ORSYCUCOLEQ92.
PERFORMVOLCADO_PGM.
ELSEIFSYCUCOLEQ101ORSYCUCOLEQ102.
SUBMIT(NOMPROG)ANDRETURNVIASELECTIONSCREEN.
ENDIF.

ENDIF.

**"
*FORMDISPLAY_PGM*"
**"
FORMDISPLAY_PGM.

CALLFUNCTION'RS_SOURCE_STRUCTURE'
EXPORTING
Source=NOMPROG
EXCEPTIONS
OTHERS=1.

ENDFORM.

**"
*FORMRENAME_PGM*"
**"
FORMRENAME_PGM.

CALLFUNCTION'RS_RENAME_PROGRAM'
EXPORTING
SOURCE_PROGRAM=NOMPROG
IMPORTING
PROGRAM=NOMPNEW
EXCEPTIONS
ENQUEUE_LOCK=1
OBJECT_NOT_FOUND=2
PERMISSION_FAILURE=3
REJECT_COPY=4

35 / 51
Ejemplos Abap Jordi Calopa Bosch

REJECT_DELETION=5
OTHERS=6.

IFSYSUBRCEQ0.
NOMPROG=NOMPNEW.
ENDIF.

ENDFORM.

**"
*FORMCOPY_PGM*"
**"
FORMCOPY_PGM.

CALLFUNCTION'RS_COPY_PROGRAM'
EXPORTING
SOURCE_PROGRAM=NOMPROG
IMPORTING
PROGRAM=NOMPNEW"
EXCEPTIONS
ENQUEUE_LOCK=1
OBJECT_NOT_FOUND=2
PERMISSION_FAILURE=3
REJECT_COPY=4
OTHERS=5.

IFSYSUBRCEQ0.
NOMPROG=NOMPNEW.
ENDIF.

ENDFORM.

**"
*FORMDELETE_PGM*"
**"
FORMDELETE_PGM.

CALLFUNCTION'RS_DELETE_PROGRAM'
EXPORTING
PROGRAM=NOMPROG
EXCEPTIONS
ENQUEUE_LOCK=1
OBJECT_NOT_FOUND=2
PERMISSION_FAILURE=3
REJECT_DELETION=4
OTHERS=5.

RETCODE=SYSUBRC.

ENDFORM.

**"
*FORMLOCKED_PGM*"
**"
FORMLOCKED_PGM.

SELECTSINGLE*FROMTRDIR
WHERENAMEEQNOMPROG.

36 / 51
Ejemplos Abap Jordi Calopa Bosch

IFSYSUBRCEQ0.
TRDIREDTX='X'.
UPDATETRDIR.
COMMITWORK.
ENDIF.

ENDFORM.

**"
*FORMUNLOCKED_PGM*"
**"
FORMUNLOCKED_PGM.

SELECTSINGLE*FROMTRDIR
WHERENAMEEQNOMPROG.

IFSYSUBRCEQ0.
TRDIREDTX=SPACE.
UPDATETRDIR.
COMMITWORK.
ENDIF.

ENDFORM.

*"
*FORMGENERATE_PGM*"
**"
FORMGENERATE_PGM.

GENERATEREPORTNOMPROG.

ENDFORM.

**"
*FORMPRINT_PGM*"
**"
FORMPRINT_PGM.

CALLFUNCTION'RS_PROGRAM_PRINT'
EXPORTING
DIALOG='X'
PROGRAMM=NOMPROG
EXCEPTIONS
CANCELED=1
OPEN_FORM_ERROR=2
PROGRAM_NOT_FOUND=3
NO_AUTHORITY=4
OTHERS=5.

ENDFORM.

**"
*FORMVOLCADO_PGM*"
**"
FORMVOLCADO_PGM.

DATA:PATHNAME(128)TYPEC.

37 / 51
Ejemplos Abap Jordi Calopa Bosch

CONCATENATE'c:\datos\'NOMPROGINTOPATHNAME.

CALLFUNCTION'WS_DOWNLOAD'
EXPORTING
filename=PATHNAME
FILETYPE='ASC'
TABLES
DATA_TAB=T0
EXCEPTIONS
FILE_OPEN_ERROR=1
FILE_WRITE_ERROR=2
INVALID_FILESIZE=3
INVALID_TABLE_WIDTH=4
INVALID_TYPE=5
NO_BATCH=6
UNKNOWN_ERROR=7
OTHERS=8.

IFSYSUBRCEQ0.
MESSAGEID38TYPE'I'NUMBER016
WITH'ProgramavolcadocorrectamenteaPC'.
ENDIF.

ENDFORM.

**"
*FORMCABECERA_REPORT*"
**"
FORMCABECERA_REPORT.
DATA:NOMBRE(40).
SELECTSINGLE*FROMUSR03WHEREBNAMEEQSYUNAME.
IFSYSUBRCEQ0.
CONCATENATEUSR03NAME1USR03NAME2'('SYUNAME')'
INTONOMBRESEPARATEDBY''.
ELSE.
NOMBRE=SYUNAME.
ENDIF.
REFRESHT2.
PERFORMR_BLANCO.
T2R+00='*Autor:'.
T2R+14=NOMBRE.APPENDT2.
T2R+00='*Fecha:'.
T2R+14=SYDATUM.APPENDT2.
T2R+00='*Hora:'.
T2R+14=SYUZEIT.APPENDT2.
T2R+00='*Host:'.
T2R+14=SYHOST.APPENDT2.
T2R+00='*Sistema:'.
T2R+14=SYOPSYS.APPENDT2.
performr_blanco.
t2r+00='REPORT'.
t2r+08=nomprog.appendt2.
T2R='linesize94'.APPENDT2.
T2R='nostandardpageheading.'.APPENDT2.
T2R=''.APPENDT2.
ENDFORM.

38 / 51
Ejemplos Abap Jordi Calopa Bosch

**"
*FORMR_BLANCO*"
**"
formr_blanco.
T2R='**'.
APPENDT2.
ENDFORM.

**"
*FORMINSERTAR_PGM*"
**"
FORMINSERTAR_PGM.

CALLFUNCTION'RKD_INSERT_REPORT'
EXPORTING
COMMIT='X'
ENQUEUE_FLAG='X'
REPORT_NAME=NOMPROG
REPORT_NAMEH=NOMPROG
REPORT_NAMEL=NOMPROG
TADIR_DEVCLASS='$TMP'
TEXT='Nuevoprograma'
TRDIR_APPL='S'
TRDIR_CLAS='$TMP'
TRDIR_DBAPL='S'
TRDIR_DBNA='D$'
TRDIR_FIXPT='X'
TRDIR_RSTAT='T'
TRDIR_SQLX='R'
TRDIR_SUBC='1'
TABLES
CODE_TAB=T2
EXCEPTIONS
NO_FREE_NUMBER=1
SYNTAX_CHECK=2
TRDIR_LOCKED=3
OTHERS=4.

IFSYSUBRCEQ0.
SELECTSINGLE*FROMTRDIR
WHERENAMEEQNOMPROG.
IFSYSUBRCEQ0.
TRDIRRLOAD='S'.
TRDIREDTX='X'.
TRDIRSECU='YSGNI'.
UPDATETRDIR.
COMMITWORK.
ENDIF.
ENDIF.

ENDFORM.

*********************************************************************
*Autor...........................JordiCalopaBosch(JCB)*
*Ultimaactualizacin............16.02.2001*

39 / 51
Ejemplos Abap Jordi Calopa Bosch

*Entornodedesarrollo...........SAP/R3(31H)bajoUnix*
*Lenguajedeprogramacin........ABAP/4*
**
*Descripcin:EstautilidadsirveparasubmitirprogramasAbap*
*residentesenlaworkstation(PC).*
**
********************************************************************

REPORTYxxxxxxx.

INCLUDEYSU0000.

****DeclaracindeVariablesGlobales****
DATA:RESPUESTA(01)TYPEC,
RETCODELIKESYSUBRC,
TXT120(120)TYPEC.

****DeclaracindeConstantesGlobales****
CONSTANTS:MARCA(01)TYPECVALUE'X',
SKELETON(8)TYPECVALUE'YZZZZZZZ'.

****Definicindetablasdinmicasdememoriainterna****
DATA:BEGINOFTBLPGMOCCURS5000,
C(72),
ENDOFTBLPGM.

****DefinicindeCriteriosdeSeleccin****
SELECTIONSCREEN:BEGINOFBLOCK1WITHFRAMETITLETEXT001.
SELECTIONSCREEN:SKIP.
PARAMETERS:PROGRAMALIKESYREPID.
SELECTIONSCREEN:SKIP.
SELECTIONSCREEN:BEGINOFBLOCK2WITHFRAME.
PARAMETERS:VISUALRADIOBUTTONGROUPG1,
EDITARRADIOBUTTONGROUPG1,
LANZARRADIOBUTTONGROUPG1.
SELECTIONSCREEN:ENDOFBLOCK2.
SELECTIONSCREEN:BEGINOFBLOCK3WITHFRAME.
SELECTIONSCREEN:SKIP.
PARAMETERS:RESTOREASCHECKBOX.
SELECTIONSCREEN:SKIP.
PARAMETERS:RESTPAT(128)TYPECDEFAULT'C:\DATOS\'.
SELECTIONSCREEN:ENDOFBLOCK3.
SELECTIONSCREEN:ENDOFBLOCK1.

**"
*ATSELECTIONSCREEN*"
**"
ATSELECTIONSCREEN.

IFPROGRAMAISINITIAL.
PROGRAMA=SKELETON.
ENDIF.

IFLANZAREQMARCA.
PROGRAMA=SKELETON.
ENDIF.

**"

40 / 51
Ejemplos Abap Jordi Calopa Bosch

*STARTOFSELECTION*"
**"
STARTOFSELECTION.

****ELSIGUIENTEIFNODEBESERELIMINADOJAMAS***
IFPROGRAMAEQ'SAPMSYST'.
MESSAGEID38TYPE'I'NUMBER16
WITH'ElprogramaInformadoNOescorrecto'.
STOP.
ENDIF.
****

IFEDITAREQMARCA.
PERFORMRUTINA_EDITAR.
ELSEIFLANZAREQMARCA.
PERFORMRUTINA_LANZAR.
ELSE.
PERFORMRUTINA_VISUALIZAR.
ENDIF.

ENDOFSELECTION.

**"
*FORMRUTINA_VISUALIZAR*"
**"
FORMRUTINA_VISUALIZAR.

IFRESTORE=MARCA.
PERFORMRESTAURAR_DESDE_PC.
ELSE.
READREPORTPROGRAMAINTOTBLPGM.
RETCODE=SYSUBRC.
ENDIF.

IFRETCODEEQ0.
EDITORCALLFORTBLPGMDISPLAYMODE.
ENDIF.

ENDFORM.

**"
*FORMRUTINA_EDITAR*"
**"
FORMRUTINA_EDITAR.

PERFORMRUTINA_AVISO1.

IFRESPUESTAEQ'1'.

IFRESTOREEQMARCA.
PERFORMRESTAURAR_DESDE_PC.
ELSE.
READREPORTPROGRAMAINTOTBLPGM.
RETCODE=SYSUBRC.
ENDIF.

IFRETCODEEQ0.
EDITORCALLFORTBLPGM.

41 / 51
Ejemplos Abap Jordi Calopa Bosch

ENDIF.

PERFORMCOMPROBAR_SINTAXIS.

IFRETCODEEQ0.
INSERTREPORTPROGRAMAFROMTBLPGM.
ELSE.
MESSAGEID38TYPE'I'NUMBER016
WITH'ELPROGRAMATIENEERRORESDESINTAXIS'.
INSERTREPORTPROGRAMAFROMTBLPGM.
ENDIF.

ENDIF.

ENDFORM.

**"
*FORMRUTINA_LANZAR*"
**"
FORMRUTINA_LANZAR.

IFRESTOREEQMARCA.
PERFORMRESTAURAR_DESDE_PC.
INSERTREPORTPROGRAMAFROMTBLPGM.
SUBMIT(PROGRAMA)ANDRETURNVIASELECTIONSCREEN.
ELSE.
SUBMIT(PROGRAMA)ANDRETURNVIASELECTIONSCREEN.
ENDIF.

ENDFORM.

**"
*FORMRUTINA_AVISO1*"
**"
FORMRUTINA_AVISO1.

CALLFUNCTION'POPUP_FOR_INTERACTION'
EXPORTING"
HEADLINE='***ATENCION***'
TEXT1='EsteesunEditormuyespecialysuuso'
TEXT2='conllevaunelevadoriesgo.Sinoest'
TEXT3='Ud.muysegurodeloquedeseamodificar'
TEXT4='esmejorpulseelbotndeCANCELAR.'
TEXT5=''
TEXT6=''
TICON='W'
BUTTON_1='Continuar'
BUTTON_2='CANCELAR'
BUTTON_3=''
IMPORTING
BUTTON_PRESSED=RESPUESTA
EXCEPTIONS
OTHERS=1.
ENDFORM.

**"
*FORMRESTAURAR_DESDE_PC*"

42 / 51
Ejemplos Abap Jordi Calopa Bosch

**"
FORMRESTAURAR_DESDE_PC.

CALLFUNCTION'WS_UPLOAD'
EXPORTING
filename=RESTPAT
FILETYPE='ASC'
TABLES
DATA_TAB=TBLPGM
EXCEPTIONS
CONVERSION_ERROR=1
FILE_OPEN_ERROR=2
FILE_READ_ERROR=3
INVALID_TABLE_WIDTH=4
INVALID_TYPE=5
NO_BATCH=6
UNKNOWN_ERROR=7
OTHERS=8.

RETCODE=SYSUBRC.

ENDFORM.

**"
*FORMCOMPROBAR_SINTAXIS*"
**"
FORMCOMPROBAR_SINTAXIS.

CLEAR:RETCODE.
.
.
.
ENDFORM.

*********************************************************************
*Autor...........................JordiCalopaBosch(JCB)*
*Ultimaactualizacin............16.02.2001*
*Entornodedesarrollo...........SAP/R3(31I)bajoUnix*
*Lenguajedeprogramacin........ABAP/4*
**
*Descripcin:GeneradosdeskeletonsPlantillasdeprogramas*
**
********************************************************************
programzxxxxxxx
LINESIZE120
NOSTANDARDPAGEHEADING.

includezxxxxxxx.

****DeclaracindetablasyVistasdebasedeDatos****
TABLES:DD02L,DD03L,USR03,TRDIR.

****DeclaracindevariablesGlobalesdelPrograma****
DATA:RESP(01)TYPEC,
NAMETAB(10)TYPEC,

43 / 51
Ejemplos Abap Jordi Calopa Bosch

FOUNFLD(01)TYPECVALUE'F',
FIELD_CLASIF(30)TYPEC,
SKTLIKESYCPROGVALUE'Z'.

DATA:BEGINOFT1OCCURS1,
TABNAMELIKEDD03LTABNAME,
FIELDNAMELIKEDD03LFIELDNAME,
ENDOFT1.

DATA:BEGINOFT2OCCURS1,
R(255)TYPEC,
ENDOFT2.

**
*STARTOFSELECTION*
**
STARTOFSELECTION.

skt+01(08)=syuname.
skt+09(01)='_'.
PERFORMGENERADOR_PROGRAMAS.

ENDOFSELECTION.

IFRETCODEEQ0.
FORMATINTENSIFIEDON.
FORMATCOLORCOL_HEADING.
ULINE.
WRITE:/01SYVLINE,
ATSYLINSZSYVLINE.
WRITE:/01SYVLINE,
'Generadoelskelectoncorrectamente.Nombre',
SKTCOLORCOL_NORMAL,
ATSYLINSZSYVLINE.
WRITE:/01SYVLINE,
ATSYLINSZSYVLINE.

ULINE.
ELSE.
FORMATINTENSIFIEDON.
FORMATCOLORCOL_NEGATIVE.
ULINE.
WRITE:/01SYVLINE,
'NOSEHAGENERADONINGUNSKELETON',
ATSYLINSZSYVLINE.
ULINE.
ENDIF.

**
*FORMGENERADOR_PROGRAMAS*
**
FORMGENERADOR_PROGRAMAS.

DATA:BEGINOFTMOCCURS9,
C1(01),
C2(80),
ENDOFTM.

44 / 51
Ejemplos Abap Jordi Calopa Bosch

TMC1=''.
TMC2='SkeletondeunProgramaBatch'.APPENDTM.
TMC2='SkeletondeunaListaInteractiva'.APPENDTM.
TMC2='SkeletonparaListarunaTabladeBD'.APPENDTM.
TMC2='SkeletonProgramaNuevo'.APPENDTM.

CALLFUNCTION'K_POPUP_TO_DECIDE'
EXPORTING
PAR_TEXT1=''
PAR_TITLE='GENERADORDESKELETONS'
IMPORTING
PAR_REPLY=RESP
TABLES
TAB_LINES=TM
EXCEPTIONS
NOT_ENOUGH_LINES=1
TOO_MANY_LINES=2.

RETCODE=SYSUBRC.

IFRESP='A'.
RETCODE=4.
EXIT.
ENDIF.

IFRETCODEEQ0.

IFRESPEQ'1'.
skt+10(05)='BATCH'.
PERFORMRPG_SKELETON_BATCH.

ELSEIFRESPEQ'2'.
skt+10(05)='LISTA'.
PERFORMRPG_SKELETON_LISTA.

ELSEIFRESPEQ'3'.
skt+10(05)='TABLA'.
PERFORMRPG_TABLAS.

ELSEIFRESPEQ'4'.
skt+10(05)='NUEVO'.
PERFORMRPG_NEWPGM.

ELSE.
RETCODE=4.
ENDIF.

ENDIF.

ENDFORM."GENERADOR_PROGRAMAS

**
*FORMRPG_SKELETON_BATCH*
**
FORMRPG_SKELETON_BATCH.

PERFORMCABECERA_REPORT.
PERFORMR_BLANCO.

45 / 51
Ejemplos Abap Jordi Calopa Bosch

T2R='*DeclaracindeTablasyVistasdeBD'.APPENDT2.
PERFORMR_BLANCO.
T2R='tables:t001.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoANTESDELAPANTALLADESELECCION'.APPENDT2.
PERFORMR_BLANCO.
T2R='initialization.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoDESPUESDELAPANTALLADESELECCION'.APPENDT2.
PERFORMR_BLANCO.
T2R='atselectionscreen.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALPRINCIPIODELPROGRAMA'.APPENDT2.
PERFORMR_BLANCO.
T2R='startofselection.'.APPENDT2.
T2R=''.APPENDT2.
T2R='callfunction''Y_UPD_T9S00'''.APPENDT2.
T2R='exceptions'.APPENDT2.
T2R='others=1.'.APPENDT2.
T2R=''.APPENDT2.
T2R='write''SKELETONBATCH''.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALFINALDELPROGRAMA'.APPENDT2.
PERFORMR_BLANCO.
T2R='endofselection.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALPRINCIPIODEPAGINA'.APPENDT2.
PERFORMR_BLANCO.
T2R='topofpage.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALFINALDEPAGINA'.APPENDT2.
PERFORMR_BLANCO.
T2R='endofpage.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.

PERFORMINSERTAR_PGM.

ENDFORM."RPG_SKELETON_BATCH

**
*FORMRPG_SKELETON_LISTA*
**
FORMRPG_SKELETON_LISTA.

46 / 51
Ejemplos Abap Jordi Calopa Bosch

PERFORMCABECERA_REPORT.
PERFORMR_BLANCO.
T2R='*DeclaracindeTablasyVistasdeBD'.APPENDT2.
PERFORMR_BLANCO.
T2R='tables:t001.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoANTESDELAPANTALLADESELECCION'.APPENDT2.
PERFORMR_BLANCO.
T2R='initialization.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoDESPUESDELAPANTALLADESELECCION'.APPENDT2.
PERFORMR_BLANCO.
T2R='atselectionscreen.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALPRINCIPIODELPROGRAMA'.APPENDT2.
PERFORMR_BLANCO.
T2R='startofselection.'.APPENDT2.
T2R=''.APPENDT2.
T2R='callfunction''Y_UPD_T9S00'''.APPENDT2.
T2R='exceptions'.APPENDT2.
T2R='others=1.'.APPENDT2.
T2R=''.APPENDT2.
T2R='write''Hagadobleclicksobreestalnea''.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALFINALDELPROGRAMA'.APPENDT2.
PERFORMR_BLANCO.
T2R='endofselection.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALPRINCIPIODELAPRIMERAPAGINA'.APPENDT2.
PERFORMR_BLANCO.
T2R='topofpage.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALPRINCIPIODELASPAGINASSIGUIENTES'.APPENDT2.
PERFORMR_BLANCO.
T2R='topofpageduringlineselection.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALFINALDEPAGINA'.APPENDT2.
PERFORMR_BLANCO.
T2R='endofpage.'.APPENDT2.
T2R=''.APPENDT2.
T2R=''.APPENDT2.
PERFORMR_BLANCO.
T2R='*EventoALSELECCIONARUNALINEA'.APPENDT2.
PERFORMR_BLANCO.

47 / 51
Ejemplos Abap Jordi Calopa Bosch

T2R='atlineselection.'.APPENDT2.
T2R='ifsycuroweq1.'.APPENDT2.
T2R='write''EstoesunaLISTAINTERACTIVA''.'.APPENDT2.
T2R='write/''Hagadobleclicksobreestalnea''.'.APPENDT2.
T2R='sylsind=0.'.APPENDT2.
T2R='else.'.APPENDT2.
T2R='write''Hagadobleclicksobreestalnea''.'.APPENDT2.
T2R='endif.'.APPENDT2.
T2R=''.APPENDT2.

PERFORMINSERTAR_PGM.

ENDFORM."RPG_SKELETON_LISTA

**
*FORMRPG_TABLAS*
**
FORMRPG_TABLAS.

IFNAMETABISINITIAL.

CALLFUNCTION'POPUP_TO_GET_VALUE'
EXPORTING
FIELDNAME='TABNAME'
TABNAME='DD02L'
TITEL='Nombredela'
VALUEIN=NAMETAB
IMPORTING
VALUEOUT=NAMETAB
EXCEPTIONS
FIELDNAME_NOT_FOUND=1
OTHERS=2.

ENDIF.

TRANSLATENAMETABTOUPPERCASE.

SELECTSINGLE*FROMDD02LWHERETABNAMEEQNAMETABAND
AS4LOCALEQ'A'AND
AS4VERSEQ'0000'.
IFSYSUBRCNE0.
FORMATINTENSIFIEDOFF.
WRITE:/01'TablaNOencontrada',NAMETABCOLOR6.
RETCODE=4.
STOP.
ENDIF.

REFRESHT1.
SELECT*FROMDD03LWHERETABNAMEEQDD02LTABNAMEAND
AS4LOCALEQDD02LAS4LOCAL.
IFDD03LFIELDNAMENE'.INCLUDE'.
MOVECORRESPONDINGDD03LTOT1.
COLLECTT1.
MOVE'T'TOFOUNFLD.
ENDIF.
ENDSELECT.

MOVET1FIELDNAMETOFIELD_CLASIF.

48 / 51
Ejemplos Abap Jordi Calopa Bosch

IFFOUNFLDEQ'F'.
FORMATINTENSIFIEDOFF.
WRITE:/01'CamposNOencontrados',NAMETABCOLOR6.
RETCODE=4.
STOP.
ENDIF.

PERFORMCABECERA_REPORT.

t2r+00='TABLES:'.
t2r+10=nametab.
T2R+25='.'.APPENDT2.
performr_blanco.
T2R='data:lincab1(40)TYPEC.'.APPENDT2.
performr_blanco.
T2R='DATA:BEGINOFTABLA01OCCURS1.'.APPENDT2.
t2r='includestructure'.
t2r+25=nametab.
T2R+50='.'.APPENDT2.
T2R='DATA:ENDOFTABLA01.'.APPENDT2.
performr_blanco.
T2R='startofselection.'.APPENDT2.
performr_blanco.
T2R='move''Listadotabla''tolincab1.'.
T2R+20=NAMETAB(10).
T2R+33='''tolincab1.'.APPENDT2.
performr_blanco.
t2r='SELECT*FROM'.
t2r+15=nametab.
T2R+30='.'.APPENDT2.
t2r='MOVECORRESPONDING'.
t2r+25=nametab.
T2R+40='TOTABLA01.'.APPENDT2.
T2R='APPENDTABLA01.'.APPENDT2.
T2R='ENDSELECT.'.APPENDT2.
performr_blanco.
T2R='ENDOFSELECTION.'.APPENDT2.
performr_blanco.
T2R='*formatintensifiedoff.'.APPENDT2.
T2R='*formatcolorcol_normal.'.APPENDT2.
performr_blanco.
T2R='LOOPATTABLA01.'.APPENDT2.
T2R='write:/01'.APPENDT2.
LOOPATT1.
t2r='TABLA01'.
movet1fieldnametot2r+16.
MOVE','TOT2R+47.APPENDT2.
ENDLOOP.
T2R='space.'.APPENDT2.
T2R='ENDLOOP.'.APPENDT2.
T2R='uline.'.APPENDT2.
performr_blanco.
T2R='TOPOFPAGE.'.APPENDT2.
T2R='WRITE:/03LINCAB1.'.APPENDT2.
T2R='ULINE.'.APPENDT2.

PERFORMINSERTAR_PGM.

49 / 51
Ejemplos Abap Jordi Calopa Bosch

ENDFORM."RPG_TABLAS

**
*FORMRPG_NEWPGM*
**
FORMRPG_NEWPGM.

PERFORMCABECERA_REPORT.
PERFORMINSERTAR_PGM.

ENDFORM."RPG_NEWPGM

*&*
*&FormCABECERA_REPORT
*&*
*text
**
FORMCABECERA_REPORT.

DATA:NOMBRE(40).

SELECTSINGLE*FROMUSR03
WHEREBNAMEEQSYUNAME.

IFSYSUBRCEQ0.
CONCATENATEUSR03NAME1USR03NAME2'('SYUNAME')'
INTONOMBRESEPARATEDBY''.
ELSE.
NOMBRE=SYUNAME.
ENDIF.

REFRESHT2.
T2R+00='*******************************************************'.
APPENDT2.
T2R+00='*Autor:'.
T2R+14=NOMBRE.APPENDT2.
T2R+00='*Fecha:'.
T2R+14=sydatlo.APPENDT2.
T2R+00='*Hora:'.
T2R+14=sytimlo.APPENDT2.
T2R+00='*Host:'.
T2R+14=SYHOST.APPENDT2.
T2R+00='*Sistema:'.
T2R+14=SYOPSYS.APPENDT2.
T2R+00='*******************************************************'.
APPENDT2.
T2R+00='Program'.
T2R+09=SKT.APPENDT2.
T2R='linesize255'.APPENDT2.
T2R='nostandardpageheading.'.APPENDT2.
T2R=''.APPENDT2.

ENDFORM."CABECERA_REPORT

*&*
*&Formr_blanco

50 / 51
Ejemplos Abap Jordi Calopa Bosch

*&*
*text
**
formr_blanco.

T2R='*'.
APPENDT2.

ENDFORM."r_blanco

*&*
*&FormINSERTAR_PGM
*&*
*text
**
FORMINSERTAR_PGM.

insertreportsktfromt2.

ENDFORM."INSERTAR_PGM

**********************************************************************
****FINDEPROGRAMA****
**********************************************************************

51 / 51

S-ar putea să vă placă și