您的位置:首页 > 其它

【南京】根据销售订单创建交货单并自动拣配、过账发货程序

2013-08-27 09:52 597 查看
Code listing for: ZSD020 
Description: 根据销售订单创建交货单并过账发货
*&---------------------------------------------------------------------*
* 程序名称: 根据销售订单创建交货单并过账发货
* 程序名  :ZSD020
* 开发日期:2013-08-26
* 创建者  :ZCY
* 申请者  :
*----------------------------------------------------------------------*
* 概 要  :2013-08-26 初次开发
*&---------------------------------------------------------------------*

REPORT  ZSD020.

*****************************************************************
*TYPE DECLARATION
*****************************************************************

TYPES:BEGIN OF TY_TAB_UPLOAD,                        "上传文件接收表
SHIP_POINT TYPE BAPIDLVCREATEHEADER-SHIP_POINT,    "装运点
VBELN(10) TYPE C,                                  "订单号
REF_ITEM TYPE RFPOS_VL,                            "项目
DLV_QTY TYPE LFIMG,                                "交货数量
MESSAGE TYPE STRING,
END OF TY_TAB_UPLOAD.

TYPES:BEGIN OF TY_VBAP,
VRKME TYPE VBAP-VRKME,
END OF TY_VBAP.
*****************************************************************
*TYPE DECLARATION
*****************************************************************
TABLES: VBAP.
************************************************************************
* INTERNAL TABLE DECLARATION
************************************************************************

DATA:
IT_TAB_UPLOAD TYPE STANDARD TABLE OF TY_TAB_UPLOAD,                    "上传文件接收表
IT_INTERN LIKE STANDARD TABLE OF ALSMEX_TABLINE,                       "EXCEL文件接收表
SALES_ITEMS LIKE STANDARD TABLE OF BAPIDLVREFTOSALESORDER,             "BAPI输入表:
IT_RETURN LIKE STANDARD TABLE OF BAPIRET2,                             "BAPI返回参数
IT_SERIAL_NUMBERS LIKE STANDARD TABLE OF BAPIDLVSERIALNUMBER,          "BAPI返回参数
IT_EXTENSION_IN LIKE STANDARD TABLE OF BAPIPAREX,                      "BAPI返回参数
IT_DELIVERIES LIKE STANDARD TABLE OF BAPISHPDELIVNUMB,                 "BAPI返回参数
IT_CREATED_ITEMS LIKE STANDARD TABLE OF BAPIDLVITEMCREATED,            "BAPI返回参数
IT_EXTENSION_OUT LIKE STANDARD TABLE OF BAPIPAREX.                     "BAPI返回参数

************************************************************************
* WORKAREA DECLARATION
************************************************************************

DATA:
WA_VBAP TYPE TY_VBAP,
WA_TAB_UPLOAD TYPE TY_TAB_UPLOAD,                         "上传文件接收表
WA_SALES_ITEMS TYPE BAPIDLVREFTOSALESORDER,               "BAPI输入表:
G_SHIP_POINT TYPE BAPIDLVCREATEHEADER-SHIP_POINT,         "装运点
WA_INTERN LIKE ALSMEX_TABLINE,                            "EXCEL参数表
G_DELIVERY TYPE BAPISHPDELIVNUMB-DELIV_NUMB,              "BAPI返回参数
G_NUM_DELIVERIES TYPE BAPIDLVCREATEHEADER-NUM_DELIVERIES, "BAPI返回参数
WA_CREATED_ITEMS LIKE BAPIDLVITEMCREATED,
WA_RETURN LIKE  BAPIRET2.

************************************************************************
* SELECTION SCREEN DECLARATION
************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK BLK.
PARAMETERS: P_FIN TYPE RLGRAP-FILENAME OBLIGATORY. "文件名
SELECTION-SCREEN END OF BLOCK BLK.

************************************************************************
* AT SELECTION SCREEN
************************************************************************

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FIN.
PERFORM FRM_F4_HELP CHANGING P_FIN.  "文件浏览

************************************************************************
* EVENT START OF SELECTION
************************************************************************

START-OF-SELECTION.
PERFORM FM_UPLOAD_DATA.       "上传文件

*&---------------------------------------------------------------------*
*  FORM  ADD_ZERO
*&---------------------------------------------------------------------*
*  增加前导零
*&---------------------------------------------------------------------*

