SAP BOM的类二维报表
一个简单BOM的类二维报表。
代码如下:
TABLES: MARA, T001W, AUFK.TYPES: BEGIN OF TY_OUTPUT,IDNRK TYPE STPOX-IDNRK, "物料编码MAKTX TYPE MAKT-MAKTX, "物料名称NORMT TYPE MARA-NORMT, "零件简码ZZPURT TYPE MARC-ZZPURT, "EDMC采购类型LIFNR TYPE STRING, "供应商编码LIFNR_NM TYPE STRING, "供应商名称POTX1 TYPE STPOX-POTX1, "下一落点BESKZ TYPE MARC-BESKZ, "采购类型SOBSL TYPE MARC-SOBSL, "特殊采购类RGEKZ TYPE MARC-RGEKZ, "反冲SORTF TYPE STPOX-SORTF, "排序字符串DUMPS TYPE STPOX-DUMPS, "虚拟项目标识MTART TYPE MARA-MTART, "物料类型MATKL TYPE MARA-MATKL, "物料组MEINS TYPE MARA-MEINS, "基本单位END OF TY_OUTPUT.DATA: GT_OUTPUT TYPE TABLE OF TY_OUTPUT,GS_OUTPUT TYPE TY_OUTPUT.TYPES: BEGIN OF TY_ITEM,MATNR TYPE MARA-MATNR, "物料号IDNRK TYPE STPOX-IDNRK, "组件SORTF TYPE STPOX-SORTF, "排序字符串DUMPS TYPE STPOX-DUMPS, "虚拟项目标识POTX1 TYPE STPOX-POTX1, "下一落点MNGLG TYPE STPOX-MNGLG, "数量END OF TY_ITEM.DATA: GT_ITEM TYPE TABLE OF TY_ITEM,GS_ITEM TYPE TY_ITEM.DATA: GT_FCAT TYPE LVC_T_FCAT,GS_FCAT TYPE LVC_S_FCAT.
DATA: GS_LAYO TYPE LVC_S_LAYO.FIELD-SYMBOLS: <GT_OUTPUT> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <GS_OUTPUT> .SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR NO INTERVALS. "MTOC
PARAMETERS: P_WERKS TYPE T001W-WERKS OBLIGATORY DEFAULT '6002'. "工厂
PARAMETERS: P_ERDAT TYPE AUFK-ERDAT OBLIGATORY DEFAULT SY-DATUM . "时间
SELECTION-SCREEN END OF BLOCK BLK .INITIALIZATION.AT SELECTION-SCREEN.AT SELECTION-SCREEN OUTPUT.TOP-OF-PAGE.START-OF-SELECTION.
"创建动态内表
PERFORM FRM_CRT_DYNTAB.
"获取数据
PERFORM FRM_SELECT_DATA.
"处理数据
PERFORM FRM_PROCESS_DATA.END-OF-SELECTION.
"展示数据
PERFORM FRM_SHOW_DATA.END-OF-PAGE.*&---------------------------------------------------------------------*
*& Form FRM_CRT_DYNTAB
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CRT_DYNTAB .DATA: LV_NUM TYPE EKPO-EBELP.DATA: R_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR.DATA: LT_DFIES TYPE DDFIELDS,LS_FIELD TYPE DFIES."获取结构属性R_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( GS_OUTPUT ).CALL METHOD CL_SALV_DATA_DESCR=>READ_STRUCTDESCREXPORTINGR_STRUCTDESCR = R_TABDESCRRECEIVINGT_DFIES = LT_DFIES."将获取到的结构字段属性转存到内表中,并进行一些处理LOOP AT LT_DFIES INTO LS_FIELD.CLEAR GS_FCAT.MOVE-CORRESPONDING LS_FIELD TO GS_FCAT.IF GS_FCAT-FIELDNAME EQ 'LIFNR'.GS_FCAT-SCRTEXT_L = '供应商编码'.ENDIF.IF GS_FCAT-FIELDNAME EQ 'LIFNR_NM'.GS_FCAT-SCRTEXT_L = '供应商名称'.ENDIF.IF GS_FCAT-FIELDNAME EQ 'POTX1'.GS_FCAT-SCRTEXT_L = '下一落点'.ENDIF.
* IF GS_FCAT-FIELDNAME EQ 'DUMPS'.
* GS_FCAT-CHECKBOX = 'X'.
* ENDIF.
* IF GS_FCAT-INTTYPE = 'P'.
* GS_FCAT-INTLEN = 23.
* ENDIF.APPEND GS_FCAT TO GT_FCAT.ENDLOOP.SORT S_MATNR.DELETE ADJACENT DUPLICATES FROM S_MATNR.CLEAR LV_NUM.LOOP AT S_MATNR.CLEAR GS_FCAT."因为物料号的长度为40位,而FIELDNAME这个字段长度只有30位,所以这里用了一个编号拼接代替物料号LV_NUM = LV_NUM + 1.GS_FCAT-FIELDNAME = 'MTOC' && LV_NUM.GS_FCAT-SCRTEXT_L = S_MATNR-LOW.GS_FCAT-INTTYPE = 'P'.GS_FCAT-INTLEN = 23.GS_FCAT-DECIMALS = 2.APPEND GS_FCAT TO GT_FCAT.ENDLOOP."构造出动态内表DATA: DY_TABLE TYPE REF TO DATA.DATA: REF_LINE TYPE REF TO DATA.CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLEEXPORTINGIT_FIELDCATALOG = GT_FCATIMPORTINGEP_TABLE = DY_TABLE.ASSIGN DY_TABLE->* TO <GT_OUTPUT>.CREATE DATA REF_LINE LIKE LINE OF <GT_OUTPUT>.ASSIGN REF_LINE->* TO <GS_OUTPUT>.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SELECT_DATA .DATA: LV_MATNR TYPE MARA-MATNR.DATA: LT_STB TYPE TABLE OF STPOX,LS_STB TYPE STPOX."用屏幕输入的物料编码展开BOM,现将每个BOM的数据都记录到一个内表中,以物料号,组件,排序字符串为主键LOOP AT S_MATNR.CLEAR LV_MATNR.LV_MATNR = S_MATNR-LOW.
"展开BOMCLEAR LT_STB.CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'EXPORTINGCAPID = 'PP01'DATUV = P_ERDATEMENG = 1MEHRS = 'X'MTNRV = LV_MATNRWERKS = P_WERKSTABLESSTB = LT_STB
* MATCAT =EXCEPTIONSALT_NOT_FOUND = 1CALL_INVALID = 2MATERIAL_NOT_FOUND = 3MISSING_AUTHORIZATION = 4NO_BOM_FOUND = 5NO_PLANT_DATA = 6NO_SUITABLE_BOM_FOUND = 7CONVERSION_ERROR = 8OTHERS = 9.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.SORT LT_STB BY IDNRK.CLEAR LS_STB.LOOP AT LT_STB INTO LS_STB.CLEAR GS_ITEM.GS_ITEM-MATNR = LV_MATNR. "MTOCGS_ITEM-IDNRK = LS_STB-IDNRK. "组件GS_ITEM-SORTF = LS_STB-SORTF. "排序字符串GS_ITEM-POTX1 = LS_STB-POTX1. "下一落点GS_ITEM-DUMPS = LS_STB-DUMPS. "下一落点
* GS_MTOC1-STLNR = LS_STB-STLNR. "物料单GS_ITEM-MNGLG = LS_STB-MNGLG.APPEND GS_ITEM TO GT_ITEM.CLEAR LS_STB.ENDLOOP.ENDLOOP.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .DATA: LT_ITEM TYPE TABLE OF TY_ITEM,LS_ITEM TYPE TABLE OF TY_ITEM."以组件和排序字符串为组件,去重,然后获取相关的数据LT_ITEM[] = GT_ITEM[].SORT LT_ITEM BY IDNRK SORTF.DELETE ADJACENT DUPLICATES FROM LT_ITEM COMPARING IDNRK SORTF.SORT GT_ITEM BY IDNRK SORTF."将数据转存和取出其他一些字段值SELECT A~IDNRK,A~SORTF,A~DUMPS,A~POTX1,B~NORMT,B~MTART,B~MATKL,B~MEINS,C~MAKTX,D~ZZPURT,D~BESKZ,D~SOBSL,D~RGEKZFROM @LT_ITEM AS AINNER JOIN MARA AS B ON A~IDNRK EQ B~MATNRINNER JOIN MAKT AS C ON B~MATNR EQ C~MATNR ANDC~SPRAS EQ @SY-LANGUINNER JOIN MARC AS D ON B~MATNR EQ D~MATNR ANDD~WERKS EQ @P_WERKSINTO CORRESPONDING FIELDS OF TABLE @<GT_OUTPUT>.LOOP AT <GT_OUTPUT> ASSIGNING <GS_OUTPUT>.ASSIGN COMPONENT 'IDNRK' OF STRUCTURE <GS_OUTPUT> TO FIELD-SYMBOL(<FS_IDNRK>).LOOP AT GT_ITEM INTO GS_ITEM WHERE IDNRK = <FS_IDNRK>."因为MTOC用的是编码,所以这里需要一个转换READ TABLE GT_FCAT INTO GS_FCAT WITH KEY SCRTEXT_L = GS_ITEM-MATNR.IF SY-SUBRC EQ 0.ASSIGN COMPONENT GS_FCAT-FIELDNAME OF STRUCTURE <GS_OUTPUT> TO FIELD-SYMBOL(<FS_FIELD>).<FS_FIELD> = GS_ITEM-MNGLG.ENDIF.ENDLOOP.ENDLOOP.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SHOW_DATA .PERFORM FRM_SET_LAYO.PERFORM FRM_SET_FCAT.PERFORM FRM_SET_ALVO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYO .CLEAR GS_LAYO.GS_LAYO-ZEBRA = 'X'.GS_LAYO-CWIDTH_OPT = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_FCAT .ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALVO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_ALVO .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGI_CALLBACK_PROGRAM = SY-REPID
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_GRID_SETTINGS =IS_LAYOUT_LVC = GS_LAYOIT_FIELDCAT_LVC = GT_FCATI_DEFAULT = 'X'I_SAVE = 'A'
* IS_VARIANT =
* IT_EVENTS =TABLEST_OUTTAB = <GT_OUTPUT>EXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.
显示效果如下:
报表的Y轴是选择屏幕输入的BOM物料展开后下面使用到的用料,X轴是这些组件的相关数据,选择屏幕上输入一个BOM物料号,X轴就会增加一列,这一列显示的是这个BOM下这行组件的用量。
PS:供应商编码请自行取值。
OVER……
SAP BOM的类二维报表相关推荐
- mysql 二维表 查询_二维报表数据表设计
报表原型: 这里随便挑了一个二维报表 二维报表设计分析: 上面的报表原型行和列都有数据项,我们可以根据地理位置的经纬度定坐标点的思想来进行设计 这里使用列行来表示 c1r1表示第一列第一行 c1r2表 ...
- Python——两类二维数据线性判别fisher
题目: 说明:下述问题在 Python 中编程求解. 1.已知两类二维数据, (1)第一类共 4 个样本:[6,6],[4,5],[5,5],[5,4],第二类共 4 个样本: [0,1],[1,2] ...
- Himall商城图形码帮助类二维码中生成图片(1)
Himall上次图形吗帮助类 using com.google.zxing; using com.google.zxing.common; using System; using System.Col ...
- java合成海报的工具类(二维码、头像、海报)
参考网站 https://my.oschina.net/u/2426590/blog/3027726 java Graphics2D绘制文字并居中并解决服务器乱码问题 https://blog.csd ...
- Himall商城图形码帮助类二维码中生成图片(2)
/// <summary> /// 生成图片 /// </summary> /// <param name="c ...
- Android-生成二维码工具类
目录 二维码生成工具类 二维码生成工具类 /*** 生成条形码和二维码的工具*/ public class ZXingUtils {/*** 生成二维码 要转换的地址或字符串,可以是中文** @par ...
- com.google.zxing 二维码工具类
com.google.zxing 二维码工具类 pom 工具类 使用 pom <dependency><groupId>com.google.zxing</groupId ...
- 如何制作库位管理二维码
库位管理是指利用库位使商品处于"被保管状态"并能明确显示出商品所储存的位置,同时能够准确记录商品位置和数量上的变动,使管理者能够随时掌握商品的数量.位置及去向.库位管理本质上是一种 ...
- 二维码扫描和应用跳转
转载自: http://sindrilin.com/ios-dev/2015/11/01/二维码扫描和应用跳转.html 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫 ...
最新文章
- 彻底理解 Cookie,Session,Token
- /proc文件夹介绍
- EmbeddedWebBrowser(EmbeddedWB)不显示图片
- freemarker的${!}
- 一系列用于Fuzzing学习的资源汇总
- 使用netfilter_queue改包笔记
- linux性能监控常用命令
- Leetcode 15.三数之和
- Ubuntu 18.04/20.04 部署minikube
- STL中的序列式容器——vector(向量)
- ubuntu系统安装TeamViwer远程控制软件
- php sns 源码,全网首发-LaySNS高仿资源网源码免费分享
- 谈谈我对广告投放系统的一点认识
- SecureCRT快捷键大全
- echarts使用复选框样式legend控制显隐
- 隐马尔科夫模型(HMMM)
- office办公所有版本齐全
- 文件传输协议FTP/TFTP/SSH/SCP——应用层
- 关于Python绘制柱状图等图形,以及数据拆分与合并详细讲解
- JQuery自定义属性的设置和获取