SAP BAPI_SALESORDER_CREATEFROMDAT2 创建销售订单
模板樣式
小心得:
1.添加抬頭條件時將BAPI表參數參數ORDER_CONDITIONS_IN中ITM_NUMBER設置為‘000000’即可。
REPORT ZSDC0004.
TABLES:VBPA,VBAK,MAKT,SSCRFIELDS.
*模板上傳結構 ZSDC0002_DRJG
TYPES:
BEGIN OF TY_S_ALV_PUBLIC,
- selected TYPE c,
SEL TYPE C, "選擇框
ICON TYPE C LENGTH 4, "圖案
MESSAGE TYPE STRING, "報錯 - status TYPE status_alv,
- locked TYPE c,
- celltab TYPE lvc_t_styl,
- colinfo TYPE lvc_t_scol,
- err TYPE c,
- msg TYPE string,
- done TYPE c,
END OF TY_S_ALV_PUBLIC.
TYPES:BEGIN OF TY_DR,
BS TYPE STRING, "標識相同的創一個銷售訂單
AUART TYPE STRING,
VKORG TYPE STRING,
VTWEG TYPE STRING,
SPART TYPE STRING,
VKBUR TYPE STRING,
VKGRP TYPE STRING,
KUNNR TYPE STRING,
BSTKD TYPE STRING,
ERDAT TYPE STRING,
MATNR TYPE STRING,
KWMENG TYPE STRING,
REQ_DATE TYPE STRING,
BATCH TYPE STRING,
LGORT TYPE STRING,
KSCHL TYPE STRING,
NETPR TYPE STRING,
END OF TY_DR.
TYPES: BEGIN OF TY_ALV.
INCLUDE TYPE TY_S_ALV_PUBLIC.
INCLUDE TYPE ZSDC0002_DRJG.
TYPES END OF TY_ALV.
DATA: GT_DR TYPE TABLE OF TY_DR,
GS_DR TYPE TY_DR,
GT_ALV TYPE TABLE OF TY_ALV,
GS_ALV TYPE TY_ALV,
GT_ALVB TYPE TABLE OF ZSDC0002_JOB.
DATA: GT_EXCEL_TAB TYPE STANDARD TABLE OF ALSMEX_TABLINE "ALSMEX_TABLINE是系統預先已定義的一個結構,表示具有 Excel 數據的表行
.
DATA: WA_FIELDCATALOG TYPE LVC_S_FCAT, "顯示數據列內表工作區域
IT_FIELDCATALOG TYPE LVC_T_FCAT, "顯示數據列內表
GS_LAYOUT TYPE LVC_S_LAYO.
*======================================================================*
- Constants *
*======================================================================*
CONSTANTS:
C_SEPERATOR TYPE CHAR1 VALUE ‘/’.
CONSTANTS:
C_OK LIKE SY-SUBRC VALUE 0,
C_NOT_OK LIKE SY-SUBRC VALUE 1,
GC_MSG_AEX TYPE STRING VALUE ‘AEX’,
C_MSG_ISW TYPE STRING VALUE ‘ISW’,
GC_MSG_S TYPE CHAR1 VALUE ‘S’,
GC_MSG_E TYPE CHAR1 VALUE ‘E’,
GC_MSG_W TYPE CHAR1 VALUE ‘W’,
GC_SEL_MODE TYPE CHAR1 VALUE ‘D’,
GC_CELLTAB TYPE CHAR20 VALUE ‘CELLTAB’,
GC_SAVE TYPE CHAR1 VALUE ‘A’,
GC_WIDTH_OPT TYPE CHAR1 VALUE ‘A’,
GC_CHAR_0 TYPE CHAR1 VALUE ‘0’,
GC_CHAR_M TYPE CHAR1 VALUE ‘M’,
GC_CHAR_K TYPE CHAR1 VALUE ‘K’,
GC_FDNAM_ERR TYPE CHAR30 VALUE ‘ERR’,
GC_FDNAM_STATUS TYPE CHAR30 VALUE ‘STATUS’,
GC_FDNAM_MATNR TYPE CHAR30 VALUE ‘MATNR’,
GC_FDNAM_IDNRK TYPE CHAR30 VALUE ‘IDNRK’,
GC_FCODE_UPD TYPE GUI_CODE VALUE ‘FC_UPD’,
GC_ALVSTATUS TYPE SLIS_FORMNAME VALUE ‘FRM_ALV_STATUS’,
GC_USERCOMMAND TYPE SLIS_FORMNAME VALUE ‘FRM_USER_COMMAND’.
DEFINE SET_RB01."創建宏(數據導入)
CLEAR wa_fieldcatalog.
wa_fieldcatalog-fieldname = &1.
wa_fieldcatalog-scrtext_m = &2.
IF wa_fieldcatalog-fieldname = ‘ICON’.
wa_fieldcatalog-icon = ‘X’.
ENDIF.
IF &1 EQ ‘SEL’.
wa_fieldcatalog-checkbox = ‘X’.
wa_fieldcatalog-edit = ‘X’.
ENDIF.
APPEND wa_fieldcatalog TO IT_FIELDCATALOG.
CLEAR wa_fieldcatalog.
END-OF-DEFINITION.
DEFINE SET_RB02."創建宏(數據查詢)
CLEAR wa_fieldcatalog.
wa_fieldcatalog-fieldname = &1.
wa_fieldcatalog-scrtext_m = &2.
APPEND wa_fieldcatalog TO IT_FIELDCATALOG.
CLEAR wa_fieldcatalog.
END-OF-DEFINITION.
*======================================================================*
- Begin of S E L E C T I O N - S C R E E N *
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK BLK_SCR WITH FRAME TITLE TEXT-T01.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
SELECTION-SCREEN COMMENT 1(31) TEXT-T02 FOR FIELD P_FILE MODIF ID M01.
PARAMETERS:
*SELECTION-SCREEN COMMENT (3) TEXT-t04 MODIF ID m01.
*SELECTION-SCREEN PUSHBUTTON (10) TEXT-t03 USER-COMMAND fc01 MODIF ID m01.
SELECTION-SCREEN END OF LINE.
*PARAMETERS:
- P_BEROW TYPE INT4 OBLIGATORY DEFAULT 2 MODIF ID M01,
- P_ENDROW TYPE INT4 OBLIGATORY DEFAULT 99999 MODIF ID M01.
- SELECT-OPTIONS:
** s_aennr FOR gs_selscr-aennr MODIF ID m02 , - S_KUNNR FOR VBPA-KUNNR MODIF ID M02,"售達方
- S_ERDAT FOR VBAK-ERDAT MODIF ID M02 , "銷售訂單日期
- S_MATNR FOR MAKT-MATNR MODIF ID M02 . "物料
**SELECTION-SCREEN COMMENT /3(79) TEXT-s00 MODIF ID m02 .
SELECTION-SCREEN END OF BLOCK BLK_SCR.
*SELECTION-SCREEN BEGIN OF BLOCK BLK_01 WITH FRAME TITLE TEXT-B01. - PARAMETERS:
- P_RB03 RADIOBUTTON GROUP RG2 DEFAULT ‘X’ USER-COMMAND RG2 MODIF ID M02,
- P_RB04 RADIOBUTTON GROUP RG2 MODIF ID M02.
*SELECTION-SCREEN END OF BLOCK BLK_01.
*SELECTION-SCREEN BEGIN OF BLOCK BLK_02 WITH FRAME TITLE TEXT-B02.
- PARAMETERS:
- P_RB01 RADIOBUTTON GROUP RG1 DEFAULT ‘X’ USER-COMMAND RG1,
- P_RB02 RADIOBUTTON GROUP RG1.
*SELECTION-SCREEN END OF BLOCK BLK_02.
DATA G_FUNCTION TYPE SMP_DYNTXT. "功能按鈕
CONSTANTS:
GC_TEMPLATE TYPE CHAR4 VALUE ‘模板下載’.
SELECTION-SCREEN FUNCTION KEY 1.
INITIALIZATION.
- 工具欄添加下載模板按鈕
CLEAR G_FUNCTION.
G_FUNCTION-ICON_ID = ICON_POSITION.
G_FUNCTION-ICON_TEXT = GC_TEMPLATE.
G_FUNCTION-QUICKINFO = GC_TEMPLATE.
SSCRFIELDS-FUNCTXT_01 = G_FUNCTION.
*AT SELECTION-SCREEN. - 下載數據導入模板
- CASE sscrfields-ucomm.
- WHEN ‘FC01’.
- MESSAGE '流批' TYPE 'I'.
- sscrfields-ucomm = ''.
- ENDCASE.
AT SELECTION-SCREEN OUTPUT.
*分組顯示屏幕
- PERFORM FRM_EVENT_AT_SEL_SCREEN_OUT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
"獲取文件路徑
PERFORM SUB_FILE_OPEN_DIALOG CHANGING P_FILE."打開文件瀏覽框
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN ‘FC01’.
SSCRFIELDS-UCOMM = ‘’.
PERFORM TEMP_EXCEL_GET USING ‘ZSDC0002’.
ENDCASE.
START-OF-SELECTION.
*取數
PERFORM FRM_GET_DATA.
*ALV顯示
PERFORM FRM_OUTPUT_DATA.
END-OF-SELECTION.
*FORM FRM_EVENT_AT_SEL_SCREEN_OUT .
- LOOP AT SCREEN.
- CASE ABAP_TRUE.
- WHEN P_RB01.
- IF SCREEN-GROUP1 EQ 'M02'.
- SCREEN-ACTIVE = 0.
- ENDIF.
** MODIFY SCREEN.
- WHEN P_RB02.
- IF SCREEN-GROUP1 EQ 'M01'.
- SCREEN-ACTIVE = 0.
- ENDIF.
** MODIFY SCREEN.
- WHEN OTHERS.
- ENDCASE.
- IF SCREEN-NAME = ‘S_ZZCMCC-LOW’ OR SCREEN-NAME = ‘S_MATNR-LOW’.
- SCREEN-REQUIRED = '2'.
- MODIFY SCREEN.
- ENDIF.
** CASE SCREEN-NAME .
** WHEN ‘P_RB01’ .
** SCREEN-OUTPUT = 0 .
** WHEN ‘P_RB02’ .
** SCREEN-OUTPUT = 0 .
** ENDCASE. - MODIFY SCREEN.
- ENDLOOP.
*ENDFORM.
&---------------------------------------------------------------------
*& Form sub_file_open_dialog
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& <-- PR_UPATH
&---------------------------------------------------------------------
FORM SUB_FILE_OPEN_DIALOG CHANGING PR_UPATH.
DATA: LT_FILE TYPE STANDARD TABLE OF FILE_TABLE,
LW_FILE TYPE FILE_TABLE,
LV_FILTER TYPE STRING,
LV_RC TYPE I.
LV_FILTER = ‘Excel files(.xlsx)|.xlsx|Excel files(.xls)|.xls’.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
- window_title =
- DEFAULT_EXTENSION =
- DEFAULT_FILENAME = FILE_FILTER = LV_FILTER
- initial_directory =
- MULTISELECTION =
CHANGING
FILE_TABLE = LT_FILE
RC = LV_RC - USER_ACTION =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0. - If open file with error
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE. - If open file successfully
READ TABLE LT_FILE INTO LW_FILE INDEX 1.
IF SY-SUBRC = 0 . - If user chooses a file
PR_UPATH = LW_FILE-FILENAME.
ENDIF.
ENDIF.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_GET_DATA
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM FRM_GET_DATA.
-
CASE ABAP_TRUE.
-
WHEN P_RB01."導入創建
PERFORM SUB_UPLOAD_FILE. "數據導入
PERFORM SUB_PROCESS_DATA ."數據整理
PERFORM FRM_CHECK_DATA ."數據檢測 -
WHEN P_RB02."查詢
- PERFORM FRM_SELECT . "取數
-
ENDCASE.
ENDFORM.
FORM SUB_UPLOAD_FILE ."上傳數據
DATA LV_PATH TYPE RLGRAP-FILENAME.
LV_PATH = P_FILE.
REFRESH GT_EXCEL_TAB.
CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
EXPORTING
FILENAME = LV_PATH
I_BEGIN_COL = 1
I_BEGIN_ROW = 1
I_END_COL = 99
I_END_ROW = 59999
TABLES
INTERN = GT_EXCEL_TAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
-
讀取EXCEL文件出錯
MESSAGE ‘讀取EXCEL文件出錯’ TYPE ‘S’ DISPLAY LIKE ‘E’.
STOP. -
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
FORM SUB_PROCESS_DATA ."數據轉換DATA:LW_EXCEL_TAB TYPE ALSMEX_TABLINE,
LV_FIELDNAME TYPE CHAR10. - LW_RECORD TYPE TY_RECORD.
FIELD-SYMBOLS: <FS_FIELD> TYPE ANY.
-
刪除第一個0001行數據(表頭)/ 0002行數據/0003行數據
LOOP AT GT_EXCEL_TAB INTO LW_EXCEL_TAB.
IF LW_EXCEL_TAB-ROW = ‘0001’ ."OR LW_EXCEL_TAB-ROW = ‘0002’ OR LW_EXCEL_TAB-ROW = ‘0003’ OR LW_EXCEL_TAB-ROW = ‘0004’.
DELETE TABLE GT_EXCEL_TAB FROM LW_EXCEL_TAB.
ELSE.
EXIT.
ENDIF.
ENDLOOP.IF GT_EXCEL_TAB[] IS INITIAL.
MESSAGE ‘上載文件為空,請檢查!’ TYPE ‘S’ DISPLAY LIKE ‘E’.
ENDIF.
*----------------------------------------------------------------------
LOOP AT GT_EXCEL_TAB INTO LW_EXCEL_TAB.
ASSIGN COMPONENT LW_EXCEL_TAB-COL OF STRUCTURE GS_DR TO <FS_FIELD>. IF <FS_FIELD> IS ASSIGNED.<FS_FIELD> = LW_EXCEL_TAB-VALUE.UNASSIGN <FS_FIELD>. ENDIF. AT END OF ROW.APPEND GS_DR TO GT_DR.CLEAR GS_DR. ENDAT.ENDLOOP.
MOVE-CORRESPONDING GT_DR TO GT_ALV .
WITH +DATA AS ( SELECT VKORG FROM @GT_ALV AS GT_ALV )
SELECT B~VKORG ,
B~WAERS
FROM TVKO AS B
INNER JOIN +DATA AS A ON A~VKORG = B~VKORG
INTO TABLE @DATA(GT_TVTO).
LOOP AT GT_ALV ASSIGNING FIELD-SYMBOL(<GS_ALV>) .
READ TABLE GT_TVTO ASSIGNING FIELD-SYMBOL(<GS_TVTO>) WITH KEY VKORG = <GS_ALV>-VKORG.
IF SY-SUBRC = 0 .
<GS_ALV>-WAERS = <GS_TVTO>-WAERS .
ELSE.
<GS_ALV>-MESSAGE = ‘銷售組織沒有維護對應的統計貨幣’ .
<GS_ALV>-ICON = ICON_LED_RED .
ENDIF.
ENDLOOP.
SORT GT_ALV BY BS .
*----------------------------------------------------------------------
ENDFORM.
FORM FRM_CHECK_DATA ."數據檢查
ENDFORM.
*FORM FRM_SELECT ."取數
*
- SELECT * FROM ZSDC0002_JOB
- WHERE KUNNR IN @S_KUNNR
- AND ERDAT IN @S_ERDAT
- AND MATNR IN @S_MATNR
- INTO TABLE @GT_ALVB.
*ENDFORM.
FORM FRM_OUTPUT_DATA .
PERFORM SUB_SET_LAYOUT.
PERFORM SUB_SET_FIELDCAT.
*函數ALV的調用
- CASE ABAP_TRUE .
- WHEN P_RB01.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID - it_sort_lvc = it_sort I_CALLBACK_PF_STATUS_SET = 'SUB_SET_STATUS'
- I_CALLBACK_HTML_TOP_OF_PAGE = 'SUB_ALV_TOP_OF_PAGE' I_CALLBACK_USER_COMMAND = 'SUB_USER_COMMAND' IS_LAYOUT_LVC = GS_LAYOUT IT_FIELDCAT_LVC = IT_FIELDCATALOG
- i_save = 'A'
- i_default = 'X'
- i_html_height_top = 18 "可根據表頭寬度適當調整大小
" IT_EVENTS = IT_EVENTS
TABLES
T_OUTTAB = GT_ALV. - WHEN P_RB02.
- CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
- EXPORTING
- I_CALLBACK_PROGRAM = SY-REPID
** it_sort_lvc = it_sort
** I_CALLBACK_PF_STATUS_SET = ‘SUB_SET_STATUS’
** I_CALLBACK_HTML_TOP_OF_PAGE = ‘SUB_ALV_TOP_OF_PAGE’
** I_CALLBACK_USER_COMMAND = ‘SUB_USER_COMMAND’
- IS_LAYOUT_LVC = GS_LAYOUT
- IT_FIELDCAT_LVC = IT_FIELDCATALOG
** i_save = ‘A’
** i_default = ‘X’
** i_html_height_top = 18 "可根據表頭寬度適當調整大小
- " IT_EVENTS = IT_EVENTS
- TABLES
- T_OUTTAB = GT_ALVB.
-
ENDCASE.
ENDFORM.
FORM SUB_SET_LAYOUT .
GS_LAYOUT-ZEBRA = ‘X’.
GS_LAYOUT-CWIDTH_OPT = ‘X’.
ENDFORM.
FORM SUB_SET_FIELDCAT . -
CASE ABAP_TRUE .
-
WHEN P_RB01.
SET_RB01: ‘SEL’ ‘選擇框’,
‘ICON’ ‘消息’,
‘MESSAGE’ ‘消息文本’, - 'BS' '''AUART' 'SAP訂單類型','VKORG' '銷售機構','VTWEG' '分銷渠道','SPART' '產品組','VKBUR' '銷售部門','VKGRP' 'SAP銷售組','KUNNR' 'SAP客戶號碼','BSTKD' '平臺銷售單號','ERDAT' '創建日期','MATNR' 'SAP物料編號','KWMENG' '銷售數量','REQ_DATE' '交貨日期','BATCH' '批次','LGORT' '存儲地點','KSCHL' '價格條件','NETPR' '凈價'.
-
WHEN P_RB02.
- SET_RB02:
- 'KUNNR' 'SAP客戶號碼',
- 'MATNR' 'SAP物料編號',
- 'KWMENG' '銷售數量',
- 'VRKME' '銷售單位',
- 'NETPR' '銷售價格',
- 'KMEIN' '價格銷售單位',
- 'NETWR' '此物料銷售金額',
- 'BSTKD' '旺店通訂單號碼',
- 'ERDAT' '銷售訂單日期時間',
- 'VBELNA' '銷售訂單號碼',
- 'POSNRA' '銷售訂單行項目號',
- 'VBELNB' '交貨單號',
- 'POSNRB' '交貨單行項目',
- 'VBELNC' '系統發票',
- 'POSNRC' '系統發票號碼',
- 'ZISON' '標識是否完成系統發票',
- 'ZMESS' '記錄系統執行錯誤信息',
- 'ZDATE' '數據導入日期',
- 'YDATE' '數據導入時間',
- 'ZTIME' '數據導入日期',
- 'YTIME' '數據導入時間 '.
- .
-
ENDCASE.
ENDFORM.
FORM SUB_SET_STATUS USING PT_EXTAB TYPE SLIS_T_EXTAB.
*局部對象定義
DATA:LT_ECODE TYPE TABLE OF SY-UCOMM.
*gui status的定義
SET PF-STATUS ‘1000’ EXCLUDING LT_ECODE.
ENDFORM.
FORM SUB_USER_COMMAND USING PT_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:LO_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA:LV_FLAG TYPE C .
DATA:LV_TABIX TYPE SYTABIX .
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
E_GRID = LO_GRID.
IF LO_GRID IS NOT INITIAL .
LO_GRID->CHECK_CHANGED_DATA( ).
ENDIF .
*功能代碼實現
CASE PT_UCOMM.
WHEN ‘QX’.
- PERFORM SUB_DO_MARK USING 'X'.
WHEN ‘BX’.
LOOP AT GT_ALV INTO GS_ALV.
GS_ALV-SEL = ‘’.
MODIFY GT_ALV FROM GS_ALV .
ENDLOOP.
WHEN ‘&IC1’.
WHEN ‘CREIT’ . - MESSAGE '嗯哼' TYPE 'S'.
PERFORM FRM_CREIT.
ENDCASE.
RS_SELFIELD-REFRESH = ‘X’.
RS_SELFIELD-COL_STABLE = ‘X’ .
RS_SELFIELD-ROW_STABLE = ‘X’.
ENDFORM.
FORM SUB_DO_MARK USING PU_MARK.
CLEAR:GS_ALV .GS_ALV-SEL = PU_MARK.
MODIFY GT_ALV FROM GS_ALV TRANSPORTING SEL
WHERE SEL NE PU_MARK.
ENDFORM.
FORM FRM_CREIT.
CLEAR:GS_ALV .
PERFORM FRM_XS.
- PERFORM FRM_JH.
- PERFORM FRM_FP.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_xs
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM FRM_XS .
DATA: LW_HEADER TYPE BAPISDHD1,
LW_HEADERX TYPE BAPISDHD1X,
LT_RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
LT_ITEM TYPE TABLE OF BAPISDITM,
LW_ITEM TYPE BAPISDITM,
LT_ITEMX TYPE TABLE OF BAPISDITMX,
LW_ITEMX TYPE BAPISDITMX,
LT_PARNR TYPE TABLE OF BAPIPARNR,
LW_PARNR TYPE BAPIPARNR,
LT_SCHDL TYPE TABLE OF BAPISCHDL, "計劃行
LW_SCHDL TYPE BAPISCHDL,
LT_SCHDLX TYPE TABLE OF BAPISCHDLX,
LW_SCHDLX TYPE BAPISCHDLX,
LT_COND TYPE TABLE OF BAPICOND, "訂單條件
LS_COND TYPE BAPICOND,
LT_CONDX TYPE TABLE OF BAPICONDX,
LS_CONDX TYPE BAPICONDX.
DATA: L_POSNR TYPE VBAP-POSNR. "行項目號
DATA: LV_VBELN TYPE BAPIVBELN-VBELN. "行項目號
DATA:LV_MESSAGE TYPE STRING . "消息匯總
DATA :LV_SUMVERPR TYPE VERPR .
DATA LV_MATNR TYPE MATNR .
READ TABLE GT_ALV TRANSPORTING NO FIELDS WITH KEY SEL = ‘X’ .
IF SY-SUBRC NE 0.
MESSAGE ‘請選擇要創建銷售訂單的數據’ TYPE ‘E’.
ENDIF.
DATA(GT_ALVA) = GT_ALV .
DATA GT_ITEM TYPE TABLE OF TY_ALV .
CLEAR:GS_ALV.
LOOP AT GT_ALVA ASSIGNING FIELD-SYMBOL(<GS_SAP>)
GROUP BY ( BS = <GS_SAP>-BS ) "物料
ASCENDING REFERENCE INTO DATA(LS_SAP_GRP). "分組放入工作區
CLEAR :GT_ITEM[],LV_SUMVERPR.
GT_ITEM[] = VALUE #( BASE GT_ITEM
FOR WA IN GROUP LS_SAP_GRP ( WA ) ).
CLEAR: L_POSNR,LW_HEADER,LW_HEADERX,LW_PARNR,LT_PARNR,LW_ITEM ,
LT_ITEM,LS_COND , LT_COND,LW_SCHDLX ,LT_SCHDLX,LW_ITEMX ,
LT_ITEMX,LS_CONDX , LT_CONDX,LT_RETURN,LV_VBELN,LT_SCHDL.
LOOP AT GT_ITEM INTO GS_ALV WHERE SEL = ‘X’ .
DATA(LV_TABIX) = SY-TABIX .
*表頭數據
LW_HEADER-DOC_TYPE = GS_ALV-AUART. "銷售訂單類型
LW_HEADER-SALES_ORG = GS_ALV-VKORG. "銷售機構
LW_HEADER-DISTR_CHAN = GS_ALV-VTWEG. "分銷渠道
LW_HEADER-DIVISION = GS_ALV-SPART. "產品組
LW_HEADER-SALES_OFF = GS_ALV-VKBUR. "銷售部門
LW_HEADER-SALES_GRP = GS_ALV-VKGRP. "SAP銷售組
LW_HEADER-PURCH_NO_C = GS_ALV-BSTKD. "SAP客戶參考
IF GS_ALV-ERDAT IS NOT INITIAL.
LW_HEADER-REQ_DATE_H = GS_ALV-ERDAT . "銷售日期
ELSE.
LW_HEADER-REQ_DATE_H = SY-DATUM. "銷售日期
ENDIF.
*確認
LW_HEADERX-DOC_TYPE = ‘X’.
LW_HEADERX-SALES_ORG = ‘X’.
LW_HEADERX-DISTR_CHAN = ‘X’.
LW_HEADERX-DIVISION = ‘X’.
*合作伙伴數據
CLEAR LW_PARNR.
LW_PARNR-PARTN_ROLE = ‘AG’. "售達方
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = GS_ALV-KUNNR
IMPORTING
OUTPUT = LW_PARNR-PARTN_NUMB.
APPEND LW_PARNR TO LT_PARNR.
CLEAR LW_PARNR.
- LW_PARNR-PARTN_ROLE = ‘WE’."合作伙伴功能 送達方
- CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
- EXPORTING
- INPUT =
- IMPORTING
- OUTPUT =
- APPEND LW_PARNR TO LT_PARNR.
- ‘RE’."合作伙伴功能 受票方
- ‘RG’."合作伙伴功能 受票方
- CLEAR L_POSNR.
L_POSNR = L_POSNR + 10.
*行項目數據
CLEAR LW_ITEM.
LW_ITEM-ITM_NUMBER = L_POSNR. "項目編號
"物料
CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
EXPORTING
INPUT = GS_ALV-MATNR
IMPORTING
OUTPUT = LW_ITEM-MATERIAL
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
"數量
LW_ITEM-TARGET_QTY = GS_ALV-KWMENG."物料數量 .
LW_ITEM-PLANT = GS_ALV-VKORG."銷售機構與工廠是相同的,使用一下
LW_ITEM-STORE_LOC = GS_ALV-LGORT.
LW_ITEM-BATCH = GS_ALV-BATCH."批次
APPEND LW_ITEM TO LT_ITEM.
*確認
CLEAR: LW_ITEMX,LT_ITEMX…
LW_ITEMX-MATERIAL = ‘X’.
LW_ITEMX-TARGET_QU = ‘X’.
LW_ITEMX-PLANT = ‘X’.
LW_ITEMX-STORE_LOC = ‘X’.
LW_ITEMX-BATCH = ‘X’."批次
APPEND LW_ITEMX TO LT_ITEMX.
*數量
CLEAR: LW_SCHDL.
LW_SCHDL-REQ_QTY = GS_ALV-KWMENG.
LW_SCHDL-ITM_NUMBER = L_POSNR.
LW_SCHDL-REQ_DATE = GS_ALV-REQ_DATE ."交貨日期
APPEND LW_SCHDL TO LT_SCHDL.
CLEAR: LW_SCHDLX.
LW_SCHDLX-REQ_QTY = ‘X’.
LW_SCHDLX-ITM_NUMBER = L_POSNR.
LW_SCHDLX-REQ_DATE = ‘X’.
APPEND LW_SCHDLX TO LT_SCHDLX.
- LT_COND-CURRENCY =‘CNY’
LS_CONDX-COND_ST_NO = ‘010’.
LS_CONDX-COND_COUNT = ‘01’.
LS_CONDX-COND_TYPE = ‘X’.
LS_CONDX-COND_VALUE = ‘X’.
LS_CONDX-CURRENCY = ‘X’. - LT_CONDX-CURRENCY =‘X’
APPEND LS_COND TO LT_COND.
APPEND LS_CONDX TO LT_CONDX.
ENDLOOP.
IF LV_SUMVERPR IS NOT INITIAL .
LS_COND-ITM_NUMBER = ‘000000’ .
LS_COND-COND_ST_NO = ‘000’.
LS_COND-COND_COUNT = ‘00’.
LS_COND-COND_TYPE = ‘ZR03’. "價格條件
LS_COND-COND_VALUE = LV_SUMVERPR. "銷售單價
LS_COND-CURRENCY = LV_WAERS. "統計貨幣 - LT_COND-CURRENCY =‘CNY’
LS_COND-ITM_NUMBER = ‘000000’ .
LS_COND-COND_ST_NO = ‘000’.
LS_COND-COND_COUNT = ‘00’.
LS_CONDX-COND_TYPE = ‘X’.
LS_CONDX-COND_VALUE = ‘X’.
LS_CONDX-CURRENCY = ‘X’. - LT_CONDX-CURRENCY =‘X’
APPEND LS_COND TO LT_COND.
APPEND LS_CONDX TO LT_CONDX.
ENDIF.
- BREAK-POINT.
CLEAR:GS_ALV,LV_ICON ,LV_MESSAGE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
WAIT = ‘X’.
ENDLOOP.
ENDFORM.
&---------------------------------------------------------------------
*& Form temp_excel_get
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> P_
&---------------------------------------------------------------------
FORM TEMP_EXCEL_GET USING P_OBJID TYPE WWWDATA-OBJID.
DATA:L_OBJDATA LIKE WWWDATATAB,
L_RC LIKE SY-SUBRC.
DATA: L_FULLPATH TYPE STRING,
L_EXTENSION TYPE STRING,
L_FNAME LIKE RLGRAP-FILENAME.
L_EXTENSION = P_OBJID.
PERFORM GET_FILE_NAME USING ‘.xlsx’
‘Excel|*.xlsx;’
CHANGING L_FULLPATH.
IF L_FULLPATH = SPACE.
MESSAGE ‘請選擇下載文件名’ TYPE ‘E’.
ELSE.
L_FNAME = L_FULLPATH.
SELECT SINGLE RELID OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF L_OBJDATA
WHERE RELID = ‘MI’
AND OBJID = P_OBJID .
ENDIF.
ENDFORM. "TEMP_EXCEL_GET
&---------------------------------------------------------------------
*& Form get_file_name
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> P_
*& --> P_
*& <-- L_FULLPATH
&---------------------------------------------------------------------
FORM GET_FILE_NAME USING P_EXTENSION
P_FILE_FILTER
CHANGING P_FULLPATH.
DATA: L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING,
L_TITILE TYPE STRING,
L_INIT_DIR TYPE STRING.
CLEAR P_FULLPATH.
L_TITILE = TEXT-T04.
L_INIT_DIR = TEXT-T03.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = L_TITILE
DEFAULT_EXTENSION = ‘.xls’
INITIAL_DIRECTORY = L_INIT_DIR
PROMPT_ON_OVERWRITE = ‘X’
FILE_FILTER = P_FILE_FILTER
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
P_FULLPATH = L_FULLPATH.
ENDFORM.
總結
以上是生活随笔為你收集整理的SAP BAPI_SALESORDER_CREATEFROMDAT2 创建销售订单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hashcat源码分析1
- 下一篇: wordpress 外部数据接口_使用接