· 5 years ago · Aug 12, 2020, 08:26 AM
1*&---------------------------------------------------------------------*
2*& Include ZFM_0198_FEB_F01
3*&---------------------------------------------------------------------*
4
5FORM at_selection_screen_output.
6 LOOP AT SCREEN.
7 CASE screen-group1.
8 WHEN 'SC2'.
9 CASE abap_true.
10 WHEN p_load.
11 screen-active = 0.
12 MODIFY SCREEN.
13 ENDCASE.
14 WHEN 'SC3'.
15 CASE abap_true.
16 WHEN p_view.
17 screen-active = 0.
18 MODIFY SCREEN.
19 ENDCASE.
20 ENDCASE.
21 ENDLOOP.
22ENDFORM.
23
24FORM read_file.
25 DATA: lt_excel TYPE issr_alsmex_tabline,
26 lv_last_row TYPE i,
27 lv_row TYPE i,
28 ls_header TYPE ztfm_feb_ch_h,
29 lv_guid TYPE guid,
30 lv_dummy TYPE c,
31 ls_bal_log TYPE bal_s_log.
32
33 IF go_log_file IS INITIAL.
34 ls_bal_log-aldate = sy-datum.
35 ls_bal_log-aluser = sy-uname.
36
37 go_log_file = NEW zcl_log_simple( is_header = ls_bal_log ).
38 ENDIF.
39
40 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
41 EXPORTING
42 filename = p_file
43 i_begin_col = 1
44 i_begin_row = 1
45 i_end_col = 9999
46 i_end_row = 9999
47 TABLES
48 intern = lt_excel
49 EXCEPTIONS
50 inconsistent_parameters = 1
51 upload_ole = 2
52 OTHERS = 3.
53 IF sy-subrc <> 0.
54 MESSAGE s000(zfm_0198_msg) WITH p_file DISPLAY LIKE 'E'.
55 STOP.
56 ENDIF.
57
58 TRY.
59 lv_guid = cl_system_uuid=>create_uuid_x16_static( ).
60 CATCH cx_uuid_error.
61 CLEAR lv_guid.
62 ENDTRY.
63
64 ls_header-bukrs = VALUE #( lt_excel[ row = 2 col = 2 ]-value OPTIONAL ).
65 IF ls_header-bukrs IS INITIAL.
66 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-012.
67 go_log_file->message_add( ).
68 ENDIF.
69
70 ls_header-hbkid = VALUE #( lt_excel[ row = 3 col = 2 ]-value OPTIONAL ).
71 IF ls_header-hbkid IS INITIAL.
72 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-013.
73 go_log_file->message_add( ).
74 ENDIF.
75
76 ls_header-hktid = VALUE #( lt_excel[ row = 4 col = 2 ]-value OPTIONAL ).
77 IF ls_header-hktid IS INITIAL.
78 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-014.
79 go_log_file->message_add( ).
80 ENDIF.
81
82 DATA(lv_azdat) = VALUE #( lt_excel[ row = 5 col = 2 ]-value OPTIONAL ).
83 IF lv_azdat IS INITIAL.
84 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-015.
85 go_log_file->message_add( ).
86 ELSE.
87 CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
88 EXPORTING
89 date_external = lv_azdat
90 IMPORTING
91 date_internal = ls_header-azdat
92 EXCEPTIONS
93 date_external_is_invalid = 1
94 OTHERS = 2.
95 IF sy-subrc <> 0.
96 MESSAGE e005(zfm_0198_msg) INTO lv_dummy.
97 go_log_file->message_add( ).
98 ENDIF.
99 ENDIF.
100
101 DATA(lv_ssbtr) = VALUE #( lt_excel[ row = 6 col = 2 ]-value OPTIONAL ).
102 IF lv_ssbtr IS INITIAL.
103 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-016.
104 go_log_file->message_add( ).
105 ELSE.
106 CONDENSE lv_ssbtr NO-GAPS.
107 IF CONV string( lv_ssbtr ) CN '0123456789.,'.
108 MESSAGE e006(zfm_0198_msg) INTO lv_dummy.
109 go_log_file->message_add( ).
110 ELSE.
111 REPLACE ALL OCCURRENCES OF ',' IN lv_ssbtr WITH '.'.
112 ls_header-ssbtr = lv_ssbtr.
113 ENDIF.
114 ENDIF.
115
116 DATA(lv_sumha) = VALUE #( lt_excel[ row = 7 col = 2 ]-value OPTIONAL ).
117 IF lv_sumha IS INITIAL.
118 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-017.
119 go_log_file->message_add( ).
120 ELSE.
121 CONDENSE lv_sumha NO-GAPS.
122 IF CONV string( lv_sumha ) CN '0123456789.,'.
123 MESSAGE e007(zfm_0198_msg) INTO lv_dummy.
124 go_log_file->message_add( ).
125 ELSE.
126 REPLACE ALL OCCURRENCES OF ',' IN lv_sumha WITH '.'.
127 ls_header-sumha = lv_sumha.
128 ENDIF.
129 ENDIF.
130
131 DATA(lv_sumso) = VALUE #( lt_excel[ row = 8 col = 2 ]-value OPTIONAL ).
132 IF lv_sumso IS INITIAL.
133 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-018.
134 go_log_file->message_add( ).
135 ELSE.
136 CONDENSE lv_sumso NO-GAPS.
137 IF CONV string( lv_sumso ) CN '0123456789.,'.
138 MESSAGE e008(zfm_0198_msg) INTO lv_dummy.
139 go_log_file->message_add( ).
140 ELSE.
141 REPLACE ALL OCCURRENCES OF ',' IN lv_sumso WITH '.'.
142 ls_header-sumso = lv_sumso.
143 ENDIF.
144 ENDIF.
145
146 DATA(lv_esbtr) = VALUE #( lt_excel[ row = 9 col = 2 ]-value OPTIONAL ).
147 IF lv_esbtr IS INITIAL.
148 MESSAGE e002(zfm_0198_msg) INTO lv_dummy WITH text-019.
149 go_log_file->message_add( ).
150 ELSE.
151 CONDENSE lv_esbtr NO-GAPS.
152 IF CONV string( lv_esbtr ) CN '0123456789.,'.
153 MESSAGE e009(zfm_0198_msg) INTO lv_dummy.
154 go_log_file->message_add( ).
155 ELSE.
156 REPLACE ALL OCCURRENCES OF ',' IN lv_esbtr WITH '.'.
157 ls_header-esbtr = lv_esbtr.
158 ENDIF.
159 ENDIF.
160
161 ls_header-cpudt = sy-datum.
162 ls_header-cputm = sy-uzeit.
163 ls_header-usnam = sy-uname.
164 ls_header-id = lv_guid.
165
166 APPEND ls_header TO gt_header.
167
168 lv_last_row = lt_excel[ lines( lt_excel ) ]-row.
169
170 lv_row = 13.
171 WHILE lv_row LE lv_last_row.
172 APPEND INITIAL LINE TO gt_items ASSIGNING FIELD-SYMBOL(<ls_item>).
173 <ls_item>-xumsw = VALUE #( lt_excel[ row = lv_row col = 10 ]-value OPTIONAL ).
174 <ls_item>-buzei = VALUE #( lt_excel[ row = lv_row col = 1 ]-value OPTIONAL ).
175 DATA(lv_buzei) = CONV i( <ls_item>-buzei ) + 12.
176 IF lv_buzei - lv_row <> 0.
177 MESSAGE e001(zfm_0198_msg) INTO lv_dummy WITH <ls_item>-buzei.
178 go_log_file->message_add( ).
179* EXIT.
180 ENDIF.
181 <ls_item>-vgint = VALUE #( lt_excel[ row = lv_row col = 2 ]-value OPTIONAL ).
182 IF <ls_item>-vgint IS INITIAL.
183 MESSAGE e003(zfm_0198_msg) INTO lv_dummy WITH lv_row.
184 go_log_file->message_add( ).
185 ENDIF.
186 <ls_item>-kunnr = VALUE #( lt_excel[ row = lv_row col = 3 ]-value OPTIONAL ).
187 <ls_item>-hkont = VALUE #( lt_excel[ row = lv_row col = 4 ]-value OPTIONAL ).
188 IF <ls_item>-hkont IS INITIAL AND <ls_item>-xumsw IS NOT INITIAL.
189 MESSAGE e042(zfm_0198_msg) INTO lv_dummy WITH lv_row.
190 go_log_file->message_add( ).
191 ENDIF.
192 DATA(lv_wrbtr) = VALUE #( lt_excel[ row = lv_row col = 5 ]-value OPTIONAL ).
193 IF lv_wrbtr IS INITIAL.
194 MESSAGE e004(zfm_0198_msg) INTO lv_dummy WITH lv_row.
195 go_log_file->message_add( ).
196 ELSE.
197 CONDENSE lv_wrbtr NO-GAPS.
198 IF CONV string( lv_wrbtr ) CN '0123456789.,'.
199 MESSAGE e010(zfm_0198_msg) INTO lv_dummy WITH lv_row.
200 go_log_file->message_add( ).
201 ELSE.
202 REPLACE ALL OCCURRENCES OF ',' IN lv_wrbtr WITH '.'.
203 <ls_item>-wrbtr = lv_wrbtr.
204 ENDIF.
205 ENDIF.
206 <ls_item>-zuonr = VALUE #( lt_excel[ row = lv_row col = 6 ]-value OPTIONAL ).
207 IF <ls_item>-zuonr IS INITIAL AND <ls_item>-xumsw IS NOT INITIAL.
208 MESSAGE e043(zfm_0198_msg) INTO lv_dummy WITH lv_row.
209 go_log_file->message_add( ).
210 ENDIF.
211 <ls_item>-fipex = VALUE #( lt_excel[ row = lv_row col = 7 ]-value OPTIONAL ).
212 IF <ls_item>-fipex IS INITIAL AND <ls_item>-xumsw IS NOT INITIAL.
213 MESSAGE e044(zfm_0198_msg) INTO lv_dummy WITH lv_row.
214 go_log_file->message_add( ).
215 ENDIF.
216 <ls_item>-fistl = VALUE #( lt_excel[ row = lv_row col = 8 ]-value OPTIONAL ).
217 IF <ls_item>-fistl IS INITIAL AND <ls_item>-xumsw IS NOT INITIAL.
218 MESSAGE e045(zfm_0198_msg) INTO lv_dummy WITH lv_row.
219 go_log_file->message_add( ).
220 ENDIF.
221 <ls_item>-geber = VALUE #( lt_excel[ row = lv_row col = 9 ]-value OPTIONAL ).
222
223 <ls_item>-id = lv_guid.
224 lv_row = lv_row + 1.
225 ENDWHILE.
226
227 IF go_log_file->is_empty( ).
228 go_log_file->free( ).
229 FREE go_log_file.
230 INSERT ztfm_feb_ch_h FROM ls_header.
231 INSERT ztfm_feb_ch_i FROM TABLE gt_items.
232 PERFORM check_data_after_zupdate.
233 ELSE.
234 go_log_file->message_show( ).
235 go_log_file->message_clear( ).
236 go_log_file->free( ).
237 FREE go_log_file.
238 STOP.
239 ENDIF.
240
241ENDFORM.
242
243FORM check_data_after_zupdate.
244 CONSTANTS: lc_subobj TYPE balsubobj VALUE 'LOG_OF_LOADS'.
245
246 DATA: lv_dummy TYPE c,
247 lv_sum_plus TYPE wrbtr,
248 lv_sum_minus TYPE wrbtr,
249 lv_sum_minus_sumso TYPE wrbtr,
250 lv_sum_minus_sumha TYPE wrbtr,
251 lv_false_e TYPE abap_bool,
252 lt_check_d TYPE TABLE OF ztfm_feb_ch_i,
253 ls_header TYPE ztfm_feb_ch_h.
254
255 IF p_load = abap_true.
256 ls_header = gt_header[ 1 ].
257 gs_header = gt_header[ 1 ].
258 ELSE.
259 ls_header = gs_header.
260 ENDIF.
261
262 CLEAR gv_file_ok.
263
264 IF go_log_load IS INITIAL.
265
266 go_log_load = NEW zcl_log_simple( is_header = VALUE #( object = gc_object
267 extnumber = gs_header-id
268 subobject = lc_subobj ) ).
269 ENDIF.
270
271* a. Проверка БЕ на масштабирование
272 IF zcl_org=>is_zdevn_org_active(
273 EXPORTING
274 iv_bukrs = gs_header-bukrs
275 iv_zdevn_mod = 'FM'
276 iv_zdevn_num = 0198
277 iv_check_id = 'BILLING' ) = abap_false.
278 MESSAGE e047(zfm_0198_msg) INTO lv_dummy.
279 go_log_load->message_add( ).
280 ENDIF.
281
282
283* b. Проверка наличия БВ, соответствующей данным ALV отета.
284* Предварительно проверить для БЕ (1-й уровень ALV отчета)
285* наличие ИД банка и ИД счета в системе в принципе:
286 SELECT SINGLE bukrs, hbkid, hktid
287 FROM t012k
288 WHERE bukrs = @ls_header-bukrs
289 AND hbkid = @ls_header-hbkid
290 AND hktid = @ls_header-hktid
291 INTO @DATA(ls_t012k).
292 IF sy-subrc <> 0.
293 MESSAGE e011(zfm_0198_msg) INTO lv_dummy.
294 go_log_load->message_add( ).
295 ELSE.
296
297 SELECT kukey, ssbtr, esbtr, sumha, sumso
298 FROM febko
299 WHERE bukrs = @ls_header-bukrs
300 AND hbkid = @ls_header-hbkid
301 AND hktid = @ls_header-hktid
302 AND azdat = @ls_header-azdat
303 INTO TABLE @DATA(lt_kukey).
304
305 CASE sy-dbcnt.
306 WHEN 0.
307 MESSAGE e012(zfm_0198_msg) INTO lv_dummy.
308 go_log_load->message_add( ).
309 WHEN 1.
310 DATA(ls_kukey_1) = VALUE #( lt_kukey[ 1 ] OPTIONAL ).
311 ls_header-kukey_1 = ls_kukey_1-kukey.
312 gs_header-kukey_1 = ls_kukey_1-kukey.
313 MODIFY gt_header FROM ls_header INDEX 1.
314 MODIFY ztfm_feb_ch_h FROM ls_header.
315
316* c. Проверка обработки существующей в стандартных таблицах БВ
317 SELECT kukey
318 FROM zth2h_feb_hist
319 WHERE kukey = @ls_header-kukey_1
320 INTO TABLE @DATA(lt_kukey_).
321 IF sy-subrc = 0.
322 MESSAGE e014(zfm_0198_msg) INTO lv_dummy.
323 go_log_load->message_add( ).
324 ENDIF.
325 WHEN OTHERS.
326 MESSAGE e013(zfm_0198_msg) INTO lv_dummy.
327 go_log_load->message_add( ).
328 ls_header-kukey_1 = 00000000.
329 ENDCASE.
330 ENDIF.
331
332* d. Проверка позиций ALV отчета (2-й уровень) с заполненной колонкой «Признак обработки в БВ».
333 LOOP AT gt_items ASSIGNING FIELD-SYMBOL(<ls_item>) WHERE xumsw IS NOT INITIAL.
334 APPEND <ls_item> TO lt_check_d.
335 ENDLOOP.
336
337 CASE lines( lt_check_d ).
338 WHEN 1.
339 MESSAGE w015(zfm_0198_msg) INTO lv_dummy.
340 go_log_load->message_add( ).
341 WHEN 0.
342 MESSAGE e016(zfm_0198_msg) INTO lv_dummy.
343 go_log_load->message_add( ).
344 WHEN OTHERS.
345 LOOP AT gt_items ASSIGNING FIELD-SYMBOL(<ls_row_d>).
346 IF <ls_row_d>-kunnr IS NOT INITIAL AND <ls_row_d>-xumsw IS INITIAL.
347 MESSAGE e017(zfm_0198_msg) WITH <ls_row_d>-buzei INTO lv_dummy.
348 go_log_load->message_add( ).
349 ENDIF.
350 ENDLOOP.
351 ENDCASE.
352
353* e. Проверка сальдо и оборотов в ALV отчете.
354 LOOP AT gt_items ASSIGNING FIELD-SYMBOL(<ls_row_e>).
355 CASE <ls_row_e>-vgint(1).
356 WHEN '+'.
357 lv_sum_plus = lv_sum_plus + <ls_row_e>-wrbtr.
358 WHEN '-'.
359 lv_sum_minus = lv_sum_minus + <ls_row_e>-wrbtr.
360 WHEN OTHERS.
361 lv_false_e = abap_true.
362 EXIT.
363 ENDCASE.
364 ENDLOOP.
365
366 IF lv_false_e = abap_true OR ls_header-sumha <> lv_sum_plus OR ls_header-sumso <> lv_sum_minus
367 OR ls_header-esbtr <> ls_header-ssbtr + ls_header-sumha - ls_header-sumso.
368 MESSAGE e018(zfm_0198_msg) INTO lv_dummy.
369 go_log_load->message_add( ).
370 ENDIF.
371
372* f. Проверка входящего сальдо в БВ и в ALV отчете (1-й уровень)
373 IF ls_kukey_1 IS NOT INITIAL.
374 IF ls_kukey_1-ssbtr <> ls_header-ssbtr.
375 MESSAGE e019(zfm_0198_msg) INTO lv_dummy.
376 go_log_load->message_add( ).
377 ENDIF.
378
379* g. Проверка исходящего сальдо в БВ и в ALV отчете (1-й уровень)
380 IF ls_kukey_1-esbtr <> ls_header-esbtr.
381 MESSAGE e020(zfm_0198_msg) INTO lv_dummy.
382 go_log_load->message_add( ).
383 ENDIF.
384
385* h. Проверка суммы оборотов в БВ и в ALV отчете (2-й уровень)
386 CLEAR: lv_sum_minus,
387 lv_sum_plus.
388
389 LOOP AT gt_items ASSIGNING FIELD-SYMBOL(<ls_row_h>).
390 CASE <ls_row_h>-vgint(1).
391 WHEN '+'.
392 CHECK <ls_row_h>-xumsw IS NOT INITIAL.
393 lv_sum_plus = lv_sum_plus + <ls_row_h>-wrbtr.
394 WHEN '-'.
395 IF <ls_row_h>-xumsw IS INITIAL.
396 lv_sum_minus_sumso = lv_sum_minus_sumso + <ls_row_h>-wrbtr.
397 ELSE.
398 lv_sum_minus_sumha = lv_sum_minus_sumha + <ls_row_h>-wrbtr.
399 ENDIF.
400 ENDCASE.
401 ENDLOOP.
402
403 IF ( ls_kukey_1-sumha <> lv_sum_plus - lv_sum_minus_sumha ) OR ls_kukey_1-sumso <> lv_sum_minus_sumso.
404 MESSAGE e021(zfm_0198_msg) INTO lv_dummy.
405 go_log_load->message_add( ).
406 ENDIF.
407 ENDIF.
408
409* i. Сообщение «Файл загружен без ошибок» сохраняется в журнал, если указанные выше ошибки отсутствуют
410* (такое сообщение допустимо в т.ч. при наличии сообщений в виде предупреждений).
411 IF go_log_load->is_empty( ) = abap_true OR go_log_load->is_error_exist( ) = abap_false.
412 MESSAGE s022(zfm_0198_msg) INTO lv_dummy.
413 go_log_load->message_add( ).
414 gv_file_ok = abap_true.
415 ls_header-color = 'C511'.
416 ELSEIF go_log_load->is_error_exist( ) = abap_true.
417 ls_header-color = 'C611'.
418 ELSE.
419 ls_header-color = 'C311'.
420 gv_file_ok = abap_true.
421 ENDIF.
422
423 MODIFY gt_header FROM ls_header INDEX 1.
424 MODIFY ztfm_feb_ch_h FROM ls_header.
425 gs_header = ls_header.
426
427 go_log_load->save( EXPORTING i_save_all = abap_true ).
428
429ENDFORM.
430
431FORM block_and_check USING uv_block TYPE abap_bool.
432 CONSTANTS: lc_subobj TYPE balsubobj VALUE 'LOG_OF_CHECKS'.
433
434 DATA: lv_dummy TYPE c,
435 lt_items_x TYPE TABLE OF ztfm_feb_ch_i,
436 lt_items_x_buf TYPE TABLE OF ztfm_feb_ch_i,
437 lv_sum_plus TYPE wrbtr,
438 lv_sum_minus_sumso TYPE wrbtr,
439 lv_sum_minus_sumha TYPE wrbtr.
440
441* CHECK gv_file_ok = abap_true.
442 CHECK gs_header-color = 'C511' OR gs_header-color = 'C311'.
443 CHECK gt_items IS NOT INITIAL.
444
445 DATA(ls_header) = gs_header.
446
447 IF go_log_check IS INITIAL.
448
449 go_log_check = NEW zcl_log_simple( is_header = VALUE #( object = gc_object
450 extnumber = gs_header-id
451 subobject = lc_subobj ) ).
452 ELSE.
453 FREE go_log_check.
454 go_log_check = NEW zcl_log_simple( is_header = VALUE #( object = gc_object
455 extnumber = gs_header-id
456 subobject = lc_subobj ) ).
457 ENDIF.
458
459 IF uv_block = abap_true.
460* a. Заблокировать все позиции банковской выписки
461 SELECT SINGLE anwnd, absnd, azidt
462 FROM febko
463 WHERE kukey = @ls_header-kukey_1
464 INTO @DATA(ls_febko).
465 IF sy-subrc = 0.
466 CALL FUNCTION 'ENQUEUE_E_FEBKO'
467 EXPORTING
468 anwnd = ls_febko-anwnd
469 absnd = ls_febko-absnd
470 azidt = ls_febko-azidt
471 EXCEPTIONS
472 foreign_lock = 1.
473 IF sy-subrc = 1.
474 MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
475 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
476 go_log_check->message_add_syst( ).
477 RETURN.
478 ELSE.
479 gv_block = abap_true.
480 ENDIF.
481 ENDIF.
482 ENDIF.
483
484* Проверка наличия проводок в БВ
485 SELECT kukey, esnum, belnr, nbbln
486 FROM febep
487 WHERE kukey = @ls_header-kukey_1
488 AND epvoz = 'H'
489 INTO TABLE @DATA(lt_febep).
490 IF sy-subrc = 0.
491 LOOP AT lt_febep INTO DATA(ls_febep).
492 CHECK ls_febep-belnr IS NOT INITIAL OR ls_febep-nbbln IS NOT INITIAL.
493 IF strlen( ls_febep-belnr ) = 10 OR strlen( ls_febep-nbbln ) = 10.
494 MESSAGE e023(zfm_0198_msg) INTO lv_dummy.
495 go_log_check->message_add( ).
496 EXIT.
497 ENDIF.
498 CLEAR ls_febep.
499 ENDLOOP.
500 ENDIF.
501
502 LOOP AT gt_items INTO DATA(ls_x) WHERE xumsw IS NOT INITIAL.
503 ls_x-kunnr = |{ ls_x-kunnr ALPHA = IN }|.
504 ls_x-zuonr = |{ ls_x-zuonr ALPHA = IN }|.
505 APPEND ls_x TO lt_items_x.
506 APPEND ls_x TO lt_items_x_buf.
507 ENDLOOP.
508
509 SELECT SINGLE ktopl, fikrs
510 FROM t001
511 WHERE bukrs = @ls_header-bukrs
512 INTO @DATA(ls_t001).
513
514* Проверки связки с модулем «Управление имуществом»
515 SELECT kukey
516 FROM ztfm_refx_febep
517 WHERE kukey = @ls_header-kukey_1
518 INTO TABLE @DATA(lt_refx).
519 IF sy-subrc = 0.
520 MESSAGE e024(zfm_0198_msg) INTO lv_dummy.
521 go_log_check->message_add( ).
522 ENDIF.
523
524* Проверка Правила проводки в ALV отчете (сформированном на основе Файла)
525 SORT lt_items_x BY vgint.
526 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING vgint.
527
528 IF lt_items_x IS NOT INITIAL.
529 SELECT vgint
530 FROM t028d
531 FOR ALL ENTRIES IN @lt_items_x
532 WHERE vgint = @lt_items_x-vgint
533 INTO TABLE @DATA(lt_vgint).
534 ENDIF.
535
536 lt_items_x = lt_items_x_buf.
537
538* Проверка Дебитора в ALV отчете (сформированном из Файла).
539 SORT lt_items_x BY kunnr.
540 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING kunnr.
541 IF lt_items_x IS NOT INITIAL.
542 SELECT kunnr
543 FROM knb1
544 FOR ALL ENTRIES IN @lt_items_x
545 WHERE kunnr = @lt_items_x-kunnr
546 AND bukrs = @ls_header-bukrs
547 INTO TABLE @DATA(lt_knb1).
548
549 SELECT kunnr, sperr, loevm
550 FROM kna1
551 FOR ALL ENTRIES IN @lt_items_x
552 WHERE kunnr = @lt_items_x-kunnr
553 AND ( sperr = @abap_true OR loevm = @abap_true )
554 INTO TABLE @DATA(lt_kna1_).
555
556 SELECT kunnr
557 FROM knb1
558 FOR ALL ENTRIES IN @lt_items_x
559 WHERE kunnr = @lt_items_x-kunnr
560 AND bukrs = @ls_header-bukrs
561 AND ( sperr = @abap_true OR loevm = @abap_true )
562 INTO TABLE @DATA(lt_knb1_).
563
564 IF lt_kna1_ IS NOT INITIAL OR lt_knb1_ IS NOT INITIAL.
565 MESSAGE e027(zfm_0198_msg) INTO lv_dummy.
566 go_log_check->message_add( ).
567 ENDIF.
568 ENDIF.
569
570 lt_items_x = lt_items_x_buf.
571
572* Проверка Счета ГК в ALV отчете (сформированном на основе Файла).
573 SORT lt_items_x BY hkont.
574 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING hkont.
575 IF lt_items_x IS NOT INITIAL.
576 SELECT saknr
577 FROM skb1
578 FOR ALL ENTRIES IN @lt_items_x
579 WHERE saknr = @lt_items_x-hkont
580 AND bukrs = @ls_header-bukrs
581 INTO TABLE @DATA(lt_skb1).
582
583 SELECT saknr
584 FROM skb1
585 FOR ALL ENTRIES IN @lt_items_x
586 WHERE saknr = @lt_items_x-hkont
587 AND bukrs = @ls_header-bukrs
588 AND ( xloeb = @abap_true OR xspeb = @abap_true )
589 INTO TABLE @DATA(lt_skb1_).
590
591 SELECT saknr
592 FROM ska1
593 FOR ALL ENTRIES IN @lt_items_x
594 WHERE saknr = @lt_items_x-hkont
595 AND ktopl = @ls_t001-ktopl
596 AND ( xloev = @abap_true OR xspeb = @abap_true )
597 INTO TABLE @DATA(lt_ska1_).
598
599 IF lt_skb1_ IS NOT INITIAL OR lt_ska1_ IS NOT INITIAL.
600 MESSAGE e029(zfm_0198_msg) INTO lv_dummy.
601 go_log_check->message_add( ).
602 ENDIF.
603 ENDIF.
604
605 lt_items_x = lt_items_x_buf.
606
607* Проверка сущестования в системе Договора из ALV отчета (сформированного по Файлу).
608 SORT lt_items_x BY zuonr.
609 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING zuonr.
610 IF lt_items_x IS NOT INITIAL.
611 SELECT doknr
612 FROM draw
613 FOR ALL ENTRIES IN @lt_items_x
614 WHERE doknr = @lt_items_x-zuonr
615 INTO TABLE @DATA(lt_zuonr).
616 ENDIF.
617
618 lt_items_x = lt_items_x_buf.
619
620* Проверка существования в системе Финансовой позиции (указанной в ALV отчете).
621 SORT lt_items_x BY fipex.
622 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING fipex.
623 IF lt_items_x IS NOT INITIAL.
624 SELECT fipex
625 FROM fmci
626 FOR ALL ENTRIES IN @lt_items_x
627 WHERE fipex = @lt_items_x-fipex
628 AND fikrs = @ls_t001-fikrs
629 INTO TABLE @DATA(lt_fipex).
630 ENDIF.
631
632 lt_items_x = lt_items_x_buf.
633
634* Проверка существования в системе ПФМ в (указанной в ALV отчете).
635 SORT lt_items_x BY fistl.
636 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING fistl.
637 IF lt_items_x IS NOT INITIAL.
638 SELECT fictr
639 FROM fmfctr
640 FOR ALL ENTRIES IN @lt_items_x
641 WHERE fictr = @lt_items_x-fistl
642 AND fikrs = @ls_t001-fikrs
643 INTO TABLE @DATA(lt_fistl).
644 ENDIF.
645
646 lt_items_x = lt_items_x_buf.
647
648* Проверка существования в системе Фонда (указаннного в ALV отчете)
649 SORT lt_items_x BY geber.
650 DELETE ADJACENT DUPLICATES FROM lt_items_x COMPARING geber.
651 IF lt_items_x IS NOT INITIAL.
652 SELECT fincode
653 FROM fmfincode
654 FOR ALL ENTRIES IN @lt_items_x
655 WHERE fincode = @lt_items_x-geber
656 AND fikrs = @ls_t001-fikrs
657 INTO TABLE @DATA(lt_geber).
658 ENDIF.
659
660 lt_items_x = lt_items_x_buf.
661
662 LOOP AT lt_items_x ASSIGNING FIELD-SYMBOL(<ls_check>).
663 IF <ls_check>-vgint IS NOT INITIAL AND NOT line_exists( lt_vgint[ vgint = <ls_check>-vgint ] ).
664 MESSAGE e025(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-vgint INTO lv_dummy.
665 go_log_check->message_add( ).
666 ENDIF.
667
668 IF <ls_check>-kunnr IS NOT INITIAL AND NOT line_exists( lt_knb1[ kunnr = <ls_check>-kunnr ] ).
669 MESSAGE e026(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-kunnr INTO lv_dummy.
670 go_log_check->message_add( ).
671 ENDIF.
672
673 IF <ls_check>-hkont IS NOT INITIAL AND NOT line_exists( lt_skb1[ saknr = <ls_check>-hkont ] ).
674 MESSAGE e028(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-hkont INTO lv_dummy.
675 go_log_check->message_add( ).
676 ENDIF.
677
678 IF <ls_check>-zuonr IS NOT INITIAL AND NOT line_exists( lt_zuonr[ doknr = <ls_check>-zuonr ] ).
679 MESSAGE e030(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-zuonr INTO lv_dummy.
680 go_log_check->message_add( ).
681 ENDIF.
682
683 IF <ls_check>-fipex IS NOT INITIAL AND NOT line_exists( lt_fipex[ fipex = <ls_check>-fipex ] ).
684 MESSAGE e031(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-fipex INTO lv_dummy.
685 go_log_check->message_add( ).
686 ENDIF.
687
688 IF <ls_check>-fistl IS NOT INITIAL AND NOT line_exists( lt_fistl[ fictr = <ls_check>-fistl ] ).
689 MESSAGE e032(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-fistl INTO lv_dummy.
690 go_log_check->message_add( ).
691 ENDIF.
692
693 IF <ls_check>-geber IS NOT INITIAL AND NOT line_exists( lt_geber[ fincode = <ls_check>-geber ] ).
694 MESSAGE e033(zfm_0198_msg) WITH <ls_check>-buzei <ls_check>-geber INTO lv_dummy.
695 go_log_check->message_add( ).
696 ENDIF.
697 ENDLOOP.
698
699* Проверка существования ранее проверенной БВ
700 SELECT SINGLE kukey, ssbtr, esbtr, sumha, sumso
701 FROM febko
702 WHERE kukey = @ls_header-kukey_1
703 INTO @DATA(ls_febko_new).
704 IF sy-subrc <> 0.
705 MESSAGE e034(zfm_0198_msg) INTO lv_dummy.
706 go_log_check->message_add( ).
707 ELSE.
708
709* Проверка обработки БВ (это необходимая повторная проверка)
710 SELECT kukey
711 FROM zth2h_feb_hist
712 WHERE kukey = @ls_header-kukey_1
713 INTO TABLE @DATA(lt_kukey).
714 IF sy-subrc = 0.
715 MESSAGE e014(zfm_0198_msg) INTO lv_dummy.
716 go_log_check->message_add( ).
717 ENDIF.
718
719* Проверка входящего сальдо в БВ и в ALV отчете (1-й уровень).
720* Это необходимая повторная проверка.
721 IF ls_header-ssbtr <> ls_febko_new-ssbtr.
722 MESSAGE e019(zfm_0198_msg) INTO lv_dummy.
723 go_log_check->message_add( ).
724 ENDIF.
725
726* Проверка исходящего сальдо в БВ и в ALV отчете (1-й уровень).
727* Это необходимая повторная проверка
728 IF ls_header-esbtr <> ls_febko_new-esbtr.
729 MESSAGE e020(zfm_0198_msg) INTO lv_dummy.
730 go_log_check->message_add( ).
731 ENDIF.
732
733* Проверка суммы оборотов в БВ и в ALV отчете (2-й уровень). Это необходимая повторная проверка.
734 LOOP AT gt_items ASSIGNING FIELD-SYMBOL(<ls_row_h>).
735 CASE <ls_row_h>-vgint(1).
736 WHEN '+'.
737 CHECK <ls_row_h>-xumsw IS NOT INITIAL.
738 lv_sum_plus = lv_sum_plus + <ls_row_h>-wrbtr.
739 WHEN '-'.
740 IF <ls_row_h>-xumsw IS INITIAL.
741 lv_sum_minus_sumso = lv_sum_minus_sumso + <ls_row_h>-wrbtr.
742 ELSE.
743 lv_sum_minus_sumha = lv_sum_minus_sumha + <ls_row_h>-wrbtr.
744 ENDIF.
745 ENDCASE.
746 ENDLOOP.
747
748 IF ( ls_febko_new-sumha <> lv_sum_plus - lv_sum_minus_sumha ) OR ls_febko_new-sumso <> lv_sum_minus_sumso.
749 MESSAGE e021(zfm_0198_msg) INTO lv_dummy.
750 go_log_check->message_add( ).
751 ENDIF.
752 ENDIF.
753
754* Необходимо выполнить проверку полномочий сотрудника
755* PERFORM check_auth USING '02' CHANGING gv_rc.
756* IF gv_rc <> 0.
757* MESSAGE e035(zfm_0198_msg) INTO lv_dummy.
758* go_log_check->message_add( ).
759* ENDIF.
760
761* Если ошибки при проверке отсутствуют, то вывести в Журнал Проверок сообщение «БВ готова к обработке»
762 IF go_log_check->is_empty( ).
763 MESSAGE s037(zfm_0198_msg) INTO lv_dummy.
764 go_log_check->message_add( ).
765 ELSE.
766 IF ls_febko IS NOT INITIAL.
767 CALL FUNCTION 'DEQUEUE_E_FEBKO'
768 EXPORTING
769 anwnd = ls_febko-anwnd
770 absnd = ls_febko-absnd
771 azidt = ls_febko-azidt.
772 CLEAR gv_block.
773 ENDIF.
774 ENDIF.
775
776 go_log_check->save( EXPORTING i_save_all = abap_true ).
777
778ENDFORM.
779
780FORM view_data.
781 IF p_view = abap_true.
782 CLEAR: gt_header,
783 gt_items.
784
785 SELECT * FROM ztfm_feb_ch_h
786 WHERE bukrs IN @s_bukrs
787 AND hbkid IN @s_hbkid
788 AND hktid IN @s_hktid
789 AND azdat IN @s_azdat
790 AND cpudt IN @s_cpudt
791 AND cputm IN @s_cputm
792 AND kukey IN @s_kukey
793 INTO CORRESPONDING FIELDS OF TABLE @gt_header.
794 ENDIF.
795 CALL SCREEN 100.
796ENDFORM.
797
798FORM init_alv.
799
800 DATA: lt_fcat_h TYPE lvc_t_fcat,
801 lt_fcat_i TYPE lvc_t_fcat,
802 lt_exclude TYPE ui_functions,
803 ls_layout TYPE lvc_s_layo.
804
805 IF go_container IS INITIAL.
806 CREATE OBJECT go_container
807 EXPORTING
808 repid = sy-repid
809 dynnr = sy-dynnr
810 side = cl_gui_docking_container=>dock_at_bottom
811 extension = cl_gui_docking_container=>ws_maximizebox
812 EXCEPTIONS
813 cntl_error = 1
814 cntl_system_error = 2
815 create_error = 3
816 lifetime_error = 4
817 lifetime_dynpro_dynpro_link = 5
818 OTHERS = 6.
819 IF sy-subrc <> 0.
820 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
821 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
822 ENDIF.
823
824 CREATE OBJECT go_splitter
825 EXPORTING
826 parent = go_container
827 rows = 2
828 columns = 1
829 align = 15.
830
831 CALL METHOD go_splitter->get_container
832 EXPORTING
833 row = 1
834 column = 1
835 RECEIVING
836 container = go_container_1.
837
838 CALL METHOD go_splitter->get_container
839 EXPORTING
840 row = 2
841 column = 1
842 RECEIVING
843 container = go_container_2.
844
845
846 CREATE OBJECT go_alv_h
847 EXPORTING
848 i_parent = go_container_1.
849
850 CREATE OBJECT go_alv_i
851 EXPORTING
852 i_parent = go_container_2.
853
854 CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
855 EXPORTING
856 i_structure_name = 'ZTFM_FEB_CH_H'
857 CHANGING
858 ct_fieldcat = lt_fcat_h
859 EXCEPTIONS
860 inconsistent_interface = 1
861 program_error = 2
862 OTHERS = 3.
863 IF sy-subrc <> 0.
864 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
865 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
866 ENDIF.
867
868 LOOP AT lt_fcat_h ASSIGNING FIELD-SYMBOL(<fs_fcat>).
869 IF <fs_fcat>-fieldname = 'COLOR'.
870 <fs_fcat>-tech = abap_true.
871 ENDIF.
872 ENDLOOP.
873
874 ls_layout-info_fname = 'COLOR'.
875
876 CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
877 EXPORTING
878 i_structure_name = 'ZTFM_FEB_CH_I'
879 CHANGING
880 ct_fieldcat = lt_fcat_i
881 EXCEPTIONS
882 inconsistent_interface = 1
883 program_error = 2
884 OTHERS = 3.
885 IF sy-subrc <> 0.
886 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
887 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
888 ENDIF.
889
890 PERFORM exclude_tb_functions CHANGING lt_exclude.
891
892 CALL METHOD go_alv_h->set_table_for_first_display
893 EXPORTING
894 i_save = 'A'
895* is_variant = ls_layout1
896 it_toolbar_excluding = lt_exclude
897 is_layout = ls_layout
898 CHANGING
899 it_outtab = gt_header
900 it_fieldcatalog = lt_fcat_h
901 EXCEPTIONS
902 invalid_parameter_combination = 1
903 program_error = 2
904 too_many_lines = 3
905 OTHERS = 4.
906 IF sy-subrc <> 0.
907* Implement suitable error handling here
908 ENDIF.
909
910 CALL METHOD go_alv_i->set_table_for_first_display
911 EXPORTING
912 i_save = 'A'
913* is_variant = ls_layout1
914 it_toolbar_excluding = lt_exclude
915 is_layout = ls_layout
916 CHANGING
917 it_outtab = gt_items
918 it_fieldcatalog = lt_fcat_i
919 EXCEPTIONS
920 invalid_parameter_combination = 1
921 program_error = 2
922 too_many_lines = 3
923 OTHERS = 4.
924 IF sy-subrc <> 0.
925* Implement suitable error handling here
926 ENDIF.
927
928 CREATE OBJECT go_event_handler.
929 SET HANDLER go_event_handler->handle_double_click FOR go_alv_h.
930 SET HANDLER go_event_handler->handle_double_click_i FOR go_alv_i.
931 SET HANDLER go_event_handler->handle_toolbar_h FOR go_alv_h.
932 SET HANDLER go_event_handler->handle_toolbar_i FOR go_alv_i.
933 SET HANDLER go_event_handler->handle_user_command FOR go_alv_h.
934 SET HANDLER go_event_handler->handle_user_command FOR go_alv_i.
935
936 go_alv_h->set_toolbar_interactive( ).
937 go_alv_i->set_toolbar_interactive( ).
938 ENDIF.
939ENDFORM.
940
941FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
942 DATA ls_exclude TYPE ui_func.
943
944 ls_exclude = cl_gui_alv_grid=>mc_fc_print_back.
945 APPEND ls_exclude TO pt_exclude.
946 ls_exclude = cl_gui_alv_grid=>mc_fc_print_prev.
947 APPEND ls_exclude TO pt_exclude.
948 ls_exclude = cl_gui_alv_grid=>mc_fc_print.
949 APPEND ls_exclude TO pt_exclude.
950 ls_exclude = cl_gui_alv_grid=>mc_fc_view_excel.
951 APPEND ls_exclude TO pt_exclude.
952 ls_exclude = cl_gui_alv_grid=>mc_fc_view_grid.
953 APPEND ls_exclude TO pt_exclude.
954 ls_exclude = cl_gui_alv_grid=>mc_fc_to_office.
955 APPEND ls_exclude TO pt_exclude.
956 ls_exclude = cl_gui_alv_grid=>mc_fc_pc_file.
957 APPEND ls_exclude TO pt_exclude.
958 ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
959 APPEND ls_exclude TO pt_exclude.
960 ls_exclude = cl_gui_alv_grid=>mc_fc_info.
961 APPEND ls_exclude TO pt_exclude.
962 ls_exclude = cl_gui_alv_grid=>mc_fc_call_xxl.
963 APPEND ls_exclude TO pt_exclude.
964 ls_exclude = cl_gui_alv_grid=>mc_fc_word_processor.
965 APPEND ls_exclude TO pt_exclude.
966 ls_exclude = cl_gui_alv_grid=>mc_fc_send.
967 APPEND ls_exclude TO pt_exclude.
968 ls_exclude = cl_gui_alv_grid=>mc_fc_call_abc.
969 APPEND ls_exclude TO pt_exclude.
970 ls_exclude = cl_gui_alv_grid=>mc_fc_call_xint.
971 APPEND ls_exclude TO pt_exclude.
972 ls_exclude = cl_gui_alv_grid=>mc_fc_html.
973 APPEND ls_exclude TO pt_exclude.
974 ls_exclude = cl_gui_alv_grid=>mc_fc_url_copy_to_clipboard.
975 APPEND ls_exclude TO pt_exclude.
976ENDFORM.
977
978FORM set_path CHANGING cv_file TYPE dxfile-filename.
979 DATA:
980 lt_filetable TYPE filetable,
981 lv_rc TYPE i.
982
983 CALL METHOD cl_gui_frontend_services=>file_open_dialog
984* EXPORTING
985* window_title =
986* default_extension =
987* default_filename =
988* file_filter =
989* with_encoding =
990* initial_directory =
991* multiselection =
992 CHANGING
993 file_table = lt_filetable
994 rc = lv_rc
995* user_action =
996* file_encoding =
997 EXCEPTIONS
998 file_open_dialog_failed = 1
999 cntl_error = 2
1000 error_no_gui = 3
1001 not_supported_by_gui = 4
1002 OTHERS = 5.
1003 IF sy-subrc <> 0.
1004 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1005 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
1006 ENDIF.
1007
1008 READ TABLE lt_filetable INTO DATA(ls_filetable) INDEX 1.
1009 cv_file = ls_filetable-filename.
1010ENDFORM.
1011
1012FORM check_auth USING uv_actvt TYPE activ_auth
1013 CHANGING cv_rc TYPE syst_subrc.
1014 CLEAR cv_rc.
1015 AUTHORITY-CHECK OBJECT 'ZFM_FEB_CH'
1016 ID 'ACTVT' FIELD uv_actvt.
1017 IF sy-subrc <> 0.
1018 cv_rc = sy-subrc.
1019 ENDIF.
1020ENDFORM.
1021
1022FORM change_status.
1023 CONSTANTS: lc_subobj TYPE balsubobj VALUE 'LOG_OF_PROCESSING'.
1024 IF go_log_proc IS INITIAL.
1025
1026 go_log_proc = NEW zcl_log_simple( is_header = VALUE #( object = gc_object
1027 extnumber = gs_header-id
1028 subobject = lc_subobj ) ).
1029 ELSE.
1030 go_log_proc->message_clear( ).
1031 ENDIF.
1032
1033 SELECT kukey, esnum, zzfincon, kwbtr
1034 FROM febep
1035 WHERE kukey = @gs_header-kukey_1
1036 AND epvoz = 'H'
1037 INTO CORRESPONDING FIELDS OF TABLE @gt_db_pos.
1038 IF sy-subrc = 0.
1039 LOOP AT gt_db_pos INTO DATA(ls_pos) WHERE zzfincon = 'X'.
1040 CLEAR ls_pos-zzfincon.
1041 MODIFY gt_db_pos FROM ls_pos TRANSPORTING zzfincon.
1042
1043 UPDATE febep
1044 SET zzfincon = ' '
1045 WHERE kukey = ls_pos-kukey
1046 AND esnum = ls_pos-esnum.
1047 ENDLOOP.
1048 ENDIF.
1049 COMMIT WORK AND WAIT.
1050ENDFORM.
1051
1052FORM union_all CHANGING ev_subrc TYPE syst_subrc.
1053 DATA: lv_sum TYPE kwbtr_eb,
1054 ls_wl LIKE LINE OF gt_db_pos,
1055 ls_febep TYPE febep.
1056
1057 lv_sum = 0.
1058 LOOP AT gt_db_pos ASSIGNING FIELD-SYMBOL(<fs_sum>).
1059 ADD <fs_sum>-kwbtr TO lv_sum.
1060 ENDLOOP.
1061
1062 PERFORM febep_aggregate USING lv_sum
1063 CHANGING gt_db_pos ev_subrc.
1064 IF ev_subrc = 0.
1065 LOOP AT gt_db_pos INTO ls_wl.
1066* пересчитаем таблицы, если данные были изменены
1067 CLEAR ls_febep.
1068 MOVE-CORRESPONDING ls_wl TO ls_febep.
1069 CALL FUNCTION 'Z_FM_FEB_SYNC_TABLES'
1070 EXPORTING
1071 iv_bukrs = ls_wl-bukrs
1072 is_febep = ls_febep
1073 iv_commit = 'X'
1074 EXCEPTIONS
1075 upd_error = 1
1076 OTHERS = 2.
1077 IF sy-subrc <> 0.
1078* Implement suitable error handling here
1079 ENDIF.
1080 ENDLOOP.
1081* gs_aggregated_pos = gt_db_pos[ 1 ].
1082 SELECT * FROM febep
1083 WHERE kukey = @gs_header-kukey_1
1084 AND epvoz = 'H'
1085 ORDER BY esnum
1086 INTO TABLE @DATA(lt_aggr).
1087
1088 gs_aggregated_pos = CORRESPONDING #( lt_aggr[ 1 ] ).
1089
1090 ENDIF.
1091
1092ENDFORM.
1093
1094FORM febep_aggregate USING p_sum TYPE febep-kwbtr
1095 CHANGING ct_worklist TYPE cl_feb_bsproc_assistance=>yt_bsproc_worklist
1096 ev_subrc TYPE sy-subrc.
1097
1098 DATA:
1099 ls_wl LIKE LINE OF ct_worklist,
1100 ls_febep TYPE febep,
1101 ls_febep2 TYPE febep,
1102 lv_min TYPE febep-esnum VALUE 99999,
1103 lv_str(20),
1104
1105 lt_refx_tab TYPE STANDARD TABLE OF ztfm_refx_febep
1106 WITH NON-UNIQUE SORTED KEY feb COMPONENTS kukey esnum
1107 WITH NON-UNIQUE SORTED KEY ref COMPONENTS intreno dfaell cfpayguid,
1108 lt_refx_fin TYPE STANDARD TABLE OF ztfm_refx_febep,
1109 lt_keys TYPE feby_bsproc_key,
1110 lt_febep2 TYPE STANDARD TABLE OF febep
1111 WITH NON-UNIQUE SORTED KEY pos COMPONENTS kukey esnum,
1112
1113 lt_hist TYPE STANDARD TABLE OF zth2h_feb_hist,
1114 ls_hist TYPE zth2h_feb_hist.
1115
1116 ev_subrc = 1. " default error exists
1117
1118 LOOP AT ct_worklist INTO ls_wl.
1119 IF ls_wl-esnum < lv_min.
1120 lv_min = ls_wl-esnum.
1121 ENDIF.
1122 ENDLOOP.
1123
1124* определим данные позиции, в которую будем все объединять
1125 SELECT SINGLE *
1126 INTO ls_febep
1127 FROM febep
1128 WHERE kukey = ls_wl-kukey
1129 AND esnum = lv_min.
1130
1131 CLEAR ls_hist.
1132 MOVE-CORRESPONDING ls_febep TO ls_hist.
1133 ls_hist-esnum_ref = ls_hist-esnum.
1134 ls_hist-operation = 'U'.
1135 ls_hist-epvoz_old = ls_febep-epvoz.
1136 ls_hist-kwbtr_old = ls_febep-kwbtr.
1137
1138 IF p_sum < 0.
1139 ls_febep-epvoz = 'S'.
1140 ELSE.
1141 ls_febep-epvoz = 'H'.
1142 ENDIF.
1143 ls_febep-kwbtr = abs( p_sum ).
1144
1145 ls_hist-kwbtr_new = ls_febep-kwbtr.
1146 ls_hist-epvoz_new = ls_febep-epvoz.
1147 APPEND ls_hist TO lt_hist.
1148
1149* определим, есть ли прявязки потоков RE-FX
1150 IF ct_worklist IS NOT INITIAL.
1151 SELECT *
1152 INTO TABLE @lt_refx_tab
1153 FROM ztfm_refx_febep
1154 FOR ALL ENTRIES IN @ct_worklist
1155 WHERE kukey = @ct_worklist-kukey
1156 AND esnum = @ct_worklist-esnum.
1157
1158 SELECT *
1159 INTO TABLE @lt_febep2
1160 FROM febep
1161 FOR ALL ENTRIES IN @ct_worklist
1162 WHERE kukey = @ct_worklist-kukey
1163 AND esnum = @ct_worklist-esnum.
1164 ENDIF.
1165
1166* остальные удалим/обнулим
1167 LOOP AT ct_worklist INTO ls_wl WHERE esnum NE lv_min.
1168 READ TABLE lt_febep2 INTO ls_febep2
1169 WITH TABLE KEY pos COMPONENTS kukey = ls_wl-kukey
1170 esnum = ls_wl-esnum.
1171
1172 IF sy-subrc = 0.
1173 CLEAR ls_hist.
1174 MOVE-CORRESPONDING ls_febep2 TO ls_hist.
1175 ls_hist-esnum_ref = ls_febep-esnum.
1176 ls_hist-operation = 'U'.
1177 ls_hist-epvoz_old = ls_febep2-epvoz.
1178 ls_hist-kwbtr_old = ls_febep2-kwbtr.
1179
1180 ls_febep2-nbbln = '-'.
1181 ls_febep2-belnr = '-'.
1182 ls_febep2-vb1ok = 'X'.
1183 ls_febep2-vb2ok = 'X'.
1184 WRITE ls_febep2-kwbtr TO lv_str NO-GROUPING NO-GAP CURRENCY ls_wl-kwaer.
1185 REPLACE ALL OCCURRENCES OF ',' IN lv_str WITH '.'.
1186 CONDENSE lv_str.
1187 ls_febep2-kwbtr = 0.
1188 CONCATENATE lv_min lv_str
1189 INTO ls_febep2-info2 SEPARATED BY '/'.
1190
1191 ls_hist-kwbtr_new = ls_febep2-kwbtr.
1192 ls_hist-epvoz_new = ls_febep2-epvoz.
1193 APPEND ls_hist TO lt_hist.
1194 MODIFY febep FROM ls_febep2.
1195 ev_subrc = sy-subrc.
1196
1197 IF ev_subrc = 0.
1198 " удаляем данные RE-FX
1199 READ TABLE lt_refx_tab TRANSPORTING NO FIELDS
1200 WITH TABLE KEY feb
1201 COMPONENTS kukey = ls_febep2-kukey
1202 esnum = ls_febep2-esnum.
1203 IF sy-subrc = 0.
1204 APPEND VALUE #( kukey = ls_febep2-kukey
1205 esnum = ls_febep2-esnum ) TO lt_keys.
1206 ENDIF.
1207 ENDIF.
1208 ELSE.
1209 ev_subrc = sy-subrc.
1210 ENDIF.
1211 IF ev_subrc NE 0.
1212 EXIT.
1213 ENDIF.
1214 ENDLOOP.
1215 IF ev_subrc = 0.
1216* модифицируем оставшуюся позицию
1217 MODIFY febep FROM ls_febep.
1218
1219 ev_subrc = sy-subrc.
1220 IF ev_subrc = 0.
1221
1222 COMMIT WORK AND WAIT.
1223
1224 CALL FUNCTION 'Z_FM_0035_SET_FEB_HIST'
1225 CHANGING
1226 ct_feb_hist = lt_hist.
1227
1228* объединяем всем потоки RE-FX
1229 LOOP AT lt_refx_tab INTO DATA(ls_refx).
1230 CLEAR: ls_refx-kukey, ls_refx-esnum, ls_refx-bnwhr.
1231 COLLECT ls_refx INTO lt_refx_fin.
1232 ENDLOOP.
1233 LOOP AT lt_refx_fin ASSIGNING FIELD-SYMBOL(<fs_refx>).
1234 <fs_refx>-kukey = ls_febep-kukey.
1235 <fs_refx>-esnum = ls_febep-esnum.
1236 READ TABLE lt_refx_tab INTO ls_refx
1237 WITH TABLE KEY ref
1238 COMPONENTS intreno = <fs_refx>-intreno
1239 dfaell = <fs_refx>-dfaell
1240 cfpayguid = <fs_refx>-cfpayguid.
1241 IF sy-subrc = 0.
1242 <fs_refx>-bnwhr = ls_refx-bnwhr.
1243 ENDIF.
1244 ENDLOOP.
1245 APPEND VALUE #( kukey = ls_febep-kukey
1246 esnum = ls_febep-esnum ) TO lt_keys.
1247 CALL FUNCTION 'Z_FM_FEB_UPD_REFX_FEBAN'
1248 EXPORTING
1249 it_records = lt_keys
1250 iv_commit = 'X'
1251 TABLES
1252 it_refx_tab = lt_refx_fin.
1253 ELSE.
1254 ROLLBACK WORK.
1255 ENDIF.
1256 ELSE.
1257 ROLLBACK WORK.
1258 ENDIF.
1259
1260ENDFORM.
1261
1262FORM divide CHANGING ev_subrc TYPE syst_subrc.
1263 DATA: lt_worklist TYPE cl_feb_bsproc_assistance=>yt_bsproc_worklist,
1264 ls_res_pos LIKE LINE OF lt_worklist,
1265 lv_sum1 TYPE kwbtr_eb,
1266 lv_sum2 TYPE kwbtr_eb,
1267 ls_febep TYPE febep.
1268
1269 ls_res_pos = gs_aggregated_pos.
1270
1271 LOOP AT gt_items ASSIGNING FIELD-SYMBOL(<fs_item>) WHERE xumsw IS NOT INITIAL.
1272 CLEAR lt_worklist.
1273
1274 APPEND ls_res_pos TO lt_worklist.
1275
1276 IF <fs_item>-vgint(1) = '-'.
1277 lv_sum1 = 0 - <fs_item>-wrbtr.
1278 ELSE.
1279 lv_sum1 = <fs_item>-wrbtr.
1280 ENDIF.
1281 lv_sum2 = ls_res_pos-kwbtr - lv_sum1.
1282
1283 IF lv_sum2 = 0.
1284 APPEND ls_res_pos TO gt_new_db_pos.
1285 CONTINUE.
1286 ENDIF.
1287
1288 PERFORM febep_divide USING lv_sum1 lv_sum2
1289 CHANGING lt_worklist ev_subrc.
1290 IF ev_subrc NE 0.
1291 RETURN. " продолжения не будет - ошибка деления
1292 ELSE.
1293 LOOP AT lt_worklist ASSIGNING FIELD-SYMBOL(<fs_wl>).
1294* пересчитаем таблицы, если данные были изменены
1295 CLEAR ls_febep.
1296 MOVE-CORRESPONDING <fs_wl> TO ls_febep.
1297 CALL FUNCTION 'Z_FM_FEB_SYNC_TABLES'
1298 EXPORTING
1299 iv_bukrs = <fs_wl>-bukrs
1300 is_febep = ls_febep
1301 iv_commit = 'X'
1302 EXCEPTIONS
1303 upd_error = 1
1304 OTHERS = 2.
1305 IF sy-subrc <> 0.
1306* Implement suitable error handling here
1307 ENDIF.
1308 ENDLOOP.
1309 ENDIF.
1310 CLEAR ls_res_pos.
1311 ls_res_pos-kukey = lt_worklist[ 1 ]-kukey.
1312 ls_res_pos-esnum = lt_worklist[ 1 ]-esnum.
1313 APPEND ls_res_pos TO gt_new_db_pos.
1314
1315 ls_res_pos = lt_worklist[ 2 ]. " Позиция БВ с остаточной после разделения суммой
1316 ENDLOOP.
1317ENDFORM.
1318
1319FORM febep_divide USING p_sum1 TYPE febep-kwbtr
1320 p_sum2 TYPE febep-kwbtr
1321 CHANGING ct_worklist TYPE cl_feb_bsproc_assistance=>yt_bsproc_worklist
1322 ev_subrc TYPE sy-subrc.
1323 DATA:
1324 ls_wl LIKE LINE OF ct_worklist,
1325 ls_febep TYPE febep,
1326 ls_febep0 TYPE febep,
1327 lt_febep TYPE STANDARD TABLE OF febep WITH HEADER LINE,
1328 lt_febre TYPE STANDARD TABLE OF febre WITH HEADER LINE,
1329 lt_febcl TYPE STANDARD TABLE OF febcl WITH HEADER LINE,
1330 lv_max TYPE febep-esnum,
1331 lv_subrc TYPE sy-subrc,
1332 lt_refx_tab TYPE STANDARD TABLE OF ztfm_refx_febep,
1333 lt_refx_fin TYPE STANDARD TABLE OF ztfm_refx_febep,
1334 ls_refx TYPE ztfm_refx_febep,
1335 lv_sum TYPE febep-kwbtr,
1336 lt_keys TYPE feby_bsproc_key,
1337 lv_kukey TYPE febko-kukey,
1338 lt_hist TYPE STANDARD TABLE OF zth2h_feb_hist,
1339 ls_hist TYPE zth2h_feb_hist.
1340
1341 ev_subrc = 1. " default error exists
1342
1343* CHECK p_sum1 NE 0 AND p_sum2 NE 0.
1344 IF p_sum1 = 0 OR p_sum2 = 0.
1345 ev_subrc = 0.
1346 RETURN.
1347 ENDIF.
1348
1349 READ TABLE ct_worklist INTO ls_wl INDEX 1.
1350 CHECK sy-subrc = 0.
1351
1352* читаем данные оригинальной позиции
1353 CLEAR: lv_kukey,
1354 ls_febep.
1355 REFRESH: lt_febcl, lt_febre.
1356
1357 SELECT SINGLE kukey
1358 INTO lv_kukey
1359 FROM febko
1360 WHERE kukey = ls_wl-kukey.
1361 lv_subrc = sy-subrc.
1362 IF lv_subrc = 0.
1363 SELECT SINGLE *
1364 INTO ls_febep
1365 FROM febep
1366 WHERE kukey = ls_wl-kukey
1367 AND esnum = ls_wl-esnum.
1368 lv_subrc = sy-subrc.
1369 IF lv_subrc = 0.
1370 SELECT *
1371 INTO TABLE lt_febcl
1372 FROM febcl
1373 WHERE kukey = ls_febep-kukey
1374 AND esnum = ls_febep-esnum.
1375
1376 SELECT *
1377 INTO TABLE lt_febre
1378 FROM febre
1379 WHERE kukey = ls_febep-kukey
1380 AND esnum = ls_febep-esnum.
1381
1382 IF p_sum1 > 0 AND p_sum2 > 0.
1383 SELECT *
1384 INTO TABLE @lt_refx_tab
1385 FROM ztfm_refx_febep
1386 WHERE kukey = @ls_febep-kukey
1387 AND esnum = @ls_febep-esnum.
1388 ENDIF.
1389 ENDIF.
1390 ENDIF.
1391 CHECK lv_subrc = 0.
1392
1393 CLEAR ls_hist.
1394 MOVE-CORRESPONDING ls_febep TO ls_hist.
1395 ls_hist-esnum_ref = ls_hist-esnum.
1396 ls_hist-operation = 'S'.
1397 ls_hist-epvoz_old = ls_febep-epvoz.
1398 ls_hist-kwbtr_old = ls_febep-kwbtr.
1399
1400* корректируем сумму оригинальной позиции
1401 ls_febep-kwbtr = abs( p_sum1 ).
1402 IF p_sum1 < 0.
1403 ls_febep-epvoz = 'S'.
1404 ELSE.
1405 ls_febep-epvoz = 'H'.
1406 ENDIF.
1407 APPEND ls_febep TO lt_febep.
1408 ls_wl-epvoz = ls_febep-epvoz.
1409 ls_wl-kwbtr = p_sum1.
1410
1411 ls_hist-kwbtr_new = ls_febep-kwbtr.
1412 ls_hist-epvoz_new = ls_febep-epvoz.
1413 APPEND ls_hist TO lt_hist.
1414 ls_febep0 = ls_febep.
1415
1416* читаем кол-во позиций в ЭБВ
1417 SELECT MAX( esnum )
1418 INTO lv_max
1419 FROM febep
1420 WHERE kukey = ls_febep-kukey.
1421 ADD 1 TO lv_max.
1422
1423* готовим данные новой позиции
1424 ls_febep-esnum = lv_max.
1425 ls_febep-kwbtr = abs( p_sum2 ).
1426 IF p_sum2 < 0.
1427 ls_febep-epvoz = 'S'.
1428 ELSE.
1429 ls_febep-epvoz = 'H'.
1430 ENDIF.
1431 APPEND ls_febep TO lt_febep.
1432
1433 CLEAR ls_hist.
1434 MOVE-CORRESPONDING ls_febep TO ls_hist.
1435 ls_hist-esnum_ref = ls_febep0-esnum.
1436 ls_hist-operation = 'S'.
1437 ls_hist-epvoz_old = ''.
1438 ls_hist-kwbtr_old = 0.
1439 ls_hist-kwbtr_new = ls_febep-kwbtr.
1440 ls_hist-epvoz_new = ls_febep-epvoz.
1441 APPEND ls_hist TO lt_hist.
1442
1443 ls_wl-esnum = lv_max.
1444 ls_wl-epvoz = ls_febep-epvoz.
1445 ls_wl-kwbtr = p_sum2.
1446 ls_wl-zzmark = 'I'.
1447 APPEND ls_wl TO ct_worklist.
1448
1449* формируем доп_данные для новой позиции
1450 LOOP AT lt_febcl.
1451 lt_febcl-esnum = lv_max.
1452 MODIFY lt_febcl TRANSPORTING esnum.
1453 ENDLOOP.
1454 LOOP AT lt_febre.
1455 lt_febre-esnum = lv_max.
1456 MODIFY lt_febre TRANSPORTING esnum.
1457 ENDLOOP.
1458
1459 IF lt_refx_tab IS NOT INITIAL.
1460 lv_sum = p_sum1 + p_sum2. " общая сумма для расчета
1461 LOOP AT lt_refx_tab ASSIGNING FIELD-SYMBOL(<fs_refx>).
1462 ls_refx = <fs_refx>.
1463 ls_refx-esnum = lv_max.
1464 TRY.
1465 ls_refx-zz_summ = ls_refx-zz_summ * ( p_sum2 / lv_sum ).
1466 CATCH cx_sy_zerodivide ##NO_HANDLER.
1467 ENDTRY.
1468 APPEND ls_refx TO lt_refx_fin.
1469
1470 <fs_refx>-zz_summ = <fs_refx>-zz_summ - ls_refx-zz_summ.
1471 ENDLOOP.
1472 APPEND LINES OF lt_refx_fin TO lt_refx_tab.
1473 CLEAR lt_refx_fin.
1474 ENDIF.
1475
1476 MODIFY febep FROM TABLE lt_febep.
1477 ev_subrc = sy-subrc.
1478 IF sy-subrc = 0.
1479 INSERT febre FROM TABLE lt_febre.
1480 INSERT febcl FROM TABLE lt_febcl.
1481 ENDIF.
1482 IF ev_subrc = 0.
1483 COMMIT WORK AND WAIT.
1484
1485 CALL FUNCTION 'Z_FM_0035_SET_FEB_HIST'
1486 CHANGING
1487 ct_feb_hist = lt_hist.
1488
1489 LOOP AT ct_worklist INTO ls_wl.
1490 APPEND VALUE #( kukey = ls_wl-kukey
1491 esnum = ls_wl-esnum ) TO lt_keys.
1492 ENDLOOP.
1493 CALL FUNCTION 'Z_FM_FEB_UPD_REFX_FEBAN'
1494 EXPORTING
1495 it_records = lt_keys
1496 iv_commit = 'X'
1497 TABLES
1498 it_refx_tab = lt_refx_tab.
1499 ELSE.
1500 ROLLBACK WORK.
1501 DELETE ct_worklist FROM 2. " удалим неудачно созданную строку из списка
1502 ENDIF.
1503
1504ENDFORM.
1505
1506FORM mass_change.
1507 DATA: lt_x TYPE TABLE OF ztfm_feb_ch_i,
1508 ls_febcl TYPE febcl,
1509 lv_dop TYPE abap_bool.
1510
1511 LOOP AT gt_items INTO DATA(ls_x) WHERE xumsw IS NOT INITIAL.
1512 ls_x-kunnr = |{ ls_x-kunnr ALPHA = IN }|.
1513 APPEND ls_x TO lt_x.
1514 ENDLOOP.
1515
1516 CHECK gt_new_db_pos IS NOT INITIAL.
1517 SELECT * FROM febep
1518 FOR ALL ENTRIES IN @gt_new_db_pos
1519 WHERE kukey = @gt_new_db_pos-kukey
1520 AND esnum = @gt_new_db_pos-esnum
1521 INTO TABLE @DATA(lt_febep).
1522
1523 LOOP AT gt_new_db_pos INTO DATA(ls_db_pos).
1524 DATA(ls_febep) = VALUE #( lt_febep[ kukey = ls_db_pos-kukey esnum = ls_db_pos-esnum ] OPTIONAL ).
1525 READ TABLE lt_x INDEX sy-tabix INTO DATA(ls_new).
1526 CHECK sy-subrc = 0.
1527 DATA(ls_feb_old) = ls_febep.
1528
1529 " Перенесём данные из файла.
1530 ls_febep-vgint = ls_new-vgint.
1531 ls_febep-zzkunnr = ls_new-kunnr.
1532 ls_febep-zzhkont = ls_new-hkont.
1533 ls_febep-zuonr = ls_new-zuonr.
1534 ls_febep-zzfipex = ls_new-fipex.
1535 ls_febep-zzfistl = ls_new-fistl.
1536 ls_febep-zzgeber = ls_new-geber.
1537
1538 IF ls_new-kunnr IS NOT INITIAL.
1539 CASE ls_febep-vgint(1).
1540 WHEN '+'.
1541 ls_febep-avkoa = 'D'.
1542 WHEN '-'.
1543 ls_febep-avkoa = 'K'.
1544 ENDCASE.
1545 ls_febep-avkon = ls_new-kunnr.
1546 ls_febep-tatyp = '0010'.
1547 lv_dop = abap_true.
1548 ELSE.
1549* CLEAR ls_febep-avkon.
1550 SELECT SINGLE attr2
1551 FROM t033f
1552 WHERE eigr1 = @ls_new-vgint
1553 AND eigr2 = '2'
1554 AND anwnd = '0001'
1555 INTO @DATA(lv_attr2).
1556 IF sy-subrc = 0 AND lv_attr2 = 1.
1557 ls_febep-avkoa = 'S'.
1558 ls_febep-tatyp = '0060'.
1559 ls_febep-avkon = ls_new-hkont.
1560 ENDIF.
1561 lv_dop = abap_true.
1562 ENDIF.
1563
1564* обновление таблицы
1565 MODIFY febep FROM ls_febep.
1566 IF sy-subrc = 0.
1567 IF lv_dop = abap_true.
1568* вспомогательные таблицы
1569* обновим febcl!
1570 SELECT SINGLE *
1571 INTO ls_febcl
1572 FROM febcl
1573 WHERE kukey = ls_febep-kukey
1574 AND esnum = ls_febep-esnum
1575 AND koart = ls_febep-avkoa
1576 AND agkon NE ''.
1577 IF sy-subrc NE 0.
1578 SELECT SINGLE *
1579 INTO ls_febcl
1580 FROM febcl
1581 WHERE kukey = ls_febep-kukey
1582 AND esnum = ls_febep-esnum
1583 AND csnum = 001.
1584 ENDIF.
1585 IF sy-subrc = 0.
1586* обновим позицию
1587 ls_febcl-agkon = ls_febep-avkon.
1588 ls_febcl-koart = ls_febep-avkoa.
1589 ELSE.
1590* создадим новую
1591 CLEAR ls_febcl.
1592 ls_febcl-kukey = ls_febep-kukey.
1593 ls_febcl-esnum = ls_febep-esnum.
1594 ls_febcl-csnum = 001.
1595 ls_febcl-koart = ls_febep-avkoa.
1596 ls_febcl-agkon = ls_febep-avkon.
1597 ENDIF.
1598 MODIFY febcl FROM ls_febcl.
1599 ENDIF.
1600 IF ls_febep-zuonr <> ls_feb_old-zuonr.
1601* договор изменился, удалим связку с позицией ЭБВ
1602 CALL FUNCTION 'Z_FM_FEB_UPD_REFX_FEBAN'
1603 EXPORTING
1604 iv_kukey = ls_febep-kukey
1605 iv_esnum = ls_febep-esnum
1606 iv_commit = ''. " commit work далее
1607 ENDIF.
1608
1609* пересчитаем таблицы, если данные были изменены
1610 CALL FUNCTION 'Z_FM_FEB_SYNC_TABLES'
1611 EXPORTING
1612 iv_bukrs = ls_db_pos-bukrs
1613 is_febep = ls_febep
1614 iv_commit = space
1615 EXCEPTIONS
1616 upd_error = 1
1617 OTHERS = 2.
1618 IF sy-subrc <> 0.
1619* Implement suitable error handling here
1620 ENDIF.
1621
1622 " Обновление полей бизнес выписки в ЗНП
1623 CALL METHOD zcl_fm_0013_znp_akk_helper=>update_znp
1624 EXPORTING
1625 iv_bukrs = ls_db_pos-bukrs
1626 iv_belnr = ls_febep-pnota
1627 is_febep = ls_febep.
1628 ENDIF.
1629
1630 COMMIT WORK AND WAIT.
1631
1632 CLEAR: ls_febep,
1633 ls_febcl.
1634 ENDLOOP.
1635ENDFORM.
1636
1637FORM call_feban.
1638 DATA(lv_kukey) = gs_header-kukey_1.
1639 SUBMIT feb_bsproc_call
1640 WITH p_kukey = lv_kukey
1641 AND RETURN.
1642ENDFORM.
1643
1644FORM show_log USING uv_log_type TYPE i.
1645 CONSTANTS: lc_subobj_load TYPE balsubobj VALUE 'LOG_OF_LOADS',
1646 lc_subobj_check TYPE balsubobj VALUE 'LOG_OF_CHECKS',
1647 lc_subobj_proc TYPE balsubobj VALUE 'LOG_OF_PROCESSING'.
1648 DATA: ls_bal_log TYPE bal_s_log,
1649 lt_messages TYPE TABLE OF balm,
1650 lv_subobj TYPE balsubobj.
1651
1652 CASE uv_log_type.
1653 WHEN 1.
1654 lv_subobj = lc_subobj_load.
1655 WHEN 2.
1656 lv_subobj = lc_subobj_check.
1657 WHEN 3.
1658 lv_subobj = lc_subobj_proc.
1659 ENDCASE.
1660
1661 CALL FUNCTION 'APPL_LOG_READ_DB'
1662 EXPORTING
1663 object = gc_object
1664 subobject = lv_subobj
1665 external_number = CONV balnrext( gs_header-id )
1666 TABLES
1667 messages = lt_messages.
1668
1669 IF lt_messages IS INITIAL.
1670 MESSAGE s041(zfm_0198_msg).
1671 RETURN.
1672 ENDIF.
1673
1674 ls_bal_log-aldate = sy-datum.
1675 ls_bal_log-aluser = sy-uname.
1676 DATA(lo_log_load) = NEW zcl_log_simple( is_header = ls_bal_log ).
1677
1678
1679 LOOP AT lt_messages INTO DATA(ls_msg).
1680 IF gs_item IS NOT INITIAL.
1681 CHECK ls_msg-msgv1 IS NOT INITIAL AND ls_msg-msgv1 = gs_item-buzei.
1682 ENDIF.
1683 lo_log_load->message_add( i_msgty = ls_msg-msgty i_msgid = ls_msg-msgid i_msgno = ls_msg-msgno
1684 i_msgv1 = ls_msg-msgv1 i_msgv2 = ls_msg-msgv2 i_msgv3 = ls_msg-msgv3
1685 i_msgv4 = ls_msg-msgv4 ).
1686 ENDLOOP.
1687
1688 lo_log_load->message_show( ).
1689 lo_log_load->message_clear( ).
1690 lo_log_load->free( ).
1691 FREE lo_log_load.
1692
1693 go_alv_i->refresh_table_display( ).
1694 CLEAR gs_item.
1695
1696ENDFORM.