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

division by zero short dump

Former Member
0 Likes
2,471

The import parameter I_MENGE and the export parameter E_MENGE is of type EKPO-MENGE whose data type is QUANT with length 13 and decimal places 3.

But during a calculation in a loop for a material, it is calculating the value as 0.015/1000 which is 0.000015. but the export parameter takes the value as .000 because it can maximum hold 3 decimal places only.

and this value(.000) is being used in some other subroutine and it gives a division by zero short dump.

How can i get the full value(all 6 decimal places) 0.000015 so that I can avoid a division by zero short dump

The import parameter I_MENGE and the export parameter E_MENGE is of type EKPO-MENGE whose data type is QUANT with length 13 and decimal places 3.

But during a calculation in a loop for a material, it is calculating the value as 0.015/1000 which is 0.000015. but the export parameter takes the value as .000 because it can maximum hold 3 decimal places only.

and this value(.000) is being used in some other subroutine and it gives a division by zero short dump.

How can i get the full value(all 6 decimal places) 0.000015 so that I can avoid a division by zero short dump

4 REPLIES 4
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
1,309

You can't. You would have to handle the diving by zero. If you can, put an if statement around that line of code.

If divisor > 0.
*  Then do division.

Endif.

Regards,

Rich Heilman

Read only

Former Member
0 Likes
1,309

You can write query like as below:

if i_output-kbetr ne '0.00'.

then do what ever you want.

endif.

see the below program and here i am using same logic.

REPORT ZMM_KITCHEN_COST no standard page heading

line-size 255

message-id zwave .

  • type-pools

type-pools : slis.

  • Tables

tables : mara,

makt,

mbew,

konp,

pgmi,

marc,

RMCP3,

sscrfields,

mvke.

  • Internal Table for MARC and MARA

data : begin of i_join occurs 0,

matnr like mara-matnr, " Material #

meins like mara-meins, " Unit of Measure

werks like marc-werks, " Plant

zzdept like marc-zzdept," Department

end of i_join.

  • Internal table for PGMI

data : begin of i_pgmi occurs 0,

werks like pgmi-werks, " Plant,

nrmit like pgmi-nrmit, " Material #

wemit like pgmi-wemit, " Plant

end of i_pgmi.

  • Internal Table for MBEW

data i_mbew like mbew occurs 0 with header line.

  • Internal Table for Output

data : begin of i_output occurs 0 ,

matnr like mara-matnr, " Material #

maktx like makt-maktx, " Material Desc

VPRSV like mbew-VPRSV, " Price Control Indicator

VERPR like mbew-VERPR, " Moving Avg Price

meins like mara-meins, " Base Unit of Measure

STPRS like mbew-STPRS, " Standard Price

LPLPR like mbew-LPLPR, " Current Planned Price

ZPLPR like mbew-ZPLPR, " Future Planned Price

VPLPR like mbew-VPLPR, " Previous Planned Price

kbetr like konp-kbetr, " Sales Price

KMEIN like konp-KMEIN, " Sales Unit

margin(5) type p decimals 2,

vmsta like mvke-vmsta, " Material Status.

end of i_output.

  • Internal Table for A004

data : i_a004 like a004 occurs 0 with header line.

  • Variables

data : wa_lines type i,

wa_maktx type makt-maktx,

v_flag type c.

  • ALV Function Module Variables

DATA: g_repid like sy-repid,

gs_layout type slis_layout_alv,

g_exit_caused_by_caller,

gs_exit_caused_by_user type slis_exit_by_user.

DATA: gt_fieldcat type slis_t_fieldcat_alv,

gs_print type slis_print_alv,

gt_events type slis_t_event,

gt_list_top_of_page type slis_t_listheader,

g_status_set type slis_formname value 'PF_STATUS_SET',

g_user_command type slis_formname value 'USER_COMMAND',

g_top_of_page type slis_formname value 'TOP_OF_PAGE',

g_top_of_list type slis_formname value 'TOP_OF_LIST',

g_end_of_list type slis_formname value 'END_OF_LIST',

g_variant LIKE disvariant,

g_save(1) TYPE c,

g_tabname_header TYPE slis_tabname,

g_tabname_item TYPE slis_tabname,

g_exit(1) TYPE c,

