这是中文环境下做的程序, 复制过来,代码间的空格错开了,下面的OJT变成日文的了,到时候再贴出来。
文本消息
000复数选择
001仓库保
002管场所
003出库路径
004出库预定日
005个别选择
006出库凭证番号
007入出库预定
008I/F
009印刷
010打印设备
011预处理
012送货
013送货(无偿)
014紧急送货
015紧急送货(无偿)
016输出
017移送
018移管
019上海大金空调有限公司
020再印刷
021提 货 单
022经销店名称
023提货预定日
024经销店编号
025出库凭证
026经销店电话
027出库路径
028订单号
029运货车号
030交易者号
031品名代码
032管区
033数量
034机种类别
035机型管理
036提货仓库
037签名
038印刷时间
039第
040页
041共
042送 货 单
043送货地址
044仓库名称
045仓库
046移送移管的指令传票
*&
--
-------------------------------------------------------------------*
*&
程序名 :ZMMR10040_3_A140
*&
分类 :物流ー出荷管理
*&
机能番号 :MM
-
L012
*&
机能名称 :货单输出
*&
作成者 :
*&
作成日 :
2005
/
07
/
18
*&
版本 :
1.0
*&
--
-------------------------------------------------------------------*
*&
*&
*&
--
-------------------------------------------------------------------*
REPORT ZMMR10040_3_A140
NO STANDARD PAGE HEADING
MESSAGE
-
ID ZXX001.
*
--
--------------------------------------------------------------------*
*
--
----数据表申明
TABLES: MSEG, "凭证段:物料
MKPF, "抬头:物料凭证
LIKP. "SD凭证:交货抬头数据
*
--
-------------------------------------------------------------------*
*
--
----屏幕参数定义
SELECTION
-
SCREEN
BEGIN
OF
BLOCK BL1.
*
复数选择
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN POSITION
3
.
PARAMETERS P_RDO1 RADIOBUTTON
GROUP
GRP1
DEFAULT
'
X
'
USER
-
COMMAND RADI.
SELECTION
-
SCREEN COMMENT
5
(
8
)
TEXT
-
000
.
SELECTION
-
SCREEN
END
OF
LINE.
*
仓库
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
8
)
TEXT
-
001
.
SELECTION
-
SCREEN POSITION
23
.
PARAMETERS PA_WERKS
LIKE
MSEG
-
WERKS .
SELECTION
-
SCREEN
END
OF
LINE.
*
保管场所
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
8
)
TEXT
-
002
.
SELECTION
-
SCREEN POSITION
23
.
PARAMETERS PA_LGORT
LIKE
MSEG
-
LGORT .
SELECTION
-
SCREEN
END
OF
LINE.
*
出库路径
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
8
)
TEXT
-
003
.
SELECTION
-
SCREEN POSITION
20
.
SELECT
-
OPTIONS SE_VSBED
FOR
LIKP
-
VSBED.
SELECTION
-
SCREEN
END
OF
LINE.
*
出库预定日
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
10
)
TEXT
-
004
.
SELECTION
-
SCREEN POSITION
20
.
SELECT
-
OPTIONS SE_DATUM
FOR
MKPF
-
BUDAT.
SELECTION
-
SCREEN
END
OF
LINE.
SELECTION
-
SCREEN SKIP
1
.
*
个别选择
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN POSITION
3
.
PARAMETERS P_RDO2 RADIOBUTTON
GROUP
GRP1.
SELECTION
-
SCREEN COMMENT
5
(
8
)
TEXT
-
005
.
SELECTION
-
SCREEN
END
OF
LINE.
*
出库凭证番号
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
12
)
TEXT
-
006
.
SELECTION
-
SCREEN POSITION
20
.
SELECT
-
OPTIONS SE_VBELN
FOR
LIKP
-
VBELN.
SELECTION
-
SCREEN
END
OF
LINE.
*
入出库预定
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
10
)
TEXT
-
007
.
SELECTION
-
SCREEN POSITION
20
.
SELECT
-
OPTIONS SE_RSNUM
FOR
MKPF
-
MBLNR.
SELECTION
-
SCREEN
END
OF
LINE.
SELECTION
-
SCREEN SKIP
1
.
SELECTION
-
SCREEN ULINE
1
(
80
).
SELECTION
-
SCREEN SKIP
1
.
*
I
/
F
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN POSITION
3
.
PARAMETERS P_RDO3 RADIOBUTTON
GROUP
GRP2
DEFAULT
'
X
'
USER
-
COMMAND RADI.
SELECTION
-
SCREEN COMMENT
5
(
8
)
TEXT
-
008
.
SELECTION
-
SCREEN
END
OF
LINE.
SELECTION
-
SCREEN SKIP
1
.
*
印刷
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN POSITION
3
.
PARAMETERS P_RDO4 RADIOBUTTON
GROUP
GRP2.
SELECTION
-
SCREEN COMMENT
5
(
8
)
TEXT
-
009
.
SELECTION
-
SCREEN
END
OF
LINE.
SELECTION
-
SCREEN SKIP
1
.
*
打印设备
SELECTION
-
SCREEN
BEGIN
OF
LINE.
SELECTION
-
SCREEN COMMENT
10
(
8
)
TEXT
-
010
.
SELECTION
-
SCREEN POSITION
23
.
PARAMETERS PA_PDEST
LIKE
PRI_PARAMS
-
PDEST .
SELECTION
-
SCREEN
END
OF
LINE.
SELECTION
-
SCREEN
END
OF
BLOCK BL1.
*
--
-------------------------------------------------------------------*
*
--
----类型定义
*
提货
/
送货
/
移送 抬头表
TYPES:
BEGIN
OF
TYP_LIKP,
ZZOP2FLG
LIKE
LIPS
-
ZZOP2FLG, "再印刷标志位
NAME1
LIKE
ADRC
-
NAME1, "经销店名称
WADAT
LIKE
LIKP
-
WADAT, "提货预定日
KUNNR
LIKE
LIKP
-
KUNNR, "经销点编号
VBELN
LIKE
LIKP
-
VBELN, "出库凭证
TEL_NUMBER
LIKE
ADRC
-
TEL_NUMBER, "经销店电话
VSBED
LIKE
LIKP
-
VSBED, "装运条件
PROCE(
20
) TYPE C , "出库路径
VGBEL
LIKE
LIPS
-
VGBEL, "订单号
STREET
LIKE
ADRC
-
STREET, "送货地址
WERKS2
LIKE
LIPS
-
WERKS, "提货仓库
NAME2
LIKE
T001W
-
NAME1, "提货仓库名称
WERKS
LIKE
LIKP
-
WERKS, "交货的接收工厂
"或移送场合仓库
Z001
LIKE
TLINE
-
TDLINE, "运货车号
Z002
LIKE
TLINE
-
TDLINE, "交易者号
Z003
LIKE
TLINE
-
TDLINE, "交易者名称
DEL_FLG TYPE C , "删除标志
END
OF
TYP_LIKP.
*
提货
/
送货
/
移送 明细数据
TYPES:
BEGIN
OF
TYP_LIPS,
VBELN
LIKE
LIKP
-
VBELN, "出库凭证
ZZOP2FLG
LIKE
LIPS
-
ZZOP2FLG, "再印刷标志位
WERKS
LIKE
LIPS
-
WERKS, "出库工厂
MATNR
LIKE
LIPS
-
MATNR, "品名代码
CHARG
LIKE
LIPS
-
CHARG, "管区
LFIMG
LIKE
LIPS
-
LFIMG, "数量
VGBEL
LIKE
LIPS
-
VGBEL, "单据编号
FLG TYPE C, "机型管理
NAME2
LIKE
T001W
-
NAME1, "出库仓库
MATERIAL_TYPE
LIKE
CAWNT
-
ATWTB, "机种类别
END
OF
TYP_LIPS.
*
移管 明细
TYPES:
BEGIN
OF
TYP_RESB,
NAME1
LIKE
ADRC
-
NAME1, "仓库名称
RSNUM
LIKE
RESB
-
RSNUM, "入出库预定
BDTER
LIKE
RESB
-
BDTER, "预定日
WERKS
LIKE
RESB
-
WERKS, "工厂
UMWRK
LIKE
RESB
-
UMWRK, "入库工厂
MATNR
LIKE
RESB
-
MATNR, "品名代码
CHARG
LIKE
RESB
-
CHARG, "管区
BDMNG
LIKE
RESB
-
BDMNG, "数量
TEL_NUMBER
LIKE
ADRC
-
TEL_NUMBER, "电话号码
STREET
LIKE
ADRC
-
STREET, "地址
FLG TYPE C, "机型管理
NAME2
LIKE
T001W
-
NAME1, "出库仓库
MATERIAL_TYPE
LIKE
CAWNT
-
ATWTB, "机种类别
VGBEL
LIKE
LIPS
-
VGBEL, "移送移管的指令传票
ZZOP2FLG
LIKE
RESB
-
ZZOP2FLG,
END
OF
TYP_RESB.
*
移管 抬头
TYPES:
BEGIN
OF
TYP_RKPF,
ZZOP2FLG
LIKE
LIPS
-
ZZOP2FLG, "再印刷标志位
NAME1
LIKE
ADRC
-
NAME1, "仓库名称
BDTER
LIKE
RESB
-
BDTER, "提货预定日
UMWRK
LIKE
RESB
-
UMWRK, "仓库
RSNUM
LIKE
RESB
-
RSNUM, "出库凭证
TEL_NUMBER
LIKE
ADRC
-
TEL_NUMBER, "经销店电话
VSBED
LIKE
LIKP
-
VSBED, "装运条件
PROCE(
20
) TYPE C , "出库路径
VGBEL
LIKE
LIPS
-
VGBEL, "移送移管的指令传票
STREET
LIKE
ADRC
-
STREET, "送货地址
WERKS
LIKE
RESB
-
WERKS, "提货仓库
NAME2
LIKE
T001W
-
NAME1, "提货仓库名称
END
OF
TYP_RKPF.
*
--
-------------------------------------------------------------------*
*
--
----工作区定义
DATA: REC_LIKP TYPE TYP_LIKP.
DATA: REC_LIPS TYPE TYP_LIPS.
DATA: REC_RESB TYPE TYP_RESB.
DATA: REC_RKPF TYPE TYP_RKPF.
DATA: REC_INDX
LIKE
INDX.
*
--
-------------------------------------------------------------------*
*
--
----内部表定义
DATA: TBL_LIKP TYPE
TABLE
OF
TYP_LIKP.
DATA: TBL_LIPS TYPE
TABLE
OF
TYP_LIPS.
DATA: TBL_RESB TYPE
TABLE
OF
TYP_RESB.
DATA: TBL_RKPF TYPE
TABLE
OF
TYP_RKPF.
*
--
-------------------------------------------------------------------*
*
--
----全局变量定义
DATA:G_DATE
LIKE
SY
-
DATUM. "本地日期
DATA:G_TIME
LIKE
SY
-
UZEIT. "本地时间
DATA:G_TFLG TYPE C. "日期标志
DATA:G_LINE(
4
) TYPE C VALUE
'
1
'
. "行的记数器
DATA:G_ZZOP2FLGCHAR(
6
) TYPE C. "
[
再印刷
]
字样
DATA:G_LIKP(
30
) TYPE C, "TBL_LIKP的ID
G_LIPS(
30
) TYPE C, "TBL_LIPS的ID
G_RKPF(
30
) TYPE C, "TBL_RKPF的ID
G_RESB(
30
) TYPE C. "TBL_RESB的ID
*
--
-------------------------------------------------------------------*
*
--
----常量定义
CONSTANTS:
C_RADI(
4
) TYPE C VALUE
'
RADI
'
, "常量RADI
C_NULL TYPE C VALUE
''
, "常量
''
C_X(
1
) TYPE C VALUE
'
X
'
, "常量X
C_S000(
4
) TYPE C VALUE
'
S000
'
, "常量S000
C_01
LIKE
LIKP
-
VSBED VALUE
'
01
'
, "常量01
C_02
LIKE
LIKP
-
VSBED VALUE
'
02
'
, "常量02
C_03
LIKE
LIKP
-
VSBED VALUE
'
03
'
, "常量03
C_04
LIKE
LIKP
-
VSBED VALUE
'
04
'
, "常量04
C_05
LIKE
LIKP
-
VSBED VALUE
'
05
'
, "常量05
C_11
LIKE
LIKP
-
VSBED VALUE
'
11
'
, "常量11
C_31
LIKE
LIKP
-
VSBED VALUE
'
31
'
, "常量31
C_ZZ
LIKE
LIKP
-
VSBED VALUE
'
ZZ
'
, "常量ZZ
C_000000(
6
) TYPE C VALUE
'
000000
'
, "常量000000
C_WE(
2
) TYPE C VALUE
'
WE
'
, "常量WE
C_261(
3
) TYPE C VALUE
'
261
'
, "常量261
C_Z001(
4
) TYPE C VALUE
'
Z001
'
, "常量Z001
C_Z002(
4
) TYPE C VALUE
'
Z002
'
, "常量Z002
C_Z003(
4
) TYPE C VALUE
'
Z003
'
, "常量Z003
C_MATNR(
5
) TYPE C VALUE
'
MATNR
'
, "常量MATNR
C_UTC8(
5
) TYPE C VALUE
'
UTC+8
'
, "常量UTC
+
8
C_1(
1
) TYPE C VALUE
'
1
'
, "常量1
C_2(
1
) TYPE C VALUE
'
2
'
, "常量2
C_A(
1
) TYPE C VALUE
'
+
'
, "常量
+
C_D(
1
) TYPE C VALUE
'
-
'
, "常量
-
C_SAPSCRIPT_ID(
12
) TYPE C VALUE
'
ZMM001_A140
'
, "SAPSCRIPT的ID
C_SMARTFORM_ID(
12
) TYPE C VALUE
'
ZMMR001_A140
'
, "SMARTFORM的ID
C_LIKP(
4
) TYPE C VALUE
'
LIKP
'
, "表名LIKP
C_LIPS(
4
) TYPE C VALUE
'
LIPS
'
, "表名LIPS
C_RKPF(
4
) TYPE C VALUE
'
RKPF
'
, "表名RKPF
C_RESB(
4
) TYPE C VALUE
'
RESB
'
, "表名RESB
C_ZH
LIKE
SYST
-
LANGU VALUE
'
1
'
, "中文语言
C_JA
LIKE
SYST
-
LANGU VALUE
'
J
'
, "日文语言
C_VBBK
LIKE
THEAD
-
TDOBJECT
VALUE
'
VBBK
'
, "常量VBBK
C_MARA
LIKE
BAPI1003_KEY
-
OBJECTTABLE
VALUE
'
MARA
'
, "常量MARA
C_ZCLASS_MAT
LIKE
BAPI1003_KEY
-
CLASSNUM
VALUE
'
ZCLASS_MAT
'
, "常量ZCLASS_MAT
C_001
LIKE
BAPI1003_KEY
-
CLASSTYPE
VALUE
'
001
'
, "常量001
C_TYPEC
LIKE
BAPI1003_ALLOC_VALUES_CHAR
-
CHARACT
VALUE
'
ZMACHINE_TYPE
'
. "常量ZMACHINE_TYPE
*&
--
------------------------------------------------------------------*
*&
--
----初处理事件
INITIALIZATION.
PERFORM SCREEN_INIT.
*&
--
------------------------------------------------------------------*
*&
--
----选择屏幕PBO事件
AT SELECTION
-
SCREEN OUTPUT.
PERFORM SCREEN_PBO.
*&
--
------------------------------------------------------------------*
*&
--
----选择屏幕PAI事件
AT SELECTION
-
SCREEN.
PERFORM SCREEN_PAI.
*&
--
------------------------------------------------------------------*
*&
--
----主处理事件
START
-
OF
-
SELECTION.
PERFORM PROCESS_MAIN.
*&
--
------------------------------------------------------------------*
*&
--
----末处理事件
END
-
OF
-
SELECTION.
PERFORM PROCESS_END.
*&
--
-------------------------------------------------------------------*
*&
FORM SCREEN_INIT
*&
功能: 保管场所的缺省值 S000
*&
--
-------------------------------------------------------------------*
FORM SCREEN_INIT.
PA_LGORT
=
C_S000.
ENDFORM. " SCREEN_INIT
*&
--
-------------------------------------------------------------------*
*&
FORM SCREEN_PBO
*&
功能: 选择屏幕PBO
*&
--
-------------------------------------------------------------------*
FORM SCREEN_PBO.
LOOP AT SCREEN. "循环屏幕参量
IF
P_RDO1
=
C_X. "复数选择
IF
SCREEN
-
NAME
=
'
SE_VBELN-LOW
'
"出库凭证前项目
OR
SCREEN
-
NAME
=
'
SE_VBELN-HIGH
'
"出库凭证后项目
OR
SCREEN
-
NAME
=
'
SE_RSNUM-LOW
'
"入出库凭证前项目
OR
SCREEN
-
NAME
=
'
SE_RSNUM-HIGH
'
. "入出库凭证后项目
SCREEN
-
INPUT
=
0
. "禁止输入
SCREEN
-
OUTPUT
=
1
. "允许输出
ENDIF.
PERFORM SCREEN_INIT.
ENDIF.
IF
P_RDO2
=
C_X. "个别选择
IF
SCREEN
-
NAME
=
'
PA_WERKS
'
"仓库
OR
SCREEN
-
NAME
=
'
PA_LGORT
'
"保管场所
OR
SCREEN
-
NAME
=
'
SE_VSBED-LOW
'
"出库路径前项目
OR
SCREEN
-
NAME
=
'
SE_VSBED-HIGH
'
"出库路径后项目
OR
SCREEN
-
NAME
=
'
SE_DATUM-LOW
'
"出库预定日前项目
OR
SCREEN
-
NAME
=
'
SE_DATUM-HIGH
'
. "出库预定日后项目
SCREEN
-
INPUT
=
0
. "禁止输入
SCREEN
-
OUTPUT
=
1
. "允许输出
ENDIF.
ENDIF.
IF
P_RDO3
=
C_X. "I
/
F
IF
SCREEN
-
NAME
=
'
PA_PDEST
'
. "打印设备
SCREEN
-
INPUT
=
0
.
SCREEN
-
OUTPUT
=
1
.
ENDIF.
ENDIF.
MODIFY SCREEN. "修改屏幕参量
ENDLOOP.
ENDFORM. " SCREEN_PBO
*&
--
-------------------------------------------------------------------*
*&
FORM SCREEN_PAI
*&
功能: 选择屏幕PAI
*&
--
-------------------------------------------------------------------*
FORM SCREEN_PAI.
IF
SY
-
UCOMM
=
C_RADI. "判断PAI触发功能代码
PERFORM SCREEN_FLUSH. "刷新屏幕
ELSE
.
PERFORM SCREEN_CHECK_INPUT. "输入检查
ENDIF.
ENDFORM. " SCREEN_PAI
*&
--
-------------------------------------------------------------------*
*&
FORM SCREEN_FLUSH
*&
功能: 刷新屏幕
*&
--
-------------------------------------------------------------------*
FORM SCREEN_FLUSH.
IF
P_RDO1
=
C_X. "复数选择
REFRESH: SE_VBELN, "出库凭证
SE_RSNUM. "入出库预定
ENDIF.
IF
P_RDO2
=
C_X. "个别选择
CLEAR: PA_WERKS, "仓库
PA_LGORT. "保管场所
REFRESH: SE_VSBED, "出库路径
SE_DATUM. "出库预定日
ENDIF.
IF
P_RDO3
=
C_X. "I
/
F
CLEAR PA_PDEST. "打印设备
ENDIF.
ENDFORM. "SCREEN_FLUSH
*&
--
-------------------------------------------------------------------*
*&
FORM SCREEN_CHECK_INPUT
*&
功能: 输入检查
*&
--
-------------------------------------------------------------------*
FORM SCREEN_CHECK_INPUT.
IF
P_RDO1
=
C_X. "复数选择
IF
PA_WERKS
IS
INITIAL. "工厂未输入
SET
CURSOR
FIELD
'
PA_WERKS
'
.
*
报消息:
[
在所有需要输入的字段中输入一个条目
]
MESSAGE ID
'
00
'
TYPE
'
E
'
NUMBER
'
055
'
.
ENDIF.
IF
PA_LGORT
IS
INITIAL. "保管场所未输入
SET
CURSOR
FIELD
'
PA_LGORT
'
.
*
报消息:
[
在所有需要输入的字段中输入一个条目
]
MESSAGE ID
'
00
'
TYPE
'
E
'
NUMBER
'
055
'
.
ENDIF.
ENDIF.
IF
P_RDO2
=
C_X. "个别选择
IF
SE_VBELN
[]
IS
INITIAL "出厂凭证未输入
AND
SE_RSNUM
[]
IS
INITIAL. "和入出库凭未输入
SET
CURSOR
FIELD
'
SE_VBELN-LOW
'
.
*
报消息:
[
在所有需要输入的字段中输入一个条目
]
MESSAGE ID
'
00
'
TYPE
'
E
'
NUMBER
'
055
'
.
ENDIF.
ENDIF.
IF
P_RDO4
=
C_X. "打印输出
IF
PA_PDEST
IS
INITIAL. "打印设备未输入
SET
CURSOR
FIELD
'
PA_PDEST
'
.
*
报消息:
[
在所有需要输入的字段中输入一个条目
]
MESSAGE ID
'
00
'
TYPE
'
E
'
NUMBER
'
055
'
.
ENDIF.
ENDIF.
ENDFORM. "SCREEN_CHECK_INPUT
*&
--
-------------------------------------------------------------------*
*&
FORM PROCESS_MAIN
*&
功能: 主处理:取得对象数据
->
编辑数据
->
输出帐票
*&
--
-------------------------------------------------------------------*
FORM PROCESS_MAIN.
PERFORM DATA_GET. "取得对象数据
PERFORM DATA_EDIT. "编辑数据
IF
P_RDO3
=
C_X. "选择了I
/
F
STOP.
ENDIF.
IF
P_RDO4
=
C_X. "选择了印刷
IF
SY
-
LANGU
=
C_ZH. "用户登陆语言为中文
PERFORM WRITE_SAPSCRIPT. "中文输出帐票
ENDIF.
IF
SY
-
LANGU
=
C_JA. "用户登陆语言为日文
PERFORM WRITE_SMARTFORM. "日文输出帐票
ENDIF.
*
报消息:
[
正常执行输出
]
MESSAGE ID
'
ZXX001
'
TYPE
'
S
'
NUMBER
'
036
'
.
ENDIF.
ENDFORM. " PROCESS_MAIN
*&
--
-------------------------------------------------------------------*
*&
FORM DATA_GET
*&
功能: 对象数据取得
*&
--
-------------------------------------------------------------------*
FORM DATA_GET.
CLEAR: TBL_LIKP,
TBL_LIPS,
TBL_RKPF,
TBL_RESB.
IF
P_RDO1
=
C_X. "如果选了
[
复数选择
]
PERFORM DO_CHOOSE1.
ENDIF.
IF
P_RDO2
=
C_X. "如果选了
[
个别选择
]
PERFORM DO_CHOOSE2.
ENDIF.
IF
TBL_LIKP
IS
INITIAL
AND
TBL_RESB
IS
INITIAL. "对象数据不存在
*
报消息:
[
对象数据不存在
]
终止程序
MESSAGE S035.
STOP.
ENDIF.
ENDFORM. " DATA_GET
*&
--
-------------------------------------------------------------------*
*&
FORM DO_CHOOSE1
*&
功能: 复数选择情况
*&
--
-------------------------------------------------------------------*
FORM DO_CHOOSE1 .
*
2
-
1
-
1
-
1
提货
/
送货
/
移送 场合
IF
C_01
IN
SE_VSBED "出库路径01
02
03
04
OR
C_02
IN
SE_VSBED "
05
11
31
或没输入
OR
C_03
IN
SE_VSBED
OR
C_04
IN
SE_VSBED
OR
C_05
IN
SE_VSBED
OR
C_11
IN
SE_VSBED
OR
C_31
IN
SE_VSBED
OR
( SE_VSBED
[]
IS
INITIAL ).
PERFORM DO_SE_VSBED1. "出库路径情况1处理
ENDIF.
*
2
-
1
-
1
-
2
移管 场合
IF
C_ZZ
IN
SE_VSBED
OR
( SE_VSBED
[]
IS
INITIAL ). "出库路径ZZ 或没输入
PERFORM DO_SE_VSBED2. "出库路径情况2处理
ENDIF.
ENDFORM. " DO_CHOOSE1
*&
--
-------------------------------------------------------------------*
*&
FORM DO_SE_VSBED1
*&
功能: 出库路径是01
02
03
04
05
11
31
时处理
*&
--
-------------------------------------------------------------------*
FORM DO_SE_VSBED1.
*
局部变量
DATA: LO_ADRNR
LIKE
VBPA
-
ADRNR. "销售凭证:合作伙伴地址
DATA: LO_SERAIL
LIKE
LIPS
-
SERAIL. "地址
*
2
-
1
-
1
-
1
-
1
查询
[
SD凭证:交货抬头数据
]
(LIKP)
SELECT
VBELN "交货
WADAT "计划货物移动日期
KUNNR "送达方
VSBED "装运条件
WERKS "交货的接收工厂
APPENDING CORRESPONDING FIELDS
OF
TABLE
TBL_LIKP
FROM
LIKP "交货抬头数据
WHERE
VSBED
IN
SE_VSBED "指定条件 装运条件
AND
WADAT
IN
SE_DATUM. "指定条件 移动日期
IF
SY
-
SUBRC
<>
0
. "对象不存在 退出FORM
RETURN
.
ENDIF.
*
2
-
1
-
1
-
1
-
2
查询
[
销售凭证 : 合作伙伴
]
(VBPA)
CLEAR REC_LIKP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
SELECT
SINGLE
ADRNR
INTO
LO_ADRNR
FROM
VBPA "销售凭证:合作伙伴
WHERE
VBELN
=
REC_LIKP
-
VBELN "交货
AND
POSNR
=
C_000000 "销售和分销凭证项目号
AND
PARVW
=
C_WE. "合作伙伴功能
*
2
-
1
-
1
-
1
-
3
查询
[
地址 (业务地址服务)
]
(ADRC)
IF
SY
-
SUBRC
=
0
.
SELECT
SINGLE
NAME1 "客户名称
TEL_NUMBER "电话号码
STREET "地址
INTO
(REC_LIKP
-
NAME1,
REC_LIKP
-
TEL_NUMBER,
REC_LIKP
-
STREET
)
FROM
ADRC
WHERE
ADDRNUMBER
=
LO_ADRNR "地址号码等于LO_ADRNR
AND
NATION
=
SPACE
. "国际地址版本等于SPACE
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING NAME1 "客户名称
TEL_NUMBER "电话号码
STREET. "地址
ENDIF.
CLEAR REC_LIKP.
ENDLOOP.
*
2
-
1
-
1
-
1
-
4
查询
[
SD凭证:交货:项目数据
]
(LIPS)
CLEAR REC_LIKP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
SELECT
ZZOP2FLG "再印刷标志
VBELN "交货凭证号
WERKS "工厂
MATNR "物料号
CHARG "批号
LFIMG "实际已交货量
SERAIL "序列号参数文件
VGBEL "参考单据的单据编号
INTO
(REC_LIPS
-
ZZOP2FLG,
REC_LIPS
-
VBELN,
REC_LIPS
-
WERKS,
REC_LIPS
-
MATNR,
REC_LIPS
-
CHARG,
REC_LIPS
-
LFIMG,
LO_SERAIL,
REC_LIPS
-
VGBEL)
FROM
LIPS
WHERE
VBELN
=
REC_LIKP
-
VBELN "交货抬头表—交货凭证号
AND
WERKS
=
PA_WERKS "参数工厂
AND
LGORT
=
PA_LGORT "参数保管场所
AND
( ZZOP2FLG
IS
NULL
OR
ZZOP2FLG
=
SPACE
) "再印刷标志位
AND
KOMKZ
<>
SPACE
. "拣配控制指示符
IF
LO_SERAIL
<>
''
. "机种类型不为空
REC_LIPS
-
FLG
=
C_X. "机型管理 赋X
ELSE
. "机种类型为空
REC_LIPS
-
FLG
=
SPACE
. "机型管理 赋SPACE
ENDIF.
REC_LIKP
-
VGBEL
=
REC_LIPS
-
VGBEL. "添加抬头订单号
REC_LIKP
-
ZZOP2FLG
=
REC_LIPS
-
ZZOP2FLG.
REC_LIKP
-
WERKS2
=
REC_LIPS
-
WERKS.
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING VGBEL "定单号
ZZOP2FLG "再印刷标志
WERKS2. "提货仓库
APPEND REC_LIPS
TO
TBL_LIPS. "添加明细条目
ENDSELECT.
IF
SY
-
SUBRC
<>
0
. "该抬头没有明细数据
REC_LIKP
-
DEL_FLG
=
C_X.
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING DEL_FLG. "删除标志
ENDIF.
ENDLOOP.
DELETE
TBL_LIKP
WHERE
DEL_FLG
=
C_X. "删除没有明细的表头
*
2
-
1
-
1
-
1
-
5
查询
[
工厂/分支机构
]
(T001W)
CLEAR REC_LIPS.
LOOP AT TBL_LIPS
INTO
REC_LIPS.
SELECT
SINGLE
NAME1 "工厂名称
FROM
T001W
INTO
REC_LIPS
-
NAME2 "出库仓库名称
WHERE
WERKS
=
REC_LIPS
-
WERKS. "工厂为出库工厂
MODIFY TBL_LIPS
FROM
REC_LIPS
TRANSPORTING NAME2.
ENDLOOP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
SELECT
SINGLE
NAME1 "工厂名称
FROM
T001W
INTO
REC_LIKP
-
NAME2 "出库仓库名称
WHERE
WERKS
=
REC_LIKP
-
WERKS2. "工厂为出库工厂
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING NAME2. "提货仓库名称
ENDLOOP.
ENDFORM. " DO_SE_VSBED1
*&
--
-------------------------------------------------------------------*
*&
FORM DO_SE_VSBED2
*&
功能: 出库路径是ZZ 或者没有输入 时处理
*&
--
-------------------------------------------------------------------*
FORM DO_SE_VSBED2.
DATA: LO_ADRNR
LIKE
VBPA
-
ADRNR, "地址
LO_SERNP
LIKE
MARC
-
SERNP. "序列号参数文件
*
2
-
1
-
1
-
2
-
1
查询
[
预定/相关需求
]
(RESB)
CLEAR REC_RESB.
SELECT
RSNUM "入出库预定
BDTER "预定日
WERKS "工厂
UMWRK "入库工厂
MATNR "物料号码
CHARG "批次编号
BDMNG "需求量
ZZOP2FLG "再印刷标志位
INTO
(REC_RESB
-
RSNUM,
REC_RESB
-
BDTER,
REC_RESB
-
WERKS,
REC_RESB
-
UMWRK,
REC_RESB
-
MATNR,
REC_RESB
-
CHARG,
REC_RESB
-
BDMNG,
REC_RESB
-
ZZOP2FLG)
FROM
RESB "预定相关需求明细
WHERE
BWART
=
C_261 "移动类型(库存管理)
AND
BDTER
IN
SE_DATUM "组件的需求日期
"画面参数出入库预定日
AND
WERKS
=
PA_WERKS "工厂为画面参数仓库
AND
LGORT
=
PA_LGORT "库存地点
=
画面保管场所
AND
( ZZOP2FLG
IS
NULL
OR
ZZOP2FLG
=
SPACE
). "再印刷标志位
APPEND REC_RESB
TO
TBL_RESB.
ENDSELECT.
IF
SY
-
SUBRC
<>
0
. "对象不存在 退出FORM
RETURN
.
ENDIF.
*
2
-
1
-
1
-
2
-
2
查询
[
工厂/分支机构
]
(T001W)
CLEAR REC_RESB.
LOOP AT TBL_RESB
INTO
REC_RESB.
SELECT
SINGLE
ADRNR "地址
INTO
LO_ADRNR
FROM
T001W
WHERE
WERKS
=
REC_RESB
-
UMWRK. "相应的工厂代号
*
2
-
1
-
1
-
2
-
3
查询
[
地址 (业务地址服务)
]
(ADRC)
IF
SY
-
SUBRC
=
0
.
SELECT
NAME1 "客户名称
TEL_NUMBER "电话号码
STREET "地址
INTO
(REC_RESB
-
NAME1,
REC_RESB
-
TEL_NUMBER,
REC_RESB
-
STREET )
FROM
ADRC
UP
TO
1
ROWS
WHERE
ADDRNUMBER
=
LO_ADRNR "地址号码等于LO_ADRNR
AND
NATION
=
SPACE
. "国际地址版本等于SPACE
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING NAME1
TEL_NUMBER
STREET.
ENDSELECT.
ENDIF.
ENDLOOP.
*
2
-
1
-
1
-
2
-
4
查询
[
物料的工厂数据
]
(MARC)
CLEAR REC_RESB.
LOOP AT TBL_RESB
INTO
REC_RESB.
SELECT
SINGLE
SERNP "序列号参数文件
INTO
LO_SERNP
FROM
MARC
WHERE
MATNR
=
REC_RESB
-
MATNR "物料号为预定表中物料号
AND
WERKS
=
REC_RESB
-
WERKS. "工厂为预定表中工厂
IF
LO_SERNP
<>
C_NULL. "机种类别不为空
REC_RESB
-
FLG
=
C_X.
ELSE
.
REC_RESB
-
FLG
=
SPACE
.
ENDIF.
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING FLG .
ENDLOOP.
*
2
-
1
-
1
-
2
-
5
查询
[
工厂/分支机构
]
(T001W)
LOOP AT TBL_RESB
INTO
REC_RESB.
SELECT
SINGLE
NAME1
INTO
REC_RESB
-
NAME2 "提货仓库名称
FROM
T001W
WHERE
WERKS
=
REC_RESB
-
WERKS.
IF
SY
-
SUBRC
=
0
.
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING NAME2.
ENDIF.
ENDLOOP.
ENDFORM. "DO_SE_VSBED2
*&
--
-------------------------------------------------------------------*
*&
FORM DO_CHOOSE2
*&
功能: 个别选择情况
*&
--
-------------------------------------------------------------------*
FORM DO_CHOOSE2.
IF
NOT
SE_VBELN
[]
IS
INITIAL. "出库凭证有输入
PERFORM DO_SE_VBELN.
ENDIF.
IF
NOT
SE_RSNUM
[]
IS
INITIAL. "入出库预定有输入
PERFORM DO_SE_RSNUM.
ENDIF.
ENDFORM. "DO_CHOOSE2
*&
--
-------------------------------------------------------------------*
*&
FORM DO_SE_VBELN
*&
功能: 个别选择情况 出库凭证番号有输入
*&
--
-------------------------------------------------------------------*
FORM DO_SE_VBELN.
*
局部变量
DATA: LO_ADRNR
LIKE
VBPA
-
ADRNR, "地址
LO_SERAIL
LIKE
LIPS
-
SERAIL. "机种
*
2
-
1
-
2
-
1
-
1
查询
[
SD凭证:交货抬头数据
]
(LIKP)
SELECT
VBELN "出库凭证
WADAT "出库预定日
KUNNR "批发销售店号
VSBED "装运条件
WERKS "接受工厂
APPENDING CORRESPONDING FIELDS
OF
TABLE
TBL_LIKP
FROM
LIKP "交货抬头表
WHERE
VBELN
IN
SE_VBELN. "指定的出库凭证号
IF
SY
-
SUBRC
<>
0
. "数据不存在 退出FORM
RETURN
.
ENDIF.
*
2
-
1
-
2
-
1
-
2
查询
[
销售凭证 : 合作伙伴
]
(VBPA)
CLEAR REC_LIKP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
SELECT
SINGLE
ADRNR "地址
INTO
LO_ADRNR
FROM
VBPA "合作伙伴
WHERE
VBELN
=
REC_LIKP
-
VBELN "分销单据号
=
交货凭证号
AND
POSNR
=
C_000000 "销售项目号
=
'
000000
'
AND
PARVW
=
C_WE. "合作伙伴功能等于SH
*
2
-
1
-
2
-
1
-
3
查询
[
地址 (业务地址服务)
]
(ADRC)
IF
SY
-
SUBRC
=
0
.
SELECT
SINGLE
NAME1 "客户名称
TEL_NUMBER "电话号码
STREET "地址
INTO
(REC_LIKP
-
NAME1,
REC_LIKP
-
TEL_NUMBER,
REC_LIKP
-
STREET)
FROM
ADRC
WHERE
ADDRNUMBER
=
LO_ADRNR "地址号码等于LO_ADRNR
AND
NATION
=
SPACE
. "国际地址版本
=
SPACE
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING NAME1
TEL_NUMBER
STREET.
ENDIF.
ENDLOOP.
*
2
-
1
-
2
-
1
-
4
查询
[
SD凭证 : 交货: 项目数据
]
(LIPS)
CLEAR REC_LIKP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
SELECT
ZZOP2FLG "再印刷标志位
VBELN "交货凭证号
WERKS "工厂
MATNR "物料号码
CHARG "批次编号
LFIMG "实际已交货量
SERAIL "机种
VGBEL "参考单据的单据编号
FROM
LIPS
INTO
(REC_LIPS
-
ZZOP2FLG,
REC_LIPS
-
VBELN,
REC_LIPS
-
WERKS,
REC_LIPS
-
MATNR,
REC_LIPS
-
CHARG,
REC_LIPS
-
LFIMG,
LO_SERAIL,
REC_LIPS
-
VGBEL)
WHERE
VBELN
=
REC_LIKP
-
VBELN. "交货凭证号相等
IF
LO_SERAIL
<>
C_NULL. "机种类型不为空
REC_LIPS
-
FLG
=
C_X. "机型管理 赋X
ELSE
. "机种类型为空
REC_LIPS
-
FLG
=
SPACE
. "机型管理 赋SPACE
ENDIF.
REC_LIKP
-
VGBEL
=
REC_LIPS
-
VGBEL. "添加抬头订单号
REC_LIKP
-
ZZOP2FLG
=
REC_LIPS
-
ZZOP2FLG. "再印刷标志位
REC_LIKP
-
WERKS2
=
REC_LIPS
-
WERKS.
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING VGBEL "定单号
ZZOP2FLG "再印刷标志
WERKS2. "提货仓库
APPEND REC_LIPS
TO
TBL_LIPS. "添加明细条
ENDSELECT.
IF
SY
-
SUBRC
<>
0
. "如果没有相应明细数据
REC_LIKP
-
DEL_FLG
=
C_X. "记下要删除标志
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING DEL_FLG.
ENDIF.
ENDLOOP.
DELETE
TBL_LIKP
WHERE
DEL_FLG
=
C_X. "删除没有明细的表头
*
2
-
1
-
2
-
1
-
6
查询
[
工厂/分支机构
]
(T001W)
LOOP AT TBL_LIPS
INTO
REC_LIPS.
SELECT
SINGLE
NAME1 "工厂名称
INTO
REC_LIPS
-
NAME2 "出库仓库名称
FROM
T001W "工厂
WHERE
WERKS
=
REC_LIPS
-
WERKS. "工厂代码
=
出库工厂
MODIFY TBL_LIPS
FROM
REC_LIPS
TRANSPORTING NAME2.
ENDLOOP.
CLEAR LIKP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
SELECT
SINGLE
NAME1 "工厂名称
FROM
T001W
INTO
REC_LIKP
-
NAME2 "出库仓库名称
WHERE
WERKS
=
REC_LIKP
-
WERKS2. "工厂为出库工厂
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING NAME2.
ENDLOOP.
ENDFORM. "DO_SE_VBELN
*&
--
-------------------------------------------------------------------*
*&
FORM DO_SE_RSNUM
*&
功能: 个别选择情况 入出库预定有输入
*&
--
-------------------------------------------------------------------*
FORM DO_SE_RSNUM.
*
局部变量
DATA: LO_ADRNR
LIKE
VBPA
-
ADRNR, "地址
LO_SERNP
LIKE
MARC
-
SERNP. "序列号参数文件
*
2
-
1
-
2
-
2
-
1
查询
[
预定/相关需求
]
(RESB)
CLEAR REC_RESB.
SELECT
RSNUM "入出库预定
BDTER "预定日
WERKS "工厂
UMWRK "入库工厂
MATNR "物料号码
CHARG "批次编号
BDMNG "需求量
ZZOP2FLG "再印刷标志位
APPENDING CORRESPONDING FIELDS
OF
TABLE
TBL_RESB
FROM
RESB
WHERE
RSNUM
IN
SE_RSNUM.
IF
SY
-
SUBRC
<>
0
. "数据不存在 退出FORM
RETURN
.
ENDIF.
*
2
-
1
-
2
-
2
-
3
查询
[
工厂/分支机构
]
(T001W)
LOOP AT TBL_RESB
INTO
REC_RESB.
SELECT
SINGLE
ADRNR "地址
INTO
LO_ADRNR
FROM
T001W "工厂表
WHERE
WERKS
=
REC_RESB
-
UMWRK. "相应的工厂代号
*
2
-
1
-
2
-
2
-
4
查询
[
地址 (业务地址服务)
]
(ADRC)
IF
SY
-
SUBRC
=
0
.
SELECT
SINGLE
NAME1 "客户名称
TEL_NUMBER "电话号码
STREET "地址
INTO
(REC_RESB
-
NAME1,
REC_RESB
-
TEL_NUMBER,
REC_RESB
-
STREET)
FROM
ADRC "中心地址管理
WHERE
ADDRNUMBER
=
LO_ADRNR "地址号码等于LO_ADRNR
AND
NATION
=
SPACE
. "国际地址版本等于SPACE
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING NAME1
TEL_NUMBER
STREET.
ENDIF.
ENDLOOP.
*
2
-
1
-
2
-
2
-
5
查询
[
物料的工厂数据
]
(MARC)
CLEAR REC_RESB.
LOOP AT TBL_RESB
INTO
REC_RESB.
SELECT
SINGLE
SERNP "序列号参数文件
INTO
LO_SERNP
FROM
MARC
WHERE
MATNR
=
REC_RESB
-
MATNR "物料号为预定表中物料号
AND
WERKS
=
REC_RESB
-
WERKS. "工厂为预定表中工厂
IF
LO_SERNP
<>
C_NULL. "机种类别不为空情况
REC_RESB
-
FLG
=
C_X.
ELSE
.
REC_RESB
-
FLG
=
SPACE
. "机种类别为空情况
ENDIF.
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING FLG . "机型管理
ENDLOOP.
*
2
-
1
-
2
-
2
-
6
查询
[
工厂/分支机构
]
(T001W)
CLEAR REC_RESB.
LOOP AT TBL_RESB
INTO
REC_RESB.
SELECT
SINGLE
NAME1 "名称
INTO
REC_RESB
-
NAME2
FROM
T001W
WHERE
WERKS
=
REC_RESB
-
WERKS. "工厂为预定表中出库工厂
IF
SY
-
SUBRC
=
0
.
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING NAME2.
ENDIF.
ENDLOOP.
ENDFORM. "DO_SE_RSNUM
*&
--
-------------------------------------------------------------------*
*&
FORM DATA_EDIT
*&
功能: 数据编辑
*&
--
-------------------------------------------------------------------*
FORM DATA_EDIT.
*
2
-
2
-
1
移管的情况下处理
LOOP AT TBL_RESB
INTO
REC_RESB.
SHIFT REC_RESB
-
RSNUM
LEFT
DELETING LEADING
'
0
'
.
MODIFY TBL_RESB
FROM
REC_RESB
TRANSPORTING RSNUM.
REC_RKPF
-
NAME1
=
REC_RESB
-
NAME1. "仓库名称
REC_RKPF
-
BDTER
=
REC_RESB
-
BDTER. "提货预定日
REC_RKPF
-
UMWRK
=
REC_RESB
-
UMWRK. "仓库
REC_RKPF
-
RSNUM
=
REC_RESB
-
RSNUM. "出库凭证
REC_RKPF
-
TEL_NUMBER
=
REC_RESB
-
TEL_NUMBER. "经销店电话
REC_RKPF
-
VSBED
=
C_ZZ. "装运条件
REC_RKPF
-
PROCE
=
TEXT
-
018
. "出库路径
REC_RKPF
-
VGBEL
=
REC_RESB
-
VGBEL. "移送移管的指令传票
REC_RKPF
-
STREET
=
REC_RESB
-
STREET. "送货地址
REC_RKPF
-
WERKS
=
REC_RESB
-
WERKS. "提货仓库
REC_RKPF
-
NAME2
=
REC_RESB
-
NAME2. "提货仓库名称
REC_RKPF
-
ZZOP2FLG
=
REC_RESB
-
ZZOP2FLG. "再印刷标志位
COLLECT REC_RKPF
INTO
TBL_RKPF . "汇集移管抬头
ENDLOOP.
*
2
-
2
-
2
项目
[
出库路径
]
的出力内容
CLEAR REC_LIKP.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
CASE
REC_LIKP
-
VSBED. "
[
装运条件
]
WHEN
C_01. "
01
出库路径为预处理
REC_LIKP
-
PROCE
=
TEXT
-
011
.
WHEN
C_02. "
02
送货
REC_LIKP
-
PROCE
=
TEXT
-
012
.
WHEN
C_03. "
03
送货(无偿)
REC_LIKP
-
PROCE
=
TEXT
-
013
.
WHEN
C_04. "
04
紧急送货
REC_LIKP
-
PROCE
=
TEXT
-
014
.
WHEN
C_05. "
05
紧急送货(无偿)
REC_LIKP
-
PROCE
=
TEXT
-
015
.
WHEN
C_11. "
11
输出
REC_LIKP
-
PROCE
=
TEXT
-
016
.
WHEN
C_31. "
31
移送
REC_LIKP
-
PROCE
=
TEXT
-
017
.
WHEN
OTHERS. "其它 移管
REC_LIKP
-
PROCE
=
TEXT
-
018
.
ENDCASE.
MODIFY TBL_LIKP
FROM
REC_LIKP.
ENDLOOP.
*
2
-
2
-
3
[
装运条件
]
是01时 输出运货车号 交易者号 交易者名称
PERFORM GET_TEXT.
*
2
-
2
-
4
取得机种类别
LOOP AT TBL_LIPS
INTO
REC_LIPS. "提货
/
送货
/
移送
PERFORM GET_LIPS_MATERIAL_TYPE.
ENDLOOP.
LOOP AT TBL_RESB
INTO
REC_RESB. "移管
PERFORM GET_RESB_MATERIAL_TYPE.
ENDLOOP.
*
2
-
2
-
5
计算印刷时间
PERFORM GET_TIME.
IF
G_TFLG
=
C_1.
G_DATE
=
SY
-
DATUM
-
1
.
ELSEIF G_TFLG
=
C_2.
G_DATE
=
SY
-
DATUM
+
1
.
ELSE
.
G_DATE
=
SY
-
DATUM.
ENDIF.
*
2
-
2
-
6
现在的页
*
2
-
2
-
7
总页数
ENDFORM. " DATA_EDIT
*&
--
-------------------------------------------------------------------*
*&
FORM GET_TEXT
*&
功能: 装运条件"
01
"时 输出运货车号 交易者号 交易者名称
*&
--
-------------------------------------------------------------------*
FORM GET_TEXT.
DATA: LO_TBL_TLINE
LIKE
TABLE
OF
TLINE. "读取的文本行
DATA: LO_NAME
LIKE
THEAD
-
TDNAME. "将要读取的文本名
DATA: LO_REC_TLINE
LIKE
TLINE. "读取的文本行
CLEAR REC_LIKP.
*
2
-
2
-
3
装运条件"
01
"时
LOOP AT TBL_LIKP
INTO
REC_LIKP.
IF
REC_LIKP
-
VSBED
=
C_01.
*
输出运货车号
REFRESH LO_TBL_TLINE.
LO_NAME
=
REC_LIKP
-
VBELN. "交货凭证号
CALL
FUNCTION
'
READ_TEXT
'
EXPORTING
CLIENT
=
SY
-
MANDT "登录的客户机编号
ID
=
C_Z001 "要读的文本的文本标识
LANGUAGE
=
C_ZH "将要读取的文本语言
NAME
=
LO_NAME "将要读取的文本名
OBJECT
=
C_VBBK "将要读取的文本对象
TABLES
LINES
=
LO_TBL_TLINE "读文本的文本标题
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
.
LOOP AT LO_TBL_TLINE
INTO
LO_REC_TLINE
WHERE
TDLINE
<>
SPACE
.
REC_LIKP
-
Z001
=
LO_REC_TLINE
-
TDLINE. "运货车号
ENDLOOP.
ENDIF.
*
输出交易者号
REFRESH LO_TBL_TLINE.
LO_NAME
=
REC_LIKP
-
VBELN.
CALL
FUNCTION
'
READ_TEXT
'
EXPORTING
CLIENT
=
SY
-
MANDT
ID
=
C_Z002
LANGUAGE
=
C_ZH
NAME
=
LO_NAME
OBJECT
=
C_VBBK
TABLES
LINES
=
LO_TBL_TLINE
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
.
LOOP AT LO_TBL_TLINE
INTO
LO_REC_TLINE
WHERE
TDLINE
<>
SPACE
.
REC_LIKP
-
Z002
=
LO_REC_TLINE
-
TDLINE. "交易者号
ENDLOOP.
ENDIF.
*
输出交易者名称
REFRESH LO_TBL_TLINE.
LO_NAME
=
REC_LIKP
-
VBELN.
CALL
FUNCTION
'
READ_TEXT
'
EXPORTING
CLIENT
=
SY
-
MANDT
ID
=
C_Z003
LANGUAGE
=
C_ZH
NAME
=
LO_NAME
OBJECT
=
C_VBBK
TABLES
LINES
=
LO_TBL_TLINE
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
.
LOOP AT LO_TBL_TLINE
INTO
LO_REC_TLINE
WHERE
TDLINE
<>
SPACE
.
REC_LIKP
-
Z003
=
LO_REC_TLINE
-
TDLINE. "交易者名称
ENDLOOP.
ENDIF.
MODIFY TBL_LIKP
FROM
REC_LIKP
TRANSPORTING Z001 "运货车号
Z002 "交易者号
Z003. "交易者名称
ENDIF.
ENDLOOP.
ENDFORM. "GET_TEXT
*&
--
-------------------------------------------------------------------*
*&
FORM GET_LIPS_MATERIAL_TYPE
*&
功能: 提货
/
送货
/
移送 取得机种类别
*&
--
-------------------------------------------------------------------*
FORM GET_LIPS_MATERIAL_TYPE.
*
要分类的对象码
DATA: LO_OBJKEY
LIKE
BAPI1003_KEY
-
OBJECT,
*
分类 BAPI
-
关键字字段
LO_TBL_OBJKEY
LIKE
BAPI1003_OBJECT_KEYS
OCCURS
0
WITH
HEADER LINE,
*
返回参数
LO_TBL_RETURN
LIKE
BAPIRET2
OCCURS
0
WITH
HEADER LINE,
*
分配 BAPI
-
NUM、DATE、TIME 类型的值
LO_TBL_ALLOCVALUESNUM
LIKE
BAPI1003_ALLOC_VALUES_NUM
OCCURS
0
WITH
HEADER LINE,
*
分配 BAPI
-
CHAR
、BOOL 类型的值
LO_TBL_ALLOCVALUESCHAR
LIKE
BAPI1003_ALLOC_VALUES_CHAR
OCCURS
0
WITH
HEADER LINE,
*
分配 BAPI
-
CURR 类型值
LO_TBL_ALLOCVALUESCURR
LIKE
BAPI1003_ALLOC_VALUES_CURR
OCCURS
0
WITH
HEADER LINE.
LO_TBL_OBJKEY
-
KEY_FIELD
=
C_MATNR. "MATNR
LO_TBL_OBJKEY
-
VALUE_EXT
=
REC_LIPS
-
MATNR. "品目代码
APPEND LO_TBL_OBJKEY.
CLEAR: LO_OBJKEY.
CALL
FUNCTION
'
BAPI_OBJCL_CONCATENATEKEY
'
EXPORTING
OBJECTTABLE
=
C_MARA
IMPORTING
OBJECTKEY_CONC
=
LO_OBJKEY
TABLES
OBJECTKEYTABLE
=
LO_TBL_OBJKEY
RETURN
=
LO_TBL_RETURN.
IF
NOT
LO_TBL_RETURN
IS
INITIAL. "检查是否出错
EXIT
.
ENDIF.
CALL
FUNCTION
'
BAPI_OBJCL_GETDETAIL
'
EXPORTING
OBJECTKEY
=
LO_OBJKEY
OBJECTTABLE
=
C_MARA
CLASSNUM
=
C_ZCLASS_MAT
CLASSTYPE
=
C_001
TABLES
ALLOCVALUESNUM
=
LO_TBL_ALLOCVALUESNUM
ALLOCVALUESCHAR
=
LO_TBL_ALLOCVALUESCHAR
ALLOCVALUESCURR
=
LO_TBL_ALLOCVALUESCURR
RETURN
=
LO_TBL_RETURN.
READ
TABLE
LO_TBL_ALLOCVALUESCHAR
WITH
KEY
CHARACT
=
C_TYPEC.
IF
SY
-
SUBRC
=
0
.
REC_LIPS
-
MATERIAL_TYPE
=
LO_TBL_ALLOCVALUESCHAR
-
VALUE_CHAR.
MODIFY TBL_LIPS
FROM
REC_LIPS.
ENDIF.
REFRESH LO_TBL_OBJKEY.
ENDFORM. "GET_LIPS_MATERIAL_TYPE
*&
--
-------------------------------------------------------------------*
*&
FORM GET_RESB_MATERIAL_TYPE
*&
功能: 移管 取得机种类别
*&
--
-------------------------------------------------------------------*
FORM GET_RESB_MATERIAL_TYPE.
*
要分类的对象码
DATA: LO_OBJKEY
LIKE
BAPI1003_KEY
-
OBJECT,
*
分类 BAPI
-
关键字字段
LO_TBL_OBJKEY
LIKE
BAPI1003_OBJECT_KEYS OCCURS
0
WITH
HEADER LINE,
*
返回参数
LO_TBL_RETURN
LIKE
BAPIRET2 OCCURS
0
WITH
HEADER LINE,
*
分配 BAPI
-
NUM、DATE、TIME 类型的值
LO_TBL_ALLOCVALUESNUM
LIKE
BAPI1003_ALLOC_VALUES_NUM OCCURS
0
WITH
HEADER LINE,
*
分配 BAPI
-
CHAR
、BOOL 类型的值
LO_TBL_ALLOCVALUESCHAR
LIKE
BAPI1003_ALLOC_VALUES_CHAR OCCURS
0
WITH
HEADER LINE,
*
分配 BAPI
-
CURR 类型值
LO_TBL_ALLOCVALUESCURR
LIKE
BAPI1003_ALLOC_VALUES_CURR OCCURS
0
WITH
HEADER LINE.
LO_TBL_OBJKEY
-
KEY_FIELD
=
C_MATNR. "MATNR
LO_TBL_OBJKEY
-
VALUE_EXT
=
REC_RESB
-
MATNR. "品目代码
APPEND LO_TBL_OBJKEY.
CLEAR: LO_OBJKEY.
CALL
FUNCTION
'
BAPI_OBJCL_CONCATENATEKEY
'
EXPORTING
OBJECTTABLE
=
C_MARA
IMPORTING
OBJECTKEY_CONC
=
LO_OBJKEY
TABLES
OBJECTKEYTABLE
=
LO_TBL_OBJKEY
RETURN
=
LO_TBL_RETURN.
IF
NOT
LO_TBL_RETURN
IS
INITIAL. "检查是否出错
EXIT
.
ENDIF.
CALL
FUNCTION
'
BAPI_OBJCL_GETDETAIL
'
EXPORTING
OBJECTKEY
=
LO_OBJKEY
OBJECTTABLE
=
C_MARA
CLASSNUM
=
C_ZCLASS_MAT
CLASSTYPE
=
C_001
TABLES
ALLOCVALUESNUM
=
LO_TBL_ALLOCVALUESNUM
ALLOCVALUESCHAR
=
LO_TBL_ALLOCVALUESCHAR
ALLOCVALUESCURR
=
LO_TBL_ALLOCVALUESCURR
RETURN
=
LO_TBL_RETURN.
READ
TABLE
LO_TBL_ALLOCVALUESCHAR
WITH
KEY
CHARACT
=
C_TYPEC.
IF
SY
-
SUBRC
=
0
.
REC_RESB
-
MATERIAL_TYPE
=
LO_TBL_ALLOCVALUESCHAR
-
VALUE_CHAR.
"特性值
MODIFY TBL_RESB
FROM
REC_RESB.
ENDIF.
REFRESH LO_TBL_OBJKEY.
ENDFORM. "GET_RESB_MATERIAL_TYPE
*&
--
-------------------------------------------------------------------*
*&
FORM GET_TIME
*&
功能: 取得对应本地时间
*&
--
-------------------------------------------------------------------*
FORM GET_TIME.
DATA: LO_TIME1
LIKE
SY
-
UZEIT, "系统时间
LO_TIME2
LIKE
SY
-
UZEIT, "用户时间
LO_TIME3
LIKE
SY
-
UZEIT, "对应本地时间
LO_UT1
LIKE
TTZR
-
UTCSIGN, "差别1
LO_UT2
LIKE
TTZR
-
UTCSIGN, "差别2
LO_ZONE1
LIKE
TTZZ
-
TZONE, "时区1
LO_ZONE2
LIKE
USR02
-
TZONE. "时区2
CLEAR: G_TIME.
CLEAR: G_TFLG.
CALL
FUNCTION
'
TZON_GET_OS_TIMEZONE
'
IMPORTING
EF_TIMEZONE
=
LO_ZONE1. "时区1
*
取得标准时间
PERFORM GET_TIME1
USING
LO_ZONE1 "时区1
CHANGING
LO_TIME1 "系统时间
LO_UT1. "差别1
SELECT
SINGLE
TZONE
INTO
LO_ZONE2
FROM
USR02
WHERE
BNAME
=
SY
-
UNAME. "用户名称
IF
LO_ZONE2
=
SPACE
.
LO_ZONE2
=
C_UTC8. "时区2
ENDIF.
*
取得标准时间
PERFORM GET_TIME1
USING
LO_ZONE2 "时区2
CHANGING
LO_TIME2 "用户时间
LO_UT2. "差别2
DEFINE TIME.
LO_TIME3
=
SY
-
UZEIT
&
1
LO_TIME1
&
2
LO_TIME2. "对应本地时间
END
-
OF
-
DEFINITION.
IF
LO_UT1
=
C_A
AND
LO_UT2
=
C_A.
TIME
-
+
.
IF
LO_TIME3
>
SY
-
UZEIT.
G_TFLG
=
C_1.
ENDIF.
ELSEIF LO_UT1
=
C_A
AND
LO_UT2
=
C_D.
TIME
-
-
.
IF
LO_TIME3
>
SY
-
UZEIT.
G_TFLG
=
C_1.
ENDIF.
ELSEIF LO_UT1
=
C_D
AND
LO_UT2
=
C_A.
TIME
+
+
.
IF
LO_TIME3
<
SY
-
UZEIT.
G_TFLG
=
C_2.
ENDIF.
ELSEIF LO_UT1
=
C_D
AND
LO_UT2
=
C_D.
TIME
+
-
.
IF
LO_TIME3
<
SY
-
UZEIT.
G_TFLG
=
C_2.
ENDIF.
ENDIF.
G_TIME
=
LO_TIME3.
ENDFORM. "GET_TIME
*&
--
-------------------------------------------------------------------*
*&
FORM GET_TIME1
*&
功能: 取得标准时间
*&
--
-------------------------------------------------------------------*
*
--
>P_ZONE 时区
*
<
--
P_TIME 时间
*
<
--
P_UT 差别
*
--
--------------------------------------------------------------------*
FORM GET_TIME1
USING
P_ZONE
CHANGING
P_TIME
P_UT.
DATA: LO_ZONERULE
LIKE
TTZZ
-
ZONERULE. "时区规则
SELECT
SINGLE
ZONERULE
INTO
LO_ZONERULE
FROM
TTZZ
WHERE
TZONE
=
P_ZONE.
SELECT
SINGLE
UTCDIFF
UTCSIGN
INTO
(P_TIME,P_UT)
FROM
TTZR
WHERE
ZONERULE
=
LO_ZONERULE.
ENDFORM. " GET_TIME1
*&
--
-------------------------------------------------------------------*
*&
FORM WRITE_SAPSCRIPT
*&
功能: 帐票输出
*&
--
-------------------------------------------------------------------*
FORM WRITE_SAPSCRIPT.
DATA: LO_LINE TYPE I, "条目计数
LO_TITLE(
15
) TYPE C, "当前标题
LO_HEAD(
15
) TYPE C, "当前头部
LO_INDEX TYPE I VALUE
0
, "指示变量
LO_REC_OPTIONS
LIKE
ITCPO. "打印选项
LO_REC_OPTIONS
-
TDDEST
=
PA_PDEST. "输出设备
LO_REC_OPTIONS
-
TDIMMED
=
C_X. "立即打印
LO_REC_OPTIONS
-
TDDELETE
=
SPACE
. "打印后立即删除
LO_REC_OPTIONS
-
TDNEWID
=
C_X. "新打印请求
LO_REC_OPTIONS
-
TDPREVIEW
=
C_X. "打印预览
*
2
-
3
-
1排序
SORT TBL_LIKP
BY
VBELN ASCENDING
VSBED ASCENDING.
SORT TBL_LIPS
BY
MATNR ASCENDING.
SORT TBL_RESB
BY
RSNUM ASCENDING
MATNR ASCENDING.
SORT TBL_RKPF
BY
RSNUM ASCENDING.
*
2
-
3
-
2帐票出力
*
打开文档格式
PERFORM FORM_OPEN
USING
C_SAPSCRIPT_ID "表格名称
C_ZH "语言
LO_REC_OPTIONS. "打印机选项
*
送货
/
提货
/
移送 输出
LOOP AT TBL_LIKP
INTO
REC_LIKP.
IF
LO_INDEX
<>
0
. "是否为第1页
PERFORM FORM_CONTROL
USING
'
NEW-PAGE
'
.
ENDIF.
LO_INDEX
=
LO_INDEX
+
1
.
LO_LINE
=
0
.
IF
REC_LIKP
-
ZZOP2FLG
IS
INITIAL.
G_ZZOP2FLGCHAR
=
SPACE
.
ELSE
.
G_ZZOP2FLGCHAR
=
TEXT
-
020
. "再印刷
ENDIF.
CASE
REC_LIKP
-
VSBED. "装运条件
*
2
-
3
-
2
-
1
[
装运条件
]
为常量01场合 提货格式输出
WHEN
C_01.
PERFORM FORM_WRITE
USING
'
E_TITLE_T
'
"提货单标题
'
HEAD
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD
'
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD_T
'
"提货单抬头
'
MAIN
'
.
LO_TITLE
=
'
E_TITLE_T
'
.
LO_HEAD
=
'
E_HEAD_T
'
.
*
2
-
3
-
2
-
2
[
装运条件
]
为常量02
/
03
/
04
/
05
/
11场合 送货格式输出
WHEN
C_02
OR
C_03
OR
C_04
OR
C_05
OR
C_11.
PERFORM FORM_WRITE
USING
'
E_TITLE_S
'
"送货单标题
'
HEAD
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD
'
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD_S
'
"送货单抬头
'
MAIN
'
.
LO_TITLE
=
'
E_TITLE_S
'
.
LO_HEAD
=
'
E_HEAD_S
'
.
WHEN
C_31.
*
2
-
3
-
2
-
2
[
装运条件
]
为常量31场合 送货格式输出
PERFORM FORM_WRITE
USING
'
E_TITLE_S
'
"送货单标题
'
HEAD
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD
'
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD_YS
'
"移送单抬头
'
MAIN
'
.
LO_TITLE
=
'
E_TITLE_S
'
.
LO_HEAD
=
'
E_HEAD_YS
'
.
WHEN
OTHERS. "其它场合
PERFORM FORM_WRITE
USING
'
E_TITLE_S
'
'
HEAD
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD
'
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD_YS
'
'
MAIN
'
.
LO_TITLE
=
'
E_TITLE_YS
'
.
LO_HEAD
=
'
E_HEAD_YS
'
.
ENDCASE.
PERFORM FORM_WRITE
USING
'
E_ITEM_HEAD
'
'
MAIN
'
. "明细头名称
G_LINE
=
'
5.2
'
.
DO
29
TIMES. "画29行明细表格行
PERFORM FORM_WRITE
USING
'
E_ITEM_BODY
'
'
MAIN
'
.
G_LINE
=
G_LINE
+
1
.
ENDDO.
*
详细信息输出
CLEAR REC_LIPS.
LOOP AT TBL_LIPS
INTO
REC_LIPS
WHERE
VBELN
=
REC_LIKP
-
VBELN. "与抬头对应的明细
IF
LO_LINE
>=
29
. "数据明细行大于29,分页
LO_LINE
=
0
.
PERFORM FORM_WRITE
USING
'
E_ITEM_FOOT
'
'
MAIN
'
. "当前页提货仓库
PERFORM FORM_WRITE
USING
'
E_FOOT
'
'
FOOT
'
. "打印当前页页脚
PERFORM FORM_CONTROL
USING
'
NEW-PAGE
'
. "新建页
PERFORM FORM_WRITE
USING
LO_TITLE
'
HEAD
'
. "上一页标题信息
PERFORM FORM_WRITE
USING
'
E_HEAD
'
'
MAIN
'
.
PERFORM FORM_WRITE
USING
LO_HEAD
'
MAIN
'
. "上一页头部信息
PERFORM FORM_WRITE
USING
'
E_ITEM_HEAD
'
'
MAIN
'
. "明细头名称
G_LINE
=
'
5.2
'
.
DO
29
TIMES.
PERFORM FORM_WRITE
USING
'
E_ITEM_BODY
'
'
MAIN
'
. "画表格行
G_LINE
=
G_LINE
+
1
. "表格行加1
ENDDO.
ENDIF.
PERFORM FORM_WRITE
USING
'
E_ITEM_DATA
'
"打印一条明细
'
MAIN
'
.
LO_LINE
=
LO_LINE
+
1
. "明细行加1
ENDLOOP.
PERFORM FORM_WRITE
USING
'
E_ITEM_FOOT
'
'
MAIN
'
. "打印提货仓库
PERFORM FORM_WRITE
USING
'
E_FOOT
'
'
FOOT
'
. "打印页脚
ENDLOOP.
*
移管 输出
LOOP AT TBL_RKPF
INTO
REC_RKPF.
IF
LO_INDEX
<>
0
.
PERFORM FORM_CONTROL
USING
'
NEW-PAGE
'
.
ENDIF.
LO_INDEX
=
LO_INDEX
+
1
.
LO_LINE
=
0
.
IF
REC_RKPF
-
ZZOP2FLG
IS
INITIAL. "再印刷标志
G_ZZOP2FLGCHAR
=
SPACE
.
ELSE
.
G_ZZOP2FLGCHAR
=
TEXT
-
020
. "
[
再印刷
]
ENDIF.
PERFORM FORM_WRITE
USING
'
E_TITLE_S
'
"送货单标题
'
HEAD
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD
'
"抬头方框
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD_YG
'
"移管抬头数据
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_ITEM_HEAD
'
"明细头名称
'
MAIN
'
.
*
打印29行明细条目框
G_LINE
=
'
5.2
'
.
DO
29
TIMES.
PERFORM FORM_WRITE
USING
'
E_ITEM_BODY
'
'
MAIN
'
.
G_LINE
=
G_LINE
+
1
.
ENDDO.
G_LINE
=
'
5.2
'
.
*
详细信息输出
CLEAR REC_RESB.
LOOP AT TBL_RESB
INTO
REC_RESB
WHERE
RSNUM
=
REC_RKPF
-
RSNUM.
IF
LO_LINE
>=
29
.
LO_LINE
=
0
.
PERFORM FORM_WRITE
USING
'
E_ITEM_FOOT_YG
'
'
MAIN
'
. "当前页提货仓库
PERFORM FORM_WRITE
USING
'
E_FOOT
'
'
FOOT
'
. "打印当前页页脚
PERFORM FORM_CONTROL
USING
'
NEW-PAGE
'
. "新建页
PERFORM FORM_WRITE
USING
'
E_TITLE_S
'
"标题
'
HEAD
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD
'
"抬头方框
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_HEAD_YG
'
"抬头数据
'
MAIN
'
.
PERFORM FORM_WRITE
USING
'
E_ITEM_HEAD
'
'
MAIN
'
. "明细头名称
G_LINE
=
'
5.2
'
.
DO
29
TIMES.
PERFORM FORM_WRITE
USING
'
E_ITEM_BODY
'
'
MAIN
'
.
G_LINE
=
G_LINE
+
1
.
ENDDO.
G_LINE
=
'
5.2
'
.
ENDIF.
PERFORM FORM_WRITE
USING
'
E_ITEM_DATA_YG
'
'
MAIN
'
. "打印一条移管数据
LO_LINE
=
LO_LINE
+
1
. "数据行加1
ENDLOOP.
PERFORM FORM_WRITE
USING
'
E_ITEM_FOOT_YG
'
'
MAIN
'
. "打印提货仓库
PERFORM FORM_WRITE
USING
'
E_FOOT
'
'
FOOT
'
. "打印页脚
ENDLOOP.
PERFORM FORM_CLOSE. "关闭文档格式
ENDFORM. " WRITE_SAPSCRIPT
*&
--
-------------------------------------------------------------------*
*&
FORM FORM_OPEN
*&
功能: 打开文档格式
*&
--
-------------------------------------------------------------------*
*
--
> I_FORM_NAME FORM的ID
*
--
> I_LANGUAGE 语言
*
--
> I_OPTIONS 打印机选项
*
--
--------------------------------------------------------------------*
FORM FORM_OPEN
USING
I_FORM_NAME TYPE
ANY
I_LANGUAGE TYPE
ANY
I_OPTIONS TYPE
ANY
.
CALL
FUNCTION
'
OPEN_FORM
'
EXPORTING
FORM
=
I_FORM_NAME
LANGUAGE
=
I_LANGUAGE
OPTIONS
=
I_OPTIONS
EXCEPTIONS
CANCELED
=
1
DEVICE
=
2
FORM
=
3
OPTIONS
=
4
UNCLOSED
=
5
MAIL_OPTIONS
=
6
ARCHIVE_ERROR
=
7
INVALID_FAX_NUMBER
=
8
MORE_PARAMS_NEEDED_IN_BATCH
=
9
SPOOL_ERROR
=
10
CODEPAGE
=
11
OTHERS
=
12
.
IF
SY
-
SUBRC
<>
0
. "出现异常报系统消息
MESSAGE ID SY
-
MSGID TYPE SY
-
MSGTY
NUMBER
SY
-
MSGNO
WITH
SY
-
MSGV1 SY
-
MSGV2 SY
-
MSGV3 SY
-
MSGV4.
ENDIF.
ENDFORM. " FORM_OPEN
*&
--
-------------------------------------------------------------------*
*&
FORM FORM_WRITE
*&
功能: 指定WINDOW ELEMENT输出到当前打开的FORM
*&
--
-------------------------------------------------------------------*
*
--
> I_ELEMENT_NAME 文本元素名称
*
--
> I_WINDOW_NAME 页窗口名称
*
--
--------------------------------------------------------------------*
FORM FORM_WRITE USING I_ELEMENT_NAME TYPE
ANY
I_WINDOW_NAME TYPE
ANY
.
CALL
FUNCTION
'
WRITE_FORM
'
EXPORTING
ELEMENT
=
I_ELEMENT_NAME
WINDOW
=
I_WINDOW_NAME
EXCEPTIONS
ELEMENT
=
1
FUNCTION
=
2
TYPE
=
3
UNOPENED
=
4
UNSTARTED
=
5
WINDOW
=
6
BAD_PAGEFORMAT_FOR_PRINT
=
7
SPOOL_ERROR
=
8
CODEPAGE
=
9
OTHERS
=
10
.
IF
SY
-
SUBRC
<>
0
. "出现异常报系统消息
MESSAGE ID SY
-
MSGID TYPE SY
-
MSGTY
NUMBER
SY
-
MSGNO
WITH
SY
-
MSGV1 SY
-
MSGV2 SY
-
MSGV3 SY
-
MSGV4.
ENDIF.
ENDFORM. "FORM_WRITE
*&
--
-------------------------------------------------------------------*
*&
FORM FORM_CLOSE
*&
功能: 关闭文档格式
*&
--
-------------------------------------------------------------------*
FORM FORM_CLOSE.
CALL
FUNCTION
'
CLOSE_FORM
'
EXCEPTIONS
UNOPENED
=
1
BAD_PAGEFORMAT_FOR_PRINT
=
2
SEND_ERROR
=
3
SPOOL_ERROR
=
4
CODEPAGE
=
5
OTHERS
=
6
.
IF
SY
-
SUBRC
<>
0
. "出现异常报系统消息
MESSAGE ID SY
-
MSGID TYPE SY
-
MSGTY
NUMBER
SY
-
MSGNO
WITH
SY
-
MSGV1 SY
-
MSGV2 SY
-
MSGV3 SY
-
MSGV4.
ENDIF.
ENDFORM. "FORM_CLOSE
*&
--
-------------------------------------------------------------------*
*&
FORM FORM_CONTROL
*&
功能: FROM控制
*&
--
-------------------------------------------------------------------*
*
--
> I_COMMAND FORM命令
*
--
--------------------------------------------------------------------*
FORM FORM_CONTROL
USING
I_COMMAND TYPE
ANY
.
CALL
FUNCTION
'
CONTROL_FORM
'
EXPORTING
COMMAND
=
I_COMMAND
EXCEPTIONS
UNOPENED
=
1
UNSTARTED
=
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.
ENDFORM. "FORM_CONTROL
*&
--
-------------------------------------------------------------------*
*&
FORM WRITE_SMARTFORM
*&
功能: SMARTFROM输出
*&
--
-------------------------------------------------------------------*
FORM WRITE_SMARTFORM.
DATA LO_RS38L_FNAM TYPE RS38L_FNAM. "SMARTFORMS文件名
SORT TBL_LIKP
BY
VBELN. "对内部表TBL_LIKP排序
SORT TBL_RKPF
BY
RSNUM. "对内部表TBL_RKPF排序
CONCATENATE C_SMARTFORM_ID "SMARTFORM名称
C_LIKP "表名LIKP
SY
-
UZEIT "当前时间
INTO
G_LIKP. "生成标记ID
REC_INDX
-
AEDAT
=
SY
-
DATUM. "SYST日期
REC_INDX
-
USERA
=
SY
-
UNAME. "用户名
REC_INDX
-
PGMID
=
SY
-
REPID. "ABAP 程序名
EXPORT TBL_LIKP
[]
"把内表存入数据库缓存
TO
DATABASE
INDX(HK) "EXPORT 数据表中的区域
ID G_LIKP "INDX中用户
-
定义关键字
FROM
REC_INDX.
CONCATENATE C_SMARTFORM_ID "SMARTFORM名称
C_LIPS "表名LIPS
SY
-
UZEIT "当前时间
INTO
G_LIPS. "生成标记ID
REC_INDX
-
AEDAT
=
SY
-
DATUM. "SYST日期
REC_INDX
-
USERA
=
SY
-
UNAME. "用户名
REC_INDX
-
PGMID
=
SY
-
REPID. "ABAP 程序名
EXPORT TBL_LIPS
[]
"把内表存入数据库缓存
TO
DATABASE
INDX(HK) "EXPORT 数据表中的区域
ID G_LIPS "INDX中用户
-
定义关键字
FROM
REC_INDX.
CONCATENATE C_SMARTFORM_ID "SMARTFORM名称
C_RKPF "表名RKPF
SY
-
UZEIT "当前时间
INTO
G_RKPF. "生成标记ID
REC_INDX
-
AEDAT
=
SY
-
DATUM. "SYST日期
REC_INDX
-
USERA
=
SY
-
UNAME. "用户名
REC_INDX
-
PGMID
=
SY
-
REPID. "ABAP 程序名
EXPORT TBL_RKPF
[]
"把内表存入数据库缓存
TO
DATABASE
INDX(HK) "EXPORT 数据表中的区域
ID G_RKPF "INDX中用户
-
定义关键字
FROM
REC_INDX.
CONCATENATE C_SMARTFORM_ID "SMARTFORM名称
C_RESB "表名RESB
SY
-
UZEIT "当前时间
INTO
G_RESB. "生成标记ID
REC_INDX
-
AEDAT
=
SY
-
DATUM. "SYST日期
REC_INDX
-
USERA
=
SY
-
UNAME. "用户名
REC_INDX
-
PGMID
=
SY
-
REPID. "ABAP 程序名
EXPORT TBL_RESB
[]
"把内表存入数据库缓存
TO
DATABASE
INDX(HK) "EXPORT 数据表中的区域
ID G_RESB "INDX中用户
-
定义关键字
FROM
REC_INDX.
CALL
FUNCTION
'
SSF_FUNCTION_MODULE_NAME
'
EXPORTING
FORMNAME
=
'
ZMMR001_A140
'
"SMARTFORMS程序名
IMPORTING
FM_NAME
=
LO_RS38L_FNAM "对应的函数名
EXCEPTIONS
NO_FORM
=
1
NO_FUNCTION_MODULE
=
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.
CALL
FUNCTION
LO_RS38L_FNAM
EXPORTING
P_LIKP
=
G_LIKP "TBL_LIKP对应的ID
P_LIPS
=
G_LIPS "TBL_LIPS对应的ID
P_RKPF
=
G_RKPF "TBL_RKPF对应的ID
P_RESB
=
G_RESB "TBL_RESB对应的ID
EXCEPTIONS
FORMATTING_ERROR
=
1
INTERNAL_ERROR
=
2
SEND_ERROR
=
3
USER_CANCELED
=
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.
ENDIF.
DELETE
FROM
DATABASE
INDX(HK) ID G_LIKP. "删除缓存数据TBL_LIKP
DELETE
FROM
DATABASE
INDX(HK) ID G_LIPS. "删除缓存数据TBL_LIPS
DELETE
FROM
DATABASE
INDX(HK) ID G_LIKP. "删除缓存数据TBL_RKPF
DELETE
FROM
DATABASE
INDX(HK) ID G_LIPS. "删除缓存数据TBL_RESB
ENDFORM. "WRITE_SMARTFORM
*&
--
-------------------------------------------------------------------*
*&
FORM PROCESS_END
*&
功能: 打印完毕后,确定已打印标志,更新数据库
*&
--
-------------------------------------------------------------------*
FORM PROCESS_END.
LOOP AT TBL_LIKP
INTO
REC_LIKP.
UPDATE
LIPS "确定LIPS中已打印标志
SET
ZZOP2FLG
=
C_X
WHERE
VBELN
=
REC_LIKP
-
VBELN.
ENDLOOP.
LOOP AT TBL_RESB
INTO
REC_RESB.
UPDATE
RESB "确定RESB中已打印标志
SET
ZZOP2FLG
=
C_X
WHERE
RSNUM
=
REC_RESB
-
RSNUM.
ENDLOOP.
ENDFORM. "PROCESS_END