目录
业务需求:
实施方案:
参照文章
PT项目-SAP库存账龄分析报表_sap存货账龄代码-CSDN博客
第一部分报表可以通过俄罗斯报表完成。
第二部分通过开发完成。
对于批次管理的物料通过零件号和批次号查询对应批次的MCH1的生产时间,根据生产时间将对应批次时间填写到对应时间段的数量里。
对于无批次管理物料,通过查询matdoc的收货记录,将对应的数量按照FIFO的逻辑填写到对应日期里。需要先对零件号不同仓库的数量进行汇总。
第一部分交付
展示俄罗斯报表内容。
源数据通过submit 俄罗斯报表,将run_time_table的内容写入动态表。
由于动态表不会进行展示,因此创建gt_qcqm的内表来接收动态表内容。
实现过程中,数据定义,fieldcat,取得数据过程中只能使用笨办法一行一行的写。实施过程中用宏定义实现fieldcat和取得数据的过程。
实现过程:
选择屏幕:
保留了批次非批次选择,为第二部分开发使用。
事件: start-of-selection.
子例程:
DISPLAY_DATA
GET_BEG_END_DATE
GET_FIELDCAT
GET_J3RFLVMOBVEDH_DATA
技术方面的进步:
1,submit 程序时不显示直接返回。
需要定义 CL_salv_bs_runtime_info 的值。
display的选项的设置容调用程序的展示画面停止。
后续需要清除对应的设置。 => clear_all( ).
2,动态表的取值。
动态表中的一行指针到<fs_data>后,通过 gs_qcqm-bukrs = <fs_data>-bukrs, 不能获取内容。
需要通过指针指向对应的值。assign compant ‘BUKRS’ of structure <fs_data> to <dyn_data>.
然后通过 赋值语句将指针对应数值取出来。
3,ALV报表对应字段F1显示技术信息。
俄罗斯报表F1->显示技术信息并不展示对应的透明表和字段信息。而是仅仅展示对应的数据元素。 这个方式在做ALV报表是可以参考。
通过下述方式实现。
效果如下:
代码如下:
*&---------------------------------------------------------------------*
*& Report ZMMR005_N
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr005_n.
TABLES:sscrfields, matdoc .
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
"--->查询屏幕
SELECT-OPTIONS:
s_bukrs FOR matdoc-bukrs , "公司代码
s_werks FOR matdoc-werks, "工厂
s_lgort FOR matdoc-lgort, "库存地点
s_matnr FOR matdoc-matnr . "物料
PARAMETERS: p_date TYPE char6 OBLIGATORY .
SELECTION-SCREEN: END OF BLOCK blk1.
SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002.
PARAMETERS: r_pc RADIOBUTTON GROUP typ USER-COMMAND sele DEFAULT 'X'. "按批次查询
PARAMETERS: r_fpc RADIOBUTTON GROUP typ. "不按批次
SELECTION-SCREEN: END OF BLOCK blk2.
DATA: g_beg_datum TYPE sy-datum.
DATA: g_last_datum TYPE sy-datum.
* 定义接受俄罗斯报表相关信息的表
TYPES:BEGIN OF ty_qcqm, "期初期末
bukrs TYPE bukrs, "company
werks TYPE werks_d, "plang
lgort TYPE lgort_d, "storage location
lgobe TYPE lgobe, "storage location description
charg TYPE charg_d, "SAP batch
sobkz TYPE sobkz, " special stock
matnr TYPE matnr , "物料编码.
maktx TYPE maktx, "物料描述
zqckcsl TYPE j_3rm_begstock, "stock quantity on period start
zqckcje TYPE j_3rm_begval, "stock value on period star
zqjshsl TYPE j_3rm_recptstock, "期间收货数量total good receipt quantity
zqjshje TYPE j_3rm_recptval, "期间收货金额total good receiptvalue
zqjfhsl TYPE j_3rm_isustock, "期间发货数量 total good issue quantity
zqjfhje TYPE j_3rm_isuval, "期间发货金额 total good issue value
zqmkcsl TYPE j_3rm_endstock , "期末库存数量 stock quantity on period end.
zqmkcje TYPE j_3rm_endval , "期末库存金额 stock quantity on period end.
debreval TYPE j_3rm_debreval , "Debit Revaluation.
credreval TYPE j_3rm_credreval, " credit Reevaluation.
lifnr TYPE elifn , " 供应商
kunnr TYPE ekunn , " 客户
vbeln TYPE mat_kdauf , " 销售订单
posnr TYPE mat_kdpos , " 销售订单项目
linkk TYPE j_3rmanylink , " Order/WBS/Vendor/Customer
bwkey TYPE bwkey , " 估价范围
pspnr TYPE mat_pspnr , " WBS元素
bklas TYPE bklas , " 评估类
saknr TYPE saknr , " 总账科目
mtart TYPE mtart , " 物料类型
matkl TYPE matkl , " 物料组
extwg TYPE extwg , " 外部物料组
bismt TYPE bismt , " 旧物料号
ekgrp TYPE ekgrp , " 采购组
meins TYPE meins , " 基本基本计量
waers TYPE waers , " 货币
vprsv TYPE vprsv , " 价格控制
receipt_from_purchase_stock TYPE j_3rm_purchstock , " 采购收货数量
receipt_from_purchase_value TYPE j_3rm_purchval , " 采购收货金额
issue_to_sales_stock TYPE j_3rm_salestock , " 销售发货数量
issue_to_sales_value TYPE j_3rm_saleval , " 销售发货金额
receipt_from_manufacture_stock TYPE j_3rm_mrstock , " 生产收货数量
receipt_from_manufacture_value TYPE j_3rm_mrval , " 生产收货金额
issue_to_manufacture_stock TYPE j_3rm_misustock , " 生产发货数量
issue_to_manufacture_value TYPE j_3rm_misuval , " 生产发货金额
receipt_from_transfer_stock TYPE j_3rm_xrecstock , " 收货数量_转储
receipt_from_transfer_value TYPE j_3rm_xrecval , " 收货金额_转储
issue_to_transfer_stock TYPE j_3rm_xisustock , " 发货数量_转储
issue_to_transfer_value TYPE j_3rm_xisuval , " 发货金额_转储
receipt_other_stock TYPE j_3rm_orstock , " 收货数量_其他
receipt_other_value TYPE j_3rm_orval , " 收货金额_其他
issue_other_stock TYPE j_3rm_oisustock , " 发货数量_其他
issue_other_value TYPE j_3rm_oisuval , " 发货金额_其他
issue_to_int_purposes_stock TYPE j_3rm_isuintpurstock , " 发货数量_内部用途
issue_to_int_purposes_value TYPE j_3rm_isuintpurval , " 发货金额_内部用途
vbap_kzbws TYPE bwtar_d , " 评估类型
prps_kzbws TYPE kzbws , " 评估
difference_between_values TYPE j_3rm_isuintpurval, " 金额差异
END OF ty_qcqm.
DATA:gs_qcqm TYPE ty_qcqm.
DATA:gt_qcqm LIKE TABLE OF gs_qcqm.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_layout TYPE lvc_s_layo.
START-OF-SELECTION.
PERFORM get_beg_end_date.
PERFORM get_J3RFLVMOBVEDH_data.
PERFORM get_fieldcat.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Form get_J3RFLVMOBVEDH_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_J3RFLVMOBVEDH_data .
*从俄罗斯报表中生成动态表<lt_alv_data>
DATA:lr_alv_data TYPE REF TO data.
DATA: rspar TYPE TABLE OF rsparams.
FIELD-SYMBOLS : <lt_alv_data> TYPE ANY TABLE.
cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false
metadata = abap_false
data = abap_true ).
CLEAR lr_alv_data.
UNASSIGN <lt_alv_data>.
CLEAR: rspar.
rspar = VALUE #( ( selname = 'SO_BUDAT' sign = 'I' option = 'BT' low = g_beg_datum high = g_last_datum )
( selname = 'SO_MATNR' sign = s_matnr-sign option = s_matnr-option low = s_matnr-low high = s_matnr-high )
).
SUBMIT j_3rmobvedh
WITH so_bukrs-low EQ '6000'
WITH SELECTION-TABLE rspar
AND RETURN .
TRY.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_alv_data ).
ASSIGN lr_alv_data->* TO <lt_alv_data>.
CATCH cx_salv_bs_sc_runtime_info.
MESSAGE 'Unable to retrieve ALV data! Please try other conditions.' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
* 定义宏,减少代码量。
DEFINE get_gt_qcqm.
ASSIGN COMPONENT &1 OF STRUCTURE <fs_data> TO <dyn_data>.
IF sy-subrc EQ 0.
&2 = <dyn_data>.
UNASSIGN <dyn_data>.
ENDIF.
END-OF-DEFINITION.
*动态表 <lt_alv_data>中数值存储到全局表gt_qcqm 期初期末表。
FIELD-SYMBOLS <dyn_data> TYPE any.
IF <lt_alv_data> IS ASSIGNED.
LOOP AT <lt_alv_data> ASSIGNING FIELD-SYMBOL(<fs_data>) .
get_gt_qcqm 'BUKRS' gs_qcqm-bukrs .
get_gt_qcqm 'WERKS' gs_qcqm-werks .
get_gt_qcqm 'LGORT' gs_qcqm-lgort .
get_gt_qcqm 'LGOBE' gs_qcqm-lgobe .
get_gt_qcqm 'CHARG' gs_qcqm-charg .
get_gt_qcqm 'SOBKZ' gs_qcqm-sobkz .
get_gt_qcqm 'MATNR' gs_qcqm-matnr .
get_gt_qcqm 'MAKTX' gs_qcqm-maktx .
get_gt_qcqm 'QUANTITY_BEGIN_OF_PERIOD' gs_qcqm-zqckcsl .
get_gt_qcqm 'VALUE_BEGIN_OF_PERIOD' gs_qcqm-zqckcje .
get_gt_qcqm 'RECEIPT_STOCK' gs_qcqm-zqjshsl .
get_gt_qcqm 'RECEIPT_VALUE' gs_qcqm-zqjshje .
get_gt_qcqm 'ISSUE_STOCK' gs_qcqm-zqjfhsl .
get_gt_qcqm 'ISSUE_VALUE' gs_qcqm-zqjfhje .
get_gt_qcqm 'QUANTITY_END_OF_PERIOD' gs_qcqm-zqmkcsl .
get_gt_qcqm 'VALUE_END_OF_PERIOD' gs_qcqm-zqmkcje .
get_gt_qcqm 'DEBREVAL' gs_qcqm-debreval .
get_gt_qcqm 'CREDREVAL' gs_qcqm-credreval .
get_gt_qcqm 'LIFNR' gs_qcqm-lifnr . " 供应商
get_gt_qcqm 'KUNNR' gs_qcqm-kunnr . " 客户
get_gt_qcqm 'VBELN' gs_qcqm-vbeln . " 销售订单
get_gt_qcqm 'POSNR' gs_qcqm-posnr . " 销售订单项目
get_gt_qcqm 'LINKK' gs_qcqm-linkk . " Order/WBS/Vendor/Customer
get_gt_qcqm 'BWKEY' gs_qcqm-bwkey . " 估价范围
get_gt_qcqm 'PSPNR' gs_qcqm-pspnr . " WBS元素
get_gt_qcqm 'BKLAS' gs_qcqm-bklas . " 评估类
get_gt_qcqm 'SAKNR' gs_qcqm-saknr . " 总账科目
get_gt_qcqm 'MTART' gs_qcqm-mtart . " 物料类型
get_gt_qcqm 'MATKL' gs_qcqm-matkl . " 物料组
get_gt_qcqm 'EXTWG' gs_qcqm-extwg . " 外部物料组
get_gt_qcqm 'BISMT' gs_qcqm-bismt . " 旧物料号
get_gt_qcqm 'EKGRP' gs_qcqm-ekgrp . " 采购组
get_gt_qcqm 'MEINS' gs_qcqm-meins . " 基本基本计量
get_gt_qcqm 'WAERS' gs_qcqm-waers . " 货币
get_gt_qcqm 'VPRSV' gs_qcqm-vprsv . " 价格控制
get_gt_qcqm 'RECEIPT_FROM_PURCHASE_STOCK' gs_qcqm-receipt_from_purchase_stock . " 采购收货数量
get_gt_qcqm 'RECEIPT_FROM_PURCHASE_VALUE' gs_qcqm-receipt_from_purchase_value . " 采购收货金额
get_gt_qcqm 'ISSUE_TO_SALES_STOCK' gs_qcqm-issue_to_sales_stock . " 销售发货数量
get_gt_qcqm 'ISSUE_TO_SALES_VALUE' gs_qcqm-issue_to_sales_value . " 销售发货金额
get_gt_qcqm 'RECEIPT_FROM_MANUFACTURE_STOCK' gs_qcqm-receipt_from_manufacture_stock . " 生产收货数量
get_gt_qcqm 'RECEIPT_FROM_MANUFACTURE_VALUE' gs_qcqm-receipt_from_manufacture_value . " 生产收货金额
get_gt_qcqm 'ISSUE_TO_MANUFACTURE_STOCK' gs_qcqm-issue_to_manufacture_stock . " 生产发货数量
get_gt_qcqm 'ISSUE_TO_MANUFACTURE_VALUE' gs_qcqm-issue_to_manufacture_value . " 生产发货金额
get_gt_qcqm 'RECEIPT_FROM_TRANSFER_STOCK' gs_qcqm-receipt_from_transfer_stock . " 收货数量_转储
get_gt_qcqm 'RECEIPT_FROM_TRANSFER_VALUE' gs_qcqm-receipt_from_transfer_value . " 收货金额_转储
get_gt_qcqm 'ISSUE_TO_TRANSFER_STOCK' gs_qcqm-issue_to_transfer_stock . " 发货数量_转储
get_gt_qcqm 'ISSUE_TO_TRANSFER_VALUE' gs_qcqm-issue_to_transfer_value . " 发货金额_转储
get_gt_qcqm 'RECEIPT_OTHER_STOCK' gs_qcqm-receipt_other_stock . " 收货数量_其他
get_gt_qcqm 'RECEIPT_OTHER_VALUE' gs_qcqm-receipt_other_value . " 收货金额_其他
get_gt_qcqm 'ISSUE_OTHER_STOCK' gs_qcqm-issue_other_stock . " 发货数量_其他
get_gt_qcqm 'ISSUE_OTHER_VALUE' gs_qcqm-issue_other_value . " 发货金额_其他
get_gt_qcqm 'ISSUE_TO_INT_PURPOSES_STOCK' gs_qcqm-issue_to_int_purposes_stock . " 发货数量_内部用途
get_gt_qcqm 'ISSUE_TO_INT_PURPOSES_VALUE' gs_qcqm-issue_to_int_purposes_value . " 发货金额_内部用途
get_gt_qcqm 'VBAP_KZBWS' gs_qcqm-vbap_kzbws . " 评估类型
get_gt_qcqm 'PRPS_KZBWS' gs_qcqm-prps_kzbws . " 评估
get_gt_qcqm 'DIFFERENCE_BETWEEN_VALUES' gs_qcqm-difference_between_values . " 价格差异
gs_qcqm-zqjshje = gs_qcqm-zqjshje - gs_qcqm-debreval .
gs_qcqm-zqjfhje = gs_qcqm-zqjfhje - gs_qcqm-credreval .
COLLECT gs_qcqm INTO gt_qcqm.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display_data .
DATA:alv_variant LIKE disvariant.
alv_variant-report = sy-repid.
alv_variant-handle = '1'. "相当于不同ALV变式的唯一识别
gs_layout-cwidth_opt = 'X'.
gs_layout-zebra = 'X'.
gs_layout-sel_mode = 'A'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_save = 'A'
is_variant = alv_variant
TABLES
t_outtab = gt_qcqm.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_fieldcat .
DEFINE alv_fcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-tabname = 'GT_QCQM' .
gs_fieldcat-coltext = gs_fieldcat-scrtext_l = gs_fieldcat-scrtext_m = &2.
gs_fieldcat-rollname = &3.
gs_fieldcat-no_out = 'X'.
gs_fieldcat-col_opt = 'X'.
gs_FIELDCAT-no_zero = &4.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
END-OF-DEFINITION.
alv_fcat 'BUKRS' TEXT-101 'BUKRS' 'X' .
alv_fcat 'WERKS' TEXT-102 'WERKS_D' 'X' .
alv_fcat 'LGORT' TEXT-103 'LGORT_D' 'X' .
alv_fcat 'LGOBE' TEXT-104 'LGOBE' 'X' .
alv_fcat 'MATNR' TEXT-105 'MATNR' 'X' .
alv_fcat 'MAKTX' TEXT-106 'MAKTX' 'X' .
alv_fcat 'CHARG' TEXT-107 'CHARG_D' 'X' .
alv_fcat 'SOBKZ' TEXT-108 'SOBKZ' 'X' .
alv_fcat 'ZQCKCSL' TEXT-109 'J_3RM_BEGSTOCK' '' .
alv_fcat 'ZQCKCJE' TEXT-110 'J_3RM_BEGVAL' '' .
alv_fcat 'ZQJSHSL' TEXT-111 'J_3RM_RECPTSTOCK' '' .
alv_fcat 'ZQJSHJE' TEXT-112 'J_3RM_RECPTVAL' '' .
alv_fcat 'ZQJFHSL' TEXT-113 'J_3RM_ISUSTOCK' '' .
alv_fcat 'ZQJFHJE' TEXT-114 'J_3RM_ISUVAL' '' .
alv_fcat 'ZQMKCSL' TEXT-115 'J_3RM_ENDSTOCK' '' .
alv_fcat 'ZQMKCJE' TEXT-116 'J_3RM_ENDVAL' '' .
alv_fcat 'LIFNR' TEXT-117 'ELIFN' 'X' .
alv_fcat 'KUNNR' TEXT-118 'EKUNN' 'X' .
alv_fcat 'VBELN' TEXT-119 'MAT_KDAUF' 'X' .
alv_fcat 'POSNR' TEXT-120 'MAT_KDPOS' 'X' .
alv_fcat 'LINKK' TEXT-121 'J_3RMANYLINK' 'X' .
alv_fcat 'BWKEY' TEXT-122 'BWKEY' 'X' .
alv_fcat 'PSPNR' TEXT-123 'MAT_PSPNR' 'X' .
alv_fcat 'BKLAS' TEXT-124 'BKLAS' 'X' .
alv_fcat 'SAKNR' TEXT-125 'SAKNR' 'X' .
alv_fcat 'MTART' TEXT-126 'MTART' 'X' .
alv_fcat 'MATKL' TEXT-127 'MATKL' 'X' .
alv_fcat 'EXTWG' TEXT-128 'EXTWG' 'X' .
alv_fcat 'BISMT' TEXT-129 'BISMT' 'X' .
alv_fcat 'EKGRP' TEXT-130 'EKGRP' 'X' .
alv_fcat 'MEINS' TEXT-131 'MEINS' 'X' .
alv_fcat 'WAERS' TEXT-132 'WAERS' 'X' .
alv_fcat 'VPRSV' TEXT-133 'VPRSV' 'X' .
alv_fcat 'RECEIPT_FROM_PURCHASE_STOCK' TEXT-134 'J_3RM_PURCHSTOCK' '' .
alv_fcat 'RECEIPT_FROM_PURCHASE_VALUE' TEXT-135 'J_3RM_PURCHVAL' '' .
alv_fcat 'ISSUE_TO_SALES_STOCK' TEXT-136 'J_3RM_SALESTOCK' '' .
alv_fcat 'ISSUE_TO_SALES_VALUE' TEXT-137 'J_3RM_SALEVAL' '' .
alv_fcat 'RECEIPT_FROM_MANUFACTURE_STOCK' TEXT-138 'J_3RM_MRSTOCK' '' .
alv_fcat 'RECEIPT_FROM_MANUFACTURE_VALUE' TEXT-139 'J_3RM_MRVAL' '' .
alv_fcat 'ISSUE_TO_MANUFACTURE_STOCK' TEXT-140 'J_3RM_MISUSTOCK' '' .
alv_fcat 'ISSUE_TO_MANUFACTURE_VALUE' TEXT-141 'J_3RM_MISUVAL' '' .
alv_fcat 'RECEIPT_FROM_TRANSFER_STOCK' TEXT-142 'J_3RM_XRECSTOCK' '' .
alv_fcat 'RECEIPT_FROM_TRANSFER_VALUE' TEXT-143 'J_3RM_XRECVAL' '' .
alv_fcat 'ISSUE_TO_TRANSFER_STOCK' TEXT-144 'J_3RM_XISUSTOCK' '' .
alv_fcat 'ISSUE_TO_TRANSFER_VALUE' TEXT-145 'J_3RM_XISUVAL' '' .
alv_fcat 'RECEIPT_OTHER_STOCK' TEXT-146 'J_3RM_ORSTOCK' '' .
alv_fcat 'RECEIPT_OTHER_VALUE' TEXT-147 'J_3RM_ORVAL' '' .
alv_fcat 'ISSUE_OTHER_STOCK' TEXT-148 'J_3RM_OISUSTOCK' '' .
alv_fcat 'ISSUE_OTHER_VALUE' TEXT-149 'J_3RM_OISUVAL' '' .
alv_fcat 'ISSUE_TO_INT_PURPOSES_STOCK' TEXT-150 'J_3RM_ISUINTPURSTOCK' '' .
alv_fcat 'ISSUE_TO_INT_PURPOSES_VALUE' TEXT-151 'J_3RM_ISUINTPURVAL' '' .
alv_fcat 'VBAP_KZBWS' TEXT-152 'BWTAR_D' 'X' .
alv_fcat 'PRPS_KZBWS' TEXT-153 'kzbws' 'X' .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_beg_end_date
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_beg_end_date .
g_beg_datum = p_date && '01'.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
i_date = g_beg_datum
IMPORTING
e_date = g_last_datum.
ENDFORM.