Вы находитесь на странице: 1из 49

*----------------------------------------------------------------------*

***INCLUDE LZOVGMM_TRACKINGF07.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_ZFR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_EKBE_Q text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_zfr USING p_ekpo TYPE zovsmm_tracking_ekpo
p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_nfenum TYPE j_1bnfdoc-nfenum,
l_series TYPE j_1bnfdoc-series.

** Get the EKBE data


READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_q>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'Q'.
IF sy-subrc = 0.
*** Clear
CLEAR: l_nfenum,
l_series.
*** Get the CTE value
SELECT SINGLE series nftot nfenum gjahr
FROM j_1bnfdoc
INTO (l_series,lwa_output-valor_cte, l_nfenum, lwa_output-ano )
WHERE belnr EQ <fs_ekbe_q>-belnr. "CTE Value

IF sy-subrc = 0.
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = l_nfenum
IMPORTING
output = l_nfenum.
*** Mount CTE number
CONCATENATE l_nfenum
'-'
l_series
INTO lwa_output-cte.
lwa_output-miro_cte = <fs_ekbe_q>-belnr. "MIRO_CTE
ENDIF.
*** Date Validation Rule 7A - ZFR
PERFORM f_date_validation_rule_7a USING p_ekko
<fs_ekbe_q>
CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
ELSE.
*** Append the row
APPEND lwa_output TO gt_output.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_VALE_AMERICAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<FS_EKPO> text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_vale_americas USING p_ekpo TYPE zovsmm_tracking_ekpo
p_ekko TYPE zovsmm_tracking_ekko
p_likp TYPE zovsmm_tracking_likp
p_type
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local WA
DATA: lwa_vttp TYPE zovsmm_tracking_vttp,
lwa_vttk TYPE zovsmm_tracking_vttk.

lwa_output-cte = p_likp-bolnr. "CTE


*** Check if the type is not equal "ZREM"
IF p_ekko-bsart NE 'ZREM'.
*** Get CTE
READ TABLE gt_ekbz ASSIGNING FIELD-SYMBOL(<fs_ekbz>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'M'
BINARY SEARCH.

IF sy-subrc = 0.
lwa_output-miro_cte = <fs_ekbz>-belnr. "MIRO_CTE
*** Get CTE
READ TABLE gt_rbkp ASSIGNING FIELD-SYMBOL(<fs_rbkp>)
WITH KEY belnr = <fs_ekbz>-belnr
gjahr = <fs_ekbz>-gjahr
BINARY SEARCH.
IF sy-subrc = 0.
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_rbkp>-xblnr
IMPORTING
output = lwa_output-cte. "CTE
ENDIF.
ENDIF.
ENDIF.
*** Check if exist shipment
IF p_likp-xabln IS NOT INITIAL.
*** Check if the type is outbound (O)
IF p_type EQ 'O'.
*** Get the VTTP data
SELECT SINGLE vbeln
tknum
FROM vttp
INTO lwa_vttp
WHERE vbeln = p_likp-vbeln.
ELSE.
*** Get the VTTP data
READ TABLE gt_vttp INTO lwa_vttp
WITH KEY vbeln = p_likp-vbeln
BINARY SEARCH.
ENDIF.

IF sy-subrc = 0.
*** Check if the type is outbound (O)
IF p_type EQ 'O'.
*** Get the VTTP data
SELECT SINGLE tknum
handle
bfart
vsbed
ernam
erdat
tdlnr
tndrst
FROM vttk
INTO lwa_vttk
WHERE tknum = lwa_vttp-tknum.

IF sy-subrc = 0.
SORT gt_tsege BY head_hdl
even.
ENDIF.
ELSE.
*** Get the VTTK data
READ TABLE gt_vttk INTO lwa_vttk
WITH KEY tknum = lwa_vttp-tknum
BINARY SEARCH.
ENDIF.

IF sy-subrc = 0.
*** Get domain data - BFART
SELECT SINGLE ddtext
FROM dd07t
INTO lwa_output-tipo_transporte "(Tipo de transporte / Transporte type)
WHERE domname EQ 'BFART'
AND ddlanguage EQ sy-langu
AND domvalue_l EQ lwa_vttk-bfart.
*** Get domain data - VSBED
SELECT SINGLE vtext
FROM tvsbt
INTO lwa_output-tipo_carga "Tipo de carga
WHERE spras EQ sy-langu
AND vsbed EQ lwa_vttk-vsbed.
lwa_output-requisitante_asn = lwa_vttk-ernam. "ASN requester
*** Check if the type is outbound (O)
IF p_type EQ 'O'.
*** Get CTE - OUTBOUND
PERFORM f_busca_cte_outbound_zrem USING p_likp
lwa_vttk
CHANGING lwa_output.
*** Get the fields TSEGE table
SELECT head_hdl
even
even_tstfr
FROM tsege
APPENDING TABLE gt_tsege
WHERE head_hdl EQ lwa_vttk-handle
AND even_verty EQ '1'.
ENDIF.
*** Check if the type is inbound (I)
IF p_type EQ 'I' AND
p_ekko-bsart EQ 'ZREM'.
*** Get inbound CTE type "ZREM"
PERFORM f_busca_cte_inbound_zrem USING p_likp
lwa_vttk
CHANGING lwa_output.
ENDIF.
*** Date Validation Rule 18
PERFORM f_date_validation_rule_18 USING lwa_vttk
CHANGING lwa_output.
*** Get the TSEGE data - Date 19
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_19>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC130'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 19
PERFORM f_date_validation_rule_19 USING <fs_tsege_19>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 20
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_20>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC140'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 20
PERFORM f_date_validation_rule_20 USING <fs_tsege_20>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 21
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_21>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC150'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 21
PERFORM f_date_validation_rule_21 USING <fs_tsege_21>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 22
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_22>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC160'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 22
PERFORM f_date_validation_rule_22 USING <fs_tsege_22>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 23 or 24
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_23_24>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC170'
BINARY SEARCH.
IF sy-subrc = 0.
*** Check if is 'Reject'
IF lwa_vttk-tndrst EQ 'RJ'.
*** Date Validation Rule 23
PERFORM f_date_validation_rule_23 USING <fs_tsege_23_24>
CHANGING lwa_output.
ENDIF.
*** Check if is 'Cancel'
IF lwa_vttk-tndrst EQ 'ZH'.
*** Date Validation Rule 24
PERFORM f_date_validation_rule_24 USING <fs_tsege_23_24>
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Get the TSEGE data - Date 6
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_6>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC180'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 6
PERFORM f_date_validation_rule_6 USING <fs_tsege_6>
CHANGING lwa_output.
*** Check if date is fill
IF lwa_output-data6 IS INITIAL.
*** Clear
CLEAR: gt_date_control_6[].
*** Date Validation Rule 86
PERFORM f_date_validation_rule_86 USING <fs_tsege_6>
CHANGING lwa_output.
*** Date Validation Rule 96
PERFORM f_date_validation_rule_96 USING <fs_tsege_6>
CHANGING lwa_output.
*** Check if the control 6 is fill
IF gt_date_control_6[] IS NOT INITIAL.
*** Sort the table
SORT gt_date_control_6 BY date DESCENDING
priority DESCENDING.
*** Check the high date
READ TABLE gt_date_control_6 ASSIGNING
FIELD-SYMBOL(<fs_date_control_6>)
INDEX 1.
IF sy-subrc = 0.
*** Get the STATUS
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status_tr>)
WITH KEY linha_char = <fs_date_control_6>-
row
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-data_prev6 = <fs_date_control_6>-date. "Date
*** Check the prev date is fill
IF lwa_output-data_prev6 IS NOT INITIAL.
lwa_output-data_prev6 = lwa_output-data_prev6 + 3. "Raising 3
days
ELSE.
*** If do not find the date check the ICONTERM type
IF ( lwa_output-inconterm EQ 'FOB' OR
lwa_output-inconterm EQ 'FCA' OR
lwa_output-inconterm EQ 'EXW' ) AND
p_ekko-waers EQ 'BRL'.
lwa_output-data_prev6 = lwa_output-data41. "New prev date
ENDIF.
ENDIF.
lwa_output-status6 = <fs_status_tr>-status. "Status
ENDIF.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
*** Get the TSEGE data - Date 35
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_35>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC120'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 35
PERFORM f_date_validation_rule_35 USING <fs_tsege_35>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 36
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_36>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC190'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 36
PERFORM f_date_validation_rule_36 USING <fs_tsege_36>
CHANGING lwa_output.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*** Check if is inbound and 'LA'
IF p_type EQ 'I'.
*** Check if VTTP is fill
IF lwa_vttp IS INITIAL.
gv_no_show = abap_true.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_VALE_BRASILEIRAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<FS_EKPO> text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_vale_brasileiras USING p_ekpo TYPE zovsmm_tracking_ekpo
p_likp TYPE zovsmm_tracking_likp
CHANGING lwa_output TYPE
zovsmm_output_tracking.
**** Get MIRO
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'N'
xblnr = p_likp-verur
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-miro_cte = <fs_ekbe>-belnr. "MIRO_CTE
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_ZREM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_EKBE_Q text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_zrem USING p_ekpo TYPE zovsmm_tracking_ekpo
p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking
lwa_output_o TYPE zovsmm_output_tracking.
*** Local WA
DATA: lwa_likp TYPE zovsmm_tracking_likp.
*** Local variables
DATA: l_outbound,
l_inbound.

