100% found this document useful (1 vote)
1K views15 pages

Checking Address Usage Validity Inconsistencies

The document discusses inconsistencies between address entries in the BUT021_FS and BUT020 tables. There should be a standard ("XXDEFAULT") address entry in BUT021_FS that matches the validity period of any address entries in BUT020 for a given partner. The report checks for gaps in the standard address validity period in BUT021_FS compared to BUT020, which would indicate an inconsistent partner address usage. It outputs any found inconsistencies and can generate address entries to insert into BUT021_FS to correct the issues.

Uploaded by

Subhasis Jethy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
1K views15 pages

Checking Address Usage Validity Inconsistencies

The document discusses inconsistencies between address entries in the BUT021_FS and BUT020 tables. There should be a standard ("XXDEFAULT") address entry in BUT021_FS that matches the validity period of any address entries in BUT020 for a given partner. The report checks for gaps in the standard address validity period in BUT021_FS compared to BUT020, which would indicate an inconsistent partner address usage. It outputs any found inconsistencies and can generate address entries to insert into BUT021_FS to correct the issues.

Uploaded by

Subhasis Jethy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 15

There are partners with inconsistent address entries in BUT021_FS table compared to the address entries in BUT020.

There should be standard address(XXDEFAULT) entry for the time period for which the partner has address valid in BUT020. If there is a missing gap of the validity in partners standard address usage(XXDEFAULT) in BUT021_FS compared to BUT020 then the partner address usage is said to be inconsistent. The outcome of this issue might cause issues like, Partner can't be edited and saved in BP transaction. It might also result in error message R11 244 when executing various Business Partner Address related APIs or Function Modules. *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Report Z_but020_but021_fs_check *& Provided by SAP for checking Address usage validity inconsistencies *&---------------------------------------------------------------------* *& This report is check the inconsistencies between the BUT020 and BUT021_FS tab les provided by SAP Support *& The sceanrios considered are *& Any date validity in But021_FS not present in But020 would be considered as a n inconsistency. *& The inconsistent date validities would listed in an output of the report. *& Based on the number of inconsistencies a report or manual changes needs to pe rformed to correct the inconsistencies. *&---------------------------------------------------------------------* REPORT Z_BUT020_BUT021_FS_CHECK. TABLES BUT000. SELECTION-SCREEN BEGIN OF BLOCK b_partners WITH FRAME TITLE b_text1. SELECT-OPTIONS: BP_NUM FOR but000-partner. SELECTION-SCREEN END OF BLOCK b_partners. SELECTION-SCREEN BEGIN OF BLOCK b_testrun WITH FRAME TITLE b_text3. PARAMETER: TEST_RUN TYPE c AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK b_testrun. LOAD-OF-PROGRAM. b_text1 b_text3 = 'Range of Partners to be checked'. = 'Check-box for test run '.

START-OF-SELECTION. TYPES: BEGIN OF LS_PARTNER, PARTNER TYPE BUT020-PARTNER, END OF LS_PARTNER.

TYPES: BEGIN OF LS_FINAL, PARTNER TYPE BUT020-PARTNER, ADDRNUMBER TYPE BUT020-ADDRNUMBER, ADDR_VALID_FROM TYPE BUT020-ADDR_VALID_FROM, ADDR_VALID_TO TYPE BUT020-ADDR_VALID_TO, FLAG TYPE C, END OF LS_FINAL. TYPES: BEGIN OF LS_FINAL1, PARTNER TYPE BUT021_FS-PARTNER, ADDRNUMBER TYPE BUT021_FS-ADDRNUMBER, VALID_FROM TYPE BUT021_FS-VALID_FROM, VALID_TO TYPE BUT021_FS-VALID_TO, FLAG TYPE C, END OF LS_FINAL1. TYPES: BEGIN OF LS_INCONSISTENT, PARTNER TYPE BUT020-PARTNER, ADDRNUMBER TYPE BUT020-ADDRNUMBER, VALID_FROM TYPE BUT021_FS-VALID_FROM, VALID_TO TYPE BUT021_FS-VALID_TO, END OF LS_INCONSISTENT. DATA: TZ TYPE TTZZ-TZONE. DATA: TODAY TYPE TIMESTAMP. TZ = 'UTC'. CONVERT DATE SY-DATUM TIME '000000' INTO TIME STAMP TODAY TIME ZONE TZ . DATA : COUNT TYPE I. DATA : COUNTER TYPE I. DATA : FLAG TYPE I. DATA DATA DATA DATA DATA DATA DATA : : : : : : : FROM_DATE TYPE D . TO_DATE TYPE D . FIRST_DATE TYPE D . LAST_DATE TYPE D . TEMP_DATE TYPE D. MIN_DATE TYPE D . MAX_DATE TYPE D.

