库龄报表

转载:http://www.itpub.net/thread-2066784-1-11.html


前不久给客户开发库龄报表,查了很多资料,除了呆滞物料的统计方法以外,第二种统计方法叫做统计库存的集中度,但是没有给出具体逻辑,搞的头都大了,现在我把理解的奉上,以供大家参考,若有错误,敬请谅解,毕竟水平有限!

库龄报表:统计各时间段集中度        
1.先统计各时间段的收货数量;



2.以当前的库存数量以及各时间段的收货数量来推算各时间段的库存数量;


3.查找第一个收货数量不为0的时间段,已这个时间段开始计算库龄;


4.比较前n个时间段的收货数量的和与现有库存数量进行判断;


5.查找这样的一个时间段(前n项和小于现有库存数量,前n+1项和大于现有库存数量);

6.前n个时间段的库存数量小于库存数量,则各阶段的库龄为各阶段的收货数,前n+1个时间段的库龄则为现有库存减去前n个时间段的库龄数量;
7.特殊情况是当期收货数量大于现有库存数量的情况则第一阶段的库存为现有库存数量,然后往后依次进行相减;

8.各阶段计算完成之后的值为负数皆为零;        
第一种情况:当期收货数量小于现有库存数量      
0-30天收货数量 30-60天收货数量 60-120天收货数量 120-180天收货数量 180天以上收货数量 现有库存
X1 X2 X3 X4 X5 U
100 50 0 80 0 210
具体计算方法:          
描述 对比分析   库龄    
0-30天库龄 X1<U(100<210)   Z1=X1=100    
30-60天库龄 X1+X2<U(100+50<210) Z2=X2=50    
60-120天库龄 X1+X2+X3<U(100+50+0<210) Z3=X3=0    
120-180天库龄 X1+X2+X3+X4>U(100+50+0+80=230>210) Z4=U-X1-X2-X3=210-50-100-0=60  
180天以上库龄 X1+X2+X3+X4+X5>U(100+50+0+80=230>210) Z5=U-X1-X2-X3-X4=210-50-100-0-80=-30=0  
           
第二种情况:当期收货数量大于现有库存数量      
0-30天收货数量 30-60天收货数量 60-120天收货数量 120-180天收货数量 180天以上收货数量 现有库存
X1 X2 X3 X4 X5 U
230 50 0 80 0 210
具体计算方法:          
描述 对比分析   库龄    
0-30天库龄 X1>U(230>210)   Z1=U=210    
30-60天库龄 X1+X2>U(230+50>210) Z2=Z1-X1=210-230=-20=0  
### SAP报表开发逻辑 SAP报表的开发逻辑主要涉及查询存物料的总存、获取入记录,并基于倒推规则计算每行采购收货在现有存中的余量,最后生成分析报表。以下是详细的开发逻辑说明: #### 1. 查询存物料的总存 通过访问SAP标准表`MARD`或特定行业表(如鞋服行业的`MCHB`),可以查询出所有在物料的总存。此步骤用于确定当前存的数量和状态[^2]。 ```sql SELECT matnr werks lgort labst INTO TABLE @lt_mard_data FROM mard WHERE werks = @plant AND matnr IN @material_list. ``` #### 2. 获取入记录 从表`MSEG`中提取所有相关的入记录。这些记录包含物料的入日期、数量以及其他相关信息,为后续计算提供基础数据。 ```sql SELECT matnr werks lgort umsdat umsmng INTO TABLE @lt_mseg_data FROM mseg WHERE werks = @plant AND matnr IN @material_list AND umsdat <= @current_date. ``` #### 3. 计算每行采购收货在现有存中的余量 根据倒推规则,结合总存和入明细,计算每行采购收货在现有存中的剩余数量。这一过程需要按照时间顺序对入记录进行排序,并逐步扣减存数量,直到存被完全分配到对应的入批次[^2]。 ```abap LOOP AT lt_mseg_data INTO wa_mseg_data. IF total_stock >= wa_mseg_data-umsmng. wa_mseg_data-remaining_stock = wa_mseg_data-umsmng. total_stock = total_stock - wa_mseg_data-umsmng. ELSE. wa_mseg_data-remaining_stock = total_stock. total_stock = 0. ENDIF. MODIFY lt_mseg_data FROM wa_mseg_data. ENDLOOP. ``` #### 4. 查询分析报表 基于上述计算结果,生成分析报表报表通常按不同的时间段(如30天、60天、90天等)展示存物料的分布。可以通过自定义报表或使用SAP标准事务代码(如`MB52`)来实现报表展示。 ```abap DATA: lt_age_report TYPE TABLE OF zage_report. LOOP AT lt_mseg_data INTO wa_mseg_data. wa_age_report-matnr = wa_mseg_data-matnr. wa_age_report-werks = wa_mseg_data-werks. wa_age_report-age_days = sy-datum - wa_mseg_data-umsdat. wa_age_report-remaining_stock = wa_mseg_data-remaining_stock. APPEND wa_age_report TO lt_age_report. ENDLOOP. ``` #### 5. 报表输出 利用SAP Smart Forms、ALV或Script等方式输出分析报表。这些工具可以根据需求灵活设计报表格式和内容[^1]。 ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid it_fieldcat = lt_fieldcat[] TABLES t_outtab = lt_age_report. ``` ### 注意事项 - 在开发过程中,需确保数据的准确性和一致性,避免因数据质量问题导致计算错误。 - 如果涉及大量数据,建议优化查询性能,例如使用索引表或分批处理数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值