*** Clear
CLEAR: l_outbound,
l_inbound.
******* OUTBOUND *******
*** Save the original WA
lwa_output_o = lwa_output.
*** Get the EKBE data - OUTBOUND
LOOP AT gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_o>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp
AND bewtp = 'L'.
lwa_output-inbound = <fs_ekbe_o>-belnr. "Outbound
** Get the LIKP data
SELECT SINGLE vbeln
verur
bolnr
lifnr
xabln
lifex
FROM likp
INTO lwa_likp
WHERE vbeln = <fs_ekbe_o>-belnr.

IF sy-subrc = 0.
lwa_output-asn = lwa_likp-xabln. "ASN
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = lwa_likp-lifex
IMPORTING
output = lwa_output-nf. "Invoice (Nota fiscal)
*** Check if the invoice is fill
IF lwa_output-nf IS NOT INITIAL.
*** Get outbound NF type "ZREM"
PERFORM f_busca_nf_inbound_zrem USING lwa_likp
CHANGING lwa_output.
ENDIF.
*** Vale Americas
PERFORM f_validation_vale_americas USING p_ekpo
p_ekko
lwa_likp
'O'
CHANGING lwa_output.
*** Validation Passport dates
PERFORM f_validation_passport_dates USING p_ekko
CHANGING lwa_output.
**** Get Date
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_e_o>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'E'
xblnr = lwa_likp-verur
BINARY SEARCH.

