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

来源:互联网 发布:阿里云cdn加速怎么用 编辑:程序博客网 时间:2024/05/02 04:26

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(14TYPE C.  DATABEGIN OF I_VBKOK OCCURS 11.          INCLUDE STRUCTURE VBKOK.  DATAEND OF I_VBKOK.  DATABEGIN OF I_VBPOK_TAB OCCURS 12.          INCLUDE STRUCTURE VBPOK.  DATAEND 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




原创粉丝点击