Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ABAP CODE

Former Member
0 Likes
374

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>

1 REPLY 1
Read only

Former Member
0 Likes
296

ANy suggestions or questions.

Ster