Programación ABAPÍndice: Programación ABAP Introducción: Estas páginas pretender servir de orientación y ayuda para aquellos programadores que no estén habituados al módulo de Recursos Humanos, ya que la programación de dicho módulo tiene algunas diferencias con el resto de módulos de SAP. También se incluyen un conjunto de funciones que posiblemente sean en su mayoría conocidas pero que se ha considerado que pueden resultar de utilidad. Otro de los puntos importantes para los programadores HR es la confidencialidad de datos, esto es muy importante para todos los módulos de SAP y en especial para HR ya que los datos a los que se tiene acceso son muy delicados y es muy importante para todos nuestros clientes que seamos muy serios con este tema. Infotipos: Un infotipo es: Una agrupación de datos homogénea en la que se recogen los datos del empleado, ya sea su posición en la empresa, sus datos fiscales, sus datos personales, etc. ♦ Las transacciones para tratar los infotipos son : - PA20 Visualizar. - PA30 Modificar. - PA40 Medidas de personal. ♦ La tabla Pannnn (Registro maestro de personal Infotipo nnnn) esta compuesta por: - Campo MANDT. - Estructura PAKEY (Clave para datos maestros de personal) en la que se guardan los datos fijos de todos los infotipos como: número de personal y fechas de validez. - Estructura PSHD1 (Datos maestros de personal Campos de gestión) en esta se guardan datos de gestión como: fecha de la última modificación y usuario que la realizo. - Estructura PSnnnn (Registro maestro de personal Infotipo nnnn) Esta es propia de cada uno de los infotipos. - Estructura CI_Pnnnn esta no estará creada en un inicio, nosotros la podemos crear para ampliar el infotipo estándar y que nuestra ampliación sea siempre respetada por SAP. Para leer los datos de estas tablas existen macros y funciones, algunas de las cuales están incluidas en este documento, pero ello no que implica que no se puedan hacer selects normales, generalmente suelen de manera que puede actualizarlos. ♦ El Modulpool del Infotipo nnnn es MPnnnn00: . Los infotipos se recuperan sucesivamente. PPCI(Infotipos PD). se representan mediante medidas de personal individuales en la Gestión de personal. Cada intotipo tiene también su estructura Pnnnn que es idéntica a la tabla Pannnn pero que no contiene el campo mandante. Esto garantiza que todos los datos básicos se registren en el sistema. Por ejemplo. él ya nos crea buena parte de lo necesario para su funcionamiento como pueden ser las dynpros. Cada infogrupo contiene los infotipos que se deben actualizar para registrar la medida. ♦ Infogrupos: Agrupa los infotipos más importantes con el fin de guiar al usuario en el tratamiento de los datos del empleado y se ejecuta mediante de una medida de personal. ♦ Parar crear o ampliar infotipos: Se usan las transacciones PM01(Infotipos de PA).Programación ABAP ser para traer campos concretos no todo el registro y suelen ser select sigel. algunos modulos standars… . ya que no es necesario acceder a cada uno de los infotipos de la medida de personal individualmente. el sistema puede agrupar los infotipos más importantes en infogrupos a los que se accederá mediante las medidas de personal. Esta función facilita también la introducción de los datos de forma consistente. tales como la contratación de un empleado. el cambio organizativo o la baja de un empleado. El infotipo 0000 guarda la medidas de personal de cada empleado. Cuando creamos un infotipo con una de estas transacciones. Los procedimientos de personal. Cada medida de personal esta relacionada con un infogrupo. en la medida de personal Contratación el sistema presentará automáticamente todos los infotipos en los que se deben efectuar entradas para contratar a un empleado para que el usuario pueda actualizarlos. ♦ Medidas de personal: Para no tener que acceder a cada infotipo individualmente y registrar los datos pertinentes.Generalmente como mínimo tiene dos dynpros la 2000 es la normal y la 3000 es la del resumen. Si se quiere que no se rellene el infotype ha de ser node n. .Programación ABAP Get pernr: Lectura de la tabla pernr que pertenece a la base de datos lógica PNP. Esta instrucción rellena todas las tablas definidas como infotypes. Pone en cabecera el último registro válido dentro del período de selección de datos leídos de la base de datos. Reacción: en caso de que el sistema no encuentre los datos correspondientes: X = interrupción del report acompañada de un mensaje de error. Pnnnn: Tabla interna en la que se han guardado los datos leídos de la base de datos (generalmente con el evento Get Pernr). . Pnnnn: Tabla interna. Subtipo: El subtipo que nos interesa seleccionar. En el caso de no existir subtipos o que no nos interesen en el subtipo pondremos Space. ♦ RP-READ-ALL-TIME-ITY begda endda. P0001-btrtl: subdivisión de personal.p2999) todos los registros que tengan como mínimo 1 día dentro de las fechas de selección.Programación ABAP Macros: ♦ HR-READ-INFOTYPE pernr nnnn pnnnn begda endda. Pernr: Número de personal a seleccionar. Se pone en cabecera el primer registro válido dentro del período de selección de datos leídos de la base de datos. pero las tablas internas han de ser definidas de tipo pnnnn y no pannnn). ♦ RP_PROVIDE_FROM_ FRST Pnnnn Space Pn-begda Pn-endda. Endda: fecha fin de la selección. Begda: fecha inicio de la selección. nnnn: Número del infotipo. Pn-endda: Fecha fin de nuestra selección. Selecciona los registros del infotipo que tengan como mínimo un día dentro de la fechas de selección y los pone en la tabla interna(no necesita la BD lógica. ♦ RP_PROVIDE_FROM_LAST Pnnnn Subtipo Pn-begda Pn-endda. ♦ RP-READ-T001P p0001-werks p0001-btrtl reacción. …. Lee e inserta en la tablas definidas como infotipos de tiempos(p2001. SPACE = para SY-SUBRC se indica el valor 4. P0001-werks: división de personal. Lee el registro que correspondiente de la tabla de Sociedades. Pn-begda: Fecha inicio de nuestra selección. Programación ABAP Funciones SAP: ♦ ABAP_DOCU_DOWNLOAD: Download ABAP documentation in HTML format.. ♦ APPL_LOG_DISPLAY: With this function module you can analyze logs in the database.g. With a flag you can control whether the APPL_LOG_WRITE_. . ♦ APPL_LOG_DISPLAY_INTERN: With this function module you can analyze logs in local memory. ♦ APPL_LOG_DELETE: With this function module you delete logs in the database according to specified selection conditions. ♦ APPL_LOG_SET_OBJECT: With this function module. when you have only collected log records at runtime and do not want to write to the database. for the specified object or sub-object. messages are written in local memory or are output on the screen. ♦ APPL_LOG_READ_INTERN: With this function module you read all log data whose log class has at least the specified value. e.. ♦ APPL_LOG_INIT: This function module checks whether the specified object or sub-object exists and deletes all existing associated data in local memory. you create a new object or sub-object for writing in local memory. ♦ APPL_LOG_READ_DB: With this function module you read the log data in the database for an object or sub-object according to specified selection conditions. from local memory. Necesita la cola del BI (QUID Cola Identificación (clave unívoca)) para recuperarlo a la tabla DYNPROTAB. ♦ DAY_IN_WEEK: CALL FUNCTION 'DAY_IN_WEEK' EXPORTING datum = P_DIA IMPORTING . Convierte el importe que se pasa a foreign_amount de la moneda p_ori a la moneda p_cal y nos lo retorna por local_amount. ♦ CONVERT_TO_LOCAL_CURRENCY: CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY' EXPORTING date = '20020101' foreign_amount = p_valor foreign_currency = p_ori local_currency = p_cal IMPORTING local_amount = p_valor. CALL FUNCTION 'BDC_OBJECT_READ' EXPORTING QUEUE_ID = P_QID TABLES DYNPROTAB = BDCDATA. Borra el BI. Esta función recupera la sesión de BI. ♦ BDC_OBJECT_READ: SELECT SINGLE qid FROM APQI into p_qid WHERE GROUPID EQ MAPENAME. El campo QUID(cola) esta en la tabla APQI y para encontrado usamos el nombre del juego de datos que se guarda en el campo GROUPID. Si la tabla bdcdata no es inicial es que hemos podido recuperar el juego de datos. En este caso también necesitamos la cola.Programación ABAP ♦ BDC_OBJECT_DELETE: CALL FUNCTION 'BDC_OBJECT_DELETE' EXPORTING queue_id = P_QID. Nos devuelve en la tabla meses los nombres de todos los meses en el idioma que se le indique. ♦ HR_READ_INFOTYPE: Call function ‘HR_READ_INFOTYPE’ Exporting Pernr = <persona> Infty = ‘nnnn’ Begda=<fecha_ini> Endda=<fecha_fin> Importing Subrc=<return> Tables Infty_tab=<pnnnn>. Pnnnn: tabla interna que a de estar definida como Infotypes. ♦ MONTH_NAMES_GET: data: begin of meses occurs 0. La función 'FIMA_X_DAY_IN_MONTH_COMPUTE' trae el día y la semana. data: end of meses. include structure t247.. ♦ POPUP_TO_INFORM: CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = 'Titulo del mensaje. Como parámetro de entrada tiene una fecha y de salida el día de la semana que le corresponde (en número).Programación ABAP WOTNR = L_DIA_SEMANA. CALL FUNCTION 'MONTH_NAMES_GET' EXPORTING LANGUAGE = SY-LANGU TABLES month_names = meses.' txt1 = 'Mensaje informativo ' txt2 = 'aparece en una pantalla'. realiza una verificación de autorización. . ‘nnnn’: Número del infotipo a cargar. Selecciona los registros del infotipo que tengan al menos un día dentro de la fechas de selección y los pone en la tabla interna (no necesita la BD lógica). ♦ RP_FILL_WAGE_TYPE_TABLE: DAta: begin of ZPPBWLA occurs 0. si no le decimos nada por defecto aparece un botón para cancelar. ya sean directos o indirectos dichos ccnóminas. CALL FUNCTION 'RP_FILL_WAGE_TYPE_TABLE' EXPORTING APPLI = 'E' BEGDA = p0008-begda ENDDA = '99991231' TCLAS = 'A' pernr = pernr-pernr SUBTY = '0 ' DLSPL = 'X' tables ppbwla = Z PPBWLA Trae a la tabla ZPPBWLA todos los cc-nóminas con sus importes del infotipo 0008.Programación ABAP Aparece en pantalla un popup informativo. include STRUCTURE PBWLA. Puede traer otros infotipos. Nos muestra un Popup por pantalla y espera una respuesta que guarda en resp si a display_cancel_button le damos el valor Space no aparece el botón de cancelar. en este caso. La función RP_EVALUATE_INDIRECTLY_P0008 es especifica para el intotipo 0008 y funciona de forma similar. De este tipo hay varias funciones otro ejemplo serias ‘POPUP_TO_DECIDE_INFO’. ♦ RP_GET_CURRENCY: . ♦ POPUP_TO_CONFIRM: CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING TEXT_QUESTION = ‘Pregunta’ TEXT_BUTTON_1 = ‘Texto del primer botón’ TEXT_BUTTON_2 = ‘Texto del segundo botón’ DISPLAY_CANCEL_BUTTON = space IMPORTING ANSWER = resp. data: end of ZPPBWLA. Le pasamos una fecha p_begda y nos devuelve el último día de ese mes en la variable p_endda. Le pasamos el agrupador de países y la fecha y nos trae la moneda que le corresponde. Pasa los datos de la tabla interna RG al fichero que se le indica en el filename con el tipo filetype.Programación ABAP CALL FUNCTION 'RP_GET_CURRENCY' EXPORTING MOLGA = '04' BEGDA = sy-datum IMPORTING WAERS = moneda. ♦ RP_LAST_DAY_OF_MONTHS: call function 'RP_LAST_DAY_OF_MONTHS' exporting day_in = p_begda importing last_day_of_month = p_endda exceptions day_in_no_date = 1 others = 2. ♦ WS_FILENAME_GET: CALL FUNCTION 'WS_FILENAME_GET' EXPORTING def_filename ='' def_path = 'C:' mask = maske mode = 'O' title = 'Seleccione un archivo' IMPORTING . ♦ WS_DOWNLOAD: CALL FUNCTION 'WS_DOWNLOAD' EXPORTING filename = downfile filetype = 'ASC' TABLES data_tab = rg. Programación ABAP filename = downfile EXCEPTIONS inv_winsys =1 no_batch =2 selection_cancel = 3 selection_error = 4 OTHERS = 5. Esta función nos mostrara pantalla propia de Windows para seleccionar un fichero. . ♦ WS_UPLOAD: call function 'WS_UPLOAD' EXPORTING filename = p_file filetype = 'ASC' TABLES data_tab = tabla Pasa los datos del fichero a la tabla. Downfile es el nombre del fichero y Maske es el tipo de fichero que queremos buscar. Retorna todas las autorizaciones de la persona para los objetos de autorización solicidados. Si no tiene autorización el sy-subrc <> 0. ♦ Función de autorizaciones.: 'P_ORGIN' (Autorizaciones de PA)). Parámetro: Objeto de autorización que se quiere consultar (Ej. Después de hacer la selección de un infotipo con un comando SQL podemos chequear que el usuario tenga autorizaciones. CALL FUNCTION 'GET_AUTH_VALUES' EXPORTING OBJECT1 = ‘parámetro’ * OBJECT2 ='' * OBJECT3 ='' * OBJECT4 ='' * OBJECT5 ='' * OBJECT6 ='' * OBJECT7 ='' USER = usuario TABLES VALUES = I_tab * EXCEPTIONS * USER_DOESNT_EXIST = 1 * OTHERS =2 . Select * from pannnn Where pernr eq <pernr> and begda… and endda… AUTHORITY-CHECK object ‘P_ORGIN’ id ‘INFTY’ field <infotipo> id ‘SUBTY’ field <subtipo> id ‘AUTHC’ DUMMY id ‘PERSA’ DUMMY id ‘PERSG’ DUMMY id ‘VDSK1’ DUMMY.Programación ABAP Autorizaciones: ♦ Verificación de autorización para comandos SQL. . Provide * from p0002 * from p0006 between pn-begda and pn-endda where p0006-subty = <n>. PROVIDE: Loop a una tabla interna definida como infotypes.Programación ABAP I_tab: Tabla en la que nos retornara las autorizaciones ha de tener la estructura de la tabla del diccionario US335. -----------------Endprovide.Provide * from pnnnn Between pn-begda And pn-endda. -----------------Endprovide. . - . En la cabecera de cada una de las tablas tendremos por cada uno de las pasadas su registro con las fechas más restrictivas de la tabla que están implicadas en el provide. Cada partición de uno de los infotipos involucrados conduce a una partición del período de selección. Igual que el anterior pero el proceso se limitan los cortes de uno de los infotipos al subtipo indicado. Usuario: Usuario de la persona que ejecuta el programa(sy-uname). ----------Endprovide. Loop a la tabla pnnnn teniendo en cuenta la fechas de selección. Provide * from p0001 * from p0002 * from pnnnn between pn-begda and pn-endda. Buscamos las monedas que ha tenido sin contar la validez del infotipo: Select * from t500c into table itab where land1 eq ‘ES’ begda lt p0001-begda and endda gt p0001-endda. .Programación ABAP Otros: ♦ Selección de datos dependientes del tiempo: En HR es muy importante tener en cuenta la fechas ya que casi todos los datos de las tablas tiene unos periodos de validez. uan like p0005-uan01. ♦ Estructuras repetidas en infotipos: .Buscamos las monedas que ha tenido durante la validez del infotipo: Select * from t500c into table itab where land1 eq ‘ES’ and begda le p0001-begda and endda ge p0001-endda. uab like p0005-uab01.Buscamos la moneda que tenia a fecha de inicio del infotipo: Select single * from t500c Where LAND1 eq 'ES' and begda le p0001-begda and endda ge p0001-begda. ube like p0005-ube01. . uen like p0005-uen01. . uar like p0005-uar01. RP_PROVIDE_FROM_LAST P0001 Subtipo Pn-begda Pn-endda La tabla t500c contiene la clave de moneda para cada país. . .Área de trabajo: data: begin of vacaciones.Carga de los datos en la tabla que hemos creado do 6 times varying vacaciones from p0005-uar01 next p0005-uar02.Lectura del registro. . end of vacaciones. este ejemplo es para la RT).Programación ABAP -------enddo. para ello tenemos unas macros. rx-key-pernr = pernr. La estructura de repetición del infotipo 5 se segmenta y se pone a disposición den bloques en el área de trabajo. Estas macros necesitan unas variables que están definidas en unos includes (para el caso anterior). En primer lugar se ha de leer la RGDIR del empleado que representa la raíz del árbol del cual cuelgan el resto de estructuras. Con from <nombre de campo> se marca el punto de arranque en la memoria principal. unpack rgdir-seqnr to rx-key-seqno. Next <nombre de campo> determina el incremento para los siguientes puntos de arranque. Está compuesto de distintas estructuras. rp-imp-c2-cd-nobuff. Esto hay que hacerlo por cada uno de los periodos(registros) de la RGDIR que se quiera leer. RPPPXD10 RPPPXD00 RPC2RX00 RPC2REE0 . cd-key-pernr = pernr. sort rgdir by fpper descending inper descending fpend descending. leemos la tabla que nos interese (las macros pueden depender de la tabla que se quiera leer. Ya tenemos la RT cargada para poder leerla. Si no se ha producido ningún error ( rp-imp-cd-subrc = 0 ). Se repite 6 veces ya que es el número de veces que se repiten la estructura en el infotipo. srtza: Estado de la nomina (A: Actual). ♦ Lectura del Cluster de nómina: Es donde están guardados todos los datos de la nómina del empleado. fpbeg: Fecha inicio. loop at rgdir where fpbeg <= pn-begda and fpend >= pn-endda and SRTZA = 'A'. fpend: Fecha fin. Podemos hacer un loop o lo que nos interese con ella. rp-imp-c2-re. data: begin of i_rt occurs 150. data: end of i_rt. * Lanzamos el rpcalce0 para cada empleado SUBMIT RPCALCE0 WITH PNPXABKR = L_ABKRS WITH PNPPERNR-low = itab_pernr-pernr WITH SCHEMA = 'ZFIN' WITH TST_ON = 'X' with PNPTIMRA = 'X' with PNPPABRP = l_periodo with PNPPABRJ = l_ejercicio exporting list to memory with PRT_PROT eq ' ' with ECALLED = 'X' * via selection-screen . Este resultado se guarda internamente en la base de datos pero no en el cluster del empleado. export i_rt from i_rt to database indx(st) from wa_indx id l_area_memoria_rt.Programación ABAP RPC2CD00 RPPPXM00 ♦ Lectura del Cluster de nómina simulada: En este caso lo que vamos a hacer es lanzar nosotros una simulación de nómina (lanzarla en proceso de test) y leer el resultado. select srtfd aedat into (l_srtfd. * Preparamos lo que nos hace falta para luego recuperar la rt simulada clear l_clave. wa_indx-aedat = sy-datum. l_aedat) from indx where relid eq 'ST' and srtfd like l_clave and srtf2 eq 0. concatenate 'RT' itab_pernr-pernr l_periodo l_ejercicio sy-uzeit into l_area_memoria_rt. concatenate '%' itab_pernr-pernr l_periodo l_ejercicio '%' into l_clave. endselect. include structure pc207. ♦ Llamadas a subrutinas en tiempo de ejecución: En la tabla t596f se guardan el procedimiento(subrutina) (t596f-modna) y el programa en el que esta(t596f-pgmna).Programación ABAP AND RETURN. endselect. La transacción para poder ver las características es PE03. . l_aedat) from indx where relid eq 'ST' and srtfd like l_clave. (El tipo de valor de retorno depende de la característica). move-corresponding t001p to pme17. * Prepara los datos para recuperar la rt simulada select srtfd aedat into (l_srtfd. Llamamos a la característica plogi con la estructura pme17 anteriormente rellenada y nos retorna el valor en l_back. * Recuperamos la rt simulada import i_rt = i_rt from database indx(st) id l_area_memoria_rt to wa_indx. endif. l_area_memoria_rt = l_srtfd. Perfom (t596f-modna) in program (t596f-pgmna) using … ♦ Lectura de características: La función ‘HR_FEATURE_BACKFIELD’ lee características. move-corresponding psyst to pme17. cada característica necesita una estructura determinada esta estará en la tabla T549D(Índice de características) en el campo STRUC. Para que esto funcione hay que mandar la RT a la tabla INDX cuando se este simulando. call funtion ‘HR_FEATURE_BACKFIELD’ exporting feature = ‘PLOGI’ struc_content = pme17 importing back = l_back. if l_srtfd cp 'RT*'. .Programas con includes.Programación ABAP Ordenes de transportes: Es importante tener mucho cuidad cuando se incluye un programa en una orden de transporte ya que sino luego nos puede causar muchos problema. En este caso todo lo que tenemos son reports pero el orden también es muy importante ya que o bien lo pasamos todo junto o tendremos que tener en cuenta que es lo que necesita cada include(Ej. . Modulpools: Los modulopools son un conjunto de varios elementos: ♦ Programa principal ♦ Dynpros ♦ Status GUI ♦ Títulos GUI ♦ Módulos PBO: ♦ Módulos PAI ♦ Includes Por esta razón es importante que estén bien estructurados ya que sino es así después nos resulta muy difícil encontrar algo y sobre todo si es otro compañero el que ha de buscarlo. .Cuando estemos creando tablas y elementos de datos tener muy presente el orden en el que se ha de transportar. Si en uno declaramos la variables muy posiblemente sea el primero que se tiene que transportar). Include con definición de datos). O bien creamos una orden para los elementos otra para las tablas y otra para los reports y se transportan en este orden o una para todo pero en este caso hemos de tener claro que después no tendremos que transportar antes la tabla para parametrizarla o cosas por el estilo. Si además podemos indicar que contiene mejor(Ej. .A la hora de rellenar la descripción de la orden de transporte intentar que sea clara y poner al inicio el modulo. .Cuando nos creemos una tarea en la orden de un compañero siempre comentar con el que es lo que tenemos que hacer y que el nos cuente que es lo que hay en la orden para después no tener problemas con el transporte.En primer lugar no utilizar una orden en la que el contenido no este relacionado con lo que estamos tratando en ese momento ya que puede darse la situación de que se tenga que transportar algo de lo que hay dentro y no otra de las partes. . . otro en el que definiremos nuestros procedimientos(Forms) y otro para la definición de datos.Los Módulos PBO y PAI tendrán nombres claros y a ser posible que incluyan el número de la dynpro a la que pertenecen. Objeto Nomenclatura Contador Longitu d . si las que hay no nos sirven no podemos hacer nada (tocar el código standar que se recomienda no hacer a no ser que sea imprescindible). Y otra posibilidad es que sea una función la que llame a un report y al crearlo nosotros introducimos nuestro código. Nosotros solo podemos usarlas en el caso de que estén colocadas donde nos hacen falta. crear tantos como sea necesario. en este caso lo que tendremos que hacer es crear el procedimiento con el código que necesitemos.Las Dynpros. . También puede ser que los procedimientos se seleccionen de una tabla en tal caso lo que habrá que hacer es parametrizar la tabla con nuestro procedimiento. pero sin pasarnos. Las user exit pueden ser procedimientos(performs) que el programa original llame pero no estén creados. . - - Nomenclaturas: A continuación se detalla el convenio de nomenclaturas a utilizar para denominar los diferentes tipos de objetos SAP creados por el cliente. User Exit: Son puertas que nos deja SAP para que introduzcamos código de cliente a programas standars. Estas user exit SAP las coloca donde considera que nos pueden ser útiles. los Status GUI y lo Títulos GUI serán todos del programa principal. en principio uno para los módulos PBO.Programación ABAP Programa principal tendrá definidos todos los includes.Los includes es lo que mejor hay que estructurar. otro para los PAI. que serán respetados en los parches que mande SAP. a no ser que el cliente i/o jefe de proyecto den una nomenclatura propia para dicho proyecto. Programación ABAP Programa ABAP Tabla Transparente Dynpros Adicionales (nº) Clase Desarrollo Módulo Funciones Grupo Funciones Infotipo Propio (nº) Module Pool Propio Includes Module Pool Dynpros Module Pool Dominio Elemento de Datos ZHRAA ZHR 9000-9999 Z Z_HR ZH 9000-9999 ZHRAAnnnn00 ZHRAAXXXX 1000-2000-3000 ZHR ZHR NNN *(AA = Módulo) NN XXX NNNN NN NNNN *(corresponde a ‘nnnn’) NN (10:DATA. ‘XX’ = Código alfanumérico libre. Las entradas en negrita son fijas y corresponden a la denominación del módulo. 40:Rutinas) *Numeración Estándar SAP XXXXXXX XXXXXXX 8 5 4 4 8 4 4 11 11 4 10 10 Donde : ‘AA’ = Código del Módulo dentro de HR al que pertenece. ‘NN’ = Código numérico libre.Título * * * * Descripción * . 20:PAI. 30:PBO. Plantilla de programas ************************************************************************ * PROGRAM ZHR***** . * aa.Programación ABAP * * * * ************************************************************************ * AUTOR: PLAUT CONSULTING(FDG) FECHA: DD.MM. ************************************************************************ *********************** PROCESO PRINCIPAL **************************** ... ************************************************************************ ** DEFINICIÓN DE TABLAS DDIC ** ************************************************************************ tables: pernr. ************************************************************************ ** INCLUDES ** ************************************************************************ *include <icon>. * bb. ************************************************************************ ** DEFINICIÓN DE ESTRUCTURAS ** ************************************************************************ * Estructura con los datos de estatus del centro (en listado detallado) *data: begin of struct_xxxx.. *data: end of struct_xxxx... * end of itab_xxxxx. ………..AAAA * ************************************************************************ program zxxxxxxx * no standard page heading * line-size 80 .. * include structure i_xxxx. ************************************************************************ ** DEFINICIÓN DE TABLAS INTERNAS ** ************************************************************************ * Descripción *data: begin of itab_xxxxx occurs 1000. ************************************************************************ ** DEFINICIÓN DE VARIABLES ** ************************************************************************ *data: . ************************************************************************ ** SELECTION-SCREEN ** ************************************************************************ *selection-screen begin of block . ************************************************************************ ** DEFINICIÓN DE INFOTIPOS ** ************************************************************************ Infotypes: nnnn name XXXXX. * parameters: p_ * select-options: so_ *selection-screen end of block . ………………. ************************************************************************ ** DEFINICIÓN DE CONSTANTES ** ************************************************************************ *data: . ************************************************************************ ** START-OF-SELECTION ** ************************************************************************ start-of-selection. ************************************************************************ ** RUTINAS ADICIONALES ** ************************************************************************ .Programación ABAP ************************************************************************ ************************************************************************ ** AT SELECTION-SCREEN ** ************************************************************************ at selection-screen. provide * from Pnnnn between PN-begda and PN-endda. ************************************************************************ ** Lectura de la Base de datos lógica ** ************************************************************************ Get pernr. ************************************************************************ ** AT LINE-SELECTION ** ************************************************************************ at line-selection. _________ Endprovide. ************************************************************************ ** END-OF-PAGE ** ************************************************************************ end-of-page. ************************************************************************ ** TOP-OF-PAGE ** ************************************************************************ top-of-page. ************************************************************************ ** INITIALIZATION ** ************************************************************************ initialization.