DATA : START_DATE TYPE D. DATA : END_DATE TYPE D. DATA : COMPLETE_RANGE TYPE I. DATA : FROM_RANGE TYPE I. DATA : TO_RANGE TYPE I. DATA DATA DATA DATA DATA : : : : : TEMP_FIRST_DATE TYPE D. TEMP_LAST_DATE TYPE D. TEMP_FROM_DATE TYPE D. TEMP_TO_DATE TYPE D. ADDRNUMBER TYPE BUT020-ADDRNUMBER.

DATA : LT_BUT021_FS_ALL TYPE TABLE OF BUT021_FS WITH HEADER LINE. DATA : LT_BUT021_FS_INSERT TYPE TABLE OF BUT021_FS WITH HEADER LINE.

DATA : LT_BUT020 TYPE SORTED TABLE OF LS_FINAL WITH NON-UNIQUE KEY PARTNER WITH HEADER LINE, LT_WORK_TABLE TYPE TABLE OF LS_FINAL WITH HEADER LINE, LT_BUT020_FINAL TYPE TABLE OF BUT020 WITH HEADER LINE, LT_BUT021_FS TYPE SORTED TABLE OF LS_FINAL1 WITH NON-UNIQUE KEY PARTNER W ITH HEADER LINE, LT_FINAL TYPE SORTED TABLE OF LS_FINAL WITH NON-UNIQUE KEY PARTNER ADDR_V ALID_FROM WITH HEADER LINE, LT_FINAL1 TYPE SORTED TABLE OF LS_FINAL1 WITH NON-UNIQUE KEY PARTNER VALI D_FROM WITH HEADER LINE, LT_NUMBER_OF_RECORDS TYPE TABLE OF LS_FINAL1 WITH HEADER LINE, LT_INCONSISTENT TYPE TABLE OF LS_INCONSISTENT WITH HEADER LINE, LT_WORK_TABLE1 TYPE TABLE OF LS_FINAL1 WITH HEADER LINE, LT_PRE_FINAL TYPE TABLE OF LS_FINAL WITH HEADER LINE, LT_PARTNER TYPE SORTED TABLE OF LS_PARTNER WITH NON-UNIQUE KEY PARTNER WI TH HEADER LINE. DATA : LS_BUT020 LIKE LINE OF LT_BUT020, LS_BUT021_FS LIKE LINE OF LT_BUT021_FS, LS_WORK_TABLE LIKE LINE OF LT_FINAL, LS_WORK_SECOND_TABLE LIKE LINE OF LT_FINAL , LS_BUT020_FINAL LIKE LINE OF LT_BUT020, LS_PRE_FINAL LIKE LINE OF LT_PRE _FINAL, LS_WORK_TABLE1 LIKE LINE OF LT_WORK_TABLE1, LS_WORK_INCONSISTENT LIKE LINE OF LT_INCONSISTENT, LS_NUMBER_OF_RECORDS LIKE LINE OF LT_NUMBER_OF_RECORDS, LS_BUT021_FS_ALL LIKE LINE OF LT_BUT021_FS_AL L, LS_BUT021_FS_INSERT LIKE LINE OF LT_BUT021_FS_INSERT . DATA DATA DATA DATA : : : : LS_PARTNER TYPE LS_PARTNER. LS_FINAL TYPE LS_FINAL. LS_FINAL1 TYPE LS_FINAL1. LS_INCONSISTENT TYPE LS_INCONSISTENT.