IF sy-subrc = 0.
*** Date Validation Rule 7B
PERFORM f_date_validation_rule_7b USING p_ekko
<fs_ekbe_e_o>
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
*** Control
l_outbound = abap_true.
ENDLOOP.
*** Check if the original WA is fill
IF lwa_output_o IS NOT INITIAL.
*** Clear
CLEAR lwa_output.
MOVE-CORRESPONDING lwa_output_o TO lwa_output.
ENDIF.
******* INBOUND *******
*** Get the EKES data
LOOP AT gt_ekes ASSIGNING FIELD-SYMBOL(<fs_ekes_zrem>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp.

lwa_output-inbound = <fs_ekes_zrem>-vbeln. "Inbound


*** Get the LIKP data
READ TABLE gt_likp ASSIGNING FIELD-SYMBOL(<fs_likp_zrem>)
WITH KEY vbeln = <fs_ekes_zrem>-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-asn = <fs_likp_zrem>-xabln. "ASN
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_likp_zrem>-verur
IMPORTING
output = lwa_output-nf. "Invoice (Nota fiscal)
*** Get inbound NF type "ZREM"
PERFORM f_busca_nf_inbound_zrem USING <fs_likp_zrem>
CHANGING lwa_output.
*** Check if exist CTE in LIKP row
IF <fs_likp_zrem>-bolnr IS NOT INITIAL. "CTE
*** Check the company code - Americas
IF p_ekko-bukrs IN r_bukrs_americas. "Americas
*** Validation - Vale Americas
PERFORM f_validation_vale_americas USING p_ekpo
p_ekko
<fs_likp_zrem>
'I'
CHANGING lwa_output.
*** Validation Passport dates
PERFORM f_validation_passport_dates USING p_ekko
CHANGING lwa_output.
*** Check if show
IF gv_no_show IS NOT INITIAL.
*** Check type
IF <fs_ekes_zrem>-ebtyp NE 'LA'.
CLEAR gv_no_show.
ENDIF.
ENDIF.
ELSEIF p_ekko-bukrs IN r_bukrs_brasileiras. "Brasileiras
*** Validation - Vale Brasileiras
PERFORM f_validation_vale_brasileiras USING p_ekpo
<fs_likp_zrem>
CHANGING lwa_output.
ENDIF.
*** Check if MIRO is not initial
IF lwa_output-miro_cte IS NOT INITIAL.
*** Get CTE data
PERFORM f_cte_data CHANGING lwa_output.
ENDIF.
ENDIF.
**** Sort the table
* SORT gt_date_control BY date DESCENDING.
**** Get Date
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_e_zrem>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'E'
xblnr = <fs_likp_zrem>-verur
BINARY SEARCH.

IF sy-subrc = 0.
*** Date Validation Rule 7B
PERFORM f_date_validation_rule_7b USING p_ekko
<fs_ekbe_e_zrem>
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Check if the show on portal
IF gv_no_show IS INITIAL.
*** Append the row
APPEND lwa_output TO gt_output.
*** Control
l_inbound = abap_true.
ENDIF.
*** Clear
CLEAR gv_no_show.
ENDLOOP.
**** If do not have Inbund and Invoice
IF sy-subrc NE 0 AND
l_inbound IS INITIAL AND
l_outbound IS INITIAL.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_OTHERS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_EKBE_Q text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_others USING p_ekpo TYPE zovsmm_tracking_ekpo
p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local WA
DATA: lwa_likp TYPE zovsmm_tracking_likp.

******* INBOUND *******


*** Get the EKES data
LOOP AT gt_ekes ASSIGNING FIELD-SYMBOL(<fs_ekes>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp
AND vbeln IS NOT INITIAL.

lwa_output-inbound = <fs_ekes>-vbeln. "Inbound


*** Get the LIKP data
READ TABLE gt_likp ASSIGNING FIELD-SYMBOL(<fs_likp>)
WITH KEY vbeln = <fs_ekes>-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-asn = <fs_likp>-xabln. "ASN
lwa_output-cte = <fs_likp>-bolnr. "CTE
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_likp>-verur
IMPORTING
output = lwa_output-nf. "Invoice (Nota fiscal)
**** Get Date
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_nf>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'Q'
xblnr = <fs_likp>-verur
BINARY SEARCH.

IF sy-subrc = 0.
lwa_output-miro_nf = <fs_ekbe_nf>-belnr. "MIRO_NF
*** Check if the invoice (NF) is fill
IF lwa_output-nf IS NOT INITIAL AND
lwa_output-miro_nf IS NOT INITIAL.
*** Get NF data
PERFORM f_nf_data CHANGING lwa_output.
ENDIF.
ENDIF.
*** Check the company code - Americas
IF p_ekko-bukrs IN r_bukrs_americas. "Americas
*** Validation - Vale Americas
PERFORM f_validation_vale_americas USING p_ekpo
p_ekko
<fs_likp>
'I'
CHANGING lwa_output.
*** Validation Passport dates
PERFORM f_validation_passport_dates USING p_ekko
CHANGING lwa_output.
*** Check if show
IF gv_no_show IS NOT INITIAL.
*** Check type
IF <fs_ekes>-ebtyp NE 'LA'.
CLEAR gv_no_show.
ENDIF.
ENDIF.
ELSEIF p_ekko-bukrs IN r_bukrs_brasileiras. "Brasileiras
*** Validation - Vale Brasileiras
PERFORM f_validation_vale_brasileiras USING p_ekpo
<fs_likp>
CHANGING lwa_output.
ENDIF.
*** Check if MIRO is not initial
IF lwa_output-miro_cte IS NOT INITIAL.
*** Get CTE data
PERFORM f_cte_data CHANGING lwa_output.
ENDIF.
**** Get Date
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_e>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'E'
xblnr = <fs_likp>-verur
BINARY SEARCH.

IF sy-subrc = 0.
*** Date Validation Rule 7B
PERFORM f_date_validation_rule_7b USING p_ekko
<fs_ekbe_e>
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Check if the show on portal
IF gv_no_show IS INITIAL.
*** Append the row
APPEND lwa_output TO gt_output.
ENDIF.
*** Clear
CLEAR gv_no_show.
ENDLOOP.
**** If do not have Inbound and Invoice
IF sy-subrc NE 0.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_UB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_EKBE_Q text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_ub USING p_ekpo TYPE zovsmm_tracking_ekpo
p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_werks TYPE ekpo-werks,
l_nfenum TYPE j_1bnfdoc-nfenum,
l_series TYPE j_1bnfdoc-series,
l_j_1bbranch TYPE t001w-j_1bbranch.
*** Local internal tables
DATA: lt_txt TYPE TABLE OF text4096.
*** Local WA
DATA: lwa_vttp TYPE zovsmm_tracking_vttp,
lwa_vttk TYPE zovsmm_tracking_vttk,
lwa_likp TYPE zovsmm_tracking_likp.

***** OUTBOUND ******


*** Get the EKBE data - OUTBOUND
LOOP AT gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_l>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp
AND bewtp = 'L'.
lwa_output-inbound = <fs_ekbe_l>-belnr. "Outbound
*** Get NFe s
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_u>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'E'
xblnr = <fs_ekbe_l>-belnr
BINARY SEARCH.

IF sy-subrc = 0.
*** Get XBLNR
SELECT SINGLE xblnr
FROM mkpf
INTO lwa_output-nf
WHERE mblnr EQ <fs_ekbe_u>-belnr.
*** Clear
CLEAR: l_werks,
l_j_1bbranch,
l_nfenum,
l_series.
*** Convert the plant
l_werks = p_ekko-lifnr+6(4).
*** Get J_1BBRANCH
SELECT SINGLE j_1bbranch
FROM t001w
INTO l_j_1bbranch
WHERE werks EQ l_werks.

IF sy-subrc = 0.
CLEAR: lt_txt[].
*** Split the field
SPLIT lwa_output-nf AT '-' INTO TABLE lt_txt.
*** Get the NFENUM
LOOP AT lt_txt ASSIGNING FIELD-SYMBOL(<fs_txt>).
IF sy-tabix = 1.
l_nfenum = <fs_txt>(9).
ELSE.
l_series = <fs_txt>(3).
ENDIF.
ENDLOOP.
*** Get the NFE OUTBOUND - UB
SELECT SINGLE pstdat nftot gjahr
FROM j_1bnfdoc
INTO ( lwa_output-data_nf, lwa_output-valor_nf,
lwa_output-ano )
WHERE bukrs EQ p_ekko-bukrs
AND branch EQ l_j_1bbranch
AND nfenum EQ l_nfenum
AND series EQ l_series.

IF sy-subrc = 0.
*** Date Validation Rule 17
PERFORM f_date_validation_rule_17 USING lwa_output-data_nf
CHANGING lwa_output.
ENDIF.
*** Get CTE OUTBOUND - UB
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_n>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'N'
xblnr = lwa_output-nf
BINARY SEARCH.
IF sy-subrc = 0.
*** Clear
CLEAR: l_nfenum,
l_series.
*** Get the CTE OUTBOUND - UB
SELECT SINGLE nfenum series nftot
pstdat gjahr
FROM j_1bnfdoc
INTO ( l_nfenum, l_series, lwa_output-valor_cte,
lwa_output-data_cte, lwa_output-ano )
WHERE belnr EQ <fs_ekbe_n>-belnr.

IF sy-subrc = 0.
lwa_output-cte = l_nfenum && '-'
&& l_series. "CTE
**** Date Validation Rule 40
PERFORM f_date_validation_rule_40 USING lwa_output-data_cte
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Clear
CLEAR lwa_likp.
** Get the LIKP data
SELECT SINGLE vbeln
verur
bolnr
lifnr
xabln
lifex
FROM likp
INTO lwa_likp
WHERE vbeln = lwa_output-inbound.

IF sy-subrc = 0.
lwa_output-asn = lwa_likp-xabln. "ASN
*** Rule transportation
PERFORM f_rule_transportation USING p_ekko
lwa_likp
CHANGING lwa_output
lwa_vttk.
ENDIF.
ENDIF.
ELSE.
*** Clear
CLEAR lwa_likp.
** Get the LIKP data
SELECT SINGLE vbeln
verur
bolnr
lifnr
xabln
lifex
FROM likp
INTO lwa_likp
WHERE vbeln = <fs_ekbe_l>-belnr.

IF sy-subrc = 0.
lwa_output-asn = lwa_likp-xabln. "ASN
*** Rule transportation
PERFORM f_rule_transportation USING p_ekko
lwa_likp
CHANGING lwa_output
lwa_vttk.
ENDIF.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
******* INBOUND *******
*** Get the EKES data
LOOP AT gt_ekes ASSIGNING FIELD-SYMBOL(<fs_ekes>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp
AND xblnr = <fs_ekbe_l>-belnr.

lwa_output-inbound = <fs_ekes>-vbeln. "Inbound


*** Get NFe s
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_e>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'E'
xblnr = <fs_ekbe_l>-belnr
BINARY SEARCH.

IF sy-subrc = 0.
*** Get XBLNR
SELECT SINGLE xblnr
FROM mkpf
INTO lwa_output-nf
WHERE mblnr EQ <fs_ekbe_e>-belnr.
*** Clear
CLEAR: l_j_1bbranch,
l_nfenum,
l_series.
*** Get J_1BBRANCH
SELECT SINGLE j_1bbranch
FROM t001w
INTO l_j_1bbranch
WHERE werks EQ p_ekpo-werks.

IF sy-subrc = 0.
CLEAR: lt_txt[].
*** Split the field
SPLIT lwa_output-nf AT '-' INTO TABLE lt_txt.
*** Get the NFENUM
LOOP AT lt_txt ASSIGNING FIELD-SYMBOL(<fs_txt_i>).
IF sy-tabix = 1.
l_nfenum = <fs_txt_i>(9).
ELSE.
l_series = <fs_txt_i>(3).
ENDIF.
ENDLOOP.
*** Get the NFE INBOUND - UB
SELECT SINGLE pstdat nftot gjahr
FROM j_1bnfdoc
INTO ( lwa_output-data_nf, lwa_output-valor_nf,
lwa_output-ano )
WHERE bukrs EQ p_ekko-bukrs
AND branch EQ l_j_1bbranch
AND nfenum EQ l_nfenum
AND series EQ l_series.

IF sy-subrc = 0.
*** Date Validation Rule 17
PERFORM f_date_validation_rule_17 USING lwa_output-data_nf
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Validation Passport dates
PERFORM f_validation_passport_dates USING p_ekko
CHANGING lwa_output.
*** Get the LIKP data
READ TABLE gt_likp ASSIGNING FIELD-SYMBOL(<fs_likp_i>)
WITH KEY vbeln = <fs_ekes>-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-asn = <fs_likp_i>-xabln. "ASN
lwa_output-cte = <fs_likp_i>-bolnr. "CTE
*** Rule transportation
PERFORM f_rule_transportation USING p_ekko
<fs_likp_i>
CHANGING lwa_output
lwa_vttk.
*** Get CTE - INBOUND
PERFORM f_busca_cte_outbound_zrem USING <fs_likp_i>
lwa_vttk
CHANGING lwa_output.
ENDIF.
*** Date Validation Rule 7B
PERFORM f_date_validation_rule_7b USING p_ekko
<fs_ekbe_e>
CHANGING lwa_output.
ELSE.
*** Clear
CLEAR lwa_likp.
** Get the LIKP data
SELECT SINGLE vbeln
verur
bolnr
lifnr
xabln
lifex
FROM likp
INTO lwa_likp
WHERE vbeln = lwa_output-inbound.

IF sy-subrc = 0.
lwa_output-asn = lwa_likp-xabln. "ASN
*** Rule transportation
PERFORM f_rule_transportation USING p_ekko
lwa_likp
CHANGING lwa_output
lwa_vttk.
ENDIF.
ENDIF.
*** Check if vttk is fill
IF lwa_vttk IS INITIAL AND
<fs_ekes>-ebtyp EQ 'LA'.
gv_no_show = abap_true.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
ENDLOOP.
ENDLOOP.
*** Check if exist INBOUND or OUTBOUND
IF lwa_output-inbound IS INITIAL.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Check if the show on portal
IF gv_no_show IS INITIAL.
*** Append the row
APPEND lwa_output TO gt_output.
ENDIF.
*** Clear
CLEAR gv_no_show.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_ZIMR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_EKBE_Q text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_zimr USING p_ekpo TYPE zovsmm_tracking_ekpo
p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local WA
DATA: lwa_vttp TYPE zovsmm_tracking_vttp,
lwa_vttk TYPE zovsmm_tracking_vttk.
*** Local variables
DATA: l_refkey TYPE j_1bnflin-refkey,
l_nfenum TYPE j_1bnfdoc-nfenum,
l_series TYPE j_1bnfdoc-series,
l_vbeln TYPE vbrp-vbeln,
l_docnum TYPE j_1bnflin-docnum,
l_outbound,
l_inbound.

*** Clear
CLEAR: l_outbound,
l_inbound.
***** OUTBOUND ******
*** Get the EKBE data - OUTBOUND
LOOP AT gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_l>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp
AND bewtp = 'L'.
lwa_output-inbound = <fs_ekbe_l>-belnr. "Outbound
*** Clear
CLEAR: l_refkey,
l_nfenum,
l_series,
l_docnum,
l_vbeln.
*** Get VBELN
SELECT SINGLE vbeln
FROM vbrp
INTO l_vbeln
WHERE vgbel EQ <fs_ekbe_l>-belnr
AND vgpos EQ <fs_ekbe_l>-buzei.

IF sy-subrc = 0.
l_refkey = l_vbeln.
*** Get DOCNUM
SELECT SINGLE docnum
FROM j_1bnflin
INTO l_docnum
WHERE refkey EQ l_refkey.

IF sy-subrc = 0.
*** Get NFe OUTBOUND - ZIMR
SELECT SINGLE nfenum series nftot pstdat gjahr
FROM j_1bnfdoc
INTO ( l_nfenum, l_series, lwa_output-valor_nf,
lwa_output-data_nf, lwa_output-ano )
WHERE docnum EQ l_docnum.

IF sy-subrc = 0.
lwa_output-nf = l_nfenum && '-'
&& l_series. "NF
*** Date Validation Rule 17
PERFORM f_date_validation_rule_17 USING lwa_output-data_nf
CHANGING lwa_output.
ENDIF.

*** Get the LIKP data


READ TABLE gt_likp ASSIGNING FIELD-SYMBOL(<fs_likp>)
WITH KEY vbeln = <fs_ekbe_l>-belnr
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-asn = <fs_likp>-xabln. "ASN
lwa_output-cte = <fs_likp>-bolnr. "CTE
*** Rule transportation
PERFORM f_rule_transportation USING p_ekko
<fs_likp>
CHANGING lwa_output
lwa_vttk.
ENDIF.
*** Get CTE OUTBOUND - ZIMR
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_n>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'N'
xblnr = lwa_output-nf
BINARY SEARCH.
IF sy-subrc = 0.
*** Clear
CLEAR: l_nfenum,
l_series.
*** Get the CTE OUTBOUND - ZIMR
SELECT SINGLE nfenum series nftot pstdat gjahr
FROM j_1bnfdoc
INTO ( l_nfenum, l_series, lwa_output-valor_cte,
lwa_output-data_cte, lwa_output-ano )
WHERE belnr EQ <fs_ekbe_n>-belnr.

IF sy-subrc = 0.
lwa_output-cte = l_nfenum && '-'
&& l_series. "CTE
**** Date Validation Rule 40
PERFORM f_date_validation_rule_40 USING lwa_output-data_cte
CHANGING lwa_output.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
*** Control
l_outbound = abap_true.
ENDLOOP.
******* INBOUND *******
*** Get the EKES data
LOOP AT gt_ekes ASSIGNING FIELD-SYMBOL(<fs_ekes>)
WHERE ebeln = p_ekpo-ebeln
AND ebelp = p_ekpo-ebelp.

lwa_output-inbound = <fs_ekes>-vbeln. "Inbound


*** Validation Passport dates
PERFORM f_validation_passport_dates USING p_ekko
CHANGING lwa_output.
*** Get the LIKP data
READ TABLE gt_likp ASSIGNING FIELD-SYMBOL(<fs_likp_i>)
WITH KEY vbeln = <fs_ekes>-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-asn = <fs_likp_i>-xabln. "ASN
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_likp_i>-verur
IMPORTING
output = lwa_output-nf. "Invoice (Nota fiscal)
**** Get Date
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_nf>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'Q'
xblnr = <fs_likp_i>-verur
BINARY SEARCH.

IF sy-subrc = 0.
lwa_output-miro_nf = <fs_ekbe_nf>-belnr. "MIRO_NF
*** Check if the invoice (NF) is fill
IF lwa_output-nf IS NOT INITIAL AND
lwa_output-miro_nf IS NOT INITIAL.
*** Get NF data
PERFORM f_nf_data CHANGING lwa_output.
ENDIF.
ENDIF.
lwa_output-cte = <fs_likp_i>-bolnr. "CTE
*** Check if exist CTE in LIKP row
IF <fs_likp_i>-bolnr IS NOT INITIAL. "CTE
*** Get CTE
READ TABLE gt_ekbz ASSIGNING FIELD-SYMBOL(<fs_ekbz>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'M'
BINARY SEARCH.

IF sy-subrc = 0.
lwa_output-miro_cte = <fs_ekbz>-belnr. "MIRO_CTE
*** Get CTE
READ TABLE gt_rbkp ASSIGNING FIELD-SYMBOL(<fs_rbkp>)
WITH KEY belnr = <fs_ekbz>-belnr
gjahr = <fs_ekbz>-gjahr
BINARY SEARCH.
IF sy-subrc = 0.
*** Removes leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_rbkp>-xblnr
IMPORTING
output = lwa_output-cte. "CTE
ENDIF.
ENDIF.
*** Check if MIRO is not initial
IF lwa_output-miro_cte IS NOT INITIAL.
*** Get CTE data
PERFORM f_cte_data CHANGING lwa_output.
ENDIF.
ENDIF.
**** Get Date
READ TABLE gt_ekbe ASSIGNING FIELD-SYMBOL(<fs_ekbe_e>)
WITH KEY ebeln = p_ekpo-ebeln
ebelp = p_ekpo-ebelp
bewtp = 'E'
xblnr = lwa_output-nf
BINARY SEARCH.

IF sy-subrc = 0.
*** Date Validation Rule 7B
PERFORM f_date_validation_rule_7b USING p_ekko
<fs_ekbe_e>
CHANGING lwa_output.
ENDIF.
*** Rule transportation
PERFORM f_rule_transportation USING p_ekko
<fs_likp_i>
CHANGING lwa_output
lwa_vttk.
*** Check if vttk is fill
IF lwa_vttk IS INITIAL AND
<fs_ekes>-ebtyp EQ 'LA'.
gv_no_show = abap_true.
ENDIF.
ENDIF.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Check if the show on portal
IF gv_no_show IS INITIAL.
*** Append the row
APPEND lwa_output TO gt_output.
*** Control
l_inbound = abap_true.
ENDIF.
*** Clear
CLEAR gv_no_show.
ENDLOOP.
**** If do not have Inbund and Invoice
IF sy-subrc NE 0 AND
l_inbound IS INITIAL AND
l_outbound IS INITIAL.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append the row
APPEND lwa_output TO gt_output.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_TYPE_BRXX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_validation_type_brxx .

*** Local WA
DATA: lwa_output TYPE zovsmm_output_tracking,
lwa_ekpo TYPE zovsmm_tracking_ekpo,
lwa_ekko TYPE zovsmm_tracking_ekko,
lwa_likp TYPE zovsmm_tracking_likp.

*** Read the process type


READ TABLE gt_zovtmm_trac_proc ASSIGNING
FIELD-SYMBOL(<fs_zovtmm_trac_proc2>)
INDEX 1.
IF <fs_zovtmm_trac_proc2>-tipo EQ 'BR07' OR
<fs_zovtmm_trac_proc2>-tipo EQ 'BR08' OR
<fs_zovtmm_trac_proc2>-tipo EQ 'BR09'.
*** Check If do not exist PO or Request
LOOP AT gt_likp ASSIGNING FIELD-SYMBOL(<fs_likp_esp>).
*** Clear
CLEAR lwa_output.
*** Mount the date fields texts
PERFORM f_date_fields CHANGING lwa_output.
lwa_output-asn = <fs_likp_esp>-xabln. "ASN
lwa_output-inbound = <fs_likp_esp>-vbeln. "Outbound
*** Removes leading zeros - Invoice (Nota fiscal)
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_likp_esp>-lifex
IMPORTING
output = lwa_output-nf. "Invoice (Nota fiscal)
*** Get NF Outbound
PERFORM f_get_nf_likp_br_gp3 USING <fs_likp_esp>
CHANGING lwa_output.
lwa_ekko-bsart = 'ZREM'.
lwa_ekko-lifnr = <fs_likp_esp>-lifnr. "Vendor
*** Vale Americas
PERFORM f_validation_vale_americas USING lwa_ekpo
lwa_ekko
<fs_likp_esp>
'I'
CHANGING lwa_output.
*** Validation Passport dates
PERFORM f_validation_passport_dates USING lwa_ekko
CHANGING lwa_output.
*** Check if the WA is fill
IF lwa_output IS NOT INITIAL.
*** Final status rule
PERFORM f_final_status_rule CHANGING lwa_output.
*** Append
APPEND lwa_output TO gt_output.
ENDIF.
ENDLOOP.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATION_PASSPORT_DATES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<FS_EKKO> text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validation_passport_dates USING p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local structure
DATA: ls_ztra_passport TYPE ztra_passport,
ls_ztra_password TYPE ztra_password.
*** Local variables
DATA: l_stcd1 TYPE lfa1-stcd1.

*** Clear
CLEAR: l_stcd1.
*** Get LFA1 data
SELECT SINGLE stcd1
FROM lfa1
INTO l_stcd1
WHERE lifnr = p_ekko-lifnr.

IF sy-subrc = 0.
*** Clear
CLEAR: ls_ztra_passport,
ls_ztra_password.
*** Get Passport dates
SELECT SINGLE *
FROM ztra_passport
INTO ls_ztra_passport
WHERE nfnum9 EQ lwa_output-nf
AND stcd1 EQ l_stcd1.

IF sy-subrc = 0.
*** Get Password dates
SELECT SINGLE *
FROM ztra_password
INTO ls_ztra_password
WHERE passw EQ ls_ztra_passport-passw.

IF sy-subrc = 0.
*** Date 27
IF ls_ztra_password-dtsolagend IS NOT INITIAL.
** Date Validation Rule 27
PERFORM f_date_validation_rule_27_32 USING ls_ztra_password-dtsolagend
'27'
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Date 28
IF ls_ztra_passport-entrdat IS NOT INITIAL.
*** Date Validation Rule 28
PERFORM f_date_validation_rule_27_32 USING ls_ztra_passport-entrdat
'28'
CHANGING lwa_output.
ENDIF.
*** Date 29
IF ls_ztra_passport-dtconcl IS NOT INITIAL.
*** Date Validation Rule 29
PERFORM f_date_validation_rule_27_32 USING ls_ztra_passport-entrdat
'29'
CHANGING lwa_output.
ENDIF.
*** Date 30
IF ls_ztra_passport-advdat IS NOT INITIAL.
*** Date Validation Rule 30
PERFORM f_date_validation_rule_27_32 USING ls_ztra_passport-entrdat
'30'
CHANGING lwa_output.
ENDIF.
*** Date 31
IF ls_ztra_passport-unlosdat IS NOT INITIAL.
*** Date Validation Rule 31
PERFORM f_date_validation_rule_27_32 USING ls_ztra_passport-entrdat
'31'
CHANGING lwa_output.
ENDIF.
*** Date 32
IF ls_ztra_passport-unlofdat IS NOT INITIAL.
*** Date Validation Rule 32
PERFORM f_date_validation_rule_27_32 USING ls_ztra_passport-entrdat
'32'
CHANGING lwa_output.
ENDIF.
*** Date 39
IF ls_ztra_password-dtsolagend IS NOT INITIAL.
*** Date Validation Rule 39
PERFORM f_date_validation_rule_27_32 USING ls_ztra_password-dtsolagend
'39'
CHANGING lwa_output.
ENDIF.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_RULE_TRANSPORTATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_rule_transportation USING p_ekko TYPE zovsmm_tracking_ekko
p_likp TYPE zovsmm_tracking_likp
CHANGING lwa_output TYPE zovsmm_output_tracking
lwa_vttk TYPE zovsmm_tracking_vttk.
*** Local WA
DATA: lwa_vttp TYPE zovsmm_tracking_vttp.

*** Get the VTTP data


READ TABLE gt_vttp INTO lwa_vttp
WITH KEY vbeln = p_likp-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the VTTK data
READ TABLE gt_vttk INTO lwa_vttk
WITH KEY tknum = lwa_vttp-tknum
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-requisitante_asn = lwa_vttk-ernam. "ASN requester
*** Get the fields TSEGE table
SELECT head_hdl
even
even_tstfr
FROM tsege
APPENDING TABLE gt_tsege
WHERE head_hdl EQ lwa_vttk-handle
AND even_verty EQ '1'.

IF sy-subrc = 0.
SORT gt_tsege BY head_hdl
even.
ENDIF.
*** Date Validation Rule 18
PERFORM f_date_validation_rule_18 USING lwa_vttk
CHANGING lwa_output.
*** Get the TSEGE data - Date 19
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_19>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC130'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 19
PERFORM f_date_validation_rule_19 USING <fs_tsege_19>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 20
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_20>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC140'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 20
PERFORM f_date_validation_rule_20 USING <fs_tsege_20>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 21
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_21>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC150'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 21
PERFORM f_date_validation_rule_21 USING <fs_tsege_21>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 22
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_22>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC160'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 22
PERFORM f_date_validation_rule_22 USING <fs_tsege_22>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 23 or 24
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_23_24>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC170'
BINARY SEARCH.
IF sy-subrc = 0.
*** Check if is 'Reject'
IF lwa_vttk-tndrst EQ 'RJ'.
*** Date Validation Rule 23
PERFORM f_date_validation_rule_23 USING <fs_tsege_23_24>
CHANGING lwa_output.
ENDIF.
*** Check if is 'Cancel'
IF lwa_vttk-tndrst EQ 'ZH'.
*** Date Validation Rule 24
PERFORM f_date_validation_rule_24 USING <fs_tsege_23_24>
CHANGING lwa_output.
ENDIF.
ENDIF.
*** Get the TSEGE data - Date 6
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_6>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC180'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 6
PERFORM f_date_validation_rule_6 USING <fs_tsege_6>
CHANGING lwa_output.
*** Check if date is fill
IF lwa_output-data6 IS INITIAL.
*** Clear
CLEAR: gt_date_control_6[].
*** Date Validation Rule 86
PERFORM f_date_validation_rule_86 USING <fs_tsege_6>
CHANGING lwa_output.
*** Date Validation Rule 96
PERFORM f_date_validation_rule_96 USING <fs_tsege_6>
CHANGING lwa_output.
*** Check if the control 6 is fill
IF gt_date_control_6[] IS NOT INITIAL.
*** Sort the table
SORT gt_date_control_6 BY date DESCENDING
priority DESCENDING.
*** Check the high date
READ TABLE gt_date_control_6 ASSIGNING
FIELD-SYMBOL(<fs_date_control_6>)
INDEX 1.
IF sy-subrc = 0.
*** Get the STATUS
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status_tr>)
WITH KEY linha_char = <fs_date_control_6>-row
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-data_prev6 = <fs_date_control_6>-date. "Date
*** Check the prev date is fill
IF lwa_output-data_prev6 IS NOT INITIAL.
lwa_output-data_prev6 = lwa_output-data_prev6 + 3. "Raising 3
days
ELSE.
*** If do not find the date check the ICONTERM type
IF ( lwa_output-inconterm EQ 'FOB' OR
lwa_output-inconterm EQ 'FCA' OR
lwa_output-inconterm EQ 'EXW' ) AND
p_ekko-waers EQ 'BRL'.
lwa_output-data_prev6 = lwa_output-data41. "New prev date
ENDIF.
ENDIF.
lwa_output-status6 = <fs_status_tr>-status. "Status
ENDIF.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
*** Get the TSEGE data - Date 35
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_35>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC120'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 35
PERFORM f_date_validation_rule_35 USING <fs_tsege_35>
CHANGING lwa_output.
ENDIF.
*** Get the TSEGE data - Date 36
READ TABLE gt_tsege ASSIGNING FIELD-SYMBOL(<fs_tsege_36>)
WITH KEY head_hdl = lwa_vttk-handle
even = 'WSVLSC190'
BINARY SEARCH.
IF sy-subrc = 0.
*** Date Validation Rule 36
PERFORM f_date_validation_rule_36 USING <fs_tsege_36>
CHANGING lwa_output.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_FIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_date_fields CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Local FS
FIELD-SYMBOLS: <fs_value> TYPE any.
*** Local variables
DATA: l_value(80) TYPE c.

*** Get the STATUS data


LOOP AT gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>).
*** Ad leading zeros on left
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_status>-linha
IMPORTING
output = <fs_status>-linha_char.
*** Clear
CLEAR l_value.
*** Remove leading zeros on left
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_status>-linha
IMPORTING
output = <fs_status>-linha.
*** Cancatenate the text
CONCATENATE 'LWA_OUTPUT-STATUS' <fs_status>-linha INTO l_value.
*** Assign the field name
ASSIGN (l_value) TO <fs_value>.

IF sy-subrc = 0.
*** Fill the status field
<fs_value> = <fs_status>-status.
ENDIF.
ENDLOOP.
*** Sort
SORT: gt_status_tr BY linha_char.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_COMPANIES_TVARV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_get_companies_tvarv .

*** Clear
CLEAR: r_bukrs_americas[],
r_bukrs_brasileiras[].
*** TVARV
CREATE OBJECT lo_stvarv
EXPORTING
ip_name = cc_tvarv.
*** Get TVARV values - Americas
CALL METHOD lo_stvarv->get_const_range
EXPORTING
ip_name = cc_0001
IMPORTING
tp_range = r_bukrs_americas.
*** Get TVARV values - Brasileiras
CALL METHOD lo_stvarv->get_const_range
EXPORTING
ip_name = cc_0002
IMPORTING
tp_range = r_bukrs_brasileiras.
*** Check if the range is fill - Americas
IF r_bukrs_americas[] IS NOT INITIAL.
*** Sort the ranges
SORT r_bukrs_americas BY low.
ENDIF.
*** Check if the range is fill - Brasileiras
IF r_bukrs_brasileiras[] IS NOT INITIAL.
*** Sort the ranges
SORT r_bukrs_brasileiras BY low.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_CTE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_cte_data CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the CTE value


SELECT SINGLE pstdat nftot
FROM j_1bnfdoc
INTO (lwa_output-data_cte, lwa_output-valor_cte )
WHERE belnr EQ lwa_output-miro_cte.

IF sy-subrc = 0.
*** Date Validation Rule 40
PERFORM f_date_validation_rule_40 USING lwa_output-data_cte
CHANGING lwa_output.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_NF_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_nf_data CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the CTE value


SELECT SINGLE pstdat
FROM j_1bnfdoc
INTO lwa_output-data_nf
WHERE belnr EQ lwa_output-miro_nf.

IF sy-subrc = 0.
*** Check if the NF date is fill
IF lwa_output-data_nf IS NOT INITIAL.
*** Date Validation Rule 17
PERFORM f_date_validation_rule_17 USING lwa_output-data_nf
CHANGING lwa_output.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_BUSCA_NF_INBOUND_ZREM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_busca_nf_inbound_zrem USING lwa_likp TYPE zovsmm_tracking_likp
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the NF INBOUND - ZREM


SELECT SINGLE pstdat gjahr
FROM j_1bnfdoc
INTO ( lwa_output-data_nf, lwa_output-ano )
WHERE parid EQ lwa_likp-lifnr.

IF sy-subrc = 0.
*** Check if the NF date is fill
IF lwa_output-data_nf IS NOT INITIAL.
*** Date Validation Rule 17
PERFORM f_date_validation_rule_17 USING lwa_output-data_nf
CHANGING lwa_output.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_BUSCA_CTE_INBOUND_ZREM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_busca_cte_inbound_zrem USING p_likp TYPE zovsmm_tracking_likp
p_vttk TYPE zovsmm_tracking_vttk
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_ebeln TYPE ebeln,
l_ebelp TYPE ebelp,
l_belnr TYPE belnr_d,
l_nfenum TYPE j_1bnfdoc-nfenum,
l_series TYPE j_1bnfdoc-series.

*** Clear
CLEAR: l_ebeln,
l_ebelp,
l_belnr,
l_nfenum,
l_series.
*** GET PO and Item PO
SELECT SINGLE ebeln ebelp
FROM vfkp
INTO ( l_ebeln, l_ebelp )
WHERE rebel EQ p_vttk-tknum.

IF sy-subrc = 0.
*** Get BELNR
SELECT SINGLE belnr
FROM ekbe
INTO l_belnr
WHERE ebeln EQ l_ebeln
AND ebelp EQ l_ebelp
AND bewtp EQ 'Q'
AND xblnr EQ lwa_output-asn.

IF sy-subrc = 0.
**** Get the CTE INBOUND - ZREM
SELECT SINGLE pstdat series nftot
nfenum gjahr
FROM j_1bnfdoc
INTO ( lwa_output-data_cte, l_series,
lwa_output-valor_cte, l_nfenum,
lwa_output-ano )
WHERE belnr EQ l_belnr.

IF sy-subrc = 0.
*** Mount the CTE
lwa_output-cte = l_nfenum && '-'
&& l_series.
*** Date Validation Rule 40
PERFORM f_date_validation_rule_40 USING lwa_output-data_cte
CHANGING lwa_output.
ENDIF.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_BUSCA_CTE_OUTBOUND_ZREM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_busca_cte_outbound_zrem USING p_likp TYPE zovsmm_tracking_likp
p_vttk TYPE zovsmm_tracking_vttk
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_nfenum TYPE j_1bnfdoc-nfenum,
l_series TYPE j_1bnfdoc-series.
*** Local internal tables
DATA: lt_txt TYPE TABLE OF text4096.

*** Mount the CTE


lwa_output-cte = p_likp-bolnr. "CTE
*** Check if the CTE is fill
IF p_likp-bolnr IS NOT INITIAL.
*** Clear
CLEAR: lt_txt[].
*** Split the field
SPLIT p_likp-bolnr AT '-' INTO TABLE lt_txt.
*** Get the NFENUM
LOOP AT lt_txt ASSIGNING FIELD-SYMBOL(<fs_txt>).
IF sy-tabix = 1.
l_nfenum = <fs_txt>(9).
ELSE.
l_series = <fs_txt>(3).
ENDIF.
ENDLOOP.
*** Get the CTE OUTBOUND - ZREM
SELECT SINGLE pstdat nftot gjahr
FROM j_1bnfdoc
INTO ( lwa_output-data_cte, lwa_output-valor_cte,
lwa_output-ano )
WHERE nfenum EQ l_nfenum
AND series EQ l_series
AND parid EQ p_vttk-tdlnr.
*
IF sy-subrc = 0.
*** Date Validation Rule 40
PERFORM f_date_validation_rule_40 USING lwa_output-data_cte
CHANGING lwa_output.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_1 USING p_eban TYPE zovsmm_tracking_eban
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '01'
BINARY SEARCH.
IF sy-subrc = 0.
*** Check if exists strategy
IF p_eban-frggr IS NOT INITIAL AND
p_eban-frgrl IS INITIAL.
*** Append the row
lwa_output-data1 = p_eban-frgdt. "Date1 - with strategy
ELSEIF p_eban-frggr IS INITIAL.
lwa_output-data1 = p_eban-badat. "Date1 - without strategy
ENDIF.
*** Check if the field is assigned
IF lwa_output-data1 IS NOT INITIAL.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 1.
<fs_date_control>-date = lwa_output-data1.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<FS_EKKO> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_2 USING p_ekko TYPE zovsmm_tracking_ekko
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Get the STATUS data
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '02'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 2.
<fs_date_control>-date = p_ekko-bedat.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data2 = p_ekko-bedat. "Date2
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_6
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_6 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '06'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 6.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data6 = l_date(8). "Date6
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_7A
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<FS_EKKO> text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_7a USING p_ekko TYPE zovsmm_tracking_ekko
p_ekbe_q TYPE zovsmm_tracking_ekbe
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '07'
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-data7 = p_ekko-bedat. "Date7
lwa_output-status7 = <fs_status>-status. "Status7
ENDIF.
*** Sort the table
SORT gt_date_control BY date DESCENDING
priority DESCENDING.
*** Check the high date
READ TABLE gt_date_control ASSIGNING
FIELD-SYMBOL(<fs_date_control_a>)
INDEX 1.
IF sy-subrc = 0.
*** Check if data7 is greater than the largest date in the table
IF <fs_date_control_a>-date GT p_ekbe_q-budat.
*** Get the STATUS data
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status_tr_zfr>)
WITH KEY linha = <fs_date_control_a>-row
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-status = <fs_status_tr_zfr>-status. "Status
lwa_output-mensagem = <fs_status_tr_zfr>-mensagem. "Message
ENDIF.
ELSE.
lwa_output-status = <fs_status>-status. "Status
lwa_output-mensagem = <fs_status>-mensagem. "Message
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_7B
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<FS_EKBE_E> text
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_7b USING p_ekko TYPE zovsmm_tracking_ekko
p_ekbe_e TYPE zovsmm_tracking_ekbe
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Get the STATUS data
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '07'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 7.
<fs_date_control>-date = p_ekbe_e-budat.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data7 = p_ekbe_e-budat. "Date7
*** Check the prev date is fill
IF lwa_output-data_prev6 IS NOT INITIAL.
lwa_output-data_prev6 = lwa_output-data_prev6 + 3. "Raising 3 days
ELSE.
*** If do not find the date check the ICONTERM type
IF ( lwa_output-inconterm EQ 'CIF' OR
lwa_output-inconterm EQ 'CIP' OR
lwa_output-inconterm EQ 'DDP' ) AND
p_ekko-waers EQ 'BRL'.
lwa_output-data_prev7 = lwa_output-data41. "New prev date
ENDIF.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_8
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_8 USING p_eban TYPE zovsmm_tracking_eban
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '08'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 8.
<fs_date_control>-date = p_eban-badat.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data8 = p_eban-badat. "Date8
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_17
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_17 USING p_date TYPE sy-datum
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '17'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 17.
<fs_date_control>-date = p_date.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data17 = p_date. "Date11
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_18
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_18 USING p_vttk TYPE zovsmm_tracking_vttk
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '18'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 18.
<fs_date_control>-date = p_vttk-erdat.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data18 = p_vttk-erdat. "Date18
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_19
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_19 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '19'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 19.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data19 = l_date(8). "Date19
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_20
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_20 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '20'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 20.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data20 = l_date(8). "Date20
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_21
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_21 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '21'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 21.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data21 = l_date(8). "Date21
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_22
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_22 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '22'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 22.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data22 = l_date(8). "Date22
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_23
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_23 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255,
l_zasntxtobs TYPE zovtmmslcoleta-zasntxtobs.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '23'
BINARY SEARCH.
IF sy-subrc = 0.
*** Clear
CLEAR: l_zasntxtobs.
*** Get l_zasntxtobs
SELECT SINGLE zasntxtobs
FROM zovtmmslcoleta
INTO l_zasntxtobs
WHERE zvbeln EQ lwa_output-inbound.
*** Exchange &1 to message 1
REPLACE ALL OCCURRENCES OF '&' IN <fs_status>-mensagem
WITH l_zasntxtobs.
lwa_output-obs_asn = l_zasntxtobs. "OBS ASN
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 23.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data23 = l_date(8). "Date23
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_24
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_24 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255,
l_zasntxtobs TYPE zovtmmslcoleta-zasntxtobs.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '24'
BINARY SEARCH.
IF sy-subrc = 0.
*** Clear
CLEAR: l_zasntxtobs.
*** Get l_zasntxtobs
SELECT SINGLE zasntxtobs
FROM zovtmmslcoleta
INTO l_zasntxtobs
WHERE zvbeln EQ lwa_output-inbound.
*** Exchange &1 to message 1
REPLACE ALL OCCURRENCES OF '&' IN <fs_status>-mensagem
WITH l_zasntxtobs.
lwa_output-obs_asn = l_zasntxtobs. "OBS ASN
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 24.
<fs_date_control>-date = l_date(8).
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data24 = l_date(8). "Date24
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_28
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_27_32 USING p_date TYPE sy-datum
p_code TYPE char2
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha = p_code
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = p_code.
<fs_date_control>-date = p_date.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** check the type
CASE p_code.
WHEN '27'.
*** Append the row
lwa_output-data27 = p_date. "Date27
WHEN '28'.
*** Append the row
lwa_output-data28 = p_date. "Date28
WHEN '29'.
*** Append the row
lwa_output-data29 = p_date. "Date29
WHEN '30'.
*** Append the row
lwa_output-data30 = p_date. "Date30
WHEN '31'.
*** Append the row
lwa_output-data31 = p_date. "Date31
WHEN '32'.
*** Append the row
lwa_output-data32 = p_date. "Date32
WHEN '39'.
*** Append the row
lwa_output-data39 = p_date. "Date39
ENDCASE.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_35
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_35 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '35'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the row
lwa_output-data35 = l_date(8). "Date35
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_36
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_36 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '36'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the row
lwa_output-data36 = l_date(8). "Date36
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_40
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_40 USING p_date TYPE sy-datum
CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '40'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 40.
<fs_date_control>-date = p_date.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data40 = p_date. "Date40
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_41
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_41 USING p_date TYPE sy-datum
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Get the STATUS data
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '41'
BINARY SEARCH.
IF sy-subrc = 0.
*** Append the date
APPEND INITIAL LINE TO gt_date_control ASSIGNING FIELD-
SYMBOL(<fs_date_control>).
*** Date and Status
<fs_date_control>-row = 41.
<fs_date_control>-date = p_date.
<fs_date_control>-priority = <fs_status>-campo_tecnico.
*** Append the row
lwa_output-data41 = p_date. "Date40
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_86
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_86 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '86'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control_6 ASSIGNING FIELD-
SYMBOL(<fs_date_control_6>).
*** Date and Status
<fs_date_control_6>-row = 86.
<fs_date_control_6>-date = l_date(8).
<fs_date_control_6>-priority = <fs_status>-campo_tecnico.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DATE_VALIDATION_RULE_96
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_DATE_CONTROL> text
* <--P_<FS_EBAN> text
*----------------------------------------------------------------------*
FORM f_date_validation_rule_96 USING p_tsege TYPE zovsmm_tracking_tsege
CHANGING lwa_output TYPE zovsmm_output_tracking.
*** Local variables
DATA: l_date TYPE char255.

*** Get the STATUS data


READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status>)
WITH KEY linha_char = '96'
BINARY SEARCH.
IF sy-subrc = 0.
*** Get the timestamp
l_date = p_tsege-even_tstfr.
*** Remove dots (.)
TRANSLATE l_date USING '. '.
*** Remove Comma (,)
TRANSLATE l_date USING ', '.
*** Condense
CONDENSE l_date NO-GAPS.
*** Append the date
APPEND INITIAL LINE TO gt_date_control_6 ASSIGNING FIELD-
SYMBOL(<fs_date_control_6>).
*** Date and Status
<fs_date_control_6>-row = 96.
<fs_date_control_6>-date = l_date(8).
<fs_date_control_6>-priority = <fs_status>-campo_tecnico.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_FINAL_STATUS_RULE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_final_status_rule CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Sort the table


