2023 Jun 06 10:22 AM
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
2023 Jun 06 10:31 AM
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
2023 Jun 06 11:59 AM
Quantity (QUAN) and Amount fields (CURR) must be attached to a unit of measure code (UNIT) or a currency code (CUCY)
2023 Jun 06 12:16 PM
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
2023 Jun 06 12:21 PM
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.
2023 Jun 06 12:23 PM
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.
2023 Jun 06 12:27 PM
2023 Jun 06 12:45 PM
Check definition of uom and currency code,
2023 Jun 07 5:05 AM
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
2023 Jun 07 6:44 AM
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
2023 Jun 07 6:46 AM
2023 Jun 07 6:47 AM
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.
2023 Jun 07 9:11 AM
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
2023 Jun 07 9:41 AM
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.
2023 Jun 07 9:39 AM
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