jueves, 3 de noviembre de 2016

Variables del Sistema

A continuación se listan las variables del Sistema disponibles.

SY-ABCDE - ABCDEFGHIJKLMNOPQRSTUVWXYZ
SY-BATCH - Informa si la ejecución es en batch
SY-CPROG - Nombre del programa principal
SY-CUCOL - Columna seleccionada
SY-CUROW - Fila seleccionada
SY-DATLO - Fecha del día (AAAAMMDD) local
SY-DATUM - Fecha del día (AAAAMMDD) del servidor
SY-DBCNT - cantidad de registros seleccionados (select)
SY-DBSYS - Nombre del Sistema de gestión de Base de Datos
SY-FDPOS - Posición encontrada en el string (después de la consulta)
SY-HOST - Nombre del host
SY-INDEX - Cantidad de pases dentro de un loop (do)
SY-LANGU - Lenguaje por defecto
SY-LINSZ - Tamaño de la línea de salida (write)
SY-LISEL - Contenido de la línea seleccionada
SY-LSIND - Nivel de entradas en listas interactivas
SY-MANDT - Mandante
SY-MSGID - Identificador de mensajes
SY-OPSYS - Sistema Operativo
SY-PAGNO - Número de página
SY-REPID - Nombre del programa (Inexistente en nuevas versiones)
SY-SAPRL - Release de SAP
SY-SCOLS - Cantidad de columnas en pantalla
SY-SROWS - Cantidad de filas en pantalla
SY-STACO - Columna inicial de la pantalla en curso
SY-STARO - Fila inicial de la pantalla en curso
SY-SUBRC - Código de retorno
SY-SYSID - Identificación del sistema (xxx, yyy ..)
SY-TABIX - Indice de una tabla interna
SY-TCODE - Nombre de la Transacción
SY-TIMLO - Hora local (HHMMSS)
SY-TITLE - Título del Listado
SY-TZONE - Zona horaria del servidor
SY-UCOMM - Campo OK code
SY-ULINE - ---------------
SY-UNAME - Nombre de usuario
SY-UZEIT - Hora del servidor (HHMMSS)
SY-VLINE - |
SY-WAERS - Moneda (PTS, DM .)
SY-ZONLO - Zona horaria local

Transacciones más utilizadas

Desarrollo  
SE38 Editor ABAP
SE80  Examinador de objetos
SM35  BatchInput
SE37  Funciones
BAPI  Explorador Bapis
SE93  Transacciones
ST05 Traza de programas
SE18  Consultar BADI (definición)
SE19  Modificar BADI (implementación)
ST22  Ver dumps
SE24  Class Builder
SM36  Crear JOBs
SM37  Traza de JOBs
SM62  Creación eventos
SAAB  Gestión de break-points y asserts
SLG0  Crear objetos de LOG
SLG1  Consultar LOGs
SLG2 Borrar LOGs
WE60  Consulta de IDOCs
DWDM  Ejemplos ABAP
SM02 Mensajería
SWO3  Explorador de Business Objects
Tablas/Estructuras  
SE11
SE14                                   
Diccionario ABAP
Actualización del contenido al modificar elementos de datos
SE16  Visualizar tabla
SE16N  Visualizar tabla
SM30  Vistas de actualización / Mantenimiento
BS22  Status de órdenes
SNRO  Secuencias de números
Smartforms  
SE71  SapScript
NACE  Gestión de mensajes
SE73  Gestión de fuentes
SMARTSTYLES  Definir el estilo del formulario
SMARTFORMS  Crear el formulario
SE63 Traducción de SmartForms
SE78  Cargar/Gestionar Imágenes (bitmap / para sapscript o smartform)
SO10  Textos estándares - Cargar/Gestionar Imágenes (tiff / solo para sapscript)
SPAD  Gestión de SPOOL(definiciones de impresoras, tamaños de papel...)
Sistema  
SM04  Eliminar sesiones abiertas
SM12  Liberar bloqueos
SE01  Transporte
STMS  Transporte
SPAD  Impresoras
SP01 Spool de impresiones en general de cualquier usuario
SP02  Spool de impresiones propias o del usuario utilizado
SE03  Buscar objetos en orden de transporte y tareas
SM59 Cambiar de sistema (internamente)
SM36  Crear Jobs
SM62  Crear eventos
SM37  Borrar Jobs
ST05  Trazas
SU01  Configuración de usuarios
AL11  Navegador sist. ficheros
SXDA  Direct Input
SM69  Ejecución de comandos del S.O.
CACS_FILE_COPY  Subir/Bajar ficheros del servidor
LSMW  Legacy System Migration Workbench(cargas masivas de datos)
BDLR Biblioteca de programas para cargas de datos
SOST Verificar mails enviados
SCC1  Transportar ordenes de un mandante a otro
Querys  
SQ01  Editor Query
PP: Producción  
CO01 Crear orden de producción
CO02  Editar orden de producción
CO03  Visualizar orden de producción
CO11N  Notificar orden de producción
KO88  Liquidar orden de producción
CO13  Anular notificación
SD: Ventas  
VA01  Crear pedido
VA02  Modificar pedido
VA03  Visualizar pedido
VL02N  Modificar entrega
VL03N  Visualizar entrega
VF01  Crear factura
VF02  Modificar factura
VF03 Consultar factura
VA22  Ofertas
MM: Gestión de materiales  
ME23N  Consultar pedidos de compras
ME22N  Modificar pedidos de compras
ME21N  Crear pedidos de compras
MM02  Editar material
MB51  Buscar docs de material
MB03  Consultar doc de material
MB1C  Movimientos de mercancía (poner stock...)
MMSC  Dar de alta un material en un almacén
FI: finanzas  
FB01  Crear asiento contable
FB02  Modificar asiento contable
FB03  Consultar asiento contable
FIBF  Acceso a BTEs
IDoc/EDI  
WE60  Mensajes IDoc
WE21  Puertas IDoc
WE20  Interlocutores EDI
WE02  Listado IDoc con status
WE16  Cargar fichero de texto IDoc
WE19  Reprocesado de IDoc (visible/debugging)
BD87  Reprocesado de IDoc
Workflow  
SWO1 Repositorio de objetos
PFWS Actualizar Modelo Workflow 
PFTS Tarea Estándar
PFTC Actualización general de tareas
PFAC Actualizar regla
SWE2 Visual./Actual.acoplam.tipo eventos-Modificar y visualizar eventos
SWEC Acoplam.eventos p.docs.modificación-Chequear tipo de de evento 
PPOM Actualizar estructura organizativa
PPOMW Mod.org.y ocupación (workflow)
PPOME Modific.organización y ocupación
PPOMA Modificar atributos
SBWP SAP Business Workplace 
SWU3 Customizing de workflow automático
SWELS Act./Desactivar trace eventos
SWEL Visualizar trace de eventos
SWI1 Report selección para workflows 
SWIA Report administración para WI
SWPR WFM: Reiniciar workflow  tras error
SWPC WFM: Continuar workflow tras fallo del sistema
SWU_OBUF Mem.interm.tiempo ejecución PD-Org 
PPWFBUF Sincronizar memo.interm.workflow OM
SWDD Creación y edición


