DATA:
s_lfbk TYPE lfbk,
s_bnka TYPE bnka.
CLEAR: s_lfbk.
SELECT SINGLE * FROM lfbk INTO s_lfbk
WHERE lifnr EQ lfa1-lifnr.
IF sy-subrc EQ 0.
CLEAR: s_bnka.
CALL FUNCTION 'READ_BANK_ADDRESS'
EXPORTING
bank_country = s_lfbk-banks
bank_number = s_lfbk-bankl
IMPORTING
bnka_wa = s_bnka
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
ENDIF.
ENDIF.
lunes, 22 de enero de 2018
martes, 13 de junio de 2017
Programa ejemplo manejo FIELD SYMBOLS (ABAP, FIELD SYMBOLS)
He aquí un ejemplo sencillo que puede tener diversas aplicaciones.
REPORT ztest_field_symbol.
PARAMETERS:
p_bukrs TYPE bseg-bukrs,
p_gjahr TYPE bseg-gjahr,
p_belnr TYPE bseg-belnr.
DATA:
t_bsak TYPE STANDARD TABLE OF bsak,
t_bsik TYPE STANDARD TABLE OF bsik,
BEGIN OF t_data OCCURS 0,
belnr TYPE belnr_d,
augbl TYPE augbl,
END OF t_data,
s_data LIKE LINE OF t_data.
FIELD-SYMBOLS:
<bs*k_tab> TYPE ANY TABLE,
<bs*k> TYPE any,
<any> TYPE any.
REFRESH: t_bsak[], t_bsik[].
SELECT * FROM bsak INTO TABLE t_bsak
WHERE augbl EQ p_belnr
AND bukrs EQ p_bukrs
AND belnr NE p_belnr.
IF sy-subrc NE 0.
SELECT * FROM bsik INTO TABLE t_bsik
WHERE bukrs EQ p_bukrs
AND belnr EQ p_belnr
AND gjahr EQ p_gjahr.
IF sy-subrc EQ 0.
ENDIF.
ENDIF.
BREAK-POINT.
IF t_bsak[] IS NOT INITIAL.
ASSIGN TABLE FIELD t_bsak TO <bs*k_tab>.
ELSE.
ASSIGN TABLE FIELD t_bsik TO <bs*k_tab>.
ENDIF.
REFRESH: t_data[]. CLEAR: s_data.
UNASSIGN <bs*k>.
LOOP AT <bs*k_tab> ASSIGNING <bs*k>.
UNASSIGN: <any>.
ASSIGN COMPONENT 'BELNR' OF STRUCTURE <bs*k> TO <any>.
IF sy-subrc EQ 0.
MOVE <any> TO s_data-belnr.
ENDIF.
UNASSIGN: <any>.
ASSIGN COMPONENT 'AUGBL' OF STRUCTURE <bs*k> TO <any>.
IF sy-subrc EQ 0.
MOVE <any> TO s_data-augbl.
ENDIF.
APPEND s_data TO t_data.
CLEAR: s_data.
ENDLOOP.
BREAK-POINT.
REPORT ztest_field_symbol.
PARAMETERS:
p_bukrs TYPE bseg-bukrs,
p_gjahr TYPE bseg-gjahr,
p_belnr TYPE bseg-belnr.
DATA:
t_bsak TYPE STANDARD TABLE OF bsak,
t_bsik TYPE STANDARD TABLE OF bsik,
BEGIN OF t_data OCCURS 0,
belnr TYPE belnr_d,
augbl TYPE augbl,
END OF t_data,
s_data LIKE LINE OF t_data.
FIELD-SYMBOLS:
<bs*k_tab> TYPE ANY TABLE,
<bs*k> TYPE any,
<any> TYPE any.
REFRESH: t_bsak[], t_bsik[].
SELECT * FROM bsak INTO TABLE t_bsak
WHERE augbl EQ p_belnr
AND bukrs EQ p_bukrs
AND belnr NE p_belnr.
IF sy-subrc NE 0.
SELECT * FROM bsik INTO TABLE t_bsik
WHERE bukrs EQ p_bukrs
AND belnr EQ p_belnr
AND gjahr EQ p_gjahr.
IF sy-subrc EQ 0.
ENDIF.
ENDIF.
BREAK-POINT.
IF t_bsak[] IS NOT INITIAL.
ASSIGN TABLE FIELD t_bsak TO <bs*k_tab>.
ELSE.
ASSIGN TABLE FIELD t_bsik TO <bs*k_tab>.
ENDIF.
REFRESH: t_data[]. CLEAR: s_data.
UNASSIGN <bs*k>.
LOOP AT <bs*k_tab> ASSIGNING <bs*k>.
UNASSIGN: <any>.
ASSIGN COMPONENT 'BELNR' OF STRUCTURE <bs*k> TO <any>.
IF sy-subrc EQ 0.
MOVE <any> TO s_data-belnr.
ENDIF.
UNASSIGN: <any>.
ASSIGN COMPONENT 'AUGBL' OF STRUCTURE <bs*k> TO <any>.
IF sy-subrc EQ 0.
MOVE <any> TO s_data-augbl.
ENDIF.
APPEND s_data TO t_data.
CLEAR: s_data.
ENDLOOP.
BREAK-POINT.
Llenar RANGO con valores de SET DE DATOS (ABAP, GS01,GS02)
Otra forma de llenar un RANGO con los valores que agregamos a un SET DE DATOS creados mediante la transacción GS01 y GS02.
REPORT ztest_set.
DATA:
v_setname TYPE setheader-setname VALUE 'Z_DS_EXTZONE',
s_setheader TYPE setheader,
t_setleaf TYPE STANDARD TABLE OF setleaf.
FIELD-SYMBOLS:
<sl> TYPE setleaf.
RANGES: r_zexcd FOR t7cl13-zexcd.
CLEAR: s_setheader, r_zexcd. REFRESH: t_setleaf[], r_zexcd[].
SELECT SINGLE * FROM setheader INTO s_setheader
WHERE setname EQ v_setname.
IF sy-subrc EQ 0.
SELECT * FROM setleaf INTO TABLE t_setleaf
WHERE setclass EQ s_setheader-setclass
AND subclass EQ s_setheader-subclass
AND setname EQ s_setheader-setname.
IF sy-subrc EQ 0.
UNASSIGN: <sl>.
LOOP AT t_setleaf ASSIGNING <sl>.
r_zexcd-sign = <sl>-valsign.
r_zexcd-option = <sl>-valoption.
r_zexcd-low = <sl>-valfrom.
r_zexcd-high = <sl>-valto.
APPEND r_zexcd.
CLEAR r_zexcd.
ENDLOOP.
ENDIF.
ENDIF.
DATA:
v_setname TYPE setheader-setname VALUE 'Z_DS_EXTZONE',
s_setheader TYPE setheader,
t_setleaf TYPE STANDARD TABLE OF setleaf.
FIELD-SYMBOLS:
<sl> TYPE setleaf.
RANGES: r_zexcd FOR t7cl13-zexcd.
CLEAR: s_setheader, r_zexcd. REFRESH: t_setleaf[], r_zexcd[].
SELECT SINGLE * FROM setheader INTO s_setheader
WHERE setname EQ v_setname.
IF sy-subrc EQ 0.
SELECT * FROM setleaf INTO TABLE t_setleaf
WHERE setclass EQ s_setheader-setclass
AND subclass EQ s_setheader-subclass
AND setname EQ s_setheader-setname.
IF sy-subrc EQ 0.
UNASSIGN: <sl>.
LOOP AT t_setleaf ASSIGNING <sl>.
r_zexcd-sign = <sl>-valsign.
r_zexcd-option = <sl>-valoption.
r_zexcd-low = <sl>-valfrom.
r_zexcd-high = <sl>-valto.
APPEND r_zexcd.
CLEAR r_zexcd.
ENDLOOP.
ENDIF.
ENDIF.
jueves, 7 de abril de 2016
Form para escribir un archivo respetando n espacios en blanco a la izquierda. (SAP-ABAP- TRANSFER ... TO...)
*&---------------------------------------------------------------------*
*& Form F_TRANSFER_FILE
*&---------------------------------------------------------------------*
FORM f_transfer_file
TABLES pt_outtab LIKE t_ot " Tabla con datos a tranferir
USING pv_target TYPE eps2path " Ruta concatenada con nombre de archivo
" (ej. \\10.170.80.101\BANCO\ARCHIVO_BANCO.txt )
CHANGING pv_subrc.
FIELD-SYMBOLS:
<ot> LIKE LINE OF pt_outtab.
DATA:
lv_len TYPE i VALUE 300. " Largo de líne a escribir
OPEN DATASET pv_target FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF pt_outtab[] IS NOT INITIAL.
UNASSIGN: <ot>.
LOOP AT pt_outtab ASSIGNING <ot>.
" Si la línea contiene 200 caracteres, en el archivo generado, lo restante (100) será con " espacios en blanco
TRANSFER <ot> TO pv_target LENGTH lv_len.
ENDLOOP.
ENDIF.
CLOSE DATASET pv_target.
MOVE sy-subrc TO pv_subrc.
ENDFORM. " F_TRANSFER_FILE
*& Form F_TRANSFER_FILE
*&---------------------------------------------------------------------*
FORM f_transfer_file
TABLES pt_outtab LIKE t_ot " Tabla con datos a tranferir
USING pv_target TYPE eps2path " Ruta concatenada con nombre de archivo
" (ej. \\10.170.80.101\BANCO\ARCHIVO_BANCO.txt )
CHANGING pv_subrc.
FIELD-SYMBOLS:
<ot> LIKE LINE OF pt_outtab.
DATA:
lv_len TYPE i VALUE 300. " Largo de líne a escribir
OPEN DATASET pv_target FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF pt_outtab[] IS NOT INITIAL.
UNASSIGN: <ot>.
LOOP AT pt_outtab ASSIGNING <ot>.
" Si la línea contiene 200 caracteres, en el archivo generado, lo restante (100) será con " espacios en blanco
TRANSFER <ot> TO pv_target LENGTH lv_len.
ENDLOOP.
ENDIF.
CLOSE DATASET pv_target.
MOVE sy-subrc TO pv_subrc.
ENDFORM. " F_TRANSFER_FILE
miércoles, 31 de diciembre de 2014
Función para obtener atributos de un ELEMENTO DE DATOS o campos de una TABLA (SAP-ABAP-Funciones)
Estimados, esta función puede ser útil:
lv_tabname = 'MARA'. "(o BUKRS por ejemplo)
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = lv_tabname " Elemento de datos o tabla
langu = sy-langu
all_types = 'X'
IMPORTING
dfies_wa = ls_dfies_wa " Retorna atributos del obejto
TABLES
dfies_tab = lt_dfies_tab[] " Retorna campos de una tabla
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
* Implement suitable error handling here
ENDIF.
lv_tabname = 'MARA'. "(o BUKRS por ejemplo)
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = lv_tabname " Elemento de datos o tabla
langu = sy-langu
all_types = 'X'
IMPORTING
dfies_wa = ls_dfies_wa " Retorna atributos del obejto
TABLES
dfies_tab = lt_dfies_tab[] " Retorna campos de una tabla
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
* Implement suitable error handling here
ENDIF.
lunes, 13 de octubre de 2014
FORM para formatear RUT (ABAP... RUT= identificador fiscal)
Llamada ejemplo:
paval = '112272682'.
PERFORM f_rut USING paval CHANGING rut.
La variable rut será igual a 11.227.268-2.
viernes, 25 de julio de 2014
Trabajando con Ordenes de Trasporte de Copia (SAP-ABAP-Funcionalidad)
A menudo debemos transportar Ordenes de Transporte al ambiente de QAS desde Dasarrollo para hacer pruebas. Para no liberar la Orden que hemos creado, la cual posteriormente pasara también a QAS y luego a Producción, podemos crear una OT de "Copia", la cual tiene la particularidad que termina su ciclo en el sistema de destino elegido al crearla, para ello haremos lo siguiente:
1) Creamos la OT de Copia (Trx SE09 o SE10):
1) Creamos la OT de Copia (Trx SE09 o SE10):
Debemos poner el sistema destino con su mandante correspondiente y grabamos....
Por otra parte, tenemos la OT Original o Principal..... de esta
, tomamos la tarea o tareas, la(s) cual(es) incluiremos en nuestra OT de Copia....
, tomamos la tarea o tareas, la(s) cual(es) incluiremos en nuestra OT de Copia....
Se incluye la tarea en la OT de Copia....y aceptar...
Este procedimiento lo podemos ejecutar cuantas veces sea necesario, así cuando liberemos la OT Original, será solo una OT para el proyecto o mejora que incluirá todos los objetos necesarios.
Suscribirse a:
Entradas (Atom)







