*-----------------------------------------------------------------------*
REPORT Z_XIAOSHOU_01. "根据自己的程序名修改
TABLES: VBAK,
VBAP,
KONV,
MSEG,
VBFA,
MKPF.
DATA:
"表名
BEGIN OF GIT_VBAK OCCURS 0,
VBELN TYPE VBAK-VBELN, "销售和分销凭证号
VKORG TYPE VBAK-VKORG, "销售组织
AUART TYPE VBAK-AUART, "销售凭证类型
WAERK TYPE VBAK-WAERK, "货币单位
KNUMV TYPE VBAK-KNUMV, "单据条件数
END OF GIT_VBAK,
BEGIN OF GIT_VBAP OCCURS 0,
VBELN TYPE VBAP-VBELN, "销售和分销凭证号
POSNR TYPE VBAP-POSNR, "销售凭证行项目
MATNR TYPE VBAP-MATNR, "物料号
ARKTX TYPE VBAP-ARKTX, "短文本
END OF GIT_VBAP,
BEGIN OF GIT_KONV OCCURS 0,
KNUMV TYPE KONV-KNUMV, "单据条件数
KPOSN TYPE KONV-KPOSN, "条件项目号
STUNR TYPE KONV-STUNR, "步骤编号
ZAEHK TYPE KONV-ZAEHK, "条件计数器
KBETR TYPE KONV-KBETR, "价格
KSCHL TYPE KONV-KSCHL, "条件类型
END OF GIT_KONV,
BEGIN OF GIT_VBFA OCCURS 0,
VBELV TYPE VBFA-VBELV, "先前的销售和分销凭证
POSNV TYPE VBFA-POSNV, "SD凭证的先前项目
VBELN TYPE VBFA-VBELN, "后续销售和分销凭证号
POSNN TYPE VBFA-POSNN, "SD凭证的后续项目
VBTYP_N TYPE VBFA-VBTYP_N, "后继凭证的凭证类别
RFMNG TYPE VBFA-RFMNG, "参考数量以基本计量单位计
END OF GIT_VBFA,
BEGIN OF GIT_MKPF OCCURS 0,
MBLNR TYPE MKPF-MBLNR, "物料凭证编号
MJAHR TYPE MKPF-MJAHR, "物料凭证年度
CPUDT TYPE MKPF-CPUDT, "会计凭证输入日期
END OF GIT_MKPF,
BEGIN OF GIT_MSEG OCCURS 0,
MBLNR TYPE MSEG-MBLNR, "物料凭证编号
MJAHR TYPE MSEG-MJAHR, "物料凭证年度
ZEILE TYPE MSEG-ZEILE, "物料凭证中的项目
MENGE TYPE MSEG-MENGE, "数量
MEINS TYPE MSEG-MEINS, "基本计量单位
END OF GIT_MSEG,
BEGIN OF GIT_RESULT OCCURS 0,
VKORG TYPE VBAK-VKORG, "销售组织
VBELN TYPE VBAP-VBELN, "销售订单号
POSNR TYPE VBAP-POSNR, "销售凭证项目
AUART TYPE VBAK-AUART, "销售凭证类型
MATNR TYPE VBAP-MATNR, "物料号
ARKTX TYPE VBAP-ARKTX, "短文本
CPUDT TYPE MKPF-CPUDT, "发货日期
MENGE TYPE MSEG-MENGE, "数量
MEINS TYPE MSEG-MEINS, "基本计量单位
WAERK TYPE VBAK-WAERK, "货币单位
JIAGE01 TYPE MSEG-MENGE, "列表价格(PR00)
JINE01 TYPE MSEG-MEINS, "列表金额
JIAGE02 TYPE MSEG-MENGE, "成本价(VPRS)
JINE02 TYPE MSEG-MEINS, "成本
END OF GIT_RESULT.
*变量申明
*RANGES: r_hkont FOR bseg-hkont. "G/L Account
*常量申明
*CONSTANTS:
*c_awtyp_vbrr TYPE bkpf-awtyp VALUE 'VBRR', "Refer. Transaction
TYPE-POOLS: slis. "引用ALV显示功能所需要的类型库
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv, "参考slis类型库中的t_fieldcat_alv定义变量。
prg LIKE sy-repid.
*选择屏幕申明
************************************************************************
* 选择屏幕申明 *
************************************************************************
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_VKORG for VBAK-VKORG OBLIGATORY, "销售组织
s_VBELN FOR VBAK-VBELN, "销售订单号
s_CPUDT FOR MKPF-CPUDT, "凭证中的过帐日期
s_MATNR FOR VBAP-MATNR. "物料号
SELECTION-SCREEN: END OF BLOCK b1.
*主程序
************************************************************************
* Start of selection *
************************************************************************
START-OF-SELECTION.
* Main process
PERFORM frm_main_process.
*&---------------------------------------------------------------------*
*& Form frm_main_process
*&---------------------------------------------------------------------*
* main process
*----------------------------------------------------------------------*
FORM frm_main_process .
* 取数
PERFORM frm_get_data.
* 整合数据
PERFORM frm_merge_data.
* 显示数据
PERFORM frm_display_data.
ENDFORM. " frm_main_process
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT
VBELN "销售和分销凭证号
VKORG "销售组织
AUART "销售凭证类型
WAERK "货币单位
KNUMV "单据条件数
INTO CORRESPONDING FIELDS OF TABLE GIT_VBAK
FROM VBAK
WHERE VBELN IN S_VBELN "销售订单
AND VKORG IN S_VKORG. "销售组织
IF GIT_VBAK[] IS NOT INITIAL.
SELECT
VBELN "销售和分销凭证号
POSNR "销售凭证行项目
MATNR "物料号
ARKTX "销售订单项目短文本
INTO CORRESPONDING FIELDS OF TABLE GIT_VBAP
FROM VBAP
FOR ALL ENTRIES IN GIT_VBAK
WHERE VBELN = GIT_VBAK-VBELN "销售订单
AND MATNR IN S_MATNR. "物料号
IF GIT_VBAP[] IS NOT INITIAL.
SELECT
VBELV "先前的销售和分销凭证
POSNV "SD凭证的先前项目
VBELN "后续销售和分销凭证号
POSNN "SD凭证的后续项目
VBTYP_N "后继凭证的凭证类别
RFMNG "参考数量以基本计量单位计算
INTO CORRESPONDING FIELDS OF TABLE GIT_VBFA
FROM VBFA
FOR ALL ENTRIES IN GIT_VBAP
WHERE VBELN = GIT_VBAP-VBELN "销售订单
AND POSNV = GIT_VBAP-POSNR. "销售凭证行项目
IF GIT_VBFA[] IS NOT INITIAL.
SELECT
MBLNR "物料凭证编号
MJAHR "物料凭证年度
ZEILE "物料凭证中的项目
MENGE "数量
MEINS "基本计量单位
INTO CORRESPONDING FIELDS OF TABLE GIT_MSEG
FROM MSEG
FOR ALL ENTRIES IN GIT_VBFA
WHERE MBLNR = GIT_VBFA-VBELN. "物料凭证编号
IF GIT_MSEG[] IS NOT INITIAL.
SELECT
MBLNR "物料凭证编号
MJAHR "物料凭证年度
CPUDT "会计凭证输入日期
INTO CORRESPONDING FIELDS OF TABLE GIT_MKPF
FROM MKPF
FOR ALL ENTRIES IN GIT_MSEG
WHERE MBLNR = GIT_MSEG-MBLNR "物料凭证编号
AND MJAHR = GIT_MSEG-MJAHR "物料凭证年度
AND CPUDT in S_CPUDT. "会计凭证输入
endif.
endif.
endif.
endif.
IF GIT_VBAK[] IS NOT INITIAL.
SELECT
KNUMV "单据条件数
KPOSN "条件项目号
STUNR "步骤编号
ZAEHK "条件计数器
KBETR "价格( 条件金额或百分数 )
KSCHL "条件类型
INTO CORRESPONDING FIELDS OF TABLE GIT_KONV
FROM KONV
FOR ALL ENTRIES IN GIT_VBAK
WHERE KNUMV = GIT_VBAK-KNUMV. "单据条件数
endif.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_MERGE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_MERGE_DATA .
SORT GIT_MKPF BY MBLNR MJAHR.
SORT GIT_VBFA BY VBELV POSNV.
SORT GIT_VBAP BY VBELN POSNR.
SORT GIT_VBAK BY VBELN.
SORT GIT_KONV BY KNUMV.
LOOP AT GIT_MSEG INTO GIT_MSEG.
READ TABLE GIT_MKPF INTO GIT_MKPF
WITH KEY MBLNR = GIT_MSEG-MBLNR
MJAHR = GIT_MSEG-MJAHR
BINARY SEARCH.
IF SY-SUBRC = 0.
GIT_RESULT-CPUDT = GIT_MKPF-CPUDT. "发货日期
GIT_RESULT-MENGE = GIT_MSEG-MENGE. "数量
GIT_RESULT-MEINS = GIT_MSEG-MEINS. "基本计量单位
READ TABLE GIT_VBFA INTO GIT_VBFA
WITH KEY VBELN = GIT_MSEG-MBLNR
BINARY SEARCH.
IF SY-SUBRC = 0.
READ TABLE GIT_VBAP INTO GIT_VBAP
WITH KEY VBELN = GIT_VBFA-VBELN
POSNR = GIT_VBFA-POSNV
BINARY SEARCH.
IF SY-SUBRC = 0.
GIT_RESULT-VBELN = GIT_VBAP-VBELN. "销售订单号
GIT_RESULT-POSNR = GIT_VBAP-POSNR. "销售凭证项目
GIT_RESULT-MATNR = GIT_VBAP-MATNR. "物料号
GIT_RESULT-ARKTX = GIT_VBAP-ARKTX. "短文本
READ TABLE GIT_VBAK INTO GIT_VBAK
WITH KEY VBELN = GIT_VBAP-VBELN
BINARY SEARCH.
IF SY-SUBRC = 0.
GIT_RESULT-VKORG = GIT_VBAK-VKORG. "销售组织
GIT_RESULT-AUART = GIT_VBAK-AUART. "销售凭证类
GIT_RESULT-WAERK = GIT_VBAK-WAERK. "货币单位
READ TABLE GIT_KONV INTO GIT_KONV
WITH KEY KNUMV = GIT_VBAK-KNUMV
KSCHL = ' PB00 '
BINARY SEARCH.
IF SY-SUBRC = 0.
GIT_RESULT-JIAGE01 = GIT_KONV-KBETR. "价格
GIT_RESULT-JINE01 = GIT_KONV-KBETR * GIT_RESULT-MENGE. "列表金
clear git_KONV. "清理结果工作区
endif.
READ TABLE GIT_KONV INTO GIT_KONV
WITH KEY KNUMV = GIT_VBAK-KNUMV
KSCHL = ' VPRS'
BINARY SEARCH.
IF SY-SUBRC = 0.
GIT_RESULT-JIAGE01 = GIT_KONV-KBETR. "价格
GIT_RESULT-JINE01 = GIT_KONV-KBETR * GIT_RESULT-MENGE. "列表金
clear git_KONV. "清理结果工作区
endif.
clear git_VBAK. "清理结果工作区
endif.
clear git_VBAP. "清理结果工作区
endif.
clear git_VBFA. "清理结果工作区
endif.
append git_result to git_result."输出结果
clear git_result. "清理结果工作区
endif.
clear git_mseg.
endLOOP.
ENDFORM. " FRM_MERGE_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA .
DATA gs_fieldcat LIKE LINE OF gt_fieldcat.
DEFINE fc.
gs_fieldcat-fieldname = &1.
if not &2 is initial.
gs_fieldcat-ref_tabname = &2.
gs_fieldcat-ref_fieldname = &3.
else.
gs_fieldcat-outputlen = &4.
gs_fieldcat-seltext_l = &5.
endif.
gs_fieldcat-lzero = &6.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
END-OF-DEFINITION.
FC 'VKORG' '' '' '30' '销售组织' ''.
FC 'VBELN' '' '' '30' '销售订单号' ''.
FC 'POSNR' '' '' '30' '销售凭证项目' ''.
FC 'AUART' '' '' '30' '凭证中的过帐日期' ''.
FC 'MATNR' '' '' '30' '物料号' ''.
FC 'ARKTX' '' '' '30' '短文本' ''.
FC 'CPUDT' '' '' '30' '凭证中的过帐日期' ''.
FC 'MENGE' '' '' '30' '数量' ''.
FC 'MEINS' '' '' '30' '基本计量单位' ''.
FC 'WAERK' '' '' '30' '货币单位' ''.
FC 'JIAGE01' '' '' '30' 'PB00价格' ''.
FC 'JINE01' '' '' '30' 'PB00金额' ''.
FC 'JIAGE02' '' '' '30' '成本价' ''.
FC 'JINE02' '' '' '30' '成本' ''.
prg = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = prg
it_fieldcat = gt_fieldcat
* is_layout = ls_layout
* i_save = 'A'
TABLES
t_outtab = git_result.
ENDFORM. " FRM_DISPLAY_DATA
sap abap销售报表开发代码
于 2022-02-17 16:02:32 首次发布