DATA : DATE_VALUE TYPE D. * Selects the all the distinct Business partners between the provided BP Range. SELECT DISTINCT PARTNER INTO CORRESPONDING FIELDS OF TABLE LT_PARTNER FROM BUT02 0 WHERE PARTNER IN BP_NUM . * Selects all the But021_fs records for the business partners selected in the pr evious select statement. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_BUT021_FS FROM BUT021_FS FOR ALL ENTRIES IN LT_PARTNER WHERE ADR_KIND = 'XXDEFAULT' AND PARTNER = LT_PA RTNER-PARTNER. * selects all the But020 records for the business partner ranges selected earlie r. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_BUT020 FROM BUT020 FOR ALL ENTRIES IN LT_PARTNER WHERE PARTNER = LT_PARTNER-PARTNER. LOOP AT LT_PARTNER INTO LS_PARTNER. PERFORM FILL_BUT020_RECORDS.

PERFORM FIX_BUT020_ENTRIES . PERFORM REFRESH_VARIABLES. REFRESH LT_WORK_TABLE. ENDLOOP. DELETE ADJACENT DUPLICATES FROM LT_FINAL COMPARING ALL FIELDS. LOOP AT LT_PARTNER INTO LS_PARTNER. PERFORM FILL_BUT021_FS_RECORDS. PERFORM FIX_BUT021_FS_ENTRIES . PERFORM REFRESH_VARIABLES. REFRESH LT_WORK_TABLE1. ENDLOOP. DELETE ADJACENT DUPLICATES FROM LT_FINAL1 COMPARING ALL FIELDS. * *SORT LT_FINAL BY PARTNER ADDR_VALID_FROM. * *SORT LT_FINAL1 BY PARTNER VALID_FROM. *LOOP AT LT_PARTNER INTO LS_PARTNER. * * PERFORM FILL_BUT020_RECORDS. * * FROM_DATE = MIN_DATE. * TO_DATE = MAX_DATE. * * PERFORM FILL_BUT021_FS_RECORDS. * * START_DATE = MIN_DATE. * END_DATE = MAX_DATE. * * IF START_DATE LT FROM_DATE OR END_DATE GT TO_DATE. * * DELETE LT_FINAL WHERE PARTNER = LS_PARTNER-PARTNER. * * DELETE LT_FINAL1 WHERE PARTNER = LS_PARTNER-PARTNER. * * ENDIF. * * PERFORM REFRESH_VARIABLES. * *ENDLOOP. LOOP AT LT_PARTNER INTO LS_PARTNER. PERFORM CHECK_INCONSISTENCIES . ENDLOOP.

FORMAT COLOR = 4. DESCRIBE TABLE LT_INCONSISTENT LINES COUNT. WRITE : / . WRITE : / 'INCONSISTENT ENTRIES ' , COUNT . WRITE : / . FORMAT COLOR = 3 . LOOP AT LT_INCONSISTENT INTO LS_INCONSISTENT . WRITE : / LS_INCONSISTENT-PARTNER . WRITE : LS_INCONSISTENT-VALID_FROM , LS_INCONSISTENT-VALID_TO . ENDLOOP. PERFORM FILL_ADDRESS_RECORDS. WRITE : / . DESCRIBE TABLE LT_BUT021_FS_INSERT LINES COUNT. FORMAT COLOR = 4. WRITE : / 'GENERATED ENTRIES ' , COUNT . WRITE : / . IF LT_BUT021_FS_INSERT IS NOT INITIAL. WRITE : / 'CLIENT' , 'PARTNER' , 'ADDRNUMBER' , ' VALID_FROM D_TO ' , 'ADR_KIND' . WRITE : /. ENDIF. FORMAT COLOR = 5. LOOP AT LT_BUT021_FS_INSERT INTO LS_BUT021_FS_INSERT . WRITE : / LS_BUT021_FS_INSERT-CLIENT, LS_BUT021_FS_INSERT-PARTNER, LS_BUT021_ FS_INSERT-ADDRNUMBER , LS_BUT021_FS_INSERT-VALID_FROM , LS_BUT021_FS_INSERT-VALI D_TO, LS_BUT021_FS_INSERT-ADR_KIND. ENDLOOP. IF TEST_RUN EQ SPACE . * INSERT BUT021_FS FROM TABLE LT_BUT021_FS_INSERT. LOOP AT LT_BUT021_FS_INSERT INTO LS_BUT021_FS_INSERT. ' , ' VALI

