Application Development 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: 

ALV output is missing decimal places

bharath_padmanabhan
Participant
0 Kudos

Experts,

I have created a CDS view to fetch data from multiple tables. This CDS view is consumed in my report and the output is displayed as an ALV. I have a column called Start date stock qty in ALV. This column gets value from MSEG-MENGE field which has 3 decimal places. I see that a few rows in ALV output correctly show 3 decimals. But there are few records where the decimal is missing. For example value 10.000 comes as 10.

I have created a SE11 structure to hold all the ALV fields. I see that the datatype of start date stock qty field is correctly reflecting MENG13 as the domain. I learnt that I can set the decimal places explicitly via code,

TRY.
CALL METHOD cl_salv_table=>factory
  IMPORTING
     r_salv_table = go_alv
  CHANGING
     t_table      = gt_inv_data.
  CATCH cx_salv_msg ##NO_HANDLER.
ENDTRY.
		
DATA(lo_column) = go_alv->get_columns( )->get_column( 'STARTDATESTOCKQTY' ).
lo_column->set_long_text( 'Start Date Stock Quantity' ) ##NO_TEXT.
lo_column->set_medium_text( 'Start Date Stk Qty' ) ##NO_TEXT.
lo_column->set_short_text( 'StaDStkQty' ) ##NO_TEXT.
lo_column->set_output_length( '13' ).
<strong>lo_column->set_decimals( '3' ).</strong>   " -----> Setting decimal places explicitly.

I am using set_decimals method to set 3 decimals. But this is not helping. I am using factory method to display my ALV. I have 1 master CDS view inside which I am consuming several child CDS views which in turn call table functions. When I write the select query directly on the child CDS view which returns start date stock qty, I see that all records have 3 decimals as expected. So when it comes to ALV display, the decimals are dropped for a few records.

Can you please share your valuable inputs.

Thanks

Bharath

14 REPLIES 14

bharath_padmanabhan
Participant
0 Kudos

Given below is the table function code that returns the start date stock qty from NSDM_E_MSEG

Code inside the table function looks as below:

  METHOD get_ssq_ssv BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING nsdm_e_mseg.

    itab1 = apply_filter ( nsdm_e_mseg, :sel_opt );
    itab2 = SELECT mandt,
                   matnr,
                   werks,
                   menge,
                   dmbtr,
                   budat_mkpf,
                   shkzg,
                   RANK ( ) OVER ( partition by matnr, werks
                                          ORDER BY matnr asc,
                                                   werks asc,
                                                   shkzg desc,
                                                   budat_mkpf asc ) as rank,
                   ROW_NUMBER() OVER (PARTITION BY matnr, werks
                                          ORDER BY matnr asc,
                                                   werks asc,
                                                   shkzg desc,
                                                   budat_mkpf asc) AS rownumber
                   from :itab1
                   where budat_mkpf <= :p_ersda and
                   lgort <> '' and
                   lgort is not NULL;

       RETURN SELECT DISTINCT
                     mandt,
                     matnr,
                     werks,
                     menge as ssq,
                     dmbtr as ssv,
                     budat_mkpf,
                     shkzg
                     from :itab2
                     where rank = 1 and
                     rownumber = 1;

  ENDMETHOD.
METHOD get_ssq_ssv BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING nsdm_e_mseg. itab1 = apply_filter ( nsdm_e_mseg, :sel_opt ); itab2 = SELECT mandt, matnr, werks, menge, dmbtr, budat_mkpf, shkzg, RANK ( ) OVER ( partition by matnr, werks ORDER BY matnr asc, werks asc, shkzg desc, budat_mkpf asc ) as rank, ROW_NUMBER() OVER (PARTITION BY matnr, werks ORDER BY matnr asc, werks asc, shkzg desc, budat_mkpf asc) AS rownumber from :itab1 where budat_mkpf <= :p_ersda and lgort <> '' and lgort is not NULL; RETURN SELECT DISTINCT mandt, matnr, werks, menge as ssq, dmbtr as ssv, budat_mkpf, shkzg from :itab2 where rank = 1 and rownumber = 1; ENDMETHOD.

I have created a SE11 structure to hold all the fields for ALV. My final output internal table that I pass to ALV factory method is based on this structure:

data: gt_inv_data TYPE STANDARD TABLE OF zmm_invdash.

ZMM_INVDASH is the name of my structure.

