大象怒怒的小脚


没有终了漂泊,于是成了树上的精灵.有梦想,却不会飞翔.用自己短短的羽翼,跳跃在迷离的枝头……

首页 新随笔 联系 订阅 管理

这是中文环境下做的程序, 复制过来,代码间的空格错开了,下面的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(8TEXT-000.
  SELECTION
-SCREEN END OF LINE.
*仓库
  SELECTION
-SCREEN BEGIN OF LINE.
    SELECTION
-SCREEN COMMENT 10(8TEXT-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(8TEXT-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(8TEXT-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(10TEXT-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(8TEXT-005.
  SELECTION
-SCREEN END OF LINE.
*出库凭证番号
  SELECTION
-SCREEN BEGIN OF LINE.
    SELECTION
-SCREEN COMMENT 10(12TEXT-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(10TEXT-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(8TEXT-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(8TEXT-009.
  SELECTION
-SCREEN END OF LINE.

  SELECTION
-SCREEN  SKIP 1.

*打印设备
  SELECTION
-SCREEN BEGIN OF LINE.
    SELECTION
-SCREEN COMMENT 10(8TEXT-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

 

posted on 2005-11-03 13:21  大象怒怒  阅读(1389)  评论(1编辑  收藏  举报