04-17-2006 7:26 PM
Dear all.
I need to put some value in the field ABGRU. When the configuration of the Item is not completed. I'm try to used the program MV45AFZZ and the exit FORM USEREXIT_SAVE_DOCUMENT and USEREXIT_MOVE_FIELD_TO_VBAP.
But i cant update the field. A Example off my code:
Case VBAK-AUART.
WHEN 'ZXXX'.
IF vbap-PSTYV eq 'ZYYY' and vbap-kondm eq '02' and
vbap-stman eq '1'.
move 'Z1' to vbap-abgru.
modify vbap.
ELSEIF vbap-PSTYV eq 'ZYYY' and vbap-kondm NE '02' and vbap-stman NE '1' and vbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
modify vbap.
ENDIF.
ENDCASE.
04-17-2006 7:41 PM
Hi Pedro
Stop! Your code is wrong: YOU CAN'T DIRECTLY UPDATE VBAP TABLE:
Case VBAK-AUART.
WHEN 'ZXXX'.
IF vbap-PSTYV eq 'ZYYY' and vbap-kondm eq '02' and
vbap-stman eq '1'.
move 'Z1' to vbap-abgru.
modify vbap. <----
ERROR
ELSEIF vbap-PSTYV eq 'ZYYY' and vbap-kondm NE '02' and vbap-stman NE '1' and vbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
modify vbap. <----
ERROR
ENDIF.
ENDCASE.
If you use the routine USEREXIT_MOVE_FIELD_TO_VBAP you need only to transfer the data to VBAP without to update it:
Case VBAK-AUART.
WHEN 'ZXXX'.
IF vbap-PSTYV eq 'ZYYY' and vbap-kondm eq '02' and
vbap-stman eq '1'.
move 'Z1' to vbap-abgru.
ELSEIF vbap-PSTYV eq 'ZYYY' and vbap-kondm NE '02' and vbap-stman NE '1' and vbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
ENDDIF.
WHEN OTHERS.
ENDCASE.
Don't use USEREXIT_SAVE_DOCUMENT, but if you need the exit USEREXIT_SAVE_DOCUMENT_PREPARE. Here you have to change the data in internal table XVBAP:
Case VBAK-AUART.
WHEN 'ZXXX'.
LOOP AT XVBAP.
IF Xvbap-PSTYV eq 'ZYYY' and Xvbap-kondm eq '02' and
Xvbap-stman eq '1'.
move 'Z1' to Xvbap-abgru.
ELSEIF Xvbap-PSTYV eq 'ZYYY' and Xvbap-kondm NE '02' and xvbap-stman NE '1' and xvbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
ENDDIF.
MODIFY XVBAP.
Max
ENDLOOP.
WHEN OTHERS.
ENDCASE.
04-17-2006 7:34 PM
Try modifying XVBAP. Do not directly MODIFY VBAP will be handled by the existing code.
Case VBAK-AUART.
WHEN 'ZXXX'.
IF vbap-PSTYV eq 'ZYYY' and vbap-kondm eq '02' and
vbap-stman eq '1'.
<b>move 'Z1' to Xvbap-abgru.
*modify vbap. " Do not directly modify</b>
ELSEIF vbap-PSTYV eq 'ZYYY' and vbap-kondm NE '02' and vbap-stman NE '1' and vbap-abgru EQ 'Z1'.
<b>move '' to Xvbap-abgru.
*modify vbap. " Do not directly modify</b>
ENDIF.
ENDCASE.
Regards,
Rich Heilman
04-17-2006 7:37 PM
hi,
in the exit you mentioned you have access to xvbap, you need not to modify explicitly, once the transaction completes it will update the record.
Case xVBAK-AUART.
WHEN 'ZXXX'.
IF xvbap-PSTYV eq 'ZYYY' and xvbap-kondm eq '02' and
xvbap-stman eq '1'.
move 'Z1' to xvbap-abgru.
ELSEIF xvbap-PSTYV eq 'ZYYY' and xvbap-kondm NE '02' and xvbap-stman NE '1' and xvbap-abgru EQ 'Z1'.
move '' to xvbap-abgru.
ENDIF.
ENDCASE.
04-17-2006 7:41 PM
Hi Pedro
Stop! Your code is wrong: YOU CAN'T DIRECTLY UPDATE VBAP TABLE:
Case VBAK-AUART.
WHEN 'ZXXX'.
IF vbap-PSTYV eq 'ZYYY' and vbap-kondm eq '02' and
vbap-stman eq '1'.
move 'Z1' to vbap-abgru.
modify vbap. <----
ERROR
ELSEIF vbap-PSTYV eq 'ZYYY' and vbap-kondm NE '02' and vbap-stman NE '1' and vbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
modify vbap. <----
ERROR
ENDIF.
ENDCASE.
If you use the routine USEREXIT_MOVE_FIELD_TO_VBAP you need only to transfer the data to VBAP without to update it:
Case VBAK-AUART.
WHEN 'ZXXX'.
IF vbap-PSTYV eq 'ZYYY' and vbap-kondm eq '02' and
vbap-stman eq '1'.
move 'Z1' to vbap-abgru.
ELSEIF vbap-PSTYV eq 'ZYYY' and vbap-kondm NE '02' and vbap-stman NE '1' and vbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
ENDDIF.
WHEN OTHERS.
ENDCASE.
Don't use USEREXIT_SAVE_DOCUMENT, but if you need the exit USEREXIT_SAVE_DOCUMENT_PREPARE. Here you have to change the data in internal table XVBAP:
Case VBAK-AUART.
WHEN 'ZXXX'.
LOOP AT XVBAP.
IF Xvbap-PSTYV eq 'ZYYY' and Xvbap-kondm eq '02' and
Xvbap-stman eq '1'.
move 'Z1' to Xvbap-abgru.
ELSEIF Xvbap-PSTYV eq 'ZYYY' and Xvbap-kondm NE '02' and xvbap-stman NE '1' and xvbap-abgru EQ 'Z1'.
move '' to vbap-abgru.
ENDDIF.
MODIFY XVBAP.
Max
ENDLOOP.
WHEN OTHERS.
ENDCASE.