在项目中,QM过账检验完成会一步过账,但实际业务部门需要质检只判定是否合格,仓库进行过账。
第一步ZQM006 质检判定
上图中选择合格,那么默认进入页面的使用决策代码为合格,如下图
如果勾选不合格,默认代码为ZR拒绝。
此处的出现让步接收数量,没有让步金额,金额是按物料金额比例,由财务人员在发票校验时进行扣除,例如小于500按2%扣除,大于500按3%扣除等。
选择行,对合格数量、让步接收数量、返回供应商数量、使用决策代码、仓位进行填写,完成后点击"使用决策”即可完成UD判定。
*&---------------------------------------------------------------------*
*& 程序名 : <ZQM006> *
*& 标题 : <检验物料过账> *
*& 模块名 : </QM> *
*& 创建者 : <> *
*& 创建日期: <2018.06.19> *
*& 程序类型: <表单打印程序> *
*& SAP版本 : ECC 6.0 *
*& 单元ID : <单元ID> *
*& 描述 : <> *
*&---------------------------------------------------------------------*
*& 更改日志 *
*& *
*& 日志号 日期 更改者 传输请求号 更改描述 *
*& ------ ---------- ------ ---------------------------------------*
*& 0000 <> <更改者> <传输请求号> <更改描述> *
*& *
*&---------------------------------------------------------------------*
REPORT ZQM006.
************************************TOP
TYPE-POOLS:slis. "for alv
DATA:
it_sortinfo TYPE slis_t_sortinfo_alv WITH HEADER LINE, "ALV排序信息
it_colour TYPE slis_t_specialcol_alv WITH HEADER LINE, "ALV列颜色
it_events TYPE slis_t_event WITH HEADER LINE, "ALV事件
it_event_exit TYPE slis_t_event_exit WITH HEADER LINE,
it_listcomm TYPE slis_t_listheader WITH HEADER LINE, "ALV表头
gt_fieldcat TYPE slis_t_fieldcat_alv ,
gs_fieldcat LIKE LINE OF gt_fieldcat,
gs_layout TYPE slis_layout_alv. "ALV layout
* 变量
DATA: g_repid LIKE sy-repid,
g_tabix TYPE i.
* 表
TABLES:QALS,MAKT,qave,ZQM006,MARA,marc.
*定义主内表
DATA:BEGIN OF GS_ALV .
include TYPE ZQM006.
DATA: BOX TYPE C,
STATUS TYPE C,
PRNDATE TYPE DATS, "打印日期
PRNTIME TYPE TIMS, "打印时间
ERNAM TYPE EKKO-ERNAM, "采购订单创建者
END OF GS_ALV .
DATA:GT_ALV LIKE TABLE OF GS_ALV WITH HEADER LINE.
DATA:BEGIN OF GS_LIST .
include TYPE ZQM006.
DATA: BOX TYPE C,
STATUS TYPE C,
PRNDATE TYPE DATS, "打印日期
PRNTIME TYPE TIMS, "打印时间
ERNAM TYPE EKKO-ERNAM, "采购订单创建者
END OF GS_LIST .
DATA:GT_LIST LIKE TABLE OF GS_LIST WITH HEADER LINE.
DATA:BEGIN OF LT_MARC OCCURS 0,
MATNR LIKE MARC-MATNR ,
WERKS LIKE MARC-WERKS ,
CGYUAN LIKE MARC-CGYUAN ,
CWEI LIKE MARC-CWEI,
END OF LT_MARC .
DATA:LS_MARC LIKE LT_MARC .
DATA:LT_ZMM010_PRN TYPE TABLE OF ZMM010_PRN,
LS_ZMM010_PRN TYPE ZMM010_PRN .
DATA:LT_EKKO TYPE TABLE OF EKKO ,
LS_EKKO TYPE EKKO .
DATA:GS_QA11 LIKE ZQM006 .
*alv选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
p_lifnr FOR qals-lifnr, "供应商
p_ebeln FOR qals-ebeln, "采购订单
p_werk FOR qals-werk DEFAULT '1000', "工厂
p_dat FOR qals-enstehdat , "检验批建立日期
p_matnr FOR qals-matnr, "物料号
p_pru FOR qals-prueflos. "检验批号
PARAMETERS: P_TBMAX TYPE TBMAXSEL DEFAULT '1000'. "最大选择条目数
PARAMETERS: p_1 RADIOBUTTON GROUP g1, " 合格
p_2 RADIOBUTTON GROUP g1. "不合格
SELECTION-SCREEN END OF BLOCK blk01.
*事件处理
INITIALIZATION. "初始化
PERFORM init_data.
*
*AT SELECTION-SCREEN. "数据验证
* PERFORM validata_selection.
*ALV
START-OF-SELECTION. "开始执行事件
PERFORM get_data. "取得数据
* PERFORM process_data. "数据处理
END-OF-SELECTION.
PERFORM output_data. "数据输出
*&---------------------------------------------------------------------*
*& Form INIT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM INIT_DATA .
g_repid = sy-repid.
g_tabix = sy-index.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
DATA: BEGIN OF lt_lgort OCCURS 0,
ebeln type EKPO-EBELN, "采购订单
ebelp type EKPO-EBELP, "行项目
LGORT type EKPO-LGORT, "库存地点
END OF lt_lgort.
SELECT
qals~enstehdat "送检日期
qals~prueflos "检验批
qals~werk "工厂
qals~matnr "物料编码
qals~KTEXTMAT "检验对象的短文本
mara~BISMT "K3图号
qals~losmenge "送检数量
qals~mengeneinh "单位
qals~ebeln "采购订单
qals~EBELP "采购凭证的项目编号
qals~lifnr "供应商
lfa1~NAME1 "名称
qals~MBLNR "物料凭证编号
qals~ZEILE "物料凭证中的项目
qals~BUDAT "凭证中的过帐日期
qals~BWART "移动类型(库存管理)
qals~objnr "对象号
qals~LMENGE01 "非限制使用库存
qals~LMENGE04 "过帐到冻结库存的数量(次品)
qals~LMENGE07 "返回给供应商的数量
qals~LMENGEZUB "必须过帐的数量
qals~STAT20 "要求的检验计划
qals~STAT34 "库存记帐完成
qals~STAT35 "作出使用决策
qals~LAGORTVORG "收货仓位
qals~ERSTELLER "创建者(MIGO收货产生检验批)
qals~ERSTELDAT "创建日期
qals~ERSTELZEIT "批量创建时间
makt~maktx "物料描述
UP TO P_TBMAX ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_alv
FROM qals
INNER JOIN makt ON qals~matnr = makt~matnr AND SPRAS = '1'
INNER JOIN mara ON qals~matnr = mara~matnr
INNER JOIN LFA1 ON qals~LIFNR = lfa1~LIFNR
WHERE qals~enstehdat IN p_dat "检验批建立日期
AND qals~werk IN p_werk "工厂
AND qals~matnr IN p_matnr "物料号
AND qals~prueflos IN p_pru "检验批号
AND qals~lifnr IN p_lifnr
AND qals~ebeln IN p_ebeln
AND qals~stat20 = ''
AND qals~stat34 = ''
AND qals~stat35 = ''
AND qals~LMENGEZUB <> 0 .
*---------------- change by chenwei 200602
SORT gt_alv BY ebeln ebelp.
IF gt_alv[] IS NOT INITIAL .
SELECT ebeln ebelp lgort INTO CORRESPONDING FIELDS OF TABLE lt_lgort
FROM ekpo FOR ALL ENTRIES IN gt_alv
WHERE ebeln = gt_alv-ebeln AND ebelp = gt_alv-ebelp.
SORT lt_lgort by ebeln ebelp.
LOOP at gt_alv.
READ TABLE lt_lgort WITH KEY ebeln = gt_alv-ebeln ebelp = gt_alv-ebelp BINARY SEARCH.
IF sy-subrc = 0.
gt_alv-lagortvorg = lt_lgort-lgort .
ENDIF.
MODIFY gt_alv.
endloop.
endif.
*---------------- 更新检验库存地点到表ZQM006中
SORT GT_ALV BY prueflos .
IF GT_ALV[] IS NOT INITIAL .
SELECT MATNR WERKS CGYUAN CWEI INTO CORRESPONDING FIELDS OF TABLE LT_MARC FROM MARC
FOR ALL ENTRIES IN GT_ALV
WHERE MATNR = GT_ALV-MATNR AND WERKS = GT_ALV-WERK .
SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_ZMM010_PRN FROM ZMM010_PRN
FOR ALL ENTRIES IN GT_ALV
WHERE MBLNR = GT_ALV-MBLNR .
SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_EKKO FROM EKKO
FOR ALL ENTRIES IN GT_ALV
WHERE EBELN = GT_ALV-EBELN AND LOEKZ = ''.
ENDIF .
IF GT_ALV[] IS NOT INITIAL .
LOOP AT GT_ALV INTO GS_ALV.
READ TABLE LT_MARC WITH KEY MATNR = GS_ALV-MATNR WERKS = GS_ALV-WERK .
IF SY-SUBRC = 0.
GS_ALV-CGYUAN = LT_MARC-CGYUAN .
GS_ALV-CWEI = LT_MARC-CWEI .
ENDIF.
IF LT_ZMM010_PRN IS NOT INITIAL .
READ TABLE LT_ZMM010_PRN INTO LS_ZMM010_PRN WITH KEY MBLNR = GS_ALV-MBLNR .
IF SY-SUBRC = 0.
GS_ALV-PRNDATE = LS_ZMM010_PRN-PRNDATE .
GS_ALV-PRNTIME = LS_ZMM010_PRN-PRNTIME .
ENDIF.
ENDIF.
IF LT_EKKO IS NOT INITIAL .
READ TABLE LT_EKKO INTO LS_EKKO WITH KEY EBELN = GS_ALV-EBELN .
IF SY-SUBRC = 0.
GS_ALV-ERNAM = LS_EKKO-ERNAM .
ENDIF.
ENDIF.
MODIFY GT_ALV FROM GS_ALV TRANSPORTING CGYUAN CWEI PRNDATE PRNTIME ERNAM .
ENDLOOP.
ENDIF .
CHECK GT_ALV[] IS NOT INITIAL .
IF P_1 = 'X' .
LOOP AT GT_ALV INTO GS_ALV .
IF GS_ALV-WERK = '1000' OR GS_ALV-WERK = 'H020' .
GS_ALV-LMENGE01 = GS_ALV-losmenge .
GS_ALV-VCODE = 'ZA1' .
GS_ALV-VCODEGRP = '01' .
GS_ALV-QKENNZAHL = '100' .
ELSE .
GS_ALV-LMENGE01 = GS_ALV-losmenge .
GS_ALV-VCODE = 'A' .
GS_ALV-VCODEGRP = '01' .
GS_ALV-QKENNZAHL = '100' .
ENDIF .
MODIFY GT_ALV FROM GS_ALV TRANSPORTING LMENGE01 VCODE VCODEGRP QKENNZAHL .
ENDLOOP .
ELSE .
LOOP AT GT_ALV INTO GS_ALV .
IF GS_ALV-WERK = '1000' OR GS_ALV-WERK = 'H020' .
GS_ALV-LMENGE07 = GS_ALV-losmenge .
GS_ALV-VCODE = 'ZR' .
GS_ALV-VCODEGRP = '01' .
GS_ALV-QKENNZAHL = '1' .
ELSE .
GS_ALV-LMENGE07 = GS_ALV-losmenge .
GS_ALV-VCODE = 'R' .
GS_ALV-VCODEGRP = '01' .
GS_ALV-QKENNZAHL = '1' .
ENDIF .
MODIFY GT_ALV FROM GS_ALV TRANSPORTING LMENGE07 VCODE VCODEGRP QKENNZAHL .
ENDLOOP .
ENDIF .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form OUTPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OUTPUT_DATA .
PERFORM build_events. "创建事件集
PERFORM build_event_exit.
gs_layout-zebra = 'X'.
* gs_layout-colwidth_optimize = 'X'.
PERFORM fieldcat_int USING :
'BOX' '选择' '' '',
'ENSTEHDAT' '送检日期' '' '',
'ERSTELZEIT' '创建时间' '' '' ,
'PRUEFLOS' '检验批' '' '',
'WERK' '工厂' '' '',
'MATNR' '物料编码' 'MATNR' 'MARA',
'KTEXTMAT' '检验对象的短文本' '' '' ,
* 'MAKTX' '物料描述' '' '',
'BISMT' 'K3图号' '' '' ,
'LOSMENGE' '送检数量' '' '',
'LMENGE01' '合格数量' '' '' ,
'LMENGE04' '让步接收的数量' '' '' ,
'LMENGE07' '返回给供应商的数量' '' '',
'VCODE' '使用决策代码' '' '',
* 'GRUND' '移动原因' '' '' ,
'LAGORTVORG' '收货仓位' '' '' ,
'MENGENEINH' '单位' '' '',
'EBELN'