Archivo
BAPI para liberar documentos de venta (VKM1)
Caso: se requería encontrar una BAPI para liberar documentos de venta por bloqueo de facturación (cliente bloqueado por gestión de crédito).
Solución: la función SD_ORDER_CREDIT_RELEASE funciona perfecto, indicándole el documento de venta y si queremos que sea sincrónica la actualización.
CALL FUNCTION 'SD_ORDER_CREDIT_RELEASE'
EXPORTING
vbeln = lv_vbeln
if_synchron = 'X'.
Rangos para fechas Select-options
Caso: un post solo para tener en la bitácora este código para calcular la fecha de inicio-fin de los campos MONAT-GJAHR típicos en libros legales FI.
PERFORM armar_fecha using p_gjahr
s_monat-low
s_monat-high.
FORM armar_fecha USING p_gjahr TYPE gjahr
p_monatl TYPE monat
p_monath TYPE monat.
DATA: w_ifecha TYPE bsid-budat,
w_ffecha TYPE bsid-budat,
w_auxfch TYPE bsid-budat.
CONCATENATE p_gjahr p_monatl ’01’ INTO w_ifecha.
CONCATENATE p_gjahr p_monath ’01’ INTO w_auxfch.
CALL FUNCTION ‘LAST_DAY_OF_MONTHS’
EXPORTING
day_in = w_auxfch
IMPORTING
last_day_of_month = w_ffecha.
IF sy-subrc EQ 0.
r_fecha-low = w_ifecha.
r_fecha-high = w_ffecha.
r_fecha-option = ‘BT’.
r_fecha-sign = ‘I’.
APPEND r_fecha.
ENDIF.
ENDFORM. » ARMAR_FECHA
BAPI_ACC_DOCUMENT_POST – Actualizar campo REBZG
Caso: Al querer modificar los campos REBZG, REBZZ, REBZJ, la BAPI_ACC_DOCUMENT_POST no tiene disponibles los campos.
Solución: Se debe revisar la nota SAP 487722, en la cual indica en la segunda opción (la que utilicé yo) la creación de una BTE por la FIBF.
Pasos:
1. Por lo pronto, se debe hacer la llamada a la BAPI BAPI BAPI_ACC_DOCUMENT_POST con la tabla EXTENSION1 (no agrego todo el código para no aburrir)
DATA:it_bapiacextc TYPE TABLE OF bapiacextc.
DATA lwa_bapiacextc TYPE bapiacextc.
CLEAR lwa_bapiacextc.
lwa_bapiacextc-field1 = lv_posnr.
lwa_bapiacextc-field2 = lwa_out-belnr. » Nro. documento factura
lwa_bapiacextc-field3 = lwa_out-gjahr. » Ejercicio doc.factura
lwa_bapiacextc-field4 = ‘001’. » Posición doc.factura (siempre 001)
APPEND lwa_bapiacextc TO it_bapiacextc.
CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’
EXPORTING
documentheader = lwa_header
TABLES
accountgl = lit_accountgl
currencyamount = lit_curr
extension1 = it_bapiacextc » Se habilita esta tabla para enviar el doc.ref.fact
return = lit_return
extension2 = it_bapiparex.
2. Luego por la SE37, copiamos el módulo de función SAMPLE_INTERFACE_RWBAPI01 (en mi caso la copié al módulo ZACT_DOC_REF_FACT_RWBAPI01), en donde vamos a agregar el código para actualizar los campos. Se crea entonces el módulo de funciones: ZACT_DOC_REF_FACT_RWBAPI01.
3. Modificamos la función para modificar los campos
DATA: lw_bapiacextc TYPE bapiacextc.
LOOP AT extension.
MOVE extension TO lw_bapiacextc.
LOOP AT it_accit WHERE posnr = lw_bapiacextc-field1.
it_accit-rebzg = lw_bapiacextc-field2.
it_accit-rebzj = lw_bapiacextc-field3.
it_accit-rebzz = lw_bapiacextc-field4.
modify it_accit.
ENDLOOP.
ENDLOOP.
4. Luego ingresamos a la transacción FIBF para crear una BTE:
- image010
- image011
- image012
- image013
5. Finalmente al ejecutar la BAPI, vemos que se actualizan los campos requeridos
DY_GET_CURRENT_TRANSACTION – Diferenciar variantes de transacción
[title DY_GET_CURRENT_TRANSACTION – Diferenciar variantes de transacción]
Caso: se requiere determinar en el código ABAP si estoy en una transacción estándar o en una variante de transacción.
Solución: Creando una variante de transacción para la MB21, me topé con la necesidad de determinar si luego estaba en la estándar o en la variante creada (a la cual la llamé ZMB21). Encontré que podía usar esto:
DATA: lv_tcode TYPE shdtv-tcode.
CALL ‘DY_GET_CURRENT_TRANSACTION’
ID ‘TRANSACTION_NAME’
FIELD lv_tcode.
IF lv_tcode = ‘ZMB21’.
MESSAGE ‘Estoy en la variante de transacción ZMB21’.
ELSEIF lv_tcode = ‘MB21’.
MESSAGE ‘Estoy en la transacción MB21 estándar’.
ENDIF.
Nuevo SAP GUI 7.5
Noticia: SAP liberó el nuevo GUI 7.50
El 04.05.2017 SAP liberó la versión GUI 7.50, disponible para descargar e instalar para todos los clientes.
Algunas de las características de esta nueva versión son:
– Mayor vida útil para SAP GUI, ya que está desarrollado con Visual Studio 2013
– Selección de colores por cliente / sistema con Blue Crystal Theme
– Soporte productivo para las características de SAP Screen Personas 3.0
Las nuevas características se mencionan en las siguientes notas:
2417687 – New features in SAP GUI for Windows 7.50
147519 – Maintenance strategy / deadlines for SAP GUI
Para aquellos que no tienen acceso a SAP Service Marketplace, se adjunta link: http://www.sabitlink.com/index.php/l/jc
3 trucos ABAP para programar menos
Caso: Se enumeran algunos trucos para reducir el tiempo que se tarda programando.
Solución:
Truco 1: Armar estructuras utilizando el botón “MODELO”.
Casi siempre usamos estructuras para nuestros reportes y se pierde mucho tiempo en agregar los campos tipeándolos, veamos este trick usando el “MODELO”, también se pueden ver otras opciones ahí mismo.
- image001
- image002
- image003
Y el resultado final:
2. Copy+Paste de datos en columna
Si nos gusta crear una estructura desde el diccionario y luego completar con el texto TYPE manualmente, aquí un truco:
Seleccionamos los campos para pegarlos en nuestro programa:
- image005
- image006
He aquí el truco! Usamos ALT+drag and drop del mouse para seleccionar la info y trabajar con ella.
Por ejemplo me traigo los TYPES del punto anterior….o selecciono los tipos de datos y los elimino todos de una vez!
Para eliminar igual, con CTRL+X (cortar) o Suprimir (delete).
3. Uso del TAB para proponer texto personalizado.
Ya sabemos que el TAB nos ayuda a proponernos instrucciones, pero podemos agregar código nuestro? Si, veamos donde: el editor ABAP, en la esquina inferior derecha hay un ícono, lo presionamos.
Ahí en Modelos de códigos podemos ver los actuales y crearnos nuevos, por ejemplo:
- image010
- image011
Ahora, ya en el código:
Nos aparece el código ingresado
Agregar nueva fuente TrueType para Sapscript/Smartforms
Caso: Se desea agregar una nueva fuente Truetype a SAP para utilizarlo en Sapscripts o Smartforms.
Solución: Por la SE73 ingresamos a la opción “Instalar font TrueType”
En la pantalla siguiente, definimos un nombre para la fuente (tomaremos de ejemplo el caso de la fuente Arial)
Las fuentes podemos rescatarlas de C:WindowsFonts o de Internet y en Arial por ejemplo existen 4 formas:
· arial.ttf (normal),
· arialbd.ttf (negrita o bold),
· ariali.ttf (cursiva o italic)
· arialbi.ttf (negrita cursiva o italic).
Esto quiere decir que tendremos que subir cada uno de los archivos cambiando los tildes de los atributos de la pantalla en cada caso.
Agregando la fuente normal, nos abre un popup donde indicamos el fichero Font si no lo indicamos
Nos va a pedir una OT de Workbench:
Y luego un texto
Finalmente nos da un informe:
Hacemos lo mismo con las otras variantes de la fuente Arial, por ejemplo para negrita o bold:
Nos preguntará si instalamos el nuevo Font y le ponemos que si:
Y así con el resto de las variantes de la fuente Arial. Luego en el smartstyles vemos como seleccionar la nueva fuente:
Modificar texto de elemento de datos estándar
Caso: se modificar el texto o descripción de un elemento de datos estándar.
Solución: entrando a la transacción CMOD, elegimos del menú la opción “Pasar a” y elegimos: Ampliaciones Globales >Palabras Clave > Modificar. Seleccionamos el elemento de datos:
- image001
- image002
Luego de realizar los cambios, grabamos y nos pedirá OT.
Evitar la ejecución de JOBs en paralelo
Caso: se desea programar un job, pero que no se ejecute otra instancia del mismo si éste se encuentra ya en ejecución.
Por ejemplo si tengo un job que se ejecuta cada 1 minuto pero hay veces que su ejecución tarda más que 1 minuto, entonces queremos evitar que se ejecute la próxima instancia del job antes que termine el job actual.
Solución: utilizamos el report RSBTONEJOB2 como “puente” para ejecutar como JOB nuestro programa:
1. Ante todo tenemos que tener definido el programa y la variante que vamos a ejecutar en el JOB.
En nuestro caso es el programa ZPRUEBA_ABAP y la variante es SOC_1000.
2. Ingresamos a la SE38 y ejecutamos el report RSBTONEJOB2. Allí debemos indicar:
– JOBNAME: el nombre del job que crearemos (puede ser igual al nombre del report)
– REPORT: Nombre del programa que vamos a ejecutar en el JOB (ver paso 1)
– VARIANT: variante del programa a ejecutar en el JOB (ver paso 1)
3. Ahora bien, con estos datos debemos crear en el programa RSBTONEJOB2 una variante que tenga el mismo nombre que la variante del REPORT del paso 1. Es importante este punto.
- image0031
- image004
4. Vamos a la SM36 y programamos el JOB. Para el caso debemos respetar los nombres utilizados: El nombre del JOB y la variante
Definimos el paso, en este caso ponemos el nombre del programa RSBTONEJOB2, que funcionará como un “puente” al programa que queremos ejecutar en el JOB y la variante.
Definimos la condición de inicio (nosotros probaremos cada 1 minuto para forzar a que cancele la ejecución)
Grabamos el JOB para que se libere automáticamente (ya que nuestra condición de inicio fue “Inmediato”).
5. Vamos a ver su comportamiento en la SM37.
Vemos que se encuentra un JOB activo y al minuto intentó ejecutarse nuevamente y terminó, viendo el log del job terminado tenemos que:
Podemos ver los distintos mensajes que se generarán en el programa RSBTONEJOB2:
DEBUG de Smartforms
Caso: se desea debugguear un smartforms.
Solución: una forma práctica es la siguiente:
1. Ingresar a la transacción SMARTFORMS, indicar el nombre del formulario y presionar el botón “Verificar”
2. Aparecerá el módulo de funciones, presionamos “Visualizar”:
3. Buscamos el texto “PERFORM %GLOBAL_INIT.” Y hacemos doble click en el form
- image003
- image004
4. Finalmente allí buscar la sección de código donde queremos poner el break point.