本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系。
SD VL02N时如果要交货过账,之前需要先拣配数量。操作就是前台输入一个拣配数量,然后保存
代码如下
DATA: LS_VBKOK TYPE VBKOK.
DATA: LT_VBKOK TYPE STANDARD TABLE OF VBKOK.
DATA: LT_PROTT TYPE STANDARD TABLE OF PROTT.
DATA: LS_PROTT TYPE PROTT.
DATA: LT_VBPOK TYPE STANDARD TABLE OF VBPOK.
DATA: LS_VBPOK TYPE VBPOK.
DATA: LV_MESSAGE TYPE STRING.
DATA: LV_ALL_MESSAGE TYPE STRING.
DATA: LV_FLAG TYPE CHAR01.
LOOP AT LT_SEL INTO LS_SEL .
LS_VBKOK-VBELN_VL = LS_SEL-VBELN_VL.
LS_VBKOK-KOMUE = 'X'. "交货数量 = 捡配数量
LS_VBKOK-KZKODAT = 'X'. "Picking date
LS_VBKOK-KODAT = SY-DATUM. "Picking date
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL .
CLEAR:LS_VBPOK,LV_FLAG,LV_MESSAGE,LV_ALL_MESSAGE,LT_PROTT.
LS_VBPOK-VBELN_VL = GS_DATA-VBELN_VL.
LS_VBPOK-POSNR_VL = GS_DATA-POSNR_VL.
LS_VBPOK-VBELN = GS_DATA-VBELN_VA.
LS_VBPOK-POSNN = GS_DATA-POSNR_VA.
LS_VBPOK-PIKMG = GS_DATA-PIKMG.
LS_VBPOK-VRKME = GS_DATA-MEINS.
APPEND LS_VBPOK TO LT_VBPOK.
ENDLOOP.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
VBKOK_WA = LS_VBKOK
* COMMIT = CON
DELIVERY = LS_SEL-VBELN_VL
UPDATE_PICKING = 'X'
SYNCHRON = 'X'
* if_database_update = 'X' "L.S Commentd out
NICHT_SPERREN = 'X' "L.S Inserted
TABLES
VBPOK_TAB = LT_VBPOK
PROT = LT_PROTT
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 2 .
IF SY-SUBRC = 0 .
LOOP AT LT_PROTT INTO LS_PROTT WHERE MSGTY CA 'EAX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_PROTT-MSGID
MSGNR = LS_PROTT-MSGNO
MSGV1 = LS_PROTT-MSGV1
MSGV2 = LS_PROTT-MSGV2
MSGV3 = LS_PROTT-MSGV3
MSGV4 = LS_PROTT-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE .
LV_MESSAGE = LV_ALL_MESSAGE.
LV_FLAG = 'X' .
CLEAR LS_PROTT.
ENDLOOP.
ELSE.
CLEAR LV_MESSAGE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = SY-MSGID
MSGNR = SY-MSGNO
MSGV1 = SY-MSGV1
MSGV2 = SY-MSGV2
MSGV3 = SY-MSGV3
MSGV4 = SY-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_ALL_MESSAGE.
LV_MESSAGE = LV_ALL_MESSAGE.
LV_FLAG = 'X' .
ENDIF .
IF LV_FLAG IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL .
GS_DATA-ICONS = ICON_GREEN_LIGHT.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL .
GS_DATA-ICONS = ICON_RED_LIGHT.
GS_DATA-MESSAGE = LV_ALL_MESSAGE.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ENDIF.
ENDLOOP.
拣配过之后,交货单可以过账,生成物料凭证
代码如下
LOOP AT LT_SEL INTO LS_SEL.
CLEAR:LS_HEADER_DATA,LS_HEADER_CONTROL,LV_DELIVERY_NUMB,LT_HEADER_DEADLINES,LT_ITEM_DATA,LT_ITEM_CONTROL,LT_RETURN_TAB.
*准备抬头信息
LS_HEADER_DATA-DELIV_NUMB = LS_SEL-VBELN_VL.
*抬头控制信息。
LS_HEADER_CONTROL-DELIV_NUMB = LS_SEL-VBELN_VL.
LS_HEADER_CONTROL-POST_GI_FLG = 'X'.
*更改发货过账日期。
CLEAR LS_HEADER_DEADLINES .
LS_HEADER_DEADLINES-DELIV_NUMB = LS_SEL-VBELN_VL.
LS_HEADER_DEADLINES-TIMETYPE = 'WSHDRWADTI' ."发货过账 。
CONCATENATE SY-DATUM SY-TIMLO INTO LV_TIMESTAMP .
CONDENSE LV_TIMESTAMP .
LS_HEADER_DEADLINES-TIMESTAMP_UTC = LV_TIMESTAMP .
* LS_HEADER_DEADLINES-TIMEZONE = 'UTC+8' .
APPEND LS_HEADER_DEADLINES TO LT_HEADER_DEADLINES .
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL AND ICONS = ICON_GREEN_LIGHT.
LS_ITEM_DATA-DELIV_NUMB = GS_DATA-VBELN_VL. "外向交货单号
LS_ITEM_DATA-DELIV_ITEM = GS_DATA-POSNR_VL. "交货单行项目
LS_ITEM_DATA-DLV_QTY = GS_DATA-PIKMG .
LS_ITEM_DATA-MATERIAL = GS_DATA-MATNR.
LS_ITEM_DATA-BATCH = GS_DATA-CHARG."批次
LS_ITEM_DATA-SALES_UNIT = GS_DATA-MEINS.
SELECT SINGLE
UMREZ
UMREN
INTO (LS_ITEM_DATA-FACT_UNIT_NOM,LS_ITEM_DATA-FACT_UNIT_DENOM)
FROM
MARM
WHERE MATNR EQ GS_DATA-MATNR
AND MEINH EQ GS_DATA-MEINS.
IF SY-SUBRC = 0 .
ELSE.
LS_ITEM_DATA-FACT_UNIT_NOM = '1'. "此处应从MARM取转换关系
LS_ITEM_DATA-FACT_UNIT_DENOM = '1'."此处应从MARM取转换关系
ENDIF.
*行项目控制
LS_ITEM_CONTROL-DELIV_NUMB = GS_DATA-VBELN_VL..
LS_ITEM_CONTROL-DELIV_ITEM = GS_DATA-POSNR_VL.
LS_ITEM_CONTROL-CHG_DELQTY = 'X'.
APPEND LS_ITEM_CONTROL TO LT_ITEM_CONTROL.
CLEAR LS_ITEM_CONTROL.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
EXPORTING
HEADER_DATA = LS_HEADER_DATA
HEADER_CONTROL = LS_HEADER_CONTROL
DELIVERY = LV_DELIVERY_NUMB
* TECHN_CONTROL =
* HEADER_DATA_SPL =
* HEADER_CONTROL_SPL =
TABLES
* HEADER_PARTNER =
* HEADER_PARTNER_ADDR =
HEADER_DEADLINES = LT_HEADER_DEADLINES
ITEM_DATA = LT_ITEM_DATA "行项目数据
ITEM_CONTROL = LT_ITEM_CONTROL
* ITEM_CODING_BLOCK =
ITEM_SERIAL_NO = LT_ITEM_SERIAL_NO "行项目序列号
* SUPPLIER_CONS_DATA =
* HANDLING_UNIT_HEADER =
* HANDLING_UNIT_ITEM =
* HANDLING_UNIT_HEADER_EPC =
* HANDLING_UNIT_ITEMS_EPC =
* HANDLING_UNIT_SERNO =
* EXTENSION1 =
* EXTENSION2 =
RETURN = LT_RETURN_TAB
* TOKENREFERENCE =
* HANDLING_UNIT_HEADER_CROSS =
* ITEM_DATA_SPL =
* HANDLING_UNIT_IDENTIFIERS =
* HANDLING_UNIT_ITEM_SPL =
* ITEM_DATA_DOCU_BATCH =
* NEW_ITEM_DATA =
* NEW_ITEM_DATA_SPL =
* NEW_ITEM_ORG =
* TEXT_HEADER =
* TEXT_LINES =
* NEW_ITEM_DATA_SKU =
.
LOOP AT LT_RETURN_TAB INTO LS_RETURN_TAB WHERE TYPE CA 'EAX'.
LV_FLAG = 'X'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN_TAB-ID
MSGNR = LS_RETURN_TAB-NUMBER
MSGV1 = LS_RETURN_TAB-MESSAGE_V1
MSGV2 = LS_RETURN_TAB-MESSAGE_V2
MSGV3 = LS_RETURN_TAB-MESSAGE_V3
MSGV4 = LS_RETURN_TAB-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE.
ENDLOOP.
IF LV_FLAG EQ 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL AND ICONS = ICON_GREEN_LIGHT..
GS_DATA-MESSAGE = LV_ALL_MESSAGE.
GS_DATA-ICONS = ICON_RED_LIGHT.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL AND ICONS = ICON_GREEN_LIGHT..
GS_DATA-ICONS = ICON_GREEN_LIGHT.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ENDIF.
ENDLOOP.