PDA

Ver la Versión Completa : Modificar campo BSEG-XREF3


javibest
03/06/08, 15:22:57
Hola.

Estoy intentando modificar un documento contable, con las funciones
'CHANGE_DOCUMENT'
'CHANGEDOCUMENT_OPEN'
'CHANGEDOCUMENT_SINGLE_CASE'
'CHANGEDOCUMENT_CLOSE'

pero la verdad es que no consigo que las funciones me hagan nada.

Alguien conoce estas funciones ?



**************************************************
FORM grabar_documento USING p_cadena.

DATA : objectid LIKE cdhdr-objectid,
ld_belnr(10).

DATA: bkpf_old LIKE bkpf,
bkpf_new LIKE bkpf.

DATA : wa_bseg_old LIKE bseg,
wa_bseg_new LIKE bseg.

DATA: v_bkdf LIKE bkdf OCCURS 0 WITH HEADER LINE,
v_bkpf LIKE bkpf OCCURS 0 WITH HEADER LINE,
v_bsec LIKE bsec OCCURS 0 WITH HEADER LINE,
v_bsed LIKE bsed OCCURS 0 WITH HEADER LINE,
v_bseg LIKE bseg OCCURS 0 WITH HEADER LINE,
v_bset LIKE bset OCCURS 0 WITH HEADER LINE.


READ TABLE it_bkpf INTO wa_bkpf INDEX 1.
READ TABLE it_bseg INTO wa_bseg WITH KEY koart = 'K'.

MOVE-CORRESPONDING wa_bkpf TO v_bkpf.
APPEND v_bkpf.

MOVE-CORRESPONDING wa_bseg TO v_bseg.
MOVE-CORRESPONDING wa_bseg TO wa_bseg_old.

v_bseg-xref3 = p_cadena.

MOVE-CORRESPONDING v_bseg TO wa_bseg_new.
APPEND v_bseg.


CALL FUNCTION 'CHANGE_DOCUMENT'
TABLES
t_bkdf = v_bkdf
t_bkpf = v_bkpf
t_bsec = v_bsec
t_bsed = v_bsed
t_bseg = v_bseg
t_bset = v_bset.


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_bkpf-belnr
IMPORTING
output = ld_belnr.

CONCATENATE sy-mandt wa_bkpf-bukrs
ld_belnr
wa_bkpf-gjahr
INTO objectid.

*- Creamos el documento de modificacion

CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
EXPORTING
objectclass = 'BELEG '
objectid = objectid
planned_change_number = ' '
EXCEPTIONS
sequence_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e002(sy) WITH text-005.
ENDIF.

bkpf_new = wa_bkpf.
bkpf_old = wa_bkpf.

*- Modificamos la bkpf
CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
EXPORTING
change_indicator = 'U'
docu_delete = 'X'
tablename = 'BKPF '
workarea_new = bkpf_new
workarea_old = bkpf_old
EXCEPTIONS
nametab_error = 1
open_missing = 2
position_insert_failed = 3
OTHERS = 4.

IF sy-subrc <> 0.
MESSAGE e002(sy) WITH text-004.
ENDIF.



CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
EXPORTING
change_indicator = 'U'
docu_delete = 'X'
tablename = 'BSEG '
workarea_new = wa_bseg_new
workarea_old = wa_bseg_old
EXCEPTIONS
nametab_error = 1
open_missing = 2
position_insert_failed = 3
OTHERS = 4.

IF sy-subrc <> 0.
MESSAGE e002(sy) WITH text-004.
ENDIF.



CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
EXPORTING
date_of_change = sy-datum
objectclass = 'BELEG '
objectid = objectid
tcode = 'FB03'
time_of_change = sy-uzeit
username = sy-uname
object_change_indicator = 'U'
EXCEPTIONS
header_insert_failed = 1
no_position_inserted = 2
object_invalid = 3
open_missing = 4
position_insert_failed = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE e002(sy) WITH text-006.
ENDIF.

ibecerra
03/06/08, 22:45:16
q tal mira, yo he trabajdo con la funcion

CALL FUNCTION 'CHANGE_DOCUMENT'
TABLES
T_BKDF = TI_BKDF
T_BKPF = TI_BKPF
T_BSEC = TI_BSEC
T_BSED = TI_BSED
T_BSEG = TI_BSEG
T_BSET = TI_BSET.

y me funciona bien..
ahora las tablas q deben estar llenas son la T_BKPF y la T_BSEG
Saludos