INSERT INTO BUT021_FS VALUES LS_BUT021_FS_INSERT. ENDLOOP. CALL FUNCTION 'DB_COMMIT'. WRITE : / . FORMAT COLOR = 4. WRITE : / 'Inconsistencies corrected in the Database' . ENDIF. FORM FILL_ADDRESS_RECORDS. LOOP AT LT_INCONSISTENT INTO LS_INCONSISTENT . ADDRNUMBER = 0. COMPLETE_RANGE = 0. FROM_RANGE = 0. TO_RANGE = 0. LOOP AT LT_BUT021_FS INTO LS_BUT021_FS WHERE PARTNER = LS_INCONSISTENT-PARTN ER AND ( VALID_FROM LE TODAY AND VALID_TO GE TODAY ). ADDRNUMBER = LS_BUT021_FS-ADDRNUMBER. EXIT. ENDLOOP. IF ADDRNUMBER NE 0. READ TABLE LT_BUT020 INTO LS_BUT020 WITH KEY PARTNER = LS_INCONSISTENT-PAR TNER ADDRNUMBER = ADDRNUMBER. IF ( LS_INCONSISTENT-VALID_FROM BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS_B UT020-ADDR_VALID_TO AND LS_INCONSISTENT-VALID_TO BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS_BUT 020-ADDR_VALID_TO ). PERFORM INSERT_ADDRESS_RECORDS. CONTINUE. ELSE. ADDRNUMBER = 0. ENDIF. IF ( LS_INCONSISTENT-VALID_FROM BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS_B UT020-ADDR_VALID_TO ). IF FROM_RANGE = 0. LS_INCONSISTENT-VALID_TO = LS_BUT020-ADDR_VALID_TO. PERFORM INSERT_ADDRESS_RECORDS. FROM_RANGE = 1. ADDRNUMBER = 0. ENDIF.

ENDIF. IF ( LS_INCONSISTENT-VALID_TO BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS_BUT 020-ADDR_VALID_TO ). IF TO_RANGE = 0. LS_INCONSISTENT-VALID_FROM = LS_BUT020-ADDR_VALID_FROM . PERFORM INSERT_ADDRESS_RECORDS. TO_RANGE = 1. ADDRNUMBER = 0. ENDIF. ENDIF. ENDIF. IF ADDRNUMBER EQ 0. LOOP AT LT_BUT020 INTO LS_BUT020 WHERE PARTNER = LS_INCONSISTENT-PARTNER. IF ( LS_INCONSISTENT-VALID_FROM BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS _BUT020-ADDR_VALID_TO AND LS_INCONSISTENT-VALID_TO BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS _BUT020-ADDR_VALID_TO ). ADDRNUMBER = LS_BUT020-ADDRNUMBER. IF COMPLETE_RANGE = 0. PERFORM INSERT_ADDRESS_RECORDS. COMPLETE_RANGE = 1. EXIT. ENDIF. ENDIF. IF ( LS_INCONSISTENT-VALID_FROM BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS _BUT020-ADDR_VALID_TO ). ADDRNUMBER = LS_BUT020-ADDRNUMBER. LS_INCONSISTENT-VALID_TO = LS_BUT020-ADDR_VALID_TO. IF FROM_RANGE = 0. PERFORM INSERT_ADDRESS_RECORDS. FROM_RANGE = 1. CONTINUE. ENDIF. IF ( LS_INCONSISTENT-VALID_TO BETWEEN LS_BUT020-ADDR_VALID_FROM AND LS _BUT020-ADDR_VALID_TO ). ADDRNUMBER = LS_BUT020-ADDRNUMBER. LS_INCONSISTENT-VALID_FROM = LS_BUT020-ADDR_VALID_FROM . IF TO_RANGE = 0. PERFORM INSERT_ADDRESS_RECORDS. TO_RANGE = 1. CONTINUE. ENDIF.

ENDIF. ENDIF. ENDLOOP. ENDIF. * * * IF COMPLETE_RANGE = 0 AND FROM_RANGE = 0 AND TO_RANGE = 0. PERFORM INSERT_ADDRESS_RECORDS. ENDIF. ENDLOOP. ENDFORM. "FILL_ADDRESS_RECORDS

