Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

arithmetic operations

Former Member
0 Likes
314

Hi all,

I have a big problem, i have added the next code into a user exit.

TYPES: BEGIN OF ty_vbap.

INCLUDE STRUCTURE vbap.

TYPES: difer TYPE vbap-netwr,

END OF ty_vbap.

DATA: x_vbap TYPE STANDARD TABLE OF vbap WITH HEADER LINE, "cabecera

y_vbap TYPE STANDARD TABLE OF vbap WITH HEADER LINE, "posiciones

z_vbap TYPE STANDARD TABLE OF ty_vbap WITH HEADER LINE, "diferencia

w_vbap TYPE vbap.

DATA: lv_netwr LIKE vbap-netwr,

lv_resul(8) TYPE p DECIMALS 8,

lv_netwr_p LIKE vbap-netwr,

lv_netwr_c LIKE vbap-netwr,

lv_difer LIKE vbap-netwr.

*Agrupa tabla de header y posiciones

REFRESH : z_vbap, y_vbap, z_vbap.

CLEAR: z_vbap, y_vbap, z_vbap.

LOOP AT xvbap.

IF xvbap-uepos = 0 AND xvbap-pstyv = 'ZC4W'.

MOVE-CORRESPONDING xvbap TO w_vbap.

APPEND w_vbap TO x_vbap.

ELSE.

y_vbap-vbeln = xvbap-vbeln.

y_vbap-pstyv = xvbap-pstyv.

y_vbap-uepos = xvbap-uepos.

y_vbap-netwr = xvbap-netwr.

COLLECT y_vbap.

ENDIF.

ENDLOOP.

  • Calcula si existe diferencia entre las posiciones y cabecera

SORT x_vbap.

SORT y_vbap.

LOOP AT x_vbap.

READ TABLE y_vbap

WITH KEY vbeln = x_vbap-vbeln

uepos = x_vbap-posnr

BINARY SEARCH.

IF sy-subrc = 0.

IF y_vbap-netwr <> x_vbap-netwr.

MOVE-CORRESPONDING x_vbap TO z_vbap.

z_vbap-difer = x_vbap-netwr - y_vbap-netwr.

APPEND z_vbap.

ENDIF.

ENDIF.

ENDLOOP.

  • Calcula prorrateo entre posiciones pedido

SORT z_vbap.

DESCRIBE TABLE z_vbap LINES sy-tfill.

IF sy-tfill <> 0.

*

CLEAR: lv_netwr,

lv_netwr_p,

lv_netwr_c,

lv_difer,

lv_resul.

LOOP AT xvbap WHERE uepos NE '0'

AND pstyv EQ 'ZP4W'.

READ TABLE z_vbap WITH KEY vbeln = xvbap-vbeln

posnr = xvbap-uepos

BINARY SEARCH.

  • MOVE xvbap-netwr TO lv_netwr_p. "importe posiciones

  • MOVE z_vbap-netwr TO lv_netwr_c. "importe cabecera

    • MOVE z_vbap-difer TO lv_difer. "diferencia.

IF z_vbap-difer > 0.

  • Mueve a komp-kzwi3 si es positivo

lv_resul = ( xvbap-netwr / z_vbap-netwr ) * z_vbap-difer.

  • MOVE lv_resul TO komp-kzwi3.

ELSE.

  • Mueve a komp-kzwi4 si es negativo

lv_resul = ( xvbap-netwr / z_vbap-netwr ) * z_vbap-difer.

  • MOVE lv_resul TO komp-kzwi4.

ENDIF.

ENDLOOP.

The problem is in the arithmetic operation , variable lv_resul doesn't catch the value of the arithmetic operation , is empty. And I don´t know why if xvbap-netwr , z_vbap-netwr and z_vbap-difer have values. somebody could help me please???

thanks in advance.

regards

marisol.

1 REPLY 1
Read only

Former Member
0 Likes
270

Try to move the fields to independent variables and try again