工艺路线标准工时查询

复制代码
  1 *&---------------------------------------------------------------------*
  2 * Programe name: ZPR03
  3 * T-Code       : *****
  4 * Description  : 工艺路线标准工时报表
  5 * Author       : *****
  6 * Date         : 2010-03-04
  7 * Request NO.  : C01K905748
  8 *---------------------------------------------------------------------*
  9 * Modification Log
 10 * Date          Author           Num   Description
 11 * 2010-03-04    *****            001   New Create
 12 *---------------------------------------------------------------------*
 13 REPORT ZPR03 NO STANDARD PAGE HEADING.
 14 
 15 *---------------------------------------------------------------------*
 16 *Tables defination
 17 *---------------------------------------------------------------------*
 18 TABLES: MARA, MARC, MAPL, PLAS, PLPO, CRHD, CRTX.
 19 *---------------------------------------------------------------------*
 20 *Type pools defination
 21 *---------------------------------------------------------------------*
 22 type-pools: slis.
 23 
 24 *---------------------------------------------------------------------*
 25 *Data defination
 26 *---------------------------------------------------------------------*
 27 
 28 *---------------------------------------------------------------------*
 29 *Inner table and Workspace defination
 30 *---------------------------------------------------------------------*
 31 DATA: BEGIN OF TD_DISP OCCURS 0,
 32     SECT  TYPE C,                 "显示选择用
 33     WERKS TYPE T001W-WERKS,       "工厂
 34     MTART TYPE MARA-MTART,        "物料类型
 35     FERTH TYPE MARA-FERTH,        "生产/检验备忘录(客户)
 36     MATNR TYPE MARA-MATNR,        "物料
 37     MATNR_EXT TYPE MATNR_EXT,
 38     MAKTX TYPE MAKT-MAKTX,        "物料描述
 39     PLNAL TYPE PLAS-PLNAL,        "组计数器
 40     ARBPL TYPE CRHD-ARBPL,        "工作中心
 41     VGW02 TYPE PLPO-VGW02,        "标准工时
 42     ANZMA TYPE PLPO-ANZMA,        "雇员数量
 43     USR00 TYPE PLPO-USR00,        "线外人数
 44     CAPAC TYPE PLPO-BMSCH,        "标准产能
 45     ROWCL TYPE CHAR4,
 46   END OF TD_DISP.
 47 
 48 DATA:TD_FIELDCAT TYPE TABLE OF SLIS_FIELDCAT_ALV WITH HEADER LINE,
 49      TD_LAYOUT   TYPE SLIS_LAYOUT_ALV.
 50 
 51 *---------------------------------------------------------------------*
 52 *Screen defination
 53 *---------------------------------------------------------------------*
 54 SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-S01.
 55   PARAMETERS P_WERKS TYPE MARC-WERKS OBLIGATORY DEFAULT '1002'.
 56   SELECT-OPTIONS S_MTART FOR MARA-MTART.    "物料类型
 57   SELECT-OPTIONS S_FERTH FOR MARA-FERTH.    "生产/检验备忘录
 58   SELECT-OPTIONS S_MATNR FOR MARA-MATNR.    "物料
 59   SELECT-OPTIONS S_ARBPL FOR CRHD-ARBPL.    "工作中心
 60 SELECTION-SCREEN END OF BLOCK BK1.
 61 
 62 *---------------------------------------------------------------------*
 63 *AT SELECTION-SCREEN ON
 64 *---------------------------------------------------------------------*
 65 AT SELECTION-SCREEN ON P_WERKS.
 66   PERFORM FRM_CHECK_INPUT_WERKS.
 67 *---------------------------------------------------------------------*
 68 *Start-of-selection
 69 *---------------------------------------------------------------------*
 70 START-OF-SELECTION.
 71 
 72 * 根据选择条件,取得数据
 73   PERFORM FRM_GET_DATA.
 74 * 设置显示格式
 75   PERFORM FRM_SET_LAYOUT.
 76 * 显示数据
 77   PERFORM FRM_DISPLAY_DATA.
 78 
 79 *&---------------------------------------------------------------------*
 80 *&      Form  FRM_CHECK_INPUT_WERKS
 81 *&---------------------------------------------------------------------*
 82 *       检查工厂的输入
 83 *----------------------------------------------------------------------*
 84 form FRM_CHECK_INPUT_WERKS .
 85   DATA: LW_WERKS TYPE T001W-WERKS.
 86   SELECT SINGLE WERKS
 87     INTO LW_WERKS
 88     FROM T001W
 89    WHERE WERKS = P_WERKS.
 90   IF SY-SUBRC <> 0.
 91     MESSAGE TEXT-M01 TYPE 'S'.
 92     STOP.
 93   ENDIF.
 94 endform.                    " FRM_CHECK_INPUT_WERKS
 95 
 96 *&---------------------------------------------------------------------*
 97 *&      Form  FRM_GET_DATA
 98 *&---------------------------------------------------------------------*
 99 *       根据选择条件,取得数据