*&---------------------------------------------------------------------* *& Form INSERT_ADDRESS_RECORDS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM INSERT_ADDRESS_RECORDS. LS_BUT021_FS_INSERT-PARTNER = LS_INCONSISTENT-PARTNER. LS_BUT021_FS_INSERT-ADDRNUMBER = ADDRNUMBER. LS_BUT021_FS_INSERT-VALID_FROM = LS_INCONSISTENT-VALID_FROM. LS_BUT021_FS_INSERT-VALID_TO = LS_INCONSISTENT-VALID_TO. LS_BUT021_FS_INSERT-ADR_KIND = 'XXDEFAULT'. LS_BUT021_FS_INSERT-CLIENT = SY-MANDT. APPEND LS_BUT021_FS_INSERT TO LT_BUT021_FS_INSERT. ENDFORM. "INSERT_ADDRESS_RECORDS

*&---------------------------------------------------------------------* *& Form FILL_BUT020_RECORDS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM FILL_BUT020_RECORDS. READ TABLE LT_BUT020 WITH KEY PARTNER = LS_PARTNER-PARTNER BINARY SEARCH. LOOP AT LT_BUT020 INTO LS_BUT020 WHERE PARTNER = LS_PARTNER-PARTNER. APPEND LS_BUT020 TO LT_WORK_TABLE. ENDLOOP. SORT LT_WORK_TABLE BY ADDR_VALID_FROM ASCENDING. READ TABLE LT_WORK_TABLE INTO LS_WORK_TABLE. CONVERT TIME STAMP LS_WORK_TABLE-ADDR_VALID_FROM TIME ZONE TZ INTO DATE MIN_DA TE. SORT LT_WORK_TABLE BY ADDR_VALID_TO DESCENDING. READ TABLE LT_WORK_TABLE INTO LS_WORK_TABLE. CONVERT TIME STAMP LS_WORK_TABLE-ADDR_VALID_TO TIME ZONE TZ INTO DATE MAX_DATE .

SORT LT_WORK_TABLE BY ADDR_VALID_FROM ASCENDING. ENDFORM. "FILL_BUT020_RECORDS

*&---------------------------------------------------------------------* *& Form FILL_BUT021_FS_RECORDS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM FILL_BUT021_FS_RECORDS. READ TABLE LT_BUT021_FS WITH KEY PARTNER = LS_PARTNER-PARTNER BINARY SEARCH. LOOP AT LT_BUT021_FS INTO LS_BUT021_FS WHERE PARTNER = LS_PARTNER-PARTNER. APPEND LS_BUT021_FS TO LT_WORK_TABLE1. ENDLOOP. SORT LT_WORK_TABLE1 BY VALID_FROM ASCENDING. READ TABLE LT_WORK_TABLE1 INTO LS_WORK_TABLE1. CONVERT TIME STAMP LS_WORK_TABLE1-VALID_FROM TIME ZONE TZ INTO DATE MIN_DATE. SORT LT_WORK_TABLE1 BY VALID_TO DESCENDING. READ TABLE LT_WORK_TABLE1 INTO LS_WORK_TABLE1. CONVERT TIME STAMP LS_WORK_TABLE1-VALID_TO TIME ZONE TZ INTO DATE MAX_DATE. SORT LT_WORK_TABLE1 BY VALID_FROM ASCENDING. ENDFORM. "FILL_BUT021_FS_RECORDS

*&---------------------------------------------------------------------* *& Form FIX_BUT020_ENTRIES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM FIX_BUT020_ENTRIES. DESCRIBE TABLE LT_WORK_TABLE LINES COUNT. IF COUNT = 1. CONVERT DATE MIN_DATE TIME '000000' INTO TIME STAMP LS_FINAL-ADDR_VALID_FROM TIME ZONE TZ . CONVERT DATE MAX_DATE TIME '235959' INTO TIME STAMP LS_FINAL-ADDR_VALID_TO TIME ZONE TZ . LS_FINAL-PARTNER = LS_PARTNER-PARTNER . APPEND LS_FINAL TO LT_FINAL. ELSE. SORT LT_WORK_TABLE BY ADDR_VALID_FROM ASCENDING. DO . READ TABLE LT_WORK_TABLE WITH KEY FLAG = SPACE INTO LS_WORK_TABLE. IF SY-SUBRC NE 0. EXIT.