SORT gt_date_control BY priority DESCENDING.
*** Delete dates 00
DELETE gt_date_control WHERE priority EQ '00'.
*** Check the high date
READ TABLE gt_date_control ASSIGNING
FIELD-SYMBOL(<fs_date_control>)
INDEX 1.
IF sy-subrc = 0.
*** Get the STATUS
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status_tr>)
WITH KEY linha_char = <fs_date_control>-row
BINARY SEARCH.
IF sy-subrc = 0.
lwa_output-desempate = <fs_status_tr>-campo_tecnico. "Priority
lwa_output-status = <fs_status_tr>-status. "Status
lwa_output-mensagem = <fs_status_tr>-mensagem. "Message
lwa_output-data_final = <fs_date_control>-date. "Final Date
ENDIF.
ENDIF.
**** Validate dates to not show the previosly status
* PERFORM f_validate_show_status CHANGING lwa_output.

*** Validate the priority dates on timeline


PERFORM f_validate_timeline_priority CHANGING lwa_output.
*** Clear
CLEAR: gt_date_control[].

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_VALIDATE_TIMELINE_PRIORITY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LWA_OUTPUT text
*----------------------------------------------------------------------*
FORM f_validate_timeline_priority CHANGING lwa_output TYPE zovsmm_output_tracking.

