-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram
More file actions
872 lines (778 loc) · 33.6 KB
/
Program
File metadata and controls
872 lines (778 loc) · 33.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
*****************************************************************
* System :
* Module : XX
* Program ID : ZR_G_PP_005
* Program : BOM批量查询报表
* Author : XXXX
* Date : XXXXXXXX
* Description : ****
*****************************************************************
* Modified Recorder :
* Date C#NO Author Content
* --------------------------------------------------------------------*
* 修改日期 C票或变更文档ID 修改者 修改内容
* 或修改的传输请求号
*****************************************************************
*
*&---------------------------------------------------------------------*
REPORT zgr_pp_005.
TYPE-POOLS:slis,vrm.
*&---------------------------------------------------------------------*
* TYPES定义
*&---------------------------------------------------------------------*
TABLES:kdst,mast,stpo,t023.
*&---------------------------------------------------------------------*
* TYPES定义
*&---------------------------------------------------------------------*
TYPES:
BEGIN OF ty_mbom,
cbox TYPE c, "选择框
omatnr TYPE mast-matnr, "项次物料
omaktx TYPE makt-maktx, "项次物料描述
matnr TYPE mast-matnr, "物料
maktx1 TYPE makt-maktx, "物料描述
werks1 TYPE mast-werks, "工厂
stlan TYPE mast-stlan, "用途
stlal TYPE mast-stlal, "备选
stktx TYPE stko-stktx, "BOM文本
bmeng TYPE stko-bmeng, "基本数量
bmein TYPE stko-bmein, "基本单位
datuv1 TYPE stko-datuv, "有效期自
loekz TYPE stko-loekz, "删除标识(抬头)
andat1 TYPE stko-andat, "创建日期
annam1 TYPE stko-annam, "创建者
stufe TYPE stpox-stufe, "层次(在多层 BOM 展开中)
posnr TYPE stpo-posnr, "项目
postp TYPE stpo-postp, "条目类别
idnrk TYPE stpo-idnrk, "组件
maktx2 TYPE makt-maktx, "物料描述
menge TYPE stpo-menge, "组件数量
mngko TYPE stpox-mngko, "已计算数量
meins TYPE stpo-meins, "组件计量单位
sortf TYPE stpo-sortf, "排序字符串
datuv2 TYPE stpo-datuv, "有效期自
mmsta TYPE stpox-mmsta, "工厂特定的物料状态
mmstd TYPE stpox-mmstd, "工厂特定物料状态有效的起始日期
mstae TYPE stpox-mstae, "跨工厂物料状态
mstde TYPE stpox-mstde, "从跨工厂物料状态有效起的日期
dismm TYPE stpox-dismm, "物料需求计划类型
sbdkz TYPE stpox-sbdkz, "对于独立和集中需求的相关需求标识
ausss TYPE stpox-ausss, "装配报废 (组件物料)
kausf TYPE stpox-kausf, "组件报废(组件物料)
sobsl TYPE stpox-sobsl, "特殊采购类型
rgekz TYPE stpox-rgekz, "标识:反冲
mschg TYPE stpox-mschg, "标识:散装物料(组件物料)
dumps TYPE stpox-dumps, "虚拟项目标识
fmeng TYPE stpo-fmeng, "固定数量
netau TYPE stpo-netau, "净标识
ausch TYPE stpo-ausch, "组件报废
avoau TYPE stpo-avoau, "工序报废
schgt TYPE stpo-schgt, "标识:散装物料
beikz TYPE stpo-beikz, "物料供应标识
sanka TYPE stpo-sanka, "成本核算相关
alpos TYPE stpo-alpos, "替代项目
alprf TYPE stpo-alprf, "优先级
alpst TYPE stpo-alpst, "策略
ewahr TYPE stpo-ewahr, "使用概率
dspst TYPE stpo-dspst, "展开类型
itsob TYPE stpo-itsob, "BOM 项目的特殊采购类型
werks2 TYPE stpox-werks, "工厂
lgort TYPE stpo-lgort, "存储地点
lgpro TYPE stpox-lgpro, "存储地点(物料)
xtlty TYPE stpox-xtlty, "BOM类别(下一级别)
xtlnr TYPE stpox-xtlnr, "BOM编号(下一级别)
xtlan TYPE stpox-xtlan, "BOM使用(下一级别)
xtlal TYPE stpox-xtlal, "BOM可选项(下一级别)
xmeng TYPE stpox-xmeng, "基本数量(下一级别)
xmein TYPE stpox-xmein, "单位(下一级别)
xalts TYPE stpox-xalts, "标识:可选项(下一级别)
xloek TYPE stpox-xloek, "删除标识(抬头;下一级别)
END OF ty_mbom,
BEGIN OF ty_kbom,
cbox TYPE c, "选择框
vbeln TYPE kdst-vbeln, "销售订单
vbpos TYPE kdst-vbpos, "项目
matnr TYPE mast-matnr, "物料
maktx1 TYPE makt-maktx, "物料描述
werks1 TYPE mast-werks, "工厂
stlan TYPE mast-stlan, "用途
stlal TYPE mast-stlal, "备选
bmeng TYPE stko-bmeng, "基本数量
bmein TYPE stko-bmein, "基本单位
datuv1 TYPE stko-datuv, "有效期自
loekz TYPE stko-loekz, "删除标识(抬头)
andat1 TYPE stko-andat, "创建日期
annam1 TYPE stko-annam, "创建者
stufe TYPE stpox-stufe, "层次(在多层 BOM 展开中)
posnr TYPE stpo-posnr, "项目
postp TYPE stpo-postp, "条目类别
idnrk TYPE stpo-idnrk, "组件
maktx2 TYPE makt-maktx, "物料描述
menge TYPE stpo-menge, "组件数量
mngko TYPE stpox-mngko, "已计算数量
meins TYPE stpo-meins, "组件计量单位
sortf TYPE stpo-sortf, "排序字符串
datuv2 TYPE stpo-datuv, "有效期自
mmsta TYPE stpox-mmsta, "工厂特定的物料状态
mmstd TYPE stpox-mmstd, "工厂特定物料状态有效的起始日期
mstae TYPE stpox-mstae, "跨工厂物料状态
mstde TYPE stpox-mstde, "从跨工厂物料状态有效起的日期
dismm TYPE stpox-dismm, "物料需求计划类型
sbdkz TYPE stpox-sbdkz, "对于独立和集中需求的相关需求标识
ausss TYPE stpox-ausss, "装配报废 (组件物料)
kausf TYPE stpox-kausf, "组件报废(组件物料)
sobsl TYPE stpox-sobsl, "特殊采购类型
rgekz TYPE stpox-rgekz, "标识:反冲
mschg TYPE stpox-mschg, "标识:散装物料(组件物料)
dumps TYPE stpox-dumps, "虚拟项目标识
fmeng TYPE stpo-fmeng, "固定数量
netau TYPE stpo-netau, "净标识
ausch TYPE stpo-ausch, "组件报废
avoau TYPE stpo-avoau, "工序报废
schgt TYPE stpo-schgt, "标识:散装物料
beikz TYPE stpo-beikz, "物料供应标识
sanka TYPE stpo-sanka, "成本核算相关
alpos TYPE stpo-alpos, "替代项目
alprf TYPE stpo-alprf, "优先级
alpst TYPE stpo-alpst, "策略
ewahr TYPE stpo-ewahr, "使用概率
dspst TYPE stpo-dspst, "展开类型
itsob TYPE stpo-itsob, "BOM 项目的特殊采购类型
werks2 TYPE stpox-werks, "工厂
lgort TYPE stpo-lgort, "存储地点
lgpro TYPE stpox-lgpro, "存储地点(物料)
xtlty TYPE stpox-xtlty, "BOM类别(下一级别)
xtlnr TYPE stpox-xtlnr, "BOM编号(下一级别)
xtlan TYPE stpox-xtlan, "BOM使用(下一级别)
xtlal TYPE stpox-xtlal, "BOM可选项(下一级别)
xmeng TYPE stpox-xmeng, "基本数量(下一级别)
xmein TYPE stpox-xmein, "单位(下一级别)
xalts TYPE stpox-xalts, "标识:可选项(下一级别)
xloek TYPE stpox-xloek, "删除标识(抬头;下一级别)
END OF ty_kbom.
************************************************************************
*变量定义
************************************************************************
DATA:
gw_mehrs TYPE csdata-xfeld,
gs_mbom TYPE ty_mbom,
gs_kbom TYPE ty_kbom,
gt_mbom TYPE STANDARD TABLE OF ty_mbom,
gt_kbom TYPE STANDARD TABLE OF ty_kbom.
DATA:
gs_stb LIKE stpox,
gt_stb LIKE TABLE OF stpox,
gs_matcat LIKE cscmat,
gt_matcat LIKE TABLE OF cscmat.
*&---------------------------------------------------------------------*
* SELECTION-SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-b01.
PARAMETERS:
p_stlan TYPE mast-stlan OBLIGATORY DEFAULT '1' , "BOM用途
p_datuv TYPE stko-datuv DEFAULT sy-datum OBLIGATORY, "BOM展开日期
p_capid TYPE tc04-capid OBLIGATORY DEFAULT 'PP01', "BOM应用程序
p_type AS LISTBOX VISIBLE LENGTH 15 OBLIGATORY DEFAULT '1'.
SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-b02.
SELECT-OPTIONS:
s_werks FOR mast-werks MODIF ID m1, "工厂
s_matnr FOR mast-matnr MODIF ID m1, "标准BOM父件
s_stlal FOR mast-stlal DEFAULT '1' MODIF ID m1, "BOM备选
s_idnrk FOR stpo-idnrk.
SELECTION-SCREEN END OF BLOCK blk2.
************************************************************************
*Event INITIALIZATION
************************************************************************
INITIALIZATION.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*点击执行时,检查屏幕输入
CHECK sy-ucomm = 'ONLI'.
*屏幕检查
PERFORM f_check_screen.
AT SELECTION-SCREEN OUTPUT.
* 屏幕定义
PERFORM f_defin_screen.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*单层展开
IF p_type = '1'.
gw_mehrs = ''.
PERFORM f_get_mbom.
*逐层展开
ELSEIF p_type = '2'.
PERFORM f_get_bomlist.
*多层展开
ELSEIF p_type = '3'.
gw_mehrs = 'X'.
PERFORM f_get_mbom.
ENDIF.
*1.物料BOM查询
DELETE gt_mbom WHERE idnrk NOT IN s_idnrk.
PERFORM f_output_bom.
" ENDIF.
************************************************************************
*Event END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form F_CHECK_SCREEN
*&---------------------------------------------------------------------*
* 选择界面字段输入检查
*----------------------------------------------------------------------*
FORM f_check_screen .
*1.标准BOM查询
* IF p_rad1 IS NOT INITIAL.
*工厂未输入
IF s_werks IS INITIAL.
SET CURSOR FIELD 'S_WERKS-LOW'.
MESSAGE '请输入工厂!' TYPE 'E'.
ENDIF.
**标准BOM父件未输入
* IF S_MATNR IS INITIAL.
* SET CURSOR FIELD 'S_MATNR-LOW'.
* MESSAGE '请输入物料!' TYPE 'E'.
* ENDIF.
* ENDIF.
ENDFORM. " F_CHECK_SCREEN
*&---------------------------------------------------------------------*
*& Form F_DEFIN_SCREEN
*&---------------------------------------------------------------------*
* 选择界面动态屏幕定义
*----------------------------------------------------------------------*
FORM f_defin_screen .
DATA: name TYPE vrm_id,
list TYPE vrm_values,
value LIKE LINE OF list.
*定义listbox
REFRESH list.
CLEAR list.
name = 'P_TYPE'.
value-key = '1'.
value-text = '单层展开'.
APPEND value TO list.
value-key = '2'.
value-text = '逐层展开'.
APPEND value TO list.
value-key = '3'.
value-text = '多层展开'.
APPEND value TO list.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = name
values = list.
ENDFORM. " F_DEFIN_SCREEN
*&---------------------------------------------------------------------*
*& Form f_get_bomlist
*&---------------------------------------------------------------------*
*& 获取物料BOM数据,调用BOM展开函数,逐层展开
*&---------------------------------------------------------------------*
FORM f_get_bomlist .
TYPES:
BEGIN OF ty_mlist,
matnr TYPE mast-matnr,
werks TYPE mast-werks,
stlan TYPE mast-stlan,
stlal TYPE mast-stlal,
stlnr TYPE mast-stlnr,
maktx1 TYPE makt-maktx,
END OF ty_mlist.
DATA:
ls_mlist TYPE ty_mlist,
ls_stb LIKE stpox,
lt_stb LIKE TABLE OF stpox,
ls_matcat LIKE cscmat,
lt_matcat LIKE TABLE OF cscmat,
lt_mlist TYPE STANDARD TABLE OF ty_mlist.
*1.获取mast清单
SELECT mast~matnr
mast~werks
mast~stlan
mast~stlal
mast~stlnr
makt~maktx AS maktx1
FROM mast
INNER JOIN makt ON makt~matnr = mast~matnr
INTO CORRESPONDING FIELDS OF TABLE lt_mlist
WHERE mast~matnr IN s_matnr
AND mast~werks IN s_werks
AND mast~stlan = p_stlan
AND mast~stlal IN s_stlal
AND makt~spras = sy-langu.
LOOP AT lt_mlist INTO ls_mlist.
FREE lt_stb.
*BOM explosion for material
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
aufsw = ' '
aumgb = 'X' "【计算报废率】Calculate scrap quantity
capid = p_capid
datuv = p_datuv
ehndl = '1' "【考虑使用可能性】Usage probability handling ' 'none, '1'mod. item quantity, '2' % req. qty_
mktls = 'X'
mdmps = ' ' "Limited multi-level - explode phantom assemblies at least
mehrs = 'X'
mmory = '1' "【是否使用缓存】Memory Mgmt ('1'=On;'0'=Off;' '=No Reaction)
mtnrv = ls_mlist-matnr
stlal = ls_mlist-stlal
stlan = ls_mlist-stlan
werks = ls_mlist-werks
TABLES
stb = lt_stb
matcat = lt_matcat
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
SORT lt_stb BY ttidx ASCENDING posnr ASCENDING.
CLEAR gs_mbom.
*取STKO表数据
SELECT SINGLE b~bmeng
b~bmein
b~datuv
b~andat
b~annam
b~stktx "BOM文本
b~loekz
a~werks
a~stlan
a~stlal
FROM stko AS b
LEFT JOIN mast AS a
ON a~stlnr = b~stlnr
AND a~stlal = b~stlal
INTO ( gs_mbom-bmeng,gs_mbom-bmein,gs_mbom-datuv1,gs_mbom-andat1,gs_mbom-annam1,
gs_mbom-stktx,gs_mbom-loekz,gs_mbom-werks1,gs_mbom-stlan,gs_mbom-stlal )
WHERE stlty = 'M'
AND b~stlnr = ls_mlist-stlnr
AND b~stlal = ls_mlist-stlal.
CLEAR ls_stb.
LOOP AT lt_stb INTO ls_stb.
gs_mbom-omatnr = ls_mlist-matnr.
gs_mbom-omaktx = ls_mlist-maktx1..
READ TABLE lt_matcat INTO ls_matcat WITH KEY index = ls_stb-ttidx.
IF sy-subrc = 0.
gs_mbom-matnr = ls_matcat-matnr.
gs_mbom-maktx1 = ls_stb-ojtxb.
ENDIF.
IF ls_stb-ttidx <> 1.
DATA(lv_stufe) = ls_stb-stufe - 1.
READ TABLE lt_stb INTO DATA(ls_stb1) WITH KEY stufe = lv_stufe wegxx = ls_stb-vwegx.
IF sy-subrc = 0.
*取STKO表数据
SELECT SINGLE b~bmeng
b~bmein
b~datuv
b~andat
b~annam
b~stktx "BOM文本
b~loekz
a~werks
a~stlan
a~stlal
FROM stko AS b
LEFT JOIN mast AS a
ON a~stlnr = b~stlnr
AND a~stlal = b~stlal
INTO ( gs_mbom-bmeng,gs_mbom-bmein,gs_mbom-datuv1,gs_mbom-andat1,gs_mbom-annam1,
gs_mbom-stktx,gs_mbom-loekz,gs_mbom-werks1,gs_mbom-stlan,gs_mbom-stlal )
WHERE stlty = 'M'
AND b~stlnr = ls_stb1-xtlnr
AND b~stlal = ls_stb1-xtlal.
ENDIF.
ENDIF.
gs_mbom-maktx2 = ls_stb-ojtxp.
gs_mbom-datuv2 = ls_stb-datuv.
gs_mbom-werks2 = ls_stb-werks.
MOVE-CORRESPONDING ls_stb TO gs_mbom.
APPEND gs_mbom TO gt_mbom.
ENDLOOP.
LOOP AT lt_stb INTO ls_stb WHERE sobsl = '41' OR sobsl = '42'.
PERFORM frm_get_bom USING ls_stb ls_mlist-matnr ls_mlist-maktx1.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_MBOM
*&---------------------------------------------------------------------*
* 获取物料BOM数据,一次调用BOM展开函数
*----------------------------------------------------------------------*
FORM f_get_mbom .
TYPES:
BEGIN OF ty_mlist,
matnr TYPE mast-matnr,
werks TYPE mast-werks,
stlan TYPE mast-stlan,
stlal TYPE mast-stlal,
stlnr TYPE mast-stlnr,
maktx1 TYPE makt-maktx,
END OF ty_mlist.
DATA:
ls_mlist TYPE ty_mlist,
ls_stb LIKE stpox,
lt_stb LIKE TABLE OF stpox,
lt_mlist TYPE STANDARD TABLE OF ty_mlist.
*1.获取mast清单
SELECT mast~matnr
mast~werks
mast~stlan
mast~stlal
mast~stlnr
makt~maktx AS maktx1
FROM mast
INNER JOIN makt ON makt~matnr = mast~matnr
INTO CORRESPONDING FIELDS OF TABLE lt_mlist
WHERE mast~matnr IN s_matnr
AND mast~werks IN s_werks
AND mast~stlan = p_stlan
AND mast~stlal IN s_stlal
AND makt~spras = sy-langu.
LOOP AT lt_mlist INTO ls_mlist.
FREE lt_stb.
*BOM explosion for material
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
aufsw = ' '
aumgb = 'X' "【计算报废率】Calculate scrap quantity
capid = p_capid
datuv = p_datuv
ehndl = '1' "【考虑使用可能性】Usage probability handling ' 'none, '1'mod. item quantity, '2' % req. qty_
mktls = 'X'
mdmps = ' ' "Limited multi-level - explode phantom assemblies at least
mehrs = gw_mehrs "Multi-level explosion
mmory = '1' "【是否使用缓存】Memory Mgmt ('1'=On;'0'=Off;' '=No Reaction)
mtnrv = ls_mlist-matnr
stlal = ls_mlist-stlal
stlan = ls_mlist-stlan
werks = ls_mlist-werks
TABLES
stb = lt_stb
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR gs_mbom.
*取STKO表数据
SELECT SINGLE bmeng
bmein
datuv
andat
annam
stktx "BOM文本
FROM stko
INTO ( gs_mbom-bmeng,gs_mbom-bmein,gs_mbom-datuv1,gs_mbom-andat1,gs_mbom-annam1,
gs_mbom-stktx )
WHERE stlty = 'M'
AND stlnr = ls_mlist-stlnr
AND stlal = ls_mlist-stlal.
CLEAR ls_stb.
LOOP AT lt_stb INTO ls_stb.
gs_mbom-matnr = ls_mlist-matnr.
gs_mbom-maktx1 = ls_mlist-maktx1.
gs_mbom-werks1 = ls_mlist-werks.
gs_mbom-stlan = ls_mlist-stlan.
gs_mbom-stlal = ls_mlist-stlal.
gs_mbom-loekz = ls_stb-loekz.
gs_mbom-maktx2 = ls_stb-ojtxp.
gs_mbom-datuv2 = ls_stb-datuv.
gs_mbom-werks2 = ls_stb-werks.
MOVE-CORRESPONDING ls_stb TO gs_mbom.
APPEND gs_mbom TO gt_mbom.
ENDLOOP.
ENDLOOP.
ENDFORM. " F_GET_MBOM
*&---------------------------------------------------------------------*
*& Form F_OUTPUT_BOM
*&---------------------------------------------------------------------*
* ALV展示物料BOM
*----------------------------------------------------------------------*
FORM f_output_bom .
DATA:
lw_repid TYPE sy-repid,
lw_pos TYPE i,
ls_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
ls_layout TYPE slis_layout_alv,
ls_variant TYPE disvariant. "保存布局
DEFINE hout.
lw_pos = lw_pos + 1.
ls_fieldcat-col_pos = lw_pos. "列的输出位置
ls_fieldcat-fieldname = &1. "字段名称
ls_fieldcat-reptext_ddic = &2. "列标题
ls_fieldcat-seltext_s = &3. "短文本
ls_fieldcat-seltext_m = &4. "中文本
ls_fieldcat-seltext_l = &5. "长文本
ls_fieldcat-ref_tabname = &6. "参考表名称
ls_fieldcat-ref_fieldname = &7. "参考字段名称,配合ref_tabname一起使用,一般用来使单元格生成F4帮助
ls_fieldcat-emphasize = &8. "设置列的颜色
ls_fieldcat-edit = &9. "编辑
* LS_FIELDCAT-DDICTXT(1) = 'S'. "可选值为S,M,L,指定列标题为长描述,中描述,还是短描述,该值定义后,列标题的显示内容将固定
ls_fieldcat-no_zero = 'X'. "如果取值为零,则为空,既不输出零
ls_fieldcat-lzero = ''. "输出前置零
APPEND ls_fieldcat.
CLEAR ls_fieldcat.
END-OF-DEFINITION.
*逐层展开
IF p_type = '2'.
hout 'OMATNR' '项次物料' '项次物料' '项次物料' '项次物料' 'MAST' 'MATNR' 'C100' ''.
hout 'OMAKTX' '项次物料描述' '项次描述' '项次描述' '项次物料描述' '' '' 'C100' ''.
ENDIF.
hout 'MATNR' '物料' '物料' '物料' '物料' 'MAST' 'MATNR' 'C100' ''.
hout 'MAKTX1' '物料描述' '描述' '描述' '物料描述' '' '' 'C100' ''.
hout 'WERKS1' '工厂' '工厂' '工厂' '工厂' 'MAST' 'WERKS' 'C100' ''.
hout 'STLAN' '用途' '用途' 'BOM用途' 'BOM 用途' 'MAST' 'STLAN' 'C100' ''.
hout 'STLAL' '可选BOM' '可选BOM' '可选BOM' '可选的BOM' '' '' 'C100' ''.
hout 'STKTX' 'BOM文本' 'BOM文本' 'BOM文本' 'BOM文本' '' '' 'C100' ''.
hout 'BMENG' '基本数量' '基本数量' '基本数量' '基本数量' '' '' 'C100' ''.
hout 'BMEIN' '基本单位' '基本单位' '基本单位' '基本计量单位' 'STKO' 'BMEIN' 'C100' ''.
hout 'DATUV1' '有效起始期' '有效起始期' '有效起始期' '有效起始期' 'STKO' 'DATUV' 'C100' ''.
hout 'LOEKZ' '删除标识(Hd' '删除标识(Hd)' '删除标识(抬头)' '删除标识(抬头)' 'STKO' 'LOEKZ' 'C100' ''.
hout 'ANDAT1' '创建于' '创建日期' '创建日期' '创建日期' 'STKO' 'ANDAT' 'C100' ''.
hout 'ANNAM1' '创建者' '由' '创建者' '创建者' 'STKO' 'ANNAM' 'C100' ''.
hout 'STUFE' 'BOM层次' 'BOM层次' 'BOM层次' 'BOM层次' 'STPOX' 'STUFE' '' ''.
hout 'POSNR' '项目' '项目' '项目' '项目编号' 'STPO' 'POSNR' '' ''.
hout 'POSTP' '项目类别' '项目类别' '项目类别' '项目类别' 'STPO' 'POSTP' '' ''.
hout 'IDNRK' '组件' '组件' '组件' '组件' 'STPO' 'IDNRK' '' ''.
hout 'MAKTX2' '物料描述' '物料描述' '物料描述' '物料描述' '' '' '' ''.
hout 'MENGE' '组件数量' '组件数量' '组件数量' '组件数量' '' '' '' ''.
hout 'MEINS' '单位' '单位' '单位' '组件计量单位' 'STPO' 'MEINS' '' ''.
hout 'DATUV2' '从' '有效' '有效自' '有效起始期' 'STPO' 'DATUV' '' ''.
hout 'WERKS2' '工厂' '工厂' '工厂' '工厂' 'STPOX' 'WERKS' '' ''.
hout 'LGORT' '库位' '存储位置' '存储地点' '存储地点' 'STPO' 'LGORT' '' ''.
hout 'LGPRO' '生产仓储地点' '生产仓储地点' '生产仓储地点' '生产仓储地点' 'STPOX' 'LGPRO' '' ''.
hout 'SORTF' '排序字符串' '排序字符串' '排序字符串' '排序字符串' '' '' '' ''.
hout 'FMENG' '固定数量' '固定数量' '固定数量' '固定数量' 'STPO' 'FMENG' '' ''.
hout 'NETAU' '净ID' '净ID' '净标识' '净标识' 'STPO' 'NETAU' '' ''.
hout 'AUSCH' '组件报废' '组件报废' '组件报废' '组件报废按%' 'STPO' 'AUSCH' '' ''.
hout 'AVOAU' '工序废品' '工序废品' '工序废品' '工序废品按%' 'STPO' 'AVOAU' '' ''.
hout 'BEIKZ' '物料供应标识' '物料供应标识' '物料供应标识' '物料供应标识' 'STPO' 'BEIKZ' '' ''.
hout 'SCHGT' '散装物料' '散装物料' '散装物料' '散装物料' 'STPO' 'SCHGT' '' ''.
hout 'SANKA' '成本关联' '成本核算相关' '成本核算相关' '成本核算相关' 'STPO' 'SANKA' '' ''.
hout 'ALPOS' '替代项' '替代项目' '替代项目' '替代项目' 'STPO' 'ALPOS' '' ''.
hout 'ALPRF' '优先级' '优先级' '优先级' '优先级' 'STPO' 'ALPRF' '' ''.
hout 'ALPST' '策略' '策略' '策略' '策略' 'STPO' 'ALPST' '' ''.
hout 'EWAHR' '使用概率' '使用可能性' '使用可能性' '使用可能性' 'STPO' 'EWAHR' '' ''.
hout 'ITSOB' '特殊采购类' '特殊采购' '特殊采购类' '特殊采购类' 'STPO' 'ITSOB' '' ''.
hout 'DUMPS' '虚拟项目' '虚拟项目' '虚拟项目' '虚拟项目' 'STPOX' 'DUMPS' '' ''.
hout 'DSPST' '展开类型' '展开类型' '展开类型' '展开类型' 'RC29P' 'DSPST' '' ''.
hout 'MMSTA' '特定工厂的物料状态' '特定工厂的物料状态' '特定工厂的物料状态' '特定工厂的物料状态' 'MARC' 'MMSTA' '' ''.
hout 'MMSTD' '有效起始期' '有效起始期' '有效起始期' '有效起始期' 'STPOX' 'MMSTD' '' ''.
hout 'MSTAE' 'MS' '物料状态' '跨工厂物料状态' '跨工厂物料状态' 'MARA' 'MSTAE' '' ''.
hout 'MSTDE' '有效起始期' '有效起始期' '有效起始期' '有效起始期' 'STPOX' 'MSTDE' '' ''.
hout 'DISMM' 'MRP类型' 'MRP类型' 'MRP类型' 'MRP类型' 'MARC' 'DISMM' '' ''.
hout 'SBDKZ' '独立/集中' '独立/集中' '独立/集中' '独立/集中' 'STPOX' 'SBDKZ' '' ''.
hout 'SOBSL' '特殊采购' '特殊采购' '特殊采购类' '特殊采购类(项目物料)' 'STPOX' 'SOBSL' '' ''.
hout 'RGEKZ' '反冲' '反冲' '反冲' '反冲' 'STPOX' 'RGEKZ' '' ''.
hout 'MSCHG' '散装物料' '散装物料' '散装物料(ItemMa)' '散装物料(项目物料)' 'STPOX' 'MSCHG' '' ''.
hout 'AUSSS' '装配报废 (项目物料' '装配报废 (项目物料' '装配报废 (项目物料' '装配报废 (项目物料)' 'STPOX' 'AUSSS' '' ''.
hout 'KAUSF' '组件报废(项目物料)' '组件报废(项目物料)' '组件报废(项目物料)' '组件报废(项目物料)' 'STPOX' 'KAUSF' '' ''.
*
* HOUT 'XTLTY' 'BOM类别下一级别' 'BOM类别NL' 'BOM类别下一级别' 'BOM类别(下一级别)' 'STPOX' 'XTLTY' '' ''.
* HOUT 'XTLNR' 'BOM编号' 'BOM编号NL' 'BOM编号下一级别' 'BOM编号(下一级别)' 'STPOX' 'XTLNR' '' ''.
* HOUT 'XTLAN' 'BOM使用' 'BOM使用NL' 'BOM使用下一级别' 'BOM使用(下一级别)' 'STPOX' 'XTLAN' '' ''.
* HOUT 'XTLAL' 'BOM可选项' 'BOM可选项 NL' 'BOM可选项' 'BOM可选项(下一级别)' 'STPOX' 'XTLAL' '' ''.
* HOUT 'XMENG' '基本数量' '基本数量' '基本数量Nxt Lv)' '基本数量(下一级别)' 'STPOX' 'XMENG' '' ''.
* HOUT 'XMEIN' '单位(下一级别)' '单位(下一级别)' '基本单位(下一级)' '单位(下一级别)' 'STPOX' 'XMEIN' '' ''.
* HOUT 'XALTS' '标识:可选项(下一级别)' '标识:可选项(下一级别)' '标识:可选项(下一级别)' '标识:可选项(下一级别)' 'STPOX' 'XALTS' '' ''.
* HOUT 'XLOEK' '删除标识下一级' '删除标识下一级' '删除标识下一级' '删除标识(抬头;下一级别)' 'STPOX' 'XLOEK' '' ''.
ls_layout-zebra = 'X'. "斑马线条纹显示
"LS_LAYOUT-GET_SELINFOS = 'X'.
ls_layout-colwidth_optimize = 'X'. "自动调整列宽
"LS_LAYOUT-DETAIL_POPUP = 'X'. "对list_alv有效,行项目明细弹窗形式
"LS_LAYOUT-NO_KEYFIX = 'X'. "关键字不固定,可以随滚动条滚动
ls_layout-box_fieldname = 'CBOX'. "在输出内表中定义的字段名,该字段作为checkbox,可以在输出列表中,选择多行
"LS_VARIANT-REPORT = SY-REPID.
"LS_VARIANT-HANDLE = '1'. "防止不同的ALV中布局发生冲突
lw_repid = sy-repid.
* IF p_rad1 IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lw_repid
is_layout = ls_layout
it_fieldcat = ls_fieldcat[]
i_default = 'X'
i_save = 'A'
* IS_VARIANT = LS_VARIANT
* i_callback_user_command = 'F_USER_COMMAND'
i_callback_pf_status_set = 'F_ALV_STATUS'
TABLES
t_outtab = gt_mbom
EXCEPTIONS
program_error = 1
OTHERS = 2.
* ENDIF.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " F_OUTPUT_BOM
*&---------------------------------------------------------------------*
*& Form F_ALV_STATUS
*&---------------------------------------------------------------------*
* AVL STATUS
*&---------------------------------------------------------------------*
FORM f_alv_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ST_001'.
ENDFORM. "F_ALV_STATUS
**&---------------------------------------------------------------------*
**& Form F_USER_COMMAND
**&---------------------------------------------------------------------*
** USER_COMMAND
**----------------------------------------------------------------------*
*FORM f_user_command USING r_ucomm LIKE sy-ucomm
* rs_selfield TYPE slis_selfield.
*
*ENDFORM. "F_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form frm_get_bom
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_STB
*&---------------------------------------------------------------------*
FORM frm_get_bom USING ps_stb TYPE stpox pv_matnr pv_maktx.
DATA:
ls_stb LIKE stpox,
lt_stb LIKE TABLE OF stpox,
ls_matcat LIKE cscmat,
lt_matcat LIKE TABLE OF cscmat.
*1.获取mast清单
SELECT SINGLE
mast~matnr,
mast~werks,
mast~stlan,
mast~stlal,
mast~stlnr,
makt~maktx AS maktx1
FROM mast
INNER JOIN makt ON makt~matnr = mast~matnr
INTO @DATA(ls_mast)
WHERE mast~matnr = @ps_stb-idnrk
AND mast~werks = @lv_werks
AND mast~stlan = @p_stlan
AND mast~stlal IN @s_stlal.
FREE lt_stb.
*BOM explosion for material
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
aufsw = ' '
aumgb = 'X' "【计算报废率】Calculate scrap quantity
capid = p_capid
datuv = p_datuv
ehndl = '1' "【考虑使用可能性】Usage probability handling ' 'none, '1'mod. item quantity, '2' % req. qty_
mktls = 'X'
mdmps = ' ' "Limited multi-level - explode phantom assemblies at least
mehrs = 'X'
mmory = '1' "【是否使用缓存】Memory Mgmt ('1'=On;'0'=Off;' '=No Reaction)
mtnrv = ps_stb-idnrk
stlal = ls_mast-stlal
stlan = ls_mast-stlan
werks = lv_werks
TABLES
stb = lt_stb
matcat = lt_matcat
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
SORT lt_stb BY ttidx ASCENDING posnr ASCENDING.
CLEAR gs_mbom.
*取STKO表数据
SELECT SINGLE b~bmeng
b~bmein
b~datuv
b~andat
b~annam
b~stktx "BOM文本
b~loekz
a~werks
a~stlan
a~stlal
FROM stko AS b
LEFT JOIN mast AS a
ON a~stlnr = b~stlnr
AND a~stlal = b~stlal
INTO ( gs_mbom-bmeng,gs_mbom-bmein,gs_mbom-datuv1,gs_mbom-andat1,gs_mbom-annam1,
gs_mbom-stktx,gs_mbom-loekz,gs_mbom-werks1,gs_mbom-stlan,gs_mbom-stlal )
WHERE stlty = 'M'
AND b~stlnr = ls_mast-stlnr
AND b~stlal = ls_mast-stlal.
CLEAR ls_stb.
LOOP AT lt_stb INTO ls_stb.
gs_mbom-omatnr = pv_matnr.
gs_mbom-omaktx = pv_maktx..
READ TABLE lt_matcat INTO ls_matcat WITH KEY index = ls_stb-ttidx.
IF sy-subrc = 0.
gs_mbom-matnr = ls_matcat-matnr.
gs_mbom-maktx1 = ls_stb-ojtxb.
ENDIF.
IF ls_stb-ttidx <> 1.
* READ TABLE LT_MATCAT INTO LS_MATCAT WITH KEY MATNR = LS_STB-IDNRK.
* IF SY-SUBRC = 0.
DATA(lv_stufe) = ls_stb-stufe - 1.
READ TABLE lt_stb INTO DATA(ls_stb1) WITH KEY stufe = lv_stufe wegxx = ls_stb-vwegx.
IF sy-subrc = 0.
*取STKO表数据
SELECT SINGLE b~bmeng
b~bmein
b~datuv
b~andat
b~annam
b~stktx "BOM文本
b~loekz
a~werks
a~stlan
a~stlal
FROM stko AS b
LEFT JOIN mast AS a
ON a~stlnr = b~stlnr
AND a~stlal = b~stlal
INTO ( gs_mbom-bmeng,gs_mbom-bmein,gs_mbom-datuv1,gs_mbom-andat1,gs_mbom-annam1,
gs_mbom-stktx,gs_mbom-loekz,gs_mbom-werks1,gs_mbom-stlan,gs_mbom-stlal )
WHERE stlty = 'M'
AND b~stlnr = ls_stb1-xtlnr
AND b~stlal = ls_stb1-xtlal.
ENDIF.
* ENDIF.
ENDIF.
gs_mbom-maktx2 = ls_stb-ojtxp.
gs_mbom-datuv2 = ls_stb-datuv.
gs_mbom-werks2 = ls_stb-werks.
MOVE-CORRESPONDING ls_stb TO gs_mbom.
APPEND gs_mbom TO gt_mbom.
IF ls_stb-sobsl = '41' OR ls_stb-sobsl = '42'.
PERFORM frm_get_bom USING ls_stb pv_matnr pv_maktx.
ENDIF.
ENDLOOP.
ENDFORM.