*===============================基本信息===============================*
* 标题:销售订单评审一览表
* 创建日期:2006-03-15
* 基本描述:XXX
*===============================更改日志===============================*
* 申请号 日期 修改人 更改描述
* 2008-04修改新老产品,“新/老产品”--BOM和CQS使用取于物料主数据,CQS评
* 审完后修改物料主数据由新产品更改为老产品。视图更改:CQS评审更改物料定
* 价组,只开通修改销售视图,所以BDC所选的位置是2
* 2008-04-07增加ZAR的订单类型,为益周物流(物控,生管,采购)在"生管评审备注"
* 填写生产异常信息
** 2008-06-24 同一订单下的相同新产品把第二项改成老产品。(取消)
* 2008-09-27 优化
* 2008-11-25 从20081202后的免费订单由GCM评审
* 2008-12-11 放开ZAR订单查看的权限
* 2009-01-19 CQS评审时不仅带出评审帐号且带上电脑名
* 2009-01-21 增加ZMJ收费无料号样品订单评审,只要GCM评审
* 2009-03-05 取消ZMJ样品订单的评审
* 2009-03-18 销售人员姓名改为取自订单版本号 YLT
*CQS权限说明 WTCQS帐号只能评审不为A,B,C,Y的料号;YJCQS不能评审80R的料号
* 2009-07-10 增加送达方
*===============================定 义===============================*
************************************************************************
* 基本代码
************************************************************************
REPORT ZR_SD_043
NO STANDARD PAGE HEADING
LINE-COUNT 65
LINE-SIZE 150
MESSAGE-ID ZSD1.
************************************************************************
* INCLUDE:包含文件
************************************************************************
INCLUDE OLE2INCL.
************************************************************************
* TABLE: 定义内表和TABLE
************************************************************************
TABLES: MARC,MARA, T001W, MAKT, VBAK,VBEP,VBAP,JEST,JCDS,ONRVB,MAST,STKO,MVKE,ZJCDS.
************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.
*报表最后输出时使用的数据
DATA: T_VBAK1 LIKE VBAK OCCURS 0 WITH HEADER LINE. "销售订单
DATA: T_TEMP LIKE VBAP OCCURS 0 WITH HEADER LINE. "YILT 销售订单项目数据
DATA: FLAG.
DATA: BEGIN OF T_VBAK OCCURS 0.
INCLUDE STRUCTURE T_VBAK1.
DATA NAME1 LIKE KNA1-NAME1.
DATA BZ(80).
DATA FLAG.
DATA: END OF T_VBAK.
DATA: BEGIN OF T_VBAP1 OCCURS 0,
POSNR LIKE VBAP-POSNR,
MATNR LIKE VBAP-MATNR,
MAKTX LIKE MAKT-MAKTX,
ZMENG LIKE VBAP-ZMENG,
MEINS LIKE VBAP-MEINS,
NETWR_D LIKE VBAP-NETWR,
KWMENG LIKE VBAP-KWMENG,
KDMAT LIKE VBAP-KDMAT,
KONDM LIKE VBAP-KONDM,
MMKON LIKE MVKE-KONDM,
ABGRU LIKE VBAP-ABGRU,
SERNR LIKE VBAP-SERNR,
VTEXT LIKE T178T-VTEXT,
SOVTE LIKE T178T-VTEXT,
VTEXT1 LIKE TSPAT-VTEXT,
NAME1 LIKE KNA1-NAME1,
DISPO LIKE MARC-DISPO,
BISMT LIKE MARA-BISMT,
END OF T_VBAP1.
DATA: BEGIN OF IT_PRINT_001 OCCURS 0.
DATA FLAG.
DATA: COLOR1 TYPE SLIS_T_SPECIALCOL_ALV.
INCLUDE STRUCTURE T_VBAK1.
INCLUDE STRUCTURE T_VBAP1.
DATA BSTKD_E LIKE VBKD-BSTKD_E.
DATA XL(130).
DATA E1.
DATA ET1(130).
DATA E2.
DATA ET2(40).
DATA E3.
DATA ET3(40).
DATA E4.
DATA ET4(132).
DATA E5. "免费订单GCM评审状态
DATA ET5(132).
DATA COLOR(4) TYPE C . "显示颜色-- PPAP订单为黄色 ELIN 09-06-30
*DATA BSTKD_E LIKE VBKD-BSTKD_E. "谢明志 05-08-18
DATA STRGR LIKE MARC-STRGR.
DATA ZKUNNR LIKE VBAK-KUNNR. "送达方客户号
DATA NAME2 LIKE KNA1-NAME1. "送达方名称
DATA SNAME LIKE PA0001-SNAME. "销售人员姓名
DATA USNAM0 LIKE JCDS-USNAM.
DATA UDATE0 LIKE JCDS-UDATE.
DATA UTIME0 LIKE JCDS-UTIME.
DATA USNAM01(12).
DATA USNAM1 LIKE JCDS-USNAM.
DATA UDATE1 LIKE JCDS-UDATE.
DATA UTIME1 LIKE JCDS-UTIME.
DATA USNAM11(12).
DATA USNAM2 LIKE JCDS-USNAM.
DATA IPDEC2(16) TYPE C. "取CQS评审人的IP
DATA HOST2(25) TYPE C. "取CQS评审人的电脑名
DATA ZNAME LIKE ZDT02-ZNAME. "CQS评审人姓名
DATA UDATE2 LIKE JCDS-UDATE.
DATA UTIME2 LIKE JCDS-UTIME.
DATA USNAM21(12).
DATA USNAM3 LIKE JCDS-USNAM.
DATA UDATE3 LIKE JCDS-UDATE.
DATA UTIME3 LIKE JCDS-UTIME.
DATA USNAM31(12).
*免费订单由GCM评审
DATA USNAM4 LIKE JCDS-USNAM.
DATA UDATE4 LIKE JCDS-UDATE.
DATA UTIME4 LIKE JCDS-UTIME.
DATA USNAM41(12).
DATA :OBJNR1 LIKE ONRVB-OBJNR,
OBJNR2 LIKE ONRVB-OBJNR,
EDATU LIKE VBEP-EDATU,
WERKS LIKE VBAP-WERKS,
STLST LIKE STKO-STLST "BOM状态
.
DATA: END OF IT_PRINT_001.
DATA Z_AREA LIKE IT_PRINT_001.
DATA L_TEMP LIKE LINE OF IT_PRINT_001.
DATA: IP_UNAME TYPE USR41-TERMINAL.
DATA: P_REPORT,
P_ALV.
*长文本信息
DATA: IT_LTEXT TYPE STANDARD TABLE OF TLINE
INITIAL SIZE 1 WITH HEADER LINE.
*BDC使用的参数
DATA: IT_BDCDATA_001 LIKE STANDARD TABLE OF BDCDATA INITIAL SIZE 6
WITH HEADER LINE,SESSION LIKE APQI-GROUPID.
*读取EXCEL表格后,存放数据
*NEED MODIFY: 根据EXCEL表格字段量的不同做修改。这里只适用不多于5个字
*段的情况,如有更多的字段,则必须进行相应的扩展。扩展后子程序
*F_FILE_READ_DATA的也要做相应的扩展。
DATA: BEGIN OF IT_EXCEL_001 OCCURS 0,
COLUMN_001(20) ,
COLUMN_002(20) ,
COLUMN_003(20) ,
COLUMN_004(20) ,
COLUMN_005(20) ,
END OF IT_EXCEL_001.
DATA: BEGIN OF IT_SELECT_CONDITION OCCURS 0,
SIGN(1) ,
OPTION(2) ,
LOW(8) ,
HIGH(8) ,
END OF IT_SELECT_CONDITION.
************************************************************************
* CONSTANTS : 定义常量
************************************************************************
************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* DATA : 定义变量
************************************************************************
*用于绘制普通REPORT
DATA G_WRITE_COUNT TYPE I VALUE 0.
DATA G_INIT_COUNT TYPE I VALUE 0.
DATA G_LAST_FILED_WIDTH TYPE I VALUE 0.
TYPES TYPE_IT_WRITE_POSITION TYPE I OCCURS 0 .
DATA IT_WRITE_POSITION TYPE TYPE_IT_WRITE_POSITION.
*用于ALV控件双击事件
DATA: G_SELECTED_FIELD_VALUE(80).
DATA: G_TABINDEX TYPE I.
DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE. "用于显示不同颜色
*ALV控件构造时需要的参数
DATA: G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
G_ALV_FIELDCAT_LINE LIKE LINE OF G_ALV_FIELDCAT,
G_ALV_EVENT TYPE SLIS_T_EVENT.
*读取EXCEL文件时需要的对象
DATA EXCEL TYPE OLE2_OBJECT.
DATA WORKBOOK TYPE OLE2_OBJECT.
DATA CELL TYPE OLE2_OBJECT.
*ALV控件输出的表头
DATA: G_ALV_LISTHEADER TYPE SLIS_T_LISTHEADER.
*指定ALV控件触发TOP_OF_PAGE事件时调用的子程序
DATA: G_ALV_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE 'F_ALV_EVENT_TOP_OF_PAGE'.
*指定ALV控件触发END_OF_LIST事件时调用的子程序
DATA: G_ALV_FORMNAME_END_OF_LIST TYPE SLIS_FORMNAME
VALUE 'F_ALV_EVENT_END_OF_LIST'.
*指定ALV控件的显示特征
DATA : G_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
*BDC
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER
LINE.
************************************************************************
* DEFINE: 定义宏
************************************************************************
*普通报表格式的输出宏
DEFINE MACRO001.
WRITE: "NEED MODIFY
/1 &1,
21 &2,
41 &3,
61 &4,
81 &5,
100 &6.
END-OF-DEFINITION.
************************************************************************
* SELECTION SCREEN : 定义报表筛选条件
************************************************************************
*确定过滤参数
SELECTION-SCREEN BEGIN OF BLOCK FLAG WITH FRAME TITLE BLK_001 .
SELECT-OPTIONS : S_VBELN FOR VBAK-VBELN,
S_POSNR FOR VBAP-POSNR,
S_VKORG FOR VBAK-VKORG OBLIGATORY MEMORY ID VOK ,
S_VTWEG FOR VBAK-VTWEG,
S_SPART FOR VBAK-SPART,
S_VKBUR FOR VBAK-VKBUR,
S_VKGRP FOR VBAK-VKGRP,
S_KUNNR FOR VBAK-KUNNR,
S_ERDAT FOR VBAK-ERDAT,
S_VDATU FOR VBAK-VDATU,
S_EDATU FOR VBEP-EDATU, "YLT 增加行项目交期
S_MATNR FOR MARC-MATNR,
S_DISPO FOR MARC-DISPO,
S_AUGRU FOR VBAK-AUGRU,
S_ABGRU FOR VBAP-ABGRU,
S_KONDM FOR VBAP-KONDM.
* S_MMKON FOR MVKE-KONDM.
PARAMETERS: SGD AS CHECKBOX DEFAULT ''."启用生管过滤评审时间
SELECT-OPTIONS :S_UDATE FOR JCDS-UDATE.
SELECT-OPTIONS S_STLST FOR STKO-STLST.
SELECTION-SCREEN END OF BLOCK FLAG.
SELECTION-SCREEN BEGIN OF BLOCK BLK_002 WITH FRAME TITLE BLK_002 .
PARAMETERS:
S_ALL RADIOBUTTON GROUP R1 ,
S_PS RADIOBUTTON GROUP R1 DEFAULT 'X',
EPLAS RADIOBUTTON GROUP R1 ,
S_AZFD RADIOBUTTON GROUP R1 , "所有免费订单
S_ZFD RADIOBUTTON GROUP R1 . "所有未评审的免费订单
SELECTION-SCREEN END OF BLOCK BLK_002.
*选择文件
*NEED MODIFY:当要使用文件功能时,只要将代码“NO-DISPLAY”去掉即可
*代码“NO-DISPLAY”的作用:隐藏参数
SELECTION-SCREEN BEGIN OF BLOCK BLK_003 WITH FRAME TITLE BLK_003 .
PARAMETERS: P_FILE LIKE CFFILE-FILENAME NO-DISPLAY .
SELECTION-SCREEN END OF BLOCK BLK_003.
*===============================事 件===============================*
************************************************************************
* INITIALIZATION.启动程序开始执行
************************************************************************
************************************************************************
* AT SELECTION SCREEN:
************************************************************************
AT SELECTION-SCREEN.
PERFORM F_CHECK_INPUT. "检查用户输入
INITIALIZATION.
BLK_001 = '检索参数---PPAP订单为黄色背景色!'.
BLK_002 = '报表类型'.
BLK_003 = '文件参数'.
**用于弹出文件对话框
*NEED MODIFY:当要使用文件功能时,只要将以下代码的注释去掉即可
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
* PERFORM F_FILE_GET.
************************************************************************
* START OF SELECTION:
************************************************************************
START-OF-SELECTION.
*往数据库增加运行日志
DATA: BEGIN OF IT_ZREPORTLOG OCCURS 0.
INCLUDE TYPE ZREPORTLOG.
DATA: END OF IT_ZREPORTLOG .
IT_ZREPORTLOG-MANDT = SY-MANDT.
IT_ZREPORTLOG-TCODE = SY-TCODE.
IT_ZREPORTLOG-DATUM = SY-DATUM.
IT_ZREPORTLOG-UZEIT = SY-UZEIT.
IT_ZREPORTLOG-UNAME = SY-UNAME.
IT_ZREPORTLOG-TITLE = SY-TITLE.
APPEND IT_ZREPORTLOG.
INSERT INTO ZREPORTLOG VALUES IT_ZREPORTLOG .
*如果P_FILE有赋值,则进行EXCEL文件读取
IF P_FILE <> ''.
PERFORM F_FILE_OPEN. "文件2.打开文件
PERFORM F_FILE_READ_DATA. "文件3.取文件中的数据
PERFORM F_FILE_CLOSE. "文件3.关闭文件
ENDIF.
PERFORM F_READ_DATA.
************************************************************************
* END OF SELECTION
************************************************************************
END-OF-SELECTION.
* IF P_REPORT = 'X'.
* PERFORM F_PRINT_REPORT.
* ELSEIF P_ALV = 'X'.
PERFORM F_PRINT_ALV.
* ELSEIF P_FORM = 'X'.
* PERFORM F_PRINT_FORM.
*ENDIF.
************************************************************************
* TOP OF PAGE
************************************************************************
TOP-OF-PAGE.
************************************************************************
* END OF PAGE
************************************************************************
END-OF-PAGE.
************************************************************************
* LINE SELECTION
************************************************************************
AT LINE-SELECTION .
************************************************************************
* AT PFXX:
************************************************************************
AT PFXX.
************************************************************************
* AT USER-COMMAND
************************************************************************
AT USER-COMMAND.
*===============================子 例 程===============================*
************************************************************************
*过滤条件有效性检查
FORM F_CHECK_INPUT.
*增加销售机构权限检查BY PXY AT 08-06-02
TABLES:T001.
SELECT T001~BUKRS
FROM T001
INTO T001-BUKRS
WHERE T001~BUKRS IN S_VKORG.
AUTHORITY-CHECK OBJECT 'ZREPORT' ID 'BEGRU' FIELD 'CO.'
ID 'BUKRS' FIELD T001-BUKRS.
IF SY-SUBRC <> 0 .
MESSAGE E026 WITH S_VKORG.
ENDIF.
ENDSELECT.
IF EPLAS = 'X'.
* 权限控制,S43D权限组能修改“生产评审意见”的相关字段
* AUTHORITY-CHECK OBJECT 'ZREPORT' ID 'BEGRU' FIELD 'S43D' ID 'BUKRS' FIELD T001-BUKRS..
* IF SY-SUBRC <> 0 .
* MESSAGE E015.
* ENDIF.
ENDIF.
ENDFORM. " F_CHECK_INPUT
************************************************************************
*从数据库中读取数据,填充报表输出时所用的内表
FORM F_READ_DATA .
DATA: CELLCOLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE.
IF EPLAS = 'X'.
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
* INNER JOIN ONRVB
* ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
* INNER JOIN JEST
* ON JEST~OBJNR = ONRVB~OBJNR
* AND JEST~INACT = ''
* AND JEST~CHGNR = '001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND VBAK~AUART = 'ZAR' "EPLAS不需要订单评审的生管备注
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND VBAP~KONDM IN S_KONDM.
* ELSEIF S_ALL = ''.
ELSEIF S_PS = 'X'.
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN JEST
ON JEST~OBJNR = ONRVB~OBJNR
AND JEST~INACT = ''
AND JEST~CHGNR = '001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND ( VBAK~AUART = 'ZOR' OR VBAK~AUART = 'ZSD'
OR VBAK~AUART = 'ZKB' OR VBAK~AUART = 'ZTJ' )
* OR VBAK~AUART = 'ZFD' OR VBAK~AUART = 'ZKB' ) "免费订单用另外的处理方式
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND VBAP~KONDM IN S_KONDM
AND ( JEST~STAT = 'E0001' OR JEST~STAT = 'E0002' OR JEST~STAT = 'E0003' ).
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN JEST
ON JEST~OBJNR = ONRVB~OBJNR
AND JEST~INACT = ''
AND JEST~CHGNR = '001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
APPENDING CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND VBAK~AUART = 'ZFD' "免费订单用另外的处理方式
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND VBAP~KONDM IN S_KONDM
* AND VBAK~ERDAT <= '20081202' "在此日期前的免费订单为三个状态
AND VBAK~ERDAT <= '20081201' "在此日期前的免费订单为三个状态
AND ( JEST~STAT = 'E0001' OR JEST~STAT = 'E0002' OR JEST~STAT = 'E0003').
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN JEST
ON JEST~OBJNR = ONRVB~OBJNR
AND JEST~INACT = ''
AND JEST~CHGNR = '001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
APPENDING CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND VBAK~AUART = 'ZFD' "免费订单用另外的处理方式
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND VBAP~KONDM IN S_KONDM
* AND VBAK~ERDAT > '20081202'
AND VBAK~ERDAT > '20081201'
AND ( JEST~STAT = 'E0001' OR JEST~STAT = 'E0002' OR JEST~STAT = 'E0003' OR JEST~STAT = 'E0004').
* SELECT *
*FROM VBAP
*INNER JOIN VBAK
* ON VBAK~VBELN = VBAP~VBELN
*INNER JOIN ONRVB
* ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
*INNER JOIN VBEP
* ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
*INNER JOIN JEST
* ON JEST~OBJNR = ONRVB~OBJNR
* AND JEST~INACT = ''
* AND JEST~CHGNR = '001'
*INNER JOIN MARC
* ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
*INNER JOIN MARA
* ON VBAP~MATNR = MARA~MATNR
*APPENDING CORRESPONDING FIELDS OF TABLE IT_PRINT_001
*WHERE VBAK~VBELN IN S_VBELN
*AND VBAP~POSNR IN S_POSNR
*AND VBAK~VKORG IN S_VKORG
*AND VBAK~VTWEG IN S_VTWEG
*AND VBAK~SPART IN S_SPART
*AND VBAK~VKBUR IN S_VKBUR
*AND VBAK~VKGRP IN S_VKGRP
*AND VBAK~KUNNR IN S_KUNNR
*AND VBAK~ERDAT IN S_ERDAT
*AND VBAK~VDATU IN S_VDATU
*AND VBEP~EDATU IN S_EDATU "行项目交期
*AND VBAK~AUGRU IN S_AUGRU
*AND VBAP~ABGRU IN S_ABGRU
*AND VBAK~AUART = 'ZMJ'
*AND MARC~DISPO IN S_DISPO
*AND MARC~MATNR IN S_MATNR
*AND VBAP~KONDM IN S_KONDM
*AND ( JEST~STAT = 'E0001' ).
ELSEIF S_ZFD = 'X'.
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN JEST
ON JEST~OBJNR = ONRVB~OBJNR
AND JEST~INACT = ''
AND JEST~CHGNR = '001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND VBAK~AUART = 'ZFD' "免费订单用另外的处理方式
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND VBAP~KONDM IN S_KONDM
* AND VBAK~ERDAT <= '20081202' "在此日期前的免费订单为三个状态
AND VBAK~ERDAT <= '20081201' "在此日期前的免费订单为三个状态
AND ( JEST~STAT = 'E0001' OR JEST~STAT = 'E0002' OR JEST~STAT = 'E0003').
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN JEST
ON JEST~OBJNR = ONRVB~OBJNR
AND JEST~INACT = ''
AND JEST~CHGNR = '001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
APPENDING CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND VBAK~AUART = 'ZFD' "免费订单用另外的处理方式
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND VBAP~KONDM IN S_KONDM
* AND VBAK~ERDAT > '20081202'
AND VBAK~ERDAT > '20081201'
AND ( JEST~STAT = 'E0001' OR JEST~STAT = 'E0002' OR JEST~STAT = 'E0003' OR JEST~STAT = 'E0004').
* SELECT *
*FROM VBAP
*INNER JOIN VBAK
* ON VBAK~VBELN = VBAP~VBELN
*INNER JOIN ONRVB
* ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
*INNER JOIN VBEP
* ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
*INNER JOIN JEST
* ON JEST~OBJNR = ONRVB~OBJNR
* AND JEST~INACT = ''
* AND JEST~CHGNR = '001'
*INNER JOIN MARC
* ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
*INNER JOIN MARA
* ON VBAP~MATNR = MARA~MATNR
*APPENDING CORRESPONDING FIELDS OF TABLE IT_PRINT_001
*WHERE VBAK~VBELN IN S_VBELN
*AND VBAP~POSNR IN S_POSNR
*AND VBAK~VKORG IN S_VKORG
*AND VBAK~VTWEG IN S_VTWEG
*AND VBAK~SPART IN S_SPART
*AND VBAK~VKBUR IN S_VKBUR
*AND VBAK~VKGRP IN S_VKGRP
*AND VBAK~KUNNR IN S_KUNNR
*AND VBAK~ERDAT IN S_ERDAT
*AND VBAK~VDATU IN S_VDATU
*AND VBEP~EDATU IN S_EDATU "行项目交期
*AND VBAK~AUGRU IN S_AUGRU
*AND VBAP~ABGRU IN S_ABGRU
*AND VBAK~AUART = 'ZMJ'
*AND MARC~DISPO IN S_DISPO
*AND MARC~MATNR IN S_MATNR
*AND VBAP~KONDM IN S_KONDM
*AND ( JEST~STAT = 'E0001').
ELSE.
IF SGD = 'X'.
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN JCDS
ON JCDS~OBJNR = ONRVB~OBJNR
AND JCDS~STAT = 'E0004'
AND JCDS~CHIND = 'I'
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
* AND JCDS~USNAM IN S_
AND JCDS~UDATE IN S_UDATE
* AND JCDS~UTIME IN S_
AND VBAP~KONDM IN S_KONDM
AND ( VBAK~AUART = 'ZOR' OR VBAK~AUART = 'ZSD'
OR VBAK~AUART = 'ZFD' OR VBAK~AUART = 'ZKB'
OR VBAK~AUART = 'ZTJ' ) .
ELSEIF S_ALL = 'X'.
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND ( VBAK~AUART = 'ZOR' OR VBAK~AUART = 'ZSD'
OR VBAK~AUART = 'ZFD' OR VBAK~AUART = 'ZKB' OR VBAK~AUART = 'ZTJ'
OR VBAK~AUART = 'ZMJ' )
.
ELSEIF S_AZFD = 'X'.
SELECT *
FROM VBAP
INNER JOIN VBAK
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN ONRVB
ON ONRVB~VBELN = VBAP~VBELN AND ONRVB~POSNR = VBAP~POSNR
INNER JOIN VBEP
ON VBEP~VBELN = VBAP~VBELN AND VBEP~POSNR = VBAP~POSNR AND VBEP~ETENR = '0001'
INNER JOIN MARC
ON VBAP~MATNR = MARC~MATNR AND VBAP~WERKS = MARC~WERKS
INNER JOIN MARA
ON VBAP~MATNR = MARA~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE VBAK~VBELN IN S_VBELN
AND VBAP~POSNR IN S_POSNR
AND VBAK~VKORG IN S_VKORG
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAK~VKBUR IN S_VKBUR
AND VBAK~VKGRP IN S_VKGRP
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~ERDAT IN S_ERDAT
AND VBAK~VDATU IN S_VDATU
AND VBEP~EDATU IN S_EDATU "行项目交期
AND VBAK~AUGRU IN S_AUGRU
AND VBAP~ABGRU IN S_ABGRU
AND MARC~DISPO IN S_DISPO
AND MARC~MATNR IN S_MATNR
AND ( VBAK~AUART = 'ZFD' OR VBAK~AUART = 'ZMJ' ) .
ENDIF.
ENDIF.
DATA: ZSTLTY LIKE STKO-STLTY,
ZSTLNR LIKE STKO-STLNR,
ZSTLAL LIKE STKO-STLAL,
ZSTKOZ LIKE STKO-STKOZ.
LOOP AT IT_PRINT_001.
SELECT
STKO~STLTY STKO~STLNR STKO~STLAL MAX( STKO~STKOZ )
FROM MAST
INNER JOIN STKO
ON MAST~STLNR = STKO~STLNR
AND MAST~STLAL = STKO~STLAL
INTO (ZSTLTY,ZSTLNR,ZSTLAL,ZSTKOZ)
WHERE MAST~MATNR = IT_PRINT_001-MATNR
AND MAST~WERKS = IT_PRINT_001-WERKS
AND STKO~STLTY = 'M'
AND MAST~STLAN = '1'
GROUP BY
STKO~STLTY STKO~STLNR STKO~STLAL.
ENDSELECT.
SELECT
SINGLE STKO~STLST
FROM STKO
INTO IT_PRINT_001-STLST
WHERE STKO~STLTY = ZSTLTY
AND STKO~STLNR = ZSTLNR
AND STKO~STLAL = ZSTLAL
AND STKO~STKOZ = ZSTKOZ
AND STKO~STLST IN S_STLST.
SELECT SINGLE * FROM JEST INTO JEST
WHERE OBJNR = IT_PRINT_001-OBJNR2
AND STAT = 'E0004'.
IF SY-SUBRC = 0 .
DELETE IT_PRINT_001.
ELSE.
IF EPLAS = ''."ZAR订单类型不进入判断
SELECT SINGLE * FROM JEST INTO JEST
WHERE OBJNR = IT_PRINT_001-OBJNR
AND STAT = 'E0001'.
IF SY-SUBRC = 0.
IT_PRINT_001-E1 = 'X'.
IF IT_PRINT_001-STLST IN S_STLST.
IF IT_PRINT_001-OBJNR <> ''.
IT_PRINT_001-OBJNR1 = IT_PRINT_001-OBJNR.
REPLACE 'VB0' WITH '0' INTO IT_PRINT_001-OBJNR1.
CONCATENATE IT_PRINT_001-OBJNR+0(12) '000000' INTO IT_PRINT_001-OBJNR2.
ELSE.
CONCATENATE IT_PRINT_001-VBELN IT_PRINT_001-POSNR INTO IT_PRINT_001-OBJNR1.
ENDIF.
MODIFY IT_PRINT_001.
CLEAR IT_PRINT_001.
ELSE.
DELETE IT_PRINT_001.
ENDIF.
ELSE.
DELETE IT_PRINT_001.
ENDIF.
ENDIF.
ENDIF.
CLEAR IT_PRINT_001.
CLEAR:ZSTLTY,ZSTLNR,ZSTLAL,ZSTKOZ.
ENDLOOP.
* LOOP AT IT_PRINT_001. "YLT 20090718优化程序将下面的LOOP与上面合并
**YILT 080707 益周ZAR的单出不来的调整
** IF IT_PRINT_001-AUART = 'ZAR' AND IT_PRINT_001-WERKS = '2000'.
** ELSE.
* SELECT SINGLE * FROM JEST INTO JEST
* WHERE OBJNR = IT_PRINT_001-OBJNR2
* AND STAT = 'E0004'.
* IF SY-SUBRC = 0.
* DELETE IT_PRINT_001.
* ENDIF.
** ENDIF.
* ENDLOOP.
* IF EPLAS = ''."ZAR订单类型不进入判断
* LOOP AT IT_PRINT_001 .
* SELECT SINGLE * FROM JEST INTO JEST
* WHERE OBJNR = IT_PRINT_001-OBJNR
* AND STAT = 'E0001'.
* IF SY-SUBRC = 0.
* IT_PRINT_001-E1 = 'X'.
* MODIFY IT_PRINT_001.
* CLEAR IT_PRINT_001.
* ELSE.
* DELETE IT_PRINT_001.
* ENDIF.
* ENDLOOP.
* ENDIF.
LOOP AT IT_PRINT_001.
*送达方编号
SELECT SINGLE KUNNR FROM VBPA INTO IT_PRINT_001-ZKUNNR
WHERE VBELN = IT_PRINT_001-VBELN
AND PARVW = 'WE'.
*计算单价
IF IT_PRINT_001-KWMENG > 0.
IT_PRINT_001-NETWR_D = IT_PRINT_001-NETWR / IT_PRINT_001-KWMENG.
ENDIF.
*取评审文本
*IF IT_PRINT_001-AUART = 'ZFD' AND IT_PRINT_001-ERDAT > '20081202'.
IF IT_PRINT_001-AUART = 'ZFD' AND IT_PRINT_001-ERDAT > '20081201' AND IT_PRINT_001-VBELN <> '0000043345'.
PERFORM F_SUB_GET_TEXT
USING IT_PRINT_001-OBJNR1 '0006'
CHANGING IT_PRINT_001-ET1. "取文本数据
SELECT SINGLE * FROM JEST INTO JEST
WHERE OBJNR = IT_PRINT_001-OBJNR
AND STAT = 'E0002'.
IF SY-SUBRC = 0.
IT_PRINT_001-E5 = 'X'.
ENDIF.
PERFORM F_SUB_GET_TEXT
USING IT_PRINT_001-OBJNR1 '0001'
CHANGING IT_PRINT_001-