2007 Jul 18 12:32 PM
hi experts,
I want to validate the entered PO is open and to find the open Qty for the line items in the PO. Please help me on the Tables to be refered to find the open qty in the Purchase order.
with regards,
James
Valuable answers will be rewarded...
2007 Jul 18 12:42 PM
Hi,
see the folowing code to get OPEN PO :-
SELECT EBELN EBELP MATNR WERKS PSTYP MENGE MEINS NETPR MWSKZ NAVNW
INCO1 INCO2 LGORT UNTTO UEBTO LOEKZ KNTTP WEPOS REPOS
WEUNB PEINH INFNR BANFN BNFPO ANFNR ANFPS TXZ01 WEBRE
from ekpo into table i_ekpo
where ( ebeln like v1 or
ebeln like v2 or
EBELN LIKE V3 )
AND WERKS NOT IN ('ADMM','LGHS','XO01','NGM1','ADMN')
AND LOEKZ EQ SPACE
AND ELIKZ EQ SPACE.
sort i_ekpo by ebeln ebelp.
CUT1 = CUT1 - 84.
*select data from EKET
IF NOT I_EKPO[] IS INITIAL.
SELECT EBELN EBELP EINDT SLFDT WEMNG FROM EKET INTO TABLE I_EKET
FOR ALL ENTRIES IN I_EKPO
WHERE EBELN = I_EKPO-EBELN
AND EBELP = I_EKPO-EBELP
AND EINDT LE CUT1.
ENDIF.
*select data from EKKN
IF NOT I_EKET[] IS INITIAL.
SELECT EBELN EBELP SAKTO KOSTL AUFNR KOKRS PRCTR PS_PSP_PNR
FROM EKKN INTO TABLE I_EKKN FOR ALL ENTRIES IN I_EKET
WHERE EBELN = I_EKET-EBELN
AND EBELP = I_EKET-EBELP.
ENDIF.
*select data from EKKO
IF NOT I_EKET[] IS INITIAL.
SELECT EBELN WAERS EKORG EKGRP ZTERM BUKRS KNUMV LIFNR
FROM EKKO INTO TABLE I_EKKO FOR ALL ENTRIES IN I_EKET
WHERE EBELN = I_EKET-EBELN.
ENDIF.
*select data from KONV
IF NOT I_EKKO[] IS INITIAL.
SELECT KNUMV KSCHL KMEIN WAERS KPEIN FROM KONV INTO TABLE I_KONV
FOR ALL ENTRIES IN I_EKKO
WHERE KNUMV = I_EKKO-KNUMV.
ENDIF.
Reward points if helpful.
Regards.
Srikanta Gope
2007 Jul 18 12:38 PM
Hi!
You can find in the PO history in table EKET. Check the material document quntities and the vendor invoice quantites.
Regards
Tamá
2007 Jul 18 12:38 PM
Hi James,
Check the link,
https://forums.sdn.sap.com/click.jspa?searchID=3938608&messageID=3490843
Thanks.
2007 Jul 18 12:39 PM
hi,
For an Open PO check the field ELIKZ = ' '.
This field is in EKPO.
2007 Jul 18 12:41 PM
Hi,
In the table EKPO check for the field ELIKZ.It is the delivery complete indicator.
If it is flagged,it means that the PO is closed.
Hope it is useful.
Thanks,
Sandeep.
2007 Jul 18 12:42 PM
Hi,
see the folowing code to get OPEN PO :-
SELECT EBELN EBELP MATNR WERKS PSTYP MENGE MEINS NETPR MWSKZ NAVNW
INCO1 INCO2 LGORT UNTTO UEBTO LOEKZ KNTTP WEPOS REPOS
WEUNB PEINH INFNR BANFN BNFPO ANFNR ANFPS TXZ01 WEBRE
from ekpo into table i_ekpo
where ( ebeln like v1 or
ebeln like v2 or
EBELN LIKE V3 )
AND WERKS NOT IN ('ADMM','LGHS','XO01','NGM1','ADMN')
AND LOEKZ EQ SPACE
AND ELIKZ EQ SPACE.
sort i_ekpo by ebeln ebelp.
CUT1 = CUT1 - 84.
*select data from EKET
IF NOT I_EKPO[] IS INITIAL.
SELECT EBELN EBELP EINDT SLFDT WEMNG FROM EKET INTO TABLE I_EKET
FOR ALL ENTRIES IN I_EKPO
WHERE EBELN = I_EKPO-EBELN
AND EBELP = I_EKPO-EBELP
AND EINDT LE CUT1.
ENDIF.
*select data from EKKN
IF NOT I_EKET[] IS INITIAL.
SELECT EBELN EBELP SAKTO KOSTL AUFNR KOKRS PRCTR PS_PSP_PNR
FROM EKKN INTO TABLE I_EKKN FOR ALL ENTRIES IN I_EKET
WHERE EBELN = I_EKET-EBELN
AND EBELP = I_EKET-EBELP.
ENDIF.
*select data from EKKO
IF NOT I_EKET[] IS INITIAL.
SELECT EBELN WAERS EKORG EKGRP ZTERM BUKRS KNUMV LIFNR
FROM EKKO INTO TABLE I_EKKO FOR ALL ENTRIES IN I_EKET
WHERE EBELN = I_EKET-EBELN.
ENDIF.
*select data from KONV
IF NOT I_EKKO[] IS INITIAL.
SELECT KNUMV KSCHL KMEIN WAERS KPEIN FROM KONV INTO TABLE I_KONV
FOR ALL ENTRIES IN I_EKKO
WHERE KNUMV = I_EKKO-KNUMV.
ENDIF.
Reward points if helpful.
Regards.
Srikanta Gope
2007 Jul 18 12:46 PM
check with below program :
Open qty : EKPO-MENGE - EKET-GLMNG.
ype-pools : slis.
Tables
tables : ekko, " Purchase order Header
ekpo, " Purchase order Item
marc. " Material with Plant data
Internal table for output.
data : begin of i_output occurs 0,
ebeln like ekko-ebeln,
matnr like ekpo-matnr,
end of i_output.
ALV Data declaration.
data : v_repid like sy-repid.
ALV Function Module Variables
DATA: gs_layout type slis_layout_alv,
g_exit_caused_by_caller,
gs_exit_caused_by_user type slis_exit_by_user.
DATA: gt_fieldcat type slis_t_fieldcat_alv,
gs_print type slis_print_alv,
gt_events type slis_t_event,
gt_list_top_of_page type slis_t_listheader,
g_status_set type slis_formname value 'PF_STATUS_SET',
g_user_command type slis_formname value 'USER_COMMAND',
g_top_of_page type slis_formname value 'TOP_OF_PAGE',
g_top_of_list type slis_formname value 'TOP_OF_LIST',
g_end_of_list type slis_formname value 'END_OF_LIST',
g_variant LIKE disvariant,
g_save(1) TYPE c,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_exit(1) TYPE c,
gx_variant LIKE disvariant.
data : gr_layout_bck type slis_layout_alv.
Ranges
ranges r_eindt for eket-eindt.
initialization.
v_repid = sy-repid.
start-of-selection.
Get the data from EKKO ,EKPO and MARC Table
perform get_data_tables.
end-of-selection.
display the data in the form of ALV
perform display_data.
&----
*& Form get_data_tables
&----
Get the data from EKKO,EKPO and MARC Table
----
FORM get_data_tables.
clear : i_output.
refresh : i_output.
fill the dates in ranges
r_eindt-low = sy-datum - 7.
r_eindt-high = sy-datum + 14.
r_eindt-option = 'BT'.
r_eindt-sign = 'I'.
append r_eindt.
Get the data from EKKO,EKPO and EKET Tables
select aebeln bmatnr into table i_output
from ekko as a inner join
ekpo as b on aebeln = bebeln
inner join marc as c on cmatnr = bmatnr
inner join mara as d on dmatnr = bmatnr
inner join eket as e on eebeln = aebeln
and eebelp = bebelp
where c~beskz = 'E'
and c~werks = '1000'
and d~mtart = 'FERT'
and b~loekz = space
and b~elikz = space
and e~eindt in r_eindt.
if sy-subrc ne 0.
message e000(zwave) with 'No open purchase order found'.
endif.
ENDFORM. " get_data_tables
&----
*& Form display_data
&----
text
----
FORM display_data.
Fill the Fiedlcat
PERFORM fieldcat_init using gt_fieldcat[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = g_user_command
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT = gr_layout_bck
IT_FIELDCAT = gt_fieldcat[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = g_save
IS_VARIANT =
IT_EVENTS =
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = i_output
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " display_data
&----
*& Form fieldcat_init
&----
text
----
-->P_GT_FIELDCAT[] text
----
FORM fieldcat_init USING e01_lt_fieldcat type slis_t_fieldcat_alv.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Purchase order number
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'EBELN'.
LS_FIELDCAT-ref_fieldname = 'EBELN'.
LS_FIELDCAT-ref_tabname = 'EKKO'.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Purchase Order'.
ls_fieldcat-seltext_M = 'Purchase Order'.
ls_fieldcat-seltext_S = 'Purchase Order'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Material #
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MATNR'.
LS_FIELDCAT-ref_fieldname = 'MATNR'.
LS_FIELDCAT-ref_tabname = 'EKPO'.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Material'.
ls_fieldcat-seltext_M = 'Material'.
ls_fieldcat-seltext_S = 'Material'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
ENDFORM. " fieldcat_init
Reward Points if it is helpful
Thanks
Seshu