ENDIF. CONVERT TIME STAMP LS_WORK_TABLE-ADDR_VALID_FROM TIME ZONE TZ INTO DATE FR OM_DATE. CONVERT TIME STAMP LS_WORK_TABLE-ADDR_VALID_TO TIME ZONE TZ INTO DATE TO_D ATE. * LOOP AT LT_WORK_TABLE INTO LS_WORK_TABLE WHERE FLAG NE 'X' . WHERE ADDR_VALID_FROM GE LS_WORK_TABLE-ADDR_VALID_FROM .

CONVERT TIME STAMP LS_WORK_TABLE-ADDR_VALID_FROM TIME ZONE TZ INTO DATE FIRST_DATE. CONVERT TIME STAMP LS_WORK_TABLE-ADDR_VALID_TO TIME ZONE TZ INTO DATE LA ST_DATE. IF FIRST_DATE = FROM_DATE AND LAST_DATE = TO_DATE. LS_WORK_TABLE-FLAG = 'X'. MODIFY LT_WORK_TABLE INDEX SY-TABIX FROM LS_WORK_TABLE TRANSPORTING FL AG. CONTINUE. ENDIF. TEMP_FIRST_DATE = FIRST_DATE - 1. TEMP_LAST_DATE = LAST_DATE + 1. TEMP_FROM_DATE = FROM_DATE - 1. TEMP_TO_DATE = TO_DATE + 1. IF ( TEMP_FROM_DATE BETWEEN FIRST_DATE AND LAST_DATE ) OR ( TEMP_TO_DA TE BETWEEN FIRST_DATE AND LAST_DATE ) OR ( TEMP_FIRST_DATE BETWEEN FROM_DATE AND TO_DATE ) OR ( TEMP_LAST_D ATE BETWEEN FROM_DATE AND TO_DATE ) . IF FROM_DATE GT FIRST_DATE. FROM_DATE = FIRST_DATE. ENDIF. IF TO_DATE LT LAST_DATE. TO_DATE = LAST_DATE. ENDIF. LS_WORK_TABLE-FLAG = 'X'. MODIFY LT_WORK_TABLE INDEX SY-TABIX FROM LS_WORK_TABLE TRANSPORTING FL AG. ENDIF. ENDLOOP. PERFORM BUILD_BUT020_RECORD. ENDDO. ENDIF. ENDFORM. "FIX_BUT020_ENTRIES

*&---------------------------------------------------------------------* *& Form BUILD_BUT020_RECORD *&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* FORM BUILD_BUT020_RECORD. IF ( FROM_DATE NE SPACE OR FROM_DATE NE 0 ) AND ( TO_DATE NE SPACE OR TO_DATE NE 0 ) . CONVERT DATE FROM_DATE TIME '000000' INTO TIME STAMP LS_FINAL-ADDR_VALID_FROM TIME ZONE TZ . CONVERT DATE TO_DATE TIME '235959' INTO TIME STAMP LS_FINAL-ADDR_VALID_TO TIM E ZONE TZ . LS_FINAL-PARTNER = LS_PARTNER-PARTNER . APPEND LS_FINAL TO LT_FINAL. ENDIF. ENDFORM. "BUILD_BUT020_RECORD

*&---------------------------------------------------------------------* *& Form CHECK_INCONSISTENCIES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM CHECK_INCONSISTENCIES. COUNT = 0. PERFORM REFRESH_VARIABLES. LOOP AT LT_FINAL INTO LS_FINAL WHERE PARTNER = LS_PARTNER-PARTNER. CONVERT TIME STAMP LS_FINAL-ADDR_VALID_FROM TIME ZONE TZ INTO DATE FROM_DATE . CONVERT TIME STAMP LS_FINAL-ADDR_VALID_TO TIME ZONE TZ INTO DATE TO_DATE. PERFORM GET_NUMBER_OF_RECORDS. IF COUNT = 0. START_DATE = FROM_DATE. END_DATE = TO_DATE. PERFORM BUILD_INCONSISTENT_RECORD. PERFORM REFRESH_VARIABLES. CONTINUE. ELSE. COUNTER = 0. LOOP AT LT_FINAL1 INTO LS_FINAL1 WHERE PARTNER = LS_PARTNER-PARTNER AND ( VALID_FROM BETWEEN LS_FINAL-ADDR_VALID_FROM AND LS_FINAL-ADDR_VALID_TO ) AND ( VALID_TO BETWEEN LS_FINAL-ADDR_VALID_FROM AND LS_FINAL-ADDR_VALID_TO ). COUNTER = COUNTER + 1. CONVERT TIME STAMP LS_FINAL1-VALID_FROM TIME ZONE TZ INTO DATE FIRST_DAT E. CONVERT TIME STAMP LS_FINAL1-VALID_TO TIME ZONE TZ INTO DATE LAST_DATE.