gx_variant LIKE disvariant.

data : gr_layout_bck type slis_layout_alv.

  • Selection-screen

selection-screen : begin of block blk with frame title text-001.

parameters : p_werks like marc-werks default '1000' obligatory.

select-options : s_dept for marc-zzdept obligatory,

s_matnr for mara-matnr,

s_mtart for mara-mtart,

s_vprsv for mbew-VPRSV,

s_PRGRP for RMCP3-PRGRP MATCHCODE OBJECT MAT2 ,

s_vmsta for mvke-vmsta.

selection-screen: end of block blk.

*SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.

*PARAMETERS: p_vari LIKE disvariant-variant.

*SELECTION-SCREEN END OF BLOCK b3.

*

----


  • At slection screen events *

----


*-- Process on value request

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

  • PERFORM f4_for_variant.

*

----


  • Initialization *

----


Initialization.

g_repid = sy-repid.

sscrfields-functxt_01 = 'Clear Selection'.

selection-screen function key 1.

AT SELECTION-SCREEN.

case sscrfields-ucomm.

when 'Clear Selection' or 'FC01'.

clear: s_matnr,

p_werks.

refresh: s_matnr,

s_dept,

s_mtart,

s_vprsv,

s_PRGRP,

s_vmsta.

endcase.

----


  • Start-of-selection.

----


start-of-selection.

  • Clear the all data.

perform clear_data.

  • Get the data from PGMI Table

perform get_pgmi.

  • Get the data from MARC and MARA Table

perform get_mara_marc.

  • Get the data from MBEW Table

perform get_mbew.

  • Move the data into OUTPUT Table

perform move_output_internal.

*end-of-selection.

end-of-selection.

if not i_output[] is initial.

  • ALV Function Module

perform print_alv.

endif.

&----


*& Form get_pgmi

&----


  • Select the data from PGMI Table

----


FORM get_pgmi.

clear v_flag.

  • If Product group has a value at Selection-screen.

if not s_prgrp is initial.

select werks nrmit wemit from pgmi into table i_pgmi

where prgrp in s_prgrp

and werks = p_werks

and wemit = p_werks.

v_flag = 'X'.

endif.

ENDFORM. " get_pgmi

&----


*& Form get_mara_marc

&----


  • Select the data from MARA and MARC

----


FORM get_mara_marc.

if v_flag = 'X'.

select amatnr ameins bwerks bzzdept into table i_join

from mara as a inner join marc as b on amatnr = bmatnr

for all entries in i_pgmi

where a~matnr in s_matnr

and b~werks = p_werks

and b~zzdept in s_dept

and a~mtart in s_mtart

and a~matnr = i_pgmi-nrmit

and b~werks = i_pgmi-werks.

else.

  • Get the data from MARA and MARC Table

select amatnr ameins bwerks bzzdept into table i_join

from mara as a inner join marc as b on amatnr = bmatnr

where a~matnr in s_matnr

and b~werks = p_werks

and b~zzdept in s_dept

and a~mtart in s_mtart.

endif.

clear wa_lines.

describe table i_join lines wa_lines.

if wa_lines is initial.

message i000(zwave) with 'List contains no data'.

stop.

endif.

sort i_join by matnr werks zzdept.

ENDFORM. " get_mara_marc

&----


*& Form get_mbew

&----


  • Select the data from MBEW Table

----


FORM get_mbew.

  • Get the data from MBEW.

select * from mbew into table i_mbew

for all entries in i_join

where matnr = i_join-matnr.

clear wa_lines.

describe table i_mbew lines wa_lines.

if wa_lines is initial.

message i000(zwave) with 'List contains no data'.

stop.

endif.

sort i_mbew by matnr bwkey.

ENDFORM. " get_mbew

&----


*& Form move_output_internal

&----


  • Final Results

----


FORM move_output_internal.

loop at i_join.

clear wa_maktx.

  • Compare the data with MVKE Table

select single vmsta from mvke into mvke-vmsta

where matnr = i_join-matnr

and vkorg = '0001'

and vtweg = '01'

and vmsta in s_vmsta.

if sy-subrc ne 0.

continue.

else.

i_output-vmsta = mvke-vmsta.

endif.

