21.7.11

SAP Note 26779 - Costs reports PS Info. Syst.: no data selection

Symptom:

When you call up PS Information System costs reports, message OK792 is issued. Data is then not selected.

Cause and prerequisites

The version key range of the LDB PSJ requires special processing for costs reports. It is incorrectly preassigned in case only original data should be read.

Solution
Please change program DBPSJSOS in FORM routine CHECK_INPUT as follows.
Old coding:
cn_stufe-high = 99.
cn_aktdt = con_no.
if cn_vsnmr[] is initial.
cn_vsnmr-sign = con_incl.
cn_vsnmr-option = con_equal.
cn_vsnmr-low = space.
append cn_vsnmr.
endif.
endif.
if lines is initial and

New coding:
cn_stufe-high = 99.
if cn_vsnmr-low is initial.
refresh cn_vsnmr.
cn_aktdt = con_yes.
else.
cn_aktdt = con_no.
endif.
endif.
if lines is initial and
Please replace FORM routine CHECK_VSNMR by the following program code in DBPSJSOS:
form check_vsnmr.
data: loc_tfill like sy-tfill.
* IntTabs
data: itab_ap_ord_pre like ap_ord_pre occurs 0 with header line.
* SelektionsTabs fuer ' .. All Entries '
data: begin of sel_tab occurs 0,
vsnmr like vskopf-vsnmr,
end of sel_tab.
data: begin of itab_vs_erdat occurs 0,
vsnmr like vskopf-vsnmr,
vserdat like vskopf-vserdat,
end of itab_vs_erdat.

perform import_from_memory using 'VERSION' con_mem_id_key_blank.
read table versionen with key vsnmr = space.
if not sy-subrc is initial and cn_aktdt = con_yes.
describe table versionen lines loc_tfill.
versionen-vsnmr = space.
versionen-version = loc_tfill.
append versionen.
endif.
if not cn_vsnmr[] is initial.
loop at cn_vsnmr.
sel_tab-vsnmr = cn_vsnmr-low.
append sel_tab.
endloop.
select vsnmr vserdat from vskopf
into table itab_vs_erdat
for all entries in sel_tab
where vsnmr = sel_tab-vsnmr
and vszhl = '00000001'.
loop at cn_vsnmr.
read table itab_vs_erdat with key vsnmr = cn_vsnmr-low.
if not sy-subrc is initial.
message i792(cn) with cn_vsnmr-low.
stop.
endif.
endloop.

* zuerst neueste Version selektieren
sort itab_vs_erdat by vserdat descending.

describe table versionen lines loc_tfill.
loop at itab_vs_erdat where vsnmr in cn_vsnmr.
read table versionen with key vsnmr = itab_vs_erdat-vsnmr.
if not sy-subrc is initial.
versionen-vsnmr = itab_vs_erdat-vsnmr.
versionen-version = loc_tfill.
add 1 to loc_tfill.
append versionen.
endif.
endloop.
endif.
perform export_to_memory using 'VERSION' con_mem_id_key_blank.
perform export_to_memory using 'VSKOPF' con_mem_id_key_blank.

endform.
Please change the selected places in the program code of include DBPSJGET
as of: *...die Objektnummer über die Projektdefinition holen
IF NOT CN_PROJN[] IS INITIAL.
SELECT OBJNR FROM VSPROJ_CN INTO TABLE OBJNR_TAB
WHERE VSNMR = CN_VSNMR-LOW
AND PSPID IN CN_PROJN.
* if objnr_tab[] is initial. " DELETE
* select objnr from proj into table objnr_tab " DELETE
* where pspid in cn_projn. " DELETE
* endif. " DELETE
ENDIF.

IF NOT OBJNR_TAB[] IS INITIAL.
SELECT * FROM VSSTEU INTO TABLE VSSTEU_TAB
FOR ALL ENTRIES IN OBJNR_TAB
WHERE VSNMR = CN_VSNMR-LOW
AND OBJNR EQ OBJNR_TAB-OBJNR.
ELSE.
SELECT OBJNR FROM PROJ INTO TABLE OBJNR_TAB " MODIFY
WHERE PSPID IN CN_PROJN. " MODIFY
IF NOT OBJNR_TAB[] IS INITIAL. " INSERT
SELECT OBJNR FROM VSSTEU INTO TABLE OBJNR_TAB " INSERT
WHERE VSNMR = CN_VSNMR-LOW. " INSERT
ENDIF. " INSERT
ENDIF.
*...Versionsnummer überprüfen, ob vorhanden.

