When displaying or maintaining customer hierarchy data, a time-out error occurs at the start of the transaction if too many records are stored in the hierarchy.
Cause and prerequisitesThe entire table is read at the start of the transaction as a check.
SolutionThe problem can be solved as of Release 2.2F (correction P22K007808) by creating additional selection parameters and as of Release 2.2G/3.0B with further tuning measures.
The tuning measures only apply to the following items 2.2 and 2.3 (form READ_KNVH_LINKS and form READ_KNVH_START).
For Releases 2.2F and 3.0A, only items 2.2 and 2.3 are relevant, i.e. you must change the coding in both routines. For these releases, you must also change module D0002_CHECK (see item 3) which is relevant for Release 3.0 as well.
The same applies if you have already installed the original note in Releases < 2.2F.
Carry out the following steps (if they are not already present in your release).
1. SE38 / Report RVKNVH00 / Change text elements / process selection texts / create the following new parameters:
KUNNRX / Debitoren
VKORGX / Verkaufsorganisationen
VTWEGX / Vertriebswege
SPARTX / Sparten (Do not delete German text. DMK)
KUNNRX / Customers
VKORGX / Sales organizations
VTWEGX / Distribution channels
SPARTX / Divisions
If you require the selection text in a foreign language, you must first
maintain the original German text using SE38. With Transaction SE63,
you can then translate the text into the required language.
2. SE38 / RVKNVH00 / Source text in order to expand the following rou-
tines:
2.1: Form NODE_NEW_CHECK
2.2: Form READ_KNVH_LINKS
2.3: Form READ_KNVH_START
These routines can be placed at the end of the report and must appear
as follows:
2.1. NODE_NEW_CHECK:
FORM NODE_NEW_CHECK USING S_KUNNR S_VKORG S_VTWEG S_SPART.
CHECK NOT S_KUNNR IS INITIAL.
SUBRC = 4.
SELECT * FROM KNVH INTO KNVH WHERE HITYP = SAVE_HITYP
AND KUNNR = S_KUNNR
AND VKORG = S_VKORG
AND VTWEG = S_VTWEG
AND SPART = S_SPART.
CHECK KNVH-DATBI IS INITIAL
OR KNVH-DATBI GE SAVE_DATUM
OR KNVH-DATBI GE SY-DATUM.
CLEAR SUBRC.
EXIT.
ENDSELECT.
IF SUBRC IS INITIAL.
LOOP AT YKNVH WHERE KUNNR = KNVH-KUNNR
AND VKORG = KNVH-VKORG
AND VTWEG = KNVH-VTWEG
AND SPART = KNVH-SPART
AND DATAB = KNVH-DATAB.
EXIT.
ENDLOOP.
IF SY-SUBRC IS INITIAL.
EXIT.
ELSE.
MESSAGE E092 WITH S_KUNNR S_VKORG S_VTWEG S_SPART.
ENDIF.
ELSE.
SELECT * FROM KNVH WHERE HITYP = SAVE_HITYP
AND HKUNNR = S_KUNNR
AND HVKORG = S_VKORG
AND HVTWEG = S_VTWEG
AND HSPART = S_SPART.
CHECK KNVH-DATBI IS INITIAL
OR KNVH-DATBI GE SAVE_DATUM
OR KNVH-DATBI GE SY-DATUM.
CLEAR SUBRC.
EXIT.
ENDSELECT.
CHECK SUBRC IS INITIAL.
LOOP AT YKNVH WHERE KUNNR = KNVH-KUNNR
AND VKORG = KNVH-VKORG
AND VTWEG = KNVH-VTWEG
AND SPART = KNVH-SPART
AND DATAB = KNVH-DATAB.
EXIT.
ENDLOOP.
IF SY-SUBRC IS INITIAL.
EXIT.
ELSE.
MESSAGE E092 WITH S_KUNNR S_VKORG S_VTWEG S_SPART.
ENDIF.
ENDIF.
ENDFORM.
2.2: READ_KNVH_LINKS:
FORM READ_KNVH_LINKS USING S_KUNNR S_VKORG S_VTWEG S_SPART.
CHECK NOT S_KUNNR IS INITIAL.
IF XKNVV-BOKRE IS INITIAL.
SELECT * FROM KNVH INTO KNVH WHERE HITYP = SAVE_HITYP
AND KUNNR = S_KUNNR
AND VKORG = S_VKORG
AND VTWEG = S_VTWEG
AND SPART = S_SPART
AND ( NOT KUNNR IN KUNNRX
OR NOT VKORG IN VKORGX
OR NOT VTWEG IN VTWEGX
OR NOT SPART IN SPARTX )
AND ( NOT HKUNNR IN KUNNRX
OR HKUNNR = *KNVH-KUNNR
OR NOT HVKORG IN VKORGX
OR NOT HVTWEG IN VTWEGX
OR NOT HSPART IN SPARTX )
AND ( DATBI GE SY-DATUM
OR DATBI GE SAVE_DATUM
OR DATBI = *KNVH-DATBI )
ORDER BY PRIMARY KEY.
LOOP AT YKNVH WHERE KUNNR = KNVH-KUNNR
AND VKORG = KNVH-VKORG
AND VTWEG = KNVH-VTWEG
AND SPART = KNVH-SPART
AND DATAB = KNVH-DATAB.
EXIT.
ENDLOOP.
CHECK NOT SY-SUBRC IS INITIAL.
MOVE-CORRESPONDING KNVH TO YKNVH.
MOVE-CORRESPONDING KNVH TO XKNVH.
APPEND XKNVH.
APPEND YKNVH.
ENDSELECT.
ENDIF.
IF XKNVV-PRFRE IS INITIAL.
SELECT * FROM KNVH INTO KNVH WHERE HITYP = SAVE_HITYP
AND HKUNNR = S_KUNNR
AND HVKORG = S_VKORG
AND HVTWEG = S_VTWEG
AND HSPART = S_SPART
AND ( NOT KUNNR IN KUNNRX
OR NOT VKORG IN VKORGX
OR NOT VTWEG IN VTWEGX
OR NOT SPART IN SPARTX )
AND ( NOT HKUNNR IN KUNNRX
OR NOT HVKORG IN VKORGX
OR NOT HVTWEG IN VTWEGX
OR NOT HSPART IN SPARTX )
AND ( DATBI GE SY-DATUM
OR DATBI GE SAVE_DATUM
OR DATBI = *KNVH-DATBI )
ORDER BY PRIMARY KEY.
LOOP AT YKNVH WHERE KUNNR = KNVH-KUNNR
AND VKORG = KNVH-VKORG
AND VTWEG = KNVH-VTWEG
AND SPART = KNVH-SPART
AND DATAB = KNVH-DATAB.
EXIT.
ENDLOOP.
CHECK NOT SY-SUBRC IS INITIAL.
MOVE-CORRESPONDING KNVH TO YKNVH.
MOVE-CORRESPONDING KNVH TO XKNVH.
APPEND XKNVH.
APPEND YKNVH.
ENDSELECT.
ENDIF.
ENDFORM.
2.3: READ_KNVH_START:
FORM READ_KNVH_START.
DATA: SELECTION(1) TYPE C.
READ TABLE KUNNRX INDEX 1.
IF NOT SY-SUBRC IS INITIAL.
READ TABLE VKORGX INDEX 1.
IF NOT SY-SUBRC IS INITIAL.
READ TABLE VTWEGX INDEX 1.
IF NOT SY-SUBRC IS INITIAL.
READ TABLE SPARTX INDEX 1.
ENDIF.
ENDIF.
ENDIF.
IF SY-SUBRC IS INITIAL.
SELECTION = 'X'.
ELSE.
CLEAR SELECTION.
ENDIF.
CLEAR *KNVH-DATBI.
SELECT * FROM KNVH INTO KNVH WHERE HITYP = SAVE_HITYP
AND KUNNR IN KUNNRX
AND VKORG IN VKORGX
AND VTWEG IN VTWEGX
AND SPART IN SPARTX
AND ( DATBI GE SY-DATUM
OR DATBI GE SAVE_DATUM
OR DATBI = *KNVH-DATBI )
ORDER BY PRIMARY KEY.
MOVE-CORRESPONDING KNVH TO YKNVH.
MOVE-CORRESPONDING KNVH TO XKNVH.
APPEND XKNVH.
APPEND YKNVH.
LOOP AT XKNVV WHERE KUNNR = KNVH-KUNNR
AND VKORG = KNVH-VKORG
AND VTWEG = KNVH-VTWEG
AND SPART = KNVH-SPART.
EXIT.
ENDLOOP.
IF NOT SY-SUBRC IS INITIAL.
CLEAR XKNVV.
XKNVV-KUNNR = KNVH-KUNNR.
XKNVV-VKORG = KNVH-VKORG.
XKNVV-VTWEG = KNVH-VTWEG.
XKNVV-SPART = KNVH-SPART.
XKNVV-BOKRE = 'X'.
APPEND XKNVV.
ENDIF.
ENDSELECT.
IF SELECTION IS INITIAL.
REFRESH XKNVV.
CLEAR: XKNVV, WKNVH.
ENDIF.
CHECK NOT SELECTION IS INITIAL.
CLEAR *KNVH-KUNNR.
SELECT * FROM KNVH INTO KNVH WHERE HITYP = SAVE_HITYP
AND HKUNNR IN KUNNRX
AND NOT HKUNNR = *KNVH-KUNNR
AND HVKORG IN VKORGX
AND HVTWEG IN VTWEGX
AND HSPART IN SPARTX
AND ( NOT KUNNR IN KUNNRX
OR NOT VKORG IN VKORGX
OR NOT VTWEG IN VTWEGX
OR NOT SPART IN SPARTX )
AND ( DATBI GE SY-DATUM
OR DATBI GE SAVE_DATUM
OR DATBI = *KNVH-DATBI )
ORDER BY PRIMARY KEY.
LOOP AT YKNVH WHERE KUNNR = KNVH-KUNNR
AND VKORG = KNVH-VKORG
AND VTWEG = KNVH-VTWEG
AND SPART = KNVH-SPART
AND DATAB = KNVH-DATAB.
EXIT.
ENDLOOP.
IF NOT SY-SUBRC IS INITIAL.
MOVE-CORRESPONDING KNVH TO YKNVH.
MOVE-CORRESPONDING KNVH TO XKNVH.
APPEND XKNVH.
APPEND YKNVH.
ENDIF.
LOOP AT XKNVV WHERE KUNNR = KNVH-HKUNNR
AND VKORG = KNVH-HVKORG
AND VTWEG = KNVH-HVTWEG
AND SPART = KNVH-HSPART.
IF XKNVV-PRFRE IS INITIAL.
XKNVV-PRFRE = 'X'.
MODIFY XKNVV.
ENDIF.
EXIT.
ENDLOOP.
IF NOT SY-SUBRC IS INITIAL.
CLEAR XKNVV.
XKNVV-KUNNR = KNVH-HKUNNR.
XKNVV-VKORG = KNVH-HVKORG.
XKNVV-VTWEG = KNVH-HVTWEG.
XKNVV-SPART = KNVH-HSPART.
XKNVV-PRFRE = 'X'.
APPEND XKNVV.
ENDIF.
ENDSELECT.
CLEAR INDEX.
DO.
ADD 1 TO INDEX.
READ TABLE XKNVH INDEX INDEX.
IF NOT SY-SUBRC IS INITIAL.
EXIT.
ELSE.
MOVE-CORRESPONDING XKNVH TO WKNVH.
ENDIF.
LOOP AT XKNVV WHERE KUNNR = WKNVH-KUNNR
AND VKORG = WKNVH-VKORG
AND VTWEG = WKNVH-VTWEG
AND SPART = WKNVH-SPART.
TABIX = SY-TABIX.
EXIT.
ENDLOOP.
IF NOT SY-SUBRC IS INITIAL
OR XKNVV-BOKRE IS INITIAL
OR XKNVV-PRFRE IS INITIAL.
IF NOT SY-SUBRC IS INITIAL.
CLEAR XKNVV.
ENDIF.
PERFORM READ_KNVH_LINKS USING WKNVH-KUNNR WKNVH-VKORG
WKNVH-VTWEG WKNVH-SPART.
IF XKNVV IS INITIAL.
MOVE-CORRESPONDING WKNVH TO XKNVV.
XKNVV-BOKRE = 'X'.
XKNVV-PRFRE = 'X'.
APPEND XKNVV.
ELSE.
XKNVV-BOKRE = 'X'.
XKNVV-PRFRE = 'X'.
MODIFY XKNVV INDEX TABIX.
ENDIF.
ENDIF.
CHECK NOT WKNVH-HKUNNR IS INITIAL.
CLEAR TABIX.
LOOP AT XKNVV WHERE KUNNR = WKNVH-HKUNNR
AND VKORG = WKNVH-HVKORG
AND VTWEG = WKNVH-HVTWEG
AND SPART = WKNVH-HSPART.
TABIX = SY-TABIX.
EXIT.
ENDLOOP.
IF NOT SY-SUBRC IS INITIAL
OR XKNVV-BOKRE IS INITIAL
OR XKNVV-PRFRE IS INITIAL.
IF NOT SY-SUBRC IS INITIAL.
CLEAR XKNVV.
ENDIF.
PERFORM READ_KNVH_LINKS USING WKNVH-HKUNNR WKNVH-HVKORG
WKNVH-HVTWEG WKNVH-HSPART.
XKNVV-BOKRE = 'X'.
XKNVV-PRFRE = 'X'.
IF TABIX IS INITIAL.
XKNVV-KUNNR = WKNVH-HKUNNR.
XKNVV-VKORG = WKNVH-HVKORG.
XKNVV-VTWEG = WKNVH-HVTWEG.
XKNVV-SPART = WKNVH-HSPART.
APPEND XKNVV.
ELSE.
MODIFY XKNVV INDEX TABIX.
ENDIF.
ENDIF.
ENDDO.
REFRESH XKNVV.
CLEAR: XKNVV, WKNVH.
ENDFORM.
3. SE38 / RVKNVH00 / Change source text as follows:
REPORT RVKNVH00
NO STANDARD PAGE HEADING
LINE-SIZE 132
MESSAGE-ID VC.
TABLES: ...
DATA: ...
...
SELECTION-SCREEN SKIP 1.
PARAMETERS: S_HITYP LIKE THIOZ-HITYP OBLIGATORY
MEMORY ID VHT,
S_DATUM LIKE SY-DATUM OBLIGATORY
DEFAULT SY-DATUM.
>>>>>>>>>>>>> Beginning of new lines <<<<<<<<<<<<<<<<<<<<<<<<<
SELECTION-SCREEN ULINE.
SELECT-OPTIONS: KUNNRX FOR KNVH-KUNNR,
VKORGX FOR KNVH-VKORG,
VTWEGX FOR KNVH-VTWEG,
SPARTX FOR KNVH-SPART.
>>>>>>>>>>>>> End of new lines <<<<<<<<<<<<<<<<<<<<<<<<<<<
...
...
MODULE D0002_CHECK.
...
CASE SAVE_UCOMM.
WHEN 'KDET'.
...
WHEN 'KNEU'.
*------ Zuordnung prüfen ------------------------------
PERFORM ZUORD_CHECK_1.
IF NOT SUBRC IS INITIAL.
...
ELSE.
>>>>>>>>> Beginning of new lines <<<<<<<<<<<<<<<<<<<<<<<<<<<
MOVE-CORRESPONDING KNVH TO WKNVH.
PERFORM NODE_NEW_CHECK USING WKNVH-KUNNR WKNVH-VKORG
WKNVH-VTWEG WKNVH-SPART.
IF NOT WKNVH-HKUNNR IS INITIAL
AND SAVE_STUFE IS INITIAL. <-- 3.0A+B, 2.2A-F
PERFORM NODE_NEW_CHECK USING WKNVH-HKUNNR WKNVH-HVKORG
WKNVH-HVTWEG WKNVH-HSPART.
ENDIF.
MOVE-CORRESPONDING WKNVH TO KNVH.
>>>>>>>>>> End of new lines <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
...
ENDIF.
...
WHEN 'KUEB'.
*------ Zuordnung prüfen --------------------------------
PERFORM ZUORD_CHECK_1.
IF NOT SUBRC IS INITIAL.
...
ELSE.
>>>>>>>>>>> Beginning new lines <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
MOVE-CORRESPONDING KNVH TO WKNVH.
PERFORM NODE_NEW_CHECK USING WKNVH-HKUNNR WKNVH-HVKORG
WKNVH-HVTWEG WKNVH-HSPART.
MOVE-CORRESPONDING WKNVH TO KNVH.
>>>>>>>>>>> End of new lines <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
...
ENDIF.
...
WHEN 'KUNT'.
*------ Zuordnung prüfen ------------------------------
PERFORM ZUORD_CHECK_1.
IF NOT SUBRC IS INITIAL.
...
ELSE.
>>>>>>>>>>>> Beginning of new lines <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
MOVE-CORRESPONDING KNVH TO WKNVH.
PERFORM NODE_NEW_CHECK USING WKNVH-KUNNR WKNVH-VKORG
WKNVH-VTWEG WKNVH-SPART.
MOVE-CORRESPONDING WKNVH TO KNVH.
>>>>>>>>>>>> End of new lines < < <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
...
ENDIF.
ENDCASE.
ENDMODULE.
...
FORM READ_TABLES.
DATA: ...
...
*------ Abgelaufene Zuordnungen nicht anzeigen -----------------
PERFORM READ_KNVH_START. <--- new line
>>>>>>> Mark the following lines with an asterisk <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
* SELECT * FROM KNVH INTO KNVH WHERE HITYP = SAVE_HITYP.
* CHECK KNVH-DATBI IS INITIAL
* OR KNVH-DATBI GE SAVE_DATUM
* OR KNVH-DATBI GE SY-DATUM.
* MOVE-CORRESPONDING KNVH TO YKNVH.
* MOVE-CORRESPONDING KNVH TO XKNVH.
* APPEND XKNVH.
* APPEND YKNVH.
* ENDSELECT.
>>>>>>> End of asterisk marking <<<<<<<<<<<<<<<<<<<<<<<<<<<<
...
ENDFORM.
4. Create new message VC092:
SM31 / Table T100 / Message class 'VC' -> Message number 092: Create
with the following text:
'Nodes & & & & cannot to be allocated because they were not selected'
Maintain the following long text:
Diagnosis
For the node to be newly allocated, there are active allocations which
are not contained in the selection criteria and whose hierarchical
structures were therefore not read. In order to avoid
incorrect allocations, do not allocate these nodes.
Procedure
In order to be able to allocate the new node, it must be present in
the selected hierarchical structure. Therefore, select the transaction
again and expand the selection criteria to include the node in question.
No comments:
Post a Comment