2.1程序说明
所用自定义表
ZTLORT | 交货单对应库位 条码功能 |
ZTLIPS | 条码功能 销售发货 |
ZTTBC | 托条码 |
ZTMBC | 物料条码 |
ZTMGL | 依据库存地点设置条码管 |
ZTYSK | 运输单抬头 |
ZTYSP | 运输单项目 |
创建交货单,将交货单单号作为提货单条码;
交货单创建后,打印《发货计划汇总表》
按照规定,仓库提前3天根据交货计划执行发货出库准备.
扫描提货单号:扫描发货计划汇总表中的提货单号、扫描备货库位条码、扫描托条码,完成物料的下架备货动作。
托条码是否在销售订单内且可发货(入库标志为Y):ERP自动检查该托条码是否属于当前销售订单且可发货,如果不属于或不可发货(托条码表状态为“生效”),则报错提示。
该托条码物品号是否相符:ERP自动检查该托条码对应的物料物品号号是否和当前销售订单上的相同,如果不相同,则报错提示。
是否重复扫描:ERP自动判断该托条码是否重复扫描,如果已扫描过,则报错提示。
扫描完成,则上传ERP,托条码处于“捡配完成”状态,更新托条码表中状态为“出库”。
装车时,扫描提货单号,输入车辆号码,装车人为手持终端登录用户。
系统校验:托条码是否在发货单中:ERP自动检查所扫描的托条码是否属于该发货单,如果不属于该发货单,则报错提示。
是否重复扫描:ERP自动判断该条码是否重复扫描,如果已扫描过,则报错提示。
装车完成,托条码扫描完成后,上传;ERP自动更新交货单质检员与车辆信息,更新物料条码表中状态为“出库”,更新物料条码表车辆信息,
程序实现
2.2.1生成运输单号
FORM FRM_CREATE_3011 .
DATA:L_NR_RANGE_NR LIKE INRI-NRRANGENR,
L_OBJECT LIKE INRI-OBJECT.
DATA:RC LIKE INRI-RETURNCODE,
NUMBER(10) TYPE C.
2.2.2"生成运输单号
L_NR_RANGE_NR = '01'.
L_OBJECT = 'ZEYSO'.
CLEAR:NUMBER,GFD_ZEYSO.
PERFORM FRM_3011_INIT.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
NR_RANGE_NR = L_NR_RANGE_NR
OBJECT = L_OBJECT
IMPORTING
NUMBER = NUMBER
RETURNCODE = RC
EXCEPTIONS
INTERVAL_NOT_FOUND = 1
NUMBER_RANGE_NOT_INTERN = 2
OBJECT_NOT_FOUND = 3
QUANTITY_IS_0 = 4
QUANTITY_IS_NOT_1 = 5
INTERVAL_OVERFLOW = 6
BUFFER_OVERFLOW = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ELSE.
GFD_ZEYSO = NUMBER.
CALL SCREEN SCRN_ZVBLN_312.
ENDIF.
ENDFORM.
*&------------
2.2.3"运输单进行交货单扫描时,检查运输单是否已经确认过
NR_RANGE_NR = '01'.
OBJECT = 'ZEYSO'.
IF GFD_ZEYSO IS INITIAL.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '运输单未找到!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
CLEAR:RC.
* NUMBER = GFD_ZEYSO.
*
* CALL FUNCTION 'NUMBER_CHECK'
* EXPORTING
* OBJECT = OBJECT
* NR_RANGE_NR = NR_RANGE_NR
* NUMBER = NUMBER
* IMPORTING
* RETURNCODE = RC.
IF RC = 'X'.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '运输单编号不正确!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_ZTYSK
FROM ZTYSK
WHERE ZEYSO = GFD_ZEYSO.
IF GT_ZTYSK-KZERM = 'X'.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '运输单已确认!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
PERFORM FRM_3012_CLEAR .
CALL SCREEN SCRN_ZVBLN_312.
ENDIF.
ENDIF.
ENDIF.
2.2.4调用3012界面进行交货单扫描
FORM FRM_CHECK_VBELN_3012 .
DATA:L_WBSTK LIKE VBUK-WBSTK.
DATA:L_STRESS1(200) TYPE C,
L_STRESS2(200) TYPE C.
DATA:ID LIKE THEAD-TDID,
LANGUAGE LIKE THEAD-TDSPRAS,
NAME LIKE THEAD-TDNAME,
OBJECT LIKE THEAD-TDOBJECT.
DATA:L_KUNNR LIKE VBAK-KUNNR.
DATA:LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
CLEAR:GFD_MARK,GFD_MTART.
CLEAR:GFD_MATNR,GFD_LFIMG,GFD_ZVIMG,GFD_XVIMG,GFD_ZLIX,GFD_SUMLIX,GFD_WERKS,GFD_LGORT,GFD_MAKTX,GFD_MARK.
CLEAR:GT_LIPS,GTDC,GTTC,TMBC.
REFRESH:GT_LIPS,GTDC,GTTC,TMBC,GR_ZERFS.
CLEAR:GR_ZERFS.
GR_ZERFS-SIGN = 'I'.
GR_ZERFS-OPTION = 'EQ'.
GR_ZERFS-LOW = '06'. "
APPEND GR_ZERFS.
CLEAR:GR_ZERFS.
GR_ZERFS-SIGN = 'I'.
GR_ZERFS-OPTION = 'EQ'.
GR_ZERFS-LOW = '07'. "
APPEND GR_ZERFS.
CLEAR:GFD_XVIMG.
CLEAR:GT_ZTYSP.
GFD_VBELN = GFD_VBEPO+0(10).
GFD_POSNR = GFD_VBEPO+10(6).
2.2.5"根据交货单获取运输单项目信息
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_ZTYSP
FROM ZTYSP
WHERE VBELN = GFD_VBELN.
IF SY-SUBRC = 0.
2.2.6"判断交货单是否已经装过车
IF GT_ZTYSP-ZEYSO <> GFD_ZEYSO.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单' GT_ZTYSP-VBELN INTO GFD_MES.
CONCATENATE '已经在运输单' GFD_ZEYSO '中' INTO GFD_MES1.
CALL SCREEN SCRN_IMSG.
CLEAR:GFD_VBELN.
ENDIF.
ELSE.
CLEAR:GT_ZTYSP.
2.2.7"判断送达方是否一致
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_ZTYSP "送达方一致
FROM ZTYSP
WHERE ZEYSO = GFD_ZEYSO
AND VBELN <> GFD_VBELN.
IF SY-SUBRC = 0.
CLEAR:GT_LIPS-VGBEL.
SELECT SINGLE VGBEL INTO GT_LIPS-VGBEL
FROM LIPS
WHERE VBELN = GFD_VBELN.
CLEAR:VBPA-KUNNR.
SELECT SINGLE KUNNR INTO VBPA-KUNNR
FROM VBPA
WHERE VBELN = GT_LIPS-VGBEL
AND PARVW = 'WE'.
*
CLEAR:GT_LIPS-VGBEL.
SELECT SINGLE VGBEL INTO GT_LIPS-VGBEL
FROM LIPS
WHERE VBELN = GT_ZTYSP-VBELN
AND POSNR = GT_ZTYSP-POSNR.
CLEAR:L_KUNNR.
SELECT SINGLE KUNNR INTO L_KUNNR
FROM VBPA
WHERE VBELN = GT_LIPS-VGBEL
AND PARVW = 'WE'.
IF L_KUNNR NE VBPA-KUNNR.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单' GT_ZTYSP-VBELN INTO GFD_MES.
CONCATENATE '的送达方与' GFD_ZEYSO INTO GFD_MES1.
CONCATENATE '的其它行不一致' GT_ZTYSP-VBELN INTO GFD_MES1.
CALL SCREEN SCRN_IMSG.
CLEAR:GFD_VBELN.
ENDIF.
CLEAR:ID,LANGUAGE,NAME,OBJECT,L_STRESS1.
REFRESH:LINES .
2.2.8"判断送货地址是否一致
ID = 'Z001'.
OBJECT = 'VBBK'.
CONCATENATE GT_ZTYSP-VBELN '' INTO NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = ID
LANGUAGE = SY-LANGU
NAME = NAME
OBJECT = OBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT LINES.
CONCATENATE L_STRESS1 LINES-TDLINE INTO L_STRESS1.
CLEAR:LINES.
ENDLOOP.
CLEAR:ID,LANGUAGE,NAME,OBJECT,L_STRESS2.
REFRESH:LINES .
ID = 'Z001'.
OBJECT = 'VBBK'.
CONCATENATE GFD_VBELN '' INTO NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = ID
LANGUAGE = SY-LANGU
NAME = NAME
OBJECT = OBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT LINES.
CONCATENATE L_STRESS2 LINES-TDLINE INTO L_STRESS2.
CLEAR:LINES.
ENDLOOP.
IF L_STRESS2 <> L_STRESS1.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单' GFD_VBELN INTO GFD_MES.
CONCATENATE '的送货地址与' GFD_ZEYSO INTO GFD_MES1.
CONCATENATE '的其它行不一致' GT_ZTYSP-VBELN INTO GFD_MES2.
CALL SCREEN SCRN_IMSG.
CLEAR:GFD_VBELN.
ENDIF.
ENDIF.
ENDIF.
2.2.9"获取交货单抬头信息
IF GFD_VBELN IS NOT INITIAL.
CLEAR:LIKP.
SELECT SINGLE * INTO LIKP
FROM LIKP
WHERE VBELN = GFD_VBELN.
2.2.10"获取交货单是否过账
CLEAR:L_WBSTK.
SELECT SINGLE WBSTK INTO L_WBSTK
FROM VBUK
WHERE VBELN = GFD_VBELN.
" IF LIKP-WADAT_IST <> '00000000'.
IF L_WBSTK = 'C'.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单已过账!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
CLEAR:GFD_VBELN.
ELSE.
2.2.11"获取交货单明细信息
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_LIPS
FROM LIPS
WHERE VBELN = GFD_VBELN
AND POSNR = GFD_POSNR.
DESCRIBE TABLE GT_LIPS LINES GFD_SUMLIX.
IF GFD_SUMLIX NE 0.
SORT GT_LIPS BY VBELN POSNR.
GFD_ZLIX = 1.
CLEAR:GT_LIPS.
READ TABLE GT_LIPS INDEX GFD_ZLIX.
IF SY-SUBRC = 0.
GFD_LGORT = GT_LIPS-LGORT.
2.2.12 "获取库存地
IF GFD_LGORT IS INITIAL.
SELECT SINGLE LGORT INTO GFD_LGORT
FROM ZTLORT
WHERE VBELN = GFD_VBELN
AND POSNR = GFD_POSNR.
ENDIF.
"获取物料描述
SELECT SINGLE MAKTX INTO GFD_MAKTX
FROM MAKT
WHERE MATNR = GT_LIPS-MATNR
AND SPRAS = SY-LANGU.
SELECT SINGLE MTART INTO GFD_MTART
FROM MARA
WHERE MATNR = GT_LIPS-MATNR.
SELECT SINGLE ZMARK INTO GFD_MARK
FROM ZTMGL
WHERE WERKS = GT_LIPS-WERKS
AND LGORT = GFD_LGORT.
2.2.14"如果不启用条码管理,则从ZTLIPS中获取装车数量,否则从ZTTBC获取装车数量
IF GFD_MARK = 'X'.
SELECT SUM( ZFIMG ) INTO GFD_XVIMG
FROM ZTLIPS
WHERE VBELN = GT_LIPS-VBELN
AND POSNR = GT_LIPS-POSNR
AND ZERFS IN GR_ZERFS.
ELSE.
CASE GFD_MTART.
WHEN 'ND01' OR 'NDK1'.
SELECT SUM( MENGE ) INTO GFD_XVIMG
FROM ZTTBC
WHERE VBELF = GT_LIPS-VBELN
AND POSNF = GT_LIPS-POSNR
AND ZERFS IN GR_ZERFS.
WHEN OTHERS .
SELECT SUM( ZFIMG ) INTO GFD_XVIMG
FROM ZTLIPS
WHERE VBELN = GT_LIPS-VBELN
AND POSNR = GT_LIPS-POSNR
AND ZERFS IN GR_ZERFS.
ENDCASE.
ENDIF.
ENDIF.
ELSE.
CLEAR:GFD_VBELN.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单在SAP不存在!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDIF.
ENDIF.
ENDIF.
2.2.15"判断是否进行条码扫描,如果扫码,调用3013界面,如果不扫托条码,则调用3014界面
IF GFD_VBELN IS NOT INITIAL.
IF GFD_ZECHL IS INITIAL.
SET CURSOR FIELD 'GFD_ZECHL'.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '车辆信息为空!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
CASE GFD_MTART.
WHEN 'ND01' OR 'NDK1'.
IF GT_LIPS-MATNR+0(8) = '00000011' OR GFD_MARK = 'X'. "
IF GFD_XVIMG >= GT_LIPS-LFIMG.
MESSAGE '此项已装车完!' TYPE 'W'.
PERFORM FRM_3014_INIT.
CALL SCREEN SCRN_ZVBLN_314.
ELSE.
GFD_XVIMG = GT_LIPS-LFIMG.
PERFORM FRM_3014_INIT.
CALL SCREEN SCRN_ZVBLN_314.
ENDIF.
ELSE.
IF GFD_XVIMG >= GT_LIPS-LFIMG.
MESSAGE '此项已装车完!' TYPE 'W'.
PERFORM FRM_3013_INIT.
GFD_JVIMG = GT_LIPS-LFIMG - GFD_XVIMG.
SELECT COUNT(*) INTO GFD_SMNGE
FROM ZTTBC
WHERE VBELF = GFD_VBELN
AND POSNF = GFD_POSNR
AND ZERFS = '06'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GTTC
FROM ZTTBC
WHERE VBELF = GFD_VBELN
AND POSNF = GFD_POSNR
AND ZERFS = '06'.
CALL SCREEN SCRN_ZVBLN_313.
ELSE.
PERFORM FRM_3013_INIT.
GFD_JVIMG = GT_LIPS-LFIMG - GFD_XVIMG.
SELECT COUNT(*) INTO GFD_SMNGE
FROM ZTTBC
WHERE VBELF = GFD_VBELN
AND POSNF = GFD_POSNR
AND ZERFS = '06'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GTTC
FROM ZTTBC
WHERE VBELF = GFD_VBELN
AND POSNF = GFD_POSNR
AND ZERFS = '06'.
CALL SCREEN SCRN_ZVBLN_313.
ENDIF.
ENDIF.
WHEN OTHERS.
IF GFD_XVIMG >= GT_LIPS-LFIMG.
MESSAGE '此项已装车完!' TYPE 'W'.
PERFORM FRM_3014_INIT.
CALL SCREEN SCRN_ZVBLN_314.
ELSE.
GFD_XVIMG = GT_LIPS-LFIMG.
PERFORM FRM_3014_INIT.
CALL SCREEN SCRN_ZVBLN_314.
ENDIF.
ENDCASE.
ENDIF.
ELSE.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单未拣配或已过账!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDIF.
2.2.16"进行拖条码扫描,获取旧条码号
IF GFD_ZECHL IS INITIAL.
SET CURSOR FIELD 'GFD_ZECHL'.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '车辆信息为空!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
DATA L_ZZTBC TYPE ZETBC.
IF TMBC-ZETBC IS NOT INITIAL.
CONDENSE TMBC-ZETBC.
LEN = STRLEN( TMBC-ZETBC ).
IF LEN < 25.
SELECT SINGLE ZETBC
INTO L_ZZTBC
FROM ZTTBC
WHERE ZEOBC = TMBC-ZETBC.
IF SY-SUBRC NE 0.
PERFORM ZZ_MESSAGE USING EMSG G_MOTYP '021' TMBC-ZETBC '' '' '' CHANGING G_ANS.
RETURN.
ELSE.
TMBC-ZETBC = L_ZZTBC.
ENDIF.
ENDIF.
ENDIF.
IF G_COB = 'X'. "删除
PERFORM FRM_DELETE_3013.
ELSE.
PERFORM FRM_CHECK_ZETBC_3013.
ENDIF.
ENDIF.
2.2.17"检查装车数量与需求数量
IF GFD_JVIMG = GFD_ZVIMG.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '装车数量与需求数一样,不能扫描' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
2.2.18"获取托条码信息并进行物料检查
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GTTC
FROM ZTTBC
WHERE ZETBC = TMBC-ZETBC
AND VBELF = GFD_VBELN
AND POSNF = GFD_POSNR.
IF SY-SUBRC = 0.
IF GTTC-MATNR NE GT_LIPS-MATNR AND GTTC-VBELN IS NOT INITIAL.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '物料不一致!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
CLEAR GTTC.
ELSE.
IF GTTC-VBELN NE GT_LIPS-VGBEL AND GTTC-VBELN IS NOT INITIAL.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '销售单不一致!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
CLEAR GTTC.
ELSE.
2.2.19"如果托条码状态为05,才进行装车,否则,反馈条码状态信息
CASE GTTC-ZERFS.
WHEN '05'.
WHEN '06'.
IF GTTC-VBELF NE GT_LIPS-VBELN.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '托条码已在提货单' GTTC-VBELF '中!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '托条码已扫描!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDIF.
CLEAR GTTC.
WHEN OTHERS.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '托条码未拣配!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
CLEAR GTTC.
ENDCASE.
IF GTTC-ZETBC IS NOT INITIAL.
" IF GTTC-CHARG IS NOT INITIAL.
SELECT SINGLE CHARG INTO GTTC-CHARG
FROM MSKA"MCHB
WHERE MATNR = GT_LIPS-MATNR
AND WERKS = GT_LIPS-WERKS
AND LGORT = GFD_LGORT
AND CHARG = GTTC-CHARG
AND VBELN = GTTC-VBELN
AND POSNR = GTTC-POSNR.
IF SY-SUBRC <> 0 AND GTTC-VBELN IS NOT INITIAL.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '销售订单库存不正确' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
READ TABLE GTTC INTO ZTTBC WITH KEY ZETBC = GTTC-ZETBC.
IF SY-SUBRC = 0.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '托条码已扫描!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
2.2.20"更新托条码状态
IF GTTC-ZERFS = '05'.
GFD_ZVIMG = GFD_ZVIMG + GTTC-MENGE.
ENDIF.
GFD_SMNGE = GFD_SMNGE + 1.
APPEND GTTC.
2.2.21"时时保存装车信息
PERFORM FRM_SAVALIV3013.
DATA:LT_ZTLORT TYPE ZTLORT.
IF GTTC-ZERFS = '05'.
GFD_XVIMG = GFD_XVIMG + GTTC-MENGE.
GFD_JVIMG = GFD_JVIMG - GTTC-MENGE.
ENDIF.
IF GFD_XVIMG > GT_LIPS-LFIMG.
GFD_XVIMG = GFD_XVIMG - GTTC-MENGE.
GFD_JVIMG = GFD_JVIMG + GTTC-MENGE.
DELETE GTTC WHERE ZETBC = GTTC-ZETBC.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '装车数量大于需求数' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
GTTC-ZERFS = '06'.
MODIFY ZTTBC FROM GTTC.
IF SY-SUBRC = 0.
REFRESH:GTDC.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GTDC
FROM ZTMBC
WHERE ZETBC = GTTC-ZETBC
AND ZERFS = '05'.
LOOP AT GTDC INTO ZTMBC.
ZTMBC-VBELF = GT_LIPS-VBELN.
ZTMBC-POSNF = GT_LIPS-POSNR.
ZTMBC-ZERFS = '06'.
MODIFY GTDC FROM ZTMBC.
CLEAR:ZTMBC.
ENDLOOP.
MODIFY ZTMBC FROM TABLE GTDC.
DATA RFL TYPE ZTRFL.
DATA RFP LIKE TABLE OF ZTRFP WITH HEADER LINE.
CLEAR:RFL.
REFRESH:RFP.
PERFORM FRM_GET_NUMBER USING RFL-ZEOBJ.
RFL-ZEOTP = 'E'.
RFL-ERNAM = G_UNAME.
RFL-ERZET = SY-UZEIT.
RFL-ERDAT = SY-DATUM.
RFL-ZETMN = GFD_SMNGE.
RFP-ZEOBJ = RFL-ZEOBJ.
RFP-ZPOSI = SY-TABIX.
RFP-MATNR = GTTC-MATNR.
RFP-ZETBC = GTTC-ZETBC.
RFP-AUFNR = GTTC-ZEBAF.
RFP-VBELN = GTTC-VBELN.
RFP-POSNR = GTTC-POSNR.
RFP-WERKS = GTTC-WERKS.
RFP-LGORT = GTTC-LGORT.
RFP-CHARG = GTTC-CHARG.
RFP-VBELF = GTTC-VBELF.
RFP-POSNF = GTTC-POSNF.
RFP-EBELN = GTTC-EBELN.
RFP-EBELP = GTTC-EBELP.
*ZEFMN = ZEFMN
*ZITEM = ZITEM.
*ZEYSO = ZEYSO.
RFP-ZERFS = GTTC-ZERFS.
MODIFY ZTRFL FROM RFL.
MODIFY ZTRFP FROM RFP.
PERFORM FRM_SAVEYSK_3013.
ELSE.
GFD_XVIMG = GFD_XVIMG - GTTC-MENGE.
GFD_JVIMG = GFD_JVIMG + GTTC-MENGE.
ENDIF.
ENDIF.
ENDFORM.
ENDIF.
ENDIF.
* ELSE.
* READ TABLE GTTC INTO ZTTBC WITH KEY ZETBC = GTTC-ZETBC.
* IF SY-SUBRC = 0.
* CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
*
* CONCATENATE '托条码已扫描!' '' INTO GFD_MES.
* CALL SCREEN SCRN_IMSG.
* ELSE.
*
* IF GTTC-ZERFS = '05'.
* GFD_ZVIMG = GFD_ZVIMG + GTTC-MENGE.
* ENDIF.
*
* GFD_SMNGE = GFD_SMNGE + 1.
* APPEND GTTC.
* ENDIF.
*
* ENDIF.
ENDIF.
* SELECT SINGLE MAKTX INTO GFD_MAKTX
* FROM MAKT
* WHERE MATNR = GTTC-MATNR
* AND SPRAS = SY-LANGU.
ENDIF.
ENDIF.
ELSE.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '托条码未拣配!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDIF.
ENDIF.
2.2.22"删除装车托条码,获取托条码信息
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GTTC
FROM ZTTBC
WHERE ZETBC = TMBC-ZETBC
AND VBELF = GFD_VBELN
AND POSNF = GFD_POSNR.
IF SY-SUBRC = 0.
IF GTTC-MATNR NE GT_LIPS-MATNR AND GTTC-VBELN IS NOT INITIAL.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '物料不一致!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
* SELECT SINGLE MAKTX INTO GFD_MAKTX
* FROM MAKT
* WHERE MATNR = GTTC-MATNR
* AND SPRAS = SY-LANGU.
IF GTTC-VBELN NE GT_LIPS-VGBEL AND GTTC-VBELN IS NOT INITIAL.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '销售单不一致!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
CASE GTTC-ZERFS.
WHEN '05' .
DELETE GTTC WHERE ZETBC = GTTC-ZETBC.
IF SY-SUBRC = 0.
MESSAGE '删除成功!' TYPE 'S' .
GFD_SMNGE = GFD_SMNGE - 1.
GFD_ZVIMG = GFD_ZVIMG - GTTC-MENGE.
ENDIF.
WHEN '06'.
"将托条码状态更新为05状态
GTTC-ZERFS = '05'.
GTTC-ZECHL = ''.
UPDATE ZTTBC FROM GTTC.
REFRESH:GTDC.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GTDC
FROM ZTMBC
WHERE ZETBC = GTTC-ZETBC
AND ZERFS = '06'.
LOOP AT GTDC INTO ZTMBC.
ZTMBC-ZERFS = '05'.
MODIFY GTDC FROM ZTMBC.
CLEAR:ZTMBC.
ENDLOOP.
MODIFY ZTMBC FROM TABLE GTDC.
DELETE GTTC WHERE ZETBC = GTTC-ZETBC.
IF SY-SUBRC = 0.
GFD_SMNGE = GFD_SMNGE - 1.
GFD_XVIMG = GFD_XVIMG - GTTC-MENGE.
ELSE.
GFD_XVIMG = GFD_XVIMG - GTTC-MENGE. "已保存扫描数
GFD_ZVIMG = GFD_ZVIMG - GTTC-MENGE.
ENDIF.
GFD_JVIMG = GFD_JVIMG + GTTC-MENGE.
PERFORM FRM_DEL3013_LOG.
MESSAGE '删除成功!' TYPE 'S' .
WHEN OTHERS.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '托条码未装车!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDCASE.
ENDIF.
ENDIF.
ELSE.
DELETE GTTC WHERE ZETBC = TMBC-ZETBC.
IF SY-SUBRC = 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GTTC
FROM ZTTBC
WHERE ZETBC = TMBC-ZETBC.
GFD_SMNGE = GFD_SMNGE - 1.
GFD_ZVIMG = GFD_ZVIMG - GTTC-MENGE.
MESSAGE '删除成功!' TYPE 'S' .
ELSE.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '条码未装车!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDIF.
ENDIF.
2.2.23 "不进行条码管理,则只对数量进行确认装车
DATA:L_ZTLIPS TYPE ZTLIPS.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF L_ZTLIPS
FROM ZTLIPS
WHERE VBELN = GFD_VBELN
AND POSNR = GFD_POSNR.
CASE L_ZTLIPS-ZERFS.
WHEN '05'.
L_ZTLIPS-ZFIMG = GFD_XVIMG.
L_ZTLIPS-ZERFS = '06'.
MODIFY ZTLIPS FROM L_ZTLIPS.
PERFORM FRM_SAVEYSK_3013.
LEAVE TO SCREEN 0.
WHEN OTHERS.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '交货单未拣配!' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ENDCASE.
2.2.24"对运输单进行最终确认
DATA:L_CONT TYPE C.
DATA:L_LINX TYPE I.
DATA:L_ETENR TYPE ZTYSD-ETENR.
DATA:L_ZTTBC_C LIKE ZTTBC_C OCCURS 0 WITH HEADER LINE.
DATA:T_LIKP LIKE LIKP OCCURS 0 WITH HEADER LINE.
DATA:ZLINX TYPE I.
ZLINX = 0.
DATA:ID LIKE THEAD-TDID,
LANGUAGE LIKE THEAD-TDSPRAS,
NAME LIKE THEAD-TDNAME,
OBJECT LIKE THEAD-TDOBJECT.
DATA:LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
GFD_MES = TITLE_XSZC.
GFD_MES1 = '是否确认运输单'.
CALL SCREEN SCRN_WMSG.
IF G_ANS = 'Y'.
REFRESH:L_ZTTBC_C,T_LIKP.
REFRESH:GR_ZERFS.
CLEAR:GR_ZERFS.
GR_ZERFS-SIGN = 'I'.
GR_ZERFS-OPTION = 'EQ'.
GR_ZERFS-LOW = '06'. "装车
APPEND GR_ZERFS.
CLEAR:GT_ZTYSK.
REFRESH:GT_ZTYSP.
2.2.25"获取运输单抬头信息
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_ZTYSK
FROM ZTYSK
WHERE ZEYSO = GFD_ZEYSO.
IF SY-SUBRC <> 0.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '运输单不存在' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
ELSE.
IF GT_ZTYSK-KZERM = 'X'.
MESSAGE '运输单已经确认' TYPE 'S'.
ELSE.
CLEAR:L_CONT.
2.2.26"获取运输单行项目信息
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_ZTYSP
FROM ZTYSP
WHERE ZEYSO = GFD_ZEYSO.
DESCRIBE TABLE GT_ZTYSP LINES ZLINX.
IF ZLINX <> 0.
REFRESH:GT_LIPS.
2.2.27"获取交货单明细信息
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_LIPS
FROM LIPS
FOR ALL ENTRIES IN GT_ZTYSP
WHERE VBELN = GT_ZTYSP-VBELN.
ELSE.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '运输单没有行项目' '' INTO GFD_MES.
CALL SCREEN SCRN_IMSG.
L_CONT = 'X'.
ENDIF.
"更新库存地
LOOP AT GT_LIPS.
CLEAR:GFD_MARK,GFD_MTART.
GFD_LGORT = GT_LIPS-LGORT.
IF GFD_LGORT IS INITIAL.
SELECT SINGLE LGORT INTO GFD_LGORT
FROM ZTLORT
WHERE VBELN = GT_LIPS-VBELN
AND POSNR = GT_LIPS-POSNR.
ENDIF.
CLEAR:GFD_XVIMG.
SELECT SINGLE MTART INTO GFD_MTART
FROM MARA
WHERE MATNR = GT_LIPS-MATNR.
SELECT SINGLE ZMARK INTO GFD_MARK
FROM ZTMGL
WHERE WERKS = GT_LIPS-WERKS
AND LGORT = GFD_LGORT.
IF GFD_MARK = 'X'.
SELECT SUM( ZFIMG ) INTO GFD_XVIMG
FROM ZTLIPS
WHERE VBELN = GT_LIPS-VBELN
AND POSNR = GT_LIPS-POSNR
AND ZERFS IN GR_ZERFS.
ELSE.
2.2.28"获取装车数量,并进行校验
CASE GFD_MTART.
WHEN 'ND01' OR 'NDK1'.
SELECT SUM( MENGE ) INTO GFD_XVIMG
FROM ZTTBC
WHERE VBELF = GT_LIPS-VBELN
AND POSNF = GT_LIPS-POSNR
AND ZERFS IN GR_ZERFS.
WHEN OTHERS .
SELECT SUM( ZFIMG ) INTO GFD_XVIMG
FROM ZTLIPS
WHERE VBELN = GT_LIPS-VBELN
AND POSNR = GT_LIPS-POSNR
AND ZERFS IN GR_ZERFS.
ENDCASE.
ENDIF.
IF GFD_XVIMG <> GT_LIPS-LFIMG.
L_CONT = 'X'.
CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
CONCATENATE '运输单' '' INTO GFD_MES.
CONCATENATE '交货单' GT_LIPS-VBELN INTO GFD_MES1.
CONCATENATE '项目' GT_LIPS-POSNR '装车数量不足!' INTO GFD_MES2.
CALL SCREEN SCRN_IMSG.
L_CONT = 'X'.
ELSE.
ENDIF.
CLEAR:GT_LIPS.
ENDLOOP.
2.2.29"获取托条码信息,并更新托条码
IF L_CONT IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE L_ZTTBC_C
FROM ZTTBC
FOR ALL ENTRIES IN GT_ZTYSP
WHERE VBELF = GT_ZTYSP-VBELN
AND POSNF = GT_ZTYSP-POSNR
AND VBELN EQ ''.
SORT GT_LIPS BY VBELN POSNR.
LOOP AT L_ZTTBC_C.
CLEAR:GT_LIPS.
READ TABLE GT_LIPS WITH KEY VBELN = L_ZTTBC_C-VBELF POSNR = L_ZTTBC_C-POSNF BINARY SEARCH.
L_ZTTBC_C-VBELN = GT_LIPS-VGBEL.
L_ZTTBC_C-POSNR = GT_LIPS-VGPOS.
L_ZTTBC_C-ZZMAT = GT_LIPS-MATNR.
CLEAR:GT_ZTYSP.
READ TABLE GT_ZTYSP WITH KEY VBELN = L_ZTTBC_C-VBELF POSNR = L_ZTTBC_C-POSNF.
L_ZTTBC_C-JSORT = GT_ZTYSP-LGORT.
IF L_ZTTBC_C-JSORT IS INITIAL.
L_ZTTBC_C-JSORT = L_ZTTBC_C-LGORT.
ENDIF.
T_LIKP-VBELN = L_ZTTBC_C-VBELF.
COLLECT T_LIKP.
MODIFY L_ZTTBC_C.
CLEAR:L_ZTTBC_C.
ENDLOOP.
MODIFY ZTTBC_C FROM TABLE L_ZTTBC_C.
WAIT UP TO 1 SECONDS.
IF LINES( L_ZTTBC_C ) <> 0.
CALL FUNCTION 'ZMM_TRANS_MATNR' STARTING NEW TASK 'ZMM_TRANS_MATNR'
* IMPORTING
* O_FLAG = L_CONT
TABLES
T_LIKP = T_LIKP.
IF L_CONT IS NOT INITIAL.
CLEAR:L_CONT.
* CLEAR:GFD_MES,GFD_MES1,GFD_MES2,GFD_MES3,GFD_MES4.
*
* CONCATENATE '运输单' '' INTO GFD_MES.
* CONCATENATE '库存不足' '不能确认!' INTO GFD_MES1.
* CALL SCREEN SCRN_IMSG.
ENDIF.
ENDIF.
ENDIF.
IF L_CONT IS INITIAL.
GT_ZTYSK-KZERM = 'X'.
2.2.30"获取装车重量,用以计算运费
SELECT SUM( BRGEW ) INTO GT_ZTYSK-BRGEW
FROM ZTYSP
WHERE ZEYSO = GFD_ZEYSO
."AND MTART IN ('ND01','NDK1').
GT_ZTYSK-PRSDT = SY-DATUM.
READ TABLE GT_ZTYSP INDEX 1.
CLEAR:ID,LANGUAGE,NAME,OBJECT.
REFRESH:LINES .
2.2.31"获取送货地址及电话
ID = 'Z001'.
OBJECT = 'VBBK'.
CONCATENATE GT_ZTYSP-VBELN '' INTO NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = ID
LANGUAGE = SY-LANGU
NAME = NAME
OBJECT = OBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR:GT_ZTYSK-SHADR.
LOOP AT LINES.
CONCATENATE GT_ZTYSK-SHADR LINES-TDLINE INTO GT_ZTYSK-SHADR.
CLEAR:LINES.
ENDLOOP.
CLEAR:ID,LANGUAGE,NAME,OBJECT.
REFRESH:LINES .
ID = 'Z005'.
OBJECT = 'VBBK'.
CONCATENATE GT_ZTYSP-VBELN '' INTO NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = ID
LANGUAGE = SY-LANGU
NAME = NAME
OBJECT = OBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR:GT_ZTYSK-CATNM.
LOOP AT LINES.
CONCATENATE GT_ZTYSK-CATNM LINES-TDLINE INTO GT_ZTYSK-CATNM.
CLEAR:LINES.
ENDLOOP.
CLEAR:ID,LANGUAGE,NAME,OBJECT.
REFRESH:LINES .
ID = 'Z006'.
OBJECT = 'VBBK'.
CONCATENATE GT_ZTYSP-VBELN '' INTO NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = ID
LANGUAGE = SY-LANGU
NAME = NAME
OBJECT = OBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR:GT_ZTYSK-CATNO.
LOOP AT LINES.
CONCATENATE GT_ZTYSK-CATNO LINES-TDLINE INTO GT_ZTYSK-CATNO.
CLEAR:LINES.
ENDLOOP.
CLEAR:ID,LANGUAGE,NAME,OBJECT.
REFRESH:LINES .
ID = 'Z007'.
OBJECT = 'VBBK'.
CONCATENATE GT_ZTYSP-VBELN '' INTO NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = ID
LANGUAGE = SY-LANGU
NAME = NAME
OBJECT = OBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR:GT_ZTYSK-KTEXT.
LOOP AT LINES.
CONCATENATE GT_ZTYSK-KTEXT LINES-TDLINE INTO GT_ZTYSK-KTEXT.
CLEAR:LINES.
ENDLOOP.
MODIFY ZTYSK FROM GT_ZTYSK.
IF SY-SUBRC = 0.
REFRESH:GTTC.
L_LINX = 0.
DESCRIBE TABLE GT_ZTYSP LINES L_LINX.
IF L_LINX <> 0.
SORT GT_ZTYSP BY VBELN POSNR.
2.2.32"通过托条码,获取交货单的批次信息
SELECT * INTO CORRESPONDING FIELDS OF TABLE GTTC
FROM ZTTBC
FOR ALL ENTRIES IN GT_ZTYSP
WHERE VBELF = GT_ZTYSP-VBELN
AND POSNF = GT_ZTYSP-POSNR.
REFRESH:GT_ZTYSD.
SORT GT_LIPS BY VBELN POSNR.
LOOP AT GTTC.
CLEAR:GT_ZTYSD.
GT_ZTYSD-ZEYSO = GFD_ZEYSO.
CLEAR:GT_ZTYSP.
READ TABLE GT_ZTYSP WITH KEY VBELN = GTTC-VBELF POSNR = GTTC-POSNF.
GT_ZTYSD-ZITEM = GT_ZTYSP-ZITEM.
GT_ZTYSD-CHARG = GTTC-CHARG.
GT_ZTYSD-LFIMG = GTTC-MENGE.
GTTC-LGORT = GT_ZTYSP-LGORT.
GTTC-ZZMAT = GTTC-MATNR.
COLLECT GT_ZTYSD.
CLEAR:GT_LIPS.
READ TABLE GT_LIPS WITH KEY VBELN = GTTC-VBELF POSNR = GTTC-POSNF BINARY SEARCH.
GTTC-VBELN = GT_LIPS-VGBEL.
GTTC-POSNR = GT_LIPS-VGPOS.
GTTC-MATNR = GT_LIPS-MATNR.
MODIFY GTTC.
CLEAR:GTTC.
ENDLOOP.
MODIFY ZTTBC FROM TABLE GTTC.
SORT GT_ZTYSD BY ZEYSO ZITEM CHARG.
L_ETENR = '0001'.
LOOP AT GT_ZTYSD.
AT NEW ZITEM.
L_ETENR = '0001'.
ENDAT.
GT_ZTYSD-ETENR = L_ETENR.
L_ETENR = L_ETENR + 1.
MODIFY GT_ZTYSD.
ENDLOOP.
DELETE FROM ZTYSD WHERE ZEYSO = GFD_ZEYSO.
MODIFY ZTYSD FROM TABLE GT_ZTYSD.
ENDIF.
PERFORM FRM_3011LOG.
MESSAGE '运输单确认成功' TYPE 'S'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.