DEFINE ADD_ZERO.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT  = &1
IMPORTING
OUTPUT = &1.
END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*  FORM  DELIVERY
*&---------------------------------------------------------------------*
*  BAPI发货过账
*  输入参数:交货单号 P_VBELN
*&---------------------------------------------------------------------*
FORM  DELIVERY USING P_VBELN TYPE VBELN.
  DATA:G_LIKP LIKE  LIKP.
  DATA:G_LIPS LIKE  LIPS.
  DATA GV_14(14) TYPE C.
  DATA: BEGIN OF I_VBKOK OCCURS 11.
          INCLUDE STRUCTURE VBKOK.
  DATA: END OF I_VBKOK.

  DATA: BEGIN OF I_VBPOK_TAB OCCURS 12.
          INCLUDE STRUCTURE VBPOK.
  DATA: END OF I_VBPOK_TAB.
  DATA:EF_ERROR_ANY TYPE XFELD.

  SELECT SINGLE * INTO G_LIKP FROM LIKP
      WHERE VBELN = P_VBELN.

  I_VBKOK-VBELN_VL        = P_VBELN.        "DELIVERY NUMBER
  I_VBKOK-WABUC           = 'X'.            "AUTOMATIC PGI
  I_VBKOK-WADAT_IST       = G_LIKP-BLDAT.
  APPEND I_VBKOK.

  SELECT * INTO G_LIPS FROM LIPS
    WHERE VBELN = P_VBELN.
    I_VBPOK_TAB-VBELN_VL    = P_VBELN.      "DELIVERY NUMBER
    I_VBPOK_TAB-POSNR_VL    = G_LIPS-POSNR.
    I_VBPOK_TAB-VBELN       = P_VBELN.
    I_VBPOK_TAB-POSNN       = G_LIPS-POSNR.
    I_VBPOK_TAB-MATNR       = G_LIPS-MATNR.
    GV_14                   = G_LIPS-LFIMG.
    CONDENSE GV_14.
    I_VBPOK_TAB-PIKMG       = GV_14 .
    APPEND I_VBPOK_TAB.
  ENDSELECT.

  CALL FUNCTION 'WS_DELIVERY_UPDATE'
    EXPORTING
      VBKOK_WA       = I_VBKOK
      COMMIT         = 'X'
      DELIVERY       = P_VBELN
      UPDATE_PICKING = 'X'
     IMPORTING
     EF_ERROR_ANY_0  = EF_ERROR_ANY
    TABLES
      VBPOK_TAB      = I_VBPOK_TAB
    EXCEPTIONS
      ERROR_MESSAGE  = 1
      OTHERS         = 2.

  IF EF_ERROR_ANY = 'X'.
    WRITE:/ , / P_VBELN , ' 发货过账失败!可能需要手动发货过账'.
  ELSE.
    WRITE:/ , / P_VBELN , ' 发货过账成功!'.
  ENDIF.

ENDFORM.                    "DELIVERY

*&---------------------------------------------------------------------*
*  FORM  FM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*  上传文件
*&---------------------------------------------------------------------*

FORM  FM_UPLOAD_DATA.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME                = P_FIN
I_BEGIN_COL             = 1
I_BEGIN_ROW             = 1
I_END_COL               = 255
I_END_ROW               = 65536
TABLES
INTERN                  = IT_INTERN
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE              = 2
OTHERS                  = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DELETE IT_INTERN WHERE ROW = 1.                    "删除字段名行

LOOP AT IT_INTERN INTO WA_INTERN.                  "将EXCEL信息储存至内表IT_TAB_UPLOAD
CASE WA_INTERN-COL.
WHEN 1.
WA_TAB_UPLOAD-SHIP_POINT = WA_INTERN-VALUE.
WHEN 2.
WA_TAB_UPLOAD-VBELN = WA_INTERN-VALUE.
ADD_ZERO WA_TAB_UPLOAD-VBELN.
WHEN 3.
WA_TAB_UPLOAD-REF_ITEM = WA_INTERN-VALUE.
WHEN 4.
WA_TAB_UPLOAD-DLV_QTY = WA_INTERN-VALUE.
APPEND WA_TAB_UPLOAD TO IT_TAB_UPLOAD.
ENDCASE.
ENDLOOP.

LOOP AT IT_TAB_UPLOAD INTO WA_TAB_UPLOAD.          "填充BAPI参数表:SALES_ITEMS
G_SHIP_POINT = WA_TAB_UPLOAD-SHIP_POINT.
WA_SALES_ITEMS-REF_DOC = WA_TAB_UPLOAD-VBELN.
WA_SALES_ITEMS-REF_ITEM = WA_TAB_UPLOAD-REF_ITEM.
WA_SALES_ITEMS-DLV_QTY = WA_TAB_UPLOAD-DLV_QTY.
SELECT SINGLE VRKME FROM VBAP INTO CORRESPONDING FIELDS OF WA_VBAP                                        "数量单位取VBAP中单位
WHERE VBELN = WA_TAB_UPLOAD-VBELN
AND POSNR = WA_TAB_UPLOAD-REF_ITEM.
WA_SALES_ITEMS-SALES_UNIT = WA_VBAP-VRKME.
APPEND WA_SALES_ITEMS TO SALES_ITEMS.
ENDLOOP.
PERFORM MANAGE_DATA.                                                                                        "创建交货单,发货过账

