*&---------------------------------------------------------------------*
*& 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
jueves, 7 de abril de 2016
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.
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'
Suscribirse a:
Entradas (Atom)











