news 2026/4/15 12:03:38

读取工艺路线唯一工序的代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
读取工艺路线唯一工序的代码

1、DB02中SQL代码,下面代码是读取直接人工数字最大的工序

SELECT
m.WERKS AS plant,
m.MATNR AS material,
m.PLNNR AS route_no,
a.PLNKN AS operation,
o.VGW01 AS direct_labor
FROM
MAPL m
INNER JOIN PLKO k ON m.PLNNR = k.PLNNR AND m.PLNAL = k.PLNAL
INNER JOIN PLAS a ON k.PLNNR = a.PLNNR AND k.PLNAL = a.PLNAL
INNER JOIN PLPO o ON a.PLNNR = o.PLNNR AND a.PLNKN = o.PLNKN
WHERE
m.MATNR = '8014217002'
AND m.WERKS = '8201'
AND k.PLNTY = 'N'
AND m.LOEKZ = ''
AND k.LOEKZ = ''
AND a.LOEKZ = ''
AND o.LOEKZ = ''
AND o.VGW01 = (
SELECT MAX(o2.VGW01)
FROM MAPL m2
INNER JOIN PLKO k2 ON m2.PLNNR = k2.PLNNR AND m2.PLNAL = k2.PLNAL
INNER JOIN PLAS a2 ON k2.PLNNR = a2.PLNNR AND k2.PLNAL = a2.PLNAL
INNER JOIN PLPO o2 ON a2.PLNNR = o2.PLNNR AND a2.PLNKN = o2.PLNKN
WHERE m2.MATNR = '801421002'
AND m2.WERKS = '8201'
AND k2.PLNTY = 'N'
AND m2.LOEKZ = ''
AND k2.LOEKZ = ''
AND a2.LOEKZ = ''
AND o2.LOEKZ = ''
)
ORDER BY
a.PLNKN;

2、对应的ABAP代码段:

方法1:

SELECT m~werks,

m~matnr,

o~vgw01,

o~zcode “增强字段,用于存储该工序的人数

INTO TABLE @lt_ops

FROM mapl AS m

INNER JOIN plko AS k

ON m~plnnr = k~plnnr

AND m~plnal = k~plnal

AND k~werks = m~werks

INNER JOIN plas AS a

ON k~plnnr = a~plnnr

AND k~plnal = a~plnal

AND k~plnty = a~plnty

INNER JOIN plpo AS o

ON a~plnnr = o~plnnr

AND a~plnkn = o~plnkn

AND a~plnty = o~plnty

FOR ALL ENTRIES IN @lt_matnr_werks

WHERE m~werks = @lt_matnr_werks-werks

AND m~matnr = @lt_matnr_werks-matnr

AND k~plnty = 'N'

AND m~loekz = ''

AND m~plnal = ( SELECT MAX( m2~plnal )

FROM mapl AS m2

WHERE m2~werks = m~werks

AND m2~matnr = m~matnr

AND m2~plnty = m~plnty

AND m2~plnnr = m~plnnr

AND m2~loekz = '' )

AND k~delkz = ''

AND a~loekz = ''

AND o~loekz = ''.

方法2:

FORM frm_get_sta_lab .
DATA: BEGIN OF ls_matnr_werks,
werks TYPE werks_d,
matnr TYPE matnr,
END OF ls_matnr_werks,
lt_matnr_werks LIKE TABLE OF ls_matnr_werks.

DATA: BEGIN OF ls_max_vgw01,
werks TYPE werks_d,
matnr TYPE matnr,
max_vgw01 TYPE plpo-vgw01,
zcode TYPE plpo-zcode,
END OF ls_max_vgw01,
lt_max_vgw01 LIKE TABLE OF ls_max_vgw01.

FIELD-SYMBOLS: <fs_out> LIKE LINE OF gt_out.

CHECK gt_out[] IS NOT INITIAL.

LOOP AT gt_out ASSIGNING <fs_out>.
ls_matnr_werks-werks = <fs_out>-werks.
ls_matnr_werks-matnr = <fs_out>-plnbez.
COLLECT ls_matnr_werks INTO lt_matnr_werks.
ENDLOOP.

SORT lt_matnr_werks BY werks matnr.

IF lt_matnr_werks[] IS NOT INITIAL.

DATA: BEGIN OF ls_op,
werks TYPE werks_d,
matnr TYPE matnr,
vgw01 TYPE plpo-vgw01,
zcode TYPE plpo-zcode,
END OF ls_op,
lt_ops LIKE TABLE OF ls_op.

SELECT m~werks,
m~matnr,
o~vgw01,
o~zcode
INTO TABLE @lt_ops
FROM mapl AS m
INNER JOIN plko AS k
ON m~plnnr = k~plnnr
AND m~plnal = k~plnal
AND k~werks = m~werks
INNER JOIN plas AS a
ON k~plnnr = a~plnnr
AND k~plnal = a~plnal
AND k~plnty = a~plnty
INNER JOIN plpo AS o
ON a~plnnr = o~plnnr
AND a~plnkn = o~plnkn
AND a~plnty = o~plnty
FOR ALL ENTRIES IN @lt_matnr_werks
WHERE m~werks = @lt_matnr_werks-werks
AND m~matnr = @lt_matnr_werks-matnr
AND k~plnty = 'N'
AND m~loekz = ''
AND k~delkz = ''
AND a~loekz = ''
AND o~loekz = ''.