Crear una transacción asociada a un reporte

Introducción
Una transacción asociada a un reporte en SAP, se utiliza para que los usuarios puedan acceder mediante una transacción a los programas que nosotros hemos creado anteriormente, dado que muchas veces ellos no tendran permisos para ejecutar la transacción SE38 o otras transacciones utilizadas para desarrollo.
Ejecución
Iremos a la transacción SE93, esta se utiliza para crear transacciones asociadas a reportes. Esta nos mostrará una pantalla, donde pondremos el nuevo nombre de la transacción, (recordamos que las transacciones no estándar empiezan por Z) y le daremos botón CREATE.
A continuación veremos una ventana de diálogo donde rellenamos el campo descripción breve y en el tipo de transacción seleccionamos transacción de reporte y hacemos click en continuar.
En la siguiente pantalla, rellenaremos los campos program con el nombre del programa (creado anteriormente) y Selection Screen, que dejaremos con el valor por defecto 1000. También podríamos agregar una variante para asociarla con la transacción , para acabar grabamos y la asignamos al paquete correspondiente y Orden de Transporte.

Para finalizar comprobaremos que funciona correctamente, la escribimos en el campo de comandos y veremos que se ejecuta como cualquier otra transacción de SAP.

Clases para trabajar con ficheros en SAP

Listado de Clases y sus correspondientes Métodos para subir y bajar archivos de diferentes tipos desde o hacia la computadora.
Aporte de Yesica Castellano.

cl_gui_frontend_services=>file_save_dialog
Muestra un popup donde se puede seleccionar dónde guardar un fichero
data: filename type string,
      path     type string,
      fullpath type string.

cl_gui_frontend_services=>file_save_dialog(
  changing
    filename             = filename
    path                 = path
    fullpath             = fullpath ).

cl_gui_frontend_services=>gui_download
Graba un fichero en el PC local
cl_gui_frontend_services=>gui_download(
  exporting
    filename                  = fullpath
    filetype                  = 'BIN'
  changing
    data_tab                  = binary_tab ).










cl_gui_frontend_services=>file_open_dialog
Abre un popup donde seleccionar un fichero a cargar
data retfiletable type filetable.
data retrc type sysubrc.
data retuseraction type i.
 
