1 REPORT zscm_taobaoso_ptint.
2 INCLUDE zscm_taobaoso_ptint_d01.
3 INCLUDE zscm_taobaoso_ptint_s01.
4 INCLUDE zscm_taobaoso_ptint_e01.
5 INCLUDE zscm_taobaoso_ptint_f01.
1 TABLES: VBAK,ADRC.
2 TYPES : BEGIN OF contact,
3 vbeln TYPE vbak-vbeln, "凭证订单号
4 END OF contact.
5
6 TYPES : BEGIN OF main01,
7 knumv TYPE knumv,
8 kbetr TYPE kbetr,
9 kschl TYPE kschl,
10 END OF main01.
11 DATA: gt_main01 TYPE TABLE OF main01.
12 DATA: gs_main01 TYPE main01.
13
14 DATA: gt_main LIKE TABLE OF zdsprint_main. "主工作区 及 主内表
15
16 DATA: gs_main LIKE zdsprint_main.
17
18 DATA: gt_item LIKE TABLE OF zdsprint_item."行项目
19 DATA: gs_item LIKE zdsprint_item.
20 DATA: gt_item01 LIKE TABLE OF zdsprint_item.
21 DATA: gs_item01 LIKE zdsprint_item.
22
23 DATA: gt_contact TYPE TABLE OF contact. "关联
24 DATA: gs_contact TYPE contact.
25
26
27
28 CONSTANTS: c_auart TYPE vbak-auart VALUE 'ZDS'.
29 CONSTANTS: c_parvw TYPE vbpa-parvw VALUE 'WE',
30 c_y007(4) VALUE 'Y007',
31 c_y008(4) VALUE 'Y008',
32 c_zm01(4) VALUE 'ZM01'.
33
34 ***定义控制参数
35 DATA: func_module_name TYPE rs38l_fnam.
36 DATA: output_options TYPE ssfcompop.
37 DATA: control_parameters TYPE ssfctrlop.
38 DATA: job_output_options TYPE ssfcresop.
39
40 DATA: ds_name TYPE name1.
1 *&---------------------------------------------------------------------*
2 *& 包括 ZSCM_TAOBAOSO_PTINT_E01
3 *&---------------------------------------------------------------------*
4
5 START-OF-SELECTION.
6 PERFORM getdata. "取数据过程 分别取抬头数据和行项目数据到相关的内表中
7 PERFORM print_from .
8 "PERFORM PRINT_PROGRAM. "调用smartforms进行打印
1 *&---------------------------------------------------------------------*
2 *& 包括 ZSCM_TAOBAOSO_PTINT_S01
3 *&---------------------------------------------------------------------*
4 SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-108.
5 PARAMETERS: S_VKBUR TYPE T001W-WERKS OBLIGATORY DEFAULT '1508'. "门店
6 SELECT-OPTIONS: S_DATE FOR VBAK-ERDAT DEFAULT SY-DATUM. "订单日期
7 SELECT-OPTIONS: S_SOID FOR VBAK-VBELN. "销售订单号
8 SELECTION-SCREEN: END OF BLOCK B1 .
1 *&---------------------------------------------------------------------*
2 *& 包括 ZSCM_TAOBAOSO_PTINT_F01
3 *&---------------------------------------------------------------------*
4 *&---------------------------------------------------------------------*
5 *& Form GETDATA
6 *&---------------------------------------------------------------------*
7 * 取数据过程
8 *----------------------------------------------------------------------*
9 * --> p1 text
10 * <-- p2 text
11 *----------------------------------------------------------------------*
12 FORM GETDATA .
13 DATA LINE TYPE I . "主数据的行数,判断是否为空
14 * 取出抬头数据
15 SELECT A~VBELN A~VKBUR A~KNUMV A~KUNNR C~ADRNR D~NAME1 D~CITY1 D~STREET D~HOUSE_NUM1 D~POST_CODE1 D~TEL_NUMBER
16 INTO CORRESPONDING FIELDS OF TABLE GT_MAIN
17 FROM VBAK AS A
18 INNER JOIN LIPS AS B ON A~VBELN = B~VGBEL
19 INNER JOIN VBPA AS C ON A~KUNNR = C~KUNNR AND A~VBELN = C~VBELN
20 INNER JOIN ADRC AS D ON D~ADDRNUMBER = C~ADRNR
21 WHERE A~AUART = C_AUART AND A~VBELN IN S_SOID AND A~ERDAT IN S_DATE AND A~VKBUR = S_VKBUR AND C~PARVW = C_PARVW .
22
23 *判断主数据是否为空
24 SORT GT_MAIN BY VBELN KNUMV.
25 DELETE ADJACENT DUPLICATES FROM GT_MAIN.
26 DESCRIBE TABLE GT_MAIN LINES LINE .
27 IF LINE IS INITIAL .
28 MESSAGE TEXT-002 TYPE 'E'.
29 ENDIF.
30
31 *取出明细数据
32 SELECT A~VBELN A~POSNR A~MATNR A~ARKTX A~KMEIN A~NETPR B~LGMNG AS RV45A INTO CORRESPONDING FIELDS OF TABLE GT_ITEM
33 FROM VBAP AS A
34 INNER JOIN LIPS AS B ON B~VGBEL = A~VBELN AND B~VGPOS = A~POSNR
35 FOR ALL ENTRIES IN GT_MAIN WHERE ( A~VBELN = GT_MAIN-VBELN ). "取数据到行项目表
36
37 *判断明细数据是否为空
38 IF LINES( GT_ITEM ) = 0 .
39 MESSAGE TEXT-002 TYPE 'E'.
40 ENDIF.
41
42 *取出Y008 Y007 两个条件定价的数据
43 SELECT KNUMV KBETR KSCHL INTO CORRESPONDING FIELDS OF TABLE GT_MAIN01 FROM KONV
44 FOR ALL ENTRIES IN GT_MAIN WHERE KNUMV = GT_MAIN-KNUMV AND KSCHL IN (C_Y007,C_Y008) AND KINAK = ' ' .
45
46 SORT GT_MAIN BY VBELN KNUMV.
47 SORT GT_MAIN01 BY KNUMV.
48
49 LOOP AT GT_MAIN INTO GS_MAIN .
50 "假设GT_MAIN01不为空 进行赋值
51 IF GT_MAIN01 IS NOT INITIAL .
52 READ TABLE GT_MAIN01 INTO GS_MAIN01 WITH KEY KNUMV = GS_MAIN-KNUMV KSCHL = C_Y007 BINARY SEARCH.
53 IF SY-SUBRC = 0 .
54 GS_MAIN-KBETR1 = 0 - GS_MAIN01-KBETR / 10 . "取折扣金额
55 ENDIF.
56 CLEAR GS_MAIN01 .
57 READ TABLE GT_MAIN01 INTO GS_MAIN01 WITH KEY KNUMV = GS_MAIN-KNUMV KSCHL = C_Y008 BINARY SEARCH.
58 IF SY-SUBRC = 0 .
59 GS_MAIN-KBETR2 = 0 - GS_MAIN01-KBETR. "取抹零金额
60 ENDIF.
61 CLEAR GS_MAIN01 .
62 ENDIF.
63 "联系人地址连接
64 CONCATENATE GS_MAIN-CITY1 GS_MAIN-STREET GS_MAIN-HOUSE_NUM1 INTO GS_MAIN-ADDRESS.
65 MODIFY GT_MAIN FROM GS_MAIN .
66 ENDLOOP.
67
68 *取KNUMV字段到
69 LOOP AT GT_ITEM INTO GS_ITEM.
70 READ TABLE GT_MAIN INTO GS_MAIN WITH KEY VBELN = GS_ITEM-VBELN BINARY SEARCH. "前面已经排序
71 IF SY-SUBRC = 0 .
72 GS_ITEM-KNUMV = GS_MAIN-KNUMV.
73 MODIFY GT_ITEM FROM GS_ITEM.
74 ENDIF.
75 ENDLOOP.
76
77 *取出ZM01 条件定价的数据
78 SELECT KNUMV KBETR KPOSN AS POSNR INTO CORRESPONDING FIELDS OF TABLE GT_ITEM01 FROM KONV
79 FOR ALL ENTRIES IN GT_ITEM WHERE KNUMV = GT_ITEM-KNUMV AND KPOSN = GT_ITEM-POSNR AND KSCHL = C_ZM01 AND KINAK = ' ' .
80
81 *取价格和总价
82 IF GT_ITEM01 IS NOT INITIAL .
83 SORT GT_ITEM01.
84 LOOP AT GT_ITEM INTO GS_ITEM.
85 READ TABLE GT_ITEM01 WITH KEY KNUMV = GS_ITEM-KNUMV POSNR = GS_ITEM-POSNR INTO GS_ITEM01 .
86 IF SY-SUBRC = 0 .
87 GS_ITEM-KBETR = GS_ITEM01-KBETR.
88 ENDIF.
89
90 GS_ITEM-SUM_KBETR = GS_ITEM-KBETR * GS_ITEM-RV45A .
91 MODIFY GT_ITEM FROM GS_ITEM.
92 ENDLOOP.
93 ENDIF.
94
95 SELECT SINGLE NAME1 INTO (DS_NAME) FROM T001W WHERE WERKS = S_VKBUR . "取电商名称
96
97 ENDFORM. " GETDATA
98
99
100 *&---------------------------------------------------------------------*
101 *& Form PRINT_FROM
102 *&---------------------------------------------------------------------*
103 * text
104 *----------------------------------------------------------------------*
105 FORM PRINT_FROM .
106 ***设置用户参数可用***
107 * OUTPUT_OPTIONS-TDIMMED = 'X'.
108 * OUTPUT_OPTIONS-TDNEWID = 'X'.
109 * OUTPUT_OPTIONS-TDDELETE = 'X'.
110 * OUTPUT_OPTIONS-tdfinal = 'X'.
111 *
112 CONTROL_PARAMETERS-PREVIEW = 'X'.
113 CONTROL_PARAMETERS-NO_OPEN = 'X'.
114 CONTROL_PARAMETERS-NO_CLOSE = 'X'.
115 CONTROL_PARAMETERS-NO_DIALOG = ' '.
116 CONTROL_PARAMETERS-DEVICE = 'PRINTER'.
117
118 ***调用Smartfomr***
119 CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
120 EXPORTING
121 FORMNAME = 'ZSCM_TAOBAOSO_PTINT_SMART'
122 IMPORTING
123 FM_NAME = FUNC_MODULE_NAME
124 EXCEPTIONS
125 NO_FORM = 1
126 NO_FUNCTION_MODULE = 2
127 OTHERS = 3.
128 IF SY-SUBRC <> 0.
129 EXIT.
130 ENDIF.
131
132
133 ***调用SSF_OPEN Form Call***
134 CALL FUNCTION 'SSF_OPEN'
135 EXPORTING
136 USER_SETTINGS = 'X'
137 OUTPUT_OPTIONS = OUTPUT_OPTIONS
138 CONTROL_PARAMETERS = CONTROL_PARAMETERS
139 IMPORTING
140 JOB_OUTPUT_OPTIONS = JOB_OUTPUT_OPTIONS
141 EXCEPTIONS
142 FORMATTING_ERROR = 1
143 INTERNAL_ERROR = 2
144 SEND_ERROR = 3
145 USER_CANCELED = 4
146 OTHERS = 5.
147 IF SY-SUBRC <> 0.
148 * Implement suitable error handling here
149 ENDIF.
150
151
152 CALL FUNCTION FUNC_MODULE_NAME
153 EXPORTING
154 USER_SETTINGS = 'X'
155 OUTPUT_OPTIONS = OUTPUT_OPTIONS
156 CONTROL_PARAMETERS = CONTROL_PARAMETERS
157 DS_NAME = DS_NAME
158 * IMPORTING
159 * DOCUMENT_OUTPUT_INFO = DOCUMENT_OUTPUT_INFO
160 * JOB_OUTPUT_INFO = JOB_OUTPUT_INFO
161 * JOB_OUTPUT_OPTIONS = JOB_OUTPUT_OPTIONS
162 TABLES
163 GT_MAIN = GT_MAIN
164 GT_ITEM = GT_ITEM
165 EXCEPTIONS
166 FORMATTING_ERROR = 1
167 INTERNAL_ERROR = 2
168 SEND_ERROR = 3
169 USER_CANCELED = 4
170 .
171
172
173
174 ***调用SSF_CLOSE***
175 CALL FUNCTION 'SSF_CLOSE'
176 * IMPORTING
177 * JOB_OUTPUT_INFO =
178 EXCEPTIONS
179 FORMATTING_ERROR = 1
180 INTERNAL_ERROR = 2
181 SEND_ERROR = 3
182 OTHERS = 4.
183
184
185
186
187 ENDFORM. " PRINT_FROM