* SELECT m~werks,
* m~matnr,
* o~vgw01,
* o~zcode
* INTO TABLE @lt_ops
* FROM mapl AS m
* INNER JOIN plko AS k
* ON m~plnnr = k~plnnr
* AND m~plnal = k~plnal
* AND k~werks = m~werks
* INNER JOIN plas AS a
* ON k~plnnr = a~plnnr
* AND k~plnal = a~plnal
* AND k~plnty = a~plnty
* INNER JOIN plpo AS o
* ON a~plnnr = o~plnnr
* AND a~plnkn = o~plnkn
* AND a~plnty = o~plnty
* FOR ALL ENTRIES IN @lt_matnr_werks
* WHERE m~werks = @lt_matnr_werks-werks
* AND m~matnr = @lt_matnr_werks-matnr
* AND k~plnty = 'N'
* AND m~loekz = ''
* AND m~plnal = ( SELECT MAX( m2~plnal )
* FROM mapl AS m2
* WHERE m2~werks = m~werks
* AND m2~matnr = m~matnr
** AND m2~plnty = m~plnty
** AND m2~plnnr = m~plnnr
* AND m2~loekz = '' )
* AND k~delkz = ''
* AND a~loekz = ''
* AND o~loekz = ''.

IF lt_ops IS NOT INITIAL.
SORT lt_ops BY werks matnr.
LOOP AT lt_ops INTO ls_op GROUP BY ( werks = ls_op-werks matnr = ls_op-matnr ) ASSIGNING FIELD-SYMBOL(<grp>).
DATA: lv_max TYPE plpo-vgw01,
lv_zc TYPE plpo-zcode.
CLEAR: lv_max, lv_zc.
LOOP AT GROUP <grp> ASSIGNING FIELD-SYMBOL(<row>).
IF <row>-vgw01 >= lv_max.
lv_max = <row>-vgw01.
lv_zc = <row>-zcode.
ENDIF.
ENDLOOP.
CLEAR ls_max_vgw01.
ls_max_vgw01-werks = <grp>-werks.
ls_max_vgw01-matnr = <grp>-matnr.
ls_max_vgw01-max_vgw01 = lv_max.
ls_max_vgw01-zcode = lv_zc.
APPEND ls_max_vgw01 TO lt_max_vgw01.
ENDLOOP.
ENDIF.
ENDIF.

CHECK lt_max_vgw01 IS NOT INITIAL.

SORT lt_max_vgw01 BY werks matnr.

LOOP AT gt_out ASSIGNING <fs_out>.
CLEAR: <fs_out>-zbzrygs.

READ TABLE lt_max_vgw01 INTO ls_max_vgw01
WITH KEY werks = <fs_out>-werks
matnr = <fs_out>-plnbez
BINARY SEARCH.

IF sy-subrc = 0.
IF <fs_out>-gamng IS NOT INITIAL
AND ls_max_vgw01-max_vgw01 IS NOT INITIAL
AND ls_max_vgw01-max_vgw01 <> 0.
IF <fs_out>-mtart = 'Z201' or <fs_out>-mtart = 'Z101'.

<fs_out>-zbzrygs = ls_max_vgw01-max_vgw01 * ls_max_vgw01-zcode * <fs_out>-gamng.

<fs_out>-ZMISM01 = ls_max_vgw01-max_vgw01 * <fs_out>-gamng.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.

ENDFORM.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 7:08:07

ISO/IEC/IEEE 29119软件测试标准完全指南:从理论到企业级实践

软件测试国际标准ISO/IEC/IEEE 29119为软件测试提供了系统化的方法论,本文全面解析这一标准的核心内容与实战应用。 1 引言:为什么需要软件测试标准? 在当今快速迭代的软件开发环境中,软件质量已成为决定产品成功与否的关键因素。作为软件质量保证的核心环节,软件测试不仅…

作者头像 李华
网站建设 2026/4/14 3:34:56

好写作AI:让你和“茶多酚”说拜拜!毕业论文术语替换黑科技揭秘

学术黑话说不准&#xff0c;论文降重两行泪。你的术语库&#xff0c;该升级了&#xff01;“同学&#xff0c;你这个‘茶多酚’在食品领域常用&#xff0c;但在我们生物化学方向&#xff0c;更精确的术语应该是‘茶类黄酮化合物’……”导师的批注像一道惊雷&#xff0c;把你熬…

作者头像 李华
网站建设 2026/4/10 6:08:58

百考通AI:您的智能数据分析师,让复杂洞察一键生成

在当今这个数据驱动的时代&#xff0c;无论是学术研究、商业决策还是市场运营&#xff0c;数据分析都已成为不可或缺的核心能力。然而&#xff0c;对于非专业人员而言&#xff0c;面对海量数据和复杂的分析工具&#xff0c;如何快速、准确地提炼出有价值的洞察&#xff0c;往往…

作者头像 李华