IF OBJNR_TAB[] IS INITIAL. " MODIFY
MESSAGE I792(CN) WITH CN_VSNMR-LOW.
.....

*
*...wurde die Version aktionsgesteuert erstellt, muß keine
* Version der Projektdefinition vorhanden sein
* *
*...sollte die ITAB_PROJ initial sein, muß in der Steuertabelle
* nach PSP-Elementen gesucht werden
IF ITAB_PROJ[] IS INITIAL AND CN_PSPNR IS INITIAL.
SELECT * FROM VSKOPF INTO TABLE VSKOPF_TAB " INSERT
WHERE VSNMR IN CN_VSNMR. " INSERT
SELECT * FROM VSSTEU INTO TABLE VSSTEU_TAB
FOR ALL ENTRIES IN VSKOPF_TAB
WHERE VSNMR EQ VSKOPF_TAB-VSNMR.

SORT VSSTEU_TAB BY OBJNR.
LOOP AT VSSTEU_TAB.
*...Range-Tabelle für PSP-Elemente füllen
IF VSSTEU_TAB-OBJNR(2) EQ 'PR'.
*...aus Objektnummer PSP-Element bestimmen
MOVE VSSTEU_TAB-OBJNR+2 TO PSPNR_TMP.
*...den ersten Eintrag in 'LOW' und 'HIGH' ablegen
IF CN_PSPNR-LOW IS INITIAL. " MODIFY
WRITE PSPNR_TMP TO CN_PSPNR-LOW.


FORM SELECT_AUKOD_FOR_CN_VBELN.
CASE SELECTION_MODE.
WHEN CON_ACT_DATA.
SELECT * FROM M_AUKOD INTO TABLE ITAB_AUKOD
WHERE KDAUF IN CN_VBELN ORDER BY AUFNR.
WHEN CON_VER_DATA.
*...bei Versionen wird über die Originaltabelle gelesen (anstatt MCode)
SELECT * FROM VSAFPO_CN INTO TABLE VSAFPO_TAB
WHERE VSNMR = CN_VSNMR-LOW " MODIFY
AND KDAUF IN CN_VBELN ORDER BY AUFNR. " MODIFY

FORM SELECT_PRPOC_FOR_PSP_RNG.
CASE SELECTION_MODE.
WHEN CON_ACT_DATA.
SELECT * FROM M_PRPOC INTO TABLE ITAB_PRPOC
FOR ALL ENTRIES IN PSP_RNG
WHERE PROJN = PSP_RNG-LOW.
WHEN CON_VER_DATA.
SELECT * FROM VSAFPO_CN INTO TABLE VSAFPO_TAB
FOR ALL ENTRIES IN PSP_RNG
WHERE VSNMR = CN_VSNMR-LOW " MODIFY
AND PROJN = PSP_RNG-LOW. " MODIFY

FORM SELECT_AFVCP_FOR_PSP_RNG.
CASE SELECTION_MODE.
WHEN CON_ACT_DATA.
SELECT * FROM AFVCP INTO TABLE ITAB_AFVCP
FOR ALL ENTRIES IN PSP_RNG
WHERE PROJN = PSP_RNG-LOW.
WHEN CON_VER_DATA.
SELECT * FROM VSAFVC_CN INTO TABLE VSAFVC_TAB
FOR ALL ENTRIES IN PSP_RNG
WHERE VSNMR = CN_VSNMR-LOW " MODIFY
AND PROJN = PSP_RNG-LOW. " MODIFY

FORM GENERATE_SELECT_FOR_PRPS.
CLEAR GEN_SEL_WHERE. " INSERT
IF NOT LINES-PROJ IS INITIAL.
* Definitionen als Selektionskriterium eingegeben.
IF NOT ITAB_PROJ[] IS INITIAL.
APPEND ' FOR ALL ENTRIES IN GEN_PROJ' TO GEN_SELECT.
APPEND ' WHERE PSPHI = GEN_PROJ-PSPNR' TO GEN_SELECT.
IF SELECTION_MODE = CON_VER_DATA.
APPEND ' AND VSNMR = GEN_VSNMR' TO GEN_SELECT.
ENDIF.
GEN_SEL_WHERE = CON_OK.
ENDIF.
ENDIF. " INSERT
IF SELECTION_MODE = CON_VER_DATA AND GEN_SEL_WHERE IS INITIAL." INSERT
APPEND ' WHERE VSNMR = GEN_VSNMR' TO GEN_SELECT. " INSERT
GEN_SEL_WHERE = CON_OK.

Additional key words

Logical database PSJ, commercial analysis

No comments:

Post a Comment