I see that only quantity fields which is start date stock qty and end date stock qty which have this decimal issue. These 2 fields refer to MSEG-MENGE. I have 2 more fields in ALV which are stock date stock value and end date stock value. These 2 fields refer to MSEG-DMBTR. DMBTR has 2 decimals. I see that all records for these 2 columns are correctly reflecting 2 decimals as expected. So something is off with respect to Qty columns.

Please let me know if you would like to know any additional info related to this issue that I have missed to share so far.

Thanks

Bharath

raymond_giuseppi
Active Contributor
0 Kudos

Quantity (QUAN) and Amount fields (CURR) must be attached to a unit of measure code (UNIT) or a currency code (CUCY)

  • In your structure definition look at tab 'Currency/Quantity Fields'.

0 Kudos

Hi Raymond,

Thank you so much for your reply. I am referring to UNITOFMEASURE field for start date and end date stock quantity fields.

UNITOFMEASURE field refers to data type MEINS in the same structure as seen below,

In CDS I have written code as below for currency and quantity fields. This is the master CDS view that I simply call in my ABAP report to get all the data for ALV output. All my business logic is embedded in the Master view and also several table functions(child views) that are consumed within the master view:

@AbapCatalog.sqlViewName: 'ZSQL_INVDASH'
@AbapCatalog.preserveKey: true
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label:'CDS for Inventory Dashboard Report'
define view ZCDS_MM_INVDASH 
with parameters 
@Environment.systemField: #SYSTEM_DATE    
    p_ersda : abap.dats,
    sel_opt: abap.char(1333)