IF COUNT = 1. IF FROM_DATE LT FIRST_DATE. START_DATE = FROM_DATE. END_DATE = FIRST_DATE - 1. PERFORM BUILD_INCONSISTENT_RECORD. ENDIF. IF TO_DATE GT LAST_DATE. START_DATE = LAST_DATE + 1 . END_DATE = TO_DATE. PERFORM BUILD_INCONSISTENT_RECORD. ENDIF. CONTINUE . ENDIF. IF COUNTER = 1. IF FROM_DATE LT FIRST_DATE. START_DATE = FROM_DATE. END_DATE = FIRST_DATE - 1. PERFORM BUILD_INCONSISTENT_RECORD. START_DATE = LAST_DATE + 1. ENDIF. IF FROM_DATE EQ FIRST_DATE. START_DATE = LAST_DATE + 1. ENDIF. CONTINUE. ENDIF. END_DATE = FIRST_DATE - 1. PERFORM BUILD_INCONSISTENT_RECORD. START_DATE = LAST_DATE + 1. IF COUNTER = COUNT . IF TO_DATE GT LAST_DATE. PERFORM BUILD_INCONSISTENT_RECORD. ENDIF. ENDIF. ENDLOOP. ENDIF. ENDLOOP. ENDFORM. "CHECK_INCONSISTENCIES

*&---------------------------------------------------------------------* *& Form GET_NUMBER_OF_RECORDS *&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* FORM GET_NUMBER_OF_RECORDS. COUNT = 0. LOOP AT LT_FINAL1 INTO LS_NUMBER_OF_RECORDS WHERE PARTNER = LS_PARTNER-PARTNER AND ( VALID_FROM BETWEEN LS_FINAL-ADDR_VALID_FROM AND LS_FINAL-ADDR_VALID_TO ) AND ( VALID_TO BETWEEN LS_FINAL-ADDR_VALID_FROM AND LS_FINAL-ADDR_VALID_TO ). APPEND LS_NUMBER_OF_RECORDS TO LT_NUMBER_OF_RECORDS. ENDLOOP. DESCRIBE TABLE LT_NUMBER_OF_RECORDS LINES COUNT. REFRESH LT_NUMBER_OF_RECORDS. ENDFORM. "GET_NUMBER_OF_RECORDS

*&---------------------------------------------------------------------* *& Form BUILD_BUT021_FS_RECORD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM BUILD_BUT021_FS_RECORD. IF ( FROM_DATE NE SPACE OR FROM_DATE NE 0 ) AND ( TO_DATE NE SPACE AND TO_DATE NE 0 ). CONVERT DATE FROM_DATE TIME '000000' INTO TIME STAMP LS_FINAL1-VALID_FROM TIME ZONE TZ . CONVERT DATE TO_DATE TIME '235959' INTO TIME STAMP LS_FINAL1-VALID_TO TIME ZO NE TZ . LS_FINAL1-PARTNER = LS_PARTNER-PARTNER . APPEND LS_FINAL1 TO LT_FINAL1. ENDIF. ENDFORM. "BUILD_BUT021_FS_RECORD

*&---------------------------------------------------------------------* *& Form BUILD_INCONSISTENT_RECORD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM BUILD_INCONSISTENT_RECORD. IF ( START_DATE NE SPACE OR START_DATE NE 0 ) AND ( END_DATE NE SPACE AND END_ DATE NE 0 ). CONVERT DATE START_DATE TIME '000000' INTO TIME STAMP LS_INCONSISTENT-VALID_FR OM TIME ZONE TZ . CONVERT DATE END_DATE TIME '235959' INTO TIME STAMP LS_INCONSISTENT-VALID_TO TIME ZONE TZ . LS_INCONSISTENT-PARTNER = LS_PARTNER-PARTNER . APPEND LS_INCONSISTENT TO LT_INCONSISTENT.

