-
Notifications
You must be signed in to change notification settings - Fork 2
/
generateSomeDataEx.abap
361 lines (296 loc) · 10.5 KB
/
generateSomeDataEx.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
*&---------------------------------------------------------------------*
*& Report ZTREINA06
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTREINA06.
TABLES: ztreina_car,
ztreina_carloc.
**********************************************************************
* TYPES
**********************************************************************
TYPES: BEGIN OF ty_carros,
mandt TYPE ztreina_car-mandt ,
id_carro TYPE ztreina_car-id_carro ,
placa TYPE ztreina_car-placa ,
ano TYPE ztreina_car-ano ,
marca TYPE ztreina_car-marca ,
cor TYPE ztreina_car-cor ,
preco TYPE ztreina_car-preco ,
END OF ty_carros,
BEGIN OF ty_locacao,
mandt TYPE ztreina_carloc-mandt ,
id_locacao TYPE ztreina_carloc-id_locacao ,
placa TYPE ztreina_carloc-placa ,
dtini TYPE ztreina_carloc-dtini ,
dtfim TYPE ztreina_carloc-dtfim ,
valor_locacao TYPE ztreina_carloc-valor_locacao ,
locatario TYPE ztreina_carloc-locatario ,
END OF ty_locacao,
BEGIN OF ty_marcas,
marca TYPE string,
END OF ty_marcas,
BEGIN OF ty_cores,
cor TYPE string,
END OF ty_cores,
t_cores TYPE TABLE OF ty_cores WITH EMPTY KEY,
t_marcas TYPE TABLE OF ty_marcas WITH EMPTY KEY.
**********************************************************************
* VARS
**********************************************************************
DATA: it_carros TYPE STANDARD TABLE OF ty_carros,
it_locacao TYPE STANDARD TABLE OF ty_locacao,
wa_carros TYPE ty_carros,
wa_locacao TYPE ty_locacao,
it_marcas TYPE t_marcas,
it_cores TYPE t_cores,
id_gen TYPE char128,
idxmarca_random TYPE i,
idxcor_random TYPE i,
idxplaca_random TYPE i,
idxlocatario_random TYPE i,
placa_gen TYPE char128,
placaconv TYPE ztreina_car-placa,
ano_gen TYPE i,
marca_gen TYPE i,
cor_gen TYPE i,
precoconv LIKE ztreina_car-preco,
preco_gen LIKE bbseg-wrbtr.
SELECTION-SCREEN BEGIN OF BLOCK block
WITH FRAME TITLE title.
PARAMETERS: radio1 RADIOBUTTON GROUP rad1,
radio2 RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK block.
SELECTION-SCREEN BEGIN OF BLOCK block2
WITH FRAME TITLE title2.
PARAMETERS: radio3 RADIOBUTTON GROUP rad2,
radio4 RADIOBUTTON GROUP rad2.
SELECTION-SCREEN END OF BLOCK block2.
SELECTION-SCREEN BEGIN OF BLOCK block3
WITH FRAME TITLE title3.
PARAMETERS: p_quant TYPE i OBLIGATORY.
SELECTION-SCREEN END OF BLOCK block3.
INITIALIZATION.
title = 'Tabela' .
title2 = 'Opção'.
title3 = 'Parametro' .
************************************************************************
** Processing block **
************************************************************************
START-OF-SELECTION.
IF radio1 = 'X' AND radio3 = 'X'.
PERFORM car_generator.
ELSEIF radio1 = 'X' AND radio4 = 'X'.
PERFORM car_deletion.
ELSEIF radio2 = 'X' AND radio3 = 'X'.
PERFORM carloc_generator.
ELSEIF radio2 = 'X' AND radio4 = 'X'.
PERFORM carloc_deletion.
ENDIF.
*&---------------------------------------------------------------------*
*& Form CAR_GENERATOR
*&---------------------------------------------------------------------*
FORM car_generator .
it_marcas = VALUE #( ( marca = 'Toyota' )
( marca = 'Volkswagen' )
( marca = 'Ford' )
( marca = 'Nissan' )
( marca = 'Honda' )
( marca = 'Hyundai' )
( marca = 'Chevrolet' )
( marca = 'Volkswagen' ) ).
it_cores = VALUE #( ( cor = 'Branco' )
( cor = 'Preto' )
( cor = 'Vermelho' )
( cor = 'Verde' )
( cor = 'Azul' )
( cor = 'Amarelo' )
( cor = 'Cinza' )
( cor = 'Prateado' ) ).
DO p_quant TIMES.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1
RND_MAX = 8
IMPORTING
RND_VALUE = idxmarca_random .
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1
RND_MAX = 8
IMPORTING
RND_VALUE = idxcor_random .
* Escolhendo marca e cores
READ TABLE it_marcas INDEX idxmarca_random INTO data(wa_marca).
READ TABLE it_cores INDEX idxcor_random INTO data(wa_cor).
* Gerando id do carro
CALL FUNCTION 'RANDOM_C_BY_SET'
EXPORTING
LEN_MIN = 7
LEN_MAX = 7
CHAR_MIN = 1
CHAR_MAX = 10
charset = '1234567890'
IMPORTING
RND_VALUE = id_gen.
* Gerando numero da placa
CALL FUNCTION 'RANDOM_C_BY_SET'
EXPORTING
LEN_MIN = 7
LEN_MAX = 7
CHAR_MIN = 1
CHAR_MAX = 36
charset = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
IMPORTING
RND_VALUE = placa_gen.
* Gerando ano
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1980
RND_MAX = 2019
IMPORTING
RND_VALUE = ano_gen.
* Gerando preço do carro
CALL FUNCTION 'RANDOM_AMOUNT'
EXPORTING
RND_MIN = '50000'
RND_MAX = '300000'
VALCURR = 'BRL'
IMPORTING
RND_AMOUNT = preco_gen.
CALL FUNCTION 'MOVE_CHAR_TO_NUM'
EXPORTING
CHR = preco_gen
IMPORTING
NUM = precoconv
EXCEPTIONS
CONVT_NO_NUMBER = 1
CONVT_OVERFLOW = 2
OTHERS = 3.
APPEND VALUE #( mandt = 'DEV'
id_carro = id_gen
placa = placa_gen
ano = ano_gen
marca = wa_marca-marca
cor = wa_cor-cor
preco = precoconv ) TO it_carros.
ENDDO.
SORT it_carros.
DELETE ADJACENT DUPLICATES FROM it_carros COMPARING placa.
INSERT ztreina_car FROM TABLE it_carros.
COMMIT WORK.
MESSAGE 'Dados dos carros gerados aleatoriamente' TYPE 'S'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CARLOC_GENERATOR
*&---------------------------------------------------------------------*
FORM carloc_generator .
SELECT placa
FROM ztreina_car INTO TABLE @data(it_placas).
SELECT pernr
FROM pa0002 INTO TABLE @data(it_locatarios).
DESCRIBE TABLE it_placas LINES data(lv_placascnt).
DESCRIBE TABLE it_locatarios LINES data(lv_locatarioscnt).
DO p_quant TIMES.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1
RND_MAX = lv_placascnt
IMPORTING
RND_VALUE = idxplaca_random .
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1
RND_MAX = lv_locatarioscnt
IMPORTING
RND_VALUE = idxlocatario_random .
* Escolhendo uma placa e locatario aleatoriamente
READ TABLE it_placas INDEX idxplaca_random INTO data(wa_placa).
READ TABLE it_locatarios INDEX idxlocatario_random INTO data(wa_locatarios).
* Gerando id da locação
CALL FUNCTION 'RANDOM_C_BY_SET'
EXPORTING
LEN_MIN = 7
LEN_MAX = 7
CHAR_MIN = 1
CHAR_MAX = 10
charset = '1234567890'
IMPORTING
RND_VALUE = id_gen.
* Gerando valor da locação
CALL FUNCTION 'RANDOM_AMOUNT'
EXPORTING
RND_MIN = '400'
RND_MAX = '3000'
VALCURR = 'BRL'
IMPORTING
RND_AMOUNT = preco_gen.
CALL FUNCTION 'MOVE_CHAR_TO_NUM'
EXPORTING
CHR = preco_gen
IMPORTING
NUM = precoconv
EXCEPTIONS
CONVT_NO_NUMBER = 1
CONVT_OVERFLOW = 2
OTHERS = 3.
*gerando datas
data: d_ini TYPE sy-datum,
d_fim TYPE sy-datum,
dt_ini TYPE sy-datum,
dt_fim TYPE sy-datum,
i_date TYPE sy-datum,
v_date TYPE sy-datum.
dt_ini = sy-datum. "'20190707'.
dt_fim = sy-datum. "'20190707'.
data(decrement_random) = 0.
data(increment_random) = 0.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1
RND_MAX = 31
IMPORTING
RND_VALUE = decrement_random .
CALL FUNCTION 'RANDOM_I4'
EXPORTING
RND_MIN = 1
RND_MAX = 31
IMPORTING
RND_VALUE = increment_random .
IF sy-index MOD 2 = 0.
d_ini = dt_ini + increment_random.
d_fim = dt_fim - decrement_random.
ELSE.
d_ini = dt_ini - decrement_random.
d_fim = dt_fim + increment_random.
ENDIF.
APPEND VALUE #( mandt = 'DEV'
id_locacao = id_gen
placa = wa_placa-placa
dtini = d_ini
dtfim = d_fim
valor_locacao = precoconv
locatario = wa_locatarios-pernr ) TO it_locacao.
ENDDO.
SORT it_locacao.
DELETE ADJACENT DUPLICATES FROM it_locacao COMPARING placa.
INSERT ztreina_carloc FROM TABLE it_locacao.
COMMIT WORK.
MESSAGE 'Dados dos carros gerados aleatoriamente' TYPE 'S'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CAR_DELETION
*&---------------------------------------------------------------------*
FORM car_deletion .
DELETE FROM ztreina_car.
COMMIT WORK.
MESSAGE 'Dados da tabela ZTREINA_CAR eliminados' TYPE 'S'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CARLOC_DELETION
*&---------------------------------------------------------------------*
FORM carloc_deletion .
DELETE FROM ztreina_carloc.
COMMIT WORK.
MESSAGE 'Dados da tabela ZTREINA_CARLOC eliminados' TYPE 'S'.
ENDFORM.