PDA

Ver la Versión Completa : Actualizar valores de TC de infotipo 0008


playa82
15/06/11, 11:48:21
Hola, tengo un problema con la actualización de los importes que aparecen en el table control del infotipo 0008:

En la user exit de PA (tb lo he probado en la badi de PA), recupero sus valores mediante la función 'BAPI_BASICPAY_GETDETAIL' y en base al grado de ocupación del empleado, quiero modificar sus importes.
Por debuguer he modificado los importes y los estoy intentando mostrar de nuevo en el TC usando field-symbols y el método pnnnn_to_prelp, ¡pero no hay manera!

Pongo mi código:
CALL FUNCTION 'BAPI_BASICPAY_GETDETAIL'
EXPORTING
employeenumber = le_0008-pernr
subtype = le_0008-subty
objectid = le_0008-objps
lockindicator = le_0008-sprps
validitybegin = le_0008-begda
validityend = le_0008-endda
recordnumber = le_0008-seqnr
TABLES
wagetypes = gt_q0008.
IF sy-subrc EQ 0.

LOOP AT gt_q0008 INTO ge_q0008.

* Actualizar su importe en función del grado de ocupación
ld_100 = ( ge_q0008-amount * 100 ) / le_0008-bsgrd.
ge_q0008-amount = ( ld_100 * pe_0008-bsgrd ) / 100.

* ACTUALIZAR PANTALLA
ld_tabix = sy-tabix.
* Con esto estaría informando los campos de pantalla --> pero no funciona
CONCATENATE '(MP000800)P0008-BET' ld_tabix INTO ld_campo.
ASSIGN (ld_campo) TO <fs_salary>.
<fs_salary> = ge_q0008-amount.

* Con esto la estructura ge_0008 que luego paso de nuevo a pantalla mediante un método.
CONCATENATE 'PE_0008-BET' ld_tabix INTO ld_0008.
ASSIGN (ld_0008) TO <fs_0008>.
<fs_0008> = ge_q0008-amount.

ENDLOOP.
UNASSIGN <fs_salary>. UNASSIGN <fs_0008>.

* Devolver información actualizada
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = pe_0008
IMPORTING
prelp = innnn.

Un saludo y gracias!!!

stormshadow
15/06/11, 16:09:32
mmm y para que asignas primero unos valores a <fs_salary> y luego lo igualas con otro valor? lo mismo haces con <fs_0008> :S y aparte los valores de tú field symbol no se los mandas a tú método verdad? le mandas otra tabla, ya te aseguraste que tenga valores???

playa82
16/06/11, 06:32:12
Es que se puede decir que he hecho dos cosas juntas, dos ideas que he leido por internet y como ninguna me ha funcionado por separado, pues he hecho las dos juntas al final y tampoco, jeje.
- El primer field-symbol <fs_salary> lo uso para rellenar supuestamente el table control en pantalla, es decir, relleno los campos (MP000800)P0008-BETXX, que se supone que son las columnas de importe del table control --> no funciona
- El segundo field-symbol <fs_0008> lo uso para rellenar la estructura PE_0008 de tipo P0008 que leo de pantalla y modifico (con el field-symbol modifico los campos PE_0008-BETXX) para luego devolverla de nuevo a la pantalla con el método pnnnn_to_prelp.
Recupero bien toda la información y todas las estructuras están bien rellenas, vamos, q lo tengo superprobado, pero no sé pq la pantalla no se actualiza.

playa82
16/06/11, 08:25:06
CONSEGUIDO!!!

He visto que en el PBO del infotipo 0008 se maneja la tabla TBLGART y como es accesible desde mi código, apuntándola con un field-symbol puedo modificar su contenido! :)

FIELD-SYMBOLS:
<fs_tabla> TYPE table.

* Apuntar al TC del infotipo 0008
ld_nomtabla = '(MP000800)TBLGART[]'.
ASSIGN (ld_nomtabla) TO <fs_tabla>.

Gracias!