*** Local structures


TYPES: BEGIN OF lty_status,
linha TYPE zzlinha_track,
campo_tecnico TYPE zzcampo_tecnico,
desempate TYPE numc2,
END OF lty_status.
*** Local internal tables
DATA: lt_status TYPE TABLE OF lty_status.
*** Local FS
FIELD-SYMBOLS: <fs_value> TYPE any,
<fs_value2> TYPE any.
*** Local variables
DATA: l_tabix TYPE char2,
l_count TYPE numc1,
l_len TYPE numc1,
l_value(80) TYPE c,
l_value2(80) TYPE c.

l_count = 1.
*** Check which dates are fill
WHILE l_count < 8.
l_tabix = l_count.
*** Adding leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = l_tabix
IMPORTING
output = l_tabix.
*** Get the STATUS
READ TABLE gt_status_tr ASSIGNING FIELD-SYMBOL(<fs_status_tr>)
WITH KEY linha_char = l_tabix
BINARY SEARCH.
IF sy-subrc = 0.
APPEND INITIAL LINE TO lt_status ASSIGNING
FIELD-SYMBOL(<fs_status2>).
<fs_status2>-linha = <fs_status_tr>-linha.
<fs_status2>-campo_tecnico = <fs_status_tr>-campo_tecnico.
<fs_status2>-desempate = <fs_status_tr>-campo_tecnico(2).
ENDIF.
*** Adding 1
ADD 1 TO l_count.
ENDWHILE.
*** Check if the table is fill
IF lt_status[] IS NOT INITIAL.
*** Sort the table
SORT lt_status BY desempate.
*** Get the STATUS
READ TABLE lt_status ASSIGNING <fs_status2>
WITH KEY desempate = lwa_output-desempate
BINARY SEARCH.
IF sy-subrc <> 0.
APPEND INITIAL LINE TO lt_status ASSIGNING <fs_status2>.
<fs_status2>-linha = 0.
*** Remove leading zeros
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <fs_status2>-linha
IMPORTING
output = <fs_status2>-linha.
<fs_status2>-campo_tecnico = lwa_output-desempate.
<fs_status2>-desempate = lwa_output-desempate(2).
ENDIF.
*** Sort the table
SORT lt_status BY desempate.
*** Count the rows in internal table
DESCRIBE TABLE lt_status LINES l_len.
l_count = 0.
*** Fill the timeline dates
WHILE l_count LT l_len.
*** Get the STATUS
READ TABLE lt_status ASSIGNING <fs_status2>
INDEX l_count + 1.
*** Concatenate the text
CONCATENATE 'LWA_OUTPUT-DATA' <fs_status2>-linha INTO l_value.
CONDENSE l_value NO-GAPS.
CONCATENATE 'LWA_OUTPUT-DATA_TM_C_' l_count INTO l_value2.
CONDENSE l_value2 NO-GAPS.
*** Assign the field name
ASSIGN (l_value) TO <fs_value>.
ASSIGN (l_value2) TO <fs_value2>.
*** Check if the fields are assigned
IF <fs_value> IS ASSIGNED AND
<fs_value2> IS ASSIGNED.
*** Check if the last status
IF <fs_status2>-linha EQ 0.
<fs_value2> = lwa_output-data_final.
ELSE.
*** Mount the current date
<fs_value2> = <fs_value>.
ENDIF.
ENDIF.
*** Clear
CLEAR: l_value,
l_value2.
*** Dessassign
UNASSIGN: <fs_value>,
<fs_value2>.
*** Concatenate the text
CONCATENATE 'LWA_OUTPUT-DATA_PREV' <fs_status2>-linha INTO l_value.
CONDENSE l_value NO-GAPS.
CONCATENATE 'LWA_OUTPUT-DATA_TM_P_' l_count INTO l_value2.
CONDENSE l_value2 NO-GAPS.
*** Assign the field name
ASSIGN (l_value) TO <fs_value>.
ASSIGN (l_value2) TO <fs_value2>.
*** Check if the fields are assigned
IF <fs_value> IS ASSIGNED AND
<fs_value2> IS ASSIGNED.
*** Check if the forecast date is fill
IF <fs_value> IS NOT INITIAL.
*** Check if the last status
IF <fs_status2>-linha NE 0.
*** Mount the forecast date
<fs_value2> = <fs_value>.
ENDIF.
ENDIF.
ENDIF.
*** Clear
CLEAR: l_value,
l_value2.
*** Dessassign
UNASSIGN: <fs_value>,
<fs_value2>.
*** Concatenate the text
CONCATENATE 'LWA_OUTPUT-STATUS' <fs_status2>-linha INTO l_value.
CONDENSE l_value NO-GAPS.
CONCATENATE 'LWA_OUTPUT-STATUS_TM_' l_count INTO l_value2.
CONDENSE l_value2 NO-GAPS.
*** Assign the field name
ASSIGN (l_value) TO <fs_value>.
ASSIGN (l_value2) TO <fs_value2>.
*** Check if the fields are assigned
IF <fs_value> IS ASSIGNED AND
<fs_value2> IS ASSIGNED.
*** Check if the last status
IF <fs_status2>-linha EQ 0.
<fs_value2> = lwa_output-status.
ELSE.
*** Mount the Status
<fs_value2> = <fs_value>.
ENDIF.
ENDIF.
*** Clear
CLEAR: l_value,
l_value2.
*** Dessassign
UNASSIGN: <fs_value>,
<fs_value2>.
*** Adding 1
ADD 1 TO l_count.
ENDWHILE..
ENDIF.

