生成转储拣配单的ABAP程序
生活随笔
收集整理的這篇文章主要介紹了
生成转储拣配单的ABAP程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
report ZE_MM_SCPSDD
? ??? no standard page heading line-size 150.
*---------------------------生成轉儲揀配單的ABAP程序-------------------------------------------*
*? ?data definition
*----------------------------------------------------------------------*
type-pools: slis.
*? ??? Batchinputdata of single transaction
DATA:? ?BDCDATA LIKEBDCDATA? ? OCCURS 0 WITH HEADERLINE.
*? ??? messages of call transaction
DATA:? ?MESSTAB LIKE BDCMSGCOLLOCCURS 0 WITH HEADER LINE.
*? ??? error session opened (' ' or 'X')
DATA:? ?E_GROUP_OPENED.
*? ??? message texts
TABLES: RESB , AFPO ,AFKO, MARA ,EKET ,ZSCPSDD ,EKKO,MARC,ZDSCDD,zlog.
data: mdezx like mdez occurs 0.
data: wa_mdezx like lineof??mdezx.
data: mdpsx like mdps occurs 0.
data: wa_mdpsx like lineof??mdpsx.
data: mdsux like mdsu occurs 0.
DATA: begin of itab_mrp??OCCURS0,
? ? RSNUM like RESB-RSNUM ,"預留號#
? ? RSPOS like RESB-RSPOS ,"預留項目
? ? MATNR like RESB-MATNR ,"物料號碼#
? ? MAKTX like MAKT-MAKTX ,"物料描述#
? ? BDMNG like RESB-BDMNG ,"需求量#
? ? BDTER like RESB-BDTER ,"需求日期#
? ? LABST like MARD-LABST ,"庫存量
? ? MENGE like RESB-BDMNG ,"采購訂單數量,配送量
? ? WERKS like RESB-WERKS ,"@@新增工廠
? ? LGORT like RESB-LGORT ,"@@新增倉庫
? ? AUFNR like RESB-AUFNR ,"相關生產訂單
? ? GSTRP like AFKO-GSTRP ,"生產訂單基本開始時間
? ? ARBPL like CRHD-ARBPL ,"工作中心
? ? AUFPL like RESB-AUFPL ,"計劃工藝路線號
? ? APLZL like RESB-APLZL ,"計數器
? ? DELB0 like mdez-DELB0 ,"MRP(物料需求計劃)元素
? ? PLNBEZ like afko-PLNBEZ ,"MRP(物料需求計劃)數據
end of itab_mrp.
**調用BAPI所需要的內表
**參照ZTEST_BAPI_CREATE_PO
**************************
DATA:itab_poheader LIKE bapimepoheader OCCURS 0 WITH HEADERLINE,
itab_poheaderx LIKE bapimepoheaderx OCCURS 0 WITH HEADERLINE,
itab_poitems LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
itab_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
exppurchaseorder LIKE bapimepoheader-po_number,
itab_itemsche LIKEbapimeposchedule??OCCURS 0 WITHHEADER LINE,
itab_itemschex LIKE BAPIMEPOSCHEDULX??OCCURS 0 WITH HEADER LINE,
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF recordhead OCCURS 0,
????LIFNR_001like??EKKO-LIFNR,"供應商帳戶號1800
????BSART_002like??RM06E-BSART ,"訂單類型(采購):ZEB
????BEDAT_003like??RM06E-BEDAT,"采購訂單日期:sy-datum
????EKORG_004like??EKKO-EKORG ,"采購組織:2000
????EKGRP_005like??EKKO-EKGRP,? ?????????????????"采購組:F01
????EEIND_006like??RM06E-EEIND ,"交貨日期:P_EINDT
????LPEIN_007like??RM06E-LPEIN ,"交貨日的類別:T
????WERKS_008like??RM06E-WERKS ,"工廠:P_WERKS
????LGORT_009like??RM06E-LGORT,??"庫存地點:P_LGORT
????END OFrecordhead.
data: begin of record??OCCURS0,
? ?CHKID??TYPE c,
? ? RSNUM like RESB-RSNUM ,"預留號#
? ? RSPOS like RESB-RSPOS ,"預留項目
? ? MATNR like RESB-MATNR ,"物料號碼#
? ? MAKTX like MAKT-MAKTX ,"物料描述#
? ? BDMNG like RESB-BDMNG ,"需求量#
? ? BDTER like RESB-BDTER ,"需求日期#
? ? LABST like MARD-LABST ,"庫存量
? ? MENGE like RESB-BDMNG ,"采購訂單數量,配送量
? ? WERKS like RESB-WERKS ,"@@新增工廠
? ? LGORT like RESB-LGORT ,"@@新增倉庫
? ? AUFNR like RESB-AUFNR ,"相關生產訂單
? ? GSTRP like AFKO-GSTRP ,"生產訂單基本開始時間
? ? ARBPL like CRHD-ARBPL ,"工作中心
? ? AUFPL like RESB-AUFPL ,"計劃工藝路線號
? ? APLZL like RESB-APLZL ,"計數器
*? ? VORNR like RESB-VORNR ,"作業
*? ? PLNFL like RESB-PLNFL ,"序列
end of record.
DATA: recordline like LINE OF record.
*DATA : record LIKE TABLE OF ZSCPSDD001 WITH HEADER LINE.
*** End generated data section ***
DATA:selrecord like TABLE OF record WITH HEADER LINE.
DATA:instab like TABLE OF zdscdd WITH HEADER LINE.
DATA: pmode TYPE c VALUE 'E' ,
????umode TYPE cVALUE 'S'.
DATA: begin of sumrecord??OCCURS0,
? ? CHKID(1)??, "選擇
? ? MATNR like RESB-MATNR ,"物料號碼#
? ? MAKTX like MAKT-MAKTX ,"物料描述#
? ? EEIND like RM06E-EEIND,"交貨日期
? ? BDMNG like RESB-BDMNG ,"需求量#
? ? LABST like MARD-LABST ,"庫存量
? ? ZTKCL like MARD-LABST ,"在途庫存
? ? MENGE like RESB-BDMNG ,"采購訂單數量,配送量
? ? WERKS like RESB-WERKS ,"@@新增工廠
? ? LGORT like RESB-LGORT ,"@@新增倉庫
? ? ARBPL like CRHD-ARBPL ,"工作中心
? ? end of sumrecord .
DATA: sumrecord_wa like line of sumrecord.
DATA: begin of msgtab occurs 0,
? ???msg(255),
? ???msgtype(1),
? ???end of msgtab.
*DATA: msg(255),msgtype(1).
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE t01.
SELECT-OPTIONS: P_WERKS FOR RESB-WERKSOBLIGATORY??NO intervalsNO-EXTENSION."工廠
SELECT-OPTIONS: P_LGORT FOR RESB-LGORTOBLIGATORY??."線邊庫 NO intervalsNO-EXTENSION
SELECT-OPTIONS: P_AUFNR FORAFPO-AUFNR??."生產訂單號
SELECT-OPTIONS: P_BDTER FOR RESB-BDTEROBLIGATORY??NO intervalsNO-EXTENSION??."需求日期
SELECT-OPTIONS: P_MATKL FORMARA-MATKL??."物料組
SELECT-OPTIONS: P_MATNR FORRESB-MATNR??."物料號
SELECT-OPTIONS: P_EINDT FOR EKET-EINDT OBLIGATORY NO intervalsNO-EXTENSION DEFAULT sy-datum."交貨日期
PARAMETERS:????P_PSRADIOBUTTON GROUP PSBZ.
PARAMETERS:????P_FPSRADIOBUTTON GROUP PSBZ.
SELECTION-SCREEN: END OF BLOCK b1.
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE t02.
SELECT-OPTIONS: P_WERKS2 FOR MARC-WERKSOBLIGATORY??NO intervalsNO-EXTENSION."發貨工廠
SELECT-OPTIONS: P_LGFSB FOR MARC-LGFSB ."發貨存儲地點
SELECTION-SCREEN: END OF BLOCK b2.
*SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE t03.
*PARAMETERS: P_SCSL TYPE I DEFAULT '200' OBLIGATORY .
*SELECTION-SCREEN: END OF BLOCK b3.
*SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLEtext-001.
*PARAMETERS: pmode TYPE c DEFAULT 'N' OBLIGATORY.
*PARAMETERS: umode TYPE c DEFAULT 'A' OBLIGATORY.
*SELECTION-SCREEN: END OF BLOCK b2.
DATA: i_private TYPE slis_data_caller_exit,
? ???i_selfield TYPE slis_selfield,
? ???W_exit(1) TYPE c.
INITIALIZATION.
??t01 = '收貨信息'.
??t02 = '發貨信息'.
*??t03 = '輸出參數'.
start-of-selection.
??perform write_zlog.
??perform get_recordhead .
??perform get_record .
??LOOP AT record." 全部計數WHERECHKID = 'X'.
? ? selrecord-CHKID =record-CHKID .
? ? selrecord-RSNUM =record-RSNUM .
? ? selrecord-RSPOS =record-RSPOS .
? ? selrecord-MATNR =record-MATNR .
? ? selrecord-MAKTX =record-MAKTX .
? ? selrecord-BDMNG =record-BDMNG .
? ? selrecord-BDTER =record-BDTER .
? ? selrecord-LABST =record-LABST .
? ? selrecord-MENGE =record-MENGE .
? ? selrecord-WERKS =record-WERKS .
? ? selrecord-LGORT =record-LGORT .
? ? selrecord-AUFPL =record-AUFPL .
? ? selrecord-ARBPL =record-ARBPL .
? ? append selrecord .
? ? clear selrecord .
??ENDLOOP.
*SHIFT P_EINDT BY 3 PLACES LEFT.
??LOOP AT selrecord .
? ? DATA ARBPL2 likeCRHD-ARBPL.
? ? CLEAR ARBPL2.
? ? LOOP AT sumrecord where matnr= selrecord-matnr.
? ???ARBPL2 = sumrecord-ARBPL.
? ? ENDLOOP.
? ? sumrecord-MATNR =selrecord-MATNR .
? ? sumrecord-MAKTX =selrecord-MAKTX .
? ? sumrecord-EEIND =P_EINDT.
? ? sumrecord-BDMNG =selrecord-BDMNG .
? ? sumrecord-WERKS =selrecord-WERKS .
? ? sumrecord-LGORT =selrecord-LGORT .
? ? IF ARBPL2 is initial.
? ???sumrecord-ARBPL = selrecord-ARBPL.
? ? ELSE.
? ???sumrecord-ARBPL = ARBPL2.
? ? ENDIF.
? ? collect sumrecord .
? ? clear sumrecord .
??ENDLOOP.
??LOOP AT sumrecord.
? ? DATA: begin of itab_arbploccurs 0 ,
? ? matnr like resb-matnr ,
? ? werks like resb-werks,
? ? lgort like resb-lgort,
? ? ARBPL like CRHD-ARBPL ,
? ? counts type int4,
? ? end of itab_arbpl.
? ? clear itab_arbpl.
? ? refresh itab_arbpl.
? ? LOOP AT selrecord where matnr= sumrecord-matnr and werks = sumrecord-werks and lgort =sumrecord-lgort.
? ???itab_arbpl-matnr = selrecord-matnr.
? ???itab_arbpl-werks = selrecord-werks.
? ???itab_arbpl-lgort = selrecord-lgort.
? ???itab_arbpl-arbpl = selrecord-arbpl.
? ???itab_arbpl-counts = 1.
? ???collect itab_arbpl.
? ???clear itab_arbpl.
? ? ENDLOOP.
? ? sort itab_arbpl BY countsDESCENDING .
? ??? LOOP AT itab_arbpl .
? ???? ? if sy-tabix= 1.
? ?????????sumrecord-arbpl= itab_arbpl-arbpl.
? ???? ?endif.
? ??? endloop.
? ? modify sumrecord.
??ENDLOOP.
*定義采購相關內表,獲取采購數量
??DATA: BEGIN OF cgsltab occurs0,
? ?????MATNR LIKEEKPO-MATNR,
? ?????WERKS LIKEEKPO-WERKS,
? ?????LGORT LIKEEKPO-LGORT,
? ?????MENGE LIKEEKPO-MENGE,
? ?????EBELN LIKEEKPO-EBELN,
? ?????EBELP LIKEEKPO-EBELP,
? ?????BSART LIKEEKKO-BSART,
? ?????EINDT LIKEEKET-EINDT,
? ?????END OFcgsltab.
??DATA: cgsl typeEKPO-MENGE.
??LOOP AT sumrecord .
? ? clear cgsltab.
? ? refresh cgsltab.
? ?"@@因為非限制庫存只有一份,不能放在上面的collect中
? ? LOOP ATselrecord??WHERE MATNR =sumrecord-MATNR??and LGORT =sumrecord-LGORT .
? ???sumrecord-LABST = selrecord-LABST .
? ? ENDLOOP.
? ? sumrecord-MENGE =sumrecord-BDMNG - sumrecord-LABST .
*在這里求在途庫存量
*ZEB采購-101+102+122
? ? SELECT EBELN
? ???????EBELP
? ???????MATNR
? ???????WERKS
? ???????LGORT
? ???????MENGE
? ???????INTOCORRESPONDING FIELDS OF TABLE cgsltab?? "modify by hurd for index
? ? FROM EKPO
? ? WHERE MATNR =sumrecord-MATNR
? ???? ? and WERKS =sumrecord-WERKS
? ???? ? and LGORT =sumrecord-LGORT
? ???? ? and LOEKZ<>'L'??"已刪除標志
? ???? ? and ELIKZ<> 'X'. "已完成交貨
? ? LOOP AT cgsltab.
? ???SELECT SINGLE BSART INTO cgsltab-BSART
? ???FROM EKKO
? ???WHERE EBELN = cgsltab-EBELN.
? ???"@@1.3(2)排除非ZEB的采購訂單
? ???if cgsltab-BSART <>'ZEB'.
? ?????DELETEcgsltab index sy-tabix.
? ?????continue.
? ???ENDIF.
? ???"@@1.3(3)排除日期大于需求日期的
? ???SELECT SINGLE EINDT INTO cgsltab-EINDT
? ???FROM EKET
? ???WHERE EBELN = cgsltab-EBELN and EBELP =cgsltab-EBELP.
? ???if cgsltab-EINDT > P_BDTER.
? ?????deletecgsltab index sy-tabix.
? ?????continue.
? ???ENDIF.
? ???modify cgsltab.
? ???clear cgsltab.
? ? ENDLOOP.
"@@1.3(2)去除相應的收貨-101+102+122
? ? LOOP AT cgsltab.
? ???DATA: 101_sl type EKPO-MENGE,
? ?????? ?102_sl typeEKPO-MENGE,
? ?????? ?122_sl typeEKPO-MENGE.
? ???101_sl = 0.
? ???102_sl = 0.
? ???122_sl = 0.
? ???SELECT MENGE FROM EKBE
? ???INTO 101_sl
? ???WHERE EBELN = cgsltab-EBELN
? ???and EBELP = cgsltab-EBELP
? ???and BWART = '101'.
? ?????cgsltab-MENGE= cgsltab-MENGE - 101_sl .
? ???ENDSELECT.
? ???SELECT MENGE FROM EKBE
? ???INTO 102_sl
? ???WHERE EBELN = cgsltab-EBELN
? ???and EBELP = cgsltab-EBELP
? ???and BWART = '102'.
? ?????cgsltab-MENGE= cgsltab-MENGE + 102_sl .
? ???ENDSELECT.
? ???SELECT MENGE FROM EKBE
? ???INTO 122_sl
? ???WHERE EBELN = cgsltab-EBELN
? ???and EBELP = cgsltab-EBELP
? ???and BWART = '122'.
? ?????cgsltab-MENGE= cgsltab-MENGE + 122_sl .
? ???ENDSELECT.
? ???modify cgsltab.
? ???clear??cgsltab.
? ? ENDLOOP.
? ? "求得總采購數量
? ? cgsl = 0 .
? ? LOOP AT cgsltab.
? ???cgsl = cgsl + cgsltab-MENGE.
? ? ENDLOOP.
? ? "@@在途總量
? ? sumrecord-ZTKCL = cgsl.
? ? sumrecord-MENGE =sumrecord-MENGE - sumrecord-ZTKCL.
? ? "考慮將其圓整
? ? DATA: BSTRF likeMARC-BSTRF.
? ? SELECT SINGLE BSTRF FROMMARC
? ? INTO BSTRF
? ? WHERE MATNR = sumrecord-MATNRand WERKS = P_WERKS2.
? ? IF BSTRF is not initial andBSTRF <> 0.
? ???sumrecord-MENGE = CEIL( sumrecord-MENGE / BSTRF )* BSTRF .
? ? ENDIF.
? ? Modify sumrecord .
? ? clear sumrecord .
??ENDLOOP.
??LOOP AT sumrecord .
? ? if sumrecord-MENGE<= 0 .
? ???delete sumrecord index sy-tabix.
? ? endif.
??ENDLOOP.
??if sumrecord[] is initial.
? ? MESSAGE '線邊庫善有充足庫存無需配送!' TYPE'I'.
*????Leave toscreen 0.
? ? STOP.
*? ? CALL TRANSACTION 'ZSCPSDD'USING bdcdata MODE pmode UPDATE umode
*? ?????????????? ? MESSAGESINTO messtab.
??ELSE.
? ? perform displaying.
??endif. "end of sumrecord[] isinitial .
TOP-OF-PAGE.
END-OF-selection .
*??SET PF-STATUS'SCPSDD001'.
*AT USER-COMMAND.
*??PERFORM user_command.
*----------------------------------------------------------------------*
*? ?????Start newscreen? ???????????????????????????? ? *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
??CLEAR BDCDATA.
??BDCDATA-PROGRAM??=PROGRAM.
??BDCDATA-DYNPRO??= DYNPRO.
??BDCDATA-DYNBEGIN = 'X'.
??APPEND BDCDATA.
ENDFORM.? ?????????????"BDC_DYNPRO
*----------------------------------------------------------------------*
*? ?????Insertfield? ?????????????????????????????????*
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
*??IF FVAL<> NODATA.
??CLEAR BDCDATA..
??BDCDATA-FNAM = FNAM.
??BDCDATA-FVAL = FVAL.
??APPEND BDCDATA.
*??ENDIF.
ENDFORM.? ?????????????"BDC_FIELD
*perform close_group.
*perform close_dataset using dataset.
*&---------------------------------------------------------------------*
*&????Form??get_recordhead
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM get_recordhead .
??SHIFTP_EINDT??BY 3 PLACES LEFT.
??SHIFTP_WERKS??BY 3 PLACES LEFT.
*@@??SHIFTP_LGORT??BY 3 PLACES LEFT.
??SHIFT P_WERKS2 BY 3 PLACESLEFT.
*供應商需要從輸入P_WERKS2到供應商表中查詢
??SELECT SINGLE LIFNR
??INTO(recordhead-LIFNR_001)
??FROM LFA1
??WHERE LFA1~WERKS =P_WERKS2.
??if recordhead-LIFNR_001 isinitial .
? ? recordhead-LIFNR_001 ='P1800' .
??endif.
??recordhead-BSART_002 ='ZEB'.
??recordhead-BEDAT_003 = sy-datum.
??recordhead-EKORG_004 = '2000'.
??recordhead-EKGRP_005 = 'F01'.
??recordhead-EEIND_006 = P_EINDT.
??recordhead-LPEIN_007 = 'T'.
??recordhead-WERKS_008 = P_WERKS.
??recordhead-LGORT_009 =''."@@去掉P_LGORT .
ENDFORM.? ?????????????"get_recordhead
*&---------------------------------------------------------------------*
*&????Form??get_record
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM get_record .
??SHIFT P_BDTER BY 3 PLACESLEFT.
??DATA:SOBSL LIKEMARC-SOBSL.
??DATA: SFPS(1).
*@@(11)發貨工廠的特殊采購類
??DATA: FHGC(4),TSCGL(2).
*SHIFT??P_WERKS2 BY 3 PLACESLEFT.
??FHGC = P_WERKS2.
??CONDENSE FHGC.
*-----------------modify by hurd------
??case FHGC.
??when '1910'.
??TSCGL=??'61'.
??when '1920'.
??TSCGL=??'62'.
??when '2100'.
? ? TSCGL=??'63'.
??when '3100'.
? ? TSCGL=??'65'.
??when '1800'.
? ? TSCGL=??'66'.
??when '1200'.
? ? TSCGL=??'67'.
??when '1100'.
? ? TSCGL=??'68'.
??when '5100'.
? ? TSCGL=??'81'.
??endcase.
*-------------------------------------
*??IF??FHGC= '1910'.
*? ? TSCGL=??'61'.
*??ENDIF.
*??IF FHGC = '1920'.
*? ? TSCGL=??'62'.
*??ENDIF .
*??IF??FHGC= '2100'.
*? ? TSCGL=??'63'.
*??ENDIF .
*??IF??FHGC= '3100'.
*? ? TSCGL=??'65'.
*??ENDIF .
*??IF??FHGC= '1800'.
*? ? TSCGL=??'66'.
*??ENDIF .
*??IF??FHGC= '1200'.
*? ? TSCGL=??'67'.
*??ENDIF.
*??IF??FHGC= '1100'.
*? ? TSCGL=??'68'.
*??ENDIF.
*??IF??FHGC= '5100'.
*? ? TSCGL=??'81'.
*??ENDIF.
??DATA: isappend(1),
? ?????appendcountstype i.
??appendcounts = 0.
*??SELECT??RSNUMRSPOS MATNR BDMNG BDTER WERKS LGORT SORTF AUFNR AUFPL APLZL FROMRESB
*??INTO(record-RSNUM,record-RSPOS,record-MATNR,record-BDMNG,record-BDTER,
*? ?????record-WERKS,record-LGORT,SFPS,record-AUFNR,record-AUFPL,record-APLZL)
??SELECT??RSNUM
? ???? ? RSPOS
? ???? ? MATNR
? ???? ? WERKS
? ???? ? LGORT
? ???? ? BDMNG
? ???? ? BDTER
? ???? ? AUFNR
? ???? ? SORTF
? ???? ? AUFPL
? ???? ? APLZL
? ???? ? FROMRESB
??INTO(record-RSNUM,record-RSPOS,record-MATNR,record-WERKS,record-LGORT,record-BDMNG,
? ?????record-BDTER,record-AUFNR,SFPS,record-AUFPL,record-APLZL)??"modify by hurd??for index
*UP TO??P_SCSL ROWS"這里要用計數器
??where XLOEK = ''"@@(1)刪除標志
? ???? ? and KZEAR ='' "@@(2)發貨完成標志
? ???? ? and DUMPS ='' "@@去除虛擬件
? ???? ? and BDART ='AR' "@@20061114修改預留類型:OrdRes
? ???? ? and WERKSIN P_WERKS "@@(3)收貨工廠
? ???? ? and LGORTIN P_LGORT "@@(4) 收貨線邊庫
? ???? ? and AUFNRin P_AUFNR "@@(5) 生產訂單號
? ???? ? and BDTER<= P_BDTER "@@ (6) 需求日期,去生產訂單找基本開始日期GSTRP
? ???? ?"@@(7)物料組在下面刪掉
? ???? ? and MATNRin P_MATNR . "@@(8)物料號
isappend = 'Y'.
? ? "@@@判斷排序字段
*? ? SELECT SINGLE SORTF FROMRESB INTO SFPS
*? ???WHERE RSNUM = record-RSNUM and MATNR =record-MATNR.
? ? IF P_PS = 'X'.
? ???IF SFPS = 'N'.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? IF P_FPS = 'X'.
? ???IF SFPS <>'N'.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? "@@@判斷物料組
? ? IF P_MATKL IS NOTinitial.
? ???DATA: MATKL LIKE MARA-MATKL.
? ???SELECT SINGLE MATKL FROM MARA
? ???INTO MATKL
? ???WHERE MATNR = record-MATNR.
? ???IF MATKL NOTIN??P_MATKL.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? "@@(9)收貨工廠的特殊采購類
? ?"@@061027:如果特殊采購類為空,則允許本工廠到本工廠
? ? SELECT SINGLE SOBSL FROMMARC
? ? INTO SOBSL
? ? WHERE MATNR = record-MATNRand WERKS in P_WERKS.
? ? IF SOBSL<> TSCGL .
? ???IF SOBSL is not initial or P_WERKS<> P_WERKS2.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? DATA: FHCCDD(4).
? ? DATA: BESKZ likemarc-beskz,
? ???? ? LGFSB likemarc-lgfsb,
? ???? ? LGPRO likemarc-LGPRO.
? ? "@@(11)發貨工廠的特殊采購類20070709常進強要求修改
? ? SELECT SINGLE BESKZ LGFSBLGPRO FROM MARC
? ?INTO??(BESKZ,LGFSB,LGPRO)
? ? WHERE MATNR = record-MATNRand WERKS = FHGC.
? ? if BESKZ = 'F'.
? ???FHCCDD = LGFSB.
? ? elseif BESKZ = 'E'.
? ???FHCCDD = LGPRO.
? ? endif.
? ? "@@(12)MARC-LGFSB IN'發貨存儲地點‘
? ? IF P_LGFSB is notinitial.
? ???IF FHCCDD NOT IN P_LGFSB.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
**在途量不在這里考慮,而是對選擇的物料進行按庫位匯總后,再考慮
**在這里獲得工作中心。
? ? DATA: PLNNR likeAFVC-PLNNR,
? ???? ? ARBID likeAFVC-ARBID,
? ???? ? ARBPL likeCRHD-ARBPL.
? ? CLEAR PLNNR. CLEARARBID.CLEAR ARBPL.
*? ? select single PLNNR fromcaufv
*? ? into PLNNR
*? ? where aufnr =record-aufnr.
? ? select single ARBID fromafvc
? ? into ARBID
? ? where AUFPL = record-AUFPLand APLZL = record-APLZL.
? ? select single arbpl fromcrhd
? ? into ARBPL
? ? where OBJID = ARBID and OBJTY= 'A'.
? ? record-ARBPL = ARBPL.
? ? IF isappend = 'N'.
? ???continue.
? ? ENDIF.
? ? "最后的加入
? ? IF isappend = 'Y'.
? ???append record.
? ???appendcounts = appendcounts + 1.
? ? ENDIF.
? ?clear??record.
??ENDSELECT.
??if record[] is initial .
? ? MESSAGE '沒有查詢到數據' TYPE'I'.
? ? STOP.
??endif.
??clear record.
??loop at record.
? ? SELECT SINGLE MAKTX FROMMAKT
? ???INTO record-MAKTX
? ???WHERE MATNR = record-MATNR .
? ? SELECT SINGLE LABST FROMMARD
? ???INTO record-LABST
? ???WHERE WERKS = record-WERKSand??LGORT = record-LGORT
? ?????? ?and MATNR =record-MATNR .
? ? record-MENGE = record-BDMNG -record-LABST .
? ? MODIFY record.
??endloop.
??SORT record BY RSNUMASCENDING.
??IF record[] IS INITIAL.
? ? MESSAGE '沒有查詢到數據' TYPE'I'.
*? ? CALL TRANSACTION 'ZSCPSDD'USING bdcdata MODE pmode UPDATE umode
*? ?????????????? ? MESSAGESINTO messtab.
? ? STOP.
??ENDIF.
ENDFORM.? ?????????????"get_record
*&---------------------------------------------------------------------*
*&????Form??output
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM output .
if sy-subrc <> 0. exit. endif.
??performbdc_dynpro? ???using 'SAPMM06E' '0100'.
??performbdc_field? ??? using 'BDC_CURSOR'
? ?????????????????????'RM06E-LGORT'.
??performbdc_field? ??? using 'BDC_OKCODE'
? ?????????????????????'=AB'.
??performbdc_field? ??? using 'EKKO-LIFNR'
? ?????????????????????recordhead-LIFNR_001."供應商帳戶號: P1800
??performbdc_field? ??? using 'RM06E-BSART'
? ?????????????????????recordhead-BSART_002."訂單類型(采購):ZEB
??performbdc_field? ??? using 'RM06E-BEDAT'
? ?????????????????????recordhead-BEDAT_003."采購訂單日期:sy-datum
??performbdc_field? ??? using 'EKKO-EKORG'
? ?????????????????????recordhead-EKORG_004."采購組織:2000
??performbdc_field? ??? using 'EKKO-EKGRP'
? ?????????????????????recordhead-EKGRP_005.??? ?"采購組:F01
??performbdc_field? ??? using 'RM06E-EEIND'
? ?????????????????????recordhead-EEIND_006."交貨日期:P_EINDT
??performbdc_field? ??? using 'RM06E-LPEIN'
? ?????????????????????recordhead-LPEIN_007."交貨日的類別:T
??performbdc_field? ??? using 'RM06E-WERKS'
? ?????????????????????recordhead-WERKS_008."工廠:P_WERKS
*因交貨地點多個,所以需要屏蔽掉,并在后面進行改動
??performbdc_field? ??? using 'RM06E-LGORT'
? ?????????????????????recordhead-LGORT_009."庫存地點:P_LGORT,實際為空
??DATA: counts type i ,
? ?????tabcountstype i.
??counts = 1 .
??tabcounts = 0 .
??Loop At sumrecord where chkid ='X'.
? ? tabcounts = sy-tabix .
??endloop.
??DATA:countchar(4)??,
? ?????tabcountchar(4)??,
? ?????totalparam(20)type cVALUE??'EKPO-MENGE('.
??tabcountchar = tabcounts.
??condense tabcountchar.
??if tabcounts <10 .
? ? CONCATENATE totalparam '0'tabcountchar ')' INTO totalparam .
??else .
? ? CONCATENATEtotalparam??tabcountchar ')' INTOtotalparam .
??endif .
??performbdc_dynpro? ???using 'SAPMM06E' '0120'.
??performbdc_field? ??? using 'BDC_CURSOR'
? ?????????????????????totalparam.
??performbdc_field? ??? using 'BDC_OKCODE'
? ?????????????????????'=BU'.
??DATA: param1(20) type c VALUE'EKPO-EMATN(',
? ?????param2(20)type c VALUE 'EKPO-MENGE(',
? ?????param3(30)type c VALUE 'EKPO-LGORT(',"@@增加倉庫
? ?????data(13) typec VALUE ' '.
??loop at sumrecord where chkid ='X'.
? ? param1 = 'EKPO-EMATN('.
? ? countchar = counts.
? ? condense countchar.
? ? if counts < 10.
? ???CONCATENATE param1 '0' countchar ')' INTO param1.
? ? else .
? ???CONCATENATEparam1??countchar ')' INTO param1.
? ? endif .
? ? performbdc_field? ??? using param1
? ???????????????????? ?sumrecord-MATNR. "物料號碼
? ? counts = counts + 1 .
??ENDLOOP.
??counts = 1.
??loop at sumrecord where chkid ='X'.
? ? param2 = 'EKPO-MENGE('.
? ? data = ' '.
? ? countchar = counts.
? ? condense countchar.
? ? if counts < 10.
? ???CONCATENATE param2 '0' countchar ')' INTO param2.
? ? else .
? ???CONCATENATEparam2??countchar ')' INTO param2.
? ? endif .
? ? data = sumrecord-MENGE.
? ? performbdc_field? ??? using param2
? ???????????????????? ? data ."采購訂單數量
? ? counts = counts + 1 .
??ENDLOOP.
??counts = 1.
??loop at sumrecord where chkid ='X'.
? ? param3 = 'EKPO-LGORT('.
? ? countchar = counts.
? ? condense countchar.
? ? if counts < 10.
? ???CONCATENATE param3 '0' countchar ')' INTO param3.
? ? else .
? ???CONCATENATEparam3??countchar ')' INTO param3.
? ? endif ..
? ? performbdc_field? ??? using param3
? ???????????????????? ?sumrecord-LGORT . "采購訂單數量
? ? counts = counts + 1 .
??ENDLOOP.
??performbdc_dynpro? ???using 'SAPLSPO1' '0300'.
??performbdc_field? ??? using 'BDC_OKCODE'
? ?????????????????????'=YES'.
??CALL TRANSACTION 'ME21' USINGbdcdata MODE pmode UPDATE umode
? ?????????????? ? MESSAGESINTO messtab.
??DATA issuccess(1) TYPE C.
??issuccess = 'N'.
??LOOP AT messtab.
? ? issuccess =messtab-MSGTYP.
??ENDLOOP.
??if issuccess = 'S' .
? ? perform wtodata.
??endif.
??SET SCREEN 0.
??LEAVE SCREEN.
ENDFORM.? ?????????????"output
**&---------------------------------------------------------------------*
**&????Form??USER_COMMAND
**&---------------------------------------------------------------------*
**? ??? text
**----------------------------------------------------------------------*
**? ???-->UCOMM??? ?text
**? ???-->ENDFORM?? text
**----------------------------------------------------------------------*
*form USER_COMMAND .
*??CASE sy-ucomm.
*? ? WHEN 'GEN'.
*? ???perform bapioutput.
*??ENDCASE.
*ENDFORM .? ?????????????"USER_COMMAND
*&---------------------------------------------------------------------*
*&????Form??wtodata
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM wtodata .
??DATA: indatalike??ZSCPSDD.
??loop at selrecord .
? ? indata-RSNUM =selrecord-RSNUM .
? ? indata-MATNR =selrecord-MATNR .
? ? modify ZSCPSDD fromindata.
*????append indata.
*????clear indata.
??endloop.
*? ??? insert into ZSCPSDD
*????from TABLEindata.
ENDFORM.? ?????????????"wtodata
*&------------------------------------------------------------*
*&????Form??displaying
*&------------------------------------------------------------*
*? ??? text
*-------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*-------------------------------------------------------------*
FORM displaying.
??TYPE-POOLS slis.
??DATA: ws_fieldcat TYPEslis_t_fieldcat_alv WITH HEADER LINE,
? ?????ws_fieldgroups_tabTYPE slis_t_sp_group_alv,
? ?????ws_layout????? ? TYPEslis_layout_alv,
? ?????ws_sortfields_tab??TYPEslis_t_sortinfo_alv WITH HEADER LINE,
? ?????ws_events????? ? TYPEslis_t_event.
??DATA: v_repid LIKEsy-repid.
??DATA: nn TYPE i VALUE 0.
??DATA: title TYPElvc_title.
??SORT sumrecord BY matnr .
??DEFINE hout.
? ? nn = nn + 1.
? ?ws_fieldcat-tabname? ?='SUMRECORD'.
? ? ws_fieldcat-fieldname ='&1'.
? ? ws_fieldcat-seltext_m=??&2.
? ?ws_fieldcat-col_pos??=??nn.
? ? ws_fieldcat-outputlen=??&3.
*? ?ws_fieldcat-datatype??='&4'.
? ?ws_fieldcat-do_sum? ? ='&4'.
? ?ws_fieldcat-lzero????= 'X'.
? ? append ws_fieldcat.
? ? clear ws_fieldcat.
??END-OF-DEFINITION.
*??hout ebeln????? ?'配送單號'????10 char''.
*??hout ebelp????? ?'項目'? ???? ?10 char''.
??hout matnr????? ?'物料號'? ??? 18? ?''.
??hout maktx????? ?'物料描述'????40??''.
??hout EEIND????? ?'交貨日期'????8??''.
*??hout werks????? ?'收貨工廠'????08 char''.
??hout lgort????? ?'交貨地點'? ??? 06? ?''.
??hout arbpl????? ?'工作中心'? ?????8? ?''.
??hout BDMNG????? ? '需求量' 13''.
??hout LABST????? ? '庫存量'13??''.
??hout ZTKCL????? ? '在途量'13??''.
??hout menge????? ? '配送數量'13? ?''.
*??hout KONNR????? ? '框架協議' 18char ''.
*??hout wamng????? ?'已配送量'????18 quan''.
*??hout chayi????? ?'配送差額'????18 quan''.
*??hout labst????? ?'現有庫存'????18 quan''.
*??hout insme????? ?'在檢庫存'????18 quan''.
*??houtprueflos? ??? '檢驗批號'????18 char''.
*??hout vbeln????? ?'交貨單號'????18 char''.
*??hout jyp_sl??????'進貨數量'????18 quan''.
*??hout jjfx_sl??????'緊急放行數量' 18quan ''.
*??hout mblnr????? ? '物料憑證編號' 12char ''.
*??hout zflag1??????'已檢驗收貨'? ?10char ''.
*??hout zflag2??????'已發貨過賬'? ?10char ''.
*
??MOVE '生成轉儲揀配單' TO title.
??ws_layout-zebra??????? ? ='X'.
??ws_layout-get_selinfos??? ?= ''.
??ws_layout-colwidth_optimize ='X'.
??ws_layout-detail_popup??? ?= 'X'.
??ws_layout-no_keyfix????? ?= 'X'.
*??WS_layout-colwidth_optimize ='X'.
*??WS_LAYOUT-totals_before_items= 'X'.
??ws_layout-box_fieldname????='CHKID'.
??v_repid = sy-repid.
??CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
? ? EXPORTING
? ???i_callback_program??? ? =v_repid
? ???i_callback_pf_status_set = 'MENU_SET'
? ???i_callback_user_command??='EXECUTE_COMMAND'
? ???is_layout????????? ? =ws_layout
? ???it_fieldcat??????????=ws_fieldcat[]
? ???it_special_groups??????=ws_fieldgroups_tab[]
? ???it_sort??????????? ?=ws_sortfields_tab[]
? ???it_events????????? ? =ws_events[]
? ???i_grid_title??????? ? =title
? ? TABLES
? ???t_outtab????????????=sumrecord
? ? EXCEPTIONS
? ???program_error??????? ?= 1
? ???OTHERS??????????? ? = 2.
ENDFORM.? ?????????????"displaying
*&---------------------------------------------------------------------*
*&????Form??menu_set
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*? ???-->RT_EXTAB??text
*----------------------------------------------------------------------*
FORM menu_set USING rt_extab TYPE slis_t_extab..
??SET PF-STATUS 'SCPSDD001'.
ENDFORM.? ?????????????"menu_set
*&---------------------------------------------------------------------*
*&????Form??execute_command
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*? ???-->R_UCOMM??? ?text
*? ???-->RS_SELFIELD??text
*----------------------------------------------------------------------*
FORM execute_command USING r_ucomm LIKE sy-ucomm
? ?????????????? ?rs_selfieldTYPE slis_selfield.
??CASE r_ucomm.
? ? WHEN 'GEN'.
*? ??? perform output.
*? ???clear msg .
? ???perform bapioutput.
*? ???MESSAGE msg type 'I'."msgtype .
? ? when'&IC1'.
? ???if not rs_selfield-value is initial.
? ?????casers_selfield-fieldname.
? ???? ? when'MATNR' OR 'MAKTX'??OR 'EEIND' OR'LGORT' OR 'ARBPL' OR 'BDMNG' OR 'LABST' OR 'ZTKCL' OR'MENGE'.
? ?????? ?clearmdezx.
? ?????? ?refreshmdezx.
? ?????? ?clearmdpsx.
? ?????? ?refreshmdpsx.
? ?????? ?clear mdsux.
? ?????? ?refreshmdsux.
? ?????? ?READ TABLEsumrecord INDEX rs_selfield-tabindex INTO sumrecord_wa.
? ?????? ?callfunction 'MD_STOCK_REQUIREMENTS_LIST_API'
? ?????????EXPORTING
? ???????? ? matnr =sumrecord_wa-matnr
? ???????? ? werks =sumrecord_wa-werks
? ?????????TABLES
? ???????? ? mdpsx =mdpsx
? ???????? ? mdezx =mdezx
? ???????? ? mdsux =mdsux.
? ?????? ?if sy-subrc<> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*? ???? ?WITHSY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
? ?????? ?endif.
? ?????? ?clearitab_mrp.
? ?????? ?refreshitab_mrp.
? ?????? ?LOOP ATrecord where matnr = sumrecord_wa-matnr and werks =sumrecord_wa-werks and lgort = sumrecord_wa-lgort.
? ?????????itab_mrp-RSNUM??=??record-RSNUM??.
? ?????????itab_mrp-RSPOS??=??record-RSPOS??.
? ?????????itab_mrp-MATNR??=??record-MATNR??.
? ?????????itab_mrp-MAKTX??=??record-MAKTX??.
? ?????????itab_mrp-BDMNG??=??record-BDMNG??.
? ?????????itab_mrp-BDTER??=??record-BDTER??.
? ?????????itab_mrp-LABST??=??record-LABST??.
? ?????????itab_mrp-MENGE??=??record-MENGE??.
? ?????????itab_mrp-WERKS??=??record-WERKS??.
? ?????????itab_mrp-LGORT??=??record-LGORT??.
? ?????????itab_mrp-AUFNR??=??record-AUFNR??.
? ?????????itab_mrp-GSTRP??=??record-GSTRP??.
? ?????????itab_mrp-ARBPL??=??record-ARBPL??.
? ?????????itab_mrp-AUFPL??=??record-AUFPL??.
? ?????????itab_mrp-APLZL??=??record-APLZL??.
? ?????????itab_mrp-DELB0????? ?=? ? 'OrdRes'.
*? ?????????select singlePLNBEZ from afko
*? ?????????intoitab_mrp-PLNBEZ
*? ?????????where AUFNR =itab_mrp-AUFNR.
? ?????????loop at mdpsxinto wa_mdpsx where DELKZ = 'AR' and DAT00 = itab_mrp-BDTER andMNG01 = itab_mrp-BDMNG
? ?????????and DEL12 =itab_mrp-AUFNR.
? ???????? ?itab_mrp-PLNBEZ??=wa_mdpsx-BAUGR.
? ?????????ENDLOOP.
? ?????????ifitab_mrp-PLNBEZ is initial.
? ???????? ?itab_mrp-PLNBEZ = itab_mrp-aufnr.
? ?????????endif.
? ?????????appenditab_mrp.
? ???????ENDLOOP.
LOOP AT ITAB_MRP(物料需求計劃).
? ???????????select singlePLNBEZ from afko
? ???????????intoitab_mrp-matnr
? ???????????where aufnr =itab_mrp-aufnr.
? ???????????select singlemaktx from makt
? ???????????intoitab_mrp-maktx
? ???????????where matnr =itab_mrp-matnr.
? ???????????modifyitab_mrp.
? ???????ENDLOOP.
? ?????? ?performdisplaying2.
? ?????endcase.
? ???endif.
??ENDCASE.
ENDFORM.? ?????????????"execute_command
*&---------------------------------------------------------------------*
*&????Form??bapioutput
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM bapioutput .
??DATA: begin of artab occurs0,
? ?????arbpl likecrhd-arbpl,
? ?????END OFartab.
??LOOP AT sumrecord where CHKID ='X'.
? ? artab-arbpl =sumrecord-arbpl.
? ? append artab.
??ENDLOOP.
??sort artab by arbpl.
??delete adjacent duplicates fromartab.
??LOOP AT artab.
? ? clear itab_poheader.
? ? clear itab_poheader[].
? ? clear itab_poheaderx.
? ? clear itab_poheaderx[].
? ? clear itab_poitems.
? ? clear itab_poitems[].
? ? clear itab_poitemx.
? ? clear itab_poitemx[].
? ? clear itab_itemsche.
? ? clear itab_itemsche[].
? ? clear itab_itemschex.
? ? clear itab_itemschex[].
? ? itab_poheader-doc_date=??sy-datum."P_EINDT."recordhead-EKORG_004."P_EINDT."P_BDTER."sy-datum.
? ? itab_poheader-creat_date =sy-datum.
? ? itab_poheader-doc_type =recordhead-BSART_002."'ZDB'."ZDB
*??itab_poheader-comp_code =BUKRS."'1001'.
*??itab_poheader-comp_code =bukrs."1001三一重工
? ? itab_poheader-purch_org =recordhead-EKORG_004."'1100'."采購組織
? ? itab_poheader-pur_group =recordhead-EKGRP_005."'F01'."采購組
? ? itab_poheader-vendor =recordhead-LIFNR_001."P_LIFNR ."供應商帳戶號
*??itab_poheader-currency ='RMB'.
*??itab_itemsche-
? ? APPEND itab_poheader.
? ? itab_poheaderx-doc_date ='X'.
? ? itab_poheaderx-doc_type ='X'.
*??itab_poheaderx-comp_code ='X'.
? ? itab_poheaderx-creat_date ='X'.
? ? itab_poheaderx-vendor ='X'.
? ? itab_poheaderx-purch_org ='X'.
? ? itab_poheaderx-pur_group ='X'.
*??itab_poheaderx-currency ='X'.
? ? APPEND itab_poheaderx.
*****LOOP
? ? DATA: po_item(5) typeN,
? ???? ? ps_item(4)type N.
? ? po_item = '10' .
? ? ps_item = '1'.
? ? LOOP AT sumrecord where CHKID= 'X' and arbpl = artab-arbpl.
? ???itab_poitems-po_item = po_item.
? ???itab_poitems-material = sumrecord-MATNR.
? ???itab_poitems-stge_loc = sumrecord-LGORT.
*??itab_poitems-gr_to_date =sy-datum.
? ???itab_poitems-plant = sumrecord-WERKS.
? ???itab_poitems-quantity = sumrecord-MENGE.
*??itab_poitems-agreement =sumrecord-KONNR.
*??itab_poitems-agmt_item =sumrecord-KTPNR .
? ???itab_poitems-tax_code = 'J1'.??????????????? ? "J1稅碼
? ???itab_poitems-trackingno = sumrecord-ARBPL.
? ???APPEND itab_poitems.
? ???itab_poitemx-po_item = po_item.
? ???itab_poitemx-material = 'X'.
? ???itab_poitemx-quantity = 'X'.
? ???itab_poitemx-gr_to_date = 'X'.
? ???itab_poitemx-plant = 'X'.
? ???itab_poitemx-stge_loc = 'X'.
? ???itab_poitemx-tax_code = 'X'.
*??itab_poitemx-agreement='X'.
*??itab_poitemx-agmt_item='X'.
? ???itab_poitemx-trackingno = 'X'.
? ???APPEND itab_poitemx.
? ???itab_itemsche-PO_ITEM = po_item.
? ???itab_itemsche-SCHED_LINE = ps_item.
*??itab_itemsche-DEL_DATCAT_EXT ='1'.
? ???itab_itemsche-DELIVERY_DATE =P_EINDT."P_EINDT."P_BDTER."sy-datum.
? ???itab_itemsche-QUANTITY = sumrecord-MENGE.
? ???APPEND itab_itemsche.
? ???itab_itemschex-PO_ITEM = po_item.
? ???itab_itemschex-SCHED_LINE = ps_item.
? ???itab_itemschex-PO_ITEMX = 'X'.
? ???itab_itemschex-SCHED_LINEX = 'X'.
*??itab_itemschex-DEL_DATCAT_EXT= 'X'.
? ???itab_itemschex-DELIVERY_DATE = 'X'.
? ???APPEND itab_itemschex.
? ???po_item = po_item + 10 .
? ???ps_item = ps_item + 1.
? ? ENDLOOP.
? ? perform create_po.
??ENDLOOP.
??IF instab[] is notinitial.
? ?insert??zdscdd??FROMTABLE??instab .
? ? commit work.
? ? clear instab[].
??ENDIF.
ENDFORM.? ?????????????"bapioutput
*&---------------------------------------------------------------------*
*&????Form??create_po
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM create_po .
??CALL FUNCTION'BAPI_PO_CREATE1'
? ? EXPORTING
? ???poheader? ? =itab_poheader
? ???poheaderx? ?=itab_poheaderx
? ? TABLES
? ???return??? ?=return
? ???poitem??? ?=itab_poitems
? ???poitemx????=itab_poitemx
? ???POSCHEDULE??=itab_itemsche
? ???poschedulex = itab_itemschex.
??CALL FUNCTION'BAPI_TRANSACTION_COMMIT'.
*??msgtype = 'S'.
??Loop at return where type = 'S'or type = 'E'.
*? ? msgtab-msg =return-message.
? ? concatenate return-messagereturn-MESSAGE_V1 return-MESSAGE_V2 return-MESSAGE_V3return-MESSAGE_V4 into msgtab-msg.
? ? msgtab-msgtype =return-type.
? ? message msgtab-msg type 'I'."return-type.
? ? IF return-type = 'S' andreturn-ID = '06' and return-Number = '017'.
? ???instab-ebeln = return-MESSAGE_V2.
? ???instab-werks = P_WERKS.
? ???instab-AEDAT = sy-datum.
? ???append instab.
? ? ENDIF.
??ENDLOOP.
*??IF msgtype = 'S'.
*? ? delete sumrecord where CHKID= 'X'.
*??ENDIF.
ENDFORM.? ?????????????"create_po
*&---------------------------------------------------------------------*
*&????Form??write_zlog
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
FORM write_zlog .
??data:wa_zlog type zlog.
??wa_zlog-zdate = sy-datum.
??wa_zlog-ztime = sy-uzeit.
??wa_zlog-USERNAME =sy-uname.
??wa_zlog-TCODE = sy-tcode.
??wa_zlog-PGMNA = sy-repid.
??insert into zlog valueswa_zlog.
ENDFORM.? ?????????????"write_zlog
*&------------------------------------------------------------*
*&????Form??displaying2
*&------------------------------------------------------------*
*? ??? text
*-------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*-------------------------------------------------------------*
FORM displaying2.
??TYPE-POOLS slis.
??DATA: ws_fieldcat TYPEslis_t_fieldcat_alv WITH HEADER LINE,
? ?????ws_fieldgroups_tabTYPE slis_t_sp_group_alv,
? ?????ws_layout????? ? TYPEslis_layout_alv,
? ?????ws_sortfields_tab??TYPEslis_t_sortinfo_alv WITH HEADER LINE,
? ?????ws_events????? ? TYPEslis_t_event.
??DATA: v_repid LIKEsy-repid.
??DATA: nn TYPE i VALUE 0.
??DATA: title TYPElvc_title.
??DEFINE hout.
? ? nn = nn + 1.
? ?ws_fieldcat-tabname? ?='ITAB_MRP(物料需求計劃)'.
? ? ws_fieldcat-fieldname ='&1'.
? ? ws_fieldcat-seltext_m=??&2.
? ?ws_fieldcat-col_pos??=??nn.
? ? ws_fieldcat-outputlen=??&3.
*? ?ws_fieldcat-datatype??='&4'.
? ?ws_fieldcat-do_sum? ? ='&4'.
? ?ws_fieldcat-lzero????= 'X'.
? ? append ws_fieldcat.
? ? clear ws_fieldcat.
??END-OF-DEFINITION.
??hout BDTER????? ?'訂單需求日期'? ??? 8? ?''.
??hout AUFNR????? ?'訂單號'????12??''.
??hout MATNR????? ?'訂單物料'????18??''.
??hout MAKTX????? ?'訂單物料描述'? ??? 40? ?''.
??hout DELB0????? ?'MRP(物料需求計劃)元素'??????6? ?''.
??hout PLNBEZ????? ?'MRP(物料需求計劃)元素數據' 18 ''.
??hout BDMNG????? ? '需求數量'13??''.
??hout LGORT????? ? '交貨地點' 4''.
??hout ARBPL????? ? '工作中心'13? ?''.
??MOVE 'MRP(物料需求計劃)元素' TOtitle.
??ws_layout-zebra??????? ? ='X'.
??ws_layout-get_selinfos??? ?= ''.
??ws_layout-colwidth_optimize ='X'.
??ws_layout-detail_popup??? ?= 'X'.
??ws_layout-no_keyfix????? ?= 'X'.
*??WS_layout-colwidth_optimize ='X'.
*??WS_LAYOUT-totals_before_items= 'X'.
*??ws_layout-box_fieldname????='CHKID'.
??v_repid = sy-repid.
??CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
? ? EXPORTING
? ???i_callback_program??? ? =v_repid
? ???i_callback_pf_status_set = 'MENU_SET'
? ???i_callback_user_command??='EXECUTE_COMMAND'
? ???is_layout????????? ? =ws_layout
? ???it_fieldcat??????????=ws_fieldcat[]
? ???it_special_groups??????=ws_fieldgroups_tab[]
? ???it_sort??????????? ?=ws_sortfields_tab[]
? ???it_events????????? ? =ws_events[]
? ???i_grid_title??????? ? =title
? ? TABLES
? ???t_outtab????????????=ITAB_MRP(物料需求計劃)
? ? EXCEPTIONS
? ???program_error??????? ?= 1
? ???OTHERS??????????? ? = 2.
ENDFORM.? ?????????????"displaying2
? ??? no standard page heading line-size 150.
*---------------------------生成轉儲揀配單的ABAP程序-------------------------------------------*
*? ?data definition
*----------------------------------------------------------------------*
type-pools: slis.
*? ??? Batchinputdata of single transaction
DATA:? ?BDCDATA LIKEBDCDATA? ? OCCURS 0 WITH HEADERLINE.
*? ??? messages of call transaction
DATA:? ?MESSTAB LIKE BDCMSGCOLLOCCURS 0 WITH HEADER LINE.
*? ??? error session opened (' ' or 'X')
DATA:? ?E_GROUP_OPENED.
*? ??? message texts
TABLES: RESB , AFPO ,AFKO, MARA ,EKET ,ZSCPSDD ,EKKO,MARC,ZDSCDD,zlog.
data: mdezx like mdez occurs 0.
data: wa_mdezx like lineof??mdezx.
data: mdpsx like mdps occurs 0.
data: wa_mdpsx like lineof??mdpsx.
data: mdsux like mdsu occurs 0.
DATA: begin of itab_mrp??OCCURS0,
? ? RSNUM like RESB-RSNUM ,"預留號#
? ? RSPOS like RESB-RSPOS ,"預留項目
? ? MATNR like RESB-MATNR ,"物料號碼#
? ? MAKTX like MAKT-MAKTX ,"物料描述#
? ? BDMNG like RESB-BDMNG ,"需求量#
? ? BDTER like RESB-BDTER ,"需求日期#
? ? LABST like MARD-LABST ,"庫存量
? ? MENGE like RESB-BDMNG ,"采購訂單數量,配送量
? ? WERKS like RESB-WERKS ,"@@新增工廠
? ? LGORT like RESB-LGORT ,"@@新增倉庫
? ? AUFNR like RESB-AUFNR ,"相關生產訂單
? ? GSTRP like AFKO-GSTRP ,"生產訂單基本開始時間
? ? ARBPL like CRHD-ARBPL ,"工作中心
? ? AUFPL like RESB-AUFPL ,"計劃工藝路線號
? ? APLZL like RESB-APLZL ,"計數器
? ? DELB0 like mdez-DELB0 ,"MRP(物料需求計劃)元素
? ? PLNBEZ like afko-PLNBEZ ,"MRP(物料需求計劃)數據
end of itab_mrp.
**調用BAPI所需要的內表
**參照ZTEST_BAPI_CREATE_PO
**************************
DATA:itab_poheader LIKE bapimepoheader OCCURS 0 WITH HEADERLINE,
itab_poheaderx LIKE bapimepoheaderx OCCURS 0 WITH HEADERLINE,
itab_poitems LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
itab_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
exppurchaseorder LIKE bapimepoheader-po_number,
itab_itemsche LIKEbapimeposchedule??OCCURS 0 WITHHEADER LINE,
itab_itemschex LIKE BAPIMEPOSCHEDULX??OCCURS 0 WITH HEADER LINE,
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF recordhead OCCURS 0,
????LIFNR_001like??EKKO-LIFNR,"供應商帳戶號1800
????BSART_002like??RM06E-BSART ,"訂單類型(采購):ZEB
????BEDAT_003like??RM06E-BEDAT,"采購訂單日期:sy-datum
????EKORG_004like??EKKO-EKORG ,"采購組織:2000
????EKGRP_005like??EKKO-EKGRP,? ?????????????????"采購組:F01
????EEIND_006like??RM06E-EEIND ,"交貨日期:P_EINDT
????LPEIN_007like??RM06E-LPEIN ,"交貨日的類別:T
????WERKS_008like??RM06E-WERKS ,"工廠:P_WERKS
????LGORT_009like??RM06E-LGORT,??"庫存地點:P_LGORT
????END OFrecordhead.
data: begin of record??OCCURS0,
? ?CHKID??TYPE c,
? ? RSNUM like RESB-RSNUM ,"預留號#
? ? RSPOS like RESB-RSPOS ,"預留項目
? ? MATNR like RESB-MATNR ,"物料號碼#
? ? MAKTX like MAKT-MAKTX ,"物料描述#
? ? BDMNG like RESB-BDMNG ,"需求量#
? ? BDTER like RESB-BDTER ,"需求日期#
? ? LABST like MARD-LABST ,"庫存量
? ? MENGE like RESB-BDMNG ,"采購訂單數量,配送量
? ? WERKS like RESB-WERKS ,"@@新增工廠
? ? LGORT like RESB-LGORT ,"@@新增倉庫
? ? AUFNR like RESB-AUFNR ,"相關生產訂單
? ? GSTRP like AFKO-GSTRP ,"生產訂單基本開始時間
? ? ARBPL like CRHD-ARBPL ,"工作中心
? ? AUFPL like RESB-AUFPL ,"計劃工藝路線號
? ? APLZL like RESB-APLZL ,"計數器
*? ? VORNR like RESB-VORNR ,"作業
*? ? PLNFL like RESB-PLNFL ,"序列
end of record.
DATA: recordline like LINE OF record.
*DATA : record LIKE TABLE OF ZSCPSDD001 WITH HEADER LINE.
*** End generated data section ***
DATA:selrecord like TABLE OF record WITH HEADER LINE.
DATA:instab like TABLE OF zdscdd WITH HEADER LINE.
DATA: pmode TYPE c VALUE 'E' ,
????umode TYPE cVALUE 'S'.
DATA: begin of sumrecord??OCCURS0,
? ? CHKID(1)??, "選擇
? ? MATNR like RESB-MATNR ,"物料號碼#
? ? MAKTX like MAKT-MAKTX ,"物料描述#
? ? EEIND like RM06E-EEIND,"交貨日期
? ? BDMNG like RESB-BDMNG ,"需求量#
? ? LABST like MARD-LABST ,"庫存量
? ? ZTKCL like MARD-LABST ,"在途庫存
? ? MENGE like RESB-BDMNG ,"采購訂單數量,配送量
? ? WERKS like RESB-WERKS ,"@@新增工廠
? ? LGORT like RESB-LGORT ,"@@新增倉庫
? ? ARBPL like CRHD-ARBPL ,"工作中心
? ? end of sumrecord .
DATA: sumrecord_wa like line of sumrecord.
DATA: begin of msgtab occurs 0,
? ???msg(255),
? ???msgtype(1),
? ???end of msgtab.
*DATA: msg(255),msgtype(1).
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE t01.
SELECT-OPTIONS: P_WERKS FOR RESB-WERKSOBLIGATORY??NO intervalsNO-EXTENSION."工廠
SELECT-OPTIONS: P_LGORT FOR RESB-LGORTOBLIGATORY??."線邊庫 NO intervalsNO-EXTENSION
SELECT-OPTIONS: P_AUFNR FORAFPO-AUFNR??."生產訂單號
SELECT-OPTIONS: P_BDTER FOR RESB-BDTEROBLIGATORY??NO intervalsNO-EXTENSION??."需求日期
SELECT-OPTIONS: P_MATKL FORMARA-MATKL??."物料組
SELECT-OPTIONS: P_MATNR FORRESB-MATNR??."物料號
SELECT-OPTIONS: P_EINDT FOR EKET-EINDT OBLIGATORY NO intervalsNO-EXTENSION DEFAULT sy-datum."交貨日期
PARAMETERS:????P_PSRADIOBUTTON GROUP PSBZ.
PARAMETERS:????P_FPSRADIOBUTTON GROUP PSBZ.
SELECTION-SCREEN: END OF BLOCK b1.
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE t02.
SELECT-OPTIONS: P_WERKS2 FOR MARC-WERKSOBLIGATORY??NO intervalsNO-EXTENSION."發貨工廠
SELECT-OPTIONS: P_LGFSB FOR MARC-LGFSB ."發貨存儲地點
SELECTION-SCREEN: END OF BLOCK b2.
*SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE t03.
*PARAMETERS: P_SCSL TYPE I DEFAULT '200' OBLIGATORY .
*SELECTION-SCREEN: END OF BLOCK b3.
*SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLEtext-001.
*PARAMETERS: pmode TYPE c DEFAULT 'N' OBLIGATORY.
*PARAMETERS: umode TYPE c DEFAULT 'A' OBLIGATORY.
*SELECTION-SCREEN: END OF BLOCK b2.
DATA: i_private TYPE slis_data_caller_exit,
? ???i_selfield TYPE slis_selfield,
? ???W_exit(1) TYPE c.
INITIALIZATION.
??t01 = '收貨信息'.
??t02 = '發貨信息'.
*??t03 = '輸出參數'.
start-of-selection.
??perform write_zlog.
??perform get_recordhead .
??perform get_record .
??LOOP AT record." 全部計數WHERECHKID = 'X'.
? ? selrecord-CHKID =record-CHKID .
? ? selrecord-RSNUM =record-RSNUM .
? ? selrecord-RSPOS =record-RSPOS .
? ? selrecord-MATNR =record-MATNR .
? ? selrecord-MAKTX =record-MAKTX .
? ? selrecord-BDMNG =record-BDMNG .
? ? selrecord-BDTER =record-BDTER .
? ? selrecord-LABST =record-LABST .
? ? selrecord-MENGE =record-MENGE .
? ? selrecord-WERKS =record-WERKS .
? ? selrecord-LGORT =record-LGORT .
? ? selrecord-AUFPL =record-AUFPL .
? ? selrecord-ARBPL =record-ARBPL .
? ? append selrecord .
? ? clear selrecord .
??ENDLOOP.
*SHIFT P_EINDT BY 3 PLACES LEFT.
??LOOP AT selrecord .
? ? DATA ARBPL2 likeCRHD-ARBPL.
? ? CLEAR ARBPL2.
? ? LOOP AT sumrecord where matnr= selrecord-matnr.
? ???ARBPL2 = sumrecord-ARBPL.
? ? ENDLOOP.
? ? sumrecord-MATNR =selrecord-MATNR .
? ? sumrecord-MAKTX =selrecord-MAKTX .
? ? sumrecord-EEIND =P_EINDT.
? ? sumrecord-BDMNG =selrecord-BDMNG .
? ? sumrecord-WERKS =selrecord-WERKS .
? ? sumrecord-LGORT =selrecord-LGORT .
? ? IF ARBPL2 is initial.
? ???sumrecord-ARBPL = selrecord-ARBPL.
? ? ELSE.
? ???sumrecord-ARBPL = ARBPL2.
? ? ENDIF.
? ? collect sumrecord .
? ? clear sumrecord .
??ENDLOOP.
??LOOP AT sumrecord.
? ? DATA: begin of itab_arbploccurs 0 ,
? ? matnr like resb-matnr ,
? ? werks like resb-werks,
? ? lgort like resb-lgort,
? ? ARBPL like CRHD-ARBPL ,
? ? counts type int4,
? ? end of itab_arbpl.
? ? clear itab_arbpl.
? ? refresh itab_arbpl.
? ? LOOP AT selrecord where matnr= sumrecord-matnr and werks = sumrecord-werks and lgort =sumrecord-lgort.
? ???itab_arbpl-matnr = selrecord-matnr.
? ???itab_arbpl-werks = selrecord-werks.
? ???itab_arbpl-lgort = selrecord-lgort.
? ???itab_arbpl-arbpl = selrecord-arbpl.
? ???itab_arbpl-counts = 1.
? ???collect itab_arbpl.
? ???clear itab_arbpl.
? ? ENDLOOP.
? ? sort itab_arbpl BY countsDESCENDING .
? ??? LOOP AT itab_arbpl .
? ???? ? if sy-tabix= 1.
? ?????????sumrecord-arbpl= itab_arbpl-arbpl.
? ???? ?endif.
? ??? endloop.
? ? modify sumrecord.
??ENDLOOP.
*定義采購相關內表,獲取采購數量
??DATA: BEGIN OF cgsltab occurs0,
? ?????MATNR LIKEEKPO-MATNR,
? ?????WERKS LIKEEKPO-WERKS,
? ?????LGORT LIKEEKPO-LGORT,
? ?????MENGE LIKEEKPO-MENGE,
? ?????EBELN LIKEEKPO-EBELN,
? ?????EBELP LIKEEKPO-EBELP,
? ?????BSART LIKEEKKO-BSART,
? ?????EINDT LIKEEKET-EINDT,
? ?????END OFcgsltab.
??DATA: cgsl typeEKPO-MENGE.
??LOOP AT sumrecord .
? ? clear cgsltab.
? ? refresh cgsltab.
? ?"@@因為非限制庫存只有一份,不能放在上面的collect中
? ? LOOP ATselrecord??WHERE MATNR =sumrecord-MATNR??and LGORT =sumrecord-LGORT .
? ???sumrecord-LABST = selrecord-LABST .
? ? ENDLOOP.
? ? sumrecord-MENGE =sumrecord-BDMNG - sumrecord-LABST .
*在這里求在途庫存量
*ZEB采購-101+102+122
? ? SELECT EBELN
? ???????EBELP
? ???????MATNR
? ???????WERKS
? ???????LGORT
? ???????MENGE
? ???????INTOCORRESPONDING FIELDS OF TABLE cgsltab?? "modify by hurd for index
? ? FROM EKPO
? ? WHERE MATNR =sumrecord-MATNR
? ???? ? and WERKS =sumrecord-WERKS
? ???? ? and LGORT =sumrecord-LGORT
? ???? ? and LOEKZ<>'L'??"已刪除標志
? ???? ? and ELIKZ<> 'X'. "已完成交貨
? ? LOOP AT cgsltab.
? ???SELECT SINGLE BSART INTO cgsltab-BSART
? ???FROM EKKO
? ???WHERE EBELN = cgsltab-EBELN.
? ???"@@1.3(2)排除非ZEB的采購訂單
? ???if cgsltab-BSART <>'ZEB'.
? ?????DELETEcgsltab index sy-tabix.
? ?????continue.
? ???ENDIF.
? ???"@@1.3(3)排除日期大于需求日期的
? ???SELECT SINGLE EINDT INTO cgsltab-EINDT
? ???FROM EKET
? ???WHERE EBELN = cgsltab-EBELN and EBELP =cgsltab-EBELP.
? ???if cgsltab-EINDT > P_BDTER.
? ?????deletecgsltab index sy-tabix.
? ?????continue.
? ???ENDIF.
? ???modify cgsltab.
? ???clear cgsltab.
? ? ENDLOOP.
"@@1.3(2)去除相應的收貨-101+102+122
? ? LOOP AT cgsltab.
? ???DATA: 101_sl type EKPO-MENGE,
? ?????? ?102_sl typeEKPO-MENGE,
? ?????? ?122_sl typeEKPO-MENGE.
? ???101_sl = 0.
? ???102_sl = 0.
? ???122_sl = 0.
? ???SELECT MENGE FROM EKBE
? ???INTO 101_sl
? ???WHERE EBELN = cgsltab-EBELN
? ???and EBELP = cgsltab-EBELP
? ???and BWART = '101'.
? ?????cgsltab-MENGE= cgsltab-MENGE - 101_sl .
? ???ENDSELECT.
? ???SELECT MENGE FROM EKBE
? ???INTO 102_sl
? ???WHERE EBELN = cgsltab-EBELN
? ???and EBELP = cgsltab-EBELP
? ???and BWART = '102'.
? ?????cgsltab-MENGE= cgsltab-MENGE + 102_sl .
? ???ENDSELECT.
? ???SELECT MENGE FROM EKBE
? ???INTO 122_sl
? ???WHERE EBELN = cgsltab-EBELN
? ???and EBELP = cgsltab-EBELP
? ???and BWART = '122'.
? ?????cgsltab-MENGE= cgsltab-MENGE + 122_sl .
? ???ENDSELECT.
? ???modify cgsltab.
? ???clear??cgsltab.
? ? ENDLOOP.
? ? "求得總采購數量
? ? cgsl = 0 .
? ? LOOP AT cgsltab.
? ???cgsl = cgsl + cgsltab-MENGE.
? ? ENDLOOP.
? ? "@@在途總量
? ? sumrecord-ZTKCL = cgsl.
? ? sumrecord-MENGE =sumrecord-MENGE - sumrecord-ZTKCL.
? ? "考慮將其圓整
? ? DATA: BSTRF likeMARC-BSTRF.
? ? SELECT SINGLE BSTRF FROMMARC
? ? INTO BSTRF
? ? WHERE MATNR = sumrecord-MATNRand WERKS = P_WERKS2.
? ? IF BSTRF is not initial andBSTRF <> 0.
? ???sumrecord-MENGE = CEIL( sumrecord-MENGE / BSTRF )* BSTRF .
? ? ENDIF.
? ? Modify sumrecord .
? ? clear sumrecord .
??ENDLOOP.
??LOOP AT sumrecord .
? ? if sumrecord-MENGE<= 0 .
? ???delete sumrecord index sy-tabix.
? ? endif.
??ENDLOOP.
??if sumrecord[] is initial.
? ? MESSAGE '線邊庫善有充足庫存無需配送!' TYPE'I'.
*????Leave toscreen 0.
? ? STOP.
*? ? CALL TRANSACTION 'ZSCPSDD'USING bdcdata MODE pmode UPDATE umode
*? ?????????????? ? MESSAGESINTO messtab.
??ELSE.
? ? perform displaying.
??endif. "end of sumrecord[] isinitial .
TOP-OF-PAGE.
END-OF-selection .
*??SET PF-STATUS'SCPSDD001'.
*AT USER-COMMAND.
*??PERFORM user_command.
*----------------------------------------------------------------------*
*? ?????Start newscreen? ???????????????????????????? ? *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
??CLEAR BDCDATA.
??BDCDATA-PROGRAM??=PROGRAM.
??BDCDATA-DYNPRO??= DYNPRO.
??BDCDATA-DYNBEGIN = 'X'.
??APPEND BDCDATA.
ENDFORM.? ?????????????"BDC_DYNPRO
*----------------------------------------------------------------------*
*? ?????Insertfield? ?????????????????????????????????*
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
*??IF FVAL<> NODATA.
??CLEAR BDCDATA..
??BDCDATA-FNAM = FNAM.
??BDCDATA-FVAL = FVAL.
??APPEND BDCDATA.
*??ENDIF.
ENDFORM.? ?????????????"BDC_FIELD
*perform close_group.
*perform close_dataset using dataset.
*&---------------------------------------------------------------------*
*&????Form??get_recordhead
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM get_recordhead .
??SHIFTP_EINDT??BY 3 PLACES LEFT.
??SHIFTP_WERKS??BY 3 PLACES LEFT.
*@@??SHIFTP_LGORT??BY 3 PLACES LEFT.
??SHIFT P_WERKS2 BY 3 PLACESLEFT.
*供應商需要從輸入P_WERKS2到供應商表中查詢
??SELECT SINGLE LIFNR
??INTO(recordhead-LIFNR_001)
??FROM LFA1
??WHERE LFA1~WERKS =P_WERKS2.
??if recordhead-LIFNR_001 isinitial .
? ? recordhead-LIFNR_001 ='P1800' .
??endif.
??recordhead-BSART_002 ='ZEB'.
??recordhead-BEDAT_003 = sy-datum.
??recordhead-EKORG_004 = '2000'.
??recordhead-EKGRP_005 = 'F01'.
??recordhead-EEIND_006 = P_EINDT.
??recordhead-LPEIN_007 = 'T'.
??recordhead-WERKS_008 = P_WERKS.
??recordhead-LGORT_009 =''."@@去掉P_LGORT .
ENDFORM.? ?????????????"get_recordhead
*&---------------------------------------------------------------------*
*&????Form??get_record
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM get_record .
??SHIFT P_BDTER BY 3 PLACESLEFT.
??DATA:SOBSL LIKEMARC-SOBSL.
??DATA: SFPS(1).
*@@(11)發貨工廠的特殊采購類
??DATA: FHGC(4),TSCGL(2).
*SHIFT??P_WERKS2 BY 3 PLACESLEFT.
??FHGC = P_WERKS2.
??CONDENSE FHGC.
*-----------------modify by hurd------
??case FHGC.
??when '1910'.
??TSCGL=??'61'.
??when '1920'.
??TSCGL=??'62'.
??when '2100'.
? ? TSCGL=??'63'.
??when '3100'.
? ? TSCGL=??'65'.
??when '1800'.
? ? TSCGL=??'66'.
??when '1200'.
? ? TSCGL=??'67'.
??when '1100'.
? ? TSCGL=??'68'.
??when '5100'.
? ? TSCGL=??'81'.
??endcase.
*-------------------------------------
*??IF??FHGC= '1910'.
*? ? TSCGL=??'61'.
*??ENDIF.
*??IF FHGC = '1920'.
*? ? TSCGL=??'62'.
*??ENDIF .
*??IF??FHGC= '2100'.
*? ? TSCGL=??'63'.
*??ENDIF .
*??IF??FHGC= '3100'.
*? ? TSCGL=??'65'.
*??ENDIF .
*??IF??FHGC= '1800'.
*? ? TSCGL=??'66'.
*??ENDIF .
*??IF??FHGC= '1200'.
*? ? TSCGL=??'67'.
*??ENDIF.
*??IF??FHGC= '1100'.
*? ? TSCGL=??'68'.
*??ENDIF.
*??IF??FHGC= '5100'.
*? ? TSCGL=??'81'.
*??ENDIF.
??DATA: isappend(1),
? ?????appendcountstype i.
??appendcounts = 0.
*??SELECT??RSNUMRSPOS MATNR BDMNG BDTER WERKS LGORT SORTF AUFNR AUFPL APLZL FROMRESB
*??INTO(record-RSNUM,record-RSPOS,record-MATNR,record-BDMNG,record-BDTER,
*? ?????record-WERKS,record-LGORT,SFPS,record-AUFNR,record-AUFPL,record-APLZL)
??SELECT??RSNUM
? ???? ? RSPOS
? ???? ? MATNR
? ???? ? WERKS
? ???? ? LGORT
? ???? ? BDMNG
? ???? ? BDTER
? ???? ? AUFNR
? ???? ? SORTF
? ???? ? AUFPL
? ???? ? APLZL
? ???? ? FROMRESB
??INTO(record-RSNUM,record-RSPOS,record-MATNR,record-WERKS,record-LGORT,record-BDMNG,
? ?????record-BDTER,record-AUFNR,SFPS,record-AUFPL,record-APLZL)??"modify by hurd??for index
*UP TO??P_SCSL ROWS"這里要用計數器
??where XLOEK = ''"@@(1)刪除標志
? ???? ? and KZEAR ='' "@@(2)發貨完成標志
? ???? ? and DUMPS ='' "@@去除虛擬件
? ???? ? and BDART ='AR' "@@20061114修改預留類型:OrdRes
? ???? ? and WERKSIN P_WERKS "@@(3)收貨工廠
? ???? ? and LGORTIN P_LGORT "@@(4) 收貨線邊庫
? ???? ? and AUFNRin P_AUFNR "@@(5) 生產訂單號
? ???? ? and BDTER<= P_BDTER "@@ (6) 需求日期,去生產訂單找基本開始日期GSTRP
? ???? ?"@@(7)物料組在下面刪掉
? ???? ? and MATNRin P_MATNR . "@@(8)物料號
isappend = 'Y'.
? ? "@@@判斷排序字段
*? ? SELECT SINGLE SORTF FROMRESB INTO SFPS
*? ???WHERE RSNUM = record-RSNUM and MATNR =record-MATNR.
? ? IF P_PS = 'X'.
? ???IF SFPS = 'N'.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? IF P_FPS = 'X'.
? ???IF SFPS <>'N'.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? "@@@判斷物料組
? ? IF P_MATKL IS NOTinitial.
? ???DATA: MATKL LIKE MARA-MATKL.
? ???SELECT SINGLE MATKL FROM MARA
? ???INTO MATKL
? ???WHERE MATNR = record-MATNR.
? ???IF MATKL NOTIN??P_MATKL.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? "@@(9)收貨工廠的特殊采購類
? ?"@@061027:如果特殊采購類為空,則允許本工廠到本工廠
? ? SELECT SINGLE SOBSL FROMMARC
? ? INTO SOBSL
? ? WHERE MATNR = record-MATNRand WERKS in P_WERKS.
? ? IF SOBSL<> TSCGL .
? ???IF SOBSL is not initial or P_WERKS<> P_WERKS2.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
? ? DATA: FHCCDD(4).
? ? DATA: BESKZ likemarc-beskz,
? ???? ? LGFSB likemarc-lgfsb,
? ???? ? LGPRO likemarc-LGPRO.
? ? "@@(11)發貨工廠的特殊采購類20070709常進強要求修改
? ? SELECT SINGLE BESKZ LGFSBLGPRO FROM MARC
? ?INTO??(BESKZ,LGFSB,LGPRO)
? ? WHERE MATNR = record-MATNRand WERKS = FHGC.
? ? if BESKZ = 'F'.
? ???FHCCDD = LGFSB.
? ? elseif BESKZ = 'E'.
? ???FHCCDD = LGPRO.
? ? endif.
? ? "@@(12)MARC-LGFSB IN'發貨存儲地點‘
? ? IF P_LGFSB is notinitial.
? ???IF FHCCDD NOT IN P_LGFSB.
? ?????isappend ='N'.
? ?????continue.
? ???ENDIF.
? ? ENDIF.
**在途量不在這里考慮,而是對選擇的物料進行按庫位匯總后,再考慮
**在這里獲得工作中心。
? ? DATA: PLNNR likeAFVC-PLNNR,
? ???? ? ARBID likeAFVC-ARBID,
? ???? ? ARBPL likeCRHD-ARBPL.
? ? CLEAR PLNNR. CLEARARBID.CLEAR ARBPL.
*? ? select single PLNNR fromcaufv
*? ? into PLNNR
*? ? where aufnr =record-aufnr.
? ? select single ARBID fromafvc
? ? into ARBID
? ? where AUFPL = record-AUFPLand APLZL = record-APLZL.
? ? select single arbpl fromcrhd
? ? into ARBPL
? ? where OBJID = ARBID and OBJTY= 'A'.
? ? record-ARBPL = ARBPL.
? ? IF isappend = 'N'.
? ???continue.
? ? ENDIF.
? ? "最后的加入
? ? IF isappend = 'Y'.
? ???append record.
? ???appendcounts = appendcounts + 1.
? ? ENDIF.
? ?clear??record.
??ENDSELECT.
??if record[] is initial .
? ? MESSAGE '沒有查詢到數據' TYPE'I'.
? ? STOP.
??endif.
??clear record.
??loop at record.
? ? SELECT SINGLE MAKTX FROMMAKT
? ???INTO record-MAKTX
? ???WHERE MATNR = record-MATNR .
? ? SELECT SINGLE LABST FROMMARD
? ???INTO record-LABST
? ???WHERE WERKS = record-WERKSand??LGORT = record-LGORT
? ?????? ?and MATNR =record-MATNR .
? ? record-MENGE = record-BDMNG -record-LABST .
? ? MODIFY record.
??endloop.
??SORT record BY RSNUMASCENDING.
??IF record[] IS INITIAL.
? ? MESSAGE '沒有查詢到數據' TYPE'I'.
*? ? CALL TRANSACTION 'ZSCPSDD'USING bdcdata MODE pmode UPDATE umode
*? ?????????????? ? MESSAGESINTO messtab.
? ? STOP.
??ENDIF.
ENDFORM.? ?????????????"get_record
*&---------------------------------------------------------------------*
*&????Form??output
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM output .
if sy-subrc <> 0. exit. endif.
??performbdc_dynpro? ???using 'SAPMM06E' '0100'.
??performbdc_field? ??? using 'BDC_CURSOR'
? ?????????????????????'RM06E-LGORT'.
??performbdc_field? ??? using 'BDC_OKCODE'
? ?????????????????????'=AB'.
??performbdc_field? ??? using 'EKKO-LIFNR'
? ?????????????????????recordhead-LIFNR_001."供應商帳戶號: P1800
??performbdc_field? ??? using 'RM06E-BSART'
? ?????????????????????recordhead-BSART_002."訂單類型(采購):ZEB
??performbdc_field? ??? using 'RM06E-BEDAT'
? ?????????????????????recordhead-BEDAT_003."采購訂單日期:sy-datum
??performbdc_field? ??? using 'EKKO-EKORG'
? ?????????????????????recordhead-EKORG_004."采購組織:2000
??performbdc_field? ??? using 'EKKO-EKGRP'
? ?????????????????????recordhead-EKGRP_005.??? ?"采購組:F01
??performbdc_field? ??? using 'RM06E-EEIND'
? ?????????????????????recordhead-EEIND_006."交貨日期:P_EINDT
??performbdc_field? ??? using 'RM06E-LPEIN'
? ?????????????????????recordhead-LPEIN_007."交貨日的類別:T
??performbdc_field? ??? using 'RM06E-WERKS'
? ?????????????????????recordhead-WERKS_008."工廠:P_WERKS
*因交貨地點多個,所以需要屏蔽掉,并在后面進行改動
??performbdc_field? ??? using 'RM06E-LGORT'
? ?????????????????????recordhead-LGORT_009."庫存地點:P_LGORT,實際為空
??DATA: counts type i ,
? ?????tabcountstype i.
??counts = 1 .
??tabcounts = 0 .
??Loop At sumrecord where chkid ='X'.
? ? tabcounts = sy-tabix .
??endloop.
??DATA:countchar(4)??,
? ?????tabcountchar(4)??,
? ?????totalparam(20)type cVALUE??'EKPO-MENGE('.
??tabcountchar = tabcounts.
??condense tabcountchar.
??if tabcounts <10 .
? ? CONCATENATE totalparam '0'tabcountchar ')' INTO totalparam .
??else .
? ? CONCATENATEtotalparam??tabcountchar ')' INTOtotalparam .
??endif .
??performbdc_dynpro? ???using 'SAPMM06E' '0120'.
??performbdc_field? ??? using 'BDC_CURSOR'
? ?????????????????????totalparam.
??performbdc_field? ??? using 'BDC_OKCODE'
? ?????????????????????'=BU'.
??DATA: param1(20) type c VALUE'EKPO-EMATN(',
? ?????param2(20)type c VALUE 'EKPO-MENGE(',
? ?????param3(30)type c VALUE 'EKPO-LGORT(',"@@增加倉庫
? ?????data(13) typec VALUE ' '.
??loop at sumrecord where chkid ='X'.
? ? param1 = 'EKPO-EMATN('.
? ? countchar = counts.
? ? condense countchar.
? ? if counts < 10.
? ???CONCATENATE param1 '0' countchar ')' INTO param1.
? ? else .
? ???CONCATENATEparam1??countchar ')' INTO param1.
? ? endif .
? ? performbdc_field? ??? using param1
? ???????????????????? ?sumrecord-MATNR. "物料號碼
? ? counts = counts + 1 .
??ENDLOOP.
??counts = 1.
??loop at sumrecord where chkid ='X'.
? ? param2 = 'EKPO-MENGE('.
? ? data = ' '.
? ? countchar = counts.
? ? condense countchar.
? ? if counts < 10.
? ???CONCATENATE param2 '0' countchar ')' INTO param2.
? ? else .
? ???CONCATENATEparam2??countchar ')' INTO param2.
? ? endif .
? ? data = sumrecord-MENGE.
? ? performbdc_field? ??? using param2
? ???????????????????? ? data ."采購訂單數量
? ? counts = counts + 1 .
??ENDLOOP.
??counts = 1.
??loop at sumrecord where chkid ='X'.
? ? param3 = 'EKPO-LGORT('.
? ? countchar = counts.
? ? condense countchar.
? ? if counts < 10.
? ???CONCATENATE param3 '0' countchar ')' INTO param3.
? ? else .
? ???CONCATENATEparam3??countchar ')' INTO param3.
? ? endif ..
? ? performbdc_field? ??? using param3
? ???????????????????? ?sumrecord-LGORT . "采購訂單數量
? ? counts = counts + 1 .
??ENDLOOP.
??performbdc_dynpro? ???using 'SAPLSPO1' '0300'.
??performbdc_field? ??? using 'BDC_OKCODE'
? ?????????????????????'=YES'.
??CALL TRANSACTION 'ME21' USINGbdcdata MODE pmode UPDATE umode
? ?????????????? ? MESSAGESINTO messtab.
??DATA issuccess(1) TYPE C.
??issuccess = 'N'.
??LOOP AT messtab.
? ? issuccess =messtab-MSGTYP.
??ENDLOOP.
??if issuccess = 'S' .
? ? perform wtodata.
??endif.
??SET SCREEN 0.
??LEAVE SCREEN.
ENDFORM.? ?????????????"output
**&---------------------------------------------------------------------*
**&????Form??USER_COMMAND
**&---------------------------------------------------------------------*
**? ??? text
**----------------------------------------------------------------------*
**? ???-->UCOMM??? ?text
**? ???-->ENDFORM?? text
**----------------------------------------------------------------------*
*form USER_COMMAND .
*??CASE sy-ucomm.
*? ? WHEN 'GEN'.
*? ???perform bapioutput.
*??ENDCASE.
*ENDFORM .? ?????????????"USER_COMMAND
*&---------------------------------------------------------------------*
*&????Form??wtodata
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM wtodata .
??DATA: indatalike??ZSCPSDD.
??loop at selrecord .
? ? indata-RSNUM =selrecord-RSNUM .
? ? indata-MATNR =selrecord-MATNR .
? ? modify ZSCPSDD fromindata.
*????append indata.
*????clear indata.
??endloop.
*? ??? insert into ZSCPSDD
*????from TABLEindata.
ENDFORM.? ?????????????"wtodata
*&------------------------------------------------------------*
*&????Form??displaying
*&------------------------------------------------------------*
*? ??? text
*-------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*-------------------------------------------------------------*
FORM displaying.
??TYPE-POOLS slis.
??DATA: ws_fieldcat TYPEslis_t_fieldcat_alv WITH HEADER LINE,
? ?????ws_fieldgroups_tabTYPE slis_t_sp_group_alv,
? ?????ws_layout????? ? TYPEslis_layout_alv,
? ?????ws_sortfields_tab??TYPEslis_t_sortinfo_alv WITH HEADER LINE,
? ?????ws_events????? ? TYPEslis_t_event.
??DATA: v_repid LIKEsy-repid.
??DATA: nn TYPE i VALUE 0.
??DATA: title TYPElvc_title.
??SORT sumrecord BY matnr .
??DEFINE hout.
? ? nn = nn + 1.
? ?ws_fieldcat-tabname? ?='SUMRECORD'.
? ? ws_fieldcat-fieldname ='&1'.
? ? ws_fieldcat-seltext_m=??&2.
? ?ws_fieldcat-col_pos??=??nn.
? ? ws_fieldcat-outputlen=??&3.
*? ?ws_fieldcat-datatype??='&4'.
? ?ws_fieldcat-do_sum? ? ='&4'.
? ?ws_fieldcat-lzero????= 'X'.
? ? append ws_fieldcat.
? ? clear ws_fieldcat.
??END-OF-DEFINITION.
*??hout ebeln????? ?'配送單號'????10 char''.
*??hout ebelp????? ?'項目'? ???? ?10 char''.
??hout matnr????? ?'物料號'? ??? 18? ?''.
??hout maktx????? ?'物料描述'????40??''.
??hout EEIND????? ?'交貨日期'????8??''.
*??hout werks????? ?'收貨工廠'????08 char''.
??hout lgort????? ?'交貨地點'? ??? 06? ?''.
??hout arbpl????? ?'工作中心'? ?????8? ?''.
??hout BDMNG????? ? '需求量' 13''.
??hout LABST????? ? '庫存量'13??''.
??hout ZTKCL????? ? '在途量'13??''.
??hout menge????? ? '配送數量'13? ?''.
*??hout KONNR????? ? '框架協議' 18char ''.
*??hout wamng????? ?'已配送量'????18 quan''.
*??hout chayi????? ?'配送差額'????18 quan''.
*??hout labst????? ?'現有庫存'????18 quan''.
*??hout insme????? ?'在檢庫存'????18 quan''.
*??houtprueflos? ??? '檢驗批號'????18 char''.
*??hout vbeln????? ?'交貨單號'????18 char''.
*??hout jyp_sl??????'進貨數量'????18 quan''.
*??hout jjfx_sl??????'緊急放行數量' 18quan ''.
*??hout mblnr????? ? '物料憑證編號' 12char ''.
*??hout zflag1??????'已檢驗收貨'? ?10char ''.
*??hout zflag2??????'已發貨過賬'? ?10char ''.
*
??MOVE '生成轉儲揀配單' TO title.
??ws_layout-zebra??????? ? ='X'.
??ws_layout-get_selinfos??? ?= ''.
??ws_layout-colwidth_optimize ='X'.
??ws_layout-detail_popup??? ?= 'X'.
??ws_layout-no_keyfix????? ?= 'X'.
*??WS_layout-colwidth_optimize ='X'.
*??WS_LAYOUT-totals_before_items= 'X'.
??ws_layout-box_fieldname????='CHKID'.
??v_repid = sy-repid.
??CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
? ? EXPORTING
? ???i_callback_program??? ? =v_repid
? ???i_callback_pf_status_set = 'MENU_SET'
? ???i_callback_user_command??='EXECUTE_COMMAND'
? ???is_layout????????? ? =ws_layout
? ???it_fieldcat??????????=ws_fieldcat[]
? ???it_special_groups??????=ws_fieldgroups_tab[]
? ???it_sort??????????? ?=ws_sortfields_tab[]
? ???it_events????????? ? =ws_events[]
? ???i_grid_title??????? ? =title
? ? TABLES
? ???t_outtab????????????=sumrecord
? ? EXCEPTIONS
? ???program_error??????? ?= 1
? ???OTHERS??????????? ? = 2.
ENDFORM.? ?????????????"displaying
*&---------------------------------------------------------------------*
*&????Form??menu_set
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*? ???-->RT_EXTAB??text
*----------------------------------------------------------------------*
FORM menu_set USING rt_extab TYPE slis_t_extab..
??SET PF-STATUS 'SCPSDD001'.
ENDFORM.? ?????????????"menu_set
*&---------------------------------------------------------------------*
*&????Form??execute_command
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*? ???-->R_UCOMM??? ?text
*? ???-->RS_SELFIELD??text
*----------------------------------------------------------------------*
FORM execute_command USING r_ucomm LIKE sy-ucomm
? ?????????????? ?rs_selfieldTYPE slis_selfield.
??CASE r_ucomm.
? ? WHEN 'GEN'.
*? ??? perform output.
*? ???clear msg .
? ???perform bapioutput.
*? ???MESSAGE msg type 'I'."msgtype .
? ? when'&IC1'.
? ???if not rs_selfield-value is initial.
? ?????casers_selfield-fieldname.
? ???? ? when'MATNR' OR 'MAKTX'??OR 'EEIND' OR'LGORT' OR 'ARBPL' OR 'BDMNG' OR 'LABST' OR 'ZTKCL' OR'MENGE'.
? ?????? ?clearmdezx.
? ?????? ?refreshmdezx.
? ?????? ?clearmdpsx.
? ?????? ?refreshmdpsx.
? ?????? ?clear mdsux.
? ?????? ?refreshmdsux.
? ?????? ?READ TABLEsumrecord INDEX rs_selfield-tabindex INTO sumrecord_wa.
? ?????? ?callfunction 'MD_STOCK_REQUIREMENTS_LIST_API'
? ?????????EXPORTING
? ???????? ? matnr =sumrecord_wa-matnr
? ???????? ? werks =sumrecord_wa-werks
? ?????????TABLES
? ???????? ? mdpsx =mdpsx
? ???????? ? mdezx =mdezx
? ???????? ? mdsux =mdsux.
? ?????? ?if sy-subrc<> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*? ???? ?WITHSY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
? ?????? ?endif.
? ?????? ?clearitab_mrp.
? ?????? ?refreshitab_mrp.
? ?????? ?LOOP ATrecord where matnr = sumrecord_wa-matnr and werks =sumrecord_wa-werks and lgort = sumrecord_wa-lgort.
? ?????????itab_mrp-RSNUM??=??record-RSNUM??.
? ?????????itab_mrp-RSPOS??=??record-RSPOS??.
? ?????????itab_mrp-MATNR??=??record-MATNR??.
? ?????????itab_mrp-MAKTX??=??record-MAKTX??.
? ?????????itab_mrp-BDMNG??=??record-BDMNG??.
? ?????????itab_mrp-BDTER??=??record-BDTER??.
? ?????????itab_mrp-LABST??=??record-LABST??.
? ?????????itab_mrp-MENGE??=??record-MENGE??.
? ?????????itab_mrp-WERKS??=??record-WERKS??.
? ?????????itab_mrp-LGORT??=??record-LGORT??.
? ?????????itab_mrp-AUFNR??=??record-AUFNR??.
? ?????????itab_mrp-GSTRP??=??record-GSTRP??.
? ?????????itab_mrp-ARBPL??=??record-ARBPL??.
? ?????????itab_mrp-AUFPL??=??record-AUFPL??.
? ?????????itab_mrp-APLZL??=??record-APLZL??.
? ?????????itab_mrp-DELB0????? ?=? ? 'OrdRes'.
*? ?????????select singlePLNBEZ from afko
*? ?????????intoitab_mrp-PLNBEZ
*? ?????????where AUFNR =itab_mrp-AUFNR.
? ?????????loop at mdpsxinto wa_mdpsx where DELKZ = 'AR' and DAT00 = itab_mrp-BDTER andMNG01 = itab_mrp-BDMNG
? ?????????and DEL12 =itab_mrp-AUFNR.
? ???????? ?itab_mrp-PLNBEZ??=wa_mdpsx-BAUGR.
? ?????????ENDLOOP.
? ?????????ifitab_mrp-PLNBEZ is initial.
? ???????? ?itab_mrp-PLNBEZ = itab_mrp-aufnr.
? ?????????endif.
? ?????????appenditab_mrp.
? ???????ENDLOOP.
LOOP AT ITAB_MRP(物料需求計劃).
? ???????????select singlePLNBEZ from afko
? ???????????intoitab_mrp-matnr
? ???????????where aufnr =itab_mrp-aufnr.
? ???????????select singlemaktx from makt
? ???????????intoitab_mrp-maktx
? ???????????where matnr =itab_mrp-matnr.
? ???????????modifyitab_mrp.
? ???????ENDLOOP.
? ?????? ?performdisplaying2.
? ?????endcase.
? ???endif.
??ENDCASE.
ENDFORM.? ?????????????"execute_command
*&---------------------------------------------------------------------*
*&????Form??bapioutput
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM bapioutput .
??DATA: begin of artab occurs0,
? ?????arbpl likecrhd-arbpl,
? ?????END OFartab.
??LOOP AT sumrecord where CHKID ='X'.
? ? artab-arbpl =sumrecord-arbpl.
? ? append artab.
??ENDLOOP.
??sort artab by arbpl.
??delete adjacent duplicates fromartab.
??LOOP AT artab.
? ? clear itab_poheader.
? ? clear itab_poheader[].
? ? clear itab_poheaderx.
? ? clear itab_poheaderx[].
? ? clear itab_poitems.
? ? clear itab_poitems[].
? ? clear itab_poitemx.
? ? clear itab_poitemx[].
? ? clear itab_itemsche.
? ? clear itab_itemsche[].
? ? clear itab_itemschex.
? ? clear itab_itemschex[].
? ? itab_poheader-doc_date=??sy-datum."P_EINDT."recordhead-EKORG_004."P_EINDT."P_BDTER."sy-datum.
? ? itab_poheader-creat_date =sy-datum.
? ? itab_poheader-doc_type =recordhead-BSART_002."'ZDB'."ZDB
*??itab_poheader-comp_code =BUKRS."'1001'.
*??itab_poheader-comp_code =bukrs."1001三一重工
? ? itab_poheader-purch_org =recordhead-EKORG_004."'1100'."采購組織
? ? itab_poheader-pur_group =recordhead-EKGRP_005."'F01'."采購組
? ? itab_poheader-vendor =recordhead-LIFNR_001."P_LIFNR ."供應商帳戶號
*??itab_poheader-currency ='RMB'.
*??itab_itemsche-
? ? APPEND itab_poheader.
? ? itab_poheaderx-doc_date ='X'.
? ? itab_poheaderx-doc_type ='X'.
*??itab_poheaderx-comp_code ='X'.
? ? itab_poheaderx-creat_date ='X'.
? ? itab_poheaderx-vendor ='X'.
? ? itab_poheaderx-purch_org ='X'.
? ? itab_poheaderx-pur_group ='X'.
*??itab_poheaderx-currency ='X'.
? ? APPEND itab_poheaderx.
*****LOOP
? ? DATA: po_item(5) typeN,
? ???? ? ps_item(4)type N.
? ? po_item = '10' .
? ? ps_item = '1'.
? ? LOOP AT sumrecord where CHKID= 'X' and arbpl = artab-arbpl.
? ???itab_poitems-po_item = po_item.
? ???itab_poitems-material = sumrecord-MATNR.
? ???itab_poitems-stge_loc = sumrecord-LGORT.
*??itab_poitems-gr_to_date =sy-datum.
? ???itab_poitems-plant = sumrecord-WERKS.
? ???itab_poitems-quantity = sumrecord-MENGE.
*??itab_poitems-agreement =sumrecord-KONNR.
*??itab_poitems-agmt_item =sumrecord-KTPNR .
? ???itab_poitems-tax_code = 'J1'.??????????????? ? "J1稅碼
? ???itab_poitems-trackingno = sumrecord-ARBPL.
? ???APPEND itab_poitems.
? ???itab_poitemx-po_item = po_item.
? ???itab_poitemx-material = 'X'.
? ???itab_poitemx-quantity = 'X'.
? ???itab_poitemx-gr_to_date = 'X'.
? ???itab_poitemx-plant = 'X'.
? ???itab_poitemx-stge_loc = 'X'.
? ???itab_poitemx-tax_code = 'X'.
*??itab_poitemx-agreement='X'.
*??itab_poitemx-agmt_item='X'.
? ???itab_poitemx-trackingno = 'X'.
? ???APPEND itab_poitemx.
? ???itab_itemsche-PO_ITEM = po_item.
? ???itab_itemsche-SCHED_LINE = ps_item.
*??itab_itemsche-DEL_DATCAT_EXT ='1'.
? ???itab_itemsche-DELIVERY_DATE =P_EINDT."P_EINDT."P_BDTER."sy-datum.
? ???itab_itemsche-QUANTITY = sumrecord-MENGE.
? ???APPEND itab_itemsche.
? ???itab_itemschex-PO_ITEM = po_item.
? ???itab_itemschex-SCHED_LINE = ps_item.
? ???itab_itemschex-PO_ITEMX = 'X'.
? ???itab_itemschex-SCHED_LINEX = 'X'.
*??itab_itemschex-DEL_DATCAT_EXT= 'X'.
? ???itab_itemschex-DELIVERY_DATE = 'X'.
? ???APPEND itab_itemschex.
? ???po_item = po_item + 10 .
? ???ps_item = ps_item + 1.
? ? ENDLOOP.
? ? perform create_po.
??ENDLOOP.
??IF instab[] is notinitial.
? ?insert??zdscdd??FROMTABLE??instab .
? ? commit work.
? ? clear instab[].
??ENDIF.
ENDFORM.? ?????????????"bapioutput
*&---------------------------------------------------------------------*
*&????Form??create_po
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*----------------------------------------------------------------------*
FORM create_po .
??CALL FUNCTION'BAPI_PO_CREATE1'
? ? EXPORTING
? ???poheader? ? =itab_poheader
? ???poheaderx? ?=itab_poheaderx
? ? TABLES
? ???return??? ?=return
? ???poitem??? ?=itab_poitems
? ???poitemx????=itab_poitemx
? ???POSCHEDULE??=itab_itemsche
? ???poschedulex = itab_itemschex.
??CALL FUNCTION'BAPI_TRANSACTION_COMMIT'.
*??msgtype = 'S'.
??Loop at return where type = 'S'or type = 'E'.
*? ? msgtab-msg =return-message.
? ? concatenate return-messagereturn-MESSAGE_V1 return-MESSAGE_V2 return-MESSAGE_V3return-MESSAGE_V4 into msgtab-msg.
? ? msgtab-msgtype =return-type.
? ? message msgtab-msg type 'I'."return-type.
? ? IF return-type = 'S' andreturn-ID = '06' and return-Number = '017'.
? ???instab-ebeln = return-MESSAGE_V2.
? ???instab-werks = P_WERKS.
? ???instab-AEDAT = sy-datum.
? ???append instab.
? ? ENDIF.
??ENDLOOP.
*??IF msgtype = 'S'.
*? ? delete sumrecord where CHKID= 'X'.
*??ENDIF.
ENDFORM.? ?????????????"create_po
*&---------------------------------------------------------------------*
*&????Form??write_zlog
*&---------------------------------------------------------------------*
*? ??? text
*----------------------------------------------------------------------*
FORM write_zlog .
??data:wa_zlog type zlog.
??wa_zlog-zdate = sy-datum.
??wa_zlog-ztime = sy-uzeit.
??wa_zlog-USERNAME =sy-uname.
??wa_zlog-TCODE = sy-tcode.
??wa_zlog-PGMNA = sy-repid.
??insert into zlog valueswa_zlog.
ENDFORM.? ?????????????"write_zlog
*&------------------------------------------------------------*
*&????Form??displaying2
*&------------------------------------------------------------*
*? ??? text
*-------------------------------------------------------------*
*??-->??p1??????text
*??<--??p2??????text
*-------------------------------------------------------------*
FORM displaying2.
??TYPE-POOLS slis.
??DATA: ws_fieldcat TYPEslis_t_fieldcat_alv WITH HEADER LINE,
? ?????ws_fieldgroups_tabTYPE slis_t_sp_group_alv,
? ?????ws_layout????? ? TYPEslis_layout_alv,
? ?????ws_sortfields_tab??TYPEslis_t_sortinfo_alv WITH HEADER LINE,
? ?????ws_events????? ? TYPEslis_t_event.
??DATA: v_repid LIKEsy-repid.
??DATA: nn TYPE i VALUE 0.
??DATA: title TYPElvc_title.
??DEFINE hout.
? ? nn = nn + 1.
? ?ws_fieldcat-tabname? ?='ITAB_MRP(物料需求計劃)'.
? ? ws_fieldcat-fieldname ='&1'.
? ? ws_fieldcat-seltext_m=??&2.
? ?ws_fieldcat-col_pos??=??nn.
? ? ws_fieldcat-outputlen=??&3.
*? ?ws_fieldcat-datatype??='&4'.
? ?ws_fieldcat-do_sum? ? ='&4'.
? ?ws_fieldcat-lzero????= 'X'.
? ? append ws_fieldcat.
? ? clear ws_fieldcat.
??END-OF-DEFINITION.
??hout BDTER????? ?'訂單需求日期'? ??? 8? ?''.
??hout AUFNR????? ?'訂單號'????12??''.
??hout MATNR????? ?'訂單物料'????18??''.
??hout MAKTX????? ?'訂單物料描述'? ??? 40? ?''.
??hout DELB0????? ?'MRP(物料需求計劃)元素'??????6? ?''.
??hout PLNBEZ????? ?'MRP(物料需求計劃)元素數據' 18 ''.
??hout BDMNG????? ? '需求數量'13??''.
??hout LGORT????? ? '交貨地點' 4''.
??hout ARBPL????? ? '工作中心'13? ?''.
??MOVE 'MRP(物料需求計劃)元素' TOtitle.
??ws_layout-zebra??????? ? ='X'.
??ws_layout-get_selinfos??? ?= ''.
??ws_layout-colwidth_optimize ='X'.
??ws_layout-detail_popup??? ?= 'X'.
??ws_layout-no_keyfix????? ?= 'X'.
*??WS_layout-colwidth_optimize ='X'.
*??WS_LAYOUT-totals_before_items= 'X'.
*??ws_layout-box_fieldname????='CHKID'.
??v_repid = sy-repid.
??CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
? ? EXPORTING
? ???i_callback_program??? ? =v_repid
? ???i_callback_pf_status_set = 'MENU_SET'
? ???i_callback_user_command??='EXECUTE_COMMAND'
? ???is_layout????????? ? =ws_layout
? ???it_fieldcat??????????=ws_fieldcat[]
? ???it_special_groups??????=ws_fieldgroups_tab[]
? ???it_sort??????????? ?=ws_sortfields_tab[]
? ???it_events????????? ? =ws_events[]
? ???i_grid_title??????? ? =title
? ? TABLES
? ???t_outtab????????????=ITAB_MRP(物料需求計劃)
? ? EXCEPTIONS
? ???program_error??????? ?= 1
? ???OTHERS??????????? ? = 2.
ENDFORM.? ?????????????"displaying2
總結
以上是生活随笔為你收集整理的生成转储拣配单的ABAP程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP search help (搜索
- 下一篇: 为什么要采购订单而不采购库存?