read table i_mbew with key matnr = i_join-matnr

bwkey = i_join-werks

binary search.

if sy-subrc eq 0.

  • Price Control Indicator

i_output-VPRSV = i_mbew-VPRSV.

  • Moving Average Price

i_output-VERPR = i_mbew-VERPR / i_mbew-peinh.

  • Standard Price

i_output-STPRS = i_mbew-STPRS / i_mbew-peinh.

  • Current Planned Price

i_output-LPLPR = i_mbew-LPLPR / i_mbew-peinh.

  • Future Planned Price

i_output-ZPLPR = i_mbew-ZPLPR / i_mbew-peinh.

  • Previous Planned Price

i_output-VPLPR = i_mbew-VPLPR / i_mbew-peinh.

  • Base Unit of Measure - Added by Seshu 01/09/2007

i_output-meins = i_join-meins.

else.

continue.

endif.

  • Get the sales Price.

perform get_sales_data.

if i_mbew-VPRSV = 'V'.

  • Get the Percentage of Margin

if i_output-kbetr ne '0.00'.

i_output-margin = ( ( i_output-kbetr - i_mbew-VERPR )

/ i_output-kbetr ) * 100 .

endif.

else.

  • Get the Percentage of Margin

<b> if i_output-kbetr ne '0.00'.

i_output-margin = ( ( i_output-kbetr - i_output-stprs )

/ i_output-kbetr ) * 100 .

endif.</b>

endif.

  • Get the material Description from MAKT Table

select single maktx from makt into wa_maktx

where matnr = i_join-matnr

and spras = 'E'.

if sy-subrc eq 0.

i_output-matnr = i_join-matnr.

i_output-maktx = wa_maktx.

endif.

append i_output.

clear : i_output,

i_join,

i_mbew.

endloop.

ENDFORM. " move_output_internal

&----


*& Form get_sales_data

&----


  • Get the Sales Price for each material

----


FORM get_sales_data.

  • Get the data from A004 table to get KNUMH

  • Added new field Sales Unit - Seshu 01/09/2006

refresh : i_a004.

clear : i_a004.

data : lv_kbetr like konp-kbetr," Condition value

lv_KPEIN like konp-kpein , "per

lv_KMEIN like konp-KMEIN. " Sales Unit

select * from a004 into table i_a004

where matnr = i_join-matnr

and vkorg = '0001'

and vtweg = '01'.

if sy-subrc eq 0.

sort i_a004 by DATAB descending.

  • Get the Latetest Date

read table i_a004 with key matnr = i_join-matnr

vkorg = '0001'

vtweg = '01'

binary search.

  • Get the Sales Value

select single kbetr KPEIN KMEIN from konp

into (lv_kbetr,lv_KPEIN, lv_KMEIN)

where knumh = i_a004-knumh

and kappl = i_a004-kappl

and kschl = i_a004-kschl.

if sy-subrc eq 0.

i_output-kbetr = lv_kbetr / lv_KPEIN.

i_output-KMEIN = lv_KMEIN.

endif.

endif.

clear : lv_kbetr,

lv_kpein,

lv_KMEIN.

ENDFORM. " get_sales_data

&----


*& Form print_alv

&----


  • ALV Function Module

----


FORM print_alv.

  • Fill the Fiedlcat

PERFORM fieldcat_init using gt_fieldcat[].

gr_layout_bck-edit_mode = 'D'.

gr_layout_bck-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = g_repid

  • I_CALLBACK_PF_STATUS_SET = ' '

I_CALLBACK_USER_COMMAND = g_user_command

  • I_CALLBACK_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE =

  • I_GRID_SETTINGS =

IS_LAYOUT = gr_layout_bck

IT_FIELDCAT = gt_fieldcat[]

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = g_save

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IT_ALV_GRAPHICS =

  • IT_ADD_FIELDCAT =

  • IT_HYPERLINK =

  • I_HTML_HEIGHT_TOP =

  • I_HTML_HEIGHT_END =

  • IT_EXCEPT_QINFO =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB = i_output

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " print_alv

&----


*& Form fieldcat_init

&----


  • Fieldcat

----


FORM fieldcat_init USING e01_lt_fieldcat type slis_t_fieldcat_alv.

DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

  • Material #

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'MATNR'.

LS_FIELDCAT-ref_fieldname = 'MATNR'.

LS_FIELDCAT-ref_tabname = 'MARA'.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Material'.

ls_fieldcat-seltext_M = 'Material'.

ls_fieldcat-seltext_S = 'Material'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Material Description

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'MAKTX'.

LS_FIELDCAT-OUTPUTLEN = 35.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Description'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Price Indicator

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VPRSV'.

LS_FIELDCAT-OUTPUTLEN = 7.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Price Control Indicator'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Moving Avg Price

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VERPR'.

LS_FIELDCAT-OUTPUTLEN = 11.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Moving Avg Price'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Base Unit of Measure

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'MEINS'.

LS_FIELDCAT-OUTPUTLEN = 7.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Base Unit'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Standard Price

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'STPRS'.

LS_FIELDCAT-OUTPUTLEN = 11.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Standard Price'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Current Planned Price

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'LPLPR'.

LS_FIELDCAT-OUTPUTLEN = 11.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Current Planned Price'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Future Planned Price

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'ZPLPR'.

LS_FIELDCAT-OUTPUTLEN = 11.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Future Planned Price'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Previous Planned Price

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VPLPR'.

LS_FIELDCAT-OUTPUTLEN = 11.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Previous Planned Price'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Sales Price

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'KBETR'.

LS_FIELDCAT-OUTPUTLEN = 13.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Sales Price'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Sales Unit

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'KMEIN'.

LS_FIELDCAT-OUTPUTLEN = 7.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Sales Unit'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • % of Gross Margin

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'MARGIN'.

LS_FIELDCAT-OUTPUTLEN = 13.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = '% of Gross Margin'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

  • Material Status

CLEAR LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VMSTA'.

LS_FIELDCAT-OUTPUTLEN = 13.

LS_FIELDCAT-TABNAME = 'I_OUTPUT'.

ls_fieldcat-seltext_L = 'Material Status'.

APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

ENDFORM. " fieldcat_init

**&----


*

**& Form f4_for_variant

**&----


*

    • text

**----


*

*FORM f4_for_variant.

*

  • CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

  • EXPORTING

  • is_variant = g_variant

  • i_save = g_save

  • i_tabname_header = g_tabname_header

  • i_tabname_item = g_tabname_item

    • it_default_fieldcat =

  • IMPORTING

  • e_exit = g_exit

  • es_variant = gx_variant

  • EXCEPTIONS

  • not_found = 2.

  • IF sy-subrc = 2.

  • MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  • ELSE.

  • IF g_exit = space.

  • p_vari = gx_variant-variant.

  • ENDIF.

  • ENDIF.

*

*

*ENDFORM. " f4_for_variant

&----


*& Form clear_data

&----


  • Clear the Internal table

----


FORM clear_data.

clear : i_output,

i_join,

i_mbew,

i_a004,

i_pgmi.

refresh : i_output,

i_join,

i_mbew,

i_a004,

i_pgmi.

ENDFORM. " clear_data

----


  • FORM USER_COMMAND *

----


FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield. "#EC CALLED

CASE R_UCOMM.

WHEN '&IC1'.

read table i_output index rs_selfield-tabindex.

SET PARAMETER ID 'MAT' FIELD i_output-matnr.

SET PARAMETER ID 'WRK' FIELD p_werks.

if not i_output-matnr is initial.

call transaction 'MD04' and skip first screen.

endif.

ENDCASE.

ENDFORM.

see the bold one

Thanks

Seshu

Message was edited by:

Seshu Maramreddy

Read only

Former Member
0 Likes
1,309

Hi

The best way to avoid division by ZERO/dump, is (as suggested by Rich)...check if the divisor is Greater than ZERO, and then proceed.

Regards

Raj

Read only

former_member219399
Active Participant
0 Likes
1,309

Hi,

Define a variable of type float. it will save decimal values. if u have to doubts plz get back to me.

with regards,

Vamsi

a sample code:

data lfimg type lips-lfimg.

data lfimg_hex type f.

select single lfimg from lips into lfimg where vbeln = '0080000000' and posnr = '0010'.

write lfimg.

lfimg_hex = lfimg / 10000000.

write lfimg_hex.