100 *----------------------------------------------------------------------*
101 form FRM_GET_DATA .
102 
103 DATA: BEGIN OF TD_MATNR OCCURS 0,
104     WERKS TYPE MARC-WERKS,        "工厂
105     MTART TYPE MARA-MTART,        "物料类型
106     FERTH TYPE MARA-FERTH,        "生产/检验备忘录(客户)
107     MATNR TYPE MARA-MATNR,        "物料
108     MAKTX TYPE MAKT-MAKTX,        "物料描述
109   END OF TD_MATNR.
110 
111 DATA: BEGIN OF TD_TIME OCCURS 0,
112     MATNR TYPE MAPL-MATNR,
113     WERKS TYPE MAPL-WERKS,
114     PLNTY TYPE PLAS-PLNTY,      "任务清单类型
115     PLNNR TYPE PLAS-PLNNR,      "任务清单组码
116     PLNAL TYPE PLAS-PLNAL,      "
117     PLNKN TYPE PLAS-PLNKN,      "任务清单节点数
118     ZAEHL TYPE PLAS-ZAEHL,      "内部计数器
119     VGW02 TYPE PLPO-VGW02,      "机器工时
120     VGE02 TYPE PLPO-VGE02,      "机器工时单位
121     ANZMA TYPE PLPO-ANZMA,      "雇员数量
122     BMSCH TYPE PLPO-BMSCH,      "基本数量
123     MEINH TYPE PLPO-MEINH,      "作业/工序的计量单位
124 *    UMREZ TYPE PLPO-UMREZ,      "计量单位转换:表头
125 *    UMREN TYPE PLPO-UMREN,      "计量单位转换:工序
126     USR00 TYPE PLPO-USR00,      "线外人数
127     ARBID TYPE PLPO-ARBID,      "对象标识
128     ARBPL TYPE CRHD-ARBPL,      "工作中心
129   END OF TD_TIME.
130   IF SY-BATCH <> 'X'.
131     call function 'SAPGUI_PROGRESS_INDICATOR'
132       EXPORTING
133         PERCENTAGE       = 20
134         TEXT             = '取得物料数据……'.
135   ENDIF.
136 * 取得物料数据
137   SELECT MARC~WERKS             "工厂
138          MARA~MTART             "物料类型
139          MARA~FERTH             "客户
140          MARA~MATNR             "物料
141          MAKT~MAKTX             "物料描述
142     INTO TABLE TD_MATNR
143     FROM MARA INNER JOIN MARC
144       ON MARA~MATNR = MARC~MATNR
145      AND MARC~WERKS = P_WERKS
146          INNER JOIN MAKT
147      ON  MARA~MATNR = MAKT~MATNR
148     AND  MAKT~SPRAS = SY-LANGU
149          INNER JOIN MAPL
150      ON  MARC~MATNR = MAPL~MATNR
151     AND  MARC~WERKS = MAPL~WERKS
152    WHERE MARA~MATNR IN S_MATNR
153     AND  MARA~MTART IN S_MTART
154     AND  MARA~FERTH IN S_FERTH
155     AND  MAPL~PLNTY = 'N'.
156 
157   IF TD_MATNR[] IS INITIAL.
158     MESSAGE TEXT-M02 TYPE 'S'.
159     STOP.
160   ENDIF.
161 
162   SORT TD_MATNR BY WERKS MATNR.
163   DELETE ADJACENT DUPLICATES FROM TD_MATNR COMPARING WERKS MATNR.
164   IF SY-BATCH <> 'X'.
165     call function 'SAPGUI_PROGRESS_INDICATOR'
166       EXPORTING
167         PERCENTAGE       = 40
168         TEXT             = '取得工时数据……'.
169   ENDIF.
170 
171 * 取得工时数据
172   SELECT MAPL~MATNR           "物料
173          MAPL~WERKS           "工厂
174          PLAS~PLNTY           "Task List Type
175          PLAS~PLNNR           "Key for Task List Group
176          PLAS~PLNAL           "Group Counter
177          PLAS~PLNKN           "Number of the task list node
178          PLAS~ZAEHL           "Internal counter
179          PLPO~VGW02           "标准工时
180          PLPO~VGE02           "标准工时单位
181          PLPO~ANZMA           "Number of employees
182          PLPO~BMSCH           "Base Quantity
183          PLPO~MEINH           "Unit of Measure for Activity/Operation
184          PLPO~USR00           "线外人员
185          PLPO~ARBID           "Object ID
186          CRHD~ARBPL           "Work center
187     INTO TABLE TD_TIME
188     FROM MAPL INNER JOIN PLAS ON
189          MAPL~PLNTY = PLAS~PLNTY
190      AND MAPL~PLNNR = PLAS~PLNNR
191      AND MAPL~PLNAL = PLAS~PLNAL
192      AND PLAS~LOEKZ NE 'X'
193          INNER JOIN PLPO ON
194          PLAS~PLNTY = PLPO~PLNTY
195      AND PLAS~PLNNR = PLPO~PLNNR
196      AND PLAS~PLNKN = PLPO~PLNKN
197      AND PLAS~ZAEHL = PLPO~ZAEHL
198      AND PLPO~WERKS = P_WERKS
199      AND PLPO~LOEKZ NE 'X'
200      AND PLPO~CKSELKZ EQ 'X'
201          INNER JOIN CRHD ON
202          PLPO~ARBID = CRHD~OBJID
203      AND CRHD~WERKS = P_WERKS
204      AND CRHD~OBJTY = 'A'
205 *    FOR ALL ENTRIES IN TD_MATNR
206    WHERE MAPL~WERKS = P_WERKS
207      AND MAPL~PLNTY EQ 'N'
208      AND MAPL~LOEKZ NE 'X'
209 *    AND  MAPL~MATNR = TD_MATNR-MATNR
210     AND  MAPL~MATNR IN S_MATNR
211     AND  MAPL~LOEKZ NE 'X'
212     AND  MAPL~PLNTY EQ 'N'
213     AND  PLPO~STEUS IN ('ZP01','ZP04','PP03')
214     AND  CRHD~ARBPL IN S_ARBPL.
215 *    READ TABLE TD_MATNR WITH KEY MATNR = TD_TIME-MATNR BINARY SEARCH.
216 *    IF SY-SUBRC = 0.
217 *      APPEND TD_TIME.
218 *    ELSE.
219 *      CONTINUE.
220 *    ENDIF.
221 *  ENDSELECT.
222 
223   IF SY-BATCH <> 'X'.
224     call function 'SAPGUI_PROGRESS_INDICATOR'
225       EXPORTING
226         PERCENTAGE       = 60
227         TEXT             = '计算工时数据和产能……'.
228   ENDIF.
229   DATA: LW_ROWCL TYPE CHAR4 VALUE 'C210'.
230   DATA: FLG TYPE C VALUE SPACE.
231   REFRESH: TD_DISP[].
232   LOOP AT TD_MATNR.
233     TD_DISP-WERKS = TD_MATNR-WERKS. "工厂
234     TD_DISP-MTART = TD_MATNR-MTART. "物料类型
235     TD_DISP-FERTH = TD_MATNR-FERTH. "生产/检验备忘录(客户)
236     TD_DISP-MATNR = TD_MATNR-MATNR. "物料
237     TD_DISP-MAKTX = TD_MATNR-MAKTX. "物料描述
238     IF LW_ROWCL <> 'C410' AND FLG = 'X'.
239       LW_ROWCL = 'C410'.
240       FLG = SPACE.
241     ELSEIF LW_ROWCL <> 'C210' AND FLG = 'X'.
242       LW_ROWCL = 'C210'.
243       FLG = SPACE.
244     ENDIF.
245     TD_DISP-ROWCL = LW_ROWCL.
246 
247     LOOP AT TD_TIME WHERE MATNR = TD_MATNR-MATNR AND
248                           WERKS = TD_MATNR-WERKS.
249       FLG = 'X'.
250       TD_DISP-PLNAL = TD_TIME-PLNAL.  "组计数器
251       TD_DISP-ARBPL = TD_TIME-ARBPL.  "工作中心
252       IF TD_TIME-BMSCH <> 0.
253         TD_DISP-VGW02 = TD_TIME-VGW02 / TD_TIME-BMSCH.
254       ENDIF.
255       IF TD_TIME-VGE02 = 'H'.
256         TD_DISP-VGW02 = TD_DISP-VGW02 * 3600.
257       ELSEIF TD_TIME-VGE02 = 'MIN'.
258         TD_DISP-VGW02 = TD_DISP-VGW02 * 60.
259       ENDIF.
260       TD_DISP-ANZMA = TD_TIME-ANZMA.
261       TD_DISP-USR00 = TD_TIME-USR00.
262       IF TD_DISP-VGW02 <> 0.
263         TD_DISP-CAPAC = 3600 / TD_DISP-VGW02.
264       ENDIF.
265 
266       call function 'CONVERSION_EXIT_MATN1_OUTPUT'
267         exporting
268           input         = TD_DISP-MATNR
269         IMPORTING
270           OUTPUT        = TD_DISP-MATNR_EXT   .
271 
272       APPEND TD_DISP.
273       CLEAR: TD_TIME.
274     ENDLOOP.
275     CLEAR: TD_DISP.
276   ENDLOOP.
277 
278   IF TD_DISP[] IS INITIAL.
279     MESSAGE TEXT-M03 TYPE 'S'.
280     STOP.
281   ENDIF.
282 
283 endform.                    " FRM_GET_DATA
284 
285 *&---------------------------------------------------------------------*
286 *&      Form  FRM_SET_LAYOUT
287 *&---------------------------------------------------------------------*
288 *       设置显示格式
289 *----------------------------------------------------------------------*
290 form FRM_SET_LAYOUT .
291 
292 * 设定显示字段
293   REFRESH TD_FIELDCAT[].
294   PERFORM SUB_FILL_FIELDCAT_ALV USING:
295         'TD_DISP' 'WERKS' SPACE SPACE '工厂',
296         'TD_DISP' 'MTART' SPACE SPACE '物料类型',
297         'TD_DISP' 'FERTH' SPACE SPACE '客户',
298         'TD_DISP' 'MATNR_EXT' SPACE SPACE '物料',
299         'TD_DISP' 'MAKTX' SPACE SPACE '物料描述',
300         'TD_DISP' 'PLNAL' SPACE SPACE '组计数器',
301         'TD_DISP' 'ARBPL' SPACE SPACE '工作中心',
302         'TD_DISP' 'VGW02' SPACE SPACE '标准工时(S)',
303         'TD_DISP' 'ANZMA' SPACE SPACE '雇员数量',
304         'TD_DISP' 'USR00' SPACE SPACE '线外人数',
305         'TD_DISP' 'CAPAC' SPACE SPACE '标准产能'.
306 
307 * 设定显示控制
308   CLEAR TD_LAYOUT.
309   TD_LAYOUT-ZEBRA = 'X'.
310   TD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
311   TD_LAYOUT-BOX_FIELDNAME = 'SECT'.
312   TD_LAYOUT-INFO_FIELDNAME = 'ROWCL'.
313   TD_LAYOUT-WINDOW_TITLEBAR = '工艺路线标准工时报表'.
314 
315 endform.                    " FRM_SET_LAYOUT
316 
317 *&---------------------------------------------------------------------*
318 *&      Form  FRM_DISPLAY_DATA
319 *&---------------------------------------------------------------------*
320 *       显示数据
321 *----------------------------------------------------------------------*
322 form FRM_DISPLAY_DATA .
323 
324   call function 'REUSE_ALV_GRID_DISPLAY'
325     EXPORTING
326       I_CALLBACK_PROGRAM                = SY-REPID
327       IS_LAYOUT                         = TD_LAYOUT
328       IT_FIELDCAT                       = TD_FIELDCAT[]
329       I_DEFAULT                         = 'X'
330       I_SAVE                            = 'A'
331     tables
332       t_outtab                          = TD_DISP[]
333     EXCEPTIONS
334       PROGRAM_ERROR                     = 1
335       OTHERS                            = 2.
336 
337   if sy-subrc <> 0.
338      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
339           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
340   endif.
341 endform.                    " FRM_DISPLAY_DATA
342 
343 *&---------------------------------------------------------------------*
344 *&      Form  SUB_FILL_FIELDCAT_ALV
345 *&---------------------------------------------------------------------*
346 *       填充显示字段
347 *----------------------------------------------------------------------*
348 form SUB_FILL_FIELDCAT_ALV  USING VALUE(I_TABNAME)
349                                    VALUE(I_FIELDNAME)
350                                    VALUE(I_QTABNAME)
351                                    VALUE(I_QFIELDNAME)
352                                    VALUE(I_SELTEXT_M).
353 
354   CLEAR:
355     TD_FIELDCAT.
356   TD_FIELDCAT-TABNAME    = I_TABNAME.
357   TD_FIELDCAT-FIELDNAME  = I_FIELDNAME.
358   TD_FIELDCAT-QTABNAME   = I_QTABNAME.
359   TD_FIELDCAT-QFIELDNAME = I_QFIELDNAME.
360   TD_FIELDCAT-SELTEXT_M  = I_SELTEXT_M.
361   APPEND TD_FIELDCAT.
362 
363 endform.
复制代码

转自:http://iamskay.blog.163.com/blog/static/1337975632010612242110/

posted @   এ雪漫千山ꦿ࿐  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示