ENDFORM.
**&---------------------------------------------------------------------*
**& Form F_VALIDATE_SHOW_STATUS
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** <--P_LWA_OUTPUT text
**----------------------------------------------------------------------*
*FORM f_validate_show_status CHANGING lwa_output TYPE zovsmm_output_tracking.
*
**** Local FS
* FIELD-SYMBOLS: <fs_value> TYPE any,
* <fs_value3> TYPE any,
* <fs_value2> TYPE any.
**** Local variables
* DATA: l_value(80) TYPE c,
* l_tabix TYPE char10,
* l_count TYPE numc1.
*
* l_count = 7.
**** Check which dates are fill
* WHILE l_count > 0.
* l_tabix = sy-tabix.
**** Concatenate the text
* CONCATENATE 'LWA_OUTPUT-DATA' l_count INTO l_value.
* CONDENSE l_value NO-GAPS.
**** Assign the field name
* ASSIGN (l_value) TO <fs_value>. "DATE(X)
**** Clear
* CLEAR l_value.
**** Concatenate the text
* CONCATENATE 'LWA_OUTPUT-DATA_PREV' l_count INTO l_value.
* CONDENSE l_value NO-GAPS.
**** Assign the field name
* ASSIGN (l_value) TO <fs_value2>. "DATE FORECAST(X)
**** Date
* IF <fs_value> IS ASSIGNED.
**** Fill the status field
* IF <fs_value> IS NOT INITIAL.
**** Clear
* CLEAR l_value.
* l_count = l_count - 1.
**** Concatenate the text
* CONCATENATE 'LWA_OUTPUT-STATUS' l_count INTO l_value.
* CONDENSE l_value NO-GAPS.
**** Assign the field name
* ASSIGN (l_value) TO <fs_value3>. "DATE(X-1)
*
* IF sy-subrc = 0.
**** Clear the field
* CLEAR <fs_value3>.
* EXIT.
* ENDIF.
* ENDIF.
* ENDIF.
**** Forecast date
* IF <fs_value2> IS ASSIGNED.
**** Fill the status field
* IF <fs_value2> IS NOT INITIAL.
**** Clear
* CLEAR l_value.
* l_count = l_count - 1.
**** Concatenate the text
* CONCATENATE 'LWA_OUTPUT-STATUS' l_count INTO l_value.
* CONDENSE l_value NO-GAPS.
**** Assign the field name
* ASSIGN (l_value) TO <fs_value3>. "DATE(X-1)
*
* IF sy-subrc = 0.
**** Clear the field
* CLEAR <fs_value3>.
* EXIT.
* ENDIF.
* ENDIF.
* ENDIF.
**** Dessassign
* UNASSIGN: <fs_value>,
* <fs_value2>,
* <fs_value3>.
**** Subtract 1
* SUBTRACT 1 FROM l_count.
* ENDWHILE.
*
*ENDFORM.

Вам также может понравиться