at selection-screen on value-request for filename.
 
 call method cl_gui_frontend_services=>file_open_dialog
  exporting
    multiselection    = abap_false
    file_filter       = '*.xls'
    default_extension = 'xls'
  changing
    file_table        = retfiletable
    rc                = retrc
    user_action       = retuseraction.
read table retfiletable into filename index 1.

cl_gui_frontend_services=>gui_upload
Lee un fichero del PC local
data l_filename type string.
l_filename = filename.
call method cl_gui_frontend_services=>gui_upload
  exporting
    filetype   = 'BIN'
    filename   = l_filename
  importing
    filelength = input_length
  changing
    data_tab   = binary_tab.

cl_gui_frontend_services=>directory_browse
Recupera la lista de ficheros dentro de un directorio
CALL METHOD cl_gui_frontend_services=>directory_browse
  EXPORTING
    window_title         = 'Selecciona un directorio'(090).
    initial_folder       = 'C:\'
  CHANGING
    selected_folder      = l_s_fol
  EXCEPTIONS
    cntl_error           = 1
    error_no_gui         = 2
    not_supported_by_gui = 3
    OTHERS               = 4.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.


cl_gui_frontend_services=>get_computer_name
Recupera el nombre del PC en SAP
data: l_hostname type string.
CALL METHOD cl_gui_frontend_services=>get_computer_name
  CHANGING
    computer_name        = l_hostname
*  EXCEPTIONS
*    CNTL_ERROR           = 1
*    ERROR_NO_GUI         = 2
*    NOT_SUPPORTED_BY_GUI = 3
*    others               = 4. 
 
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

cl_gui_frontend_services=>clipboard_export
Exporta el contenido de una tabla interna al portapapeles.
    DATA rc TYPE i.
 
    CALL METHOD cl_gui_frontend_services=>clipboard_export
      IMPORTING
        data = source
      CHANGING
        rc   = rc.






miércoles, 2 de noviembre de 2016

Crear rango de períodos

Para empezar vamos a necesitar declarar un rango de tipo DATUM

DATA: r_fecha TYPE RANGE OF datum,
            sr_fecha LIKE LINE OF r_fecha.

Luego se loopea el SELECT-OPTIONS/PARAMETER que contiene las fechas para armar el rango.

En este ejemplo vamos a usar un SELECT-OPTIONS

LOOP AT s_peri.

* Se limpia la estructura del rango al inicio de cada vuelta.
CLEAR sr_fecha.

* Como se trata de un rango el valor de option debe ser BT(BeTween).
sr_fecha-option = 'BT'.


* Se asigna el indicador para incluir/excluir valores
sr_fecha-sign = s_peri-sign.

* Modificamos el dia del LOW por el 1
s_peri-low+6(2) = c_01.
* y lo asignamos al LOW de nuestro rango previamente declarado
sr_fecha-low = s_peri-low.

* En este caso necesitamos que el HIGH del SELECT-OPTIONS no esté vacío

* entonces lo validamos
IF s_peri-high IS INITIAL.

MESSAGE s055(zmm) "Debe ingresar período hasta.
DISPLAY LIKE c_e.
LEAVE LIST-PROCESSING.

ELSE.

"Obtenemos el último día del período ingresado.
CONCATENATE c_cero
s_peri-high+4(2)
INTO v_poper.

v_anio = s_peri-high(4).

* Obtener el último día del mes.
CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET'
EXPORTING
i_gjahr = v_anio
i_periv = c_periv
i_poper = v_poper
IMPORTING
e_date = v_high
EXCEPTIONS
input_false = 1
t009_notfound = 2
t009b_notfound = 3
OTHERS = 4.
"Si se produce un error.
IF sy-subrc IS NOT INITIAL.

MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1
sy-msgv2
sy-msgv3
sy-msgv4.

ELSE.

* Se asigna la fecha del último día del mes ingresado en el HIGH
sr_fecha-high = v_high.

* Se calcula la cantidad de meses en el rango porque se necesita que no haya mas de tres períodos de diferencia
CALL FUNCTION 'HR_SGPBS_YRS_MTHS_DAYS'
EXPORTING
beg_da = sr_fecha-low
end_da = sr_fecha-high
IMPORTING
no_month = v_meses
no_year = v_anios
EXCEPTIONS
dateint_error = 1
OTHERS = 2.
IF sy-subrc <> 0.

MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1
sy-msgv2
sy-msgv3
sy-msgv4.

ELSE.

* Si es mayor a 3 se muestra el mensaje.
IF v_meses GT 3
OR v_anios NE 0.

MESSAGE s056(zmm) "La diferencia entre períodos no puede ser mayor a 3.
DISPLAY LIKE c_e.
LEAVE LIST-PROCESSING.

ELSE.

* Si está todo correcto se apendea la linea al rango
APPEND sr_fecha
TO r_fecha.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

Recordar declara cada variable para uso en las funciones con el tipo indicado dentro de la función.