ENDIF. ENDFORM. "BUILD_INCONSISTENT_RECORD

*&---------------------------------------------------------------------* *& Form FIX_BUT021_FS_ENTRIES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM FIX_BUT021_FS_ENTRIES. DESCRIBE TABLE LT_WORK_TABLE1 LINES COUNT. IF COUNT = 1. CONVERT DATE MIN_DATE TIME '000000' INTO TIME STAMP LS_FINAL1-VALID_FROM TIM E ZONE TZ . CONVERT DATE MAX_DATE TIME '235959' INTO TIME STAMP LS_FINAL1-VALID_TO TIME ZONE TZ . LS_FINAL1-PARTNER = LS_PARTNER-PARTNER . APPEND LS_FINAL1 TO LT_FINAL1. ELSE. SORT LT_WORK_TABLE1 BY VALID_FROM ASCENDING. DO . READ TABLE LT_WORK_TABLE1 WITH KEY FLAG = SPACE INTO LS_WORK_TABLE1. IF SY-SUBRC NE 0. EXIT. ENDIF. CONVERT TIME STAMP LS_WORK_TABLE1-VALID_FROM TIME ZONE TZ INTO DATE FROM_D ATE. CONVERT TIME STAMP LS_WORK_TABLE1-VALID_TO TIME ZONE TZ INTO DATE TO_DATE. * LOOP AT LT_WORK_TABLE1 INTO LS_WORK_TABLE1 WHERE FLAG NE 'X' . WHERE ADDR_VALID_FROM GE LS_WORK_TABLE-ADDR_VALID_FROM . CONVERT TIME STAMP LS_WORK_TABLE1-VALID_FROM TIME ZONE TZ INTO DATE FIRS T_DATE. CONVERT TIME STAMP LS_WORK_TABLE1-VALID_TO TIME ZONE TZ INTO DATE LAST_D ATE. IF FIRST_DATE = FROM_DATE AND LAST_DATE = TO_DATE. LS_WORK_TABLE1-FLAG = 'X'. MODIFY LT_WORK_TABLE1 INDEX SY-TABIX FROM LS_WORK_TABLE1 TRANSPORTING FLAG. CONTINUE. ENDIF. TEMP_FIRST_DATE = FIRST_DATE - 1. TEMP_LAST_DATE = LAST_DATE + 1. TEMP_FROM_DATE = FROM_DATE - 1. TEMP_TO_DATE = TO_DATE + 1. IF ( TEMP_FROM_DATE BETWEEN FIRST_DATE AND LAST_DATE ) OR ( TEMP_TO_DA

TE BETWEEN FIRST_DATE AND LAST_DATE ) OR ( TEMP_FIRST_DATE BETWEEN FROM_DATE AND TO_DATE ) OR ( TEMP_LAST_D ATE BETWEEN FROM_DATE AND TO_DATE ) . IF FROM_DATE GT FIRST_DATE. FROM_DATE = FIRST_DATE. ENDIF. IF TO_DATE LT LAST_DATE. TO_DATE = LAST_DATE. ENDIF. LS_WORK_TABLE1-FLAG = 'X'. MODIFY LT_WORK_TABLE1 INDEX SY-TABIX FROM LS_WORK_TABLE1 TRANSPORTING FLAG. ENDIF. ENDLOOP. PERFORM BUILD_BUT021_FS_RECORD. ENDDO. ENDIF. ENDFORM. "FIX_BUT021_FS_ENTRIES

*&---------------------------------------------------------------------* *& Form REFRESH_VARIABLES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM REFRESH_VARIABLES. CLEAR CLEAR CLEAR CLEAR CLEAR CLEAR CLEAR CLEAR ENDFORM. FROM_DATE. TO_DATE. FIRST_DATE. LAST_DATE. START_DATE. END_DATE. LS_FINAL. LS_FINAL1. "REFRESH_VARIABLES

You might also like