‎2007 Sep 24 5:34 PM
Hello Friends,
I am struggling to get this developed. Please help.
I have an internal tables IT_COBRB, IT_COBRB2, IT_COSS.
I have the code for it and have appended the required data.
I have a problem with the <b>PERFORM OUTPUT_KOSTL.</b>
I have written the code for this perform statement but its wrong.
I have written comments in this perform as what I need to do.
For any questions please let me know
Ster.
*&---------------------------------------------------------------------*
*& Report ZSTER *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZSTER LINE-SIZE 400.
DATA : BEGIN OF IT_COBRB OCCURS 0,
KOSTL LIKE COBRB-KOSTL,
OBJNR LIKE COBRB-OBJNR,
REC_OBJNR1 LIKE COBRB-REC_OBJNR1,
ERSJA LIKE COBRB-ERSJA,
ERSPE LIKE COBRB-ERSPE,
LETJA LIKE COBRB-LETJA,
LETPE LIKE COBRB-LETPE,
V_OBJNR LIKE COBRB-OBJNR,
V_REC_OBJNR1 LIKE COBRB-REC_OBJNR1,
FLAG(1),
END OF IT_COBRB,
IT_COBRB2 LIKE IT_COBRB OCCURS 0 WITH HEADER LINE,
BEGIN OF IT_COSS OCCURS 0,
OBJNR LIKE COSS-OBJNR,
PAROB LIKE COSS-PAROB,
GJAHR LIKE COSS-GJAHR,
WTG001 LIKE COSS-WTG001,
WTG002 LIKE COSS-WTG002,
WTG003 LIKE COSS-WTG003,
WTG004 LIKE COSS-WTG004,
WTG005 LIKE COSS-WTG005,
WTG006 LIKE COSS-WTG006,
WTG007 LIKE COSS-WTG007,
WTG008 LIKE COSS-WTG008,
WTG009 LIKE COSS-WTG009,
WTG010 LIKE COSS-WTG010,
WTG011 LIKE COSS-WTG011,
WTG012 LIKE COSS-WTG012,
END OF IT_COSS.
DATA : BEGIN OF T_OUTPUT OCCURS 0,
KOSTL LIKE COBRB-KOSTL,
WKGOO1_2 LIKE COSS-WKG001, " 2 years before
WKGOO1_1 LIKE COSS-WKG001, " 1 year before
WKGOO1_MTH LIKE COSS-WKG001, " Current month
WKGOO1_YTD LIKE COSS-WKG001, " year till date
END OF T_OUTPUT.
DATA :
V_NO_OF_TIMES LIKE COBRB-LETPE,
V_START_MONTH TYPE I,
V_AMOUNT LIKE COSS-WKG001,
V_AMOUNT_SUM LIKE COSS-WKG001,
V_EST_AMOUNT LIKE COSS-WKG001,
V_EST_AMOUNT_TOTAL LIKE COSS-WKG001,
V_YEAR_2 LIKE COBRB-LETJA,
V_YEAR_1 LIKE COBRB-LETJA,
V_YEAR_0 LIKE COBRB-LETJA.
*Selection-Screen.
PARAMETERS : P_ERDAT LIKE SY-DATUM.
START-OF-SELECTION.
PERFORM GET_DATA.
END-OF-SELECTION.
PERFORM PROCESS_DATA.
PERFORM WRITE_OUTPUT.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_DATA .
IT_COBRB-KOSTL = '0000107202'.
IT_COBRB-OBJNR = 'PR00550175'.
IT_COBRB-REC_OBJNR1 = 'KSKOHL0000107202'.
IT_COBRB-ERSJA = '2006'.
IT_COBRB-ERSPE = '005'.
IT_COBRB-LETJA = '2006'.
IT_COBRB-LETPE = '007'.
IT_COBRB-V_OBJNR = ''.
IT_COBRB-V_REC_OBJNR1 = ''.
IT_COBRB-FLAG = ''.
APPEND IT_COBRB.
IT_COBRB2-KOSTL = '0000101446'.
IT_COBRB2-OBJNR = 'PR00585682'.
IT_COBRB2-REC_OBJNR1 = 'KSKOHL0000101446'.
IT_COBRB2-ERSJA = '2006'.
IT_COBRB2-ERSPE = '007'.
IT_COBRB2-LETJA = '2006'.
IT_COBRB2-LETPE = '007'.
IT_COBRB2-V_OBJNR = 'PR00550175'.
IT_COBRB2-V_REC_OBJNR1 = 'PR00585682'.
IT_COBRB2-FLAG = 'X'.
APPEND IT_COBRB2.
IT_COBRB2-KOSTL = '0000107202'.
IT_COBRB2-OBJNR = 'PR00585682'.
IT_COBRB2-REC_OBJNR1 = 'KSKOHL0000107202'.
IT_COBRB2-ERSJA = '2006'.
IT_COBRB2-ERSPE = '008'.
IT_COBRB2-LETJA = '2006'.
IT_COBRB2-LETPE = '011'.
IT_COBRB2-V_OBJNR = 'PR00550175'.
IT_COBRB2-V_REC_OBJNR1 = 'PR00585682'.
IT_COBRB2-FLAG = 'X'.
APPEND IT_COBRB2.
IT_COBRB2-KOSTL = '0000104555'.
IT_COBRB2-OBJNR = 'PR00274526'.
IT_COBRB2-REC_OBJNR1 = 'KSKOHL0000104555'.
IT_COBRB2-ERSJA = '2004'.
IT_COBRB2-ERSPE = '007'.
IT_COBRB2-LETJA = '2007'.
IT_COBRB2-LETPE = '009'.
IT_COBRB2-V_OBJNR = 'PR00550175'.
IT_COBRB2-V_REC_OBJNR1 = 'PR00585682'.
IT_COBRB2-FLAG = 'X'.
APPEND IT_COBRB2.
IT_COSS-OBJNR = 'PR00550175'.
IT_COSS-PAROB = 'KSKOHL0000107202'.
IT_COSS-GJAHR = '2006'.
IT_COSS-WTG001 = ''.
IT_COSS-WTG002 = ''.
IT_COSS-WTG003 = ''.
IT_COSS-WTG004 = ''.
IT_COSS-WTG005 = '15.00'.
IT_COSS-WTG006 = '20.00'.
IT_COSS-WTG007 = '25.00'.
IT_COSS-WTG008 = ''.
IT_COSS-WTG009 = ''.
IT_COSS-WTG010 = ''.
IT_COSS-WTG011 = ''.
IT_COSS-WTG012 = ''.
APPEND IT_COSS.
IT_COSS-OBJNR = 'PR00550175'.
IT_COSS-PAROB = 'KSKOHL0000107202'.
IT_COSS-GJAHR = '2006'.
IT_COSS-WTG001 = ''.
IT_COSS-WTG002 = ''.
IT_COSS-WTG003 = ''.
IT_COSS-WTG004 = ''.
IT_COSS-WTG005 = ''.
IT_COSS-WTG006 = '21.00'.
IT_COSS-WTG007 = '22.00'.
IT_COSS-WTG008 = '23.00'.
IT_COSS-WTG009 = ''.
IT_COSS-WTG010 = ''.
IT_COSS-WTG011 = '25.00'.
IT_COSS-WTG012 = ''.
APPEND IT_COSS.
IT_COSS-OBJNR = 'PR00550175'.
IT_COSS-PAROB = 'PR00585682'.
IT_COSS-GJAHR = '2004'.
IT_COSS-WTG001 = ''.
IT_COSS-WTG002 = ''.
IT_COSS-WTG003 = ''.
IT_COSS-WTG004 = ''.
IT_COSS-WTG005 = ''.
IT_COSS-WTG006 = ''.
IT_COSS-WTG007 = ''.
IT_COSS-WTG008 = ''.
IT_COSS-WTG009 = '17.00'.
IT_COSS-WTG010 = ''.
IT_COSS-WTG011 = ''.
IT_COSS-WTG012 = ''.
APPEND IT_COSS.
IT_COSS-OBJNR = 'PR00550175'.
IT_COSS-PAROB = 'PR00585682'.
IT_COSS-GJAHR = '2006'.
IT_COSS-WTG001 = ''.
IT_COSS-WTG002 = ''.
IT_COSS-WTG003 = ''.
IT_COSS-WTG004 = ''.
IT_COSS-WTG005 = ''.
IT_COSS-WTG006 = ''.
IT_COSS-WTG007 = ''.
IT_COSS-WTG008 = '11.00'.
IT_COSS-WTG009 = '12.00'.
IT_COSS-WTG010 = '13.00'.
IT_COSS-WTG011 = '14.00'.
IT_COSS-WTG012 = '19.00'.
APPEND IT_COSS.
IT_COSS-OBJNR = 'PR00550175'.
IT_COSS-PAROB = 'PR00585682'.
IT_COSS-GJAHR = '2006'.
IT_COSS-WTG001 = ''.
IT_COSS-WTG002 = ''.
IT_COSS-WTG003 = ''.
IT_COSS-WTG004 = ''.
IT_COSS-WTG005 = ''.
IT_COSS-WTG006 = ''.
IT_COSS-WTG007 = ''.
IT_COSS-WTG008 = ''.
IT_COSS-WTG009 = ''.
IT_COSS-WTG010 = ''.
IT_COSS-WTG011 = ''.
IT_COSS-WTG012 = '18.00'.
APPEND IT_COSS.
IT_COSS-OBJNR = 'PR00550175'.
IT_COSS-PAROB = 'PR00585682'.
IT_COSS-GJAHR = '2007'.
IT_COSS-WTG001 = ''.
IT_COSS-WTG002 = ''.
IT_COSS-WTG003 = ''.
IT_COSS-WTG004 = ''.
IT_COSS-WTG005 = ''.
IT_COSS-WTG006 = ''.
IT_COSS-WTG007 = ''.
IT_COSS-WTG008 = ''.
IT_COSS-WTG009 = '17.00'.
IT_COSS-WTG010 = ''.
IT_COSS-WTG011 = ''.
IT_COSS-WTG012 = ''.
APPEND IT_COSS.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
LOOP AT IT_COBRB.
LOOP AT IT_COSS WHERE OBJNR = IT_COBRB-OBJNR
AND ( GJAHR GE IT_COBRB-ERSJA
AND GJAHR LE IT_COBRB-LETJA )
AND PAROB = IT_COBRB-REC_OBJNR1.
PERFORM OUTPUT_KOSTL.
* This is the part I am confused about.
* I HAVE TO SHOW THE OUTPUT BASED ON COST CENTER(COBRB-KOSTL)
* WHEN I GET THE RECORD FROM IT_COSS IT HAS TO SUM UP
* ALL THE VALUES THAT FALL IN BETWEEN.
* ERSJA, ERSPE; LETJA, LETPE of IT_COBRB. This four fields represent
* THE START DATE AND THE END DATE IN TERMS OF MONTHS AND YEAR.
* THE BELOW FIELDS IN COSS REPRESENT THE MONTHS.
* WTG001,WTG002,WTG003,WTG004,WTG005,WTG006,
* WTG007,WTG008,WTG009,WTG010,WTG011,WTG012
* IT NEEDS TO ADD ALL THE MONTHS WHICH FALL IN
* THE PERIOD SPECIFIED ABOVE.
*I have a date field in the selection screen.
*FO example I have 10/31/2007 in my selection screen
*The output should show
*KOSTL - cost for 2005 - 2006 - Octoberr 2007 - upto october 2007
ENDLOOP.
ENDLOOP.
LOOP AT IT_COBRB2.
LOOP AT IT_COSS WHERE OBJNR = IT_COBRB2-V_OBJNR
AND ( GJAHR GE IT_COBRB2-ERSJA
AND GJAHR LE IT_COBRB2-LETJA )
AND PAROB = IT_COBRB2-V_REC_OBJNR1.
PERFORM OUTPUT_KOSTL.
* This is the part I am confused about.
ENDLOOP.
ENDLOOP.
ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form OUTPUT_KOSTL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OUTPUT_KOSTL .
IF IT_COSS-GJAHR = P_ERDAT+0(4).
IF IT_COBRB-LETPE LT P_ERDAT+4(2).
V_NO_OF_TIMES = ( IT_COBRB-LETPE - IT_COBRB-ERSPE ) + 1.
ELSE.
V_NO_OF_TIMES = ( P_ERDAT+4(2) - IT_COBRB-ERSPE ) + 1.
ENDIF.
V_START_MONTH = IT_COBRB-ERSPE.
ELSEIF IT_COSS-GJAHR = IT_COBRB-ERSJA
AND IT_COSS-GJAHR = IT_COBRB-LETJA.
V_NO_OF_TIMES = ( IT_COBRB-LETPE - IT_COBRB-ERSPE ) + 1.
V_START_MONTH = IT_COBRB-ERSPE.
ELSEIF IT_COSS-GJAHR GT IT_COBRB-ERSJA
AND IT_COSS-GJAHR LT IT_COBRB-LETJA.
V_NO_OF_TIMES = '12'.
V_START_MONTH = '1'.
ELSEIF IT_COSS-GJAHR = IT_COBRB-ERSJA
AND IT_COSS-GJAHR LT IT_COBRB-LETJA.
V_NO_OF_TIMES = ( '12' - IT_COBRB-ERSPE ) + 1.
V_START_MONTH = IT_COBRB-ERSPE.
ELSEIF IT_COSS-GJAHR = IT_COBRB-LETJA
AND IT_COSS-GJAHR GT IT_COBRB-ERSJA.
V_NO_OF_TIMES = IT_COBRB-LETPE.
V_START_MONTH = '1'.
ENDIF.
IF V_NO_OF_TIMES LE '0'.
V_NO_OF_TIMES = '0'.
ENDIF.
DO V_NO_OF_TIMES TIMES.
CASE V_START_MONTH.
WHEN 1.
V_AMOUNT = IT_COSS-WTG001.
WHEN 2.
V_AMOUNT = IT_COSS-WTG002.
WHEN 3.
V_AMOUNT = IT_COSS-WTG003.
WHEN 4.
V_AMOUNT = IT_COSS-WTG004.
WHEN 5.
V_AMOUNT = IT_COSS-WTG005.
WHEN 6.
V_AMOUNT = IT_COSS-WTG006.
WHEN 7.
V_AMOUNT = IT_COSS-WTG007.
WHEN 8.
V_AMOUNT = IT_COSS-WTG008.
WHEN 9.
V_AMOUNT = IT_COSS-WTG009.
WHEN 10.
V_AMOUNT = IT_COSS-WTG010.
WHEN 11.
V_AMOUNT = IT_COSS-WTG011.
WHEN 12.
V_AMOUNT = IT_COSS-WTG012.
ENDCASE.
V_AMOUNT_SUM = V_AMOUNT_SUM + V_AMOUNT.
V_START_MONTH = V_START_MONTH + 1.
ENDDO.
IF IT_COSS-GJAHR = V_YEAR_2.
T_OUTPUT-WKGOO1_2 = V_AMOUNT_SUM + T_OUTPUT-WKGOO1_2.
ELSEIF IT_COSS-GJAHR = V_YEAR_1.
T_OUTPUT-WKGOO1_1 = V_AMOUNT_SUM + T_OUTPUT-WKGOO1_1.
ELSEIF IT_COSS-GJAHR = V_YEAR_0.
T_OUTPUT-WKGOO1_YTD = V_AMOUNT_SUM + T_OUTPUT-WKGOO1_YTD.
IF IT_COSS-GJAHR = P_ERDAT+0(4)
AND IT_COBRB-LETPE GE P_ERDAT+4(2).
T_OUTPUT-WKGOO1_MTH = V_AMOUNT + T_OUTPUT-WKGOO1_MTH.
ENDIF.
ENDIF.
CLEAR : V_AMOUNT_SUM, V_AMOUNT, V_START_MONTH.
ENDFORM. " OUTPUT_KOSTL
*&---------------------------------------------------------------------*
*& Form WRITE_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM WRITE_OUTPUT .
ENDFORM. " WRITE_OUTPUT<b></b><i></i>
‎2007 Sep 24 5:59 PM