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.
miércoles, 31 de diciembre de 2014
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.
jueves, 24 de julio de 2014
Función para obtener las Ordenes de Transporte asociadas a un Objeto (SAP-ABAP-Funciones)
Primero, debemos crear la siguiente estructura (si cambian el nombre de la estructura, deberán cambiarlo en el código también):
Esto es solo para agregar la descripción de la OT.
Y finalmente agregamos este código en "Cód.fte.":
FIELD-SYMBOLS:
<fs_head> TYPE zcfcl_es_e070,
<fs_e070> TYPE e070.
DATA:
lt_e070 TYPE TABLE OF e070,
lt_e071 TYPE TABLE OF e071,
lt_e07t TYPE STANDARD TABLE OF e07t,
ls_e07t TYPE e07t,
ls_head TYPE zcfcl_es_e070.
CHECK iv_obj_name IS NOT INITIAL.
REFRESH: lt_e071[], et_detail[], lt_e070, et_head[].
SELECT * FROM e071 INTO TABLE lt_e071
WHERE obj_name EQ iv_obj_name.
IF sy-subrc EQ 0.
SELECT * FROM e071 INTO TABLE et_detail
FOR ALL ENTRIES IN lt_e071
WHERE trkorr EQ lt_e071-trkorr.
IF sy-subrc EQ 0.
SELECT * FROM e070 INTO TABLE lt_e070
FOR ALL ENTRIES IN lt_e071
WHERE trkorr EQ lt_e071-trkorr.
IF sy-subrc EQ 0.
SELECT * FROM e070 INTO CORRESPONDING FIELDS OF TABLE et_head
FOR ALL ENTRIES IN lt_e070
WHERE trkorr EQ lt_e070-strkorr.
IF sy-subrc NE 0.
UNASSIGN: <fs_e070>.
CLEAR: ls_head.
LOOP AT lt_e070 ASSIGNING <fs_e070>.
MOVE-CORRESPONDING <fs_e070> TO ls_head.
APPEND ls_head TO et_head.
CLEAR: ls_head.
ENDLOOP.
ENDIF.
SELECT * FROM e07t INTO TABLE lt_e07t
FOR ALL ENTRIES IN et_head
WHERE trkorr EQ et_head-trkorr
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
UNASSIGN <fs_head>.
LOOP AT et_head ASSIGNING <fs_head>.
CLEAR: ls_e07t.
READ TABLE lt_e07t INTO ls_e07t WITH KEY trkorr = <fs_head>-trkorr.
IF sy-subrc EQ 0.
<fs_head>-as4text = ls_e07t-as4text.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
<fs_head> TYPE zcfcl_es_e070,
<fs_e070> TYPE e070.
DATA:
lt_e070 TYPE TABLE OF e070,
lt_e071 TYPE TABLE OF e071,
lt_e07t TYPE STANDARD TABLE OF e07t,
ls_e07t TYPE e07t,
ls_head TYPE zcfcl_es_e070.
CHECK iv_obj_name IS NOT INITIAL.
REFRESH: lt_e071[], et_detail[], lt_e070, et_head[].
SELECT * FROM e071 INTO TABLE lt_e071
WHERE obj_name EQ iv_obj_name.
IF sy-subrc EQ 0.
SELECT * FROM e071 INTO TABLE et_detail
FOR ALL ENTRIES IN lt_e071
WHERE trkorr EQ lt_e071-trkorr.
IF sy-subrc EQ 0.
SELECT * FROM e070 INTO TABLE lt_e070
FOR ALL ENTRIES IN lt_e071
WHERE trkorr EQ lt_e071-trkorr.
IF sy-subrc EQ 0.
SELECT * FROM e070 INTO CORRESPONDING FIELDS OF TABLE et_head
FOR ALL ENTRIES IN lt_e070
WHERE trkorr EQ lt_e070-strkorr.
IF sy-subrc NE 0.
UNASSIGN: <fs_e070>.
CLEAR: ls_head.
LOOP AT lt_e070 ASSIGNING <fs_e070>.
MOVE-CORRESPONDING <fs_e070> TO ls_head.
APPEND ls_head TO et_head.
CLEAR: ls_head.
ENDLOOP.
ENDIF.
SELECT * FROM e07t INTO TABLE lt_e07t
FOR ALL ENTRIES IN et_head
WHERE trkorr EQ et_head-trkorr
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
UNASSIGN <fs_head>.
LOOP AT et_head ASSIGNING <fs_head>.
CLEAR: ls_e07t.
READ TABLE lt_e07t INTO ls_e07t WITH KEY trkorr = <fs_head>-trkorr.
IF sy-subrc EQ 0.
<fs_head>-as4text = ls_e07t-as4text.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
martes, 17 de junio de 2014
Form para separar prefijo y folio del campo XBLNR (SAP - ABAP - Funciones)
Para algunos países se utilizan los folio pre-impresos o pre-numerados, a continuación una form que nos hace el split del prefijo y el folio sobre el campo XBLNR:
DATA: lv_xblnr TYPE xblnr_v1.
lv_xblnr = <fs_vbrk>-xblnr.
PERFORM f_split_xblnr USING lv_bukrs " Sociedad
CHANGING lv_xblnr. " Nro. Docto. Ref.
*&--------------------------------------------------------------*
*& Form F_SPLIT_XBLNR
*&--------------------------------------------------------------*
FORM f_split_xblnr USING p_v_bukrs TYPE t001-bukrs
CHANGING p_v_folio.
DATA: lv_rgtno TYPE idcn_loma-rgtno,
lv_invno TYPE idcn_loma-invfr,
lv_xblnr TYPE bkpf-xblnr,
lv_invtp TYPE idcn_loma-invtp.
CHECK p_v_folio IS NOT INITIAL.
lv_xblnr = p_v_folio.
CALL FUNCTION 'XBLNR_BUILD_AND_SPLIT_PECL' " PECL = Perú y Chile
EXPORTING
i_bukrs = p_v_bukrs
* I_BUILD =
* I_RGTNO =
* I_INVNO =
i_xblnr = lv_xblnr
* I_INVTP =
IMPORTING
e_rgtno = lv_rgtno " Nos retorna el prefijo
e_invno = lv_invno " Nos retorna el folio
* e_xblnr =
e_invtp = lv_invtp
EXCEPTIONS
* PARAMETER_WRONG = 1
not_found = 2
xblnr_format_wrong = 3
OTHERS = 4.
IF sy-subrc <> 0 OR lv_invno IS INITIAL. " Note 356790
RAISE lot_not_found.
ELSE.
p_v_folio = lv_invno.
ENDIF.
ENDFORM. " F_SPLIT_XBLNR
También existe una función que no es específica para algún país:
XBLNR_BUILD_AND_SPLIT
DATA: lv_xblnr TYPE xblnr_v1.
lv_xblnr = <fs_vbrk>-xblnr.
PERFORM f_split_xblnr USING lv_bukrs " Sociedad
CHANGING lv_xblnr. " Nro. Docto. Ref.
*&--------------------------------------------------------------*
*& Form F_SPLIT_XBLNR
*&--------------------------------------------------------------*
FORM f_split_xblnr USING p_v_bukrs TYPE t001-bukrs
CHANGING p_v_folio.
DATA: lv_rgtno TYPE idcn_loma-rgtno,
lv_invno TYPE idcn_loma-invfr,
lv_xblnr TYPE bkpf-xblnr,
lv_invtp TYPE idcn_loma-invtp.
CHECK p_v_folio IS NOT INITIAL.
lv_xblnr = p_v_folio.
CALL FUNCTION 'XBLNR_BUILD_AND_SPLIT_PECL' " PECL = Perú y Chile
EXPORTING
i_bukrs = p_v_bukrs
* I_BUILD =
* I_RGTNO =
* I_INVNO =
i_xblnr = lv_xblnr
* I_INVTP =
IMPORTING
e_rgtno = lv_rgtno " Nos retorna el prefijo
e_invno = lv_invno " Nos retorna el folio
* e_xblnr =
e_invtp = lv_invtp
EXCEPTIONS
* PARAMETER_WRONG = 1
not_found = 2
xblnr_format_wrong = 3
OTHERS = 4.
IF sy-subrc <> 0 OR lv_invno IS INITIAL. " Note 356790
RAISE lot_not_found.
ELSE.
p_v_folio = lv_invno.
ENDIF.
ENDFORM. " F_SPLIT_XBLNR
También existe una función que no es específica para algún país:
XBLNR_BUILD_AND_SPLIT
martes, 1 de abril de 2014
Reemplazar caracteres en una cadena con TRANSLATE (SAP-ABAP)
Ejemplo:
DATA:
lv_ean(10) VALUE 'A1D1B1C1A1',
lv_change(54) VALUE 'A B C D '.
La sentencia TRANSLATE, para este caso, reemplaza cada caracter contenido en la variable LV_CHANGE, por el caracter que le sigue (espacio para todas las letras):
TRANSLATE lv_ean USING lv_change.
El resultado inicial sería: lv_ean = ' 1 1 1 1 1'
CONDENSE lv_ean NO-GAPS.
El resultado final sería: lv_ean = '11111'
DATA:
lv_ean(10) VALUE 'A1D1B1C1A1',
lv_change(54) VALUE 'A B C D '.
La sentencia TRANSLATE, para este caso, reemplaza cada caracter contenido en la variable LV_CHANGE, por el caracter que le sigue (espacio para todas las letras):
TRANSLATE lv_ean USING lv_change.
El resultado inicial sería: lv_ean = ' 1 1 1 1 1'
CONDENSE lv_ean NO-GAPS.
El resultado final sería: lv_ean = '11111'
lunes, 24 de marzo de 2014
Visualizar formulario sin cuadro de diálogo (SAP - ABAP - SMARTFORMS)
La siguiente parametrización permite la visualización previa de un formulario sin cuadro de diálogo:
ls_control_param-no_dialog = abap_on. " SIN VENTANA DIALOGO
ls_control_param-preview = abap_on. " CON VISUALIZAC.PREVIA
ls_control_param-device = 'PRINTER'.
ls_output_options-tddest = 'LCL'. " DISPOSITIVO DE SALIDA
ls_output_options-tdnoprint = abap_off. " IMPRIMIR
ls_output_options-tdarmod = '1'. " SOLO IMPRIMIR
CALL FUNCTION lv_fm_name
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
control_parameters = ls_control_parameters
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
output_options = ls_output_options
user_settings = abap_off
is_xekko = p_s_xekko
is_xpekko = p_s_xpekko
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* job_output_info = ls_job_output_info
* JOB_OUTPUT_OPTIONS =
TABLES
it_xekpa = p_t_xekpa[]
it_xekpo = p_t_xekpo[]
it_xpekpo = p_t_xpekpo[]
it_xeket = p_t_xeket[]
it_xekkn = p_t_xekkn[]
it_xekek = p_t_xekek[]
it_xekeh = p_t_xekeh[]
it_xtkomv = p_t_xtkomv[]
it_detocn = p_t_detcon[]
it_serv = p_t_detser[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
ls_control_param-no_dialog = abap_on. " SIN VENTANA DIALOGO
ls_control_param-preview = abap_on. " CON VISUALIZAC.PREVIA
ls_control_param-device = 'PRINTER'.
ls_output_options-tddest = 'LCL'. " DISPOSITIVO DE SALIDA
ls_output_options-tdnoprint = abap_off. " IMPRIMIR
ls_output_options-tdarmod = '1'. " SOLO IMPRIMIR
CALL FUNCTION lv_fm_name
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
control_parameters = ls_control_parameters
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
output_options = ls_output_options
user_settings = abap_off
is_xekko = p_s_xekko
is_xpekko = p_s_xpekko
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* job_output_info = ls_job_output_info
* JOB_OUTPUT_OPTIONS =
TABLES
it_xekpa = p_t_xekpa[]
it_xekpo = p_t_xekpo[]
it_xpekpo = p_t_xpekpo[]
it_xeket = p_t_xeket[]
it_xekkn = p_t_xekkn[]
it_xekek = p_t_xekek[]
it_xekeh = p_t_xekeh[]
it_xtkomv = p_t_xtkomv[]
it_detocn = p_t_detcon[]
it_serv = p_t_detser[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
Imprimir SMARTFORMS solo en SPOOL (SAP - ABAP - SMARTFORMS)
Esta parametrización permite imprimir un formulario directamente al SPOOL sin opción a previsualización:
ls_composer_param-tdnoprev = abap_on. " SIN VISUALIZ. PREVIA
ls_composer_param-tdnoprint = abap_off. " NO IMPRIMIR
ls_composer_param-tdnoarch = abap_off. " NO ARCHIVAR
ls_composer_param-tddest = 'LOCAL'. " DISPOSITIVO DE SALIDA
ls_composer_param-tdimmed = abap_off. " SIN SALIDA INMEDIATA
ls_composer_param-tddelete = abap_off. " NO BORRAR TRAS SALIDA
ls_composer_param-tdnewid = abap_on. " NUEVA ORDEN SPOOL
ls_composer_param-tdfinal = abap_on. " CERRAR ORDEN DE SPOOL
ls_composer_param-tdarmod = '1'. " SOLO IMPRIMIR
ls_composer_param-tdcopies = '001'. " CANTIDAD DE COPIAS
ls_control_param-no_dialog = abap_on. " SIN VENTANA DIALOGO
ls_control_param-preview = abap_off. " SIN VISUALIZ. PREVIA
ls_control_param-device = 'PRINTER'." DISPOSITIVO
CALL FUNCTION lv_fname
EXPORTING
* archive_index = toa_dara
* archive_parameters = arc_params
control_parameters = ls_control_param
output_options = ls_composer_param
user_settings = abap_off
p_gjahr = p_gjahr
TABLES
gt_cabecera = gt_head[]
gt_detalle = gt_detail[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE e006(zcfcl_fi_0003).
ENDIF.
ls_composer_param-tdnoprint = abap_off. " NO IMPRIMIR
ls_composer_param-tdnoarch = abap_off. " NO ARCHIVAR
ls_composer_param-tddest = 'LOCAL'. " DISPOSITIVO DE SALIDA
ls_composer_param-tdimmed = abap_off. " SIN SALIDA INMEDIATA
ls_composer_param-tddelete = abap_off. " NO BORRAR TRAS SALIDA
ls_composer_param-tdnewid = abap_on. " NUEVA ORDEN SPOOL
ls_composer_param-tdfinal = abap_on. " CERRAR ORDEN DE SPOOL
ls_composer_param-tdarmod = '1'. " SOLO IMPRIMIR
ls_composer_param-tdcopies = '001'. " CANTIDAD DE COPIAS
ls_control_param-no_dialog = abap_on. " SIN VENTANA DIALOGO
ls_control_param-preview = abap_off. " SIN VISUALIZ. PREVIA
ls_control_param-device = 'PRINTER'." DISPOSITIVO
CALL FUNCTION lv_fname
EXPORTING
* archive_index = toa_dara
* archive_parameters = arc_params
control_parameters = ls_control_param
output_options = ls_composer_param
user_settings = abap_off
p_gjahr = p_gjahr
TABLES
gt_cabecera = gt_head[]
gt_detalle = gt_detail[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE e006(zcfcl_fi_0003).
ENDIF.
lunes, 27 de enero de 2014
Función para obtener los impuestos según país (SAP-ABAP)
Import de la función:
Tabla de retorno de la función:
Creación de estructura en la SE11:
Código fuente de la función:
DATA: lt_data TYPE STANDARD TABLE OF zcfcl_fi_es_tax,
ls_data TYPE zcfcl_fi_es_tax.
DATA: ls_t007a TYPE t007a,
lt_t007a TYPE STANDARD TABLE OF t007a,
lt_ftaxp TYPE STANDARD TABLE OF ftaxp,
ls_ftaxp TYPE ftaxp,
lv_kalsm TYPE t005-kalsm,
lv_txjcd TYPE txjcd.
DATA: lv_valor TYPE p DECIMALS 2.
CONSTANTS: lc_fix_kappl TYPE kappl VALUE 'TX'.
CLEAR lv_kalsm.
REFRESH: lt_t007a[], lt_ftaxp[], et_data[].
SELECT SINGLE kalsm FROM t005 INTO lv_kalsm
WHERE land1 EQ iv_land1.
IF sy-subrc EQ 0.
CLEAR lv_txjcd.
SELECT SINGLE txjcd FROM ttxj INTO lv_txjcd
WHERE kalsm EQ lv_kalsm.
IF sy-subrc NE 0 OR lv_txjcd IS INITIAL.
MOVE 'X' TO lv_txjcd.
ENDIF.
SELECT * FROM t007a INTO TABLE lt_t007a
WHERE kalsm EQ lv_kalsm.
IF sy-subrc EQ 0.
CLEAR ls_t007a.
LOOP AT lt_t007a INTO ls_t007a.
CALL FUNCTION 'GET_TAX_PERCENTAGE'
EXPORTING
aland = iv_land1
datab = sy-datum
mwskz = ls_t007a-mwskz
txjcd = lv_txjcd
TABLES
t_ftaxp = lt_ftaxp.
IF lt_ftaxp[] IS NOT INITIAL.
CLEAR ls_ftaxp.
READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_ftaxp TO ls_data.
MOVE ls_t007a-mwskz TO ls_data-mwskz.
lv_valor = ls_ftaxp-kbetr / 10.
WRITE lv_valor TO ls_data-tax DECIMALS 2 .
REPLACE ALL OCCURRENCES OF '.' IN ls_data-tax WITH ','.
CONDENSE ls_data-tax.
APPEND ls_data TO lt_data.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
MOVE lt_data[] TO et_data[].
Tabla de retorno de la función:
Creación de estructura en la SE11:
Código fuente de la función:
DATA: lt_data TYPE STANDARD TABLE OF zcfcl_fi_es_tax,
ls_data TYPE zcfcl_fi_es_tax.
DATA: ls_t007a TYPE t007a,
lt_t007a TYPE STANDARD TABLE OF t007a,
lt_ftaxp TYPE STANDARD TABLE OF ftaxp,
ls_ftaxp TYPE ftaxp,
lv_kalsm TYPE t005-kalsm,
lv_txjcd TYPE txjcd.
DATA: lv_valor TYPE p DECIMALS 2.
CONSTANTS: lc_fix_kappl TYPE kappl VALUE 'TX'.
CLEAR lv_kalsm.
REFRESH: lt_t007a[], lt_ftaxp[], et_data[].
SELECT SINGLE kalsm FROM t005 INTO lv_kalsm
WHERE land1 EQ iv_land1.
IF sy-subrc EQ 0.
CLEAR lv_txjcd.
SELECT SINGLE txjcd FROM ttxj INTO lv_txjcd
WHERE kalsm EQ lv_kalsm.
IF sy-subrc NE 0 OR lv_txjcd IS INITIAL.
MOVE 'X' TO lv_txjcd.
ENDIF.
SELECT * FROM t007a INTO TABLE lt_t007a
WHERE kalsm EQ lv_kalsm.
IF sy-subrc EQ 0.
CLEAR ls_t007a.
LOOP AT lt_t007a INTO ls_t007a.
CALL FUNCTION 'GET_TAX_PERCENTAGE'
EXPORTING
aland = iv_land1
datab = sy-datum
mwskz = ls_t007a-mwskz
txjcd = lv_txjcd
TABLES
t_ftaxp = lt_ftaxp.
IF lt_ftaxp[] IS NOT INITIAL.
CLEAR ls_ftaxp.
READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_ftaxp TO ls_data.
MOVE ls_t007a-mwskz TO ls_data-mwskz.
lv_valor = ls_ftaxp-kbetr / 10.
WRITE lv_valor TO ls_data-tax DECIMALS 2 .
REPLACE ALL OCCURRENCES OF '.' IN ls_data-tax WITH ','.
CONDENSE ls_data-tax.
APPEND ls_data TO lt_data.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
MOVE lt_data[] TO et_data[].
Form para obtener texto (SAP-ABAP... FM READ_TEXT)
*&---------------------------------------------------------------------*
*& Form F_GET_TEXT
*&---------------------------------------------------------------------*
FORM f_get_text USING p_v_obj TYPE tdobject
p_v_id TYPE tdid
p_v_langu TYPE spras
p_v_name TYPE tdobname
CHANGING p_v_string TYPE string.
DATA: lt_lines_tab TYPE efg_tab_tline,
ls_line_es TYPE tline,
lv_texto_line TYPE string.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = p_v_id
language = p_v_langu
name = p_v_name
object = p_v_obj
TABLES
lines = lt_lines_tab
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
LOOP AT lt_lines_tab INTO ls_line_es.
IF sy-tabix EQ 1.
p_v_string = ls_line_es-tdline.
ELSE.
CONDENSE ls_line_es-tdline.
CONCATENATE p_v_string ls_line_es-tdline INTO p_v_string SEPARATED BY space.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " F_GET_TEXT
LLAMADA A LA FORM: en este caso es un texto de posición.
DATA: lv_string TYPE string,
lv_name TYPE tdobname, CLEAR: lv_string, lv_name.
CONCATENATE <fs_item>-vbeln <fs_item>-vbpos INTO lv_name.
PERFORM f_get_text USING 'VBBP'
'0001'
syst-langu
lv_name
CHANGING lv_string.
*& Form F_GET_TEXT
*&---------------------------------------------------------------------*
FORM f_get_text USING p_v_obj TYPE tdobject
p_v_id TYPE tdid
p_v_langu TYPE spras
p_v_name TYPE tdobname
CHANGING p_v_string TYPE string.
DATA: lt_lines_tab TYPE efg_tab_tline,
ls_line_es TYPE tline,
lv_texto_line TYPE string.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = p_v_id
language = p_v_langu
name = p_v_name
object = p_v_obj
TABLES
lines = lt_lines_tab
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
LOOP AT lt_lines_tab INTO ls_line_es.
IF sy-tabix EQ 1.
p_v_string = ls_line_es-tdline.
ELSE.
CONDENSE ls_line_es-tdline.
CONCATENATE p_v_string ls_line_es-tdline INTO p_v_string SEPARATED BY space.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " F_GET_TEXT
LLAMADA A LA FORM: en este caso es un texto de posición.
DATA: lv_string TYPE string,
lv_name TYPE tdobname, CLEAR: lv_string, lv_name.
CONCATENATE <fs_item>-vbeln <fs_item>-vbpos INTO lv_name.
PERFORM f_get_text USING 'VBBP'
'0001'
syst-langu
lv_name
CHANGING lv_string.
Suscribirse a:
Entradas (Atom)