jueves, 8 de noviembre de 2012

CAJAS Y LINEAS SAPSCRIPT

/* Las coordenadas las toma desde la página
/: POSITION PAGE

/* Las coordenadas las toma desde la ventana
/: POSITION WINDOW

/* Te hace una caja por el perimetro de la ventana
/: BOX FRAME 10 TW

/* Es donde se le da el grosor de las linea. 10, 20, 30,…
/: FRAME 10 TW

/* Rellena el fondo de una ventana con una escala de grises del 10%
/: BOX INTENSITY 10

/* Ejemplo de líneas horizontales
/: BOX YPOS '2.6' CM WIDTH '19.0' CM HEIGHT '0.0' CM FRAME 10 TW

/* Ejemplo de líneas verticales
/: BOX XPOS '2.5' CM WIDTH 0 TW HEIGHT '2.6' CM FRAME 10 TW

/* Ejemplo de Cajas
/: BOX XPOS '4.00' CM YPOS '1.10' CM WIDTH '15.0' CM HEIGHT '0.50' CM FRAME 10 TW
/: BOX XPOS '4.00' CM YPOS '1.10' CM WIDTH '15.0' CM HEIGHT '0.50' CM INTENSITY 20

jueves, 25 de octubre de 2012

ME21N ME22N ME23N - SY-TCODE

Para obtener el "verdadero" SY-TCODE , usar la tabla T160-TCODE del programa SAPLMEPO.

SAPSCRIPT - CAJAS Y LINEAS

/* Las coordenadas las toma desde la página
/: POSITION PAGE

/* Las coordenadas las toma desde la ventana
/: POSITION WINDOW

/* Te hace una caja por el perimetro de la ventana
/: BOX FRAME 10 TW

/* Es donde se le da el grosor de las linea. 10, 20, 30,…
/: FRAME 10 TW

/* Rellena el fondo de una ventana con una escala de grises del 10%
/: BOX INTENSITY 10

/* Ejemplo de líneas horizontales
/: BOX YPOS '2.6' CM WIDTH '19.0' CM HEIGHT '0.0' CM FRAME 10 TW

/* Ejemplo de líneas verticales
/: BOX XPOS '2.5' CM WIDTH 0 TW HEIGHT '2.6' CM FRAME 10 TW

/* Ejemplo de Cajas
/: BOX XPOS '4.00' CM YPOS '1.10' CM WIDTH '15.0' CM HEIGHT '0.50' CM FRAME 10 TW
/: BOX XPOS '4.00' CM YPOS '1.10' CM WIDTH '15.0' CM HEIGHT '0.50' CM INTENSITY 20

miércoles, 11 de julio de 2012

ASSIGN COMPONENT

Ejemplos Varios ASSIGN COMPONENT


EJEMPLO 1

REPORT ZTEST.
* OBTIENE COMPONENTES DE ESTRUCTURA PA0001
data: l_index(2) type n,
l_string type string,
l_0033 type p0033.
field-symbols type any.
data: descr_struc_ref type ref to cl_abap_structdescr,
lt_components type abap_compdescr_tab,
ls_components like line of lt_components.
descr_struc_ref ?= cl_abap_typedescr=>describe_by_name('PA0001').
lt_components = descr_struc_ref->components.
loop at lt_components into ls_components.
write:/ ls_components-name.
endloop.



EJEMPLO 2

REPORT ZTEST.
* OBTIENE COMPONENTES DE ESTRUCTURA LOCAL GS_RECORD
types: begin of ty_rec,
campo1(20) type c,
campo2(34) type c,
end of ty_rec.
data gs_record type ty_rec.
data: l_index(2) type n,
l_string type string,
l_0033 type p0033.
field-symbols type any.
data: descr_struc_ref type ref to cl_abap_structdescr,
lt_components type abap_compdescr_tab,
ls_components like line of lt_components.
descr_struc_ref ?= cl_abap_typedescr=>describe_by_data( gs_record ).

lt_components = descr_struc_ref->components.
loop at lt_components into ls_components.
write:/ ls_components-name.
endloop.



EJEMPLO 3

si tenemos

data: begin of gs_form_data,
ZTABLE(25),
ZROW(10),
ZCOLUMN(25),
ZVALUE(50),
end of gs_form_data.
data gt_form_data like table of gs_form_data with header line.
TYPES: BEGIN OF ty_data_1,
pos(3) TYPE n,
org(30), "org id/name
total TYPE i,
total_w TYPE i, "total women
total_m TYPE i, "total men
total_mi TYPE i, "total minorities
total_b TYPE i, "total black
total_h TYPE i, "total hispanic
total_a TYPE i, "total asiam
total_i TYPE i, "total Am.Indian/Alaskian
END OF ty_data_1.
TYPES ty_t_data_1 TYPE TABLE OF ty_data_1.
DATA gs_data_1 TYPE ty_data_1.
DATA gt_data_1 TYPE ty_t_data_1.
* Queremos pasar el contenido de gt_data_1 a la tabla GT_FORM_DATA
DATA ld_tabix LIKE sy-tabix.
LOOP AT gt_data_1 INTO gs_data_1.
ld_tabix = sy-tabix.
PERFORM get_field_values USING gs_data_1
'GS_DATA_1'
ld_tabix.
ENDLOOP.

donde

FORM get_field_values USING gs_data_1 TYPE data
p_name TYPE string "Nombre de la tabla
p_tabix TYPE i.
DATA: l_index(2) TYPE n,
l_string TYPE string.
FIELD-SYMBOLS TYPE ANY.
DATA: descr_struc_ref TYPE REF TO cl_abap_structdescr,
lt_components TYPE abap_compdescr_tab,
ls_components LIKE LINE OF lt_components.
DATA lr_tabledescr TYPE REF TO cl_abap_tabledescr.
descr_struc_ref ?= cl_abap_typedescr=>describe_by_data( gs_data_1 ).
*lr_tabledescr ?= cl_abap_typedescr=>describe_by_data( ld_t ).
lt_components = descr_struc_ref->components.
LOOP AT lt_components INTO ls_components.
CONCATENATE p_name '-' ls_components-name INTO l_string.
ASSIGN (l_string) TO .
gt_form_data-ztable = p_name.
gt_form_data-zcolumn = ls_components-name.
gt_form_data-zrow = p_tabix.
gt_form_data-zvalue = .
APPEND gt_form_data.
* l_string = ls_components-name.
ENDLOOP.
ENDFORM.


* Ahora la funcion "inversa" de GT_FORM_DATA a GT_DATA_1

DEFINE mc_read_tables.
clear gt_&1.
clear gs_&1.
sort gt_form_data by ztable zrow.
loop at gt_form_data into wa where ztable = &2.
at new zrow.
if gs_&1 is not initial.
append gs_&1 to gt_&1.
clear gs_&1.
endif.
endat.
concatenate 'GS_' wa-ztable+3
'-'
wa-zcolumn
into l_string.
assign (l_string) to .
= wa-zvalue.
endloop.
if sy-subrc = 0.
append gs_&1 to gt_&1.
clear gs_&1.
endif.
END-OF-DEFINITION.
DATA l_string TYPE string.
FIELD-SYMBOLS .
mc_read_tables data_1 'GT_DATA_1'.

lunes, 11 de junio de 2012

Rango de Números en SAP

Tx. SNRO (Act. Rango de números)





Desde esta transacción pueden crear/modificar o visualizar un rango.




Objeto         - Nombre del objeto rango de números
Utilización
Un objeto de rango de números define las propiedades características de intervalos de rangos de números relacionados entre sí desde el punto de vista empresarial, tales como p.e. la longitud de los números, la subdivisión en objetos inferiores, etc. Cualquier objeto de rango de números se identifica unívocamente por su nombre.


Ejemplos
MATERIALNR es el nombre del objeto de rango de números, que define las propiedades de los intervalos de rangos de números para el maestro de materiales.

Texto breve   - Texto breve del objeto de rangos de números (20 posiciones).
Texto expl.    - Texto explicativo para el objeto de rango de números (60 posiciones).

Indicador hasta ejercicio - Ind. si el obj.rango de nºs es relevante hasta ejercicio.
Mediante este indicador se determina si en intervalos de rangos de números deberá hacerse una diferenciación por el parámetro 'Hasta ejercicio'.

Dominio longitud número    - Dominio para la longitud del número
Nombre del dominio que define la longitud del número de rango de números.

Los interv.no se desplazan     - Indicador: no existe transferencia de intervalos
Marcando el flag se evita que los intervalos del objeto de rango de números empiecen de nuevo automáticamente en el límite superior.

Transacción rango números - Código de transacción para llamar la actualización de rangos de números.

Porcentaje advertencia          - Porcentaje para advertencia en la asignación.
Resto en porcentaje de los números de un rango de números; al llegar a este valor en la asignación de números se emitirá un mensaje de advertencia.

Ejemplos
Se ha definido un intervalo de 1 a 1000. Para obtener un mensaje de advertencia a partir del número 900 deberá indicarse 10 (por ciento).



En esta pantalla podemos modificar/visualizar y ver el estatus del rango que hemos seleccionado o creado.


Modo Visualización




Solo se puede visualizar como se encuentran los distintos valores de los rangos.


Modo Status


Se puede editar el status para regresar a un valor inicial por ejemplo en caso de ser necesario.

Modo Modificación
Uno puede Editar los valores de los rangos ya creados o generar nuevos.


Recuerden: Pueden ir probando estos rangos con la función NUMBER_GET_NEXT.


Y si lo van a utilizar en un reporte o función es importante el siguiente orden:


NUMBER_RANGE_ENQUEUE (Bloqueo el rango de número)
NUMBER_GET_NEXT (Próximo n° del rango)
NUMBER_RANGE_DEQUEUE (Désbloqueo del rango),
La tabla en donde se encuentra los rangos de número es la NRIV,

Crear Catalogo desde una tabla interna con la MERGE

Constants: c_t_salida     TYPE slis_tabname   VALUE 'T_SALIDA'.

* Catálogo de campos ALV
  DATA t_fieldcat TYPE slis_t_fieldcat_alv.

  DATA: l_repid    LIKE sy-repid.

  l_repid = sy-repid.

* Se carga el catálogo de campos
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = l_repid
      i_internal_tabname  = c_t_salida " Constante de la tabla interna
      i_inclname              = l_repid
    CHANGING
      ct_fieldcat               = t_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Función para saltar Autorización

Muchas veces en desarrollo no tenemos permisos a determinadas transacciones para realizar las pruebas que necesitemos, bueno esta función sirve para no estar debagueando la transacción estandar y cambiando por debug los permisos que tengamos de la misma.

Ojo, es recomendable hacerlo siempre en desarrollo, si lo hacen en PRD podrían llegar a tener problemas, sobre todo si los descubren :P

TX . SE 37 : RS_HDSYS_CALL_TC_VARIANT