ENDFORM.                    "FM_UPLOAD_DATA

*&---------------------------------------------------------------------*
*  FORM  MANAGE_DATA
*&---------------------------------------------------------------------*
*  BAPI处理创建交货单
*&---------------------------------------------------------------------*

FORM  MANAGE_DATA.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
EXPORTING
SHIP_POINT             = G_SHIP_POINT
*   DUE_DATE                =
*   DEBUG_FLG               =
*   NO_DEQUEUE              = ' '
IMPORTING
DELIVERY                = G_DELIVERY
NUM_DELIVERIES          = G_NUM_DELIVERIES
TABLES
SALES_ORDER_ITEMS       = SALES_ITEMS
SERIAL_NUMBERS          = IT_SERIAL_NUMBERS
EXTENSION_IN            = IT_EXTENSION_IN
DELIVERIES              = IT_DELIVERIES
CREATED_ITEMS           = IT_CREATED_ITEMS
EXTENSION_OUT           = IT_EXTENSION_OUT
RETURN                  = IT_RETURN
.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
LOOP AT IT_RETURN INTO WA_RETURN.
IF WA_RETURN-ROW = 0.
ELSE.
READ TABLE IT_TAB_UPLOAD INTO WA_TAB_UPLOAD INDEX WA_RETURN-ROW.
CONCATENATE WA_TAB_UPLOAD-MESSAGE WA_RETURN-MESSAGE INTO WA_TAB_UPLOAD-MESSAGE.
MODIFY IT_TAB_UPLOAD FROM WA_TAB_UPLOAD INDEX WA_RETURN-ROW.
ENDIF.
ENDLOOP.

LOOP AT IT_TAB_UPLOAD INTO WA_TAB_UPLOAD.
IF WA_TAB_UPLOAD-MESSAGE IS NOT INITIAL.
WRITE: / ' 单据号:', WA_TAB_UPLOAD-VBELN , ' 项目号:' , 

WA_TAB_UPLOAD-REF_ITEM , '错误信息:', WA_TAB_UPLOAD-MESSAGE.
ENDIF.
ENDLOOP.

IF IT_CREATED_ITEMS IS NOT INITIAL.

WRITE: / , /  '==================================================================================================================================================================='.
READ TABLE IT_CREATED_ITEMS INTO WA_CREATED_ITEMS INDEX 1.       "自动拣配过账

WRITE: / , /  ' 已创建交货单:' , WA_CREATED_ITEMS-DELIV_NUMB.
*    LOOP AT IT_CREATED_ITEMS INTO WA_CREATED_ITEMS.
*      WRITE: / , /' 单据号:' , WA_CREATED_ITEMS-REF_DOC ,
*                  ' 项目号:' , WA_CREATED_ITEMS-REF_ITEM ,
*                  ' 发货单项目号:' , WA_CREATED_ITEMS-DELIV_ITEM ,
*                  ' 物料号:' , WA_CREATED_ITEMS-MATERIAL ,
*                  ' 发货数量:' , WA_CREATED_ITEMS-DLV_QTY ,
*                  ' 发货单位:' , WA_CREATED_ITEMS-SALES_UNIT.
*    ENDLOOP.
PERFORM DELIVERY USING WA_CREATED_ITEMS-DELIV_NUMB.
ELSE.
WRITE: / , / ' 发货单未能创建!'.
ENDIF.

ENDFORM.                    "MANAGE_DATA

*&---------------------------------------------------------------------*
*  FORM  FRM_F4_HELP
*&---------------------------------------------------------------------*
*  F4文件浏览帮助
*&---------------------------------------------------------------------*

FORM FRM_F4_HELP  CHANGING O_FNAME TYPE RLGRAP-FILENAME.
DATA: L_FILETAB TYPE FILETABLE,
L_WAFTAB LIKE LINE OF L_FILETAB,
L_RC TYPE I.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE            = '打开文件'
INITIAL_DIRECTORY       = 'C:/'
CHANGING
FILE_TABLE              = L_FILETAB
RC                      = L_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR              = 2
ERROR_NO_GUI            = 3
NOT_SUPPORTED_BY_GUI    = 4
OTHERS                  = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXIT.
ELSE.
READ TABLE L_FILETAB INTO L_WAFTAB INDEX 1.
O_FNAME = L_WAFTAB-FILENAME.
CLEAR: L_FILETAB,
L_WAFTAB.
ENDIF.

ENDFORM.                    "FRM_F4_HELP

*Selection texts
*----------------------------------------------------------
* P_FIN         上传文件路径

Extracted by Direct Download Enterprise version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 701

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息