Skip to Content
avatar image
Former Member

Open PO's

Hello experts!!

My report is to display all the open po's..the problem is I dont know what filter/field should I need to include. I know this may sound a bit of being functional work.she's new in her job that's why she cant handle it yet.So please experts of sap!!!help me out!! Im using table ekpo and ekpo..I need to show all the open po's.(open purchase order)

Many thanks!!

Add comment
10|10000 characters needed characters exceeded

  • Follow
  • Get RSS Feed

1 Answer

  • avatar image
    Former Member
    Oct 10, 2007 at 06:23 AM

    Hi

    OPEN PO means

    if the PO qty is 50 and the GR qty is 40 means that is Open PO in the sence whether the All qty;s which is there in PO is supplied to us by the vendor or not.

    see the sample Report

    &----


    *& Report ZMM_PO_REPORT

    &----


    REPORT ZMM_PO_REPORT message-Id yb

    NO STANDARD PAGE HEADING

    LINE-COUNT 60(1)

    LINE-SIZE 230.

    ************************************************************************

    • D A T A B A S E T A B L E S D E C L A R A T I O N

    ************************************************************************

    TABLES: lfa1, " Vendor Master

    t161, " PO Doc Types

    t024, " Purchase Groups

    ekko. " PO Header

    ************************************************************************

    • T Y P E S D E C L A R A T I O N S

    ************************************************************************

    • Purchase Orders Main Structure

    TYPES: BEGIN OF s_po,

    ebeln TYPE ebeln, " PO No.

    ebelp TYPE ebelp, " PO Item

    bstyp TYPE bstyp, " PO Category

    bukrs TYPE bukrs, " Company Code

    bsart TYPE bbsrt, " PO Type

    lifnr TYPE lifnr, " Vendor No

    ekgrp TYPE bkgrp, " Purchase Group

    waers TYPE waers, " Currency

    bedat TYPE etbdt, " PO Date

    txz01 TYPE txz01, " Material Text

    werks TYPE ewerk, " Plant

    lgort TYPE lgort_d, " Storage Location

    matkl TYPE matkl, " Material Group

    menge TYPE bamng, " PR Quantity

    meins TYPE bamei, " UOM

    bprme TYPE bbprm, " Price Unit

    netpr TYPE netpr, " Net price

    peinh TYPE peinh, " Price Unit UOM

    pstyp TYPE pstyp, " Item Category

    knttp TYPE knttp, " Account Assignment Category

    END OF s_po.

    • Purchase Orders History Structure

    TYPES: BEGIN OF s_account,

    ebeln TYPE ebeln, " PO No.

    ebelp TYPE ebelp, " PO Item

    gjahr TYPE mjahr, " Fiscal Year

    belnr TYPE mblnr, " PO Invoice No

    menge TYPE menge_d, " PR Quantity

    wrbtr TYPE wrbtr, " Price in Local Currency

    dmbtr TYPE dmbtr, " Price in Foreign Currency

    waers TYPE waers, " Currency

    shkzg TYPE shkzg, " Dr/Cr Indicator

    END OF s_account.

    • Purchase Orders History Structure(Item Sum)

    TYPES: BEGIN OF s_inv_sum,

    ebeln TYPE ebeln, " PO No.

    ebelp TYPE ebelp, " PO Item

    menge TYPE menge_d, " PR Quantity

    wrbtr TYPE wrbtr, " Price in Foreign Currency

    waers TYPE waers, " Currency

    END OF s_inv_sum.

    • Purchase Orders Main Structure

    TYPES: BEGIN OF s_rep,

    lifnr TYPE lifnr, " Vendor No

    ebeln TYPE ebeln, " PO No.

    ebelp TYPE ebelp, " PO Item

    bstyp TYPE bstyp, " PO Category

    bsart TYPE bbsrt, " PO Type

    ekgrp TYPE bkgrp, " Purchase Group

    waers TYPE waers, " Currency

    bedat TYPE etbdt, " PO Date

    txz01 TYPE txz01, " Material Text

    werks TYPE ewerk, " Plant

    lgort TYPE lgort_d, " Storage Location

    matkl TYPE matkl, " Material Group

    menge TYPE bamng, " PR Quantity

    meins TYPE bamei, " UOM

    bprme TYPE bbprm, " Price Unit

    netpr TYPE netpr, " Net price

    peinh TYPE peinh, " Price Unit UOM

    pstyp TYPE pstyp, " Item Category

    knttp TYPE knttp, " Account Assignment Category

    name1 TYPE name1, " Plant

    orewr TYPE netpr, " To be Invoiced Price

    curr TYPE waers, " Inv Doc Currency

    END OF s_rep.

    ************************************************************************

    • D A T A D E C L A R A T I O N S

    ************************************************************************

    DATA: gv_title1 TYPE sylisel, " Report title

    gv_dial. " Color flag

    ************************************************************************

    • C O N S T A N T S D E C L A R A T I O N S

    ************************************************************************

    CONSTANTS: c_x VALUE 'X', " Flag X

    c_h VALUE 'H', " Debit

    c_vgabe TYPE vgabe VALUE '2'. " Transaction Type

    ************************************************************************

    • I N T E R N A L T A B L E S D E C L A R A T I O N S

    ************************************************************************

    DATA: i_po TYPE STANDARD TABLE OF s_po WITH HEADER LINE,

    " Purchase Order

    i_inv TYPE STANDARD TABLE OF s_inv_sum WITH HEADER LINE,

    " PO Invoice Values

    i_rep TYPE STANDARD TABLE OF s_rep WITH HEADER LINE,

    " PO Invoice Values

    i_ekbe TYPE STANDARD TABLE OF s_account WITH HEADER LINE.

    " PO Invoice Values

    ************************************************************************

    • S E L E C T I O N S C R E E N *

    ************************************************************************

    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

    SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr MATCHCODE OBJECT kred,

    s_ebeln FOR ekko-ebeln MATCHCODE OBJECT mekk,

    s_bsart FOR t161-bsart,

    s_ekgrp FOR t024-ekgrp,

    s_bedat FOR ekko-bedat.

    SELECTION-SCREEN END OF BLOCK b1.

    ************************************************************************

    • I N I T I A L I Z A T I O N *

    ************************************************************************

    INITIALIZATION.

    ************************************************************************

    • A T S E L E C T I O N - S C R E E N *

    ************************************************************************

    AT SELECTION-SCREEN.

    • Validate the screen fields

    PERFORM validate_screen.

    ************************************************************************

    • S T A R T - O F - S E L E C T I O N *

    ************************************************************************

    START-OF-SELECTION.

    • Fetch main data

    PERFORM fetch_data.

    ************************************************************************

    • T O P - O F - P A G E *

    ************************************************************************

    TOP-OF-PAGE.

    • Header of the List

    PERFORM header.

    ************************************************************************

    • E N D - O F - P A G E *

    ************************************************************************

    • Footer

    END-OF-PAGE.

    ULINE.

    ************************************************************************

    • E N D - O F - S E L E C T I O N *

    ************************************************************************

    END-OF-SELECTION.

    • Display the Report Output data

    PERFORM display_data.

    ***********************************************************************

    • At Line-Selection

    ***********************************************************************

    AT LINE-SELECTION.

    • When double clicked on EBELN display the details of Purchase Doc

    PERFORM line_sel.

    &----


    *& Form validate_screen

    &----


    • Validation of Selection Screen fields

    ----


    FORM validate_screen .

    • Validation of Vendor Number

    CLEAR lfa1-lifnr.

    IF NOT s_lifnr[] IS INITIAL.

    SELECT lifnr UP TO 1 ROWS

    INTO lfa1-lifnr

    FROM lfa1

    WHERE lifnr IN s_lifnr.

    ENDSELECT.

    IF sy-subrc <> 0.

    MESSAGE e000 WITH 'Invalid Vendor'(002).

    ENDIF.

    ENDIF.

    • Validation of PO Number

    CLEAR ekko-ebeln.

    IF NOT s_ebeln[] IS INITIAL.

    SELECT ebeln UP TO 1 ROWS

    INTO ekko-ebeln

    FROM ekko

    WHERE ebeln IN s_ebeln.

    ENDSELECT.

    IF sy-subrc <> 0.

    MESSAGE e000 WITH 'Invalid Document Number'(003).

    ENDIF.

    ENDIF.

    • Validation of PO Document Type

    CLEAR t161-bsart.

    IF NOT s_bsart[] IS INITIAL.

    SELECT bsart UP TO 1 ROWS

    INTO t161-bsart

    FROM t161

    WHERE bsart IN s_bsart.

    ENDSELECT.

    IF sy-subrc <> 0.

    MESSAGE e000 WITH 'Invalid Purchase Document Type'(004).

    ENDIF.

    ENDIF.

    • Validation of Purchasing Group

    CLEAR t024-ekgrp.

    IF NOT s_ekgrp[] IS INITIAL.

    SELECT ekgrp UP TO 1 ROWS

    INTO t024-ekgrp

    FROM t024

    WHERE ekgrp IN s_ekgrp.

    ENDSELECT.

    IF sy-subrc <> 0.

    MESSAGE e000 WITH 'Invalid Purchasing Group'(005).

    ENDIF.

    ENDIF.

    ENDFORM. " validate_screen

    &----


    *& Form fetch_data

    &----


    • Fetching the PO related data from Database Tables

    ----


    FORM fetch_data .

    CLEAR i_po.

    REFRESH i_po.

    SELECT a~ebeln " PO No.

    b~ebelp " PO Item

    a~bstyp " PO Category

    a~bukrs " Company Code

    a~bsart " PO Type

    a~lifnr " Vendor No

    a~ekgrp " Purchase Group

    a~waers " Currency

    a~bedat " PO Date

    b~txz01 " Material Text

    b~werks " Plant

    b~lgort " Storage Location

    b~matkl " Material Group

    b~menge " PR Quantity

    b~meins " UOM

    b~bprme " Price Unit

    b~netpr " Net price

    b~peinh " Price Unit UOM

    b~pstyp " Item Category

    b~knttp " Account Assignment Category

    INTO TABLE i_po

    FROM ekko AS a JOIN ekpo AS b

    ON a~ebeln = b~ebeln

    WHERE a~ebeln IN s_ebeln AND

    a~lifnr IN s_lifnr AND

    a~ekgrp IN s_ekgrp AND

    a~bsart IN s_bsart AND

    a~bedat IN s_bedat.

    SORT i_po BY ebeln ebelp.

    break-point.

    IF NOT i_po[] IS INITIAL.

    • Fetch the PO History/Invoice Details from EKBE Table

    CLEAR i_ekbe.

    REFRESH i_ekbe.

    SELECT ebeln " PO No.

    ebelp " PO Item

    gjahr " Fiscal Year

    belnr " PO Invoice No

    menge " PR Quantity

    wrbtr " Price in Local Currency

    dmbtr " Price in Foreign Currency

    waers " Currency

    shkzg " Dr/Cr Indicator

    INTO TABLE i_ekbe

    FROM ekbe

    FOR ALL ENTRIES IN i_po

    WHERE ebeln = i_po-ebeln AND

    ebelp = i_po-ebelp AND

    vgabe = c_vgabe.

    IF sy-subrc = 0.

    SORT i_ekbe BY ebeln ebelp.

    LOOP AT i_ekbe.

    IF i_ekbe-shkzg = c_h.

    i_ekbe-wrbtr = i_ekbe-wrbtr * -1.

    ENDIF.

    MODIFY i_ekbe.

    ENDLOOP.

    break-point.

    • Sum up the Item wise Invoice totals

    LOOP AT i_ekbe.

    AT END OF ebelp.

    READ TABLE i_ekbe INDEX sy-tabix.

    SUM.

    MOVE-CORRESPONDING i_ekbe TO i_inv.

    APPEND i_inv.

    ENDAT.

    CLEAR i_inv.

    ENDLOOP.

    SORT i_inv BY ebeln ebelp.

    break-point.

    ENDIF.

    ENDIF.

    • Move the Vendor Name and Invoice Values to I_rep Internal Table

    LOOP AT i_po.

    MOVE-CORRESPONDING i_po TO i_rep.

    CLEAR i_inv.

    READ TABLE i_inv WITH KEY ebeln = i_po-ebeln

    ebelp = i_po-ebelp.

    IF sy-subrc = 0.

    i_rep-orewr = ( i_po-menge - i_inv-menge ) * i_po-netpr.

    i_rep-curr = i_inv-waers.

    ELSE.

    i_rep-orewr = i_po-menge * i_po-netpr.

    i_rep-curr = i_po-waers.

    ENDIF.

    break-point.

    • Get the Vendor Name

    CLEAR lfa1-name1.

    SELECT SINGLE name1 FROM lfa1 INTO lfa1-name1

    WHERE lifnr = i_po-lifnr.

    IF sy-subrc = 0.

    i_rep-name1 = lfa1-name1.

    ENDIF.

    APPEND i_rep.

    CLEAR i_rep.

    break-point.

    ENDLOOP.

    SORT i_rep BY lifnr ebeln ebelp.

    DELETE i_rep WHERE orewr LE 0.

    break-point.

    ENDFORM. " fetch_data

    &----


    *& Form display_data

    &----


    • Display the Report Output data

    ----


    FORM display_data .

    DATA: lv_flag, " New Flag

    lv_rec TYPE i. " No of Records

    CLEAR lv_rec.

    IF i_rep[] IS INITIAL.

    MESSAGE e000 WITH 'No Data found'(022).

    ELSE.

    LOOP AT i_rep.

    • Toggle Color

    PERFORM toggle_color.

    IF lv_flag <> space.

    NEW-LINE.

    ENDIF.

    • At New Purchase Document

    AT NEW ebeln.

    WRITE:/1 sy-vline, 2(10) i_rep-ebeln INTENSIFIED OFF.

    lv_flag = c_x.

    lv_rec = lv_rec + 1.

    ENDAT.

    WRITE: 1 sy-vline,

    12 sy-vline,13(4) i_rep-bsart,

    17 sy-vline,18(10) i_rep-lifnr,

    28 sy-vline,29(35) i_rep-name1,

    64 sy-vline,65(4) i_rep-ekgrp,

    69 sy-vline,70(10) i_rep-bedat,

    80 sy-vline,81(5) i_rep-ebelp,

    86 sy-vline,87(40) i_rep-txz01,

    127 sy-vline,128(9) i_rep-matkl,

    137 sy-vline,138(1) i_rep-pstyp,

    139 sy-vline,140(1) i_rep-knttp,

    141 sy-vline,142(4) i_rep-werks,

    146 sy-vline,147(4) i_rep-lgort,

    151 sy-vline,152(13) i_rep-menge UNIT i_rep-meins,

    165 sy-vline,166(3) i_rep-meins,

    169 sy-vline,170(15) i_rep-netpr CURRENCY i_rep-waers,

    185 sy-vline,186(4) i_rep-waers,

    190 sy-vline,191(5) i_rep-peinh,

    196 sy-vline,197(4) i_rep-bprme,

    201 sy-vline,202(15) i_rep-orewr CURRENCY i_rep-curr,

    217 sy-vline,218(4) i_rep-curr,

    222 sy-vline,223(7) i_rep-bstyp centered,

    230 sy-vline.

    NEW-LINE.

    hide: i_rep-ebeln.

    ENDLOOP.

    ULINE.

    FORMAT COLOR OFF.

    WRITE : /2 'Total Number of Purchasing Documents:'(025) COLOR 3,

    lv_rec COLOR 3.

    ENDIF.

    ENDFORM. " display_data

    &----


    *& Form header

    &----


    • Write the Report Header

    ----


    FORM header .

    FORMAT RESET.

    • header

    WRITE:/1(230) 'LIST OF PURCHASE DOCUMENTS PER VENDOR'(006) CENTERED.

    SKIP.

    FORMAT COLOR COL_HEADING.

    ULINE.

    WRITE:/1 sy-vline,2(10) 'Pur.Doc.No'(006) CENTERED,

    12 sy-vline,13(4) 'Type'(007),

    17 sy-vline,18(10) 'Vendor'(008) CENTERED,

    28 sy-vline,29(35) 'Name'(009) CENTERED,

    64 sy-vline,65(4) 'PGrp'(010) CENTERED,

    69 sy-vline,70(10) 'Doc.Date'(012) CENTERED,

    80 sy-vline,81(5) 'Item'(011),

    86 sy-vline,87(40) 'Material Short Text'(024) CENTERED,

    127 sy-vline,128(9) 'Mat.Group'(013),

    137 sy-vline,138(1) 'I',

    139 sy-vline,140(1) 'A',

    141 sy-vline,142(4) 'Plnt'(014),

    146 sy-vline,147(4) 'SLoc'(015),

    151 sy-vline,152(13) 'Quantity'(016) CENTERED,

    165 sy-vline,166(3) 'UoM'(017),

    169 sy-vline,170(15) 'Net Value'(018) CENTERED,

    185 sy-vline,186(4) 'Curr'(019),

    190 sy-vline,191(5) 'Per'(020),

    196 sy-vline,197(4) 'Unit'(021),

    201 sy-vline,202(15) 'To be Invoiced'(023) CENTERED,

    217 sy-vline,218(4) 'Curr'(019),

    222 sy-vline,223(7) 'Doc.Cat'(026),

    230 sy-vline.

    ULINE.

    ENDFORM. " header

    &----


    *& Form toggle_color

    &----


    • This routine alters the color of the records in the list

    ----


    FORM toggle_color.

    IF gv_dial = space.

    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

    gv_dial = c_x.

    ELSE.

    FORMAT COLOR 1 INTENSIFIED OFF.

    CLEAR gv_dial.

    ENDIF.

    ENDFORM. " toggle_color

    &----


    *& Form LINE_SEL

    &----


    *When double clicked on EBELN field display the details of Purchase Doc

    ----


    FORM line_sel.

    CASE sy-lsind.

    WHEN '1'.

    DATA: lv_field(20),

    lv_value(10),

    lv_bstyp like i_rep-bstyp.

    clear: lv_bstyp,lv_value, lv_field.

    GET CURSOR FIELD lv_field VALUE lv_value.

    IF lv_field = 'I_REP-EBELN'.

    IF NOT lv_value IS INITIAL.

    READ LINE sy-index FIELD VALUE i_rep-bstyp

    INTO lv_bstyp.

    • READ CURRENT LINE FIELD VALUE i_rep-bstyp INTO lv_bstyp.

    if lv_bstyp = 'F'.

    SET PARAMETER ID 'BES' FIELD lv_value.

    CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.

    elseif ( lv_bstyp = 'K' or lv_bstyp = 'L' ).

    SET PARAMETER ID 'VRT' FIELD lv_value.

    CALL TRANSACTION 'ME33' AND SKIP FIRST SCREEN.

    elseif lv_bstyp = 'A'.

    SET PARAMETER ID 'ANF' FIELD lv_value.

    CALL TRANSACTION 'ME43' AND SKIP FIRST SCREEN.

    endif.

    ENDIF.

    ENDIF.

    ENDCASE.

    ENDFORM. " line_sel

    Regards

    Anji

    Add comment
    10|10000 characters needed characters exceeded