as select from ztf_invdash_10( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_10
inner join ztf_invdash_6( sel_opt : $parameters.sel_opt ) as _mard
on _ztf_invdash_10.matnr = _mard.matnr and
   _ztf_invdash_10.werks = _mard.werks and
   _ztf_invdash_10.lgort = _mard.lgort
inner join nsdm_e_marc as _marc
on _marc.matnr = _mard.matnr and
   _marc.werks = _mard.werks  
inner join mara as _mara
on _mard.matnr = _mara.matnr
left outer join ztf_invdash_1( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_1
on _mard.matnr = _ztf_invdash_1.matnr and
   _mard.werks = _ztf_invdash_1.werks
left outer join ztf_invdash_2( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_2
on _mard.matnr = _ztf_invdash_2.matnr and
   _mard.werks = _ztf_invdash_2.werks  
left outer join ztf_invdash_7( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_7
on _mard.matnr = _ztf_invdash_7.matnr and
   _mard.werks = _ztf_invdash_7.werks 
inner join ztf_invdash_3( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_3
on _mard.matnr = _ztf_invdash_3.matnr and
   _mard.werks = _ztf_invdash_3.werks 
left outer join ztf_invdash_4( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_4
on _mard.matnr = _ztf_invdash_4.matnr and
   _mard.werks = _ztf_invdash_4.werks
left outer join ztf_invdash_5( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_5
on _mard.matnr = _ztf_invdash_5.matnr and
   _mard.werks = _ztf_invdash_5.werks
left outer join ztf_invdash_8( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_8
on _mard.matnr = _ztf_invdash_8.matnr and
   _mard.werks = _ztf_invdash_8.werks
left outer join ztf_invdash_9( p_ersda : $parameters.p_ersda, sel_opt : $parameters.sel_opt ) as _ztf_invdash_9
on _mard.matnr = _ztf_invdash_9.matnr and
   _mard.werks = _ztf_invdash_9.werks 
left outer join zmm_group as _zmm_group
on _mard.werks = _zmm_group.werks
left outer join Mbv_Mbew as _mbew
on _mard.matnr = _mbew.matnr and
   _mard.werks = _mbew.bwkey   
left outer join mcha as _mcha
on _mard.matnr = _mcha.matnr and
   _mard.werks = _mcha.werks
left outer join mch1 as _mch1
on _mard.matnr = _mch1.matnr
left outer join makt as _makt
on _mard.matnr = _makt.matnr and
   _makt.spras  = 'E'   
left outer join t134t as _t134t
on _mara.mtart = _t134t.mtart and
   _t134t.spras  = 'E'   
left outer join t023t as _t023t
on _mara.matkl = _t023t.matkl and
   _t023t.spras  = 'E'   
left outer join t001w as _t001w
on _mard.werks = _t001w.werks and
   _t001w.spras  = 'E'   
left outer join t001k as _t001k
on _mard.werks = _t001k.bwkey
left outer join t001 as _t001
on _t001k.bukrs = _t001.bukrs and
   _t001.spras  = 'E'   
left outer join t001l as _t001l
on _mard.werks = _t001l.werks and
   _mard.lgort = _t001l.lgort
{
  key ltrim( _mard.matnr, '0' ) as Material,  
  key _mard.werks as Plant,
  _mard.lgort as StorageLocation,
  _makt.maktx as MaterialDescription,  
  _t001w.name1 as PlantName,
  @Semantics.currencyCode: true
  _t001.waers as CurrencyCode,
  @Semantics.unitOfMeasure: true
  _mara.meins as UnitOfMeasure,
  _mara.mtart as MaterialType,
  _t134t.mtbez as MaterialTypeDescription,
  _mara.matkl as MaterialGroup,
  _t023t.wgbez60 as MaterialGroupDescription,
  _marc.dismm as MRPType,  
  _t001l.lgobe as StorageLocationDescription,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  ( _ztf_invdash_9.unrestrsumofs - _ztf_invdash_9.unrestrsumofh ) as UnrestrStockValinForeignCurr,  
  _marc.xchpf as BatchManagement,
  _mard.dlinl as DateOfLastCount,
  _mard.sperr as PhysicalInventoryBlockingInd,
  _mara.ersda as CreatedOn,
  _mbew.lfgja as YearCurrentPeriod,
  _mbew.lfmon as CurrentPeriod,
  _marc.mmsta as PlantSpecificMaterialStatus,
  _mara.datab as ValidFrom,
  _marc.maabc as ABCIndicator,
  _marc.kzkri as CriticalPart,
  _mbew.bwkey as ValuationArea,
  _mbew.bwtar as ValuationType,
  _mbew.vprsv as Pricecontrol,
  @Semantics.amount.currencyCode: 'CurrencyCode'  
  case when _mbew.vprsv = 'V' then _mbew.verpr else 0 
  end as MovingPrice,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  case when _mbew.vprsv = 'S' then _mbew.stprs else 0 
  end as StandardPrice,
  _mbew.peinh as PriceUnit,
  _mbew.bklas as ValuationClass,
  _mcha.hsdat as ManufacturingDate,  
  case when _mcha.vfdat is not initial then _mcha.vfdat
  else _mch1.vfdat end as ExpiryDate,
    _ztf_invdash_7.budat as LastGRNDate,
  @Semantics.quantity.unitOfMeasure: 'UnitOfMeasure'
  ( ( cast ( _ztf_invdash_1.mengesumofs as abap.fltp ) - cast ( _ztf_invdash_1.mengesumofh as abap.fltp ) ) / ( cast ( 30 as abap.fltp ) ) ) as NDayConsumptionQty,
  @Semantics.amount.currencyCode: 'CurrencyCode'  
  ( ( cast ( _ztf_invdash_1.dmbtrsumofs as abap.fltp ) - cast ( _ztf_invdash_1.dmbtrsumofh as abap.fltp ) ) / ( cast ( 30 as abap.fltp ) ) ) as NDayConsumptionValue,
  _zmm_group.zgroup as GroupName,
  _zmm_group.zcluster as ClusterName,  
  _t001k.bukrs as CompanyCode,
  _t001.butxt as CompanyName,   
  @Semantics.quantity.unitOfMeasure: 'UnitOfMeasure'
  ( _ztf_invdash_2.mengesumofs - _ztf_invdash_2.mengesumofh ) as InventoryWrittenOffQty,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  ( _ztf_invdash_2.dmbtrsumofs - _ztf_invdash_2.dmbtrsumofh ) as InventoryWrittenOffValue,
  @Semantics.quantity.unitOfMeasure: 'UnitOfMeasure'
  ( ( cast ( _ztf_invdash_1.mengesumofs as abap.fltp ) - cast ( _ztf_invdash_1.mengesumofh as abap.fltp ) ) / ( cast ( 365 as abap.fltp ) ) ) as AverageMonthlyUsage,  
  _ztf_invdash_2.sobkz as SpecialStockIndicator,
  _ztf_invdash_3.dlc as LastPosting,
  case when _ztf_invdash_3.dlc is initial then 'Dead Stock'
  else 
    case when _ztf_invdash_3.dayswp < 0 then cast( _ztf_invdash_3.dayswp * -1 as abap.char( 30 ) )
         when _ztf_invdash_3.dayswp < 120 then 'Fast Moving/Running Condition'
         when _ztf_invdash_3.dayswp between 121 and 365 then 'Slow Moving'
         when _ztf_invdash_3.dayswp > 365 then 'Non Moving' 
         else '' end         
  end as DaysWithoutPosting,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  case when _ztf_invdash_3.dayswp between 0 and 60 then ( _ztf_invdash_8.esvsumofs - _ztf_invdash_8.esvsumofh ) 
  else 0 end as MovementInFastMovingInventory,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  case when _ztf_invdash_3.dayswp between 61 and 365 then ( _ztf_invdash_8.esvsumofs - _ztf_invdash_8.esvsumofh ) 
  else 0 end as MovementInSlowMovingInventory,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  case when _ztf_invdash_3.dayswp > 365 then ( _ztf_invdash_8.esvsumofs - _ztf_invdash_8.esvsumofh ) 
  else 0 end as MovementInNonMovingInventory,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  case when _mch1.vfdat < $session.system_date then ( _ztf_invdash_8.esvsumofs - _ztf_invdash_8.esvsumofh )
  else 0 end as InvPastExpDateNotWrittenOff, 
   _ztf_invdash_4.dlcmv as LastConsumptionDateforMvmtType,
  @Semantics.quantity.unitOfMeasure: 'UnitOfMeasure'
  _ztf_invdash_5.ssq as StartDateStockQty,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  _ztf_invdash_5.ssv as StartDateStockValue,
  @Semantics.quantity.unitOfMeasure: 'UnitOfMeasure'
  ( _ztf_invdash_8.esqsumofs - _ztf_invdash_8.esqsumofh ) as EndDateStockQty,
  @Semantics.amount.currencyCode: 'CurrencyCode'
  ( _ztf_invdash_8.esvsumofs - _ztf_invdash_8.esvsumofh ) as EndDateStockValue,
  @Semantics.amount.currencyCode: 'CurrencyCode'  
  ( _ztf_invdash_8.esvsumofs - _ztf_invdash_8.esvsumofh ) - _ztf_invdash_5.ssv as StockValueIncreased
  
}

Thanks

Bharath

0 Kudos

Hi Raymond,

In my ABAP program, I have written below code to call the CDS view and display the output as ALV:

CLASS zcl_inventory_dash DEFINITION FINAL.
  PUBLIC SECTION.
    DATA: gt_inv_data      TYPE STANDARD TABLE OF zmm_invdash,
          go_alv           TYPE REF TO cl_salv_table,
          gt_field_catalog TYPE STANDARD TABLE OF lvc_s_fcat.
    METHODS: get_inventory_data,
      display_inventory_alv.
ENDCLASS.

CLASS zcl_inventory_dash IMPLEMENTATION.

  METHOD display_inventory_alv.
    DATA: lo_columns  TYPE REF TO cl_salv_columns_table.

    TRY.
        TRY.
            CALL METHOD cl_salv_table=>factory
              IMPORTING
                r_salv_table = go_alv
              CHANGING
                t_table      = gt_inv_data.
          CATCH cx_salv_msg ##NO_HANDLER.
        ENDTRY.

        DATA(lo_header) = NEW cl_salv_form_layout_grid( ).

        DATA(lo_h_flow) = lo_header->create_flow( row = 1 column = 1 ).
        lo_h_flow->create_text( text = 'Total records:' ) ##NO_TEXT.

        lo_h_flow = lo_header->create_flow( row = 1 column = 2 ).
        lo_h_flow->create_text( text = lines( gt_inv_data ) ) ##NO_TEXT.

        go_alv->set_top_of_list( lo_header ).

        DATA(lo_column) = go_alv->get_columns( )->get_column( 'MATERIAL' ).
        lo_column->set_long_text( 'Material Number' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Material Number' ) ##NO_TEXT.
        lo_column->set_short_text( 'Material' ) ##NO_TEXT.
        lo_column->set_output_length( '15' ).
        lo_column->set_optimized( abap_true ).

        lo_column = go_alv->get_columns( )->get_column( 'MATERIALDESCRIPTION' ).
        lo_column->set_long_text( 'Material Description' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Material Desc.' ) ##NO_TEXT.
        lo_column->set_short_text( 'Matl Desc.' ) ##NO_TEXT.
        lo_column->set_output_length( '35' ).

        lo_column = go_alv->get_columns( )->get_column( 'PLANT' ).
        lo_column->set_long_text( 'Plant' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Plant' ) ##NO_TEXT.
        lo_column->set_short_text( 'Plant' ) ##NO_TEXT.
        lo_column->set_output_length( '5' ).

        lo_column = go_alv->get_columns( )->get_column( 'PLANTNAME' ).
        lo_column->set_long_text( 'Plant Name' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Plant Name' ) ##NO_TEXT.
        lo_column->set_short_text( 'Plant Name' ) ##NO_TEXT.
        lo_column->set_output_length( '25' ).
        lo_column->set_optimized( abap_true ).

        lo_column = go_alv->get_columns( )->get_column( 'CURRENCYCODE' ).
        lo_column->set_long_text( 'Currency Code' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Currency Code' ) ##NO_TEXT.
        lo_column->set_short_text( 'Curr Code' ) ##NO_TEXT.
        lo_column->set_output_length( '6' ).

        lo_column = go_alv->get_columns( )->get_column( 'UNITOFMEASURE' ).
        lo_column->set_long_text( 'Unit Of Measure' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Unit Of Measure' ) ##NO_TEXT.
        lo_column->set_short_text( 'UOM' ) ##NO_TEXT.
        lo_column->set_output_length( '5' ).

    
        lo_column = go_alv->get_columns( )->get_column( 'STARTDATESTOCKQTY' ).
        lo_column->set_long_text( 'Start Date Stock Quantity' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Start Date Stk Qty' ) ##NO_TEXT.
        lo_column->set_short_text( 'StaDStkQty' ) ##NO_TEXT.
        lo_column->set_output_length( '13' ).
        lo_column->set_decimals( '3' ).

        lo_column = go_alv->get_columns( )->get_column( 'STARTDATESTOCKVALUE' ).
        lo_column->set_long_text( 'Start Date Stock Value' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Start Date Stk Val' ) ##NO_TEXT.
        lo_column->set_short_text( 'StaDStkVal' ) ##NO_TEXT.
        lo_column->set_output_length( '13' ).
        lo_column->set_decimals( '2' ).

        lo_column = go_alv->get_columns( )->get_column( 'ENDDATESTOCKQTY' ).
        lo_column->set_long_text( 'End Date Stock Quantity' ) ##NO_TEXT.
        lo_column->set_medium_text( 'End Date Stk Qty' ) ##NO_TEXT.
        lo_column->set_short_text( 'EndDStkQty' ) ##NO_TEXT.
        lo_column->set_output_length( '13' ).
        lo_column->set_decimals( '3' ).

        lo_column = go_alv->get_columns( )->get_column( 'ENDDATESTOCKVALUE' ).
        lo_column->set_long_text( 'End Date Stock Value' ) ##NO_TEXT.
        lo_column->set_medium_text( 'End Date Stk Val' ) ##NO_TEXT.
        lo_column->set_short_text( 'EndDStkVal' ) ##NO_TEXT.
        lo_column->set_output_length( '13' ).
        lo_column->set_decimals( '2' ).

        lo_column = go_alv->get_columns( )->get_column( 'STOCKVALUEINCREASED' ).
        lo_column->set_long_text( 'Stock Value Increased' ) ##NO_TEXT.
        lo_column->set_medium_text( 'Stock Value Incr' ) ##NO_TEXT.
        lo_column->set_short_text( 'StkValIncr' ) ##NO_TEXT.
        lo_column->set_output_length( '13' ).

        DATA(lo_alv_dsp_set) = go_alv->get_display_settings( ).
        lo_alv_dsp_set->set_striped_pattern( cl_salv_display_settings=>true ).
        go_alv->get_functions( )->set_all( abap_true ).
        go_alv->display( ).

      CATCH cx_salv_not_found ##NO_HANDLER.
    ENDTRY.
  ENDMETHOD.
  METHOD get_inventory_data.
    DATA: lv_where TYPE string.
    TRY.

        lv_where = cl_shdb_seltab=>combine_seltabs(
          EXPORTING
            it_named_seltabs =
                               VALUE #( ( name = 'MATNR' dref = REF #( s_matnr[] ) )
                                        ( name = 'WERKS' dref = REF #( s_WERKS[] ) )
                                        ( name = 'LGORT' dref = REF #( s_lgort[] ) )
                                        )
            iv_client_field  = 'MANDT' ).
      CATCH cx_shdb_exception.
        MESSAGE e888(sabapdocu) WITH 'Business Error'.
    ENDTRY.
    SELECT DISTINCT * FROM zcds_mm_invdash( p_ersda = @p_ersda, sel_opt = @lv_where )
      ORDER BY Material ASCENDING
      INTO CORRESPONDING FIELDS OF TABLE @gt_inv_data.
    IF gt_inv_data IS INITIAL.
      MESSAGE 'No data found' TYPE 'S' DISPLAY LIKE 'E' ##NO_TEXT.
      LEAVE LIST-PROCESSING.
    ENDIF.

    IF gt_inv_data IS INITIAL.
      MESSAGE 'No data found' TYPE 'S' DISPLAY LIKE 'E' ##NO_TEXT.
      LEAVE LIST-PROCESSING.
    ENDIF.


  ENDMETHOD.

ENDCLASS.

NOTE: In above program, I have removed certain fields from ALV layout section as SCN allows only 10K characters for a comment.

0 Kudos

Hi Raymond,

The code for the main ABAP program is as below:

REPORT zmm_inventorydash_report.
INCLUDE zmm_inventorydash_report_sel.
INCLUDE zmm_inventorydash_report_sub.

LOAD-OF-PROGRAM.
  DATA(lo_inventory_dash) = NEW zcl_inventory_dash( ) ##NEEDED.

START-OF-SELECTION.
  lo_inventory_dash->get_inventory_data( ).
  lo_inventory_dash->display_inventory_alv( ).

Code for Selection screen include is as below:
*&---------------------------------------------------------------------* *& Include ZMM_INVENTORYDASH_REPORT_SEL *&---------------------------------------------------------------------* DATA: lv_matnr TYPE matnr, lv_werks TYPE mard-werks, lv_sloc TYPE mard-lgort, lv_createdon TYPE mara-ersda. SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS : s_matnr FOR lv_matnr, s_werks FOR lv_werks OBLIGATORY, s_lgort FOR lv_sloc. PARAMETERS: p_ersda TYPE ersda. SELECTION-SCREEN : END OF BLOCK b1.

0 Kudos

My Selection screen looks as below:

Thanks

Bharath

Check definition of uom and currency code,

  • There are rules to handle number of decimals for both. Are the quantities without decimal refering some 'PC' type of uom.
  • Also when most currencies user 2 decimals, there are currencies with 0 and 3 decimals in the World.

OneShivam
Product and Topic Expert
Product and Topic Expert
0 Kudos

Hello,

Check what configuration is mentioned in 'T006' table for the decimal rounding. Some UOM have unit of rounding as zero.

Once you maintain decimal rounding in CUNI tcode the error should be resolved

0 Kudos

Hi Shivam,

Thank you so much for your reply. I took a single material in MSEG and I noticed that the UOM in EA,


I checked in T006 for EA UOM and I see that Decimal rounding(DCr) is 0,

I executed the report for this Material and I see that Start date stock qty and end date stock qty are populating with decimals as expected. It will be really nice if we are allowed to post up to 5 images here to better explain our query. SCN - Can you please consider this request and increase the no of allowed images per post.

Thanks

Bharath

0 Kudos

ALV output for the material looks as below:

0 Kudos

So I am assuming that T006 may not be influencing the ALV output behavior. Please let me know in case I am missing something. Thanks.

xiswanto
Active Participant
0 Kudos

Base on the information you provided, there could be 2 possibilities

1. the row that shows decimals 'xx.000' does not contain the UOM value ( or the qty field is not linked to uom field in the alv field category), causing the column always showing the full 3 decimal digit

2. you are interpreting the data wrongly, could be based on the SAP user default setting for decimal notation.
in most case, dot or '.' is representing thousands; comma or ',' is representing decimal. check the value of one row containing the 10.000 quantity through debug whether the value is actually:
a) 10000.000 - ten thousand ,or
b) 10.000 - ten

Thank you so much for your reply, Siswanto. I have updated the solution that worked for me. Few UOMs had decimal places as zero that was causing the issue. I was under the impression that I need to fix something in my code. My func counterpart can take it forward from this point.

bharath_padmanabhan
Participant
0 Kudos

Hi Raymond,

Thank you so much for your reply. I took the records in the output for which decimal places are coming correctly versus records with missing decimals. Correct records have EA as UOM vs incorrect records which have BOX, PAK, ROL and L as UOM.

I compared the values in T006 for these UOMs against EA. I noticed that Decimal places column for EA shows '6' vs remaining 4 records where it is '0'.

To check if this is influencing the output, I changed the decimal places for incorrect UOMs to '6' same as EA,

Now ALV is showing decimals correctly for all records as expected.

Thank you everyone for your valuable insights. Can't imagine handling clients without the amazing support from Experts here who selflessly take their time every single day patiently answering our queries.

Thanks

Bharath