2LIS_02_SCL-BANFN,BNFPO
Hi, the 2 fields I mentioned are in ROOSOURCE with selection 'P'. I changed the selection to 'X' with the code.
update roosfield
set selection = 'X'
where oltpsource = '2LIS_02_SCL'
and field = 'BNFPO'
and objvers = 'D'.
When I executed, the selection is chenged to 'X', but I don't have the objvers to 'A'. And also I am not able to see those fields in the structure. how do I get it to BW? All the other fields have 2 versions A and D.
Am I missing anything? Please answer me
Thanks,
Radha
Hello Radha,
Here is the note.
Summary
Symptom
The BANFN fields (purchase requisition number) and BNFPO (purchase requisition item) were not assigned within the 2LIS_02_SCL InfoSource.
Other terms
2LIS_02_SCL, BANFN
Solution
In transaction RSA1, replicate the corresponding DataSource for the 2LIS_02_SCL InfoSource and copy the fields into the transfer structure by accessing the transfer rules of the corresponding source system. Then activate the transfer rules.
Hope that helps.
Similar Messages
-
Custom purchase requsitionto vendor open and cleared payment report
dear all i develop report but i cant ableto show in that open amount and cleared amount of vender in that report so please see this report and feedback me for logic to show open and clear amount of vendor purchase orderwise or vendorwise
report zpo_purchase_history no standard page heading message-id 00.
TABLES : bsik, bsak, lfa1, lfb1, skb1, t001, bapifvdexp_vzzbepp.
type-pools:slis,ICON.
types :begin of ty_po,
banfn type eban-banfn,
"Purchase Requisition Number
bnfpo type eban-bnfpo,
"Item Number of Purchase Requisition
ekgrp type eban-ekgrp, "Purchasing Group
badat type eban-badat,
"Requisition (Request) Date
menge type eban-menge,
KNTTP TYPE EBAN-KNTTP,
PSTYP type eban-PSTYP,
"Purchase Requisition Quantity
meins type eban-meins,
"Purchase Requisition Unit of Measure
lifnr type ekko-lifnr, "Vendor Account Number
bedat type ekko-bedat, "Purchasing Document Date
ebeln type ekpo-ebeln,
"Purchasing Document Number
ebelp type ekpo-ebelp,
"Item Number of Purchasing Document
matkl type ekpo-matkl, "Material Group
mtart type ekpo-mtart, "Material Type
matnr type ekpo-matnr, "Material Number
txz01 type ekpo-txz01, "Short Text
menge1 type ekpo-menge, "Purchase Order Quantity
meins1 type ekpo-meins,
"Purchase Order Unit of Measure
balqty type ekpo-menge, "Balance Quantity
netpr type ekpo-netpr,
"Net Price in Purchasing Document
peinh type ekpo-peinh, "Price Unit
mblnr type mseg-mblnr,
"Number of Material Document
zeile type mseg-zeile, "Item in Material Document
menge2 type mseg-menge, "GR Quantity
meins2 type mseg-meins, "GR Unit of Measure
werks type mseg-werks, "Plant
charg type mseg-charg, "Batch
belnr type rbkp-belnr,
"Document Number of an Invoice Document
bldat type ekbe-bldat, "Document Date in Document
belnr_b type rbkp-belnr,
SHKZG type ekbe-SHKZG , "Debit/Credit Indicator
DMBTR type bsik-dmbtr, "Amount in Local Currency
DMBTR_C type bsAk-dmbtr, "Amount in Local Currency
thick(10) type c, "Thickness
width(10) type c, "Width
length(10) type c, "Length
grade(10) type c, "Grade
BELNR_d type bseg-belnr,
xblnr type bkpf-xblnr,
awkey type bkpf-awkey,
RMWWR type rbkp-RMWWR,
WMWST1 type rbkp-WMWST1,
end of ty_po.
types :begin of ty_ekko,
ebeln type ekko-ebeln,
lifnr type ekko-lifnr,
bedat type ekko-bedat,
end of ty_ekko.
types:begin of ty_ekpo,
ebeln type ekpo-ebeln,
ebelp type ekpo-ebelp,
matnr type ekpo-matnr,
txz01 type ekpo-txz01,
menge type ekpo-menge,
meins type ekpo-meins,
netpr type ekpo-netpr,
peinh type ekpo-peinh,
banfn type ekpo-banfn,
bnfpo type ekpo-bnfpo,
mtart type ekpo-mtart,
end of ty_ekpo.
types :begin of ty_eban,
banfn type eban-banfn,
bnfpo type eban-bnfpo,
matnr type eban-matnr,
menge type eban-menge,
meins type eban-meins,
end of ty_eban.
types : begin of ty_ekbe,
ebeln type ekbe-ebeln,
ebelp type ekbe-ebelp,
belnr type ekbe-belnr,
bldat type ekbe-bldat,
gjahr type ekbe-gjahr,
buzei type ekbe-buzei,
matnr type ekbe-matnr,
DMBTR type ekbe-dmbtr,
shkzg type ekbe-shkzg,
end of ty_ekbe.
types : begin of ty_mseg,
mblnr type mseg-mblnr,
mjahr type mseg-mjahr,
zeile type mseg-zeile,
menge type mseg-menge,
meins type mseg-meins,
ebeln type mseg-ebeln,
ebelp type mseg-ebelp,
matnr type mseg-matnr,
werks type mseg-werks,
charg type mseg-charg,
end of ty_mseg.
types : begin of ty_rbkp,
belnr type rbkp-belnr,
gjahr type rbkp-gjahr,
bldat type rbkp-bldat,
lifnr type rbkp-lifnr,
ZUONR type rbkp-ZUONR,
RMWWR type rbkp-RMWWR,
WMWST1 type rbkp-WMWST1,
end of ty_rbkp.
types : begin of ty_bseg,
bukrs type bseg-bukrs,
belnr type bseg-belnr,
gjahr type bseg-gjahr,
buzei type bseg-buzei,
valut type bseg-valut,
wrbtr type bseg-wrbtr ,
augbl type bseg-augbl,
matnr type bseg-matnr,
lifnr type bseg-lifnr,
ebeln type bseg-ebeln,
end of ty_bseg.
types : begin of ty_rseg,
belnr type rseg-belnr,
gjahr type rseg-gjahr,
ebeln type rseg-ebeln,
ebelp type rseg-ebelp,
matnr type rseg-matnr,
bukrs type rseg-bukrs,
end of ty_rseg.
types : begin of ty_bsik,
belnr type bsik-belnr,
buzei type bsik-buzei,
DMBTR type bsik-DMBTR,
budat type bsik-budat,
shkzg type bsik-shkzg,
ebeln type bsik-ebeln,
lifnr type bsik-lifnr,
end of ty_bsik.
types : begin of ty_bsak,
belnr type bsak-belnr,
lifnr type bsak-lifnr,
ebeln type bsak-ebeln,
DMBTR_C type bsak-DMBTR,
ZUONR type bsak-ZUONR,
end of ty_bsak.
types: begin of ty_bkpf,
BELNR type bkpf-belnr,
xblnr type bkpf-xblnr,
awkey type bkpf-awkey,
end of ty_bkpf.
data: it_po type standard table of ty_po,
it_ekko type standard table of ty_ekko,
it_ekpo type standard table of ty_ekpo,
it_eban type standard table of ty_eban,
it_ekbe type standard table of ty_ekbe,
it_mseg type standard table of ty_mseg,
it_rbkp type standard table of ty_rbkp,
it_rseg type standard table of ty_rseg,
it_bseg type standard table of ty_bseg,
it_bsik type STANDARD TABLE OF ty_bsik with header line,
it_bsak type STANDARD TABLE OF ty_bsak,
it_bkpf type standard table of ty_bkpf,
wa_po type ty_po,
wa_ekko type ty_ekko,
wa_ekpo type ty_ekpo,
wa_eban type ty_eban,
wa_mseg type ty_mseg,
wa_rbkp type ty_rbkp,
wa_rseg type ty_rseg,
wa_bseg type ty_bseg,
wa_ekbe type ty_ekbe,
wa_bsik type ty_bsik,
wa_bsak type ty_bsak,
wa_bkpf type ty_bkpf.
data: it_fcat type slis_t_fieldcat_alv,
it_lshead type slis_t_listheader,
it_sort type slis_t_sortinfo_alv,
wa_fcat type slis_fieldcat_alv,
wa_lshead type slis_listheader,
wa_layout type slis_layout_alv,
wa_sort type slis_sortinfo_alv.
data :it_cl_data like table of clobjdat,
wa_cl_data like clobjdat.
data: values(10) type n.
data: value1(4) type N.
data: c_matkl type ekpo-matkl,
c_matnr type ekpo-matnr,
c_ekgrp type eban-ekgrp,
c_badat type eban-badat,
c_index type sy-tabix,
c_grmenge type mseg-erfmg,
c_low(10) type c,
c_high(10) type c,
c_date type string,
c_bukrs type ekko-bukrs,
c_WERKS type eban-WERKS.
data: gd_date(10).
DATA: V_EVENTS TYPE SLIS_T_EVENT,
WA_EVENT TYPE SLIS_ALV_EVENT.
*********Selection screen variables*********
selection-screen:begin of block b1 with frame title text-001.
select-options: s_bukrs for c_bukrs DEFAULT 'bmp1',
s_WERKS for c_WERKS,
s_matnr for c_matnr DEFAULT 'rm-01',
s_matkl for c_matkl ,
s_badat for c_badat ,"obligatory,
s_ekgrp for c_ekgrp.
parameters: ch_bal as checkbox.
selection-screen:end of block b1.
*initialization.
* PERFORM EVENT_CALL.
* PERFORM POPULATE_EVENT.
start-of-selection.
PERFORM EVENT_CALL.
PERFORM POPULATE_EVENT.
perform getdata.
perform setdata.
perform fieldcat.
perform display.
*& Form GETDATA
form getdata .
select a~BANFN
a~bnfpo
a~ekgrp
a~badat
a~KNTTP
a~PSTYP
b~ebeln
b~ebelp
b~matkl
b~matnr
b~bukrs
into corresponding fields of table it_po
from eban as a inner join ekpo as b
on a~banfn = b~banfn and
a~bnfpo = b~bnfpo AND
A~KNTTP = B~KNTTP and
a~PSTYP = b~PSTYP
where a~badat in s_badat and
a~ekgrp in s_ekgrp and
a~WERKS in s_WERKS and
b~matnr in s_matnr and
b~matkl in s_matkl and
b~bukrs in s_bukrs and
b~loekz <> 'L' and
a~loekz <> 'X'.
if it_po[] is not initial.
select ebeln
ebelp
matnr
txz01
menge
meins
netpr
peinh
banfn
bnfpo
mtart
from ekpo into table it_ekpo
for all entries in it_po
where ebeln = it_po-ebeln and
ebelp = it_po-ebelp and
loekz <> 'L'.
select banfn
bnfpo
matnr
menge
meins
from eban into table it_eban
for all entries in it_po
where banfn = it_po-banfn and
bnfpo = it_po-bnfpo and
loekz <> 'X'.
if it_ekpo[] is not initial.
select ebeln
lifnr
bedat
from ekko into table it_ekko
for all entries in it_ekpo
where ebeln = it_ekpo-ebeln.
select ebeln
ebelp
belnr
bldat
gjahr
buzei
matnr
DMBTR
shkzg
from ekbe into table it_ekbe
for all entries in it_ekpo
where ebeln = it_ekpo-ebeln and
ebelp = it_ekpo-ebelp .
*if it_ekbe-shkzg = 'H'.
**ekbe-dmbtr = ekbe-dmbtr * -1.
**ekbe-menge = ekbe-menge * -1.
*endif.
* select belnr
* gjahr
* ebeln
* ebelp
* from bseg into table it_bseg
* for all entries in it_ekpo
* where ebeln = it_ekpo-ebeln and
* ebelp = it_ekpo-ebelp.
select belnr
gjahr
ebeln
ebelp
matnr
bukrs
from rseg into table it_rseg
for all entries in it_ekpo
where ebeln = it_ekpo-ebeln and
ebelp = it_ekpo-ebelp.
endif.
if it_ekbe[] is not initial.
select mblnr
mjahr
zeile
menge
meins
ebeln
ebelp
matnr
werks
charg
from mseg into table it_mseg
for all entries in it_ekbe
where mblnr = it_ekbe-belnr and
mjahr = it_ekbe-gjahr and
zeile = it_ekbe-buzei and
bwart = '101'.
endif.
if it_rseg[] is not initial.
select belnr
gjahr
bldat
lifnr
ZUONR
RMWWR
WMWST1
from rbkp into table it_rbkp
for all entries in it_rseg
where belnr = it_rseg-belnr.
endif.
*if it_rseg[] is not initial.
* SELECT bukrs
* belnr
* gjahr
* buzei
* valut
* wrbtr
* augbl
* matnr
* lifnr
* ebeln
* INTO TABLE it_bseg
* FROM bseg
* FOR ALL ENTRIES IN it_rseg
* WHERE bukrs = it_rseg-bukrs and ebeln = it_rseg-ebeln and mwskz = ''.
*endif.
*loop at it_BKPF into wa_BKPF.
* values = wa_rbkp-belnr.
* value1 = wa_rbkp-gjahr.
data: aekey_1 type string .
*CONCATENATE values value1 into aekey_1.
* if it_BSEG[] is not initial.
*MESSAGE aekey_1 type 'I'.
SELECT single belnr xblnr awkey into wa_bkpf
from bkpf
where awkey = aekey_1.
SELECT SINGLe belnr
buzei
dmbtr
budat
shkzg
ebeln
lifnr
FROM bsik
INTO CORRESPONDING FIELDS OF wa_bsik
*FOR ALL ENTRIES IN it_bseg
WHERE
bukrs in s_bukrs and
lifnr = wa_rbkp-lifnr
and
*AND gjahr = it_bseg-gjahr
* AND
belnr = wa_bkpf-belnr.
insert wa_bsik into table it_bsik.
CLEAR wa_bsik.
CLEAR it_bsik.
*endloop.
* and ebeln = it_bseg-ebeln .
* select BELNR
** SHKZG
** DMBTR
* from bkpf into table it_bkpf
* for ALL ENTRIES IN it_rbkp
* where belnr = it_rbkp-belnr.
* ENDif.
IF IT_bseg[] IS NOT INITIAL.
select belnr
LIFNR
ebeln
DMBTR
ZUONR
from bsik into table it_bsik
for all entries in it_bseg
where belnr = it_bseg-belnr.
select belnr
LIFNR
ebeln
DMBTR
ZUONR
from bsak into table it_bsak
for all entries in it_bseg
where belnr = it_bseg-belnr.
ENDIF.
else.
message s002.
leave list-processing.
endif.
endform. " GETDATA
*& Form SETDATA
form setdata .
clear wa_po.
loop at it_po into wa_po.
c_index = sy-tabix.
********Calculate PR Quantity**********
clear wa_eban.
read table it_eban into wa_eban
with key banfn = wa_po-banfn
bnfpo = wa_po-bnfpo.
if sy-subrc eq 0.
move:wa_eban-menge to wa_po-menge,
wa_eban-meins to wa_po-meins.
endif.
********Calculate PO Quantity**********
clear wa_ekpo.
read table it_ekpo into wa_ekpo
with key banfn = wa_po-banfn
bnfpo = wa_po-bnfpo .
if sy-subrc eq 0.
move:wa_ekpo-txz01 to wa_po-txz01,
wa_ekpo-netpr to wa_po-netpr,
wa_ekpo-peinh to wa_po-peinh,
wa_ekpo-mtart to wa_po-mtart,
wa_ekpo-menge to wa_po-menge1,
wa_ekpo-meins to wa_po-meins1.
endif.
********Calculate Balance Quantity******
clear wa_mseg.
loop at it_mseg into wa_mseg
where ebeln = wa_po-ebeln and
ebelp = wa_po-ebelp.
c_grmenge = c_grmenge + wa_mseg-menge.
endloop.
move:wa_mseg-mblnr to wa_po-mblnr,
c_grmenge to wa_po-menge2,
wa_mseg-meins to wa_po-meins2,
wa_mseg-werks to wa_po-werks,
wa_mseg-charg to wa_po-charg.
wa_po-balqty = wa_eban-menge - c_grmenge.
clear : wa_rseg,wa_rbkp.
read table it_rseg into wa_rseg with key
ebeln = wa_mseg-ebeln
ebelp = wa_mseg-ebelp.
read table it_rbkp into wa_rbkp
with key belnr = wa_rseg-belnr
gjahr = wa_rseg-gjahr.
if sy-subrc eq 0.
move : wa_rbkp-belnr to wa_po-belnr,
wa_rbkp-bldat to wa_po-bldat,
wa_rbkp-RMWWR to wa_po-RMWWR,
WA_RBKP-WMWST1 TO WA_PO-WMWST1.
endif.
read table it_bseg into wa_bseg with key
ebeln = wa_rseg-ebeln
bukrs = wa_rseg-bukrs.
if sy-subrc eq 0.
move wa_bseg-belnr to wa_po-belnr_d.
endif.
* read table it_bkpf into wa_bkpf
* with key belnr = wa_ekbe-belnr.
* read table it_bseg into wa_bseg
* with key belnr = wa_bkpf-belnr.
CLEAR wa_bsik.
clear it_bsik.
read table it_bsik into wa_bsik
with key belnr = wa_bkpf-belnr.
* if wa_bsik-shkzg = 'H'.
* wa_bsik-DMBTR = wa_bsik-DMBTR * 1.
* endif.
if sy-subrc eq 0.
move : wa_bsik-belnr to wa_po-belnr,
wa_bsik-DMBTR to wa_po-DMBTR.
endif.
* clear wa_bsik.
* read table it_bsik into wa_bsik
* with key belnr = wa_bseg-belnr.
* if sy-subrc eq 0.
* move : wa_bsik-DMBTR to wa_po-DMBTR.
* endif.
*clear wa_bsak.
* read table it_bsak into wa_bsak
* with key belnr = wa_bseg-belnr.
* if sy-subrc eq 0.
* move : wa_bsak-DMBTR_C to wa_po-DMBTR_C.
* endif.
*clear : wa_rbkp.
*loop at it_bsik into wa_bsik.
*read table it_bsik into wa_bsik with key belnr = wa_rbkp-belnr.
*if sy-subrc eq 0.
* move : wa_bsik-DMBTR to wa_po-DMBTR.
* endif.
*endloop.
*********Assign Vendor,PO Date*********
clear wa_ekko.
read table it_ekko into wa_ekko
with key ebeln = wa_po-ebeln.
if sy-subrc eq 0.
move:wa_ekko-lifnr to wa_po-lifnr,
wa_ekko-bedat to wa_po-bedat.
endif.
*clear wa_ekko.
*read table it_ekko into wa_ekko
*with key lifnr = wa_po-lifnr.
*if sy-subrc eq 0.
* move: wa_bsik-DMBTR to wa_po-DMBTR.
* endif.
* call function 'ZSD_BATCH_CLASSIFICATION_DATA'
* exporting
** ch_charg = wa_po-charg
* ch_matnr = wa_po-matnr
* ch_werks = wa_po-werks
* tables
* cl_data = it_cl_data
** I_SEL_CHARACTERISTIC =
loop at it_cl_data into wa_cl_data.
if wa_cl_data-ausp1 ne '?'.
if wa_cl_data-atnam eq 'THICKNESS'.
move wa_cl_data-ausp1 to wa_po-thick.
elseif wa_cl_data-atnam eq 'LENGTH'.
move wa_cl_data-ausp1 to wa_po-length.
elseif wa_cl_data-atnam eq 'WIDTH'.
move wa_cl_data-ausp1 to wa_po-width.
elseif wa_cl_data-atnam eq 'GRADE'.
move wa_cl_data-ausp1 to wa_po-grade.
endif.
endif.
endloop.
modify it_po from wa_po index c_index.
clear :c_grmenge,wa_po,wa_ekpo,wa_mseg,c_index.
endloop.
endform. " SETDATA
*& Form FIELDCAT
* text
* --> p1 text
* <-- p2 text
form fieldcat .
perform buildfields using '1' 'BANFN' 'IT_PO' 'PR Number' '' ''.
* perform buildfields using '2' 'BNFPO' 'IT_PO' 'PR Item Number' '' ''.
perform buildfields using '2' 'KNTTP' 'IT_PO' 'A/c Assignment Cat' '' ''.
perform buildfields using '2' 'PSTYP' 'IT_PO' 'Item Cat' '' ''.
perform buildfields using '3' 'EKGRP' 'IT_PO' 'Purchase Group' '' ''.
perform buildfields using '4' 'BADAT' 'IT_PO' 'Request Date' '' ''.
perform buildfields using '5' 'MENGE' 'IT_PO' 'PR Quantity' 'X' ''.
perform buildfields using '6' 'MEINS' 'IT_PO' 'PR Unit' '' ''.
perform buildfields using '7' 'LIFNR' 'IT_PO' 'Vendor Number' '' ''.
perform buildfields using '8' 'EBELN' 'IT_PO' 'Purchasing Doc No' '' '' .
perform buildfields using '9' 'BEDAT' 'IT_PO' 'PO Date' '' ''.
perform buildfields using '10' 'MTART' 'IT_PO' 'Material Type' '' ''.
perform buildfields using '11' 'MATKL' 'IT_PO' 'Material Group' '' ''.
perform buildfields using '12' 'MATNR' 'IT_PO' 'Material Number' '' ''.
perform buildfields using '13' 'TXZ01' 'IT_PO' 'Material Desc' '' ''.
perform buildfields using '18' 'MENGE1' 'IT_PO' 'PO Quantity' 'X' ''.
perform buildfields using '19' 'MEINS' 'IT_PO' 'PO Unit' '' ''.
perform buildfields using '20' 'NETPR' 'IT_PO' 'Net Price' '' ''.
perform buildfields using '21' 'PEINH' 'IT_PO' 'Price Unit' '' ''.
perform buildfields using '22' 'MBLNR' 'IT_PO' 'GR Number' '' ''.
perform buildfields using '23' 'MENGE2' 'IT_PO' 'GR Quantity' 'X' ''.
perform buildfields using '24' 'MEINS2' 'IT_PO' 'GR Unit' '' ''.
perform buildfields using '25' 'BELNR' 'IT_PO' 'Invoice doc. number' '' ''.
perform buildfields using '26' 'BLDAT' 'IT_PO' 'Invoice Date' '' ''.
* perform buildfields using '26' 'BELNR_D' 'IT_POP' 'A/C Doc. No.' '' ''.
* perform buildfields using '26' 'AUGBL' 'IT_PO' 'Clearing Doc No.' '' ''.
perform buildfields using '26' 'DMBTR' 'IT_PO' 'OPEN AMOUNT' '' ''.
perform buildfields using '26' 'DMBTR' 'IT_PO' 'clear AMOUNT' '' ''.
* perform buildfields using '26' 'DMBTR_C' 'IT_PO' 'Clear balance' '' ''.
if ch_bal = 'X'.
perform buildfields using '27' 'BALQTY' 'IT_PO' 'Balance Quantity'
'X' ''.
endif.
perform buildfields using '26' 'WMWST1' 'IT_PO' 'TOTAL TAX ADDED' 'X' ''.
perform buildfields using '26' 'RMWWR' 'IT_PO' 'TOTAL AMOUNT IN INVOICE' 'X' ''.
endform. " FIELDCAT
*& Form BUILDFIELDS
* text
* -->P_0449 text
* -->P_0450 text
* -->P_0451 text
* -->P_0452 text
form buildfields using value(p_col_pos) like sy-cucol
value(p_fldname) type slis_fieldname
value(p_tabname) type slis_tabname
value(p_reptext) like dd03p-reptext
value(p_do_sum) type char1
value(hotspot) type char1.
wa_fcat-col_pos = p_col_pos.
wa_fcat-fieldname = p_fldname.
wa_fcat-tabname = p_tabname.
wa_fcat-reptext_ddic = p_reptext.
wa_fcat-do_sum = p_do_sum.
wa_fcat-hotspot = hotspot.
append wa_fcat to it_fcat.
clear wa_fcat.
endform. " BUILDFIELDS
*& Form DISPLAY
form display .
clear wa_layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
* wa_layout-box_fieldname = 'SEL'.
* wa_layout-edit = 'X'.
perform build_sort using 'BANFN' '1' 'X'.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-cprog
* I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND '
i_callback_top_of_page = 'TOP_OF_PAGE'
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
i_background_id = 'ALV_BACKGROUND'
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = wa_layout
it_fieldcat = it_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
it_sort = it_sort
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* 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
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = it_po[]
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
*& Form top_of_page
* text
form top_of_page. "#EC *
**********Create report header*********
refresh it_lshead.
clear wa_lshead.
**********To display date in header*********
* write: s_badat-low to c_low dd/mm/yyyy,s_badat-high to c_high
* dd/mm/yyyy.
* if s_badat-high is initial.
* concatenate 'Dated on' c_low into c_date separated by space.
* else.
* concatenate 'Dated between' c_low 'and' c_high into c_date separated
* by space.
* endif.
wa_lshead-typ = 'H'.
wa_lshead-info = 'PR To Payment History'.
* 'Pending Indents History -We had a requirement to retrieve "aging of receiveables" by customer. Basically, it goes thru each record and depending on the due date places the amounts in the following buckets (example). 0-30 day Overdue, 31-60 days Overdue, 61-90 days overdue, 30+ days overdue, 60+ days overdue) etc all the way to 6+ years overdue.
There are also cooresponding buckets for coming due analysis. For example, what is: 0-30 days coming due, 31-60 days coming due, 30+ days coming due, etc...
To do this, first I needed to be able be able to produce an open items statement at any given time in the past. Now, this seems impossible because of how the items go from open to cleared all the time. And an item that was open one month ago, may not be open anymore.
What I did was first remove any selections on item status. Then compare the posting date with teh key date in the past, if the posting date is less than or equal to the key date, keep the record.
Then compare the clearing date with the key date. First, keep all that are #. (This keeps all records still open from that posting date/key date)
Then, add another check for all items that were cleared after the key date (GT Key Date). This gives you the open items on that date.
Hope that makes sense. Let me know if you want clarification.
/smw -
Not Able to Generate Out of the Report by adding the new 2 fields
Hi,
I'm Very new to ABAP. I have created one report. after 2 new fields added they are EKNAM and EKGRP.
The Thing is the remaining fields are displaying in the output. The Newly added fields are not displaying the out. I was able to add this 2 fields in the head of the report. But issue is not able to get the data on these 2 fields.
Please see the below program and any one please help me out to display the data in this report for the fields eknam and ekgrp.
TABLES: eban,
lfa1,
ekko,
t024,
v_username.
DATA: BEGIN OF i_req_items OCCURS 10,
ernam LIKE eban-ernam, "Created by
lifnr LIKE eban-lifnr, "Desired vendor
ebeln LIKE eban-ebeln, "PO Number
ebelp LIKE eban-ebelp, "PO Item
eknam LIKE t024-eknam, "Pur.Grp Name
ekgrp LIKE t024-ekgrp, "Pur.Grp Number
flief LIKE eban-flief, "Fixed vendor
name1 LIKE lfa1-name1, "Vendor name
badat LIKE eban-badat, "Creation date
erdat LIKE eban-erdat, "Change date
banfn LIKE eban-banfn, "Requisition no.
bnfpo LIKE eban-bnfpo, "Req. item no.
bsart LIKE eban-bsart, "Document type
knttp LIKE eban-knttp, "Acct.assgmt category
txz01 LIKE eban-txz01, "PO item description
menge LIKE eban-menge, "Quantity
preis LIKE eban-preis, "Price
peinh LIKE eban-peinh, "Price unit
value(14) TYPE p DECIMALS 2, "Item Value
END OF i_req_items.
DATA: BEGIN OF i_reqs OCCURS 10,
ernam LIKE eban-ernam, "Created by
persn LIKE usr21-persnumber, "Person number
uname LIKE adrp-name_text, "User name
lifnr LIKE eban-lifnr, "Vendor
name1 LIKE lfa1-name1, "Vendor name
badat LIKE eban-badat, "Creation date
banfn LIKE eban-banfn, "Requisition no.
bnfpo LIKE eban-bnfpo, "Req. item no.
bsart LIKE eban-bsart, "Document type
knttp LIKE eban-knttp, "Acct.assgmt category
txz01 LIKE eban-txz01, "PO item description
eknam like t024-eknam, "Purchase Grp Name
ekgrp like t024-ekgrp, "Purchase Grp Number
value(14) TYPE p DECIMALS 2, "Item Value
END OF i_reqs.
DATA: BEGIN OF i_req_keys OCCURS 0,
ernam LIKE eban-ernam, "Created by
lifnr LIKE eban-lifnr, "Desired vendor
erdat LIKE eban-erdat, "Create or Change date
banfn LIKE eban-banfn, "Requisition no.
bnfpo LIKE eban-bnfpo, "Req. item no.
eknam like t024-eknam, "Purchase Grp Name
ekgrp like t024-ekgrp, "Purchase Grp number
END OF i_req_keys.
DATA: BEGIN OF i_req_keeper OCCURS 0,
ernam LIKE eban-ernam, "Created by
lifnr LIKE eban-lifnr, "Desired vendor
banfn LIKE eban-banfn, "Requisition no
END OF i_req_keeper.
DATA: wa_reqitems LIKE i_req_items.
DATA: BEGIN OF i_export OCCURS 10,
record(150) TYPE c,
END OF i_export.
CONSTANTS
CONSTANTS:
c_doccat LIKE eban-bstyp VALUE 'B',
c_creind LIKE eban-estkz VALUE 'R',
c_delflag LIKE eban-loekz VALUE 'L',
c_write(5) TYPE c VALUE 'WRITE',
c_slash(1) TYPE c VALUE '/',
*start ESPZC U8DK900439
c_delimiter TYPE x VALUE '09',
c_delimiter TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
*end ESPZC U8DK900439
c_sc(1) TYPE c VALUE ';',
c_x(1) TYPE c VALUE 'X',
c_usd(1) TYPE c VALUE '2',
c_export LIKE authb-filename VALUE '/BAY2/UBEM_SPLIT_REQS'.
WORKING VARIABLES
DATA: w_report_id LIKE syst-repid,
w_sttime LIKE syst-uzeit,
w_rpt_pagno LIKE syst-pagno,
w_rc LIKE sy-subrc,
w_datelow LIKE eban-badat,
w_datehigh LIKE eban-badat,
w_export LIKE c_export,
w_records TYPE i,
w_message(50) TYPE c.
TYPES number TYPE i.
SELECTION SCREEN / PARAMETERS
SELECTION-SCREEN BEGIN OF BLOCK org WITH FRAME TITLE text-001.
PARAMETERS: p_purorg LIKE eban-ekorg OBLIGATORY DEFAULT 'US02'.
SELECT-OPTIONS: s_doctyp FOR eban-bsart,
s_date FOR eban-badat.
PARAMETERS: p_timper(2) TYPE n.
SELECTION-SCREEN: COMMENT 37(37) text-002.
SELECTION-SCREEN END OF BLOCK org.
SELECTION-SCREEN BEGIN OF BLOCK outp WITH FRAME TITLE text-003.
PARAMETERS: p_onlin RADIOBUTTON GROUP outp DEFAULT 'X',
p_servr RADIOBUTTON GROUP outp.
SELECTION-SCREEN END OF BLOCK outp.
AT SELECTION SCREEN
AT SELECTION-SCREEN.
IF p_servr = c_x.
CLEAR w_rc.
PERFORM authority_check_dataset USING w_export
CHANGING w_rc.
IF w_rc <> 0.
MESSAGE e532 WITH text-006 w_export.
ENDIF.
CLEAR w_rc.
PERFORM verify_unix_path_and_file CHANGING w_rc.
IF w_rc <> 0.
MESSAGE e531 WITH w_message.
ENDIF.
ENDIF.
INITIALIZATION EVENT
INITIALIZATION.
PERFORM get_filename.
MOVE syst-uzeit TO w_sttime.
MOVE syst-repid TO w_report_id.
CLEAR: w_rpt_pagno.
START-OF-SELECTION.
PERFORM get_data.
IF p_onlin = c_x.
IF w_records GT 0.
PERFORM print_report_header.
PERFORM write_report.
ELSE.
MESSAGE i531 WITH text-007.
ENDIF.
ELSEIF p_servr = c_x.
PERFORM write_export.
ENDIF.
END-OF-SELECTION.
---- F O R M R O U T I N E S -
*& FORM get_filename
FORM get_filename.
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
logical_filename = c_export
IMPORTING
file_name = w_export
EXCEPTIONS
file_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. " get_filename
FORM authority_check_dataset
FORM authority_check_dataset USING p_filename
CHANGING p_rc.
CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
EXPORTING
activity = c_write
filename = p_filename
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.
p_rc = sy-subrc.
ENDFORM. "authority_check_dataset
FORM verify_unix_path_and_file
FORM verify_unix_path_and_file CHANGING p_rc.
*start ESPZC U8DK900439
OPEN DATASET w_export FOR OUTPUT IN TEXT MODE
MESSAGE w_message.
OPEN DATASET w_export FOR OUTPUT IN TEXT MODE ENCODING DEFAULT
MESSAGE w_message.
*end ESPZC U8DK900439
p_rc = sy-subrc.
ENDFORM. "verify_unix_path_and_file
FORM get_data
FORM get_data.
CLEAR w_datelow.
CLEAR w_datehigh.
w_datelow = s_date-low - p_timper.
w_datehigh = s_date-high + p_timper.
w_datehigh = s_date-high.
SELECT ernam lifnr ebeln ebelp flief badat erdat banfn bnfpo bsart
knttp menge preis peinh txz01
FROM eban
INTO CORRESPONDING FIELDS OF TABLE i_req_items
WHERE bstyp = c_doccat
AND estkz = c_creind
AND knttp <> space
AND bsart IN s_doctyp
AND loekz <> c_delflag
AND ekorg EQ p_purorg
AND ( ( badat BETWEEN w_datelow and w_datehigh ) OR
( erdat BETWEEN w_datelow AND w_datehigh ) ).
AND erdat BETWEEN w_datelow AND w_datehigh.
IF sy-subrc = 0.
LOOP AT i_req_items.
IF i_req_items-lifnr IS INITIAL.
IF NOT i_req_items-flief IS INITIAL.
MOVE i_req_items-flief TO i_req_items-lifnr.
MODIFY i_req_items.
ENDIF.
IF NOT i_req_items-ebeln IS INITIAL.
SELECT lifnr FROM ekko
INTO i_req_items-lifnr
WHERE ebeln = i_req_items-ebeln.
ENDSELECT.
MODIFY i_req_items.
ENDIF.
ENDIF.
IF i_req_items-erdat GT i_req_items-badat.
MOVE i_req_items-erdat TO i_req_items-badat.
MODIFY i_req_items.
ENDIF.
ENDLOOP.
PERFORM weed_out_unique_records.
PERFORM apply_time_period.
SORT i_req_items BY ernam lifnr banfn bnfpo.
LOOP AT i_req_items.
i_req_items-value = ( i_req_items-menge *
( i_req_items-preis / i_req_items-peinh ) ).
MODIFY i_req_items.
ENDLOOP.
Getting vendor name from table LFA1 -
CLEAR i_req_items.
LOOP AT i_req_items.
SELECT SINGLE name1 FROM lfa1
INTO i_req_items-name1
WHERE lifnr = i_req_items-lifnr.
MODIFY i_req_items.
ENDLOOP.
LOOP AT i_req_items.
MOVE-CORRESPONDING i_req_items TO i_reqs.
Getting user name from view v_username -
SELECT SINGLE name_text
FROM v_username INTO i_reqs-uname
WHERE bname = i_reqs-ernam.
APPEND i_reqs.
ENDLOOP.
ENDIF.
DESCRIBE TABLE i_reqs LINES w_records.
ENDFORM. "Get_data
FORM print_report_header
FORM print_report_header.
ADD 1 TO w_rpt_pagno.
CALL FUNCTION '/BAY2/UBEXBH_BAYER_HEADR_FUN'
EXPORTING
f_jobname = text-020
f_business_group = text-021
f_report_title = text-022
f_repid = w_report_id
f_sysid = syst-sysid
f_linsz = syst-linsz
f_pagno = w_rpt_pagno
f_mandt = syst-mandt
f_datum = syst-datum
f_uzeit = w_sttime.
FORMAT COLOR COL_HEADING.
WRITE: /1 text-010, "Created by CWID & user name
29 text-011, "Vendor #
38 text-012, "Vendor Name
69 text-013, "Req Number
79 text-014, "/Item
87 text-015, "Created On
98 text-017, "A (AcctAssgmtCat)
100(14) text-019 RIGHT-JUSTIFIED, "Item Value
116(30) text-018, "Item Description
148 text-030, "Pur.Grp Name
170 text-031. "Pur.Grp Number
FORMAT COLOR OFF.
ULINE.
ENDFORM. "print_report_header
*& Form WRITE_REPORT
FORM write_report.
LOOP AT i_reqs.
WRITE: /1 i_reqs-ernam,
9(18) i_reqs-uname,
29 i_reqs-lifnr,
38(30) i_reqs-name1,
69 i_reqs-banfn,
79 c_slash,
80 i_reqs-bnfpo,
87 i_reqs-badat,
98 i_reqs-knttp,
100(14) i_reqs-value CURRENCY c_usd,
116(30) i_reqs-txz01,
145 i_reqs-eknam,
160 i_reqs-ekgrp.
ENDLOOP.
ENDFORM. "write_report
*& Form WRITE_EXPORT
FORM write_export.
DATA: l_value(14) TYPE c,
l_bsart(100) TYPE c,
l_uname(7) TYPE c,
l_records(5) TYPE c,
l_header(150) TYPE c,
l_params(150) TYPE c,
i_char TYPE i.
LOOP AT i_reqs.
CLEAR l_value.
CLEAR l_uname.
l_value = i_reqs-value.
l_uname = sy-uname.
CONCATENATE: i_reqs-uname
i_reqs-ernam
i_reqs-lifnr
i_reqs-name1
i_reqs-banfn
i_reqs-bnfpo
i_reqs-badat
i_reqs-knttp
l_value
i_reqs-txz01 INTO i_export
SEPARATED BY c_delimiter.
APPEND i_export.
ENDLOOP.
CONCATENATE: text-008 "Created By Name
text-009 "CWID
text-011 "Vendor No
text-012 "Vendor Name
text-013 "Req Number
text-023 "Item
text-015 "Created On
text-017 "A
text-019 "Item Value
text-018 "Item Description
text-030 "Purchase Grp name
text-031 "Purchase Grp number
INTO l_header SEPARATED BY c_delimiter.
INSERT l_header INTO i_export INDEX 1.
IF sy-batch IS INITIAL.
MOVE sy-uname TO l_uname.
ELSE.
MOVE text-024 TO l_uname.
ENDIF.
PERFORM collect_bsart CHANGING l_bsart
i_char.
l_records = w_records.
CONCATENATE: sy-sysid
p_purorg
l_bsart(i_char)
s_date-low
s_date-high
p_timper
l_uname
sy-datum
l_records INTO l_params
SEPARATED BY c_delimiter.
INSERT l_params INTO i_export INDEX 1.
LOOP AT i_export.
CONDENSE i_export NO-GAPS.
TRANSFER i_export TO w_export.
ENDLOOP.
CLOSE DATASET w_export.
MESSAGE s533 WITH text-028 w_export text-029.
ENDFORM. "write_export
*& FORM collect_bsart
FORM collect_bsart CHANGING p_bsart
p_char.
CLEAR p_bsart.
LOOP AT s_doctyp.
IF sy-tabix = 1.
p_bsart = s_doctyp-low.
ELSE.
CONCATENATE: p_bsart c_sc s_doctyp-low INTO p_bsart.
ENDIF.
ENDLOOP.
CONDENSE p_bsart NO-GAPS.
p_char = strlen( p_bsart ).
ENDFORM. "collect_bsart
*& Form WEED_OUT_UNIQUE_RECORDS
FORM weed_out_unique_records.
DATA: i_l_req_items LIKE i_req_items OCCURS 0 WITH HEADER LINE.
DATA: i_l_req_final_items LIKE i_req_items OCCURS 0 WITH HEADER LINE.
DATA: l_count TYPE i,
l_sy_tabix LIKE sy-tabix,
l_banfn LIKE eban-banfn.
REFRESH i_l_req_items.
REFRESH i_l_req_final_items.
CLEAR l_banfn.
i_l_req_items[] = i_req_items[].
i_l_req_final_items[] = i_req_items[].
SORT i_req_items BY ernam lifnr.
SORT i_l_req_items BY ernam lifnr.
SORT i_l_req_final_items BY ernam lifnr.
LOOP AT i_l_req_items.
l_banfn = i_l_req_items-banfn.
CLEAR l_count.
LOOP AT i_req_items
WHERE ernam = i_l_req_items-ernam
AND lifnr = i_l_req_items-lifnr.
IF i_req_items-banfn <> l_banfn.
ADD +1 TO l_count.
ENDIF.
ENDLOOP.
IF NOT ( l_count > 0 ).
LOOP AT i_l_req_final_items
WHERE ernam = i_l_req_items-ernam
AND lifnr = i_l_req_items-lifnr.
DELETE i_l_req_final_items.
ENDLOOP.
ENDIF.
ENDLOOP.
REFRESH i_req_items.
i_req_items[] = i_l_req_final_items[].
ENDFORM. " WEED_OUT_UNIQUE_RECORDS
*& Form APPLY_TIME_PERIOD
FORM apply_time_period.
DATA: l_i_req_keys LIKE i_req_keys.
DATA: l_days_diff TYPE p,
l_no_of_key_recs TYPE i,
l_next_item LIKE sy-tabix,
l_finished_with_keys TYPE c VALUE 'N',
l_add_line TYPE c VALUE 'N',
l_count TYPE i,
l_req_ernam LIKE eban-ernam,
l_req_lifnr LIKE lfa1-lifnr,
l_req_banfn LIKE eban-banfn,
l_save_tabix like sy-tabix.
REFRESH: i_req_keys, i_req_keeper.
LOOP AT i_req_items.
MOVE-CORRESPONDING i_req_items TO
i_req_keys.
IF i_req_items-erdat IS INITIAL.
i_req_keys-erdat = i_req_items-badat.
ENDIF.
APPEND i_req_keys.
ENDLOOP.
SORT i_req_keys BY ernam lifnr erdat.
CLEAR l_no_of_key_recs.
DESCRIBE TABLE i_req_keys LINES l_no_of_key_recs.
LOOP AT i_req_keys.
IF l_add_line = 'Y'.
MOVE-CORRESPONDING i_req_keys
TO i_req_keeper.
APPEND i_req_keeper.
l_add_line = 'N'.
ENDIF.
IF l_finished_with_keys = 'Y'.
EXIT.
ENDIF.
CLEAR l_next_item.
l_save_tabix = sy-tabix.
COMPUTE l_next_item = sy-tabix + 1.
IF l_next_item = l_no_of_key_recs.
l_finished_with_keys = 'Y'.
ENDIF.
clear: l_i_req_keys.
READ TABLE i_req_keys INDEX l_next_item
INTO l_i_req_keys.
sy-tabix = l_save_tabix.
CLEAR l_days_diff.
l_days_diff = l_i_req_keys-erdat -
i_req_keys-erdat.
IF l_i_req_keys-ernam =
i_req_keys-ernam AND
l_i_req_keys-lifnr =
i_req_keys-lifnr AND
l_i_req_keys-banfn <>
i_req_keys-banfn AND
l_days_diff <= p_timper.
MOVE-CORRESPONDING i_req_keys
TO i_req_keeper.
APPEND i_req_keeper.
l_add_line = 'Y'.
ENDIF.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM i_req_keeper
COMPARING ALL FIELDS.
SORT i_req_keeper BY ernam lifnr banfn.
LOOP AT i_req_items.
CLEAR l_count.
CLEAR: l_req_ernam,
l_req_lifnr,
l_req_banfn.
l_req_ernam = i_req_items-ernam.
l_req_lifnr = i_req_items-lifnr.
l_req_banfn = i_req_items-banfn.
LOOP AT i_req_keeper
WHERE ernam = i_req_items-ernam
AND lifnr = i_req_items-lifnr
AND banfn = i_req_items-banfn.
ADD +1 TO l_count.
ENDLOOP.
IF NOT ( l_count > 0 ).
LOOP AT i_req_items
WHERE ernam = l_req_ernam
AND lifnr = l_req_lifnr
AND banfn = l_req_banfn.
DELETE i_req_items.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. " APPLY_TIME_PERIODRajesh,
Put a breakpoint and try to debug the report step by step.
You will findout the reason very easily.
Whenever you have a select and are trying to append into an internal table, keep checking your internal table if it is been populated with the correct records.
This way, you will findout the cause and can correct is accordingly.
Thanks,
Suresh Ganti -
PO number and PO qunatity for a given WBS element
hello all,
in which table does PO number and PO quantity are stored for a given WBS element...
or do i need to use any function module....
i need to use it in an ALV report...
thanks in advance.....For service PO's or material PO's you can get only by using PR reference.
for material you will be having only one PR for One material so there is no problem with Materials.
for ref find the below screenshot
for services number of activities comes under single PR so this is some critical to bring the datafor ref find below screenshot
as mentioned in the screenshot all the service numbers will come under PR 40 line item so by using PR 40 you will be creating PO ,
Pass order(NPLNR)/W.B.S.E(PS_PSP_PNR) in EBKN get BANFN & BNFPO pass this in EKPO for service PO's package number (PACKNO) will be updated by using this go to ESLL pass package number(PACKNO) and take package (SUB_PACKNO) and pass in package number(PACKNO) you will get the service items for that PO
Regards
Ambarish -
Hi very urgent How to improve the performence of the program
Hi all please tell me how to improve the performence of this program......
REPORT z03_gil010 NO STANDARD PAGE HEADING LINE-SIZE 130.
INCLUDE *
INCLUDE: z00_bci010. " Gestion des anomalies.
Déclaration des données *
Tables de la bases de données *
TABLES:
ekpo, " Poste document d'achat.
lfa1, " Base fournisseurs (généralités).
marc, " Données division de l'article.
z03_bw_cmp1,
eord, "Répertoire des sources appro. Achats
eina, "Fiche infos-achats - données générales
t024, "Groupes d'acheteurs
tvarv. "FAE17345+
Déclaration des données internes *
Déclaration de la table interne qui permet de recuperer les mois.
DATA: BEGIN OF itb_months OCCURS 12.
INCLUDE STRUCTURE t247.
DATA: END OF itb_months.
Table pour récupération d'infos sur les divisions
DATA: BEGIN OF itb_t001w OCCURS 0,
werks LIKE t001w-werks,
fabkl LIKE t001w-fabkl," Clé du calendrier d'entreprise
END OF itb_t001w.
Déclaration de la table interne contenant les infos sur l'adresse du
fournisseur.
DATA: BEGIN OF itb_adresse OCCURS 0,
lifnr LIKE lfa1-lifnr, " Numéro de compte fournisseur.
name1 LIKE lfa1-name1, " Nom 1.
name2 LIKE lfa1-name2, " Nom 2.
name3 LIKE lfa1-name3, " Nom 3.
name4 LIKE lfa1-name4, " Nom 4.
stras LIKE lfa1-stras, " N° de rue et nom de la rue.
pstlz LIKE lfa1-pstlz, " Code postal.
ort01 LIKE lfa1-ort01, " Localité.
pfach LIKE lfa1-pfach, " Boîte postale.
pstl2 LIKE lfa1-pstl2, " Code de la boîte postale.
land1 LIKE lfa1-land1, " Clé de pays.
landx LIKE t005t-landx, " Pays.
spras LIKE lfa1-spras, " Code langue
END OF itb_adresse.
Déclaration d'une table interne pour les informations sur les
prévisions de commande.
DATA: BEGIN OF itb_prev_cde OCCURS 0,
werks LIKE marc-werks, " Division
idnlf LIKE eina-idnlf, " ADDsde ref article frn
lifnr LIKE eord-lifnr, " N° fournisseur.
ekgrp LIKE marc-ekgrp, " Groupe d'acheteurs
dispo LIKE marc-dispo, " Code gestionnaire MRP
matnr LIKE eord-matnr, " Article.
maktx LIKE makt-maktx, " Désignation article.
bstmi LIKE marc-bstmi, " Quantité de commande.
men00 LIKE plaf-gsmng, " Quantité du mois en cours M.
men01 LIKE plaf-gsmng, " Quantité pour le mois M+1.
men02 LIKE plaf-gsmng, " Quantité pour le mois M+2.
men03 LIKE plaf-gsmng, " Quantité pour le mois M+3.
men04 LIKE plaf-gsmng, " Quantité pour le mois M+4.
men05 LIKE plaf-gsmng, " Quantité pour le mois M+5.
men06 LIKE plaf-gsmng. " Quantité pour le mois M+6.
DATA: END OF itb_prev_cde.
Structure de travail pour les commandes convernant les PFC
DATA str_pca_pfc LIKE itb_prev_cde.
*add sde
DATA str_eord_pfc LIKE itb_prev_cde.
Structure de travail pour les prévisons PFC
DATA str_prev_pfc LIKE itb_prev_cde.
Déclaration d'une table interne pour les informations sur le
portefeuille des commandes d'achat.
DATA: BEGIN OF itb_pca OCCURS 0,
werks LIKE ekpo-werks, " Division
idnlf LIKE eina-idnlf, " ADDsde ref article frn
lifnr LIKE eord-lifnr, " N° fournisseur.
ekgrp LIKE marc-ekgrp, " Groupe d'acheteurs
dispo LIKE marc-dispo, " Code gestionnaire MRP
matnr LIKE eord-matnr, " Article.
maktx LIKE makt-maktx, " Désignation article.
ebeln LIKE ekes-ebeln, " Numéro du document d'achat.
ebelp LIKE ekes-ebelp, " Numéro de poste du document d'achat.
slfdt LIKE eket-slfdt, " Date de livraison statistique
eindt LIKE ekes-eindt, " Date de livraison indiquée dans la
" confirmation de la cde.
menge LIKE ekes-menge, " Quantité indiquée dans la confirma-
" tion de la commande.
attdu LIKE eket-wemng, " Portefeuille fournisseur.
netpr LIKE ekpo-brtwr, " Prix net du document d'achat dans
" la devise du document.
rtard TYPE i, " Retard en jours ouvres.
wemng LIKE eket-wemng, " Quantité de l'entrée de marchandise.
bldat LIKE mkpf-bldat, " Date inscrite sur la pièce/sur le
" document.
qtran LIKE ekes-menge, " Quantité en transit.
dtran LIKE ekes-eindt. " Date du dernier avis de transit.
DATA: END OF itb_pca.
DATA: w_i TYPE i, "Compteur
w_i_char(1) TYPE c, "Texte pour récupérer compteur
w_nm_zone(20) TYPE c, "Nom zone pour assign au field-symbols
w_nb_j TYPE i, "Nb de jours ouvrés jusqu'à fin mois
w_nb_j_tot TYPE i. "Nb de jours ouvrés du mois
FIELD-SYMBOLS: TYPE ANY.
Déclaration d'une table contenant les fiches info achat.
DATA: BEGIN OF itb_eina OCCURS 0,
matnr LIKE eina-matnr,
lifnr LIKE eina-lifnr,
idfnl LIKE eina-idnlf.
DATA: END OF itb_eina.
Déclaration d'une table contenant les infos groupe acheteur.
*DATA: BEGIN OF itb_t024 OCCURS 0,
ekgrp LIKE t024-ekgrp,
eknam LIKE t024-eknam,
ektel LIKE t024-ektel,
telfx LIKE t024-telfx.
*DATA: END OF itb_t024.
Déclaration d'une table pour le transfert du fichier.
DATA: BEGIN OF itb_transfert OCCURS 0,
col00(8), "division
col00bis(20), "Reference article
col01(18), "No article
col02(45), "libelle article
col021(17), "Groupe acheteur
col022(13), "gestionnaire
col03(17), "qte commandée ou No de commande
col04(13), "Mois 1 ou No poste cde
col05(20), "Mois 2 ou délai initial
col06(33), "Mois 3 ou délai négocié
col07(13), "Mois 4 ou qté cdée
col08(13), "Mois 5 ou qté attendue
col09(13), "Mois 6 ou Montant attendu
col10(13), "Mois 7 ou retard
col11(13), "qte partielle livree
col12(13), "date livraison partielle
col13(13), "qté en transit
col14(13). "date
DATA: END OF itb_transfert.
Déclaration d'une table contenant la liste des fournisseurs.
DATA: BEGIN OF itb_lifnr OCCURS 0,
werks LIKE marc-werks,
idfnl LIKE eina-idnlf,
lifnr LIKE eord-lifnr,
ekgrp LIKE marc-ekgrp,
spras LIKE lfa1-spras,
eknam LIKE t024-eknam,
ektel LIKE t024-ektel,
telfx LIKE t024-telfx.
DATA: END OF itb_lifnr.
Déclaration d'une structure pour la selection dans la table MSEG.
DATA : BEGIN OF itb_mseg OCCURS 0,
mblnr LIKE mseg-mblnr,
mjahr LIKE mseg-mjahr,
ebeln LIKE mseg-ebeln,
ebelp LIKE mseg-ebelp,
END OF itb_mseg.
déclaration d'une structure pour la selection dans EKPO.
DATA : BEGIN OF itb_ekpo OCCURS 0,
lifnr LIKE ekko-lifnr,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
menge LIKE ekpo-menge,
bpumz LIKE ekpo-bpumz,
bpumn LIKE ekpo-bpumn,
matnr LIKE ekpo-matnr,
werks LIKE ekpo-werks,
netpr LIKE ekpo-netpr,
peinh LIKE ekpo-peinh, "Base de prix FAE17345+
ekgrp LIKE ekko-ekgrp, "AFT++
dispo LIKE marc-dispo, "AFT++
END OF itb_ekpo.
déclaration d'une structure pour la selection dans EKPO.
DATA : BEGIN OF itb_ekko OCCURS 0,
ebeln LIKE ekko-ebeln,
lifnr LIKE ekko-lifnr,
spras LIKE ekko-spras,
END OF itb_ekko.
déclaration d'une structure pour la selection dans EKES.
DATA : BEGIN OF itb_ekes OCCURS 0,
ebeln LIKE eket-ebeln,
ebelp LIKE eket-ebelp,
ebtyp LIKE ekes-ebtyp,
eindt LIKE ekes-eindt,
menge LIKE ekes-menge,
dabmg LIKE ekes-dabmg,
etens LIKE ekes-etens,
END OF itb_ekes.
déclaration d'une structure pour la selection dans EKET
DATA : BEGIN OF itb_eket OCCURS 0,
ebeln LIKE eket-ebeln,
ebelp LIKE eket-ebelp,
menge LIKE eket-menge,
wemng LIKE eket-wemng,
eindt LIKE eket-eindt,
slfdt LIKE eket-slfdt,
END OF itb_eket.
déclaration d'une structure pour la selection dans MKPF.
DATA : BEGIN OF itb_mkpf OCCURS 0,
mblnr LIKE mkpf-mblnr,
mjahr LIKE mkpf-mjahr,
bldat LIKE mkpf-bldat,
END OF itb_mkpf.
Déclaration d'une structure pour la sélection dans EORD.
DATA : BEGIN OF itb_eord OCCURS 0,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
lifnr LIKE eord-lifnr,
ekgrp LIKE marc-ekgrp,
dispo LIKE marc-dispo, "DE3K924352
disls LIKE marc-disls,
bstfe LIKE marc-bstfe,
bstrf LIKE marc-bstrf,
bstmi LIKE marc-bstmi,
bstma LIKE marc-bstma,
END OF itb_eord.
DATA : BEGIN OF itb_eordw OCCURS 0.
INCLUDE STRUCTURE itb_eord.
DATA : END OF itb_eordw.
Déclaration d'une structure pour la sélection dans MAKT.
DATA : BEGIN OF itb_makt OCCURS 0,
matnr LIKE makt-matnr,
spras LIKE makt-spras,
maktx LIKE makt-maktx,
END OF itb_makt.
Déclaration d'une structure pour la sélection dans EBAN.
DATA : BEGIN OF itb_eban OCCURS 0,
matnr LIKE eban-matnr,
werks LIKE eban-werks,
flief LIKE eban-flief,
lfdat LIKE eban-lfdat,
menge LIKE eban-menge,
bsmng LIKE eban-bsmng,
webaz LIKE eban-webaz,
ekgrp LIKE eban-ekgrp,
ebeln LIKE eban-ebeln,
banfn LIKE eban-banfn,
bnfpo LIKE eban-bnfpo, "DB3K900702+
END OF itb_eban.
Déclaration d'une structure pour la sélection dans PLAF.
DATA : BEGIN OF itb_plaf OCCURS 0,
plnum LIKE plaf-plnum, "DB3K900702+
matnr LIKE plaf-matnr,
plwrk LIKE plaf-plwrk,
flief LIKE plaf-flief,
pedtr LIKE plaf-pedtr,
gsmng LIKE plaf-gsmng,
webaz LIKE plaf-webaz,
END OF itb_plaf.
Déclaration d'une structure pour la sélection dans MARC.
DATA : BEGIN OF itb_marc OCCURS 0,
matnr LIKE marc-matnr,
werks LIKE marc-werks,
disls LIKE marc-disls,
bstrf LIKE marc-bstrf,
bstmi LIKE marc-bstmi,
bstma LIKE marc-bstma,
bstfe LIKE marc-bstfe,
ekgrp LIKE marc-ekgrp,
dispo LIKE marc-dispo,
END OF itb_marc.
DATA : BEGIN OF itb_marc_eord OCCURS 0,
matnr LIKE marc-matnr,
werks LIKE marc-werks,
strgr LIKE marc-strgr, "groupe de stratégie planif
END OF itb_marc_eord.
DATA : BEGIN OF itb_z03_bw_cmp1 OCCURS 0,
matnr LIKE z03_bw_cmp1-matnr,
werks LIKE z03_bw_cmp1-werks,
pdatu LIKE z03_bw_cmp1-pdatu,
plnmg LIKE z03_bw_cmp1-plnmg,
END OF itb_z03_bw_cmp1.
Begin change BNI <DE3K937051>
DATA : BEGIN OF itb_z03_bw_cmp2 OCCURS 0,
matnr LIKE z03_bw_cmp2-matnr,
werks LIKE z03_bw_cmp2-werks,
pdatu LIKE z03_bw_cmp2-pdatu,
plnmg LIKE z03_bw_cmp2-plnmg,
END OF itb_z03_bw_cmp2.
*End change BNI
DATA : BEGIN OF str_index1,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index1.
DATA : BEGIN OF str_index2,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index2.
DATA : BEGIN OF str_index3_eord,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index3_eord.
DATA : BEGIN OF str_index4,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index4.
DATA : BEGIN OF str_index5,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index5.
DATA : BEGIN OF str_index6,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index6.
DATA : BEGIN OF str_index7,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index7.
Déclaration des variables de debut et de fin de mois.
DATA: w_debut_mois LIKE sy-datum,
w_debut_periode LIKE sy-datum,
w_fin_mois LIKE sy-datum,
w_fin_periode LIKE sy-datum.
Déclaration des variables pour les dates.
DATA: w_date0 LIKE sy-datum,
w_date1 LIKE sy-datum,
w_date2 LIKE sy-datum,
w_date3 LIKE sy-datum,
w_date4 LIKE sy-datum,
w_date5 LIKE sy-datum,
w_date6 LIKE sy-datum,
w_datejour LIKE sy-datum, "FAE15269
w_dat_da LIKE eban-lfdat,
w_dat_op LIKE plaf-pedtr,
w_mois0 LIKE t247-ltx,
w_mois1 LIKE t247-ltx,
w_mois2 LIKE t247-ltx,
w_mois3 LIKE t247-ltx,
w_mois4 LIKE t247-ltx,
w_mois5 LIKE t247-ltx,
w_mois6 LIKE t247-ltx,
w_lendemain LIKE sy-datum. "FAE17345+
Temoin d'un AR dans la commande d'achat.
DATA: w_temoin_ar.
Numéro de la confirmation de la commande
DATA : w_etens LIKE ekes-etens.
Déclaration des variables pour le nom des fichiers.
DATA: w_nom_fichier LIKE rlgrap-filename,
w_fichier LIKE rlgrap-filename,
w_racine LIKE rlgrap-filename,
w_file LIKE rlgrap-filename.
Déclaration d'une table interne pour le transfert.
DATA: BEGIN OF itb_trans OCCURS 0,
w_ligne(320).
DATA: END OF itb_trans.
Déclaration d'une variable pour rechercher les enregistrements vides.
DATA: w_compteur TYPE i,
w_compteur1 TYPE i,
w_compteur2 TYPE i,
w_retard TYPE i, " Retard en jours ouvres.
w_trouve_pfc TYPE c, "addsde
w_trouve_pfs TYPE c, "+DE3K937051
w_trouve TYPE c.
*Index pour les LOOP
DATA : w_index_ekpo LIKE sy-tabix,
w_index_ekes LIKE sy-tabix,
w_index_eket LIKE sy-tabix,
w_index_mseg LIKE sy-tabix,
w_index_eban LIKE sy-tabix,
w_index_plaf LIKE sy-tabix,
w_index_pca LIKE sy-tabix,
w_index_z03_bw_cmp1 LIKE sy-tabix,
w_index_z03_bw_cmp2 LIKE sy-tabix."+DE3K937051
RANGES : r_type_pfs FOR marc-strgr.
*fichier sur serveur +EDR231003
DATA : w_chemin LIKE filename-fileintern, "nom du fichier
w_date_fichier(12) TYPE c, "Date format DD_MM_AA
w_csv(307) TYPE c. "ligne du fichier format CSV
CONSTANTS: k_imputation_m LIKE eban-knttp VALUE 'M'. "FAE19001+
Description de l écran de sélection *
Paramètres "UTILISATION" *
Ouverture d'un block de sélection pour le(s) fournisseur(s).
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-bl1.
Sélection division(s)
SELECT-OPTIONS: s_werks FOR ekpo-werks.
Sélection fournisseur(s).
SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr OBLIGATORY.
Sélection du Groupe d'acheteur
*SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp. "-FAE26446
*SELECT-OPTIONS: s_dispo FOR marc-dispo. "-FAE26446
SELECTION-SCREEN END OF BLOCK block1.
FAE 26446 : ajout
SELECTION-SCREEN BEGIN OF BLOCK block3 WITH FRAME TITLE text-bl3.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_ekgrp RADIOBUTTON GROUP g3.
SELECTION-SCREEN COMMENT 5(24) text-001 FOR FIELD p_ekgrp.
SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_dispo RADIOBUTTON GROUP g3.
SELECTION-SCREEN COMMENT 5(24) text-002 FOR FIELD p_dispo.
SELECT-OPTIONS: s_dispo FOR marc-dispo.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK block3.
FAE 26446 : fin ajout
Paramètres "SYSTEME" *
Saut de 2 lignes.
SELECTION-SCREEN: SKIP 2.
Ouverture d'un block de sélection pour l'adresse physique du fichier.
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-bl2.
PARAMETERS: p_pc RADIOBUTTON GROUP rad1 DEFAULT 'X', "+EDR231003
p_fic_pc LIKE rlgrap-filename. "+EDR231003
SELECTION-SCREEN SKIP. "+EDR231003
PARAMETERS : p_serve RADIOBUTTON GROUP rad1, "+EDR231003
p_fic_se LIKE filename-fileintern "+EDR231003
DEFAULT 'Z03_PREV_COMMANDES'. "+EDR231003
SELECTION-SCREEN END OF BLOCK block2.
Logique de traitement *
INITIALIZATION *
INITIALIZATION.
Date du jour
MOVE sy-datum TO w_datejour. "FAE15269
Gestion des anomalies.
MOVE text-lb1 TO w_lb_traitement.
PERFORM f930_init USING sy-cprog '30'.
Fin de la gestions des anomalies.
Récuperation des mois dans la table interne 'ITB_MONTHS'.
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
language = sy-langu
TABLES
month_names = itb_months
EXCEPTIONS
month_names_not_found = 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.
Récupération des differentes periodes.
PERFORM f100_recuperation_date TABLES itb_months.
Récupération du debut du mois.
CONCATENATE sy-datlo(6) '01' INTO w_debut_mois.
MOVE: w_debut_mois TO w_debut_periode.
Récupération du dernier jour du mois.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = sy-datlo
IMPORTING
last_day_of_month = w_fin_mois
EXCEPTIONS
day_in_no_date = 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.
TOP-OF-PAGE *
TOP-OF-PAGE.
CALL FUNCTION 'Z_00_BC_TOP_OF_PAGE'
EXPORTING
p_linsz = k_ligne
p_pagno = sy-pagno
p_prog = sy-cprog
p_projet = k_projet
p_societe = k_societe
p_sujet = sy-title.
END-OF-PAGE *
END-OF-PAGE.
AT SELECTION-SCREEN *
FAE 26446 : ajout
AT SELECTION-SCREEN ON BLOCK block3.
IF NOT ( s_ekgrp IS INITIAL )
AND NOT ( s_dispo IS INITIAL ).
MESSAGE e394(z03_mm).
ENDIF.
IF p_ekgrp = 'X'.
IF s_ekgrp IS INITIAL.
MESSAGE e395(z03_mm).
ENDIF.
ELSE.
IF s_dispo IS INITIAL.
MESSAGE e396(z03_mm).
ENDIF.
ENDIF.
fae26446 fin ajout
AT SELECTION-SCREEN ON BLOCK block2.
IF p_pc = 'X'.
IF p_fic_pc IS INITIAL.
*Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
MESSAGE e021(z03_mm).
ENDIF.
ELSE.
IF p_fic_se IS INITIAL.
*Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
MESSAGE e021(z03_mm).
ENDIF.
ENDIF.
Création du matchcode pour la selection du fichier local.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fic_pc.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = p_fic_pc
def_path = 'C:'
mask = text-ma1
mode = 'S'
title = text-sel
IMPORTING
filename = p_fic_pc
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc NE 0 AND sy-subrc NE 3.
MESSAGE e032(z03_mm).
ENDIF.
START-OF-SELECTION *
START-OF-SELECTION.
PERFORM select_donnees.
=================================================
Liste des ARTICLES impactés pour les prévisions *
=================================================
===================================
PORTEFEUILLE DE COMMANDES D'ACHAT *
===================================
Construction itb_pca à partir de EKKO/EKPO.
w_index_ekpo = 1.
w_index_ekes = 1.
w_index_eket = 1.
w_index_mseg = 1.
SORT itb_ekko BY ebeln. "-FAE26446
SORT itb_ekpo BY ebeln ebelp.
SORT itb_makt BY matnr spras.
SORT itb_eket BY ebeln ebelp.
SORT itb_ekes BY ebeln ebelp.
SORT itb_mseg BY ebeln ebelp.
SORT itb_mkpf BY mblnr mjahr.
SORT itb_marc BY matnr werks. "+FAE26446
FAE 26446 remplacement
LOOP AT itb_ekko.
LOOP AT itb_ekpo.
FROM w_index_ekpo.
IF itb_ekko-ebeln = itb_ekpo-ebeln.
LOOP AT itb_ekpo.
READ TABLE itb_marc WITH KEY
matnr = itb_ekpo-matnr
werks = itb_ekpo-werks BINARY SEARCH.
CHECK sy-subrc = 0.
FAE 26446 fin remplacement
itb_pca-ebeln = itb_ekpo-ebeln.
itb_pca-ebelp = itb_ekpo-ebelp.
itb_pca-lifnr = itb_ekko-lifnr. "-FAE26446
itb_pca-lifnr = itb_ekpo-lifnr. "+FAE26446
itb_pca-ekgrp = itb_ekpo-ekgrp. "+FAE26446
itb_pca-dispo = itb_ekpo-dispo. "+FAE26446
itb_pca-matnr = itb_ekpo-matnr.
itb_pca-werks = itb_ekpo-werks.
Recherche du libellé article
READ TABLE itb_makt
WITH KEY matnr = itb_ekpo-matnr
spras = text-fra
BINARY SEARCH.
IF sy-subrc = 0.
itb_pca-maktx = itb_makt-maktx.
ELSE.
READ TABLE itb_makt
WITH KEY matnr = itb_ekpo-matnr
spras = text-ang
BINARY SEARCH.
IF sy-subrc = 0.
itb_pca-maktx = itb_makt-maktx.
ENDIF.
ENDIF.
IF NOT itb_ekpo-bpumn IS INITIAL.
itb_pca-menge = itb_ekpo-menge * itb_ekpo-bpumz /
itb_ekpo-bpumn.
ENDIF.
Sélect° ds la table EKES des dates de livraisons et des qtés
en transit
CLEAR w_temoin_ar.
CLEAR w_etens.
LOOP AT itb_ekes
FROM w_index_ekes.
IF itb_ekes-ebeln = itb_ekpo-ebeln
AND itb_ekes-ebelp = itb_ekpo-ebelp.
IF itb_ekes-ebtyp = text-arn.
itb_pca-eindt = itb_ekes-eindt.
w_temoin_ar = 'X'.
ELSE.
Si c'est une qté en transit alors on recupere
la quantité et la date.
IF itb_ekes-dabmg < itb_ekes-menge.
itb_pca-qtran = itb_pca-qtran + itb_ekes-menge -
itb_ekes-dabmg.
ENDIF.
IF itb_ekes-etens > w_etens.
w_etens = itb_ekes-etens.
itb_pca-dtran = itb_ekes-eindt.
ENDIF.
ENDIF.
ELSEIF itb_ekes-ebeln > itb_ekpo-ebeln
OR ( itb_ekes-ebeln = itb_ekpo-ebeln
AND itb_ekes-ebelp > itb_ekpo-ebelp ).
w_index_ekes = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
S'il n'y a pas d'AR alors récupérat° de la date livraison dans EKET.
LOOP AT itb_eket
FROM w_index_eket.
IF itb_eket-ebeln = itb_ekpo-ebeln
AND itb_eket-ebelp = itb_ekpo-ebelp.
IF w_temoin_ar IS INITIAL.
itb_pca-eindt = itb_eket-eindt.
ENDIF.
itb_pca-slfdt = itb_eket-slfdt.
Calcul du portefeuille fournisseur à partir de la
qté commandée et la qté reçue
itb_pca-attdu = itb_pca-attdu + itb_eket-menge -
itb_eket-wemng.
Calcul du montant du poste
itb_pca-netpr = itb_ekpo-netpr * itb_pca-attdu.
IF itb_ekpo-peinh NE 0.
itb_pca-netpr = itb_pca-netpr / itb_ekpo-peinh.
ENDIF.
Calcul quantité réceptionnée.
itb_pca-wemng = itb_pca-wemng + itb_eket-wemng.
Calcul du retard en nombre de jours calendaires
Le calcul du retard ne doit pas prendre en compte
le jour de livraison
ADD 1 TO itb_eket-eindt.
IF NOT itb_pca-attdu IS INITIAL
AND itb_eket-eindt LT sy-datum.
Calcul du retard en nombre de jours ouvrés
CLEAR w_retard.
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
EXPORTING
date_deb = itb_eket-eindt
date_fin = sy-datum
IMPORTING
jours = w_retard.
itb_pca-rtard = itb_pca-rtard + w_retard .
ENDIF.
ELSEIF itb_eket-ebeln > itb_ekpo-ebeln
OR ( itb_eket-ebeln = itb_ekpo-ebeln
AND itb_eket-ebelp > itb_ekpo-ebelp ).
w_index_eket = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
Recherche de la derniere date de livraison.
LOOP AT itb_mseg
FROM w_index_mseg.
IF itb_mseg-ebeln = itb_ekpo-ebeln
AND itb_mseg-ebelp = itb_ekpo-ebelp.
READ TABLE itb_mkpf
WITH KEY mblnr = itb_mseg-mblnr
mjahr = itb_mseg-mjahr
BINARY SEARCH.
IF sy-subrc = 0.
IF itb_mkpf-bldat > itb_pca-bldat.
itb_pca-bldat = itb_mkpf-bldat.
ENDIF.
ENDIF.
ELSEIF itb_mseg-ebeln > itb_ekpo-ebeln
OR ( itb_mseg-ebeln = itb_ekpo-ebeln
AND itb_mseg-ebelp > itb_ekpo-ebelp ).
w_index_mseg = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
APPEND itb_pca.
CLEAR itb_pca.
FAE26446 suppression parag. suivant
ELSEIF itb_ekpo-ebeln > itb_ekko-ebeln.
w_index_ekpo = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
Fin FAE26446
ENDLOOP.
=========================
PREVISIONS DE COMMANDES *
=========================
SORT itb_eord BY matnr werks lifnr ekgrp.
SORT itb_eban BY matnr werks flief ekgrp.
SORT itb_plaf BY matnr plwrk flief.
SORT itb_z03_bw_cmp1 BY matnr werks.
SORT itb_z03_bw_cmp2 BY matnr werks."+DE3K937051
SORT itb_pca BY matnr werks lifnr.
w_index_eban = 1.
w_index_plaf = 1.
w_index_z03_bw_cmp1 = 1.
w_index_pca = 1.
w_index_z03_bw_cmp2 = 1."+DE3K937051
Remplissage de la table des prévisions de commande.
LOOP AT itb_eord.
CLEAR: str_prev_pfc,
w_trouve.
MOVE-CORRESPONDING itb_eord TO str_index1.
MOVE-CORRESPONDING itb_eord TO str_index3_eord.
MOVE-CORRESPONDING itb_eord TO itb_prev_cde.
Recherche dans table division/article (MARC) afin de déterminer si
article PFS (prod fabriqué à stock) ou PFC (Prod fabriqué sur cde)
AT NEW werks.
READ TABLE itb_marc_eord
WITH KEY matnr = itb_eord-matnr
werks = itb_eord-werks
BINARY SEARCH.
IF sy-subrc NE 0.
CLEAR itb_marc_eord.
ENDIF.
ENDAT.
a - Prévisions pour les PFS : DA + OP *
*Calcul des quantités de commande.
IF itb_eord-disls = text-tl1.
itb_prev_cde-bstmi = itb_eord-bstfe.
ELSEIF itb_eord-disls = text-tl2
OR itb_eord-disls = text-tl3.
IF itb_eord-bstrf NE 0
AND itb_eord-bstmi = 0
AND itb_eord-bstma = 0.
itb_prev_cde-bstmi = itb_eord-bstrf.
ELSEIF itb_eord-bstrf NE 0
AND itb_eord-bstmi NE 0.
itb_prev_cde-bstmi = itb_eord-bstmi.
ELSEIF itb_eord-bstrf = itb_eord-bstma
AND itb_eord-bstrf NE 0
AND itb_eord-bstmi = 0.
itb_prev_cde-bstmi = itb_eord-bstma.
ENDIF.
ENDIF.
si article PFS (Prod fabriqué à stock) recherche des
demandes d'achat ou ordres planfiés
IF itb_marc_eord-strgr IN r_type_pfs.
Récupérat° calendrier de la division pour calcul correct lors de
l'ajout de eban-webaz ou plaf-webaz jours ouvrés
CLEAR w_trouve_pfs ."+DE3K937051
READ TABLE itb_t001w
WITH KEY werks = itb_eord-werks
BINARY SEARCH.
IF sy-subrc = 0.
LOOP AT itb_eban
FROM w_index_eban.
MOVE-CORRESPONDING itb_eban TO str_index2.
IF str_index1 = str_index2.
w_trouve_pfs = 'X'."+DE3K937051
si qte commandées pour la DA < quantité de la DA
IF itb_eban-bsmng < itb_eban-menge.
ajout de quantité de la DA - qte commandée pour la DA
PERFORM affect_da.
ENDIF.
ELSEIF str_index2 > str_index1.
w_index_eban = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ajout des quantité des OP (ordres planifiés)
LOOP AT itb_plaf
FROM w_index_plaf.
MOVE-CORRESPONDING itb_plaf TO str_index4.
str_index4-werks = itb_plaf-plwrk.
str_index4-lifnr = itb_plaf-flief.
IF str_index4 = str_index3_eord.
Ajout de webaz jours ouvrés à pedtr
CALL FUNCTION 'Z_03_MM_ADD_TO_FACTORYDATE'
EXPORTING
i_date = itb_plaf-pedtr
i_calendar_id = itb_t001w-fabkl
i_nb_days = itb_plaf-webaz
IMPORTING
o_date = w_dat_op
EXCEPTIONS
conv_error = 1
OTHERS = 2.
IF sy-subrc
If forecasts found in Z03_BW_CMP2 for the article
IF w_trouve_pfs = 'X'."-DE3K937602
Recalculation prev month M in fct of Nb of wrought days of the month
IF NOT itb_prev_cde-men00 IS INITIAL.
one does not hold any more account of the day in progress
w_lendemain = w_date0 + 1.
CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
EXPORTING
date_deb = w_lendemain
date_fin = w_fin_mois
IMPORTING
jours = w_nb_j.
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
EXPORTING
date = w_lendemain
IMPORTING
jours = w_nb_j_tot.
itb_prev_cde-men00 = itb_prev_cde-men00 * w_nb_j / w_nb_j_tot
*CLA DE3K925301 FAE27197
*to round has the higher entirety
itb_prev_cde-men00 = ceil( itb_prev_cde-men00 ). "DE3K938206-
ENDIF.
ENDIF."-DE3K937602
*End change BNI
b - Prévisions pour les PFC (Z03_BW_CMP1 puis rééquilibrage) *
Recherche des previsions dans Z03_BW_CMP1
si article PFC (Prod fabriqué sur cde) recherche des prévisions
IF NOT itb_marc_eord-strgr IN r_type_pfs.
CLEAR str_prev_pfc.
MOVE-CORRESPONDING itb_eord TO str_prev_pfc.
CLEAR w_trouve_pfc .
LOOP AT itb_z03_bw_cmp1
FROM w_index_z03_bw_cmp1.
MOVE-CORRESPONDING itb_z03_bw_cmp1 TO str_index7.
MOVE-CORRESPONDING itb_eord TO str_index6.
IF str_index6 = str_index7.
si on trouve des prévisions dans z03_bw_cmp1 pour la source
d'appro eord alors c'est un article PFC
w_trouve_pfc = 'X'.
CASE itb_z03_bw_cmp1-pdatu+0(6).
WHEN w_date0+0(6).
str_prev_pfc-men00 = itb_z03_bw_cmp1-plnmg.
WHEN w_date1+0(6).
str_prev_pfc-men01 = itb_z03_bw_cmp1-plnmg.
WHEN w_date2+0(6).
str_prev_pfc-men02 = itb_z03_bw_cmp1-plnmg.
WHEN w_date3+0(6).
str_prev_pfc-men03 = itb_z03_bw_cmp1-plnmg.
WHEN w_date4+0(6).
str_prev_pfc-men04 = itb_z03_bw_cmp1-plnmg.
WHEN w_date5+0(6).
str_prev_pfc-men05 = itb_z03_bw_cmp1-plnmg.
WHEN w_date6+0(6).
str_prev_pfc-men06 = itb_z03_bw_cmp1-plnmg.
WHEN OTHERS.
ENDCASE.
ELSEIF str_index7 > str_index6.
w_index_z03_bw_cmp1 = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
*Begin change BNI
Si des prévisions trouvées dans Z03_BW_CMP1 pour l'article
IF w_trouve_pfc = 'X'.
Recalcul prev mois M en fct du nb de jours ouvrés du mois
IF NOT str_prev_pfc-men00 IS INITIAL.
on ne tient plus compte du jour en cours
w_lendemain = w_date0 + 1.
CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
EXPORTING
date_deb = w_lendemain
date_fin = w_fin_mois
IMPORTING
jours = w_nb_j.
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
EXPORTING
date = w_lendemain
IMPORTING
jours = w_nb_j_tot.
str_prev_pfc-men00 = str_prev_pfc-men00 * w_nb_j / w_nb_j_tot.
*CLA DE3K925301 FAE27197
*arrondir a l'entier supèrieur
str_prev_pfc-men00 = ceil( str_prev_pfc-men00 ).
ENDIF.
Equilibrage PFC : commande/prévision du mois
Recherche COMMANDES cumulées pour M à M+6
CLEAR str_pca_pfc.
LOOP AT itb_pca
FROM w_index_pca.
MOVE-CORRESPONDING itb_pca TO str_index5.
IF str_index5 = str_index3_eord.
IF NOT itb_pca-menge IS INITIAL.
CASE itb_pca-eindt+0(6).
WHEN w_date0+0(6).
IF itb_pca-eindt >= w_date0.
str_pca_pfc-men00 = str_pca_pfc-men00 + itb_pca-menge.
ENDIF.
WHEN w_date1+0(6).
str_pca_pfc-men01 = str_pca_pfc-men01 + itb_pca-menge.
WHEN w_date2+0(6).
str_pca_pfc-men02 = str_pca_pfc-men02 + itb_pca-menge.
WHEN w_date3+0(6).
str_pca_pfc-men03 = str_pca_pfc-men03 + itb_pca-menge.
WHEN w_date4+0(6).
str_pca_pfc-men04 = str_pca_pfc-men04 + itb_pca-menge.
WHEN w_date5+0(6).
str_pca_pfc-men05 = str_pca_pfc-men05 + itb_pca-menge.
WHEN w_date6+0(6).
str_pca_pfc-men06 = str_pca_pfc-men06 + itb_pca-menge.
ENDCASE.
ENDIF."NOT itb_pca-menge IS INITIAL
ELSEIF str_index5 > str_index3_eord.
w_index_pca = sy-tabix.
EXIT.
ENDIF.
ENDLOOP."itb_pca
*. Equilibrer commande / prévision des mois : diminuer la quantité de
prévision de chaque mois par le portefeuille de commande client du
mois*. Si ce solde est négatif alors lui donner la valeur 0.
w_i = 0.
Ajustement commandes/prévisions pour les mois M à M+6
WHILE w_i .
Pour un mois, SI Prévisions > Commandes en cours
IF .
Prévisions = Prévisions - Commandes en cours
= 0.
ENDIF.
On passe au mois suivant
w_i = w_i + 1.
ENDWHILE.
MOVE str_prev_pfc-men00 TO itb_prev_cde-men00.
MOVE str_prev_pfc-men01 TO itb_prev_cde-men01.
MOVE str_prev_pfc-men02 TO itb_prev_cde-men02.
MOVE str_prev_pfc-men03 TO itb_prev_cde-men03.
MOVE str_prev_pfc-men04 TO itb_prev_cde-men04.
MOVE str_prev_pfc-men05 TO itb_prev_cde-men05.
MOVE str_prev_pfc-men06 TO itb_prev_cde-men06.
Hi
You check in SM50 by executing the programing, You will come to know which select is taking more time and accordingly you modify that select.
You can do SQL trace and Run time analysis and analyse and see.
check this and use
1) Dont use nested select statements
2) If possible use for all entries in addition
3) In the where addition make sure you give all the primary key
4) Use Index for the selection criteria.
5) You can also use inner joins
6) You can try to put the data from the first select statement into an Itab and then in order to select the data from the second table use for all entries in.
7) Use the runtime analysis SE30 and SQL Trace (ST05) to identify the performance and also to identify where the load is heavy, so that you can change the code accordingly
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/5d0db4c9-0e01-0010-b68f-9b1408d5f234
ABAP performance depends upon various factors and in devicded in three parts:
1. Database
2. ABAP
3. System
Run Any program using SE30 (performance analys) to improve performance refer to tips and trics section of SE30, Always remember that ABAP perfirmance is improved when there is least load on Database.
u can get an interactive grap in SE30 regarding this with a file.
also if u find runtime of parts of codes then use :
Switch on RTA Dynamically within ABAP Code
*To turn runtim analysis on within ABAP code insert the following code
SET RUN TIME ANALYZER ON.
*To turn runtim analysis off within ABAP code insert the following code
SET RUN TIME ANALYZER OFF.
Always check the driver internal tables is not empty, while using FOR ALL ENTRIES
Avoid for all entries in JOINS
Try to avoid joins and use FOR ALL ENTRIES.
Try to restrict the joins to 1 level only ie only for tables
Avoid using Select *.
Avoid having multiple Selects from the same table in the same object.
Try to minimize the number of variables to save memory.
The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)
Avoid creation of index as far as possible
Avoid operators like <>, > , < & like % in where clause conditions
Avoid select/select single statements in loops.
Try to use 'binary search' in READ internal table. Ensure table is sorted before using BINARY SEARCH.
Avoid using aggregate functions (SUM, MAX etc) in selects ( GROUP BY , HAVING,)
Avoid using ORDER BY in selects
Avoid Nested Selects
Avoid Nested Loops of Internal Tables
Try to use FIELD SYMBOLS.
Try to avoid into Corresponding Fields of
Avoid using Select Distinct, Use DELETE ADJACENT
Check the following Links
Re: performance tuning
Re: Performance tuning of program
http://www.sapgenie.com/abap/performance.htm
http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
check the below link
http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm
See the following link if it's any help:
http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
Check also http://service.sap.com/performance
and
books like
http://www.sap-press.com/product.cfm?account=&product=H951
http://www.sap-press.com/product.cfm?account=&product=H973
http://www.sap-img.com/abap/more-than-100-abap-interview-faqs.htm
http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
Performance tuning for Data Selection Statement
http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm
Debugger
http://help.sap.com/saphelp_47x200/helpdata/en/c6/617ca9e68c11d2b2ab080009b43351/content.htm
http://www.cba.nau.edu/haney-j/CIS497/Assignments/Debugging.doc
http://help.sap.com/saphelp_erp2005/helpdata/en/b3/d322540c3beb4ba53795784eebb680/frameset.htm
Run Time Analyser
http://help.sap.com/saphelp_47x200/helpdata/en/c6/617cafe68c11d2b2ab080009b43351/content.htm
SQL trace
http://help.sap.com/saphelp_47x200/helpdata/en/d1/801f7c454211d189710000e8322d00/content.htm
CATT - Computer Aided Testing Too
http://help.sap.com/saphelp_47x200/helpdata/en/b3/410b37233f7c6fe10000009b38f936/frameset.htm
Test Workbench
http://help.sap.com/saphelp_47x200/helpdata/en/a8/157235d0fa8742e10000009b38f889/frameset.htm
Coverage Analyser
http://help.sap.com/saphelp_47x200/helpdata/en/c7/af9a79061a11d4b3d4080009b43351/content.htm
Runtime Monitor
http://help.sap.com/saphelp_47x200/helpdata/en/b5/fa121cc15911d5993d00508b6b8b11/content.htm
Memory Inspector
http://help.sap.com/saphelp_47x200/helpdata/en/a2/e5fc84cc87964cb2c29f584152d74e/content.htm
ECATT - Extended Computer Aided testing tool.
http://help.sap.com/saphelp_47x200/helpdata/en/20/e81c3b84e65e7be10000000a11402f/frameset.htm
Just refer to these links...
performance
Performance
Performance Guide
performance issues...
Performance Tuning
Performance issues
performance tuning
performance tuning
You can go to the transaction SE30 to have the runtime analysis of your program.Also try the transaction SCI , which is SAP Code Inspector.
1 Always check the driver internal tables is not empty, while using FOR ALL ENTRIES
2 Avoid for all entries in JOINS
3 Try to avoid joins and use FOR ALL ENTRIES.
4 Try to restrict the joins to 1 level only ie only for 2 tables
5 Avoid using Select *.
6 Avoid having multiple Selects from the same table in the same object.
7 Try to minimize the number of variables to save memory.
8 The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)
9 Avoid creation of index as far as possible
10 Avoid operators like <>, > , < & like % in where clause conditions
11 Avoid select/select single statements in loops.
12 Try to use 'binary search' in READ internal table. Ensure table is sorted before using BINARY SEARCH.
13 Avoid using aggregate functions (SUM, MAX etc) in selects ( GROUP BY , HAVING,)
14 Avoid using ORDER BY in selects
15 Avoid Nested Selects
16 Avoid Nested Loops of Internal Tables
17 Try to use FIELD SYMBOLS.
18 Try to avoid into Corresponding Fields of
19 Avoid using Select Distinct, Use DELETE ADJACENT.
Regards
Anji -
Hi how to improve performence of this program
Hi all,
How to improve the performence of this program.....................
REPORT z03_gil010 NO STANDARD PAGE HEADING LINE-SIZE 130.
INCLUDE *
INCLUDE: z00_bci010. " Gestion des anomalies.
Déclaration des données *
Tables de la bases de données *
TABLES:
ekpo, " Poste document d'achat.
lfa1, " Base fournisseurs (généralités).
marc, " Données division de l'article.
z03_bw_cmp1,
eord, "Répertoire des sources appro. Achats
eina, "Fiche infos-achats - données générales
t024, "Groupes d'acheteurs
tvarv. "FAE17345+
Déclaration des données internes *
Déclaration de la table interne qui permet de recuperer les mois.
DATA: BEGIN OF itb_months OCCURS 12.
INCLUDE STRUCTURE t247.
DATA: END OF itb_months.
Table pour récupération d'infos sur les divisions
DATA: BEGIN OF itb_t001w OCCURS 0,
werks LIKE t001w-werks,
fabkl LIKE t001w-fabkl," Clé du calendrier d'entreprise
END OF itb_t001w.
Déclaration de la table interne contenant les infos sur l'adresse du
fournisseur.
DATA: BEGIN OF itb_adresse OCCURS 0,
lifnr LIKE lfa1-lifnr, " Numéro de compte fournisseur.
name1 LIKE lfa1-name1, " Nom 1.
name2 LIKE lfa1-name2, " Nom 2.
name3 LIKE lfa1-name3, " Nom 3.
name4 LIKE lfa1-name4, " Nom 4.
stras LIKE lfa1-stras, " N° de rue et nom de la rue.
pstlz LIKE lfa1-pstlz, " Code postal.
ort01 LIKE lfa1-ort01, " Localité.
pfach LIKE lfa1-pfach, " Boîte postale.
pstl2 LIKE lfa1-pstl2, " Code de la boîte postale.
land1 LIKE lfa1-land1, " Clé de pays.
landx LIKE t005t-landx, " Pays.
spras LIKE lfa1-spras, " Code langue
END OF itb_adresse.
Déclaration d'une table interne pour les informations sur les
prévisions de commande.
DATA: BEGIN OF itb_prev_cde OCCURS 0,
werks LIKE marc-werks, " Division
idnlf LIKE eina-idnlf, " ADDsde ref article frn
lifnr LIKE eord-lifnr, " N° fournisseur.
ekgrp LIKE marc-ekgrp, " Groupe d'acheteurs
dispo LIKE marc-dispo, " Code gestionnaire MRP
matnr LIKE eord-matnr, " Article.
maktx LIKE makt-maktx, " Désignation article.
bstmi LIKE marc-bstmi, " Quantité de commande.
men00 LIKE plaf-gsmng, " Quantité du mois en cours M.
men01 LIKE plaf-gsmng, " Quantité pour le mois M+1.
men02 LIKE plaf-gsmng, " Quantité pour le mois M+2.
men03 LIKE plaf-gsmng, " Quantité pour le mois M+3.
men04 LIKE plaf-gsmng, " Quantité pour le mois M+4.
men05 LIKE plaf-gsmng, " Quantité pour le mois M+5.
men06 LIKE plaf-gsmng. " Quantité pour le mois M+6.
DATA: END OF itb_prev_cde.
Structure de travail pour les commandes convernant les PFC
DATA str_pca_pfc LIKE itb_prev_cde.
*add sde
DATA str_eord_pfc LIKE itb_prev_cde.
Structure de travail pour les prévisons PFC
DATA str_prev_pfc LIKE itb_prev_cde.
Déclaration d'une table interne pour les informations sur le
portefeuille des commandes d'achat.
DATA: BEGIN OF itb_pca OCCURS 0,
werks LIKE ekpo-werks, " Division
idnlf LIKE eina-idnlf, " ADDsde ref article frn
lifnr LIKE eord-lifnr, " N° fournisseur.
ekgrp LIKE marc-ekgrp, " Groupe d'acheteurs
dispo LIKE marc-dispo, " Code gestionnaire MRP
matnr LIKE eord-matnr, " Article.
maktx LIKE makt-maktx, " Désignation article.
ebeln LIKE ekes-ebeln, " Numéro du document d'achat.
ebelp LIKE ekes-ebelp, " Numéro de poste du document d'achat.
slfdt LIKE eket-slfdt, " Date de livraison statistique
eindt LIKE ekes-eindt, " Date de livraison indiquée dans la
" confirmation de la cde.
menge LIKE ekes-menge, " Quantité indiquée dans la confirma-
" tion de la commande.
attdu LIKE eket-wemng, " Portefeuille fournisseur.
netpr LIKE ekpo-brtwr, " Prix net du document d'achat dans
" la devise du document.
rtard TYPE i, " Retard en jours ouvres.
wemng LIKE eket-wemng, " Quantité de l'entrée de marchandise.
bldat LIKE mkpf-bldat, " Date inscrite sur la pièce/sur le
" document.
qtran LIKE ekes-menge, " Quantité en transit.
dtran LIKE ekes-eindt. " Date du dernier avis de transit.
DATA: END OF itb_pca.
DATA: w_i TYPE i, "Compteur
w_i_char(1) TYPE c, "Texte pour récupérer compteur
w_nm_zone(20) TYPE c, "Nom zone pour assign au field-symbols
w_nb_j TYPE i, "Nb de jours ouvrés jusqu'à fin mois
w_nb_j_tot TYPE i. "Nb de jours ouvrés du mois
FIELD-SYMBOLS: TYPE ANY.
Déclaration d'une table contenant les fiches info achat.
DATA: BEGIN OF itb_eina OCCURS 0,
matnr LIKE eina-matnr,
lifnr LIKE eina-lifnr,
idfnl LIKE eina-idnlf.
DATA: END OF itb_eina.
Déclaration d'une table contenant les infos groupe acheteur.
*DATA: BEGIN OF itb_t024 OCCURS 0,
ekgrp LIKE t024-ekgrp,
eknam LIKE t024-eknam,
ektel LIKE t024-ektel,
telfx LIKE t024-telfx.
*DATA: END OF itb_t024.
Déclaration d'une table pour le transfert du fichier.
DATA: BEGIN OF itb_transfert OCCURS 0,
col00(8), "division
col00bis(20), "Reference article
col01(18), "No article
col02(45), "libelle article
col021(17), "Groupe acheteur
col022(13), "gestionnaire
col03(17), "qte commandée ou No de commande
col04(13), "Mois 1 ou No poste cde
col05(20), "Mois 2 ou délai initial
col06(33), "Mois 3 ou délai négocié
col07(13), "Mois 4 ou qté cdée
col08(13), "Mois 5 ou qté attendue
col09(13), "Mois 6 ou Montant attendu
col10(13), "Mois 7 ou retard
col11(13), "qte partielle livree
col12(13), "date livraison partielle
col13(13), "qté en transit
col14(13). "date
DATA: END OF itb_transfert.
Déclaration d'une table contenant la liste des fournisseurs.
DATA: BEGIN OF itb_lifnr OCCURS 0,
werks LIKE marc-werks,
idfnl LIKE eina-idnlf,
lifnr LIKE eord-lifnr,
ekgrp LIKE marc-ekgrp,
spras LIKE lfa1-spras,
eknam LIKE t024-eknam,
ektel LIKE t024-ektel,
telfx LIKE t024-telfx.
DATA: END OF itb_lifnr.
Déclaration d'une structure pour la selection dans la table MSEG.
DATA : BEGIN OF itb_mseg OCCURS 0,
mblnr LIKE mseg-mblnr,
mjahr LIKE mseg-mjahr,
ebeln LIKE mseg-ebeln,
ebelp LIKE mseg-ebelp,
END OF itb_mseg.
déclaration d'une structure pour la selection dans EKPO.
DATA : BEGIN OF itb_ekpo OCCURS 0,
lifnr LIKE ekko-lifnr,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
menge LIKE ekpo-menge,
bpumz LIKE ekpo-bpumz,
bpumn LIKE ekpo-bpumn,
matnr LIKE ekpo-matnr,
werks LIKE ekpo-werks,
netpr LIKE ekpo-netpr,
peinh LIKE ekpo-peinh, "Base de prix FAE17345+
ekgrp LIKE ekko-ekgrp, "AFT++
dispo LIKE marc-dispo, "AFT++
END OF itb_ekpo.
déclaration d'une structure pour la selection dans EKPO.
DATA : BEGIN OF itb_ekko OCCURS 0,
ebeln LIKE ekko-ebeln,
lifnr LIKE ekko-lifnr,
spras LIKE ekko-spras,
END OF itb_ekko.
déclaration d'une structure pour la selection dans EKES.
DATA : BEGIN OF itb_ekes OCCURS 0,
ebeln LIKE eket-ebeln,
ebelp LIKE eket-ebelp,
ebtyp LIKE ekes-ebtyp,
eindt LIKE ekes-eindt,
menge LIKE ekes-menge,
dabmg LIKE ekes-dabmg,
etens LIKE ekes-etens,
END OF itb_ekes.
déclaration d'une structure pour la selection dans EKET
DATA : BEGIN OF itb_eket OCCURS 0,
ebeln LIKE eket-ebeln,
ebelp LIKE eket-ebelp,
menge LIKE eket-menge,
wemng LIKE eket-wemng,
eindt LIKE eket-eindt,
slfdt LIKE eket-slfdt,
END OF itb_eket.
déclaration d'une structure pour la selection dans MKPF.
DATA : BEGIN OF itb_mkpf OCCURS 0,
mblnr LIKE mkpf-mblnr,
mjahr LIKE mkpf-mjahr,
bldat LIKE mkpf-bldat,
END OF itb_mkpf.
Déclaration d'une structure pour la sélection dans EORD.
DATA : BEGIN OF itb_eord OCCURS 0,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
lifnr LIKE eord-lifnr,
ekgrp LIKE marc-ekgrp,
dispo LIKE marc-dispo, "DE3K924352
disls LIKE marc-disls,
bstfe LIKE marc-bstfe,
bstrf LIKE marc-bstrf,
bstmi LIKE marc-bstmi,
bstma LIKE marc-bstma,
END OF itb_eord.
DATA : BEGIN OF itb_eordw OCCURS 0.
INCLUDE STRUCTURE itb_eord.
DATA : END OF itb_eordw.
Déclaration d'une structure pour la sélection dans MAKT.
DATA : BEGIN OF itb_makt OCCURS 0,
matnr LIKE makt-matnr,
spras LIKE makt-spras,
maktx LIKE makt-maktx,
END OF itb_makt.
Déclaration d'une structure pour la sélection dans EBAN.
DATA : BEGIN OF itb_eban OCCURS 0,
matnr LIKE eban-matnr,
werks LIKE eban-werks,
flief LIKE eban-flief,
lfdat LIKE eban-lfdat,
menge LIKE eban-menge,
bsmng LIKE eban-bsmng,
webaz LIKE eban-webaz,
ekgrp LIKE eban-ekgrp,
ebeln LIKE eban-ebeln,
banfn LIKE eban-banfn,
bnfpo LIKE eban-bnfpo, "DB3K900702+
END OF itb_eban.
Déclaration d'une structure pour la sélection dans PLAF.
DATA : BEGIN OF itb_plaf OCCURS 0,
plnum LIKE plaf-plnum, "DB3K900702+
matnr LIKE plaf-matnr,
plwrk LIKE plaf-plwrk,
flief LIKE plaf-flief,
pedtr LIKE plaf-pedtr,
gsmng LIKE plaf-gsmng,
webaz LIKE plaf-webaz,
END OF itb_plaf.
Déclaration d'une structure pour la sélection dans MARC.
DATA : BEGIN OF itb_marc OCCURS 0,
matnr LIKE marc-matnr,
werks LIKE marc-werks,
disls LIKE marc-disls,
bstrf LIKE marc-bstrf,
bstmi LIKE marc-bstmi,
bstma LIKE marc-bstma,
bstfe LIKE marc-bstfe,
ekgrp LIKE marc-ekgrp,
dispo LIKE marc-dispo,
END OF itb_marc.
DATA : BEGIN OF itb_marc_eord OCCURS 0,
matnr LIKE marc-matnr,
werks LIKE marc-werks,
strgr LIKE marc-strgr, "groupe de stratégie planif
END OF itb_marc_eord.
DATA : BEGIN OF itb_z03_bw_cmp1 OCCURS 0,
matnr LIKE z03_bw_cmp1-matnr,
werks LIKE z03_bw_cmp1-werks,
pdatu LIKE z03_bw_cmp1-pdatu,
plnmg LIKE z03_bw_cmp1-plnmg,
END OF itb_z03_bw_cmp1.
Begin change BNI <DE3K937051>
DATA : BEGIN OF itb_z03_bw_cmp2 OCCURS 0,
matnr LIKE z03_bw_cmp2-matnr,
werks LIKE z03_bw_cmp2-werks,
pdatu LIKE z03_bw_cmp2-pdatu,
plnmg LIKE z03_bw_cmp2-plnmg,
END OF itb_z03_bw_cmp2.
*End change BNI
DATA : BEGIN OF str_index1,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index1.
DATA : BEGIN OF str_index2,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index2.
DATA : BEGIN OF str_index3_eord,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index3_eord.
DATA : BEGIN OF str_index4,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index4.
DATA : BEGIN OF str_index5,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index5.
DATA : BEGIN OF str_index6,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index6.
DATA : BEGIN OF str_index7,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
END OF str_index7.
Déclaration des variables de debut et de fin de mois.
DATA: w_debut_mois LIKE sy-datum,
w_debut_periode LIKE sy-datum,
w_fin_mois LIKE sy-datum,
w_fin_periode LIKE sy-datum.
Déclaration des variables pour les dates.
DATA: w_date0 LIKE sy-datum,
w_date1 LIKE sy-datum,
w_date2 LIKE sy-datum,
w_date3 LIKE sy-datum,
w_date4 LIKE sy-datum,
w_date5 LIKE sy-datum,
w_date6 LIKE sy-datum,
w_datejour LIKE sy-datum, "FAE15269
w_dat_da LIKE eban-lfdat,
w_dat_op LIKE plaf-pedtr,
w_mois0 LIKE t247-ltx,
w_mois1 LIKE t247-ltx,
w_mois2 LIKE t247-ltx,
w_mois3 LIKE t247-ltx,
w_mois4 LIKE t247-ltx,
w_mois5 LIKE t247-ltx,
w_mois6 LIKE t247-ltx,
w_lendemain LIKE sy-datum. "FAE17345+
Temoin d'un AR dans la commande d'achat.
DATA: w_temoin_ar.
Numéro de la confirmation de la commande
DATA : w_etens LIKE ekes-etens.
Déclaration des variables pour le nom des fichiers.
DATA: w_nom_fichier LIKE rlgrap-filename,
w_fichier LIKE rlgrap-filename,
w_racine LIKE rlgrap-filename,
w_file LIKE rlgrap-filename.
Déclaration d'une table interne pour le transfert.
DATA: BEGIN OF itb_trans OCCURS 0,
w_ligne(320).
DATA: END OF itb_trans.
Déclaration d'une variable pour rechercher les enregistrements vides.
DATA: w_compteur TYPE i,
w_compteur1 TYPE i,
w_compteur2 TYPE i,
w_retard TYPE i, " Retard en jours ouvres.
w_trouve_pfc TYPE c, "addsde
w_trouve_pfs TYPE c, "+DE3K937051
w_trouve TYPE c.
*Index pour les LOOP
DATA : w_index_ekpo LIKE sy-tabix,
w_index_ekes LIKE sy-tabix,
w_index_eket LIKE sy-tabix,
w_index_mseg LIKE sy-tabix,
w_index_eban LIKE sy-tabix,
w_index_plaf LIKE sy-tabix,
w_index_pca LIKE sy-tabix,
w_index_z03_bw_cmp1 LIKE sy-tabix,
w_index_z03_bw_cmp2 LIKE sy-tabix."+DE3K937051
RANGES : r_type_pfs FOR marc-strgr.
*fichier sur serveur +EDR231003
DATA : w_chemin LIKE filename-fileintern, "nom du fichier
w_date_fichier(12) TYPE c, "Date format DD_MM_AA
w_csv(307) TYPE c. "ligne du fichier format CSV
CONSTANTS: k_imputation_m LIKE eban-knttp VALUE 'M'. "FAE19001+
Description de l écran de sélection *
Paramètres "UTILISATION" *
Ouverture d'un block de sélection pour le(s) fournisseur(s).
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-bl1.
Sélection division(s)
SELECT-OPTIONS: s_werks FOR ekpo-werks.
Sélection fournisseur(s).
SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr OBLIGATORY.
Sélection du Groupe d'acheteur
*SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp. "-FAE26446
*SELECT-OPTIONS: s_dispo FOR marc-dispo. "-FAE26446
SELECTION-SCREEN END OF BLOCK block1.
FAE 26446 : ajout
SELECTION-SCREEN BEGIN OF BLOCK block3 WITH FRAME TITLE text-bl3.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_ekgrp RADIOBUTTON GROUP g3.
SELECTION-SCREEN COMMENT 5(24) text-001 FOR FIELD p_ekgrp.
SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_dispo RADIOBUTTON GROUP g3.
SELECTION-SCREEN COMMENT 5(24) text-002 FOR FIELD p_dispo.
SELECT-OPTIONS: s_dispo FOR marc-dispo.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK block3.
FAE 26446 : fin ajout
Paramètres "SYSTEME" *
Saut de 2 lignes.
SELECTION-SCREEN: SKIP 2.
Ouverture d'un block de sélection pour l'adresse physique du fichier.
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-bl2.
PARAMETERS: p_pc RADIOBUTTON GROUP rad1 DEFAULT 'X', "+EDR231003
p_fic_pc LIKE rlgrap-filename. "+EDR231003
SELECTION-SCREEN SKIP. "+EDR231003
PARAMETERS : p_serve RADIOBUTTON GROUP rad1, "+EDR231003
p_fic_se LIKE filename-fileintern "+EDR231003
DEFAULT 'Z03_PREV_COMMANDES'. "+EDR231003
SELECTION-SCREEN END OF BLOCK block2.
Logique de traitement *
INITIALIZATION *
INITIALIZATION.
Date du jour
MOVE sy-datum TO w_datejour. "FAE15269
Gestion des anomalies.
MOVE text-lb1 TO w_lb_traitement.
PERFORM f930_init USING sy-cprog '30'.
Fin de la gestions des anomalies.
Récuperation des mois dans la table interne 'ITB_MONTHS'.
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
language = sy-langu
TABLES
month_names = itb_months
EXCEPTIONS
month_names_not_found = 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.
Récupération des differentes periodes.
PERFORM f100_recuperation_date TABLES itb_months.
Récupération du debut du mois.
CONCATENATE sy-datlo(6) '01' INTO w_debut_mois.
MOVE: w_debut_mois TO w_debut_periode.
Récupération du dernier jour du mois.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = sy-datlo
IMPORTING
last_day_of_month = w_fin_mois
EXCEPTIONS
day_in_no_date = 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.
TOP-OF-PAGE *
TOP-OF-PAGE.
CALL FUNCTION 'Z_00_BC_TOP_OF_PAGE'
EXPORTING
p_linsz = k_ligne
p_pagno = sy-pagno
p_prog = sy-cprog
p_projet = k_projet
p_societe = k_societe
p_sujet = sy-title.
END-OF-PAGE *
END-OF-PAGE.
AT SELECTION-SCREEN *
FAE 26446 : ajout
AT SELECTION-SCREEN ON BLOCK block3.
IF NOT ( s_ekgrp IS INITIAL )
AND NOT ( s_dispo IS INITIAL ).
MESSAGE e394(z03_mm).
ENDIF.
IF p_ekgrp = 'X'.
IF s_ekgrp IS INITIAL.
MESSAGE e395(z03_mm).
ENDIF.
ELSE.
IF s_dispo IS INITIAL.
MESSAGE e396(z03_mm).
ENDIF.
ENDIF.
fae26446 fin ajout
AT SELECTION-SCREEN ON BLOCK block2.
IF p_pc = 'X'.
IF p_fic_pc IS INITIAL.
*Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
MESSAGE e021(z03_mm).
ENDIF.
ELSE.
IF p_fic_se IS INITIAL.
*Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
MESSAGE e021(z03_mm).
ENDIF.
ENDIF.
Création du matchcode pour la selection du fichier local.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fic_pc.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = p_fic_pc
def_path = 'C:'
mask = text-ma1
mode = 'S'
title = text-sel
IMPORTING
filename = p_fic_pc
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc NE 0 AND sy-subrc NE 3.
MESSAGE e032(z03_mm).
ENDIF.
START-OF-SELECTION *
START-OF-SELECTION.
PERFORM select_donnees.
=================================================
Liste des ARTICLES impactés pour les prévisions *
=================================================
===================================
PORTEFEUILLE DE COMMANDES D'ACHAT *
===================================
Construction itb_pca à partir de EKKO/EKPO.
w_index_ekpo = 1.
w_index_ekes = 1.
w_index_eket = 1.
w_index_mseg = 1.
SORT itb_ekko BY ebeln. "-FAE26446
SORT itb_ekpo BY ebeln ebelp.
SORT itb_makt BY matnr spras.
SORT itb_eket BY ebeln ebelp.
SORT itb_ekes BY ebeln ebelp.
SORT itb_mseg BY ebeln ebelp.
SORT itb_mkpf BY mblnr mjahr.
SORT itb_marc BY matnr werks. "+FAE26446
FAE 26446 remplacement
LOOP AT itb_ekko.
LOOP AT itb_ekpo.
FROM w_index_ekpo.
IF itb_ekko-ebeln = itb_ekpo-ebeln.
LOOP AT itb_ekpo.
READ TABLE itb_marc WITH KEY
matnr = itb_ekpo-matnr
werks = itb_ekpo-werks BINARY SEARCH.
CHECK sy-subrc = 0.
FAE 26446 fin remplacement
itb_pca-ebeln = itb_ekpo-ebeln.
itb_pca-ebelp = itb_ekpo-ebelp.
itb_pca-lifnr = itb_ekko-lifnr. "-FAE26446
itb_pca-lifnr = itb_ekpo-lifnr. "+FAE26446
itb_pca-ekgrp = itb_ekpo-ekgrp. "+FAE26446
itb_pca-dispo = itb_ekpo-dispo. "+FAE26446
itb_pca-matnr = itb_ekpo-matnr.
itb_pca-werks = itb_ekpo-werks.
Recherche du libellé article
READ TABLE itb_makt
WITH KEY matnr = itb_ekpo-matnr
spras = text-fra
BINARY SEARCH.
IF sy-subrc = 0.
itb_pca-maktx = itb_makt-maktx.
ELSE.
READ TABLE itb_makt
WITH KEY matnr = itb_ekpo-matnr
spras = text-ang
BINARY SEARCH.
IF sy-subrc = 0.
itb_pca-maktx = itb_makt-maktx.
ENDIF.
ENDIF.
IF NOT itb_ekpo-bpumn IS INITIAL.
itb_pca-menge = itb_ekpo-menge * itb_ekpo-bpumz /
itb_ekpo-bpumn.
ENDIF.
Sélect° ds la table EKES des dates de livraisons et des qtés
en transit
CLEAR w_temoin_ar.
CLEAR w_etens.
LOOP AT itb_ekes
FROM w_index_ekes.
IF itb_ekes-ebeln = itb_ekpo-ebeln
AND itb_ekes-ebelp = itb_ekpo-ebelp.
IF itb_ekes-ebtyp = text-arn.
itb_pca-eindt = itb_ekes-eindt.
w_temoin_ar = 'X'.
ELSE.
Si c'est une qté en transit alors on recupere
la quantité et la date.
IF itb_ekes-dabmg < itb_ekes-menge.
itb_pca-qtran = itb_pca-qtran + itb_ekes-menge -
itb_ekes-dabmg.
ENDIF.
IF itb_ekes-etens > w_etens.
w_etens = itb_ekes-etens.
itb_pca-dtran = itb_ekes-eindt.
ENDIF.
ENDIF.
ELSEIF itb_ekes-ebeln > itb_ekpo-ebeln
OR ( itb_ekes-ebeln = itb_ekpo-ebeln
AND itb_ekes-ebelp > itb_ekpo-ebelp ).
w_index_ekes = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
S'il n'y a pas d'AR alors récupérat° de la date livraison dans EKET.
LOOP AT itb_eket
FROM w_index_eket.
IF itb_eket-ebeln = itb_ekpo-ebeln
AND itb_eket-ebelp = itb_ekpo-ebelp.
IF w_temoin_ar IS INITIAL.
itb_pca-eindt = itb_eket-eindt.
ENDIF.
itb_pca-slfdt = itb_eket-slfdt.
Calcul du portefeuille fournisseur à partir de la
qté commandée et la qté reçue
itb_pca-attdu = itb_pca-attdu + itb_eket-menge -
itb_eket-wemng.
Calcul du montant du poste
itb_pca-netpr = itb_ekpo-netpr * itb_pca-attdu.
IF itb_ekpo-peinh NE 0.
itb_pca-netpr = itb_pca-netpr / itb_ekpo-peinh.
ENDIF.
Calcul quantité réceptionnée.
itb_pca-wemng = itb_pca-wemng + itb_eket-wemng.
Calcul du retard en nombre de jours calendaires
Le calcul du retard ne doit pas prendre en compte
le jour de livraison
ADD 1 TO itb_eket-eindt.
IF NOT itb_pca-attdu IS INITIAL
AND itb_eket-eindt LT sy-datum.
Calcul du retard en nombre de jours ouvrés
CLEAR w_retard.
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
EXPORTING
date_deb = itb_eket-eindt
date_fin = sy-datum
IMPORTING
jours = w_retard.
itb_pca-rtard = itb_pca-rtard + w_retard .
ENDIF.
ELSEIF itb_eket-ebeln > itb_ekpo-ebeln
OR ( itb_eket-ebeln = itb_ekpo-ebeln
AND itb_eket-ebelp > itb_ekpo-ebelp ).
w_index_eket = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
Recherche de la derniere date de livraison.
LOOP AT itb_mseg
FROM w_index_mseg.
IF itb_mseg-ebeln = itb_ekpo-ebeln
AND itb_mseg-ebelp = itb_ekpo-ebelp.
READ TABLE itb_mkpf
WITH KEY mblnr = itb_mseg-mblnr
mjahr = itb_mseg-mjahr
BINARY SEARCH.
IF sy-subrc = 0.
IF itb_mkpf-bldat > itb_pca-bldat.
itb_pca-bldat = itb_mkpf-bldat.
ENDIF.
ENDIF.
ELSEIF itb_mseg-ebeln > itb_ekpo-ebeln
OR ( itb_mseg-ebeln = itb_ekpo-ebeln
AND itb_mseg-ebelp > itb_ekpo-ebelp ).
w_index_mseg = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
APPEND itb_pca.
CLEAR itb_pca.
FAE26446 suppression parag. suivant
ELSEIF itb_ekpo-ebeln > itb_ekko-ebeln.
w_index_ekpo = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
Fin FAE26446
ENDLOOP.
=========================
PREVISIONS DE COMMANDES *
=========================
SORT itb_eord BY matnr werks lifnr ekgrp.
SORT itb_eban BY matnr werks flief ekgrp.
SORT itb_plaf BY matnr plwrk flief.
SORT itb_z03_bw_cmp1 BY matnr werks.
SORT itb_z03_bw_cmp2 BY matnr werks."+DE3K937051
SORT itb_pca BY matnr werks lifnr.
w_index_eban = 1.
w_index_plaf = 1.
w_index_z03_bw_cmp1 = 1.
w_index_pca = 1.
w_index_z03_bw_cmp2 = 1."+DE3K937051
Remplissage de la table des prévisions de commande.
LOOP AT itb_eord.
CLEAR: str_prev_pfc,
w_trouve.
MOVE-CORRESPONDING itb_eord TO str_index1.
MOVE-CORRESPONDING itb_eord TO str_index3_eord.
MOVE-CORRESPONDING itb_eord TO itb_prev_cde.
Recherche dans table division/article (MARC) afin de déterminer si
article PFS (prod fabriqué à stock) ou PFC (Prod fabriqué sur cde)
AT NEW werks.
READ TABLE itb_marc_eord
WITH KEY matnr = itb_eord-matnr
werks = itb_eord-werks
BINARY SEARCH.
IF sy-subrc NE 0.
CLEAR itb_marc_eord.
ENDIF.
ENDAT.
a - Prévisions pour les PFS : DA + OP *
*Calcul des quantités de commande.
IF itb_eord-disls = text-tl1.
itb_prev_cde-bstmi = itb_eord-bstfe.
ELSEIF itb_eord-disls = text-tl2
OR itb_eord-disls = text-tl3.
IF itb_eord-bstrf NE 0
AND itb_eord-bstmi = 0
AND itb_eord-bstma = 0.
itb_prev_cde-bstmi = itb_eord-bstrf.
ELSEIF itb_eord-bstrf NE 0
AND itb_eord-bstmi NE 0.
itb_prev_cde-bstmi = itb_eord-bstmi.
ELSEIF itb_eord-bstrf = itb_eord-bstma
AND itb_eord-bstrf NE 0
AND itb_eord-bstmi = 0.
itb_prev_cde-bstmi = itb_eord-bstma.
ENDIF.
ENDIF.
si article PFS (Prod fabriqué à stock) recherche des
demandes d'achat ou ordres planfiés
IF itb_marc_eord-strgr IN r_type_pfs.
Récupérat° calendrier de la division pour calcul correct lors de
l'ajout de eban-webaz ou plaf-webaz jours ouvrés
CLEAR w_trouve_pfs ."+DE3K937051
READ TABLE itb_t001w
WITH KEY werks = itb_eord-werks
BINARY SEARCH.
IF sy-subrc = 0.
LOOP AT itb_eban
FROM w_index_eban.
MOVE-CORRESPONDING itb_eban TO str_index2.
IF str_index1 = str_index2.
w_trouve_pfs = 'X'."+DE3K937051
si qte commandées pour la DA < quantité de la DA
IF itb_eban-bsmng < itb_eban-menge.
ajout de quantité de la DA - qte commandée pour la DA
PERFORM affect_da.
ENDIF.
ELSEIF str_index2 > str_index1.
w_index_eban = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ajout des quantité des OP (ordres planifiés)
LOOP AT itb_plaf
FROM w_index_plaf.
MOVE-CORRESPONDING itb_plaf TO str_index4.
str_index4-werks = itb_plaf-plwrk.
str_index4-lifnr = itb_plaf-flief.
IF str_index4 = str_index3_eord.
Ajout de webaz jours ouvrés à pedtr
CALL FUNCTION 'Z_03_MM_ADD_TO_FACTORYDATE'
EXPORTING
i_date = itb_plaf-pedtr
i_calendar_id = itb_t001w-fabkl
i_nb_days = itb_plaf-webaz
IMPORTING
o_date = w_dat_op
EXCEPTIONS
conv_error = 1
OTHERS = 2.
IF sy-subrc
If forecasts found in Z03_BW_CMP2 for the article
IF w_trouve_pfs = 'X'."-DE3K937602
Recalculation prev month M in fct of Nb of wrought days of the month
IF NOT itb_prev_cde-men00 IS INITIAL.
one does not hold any more account of the day in progress
w_lendemain = w_date0 + 1.
CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
EXPORTING
date_deb = w_lendemain
date_fin = w_fin_mois
IMPORTING
jours = w_nb_j.
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
EXPORTING
date = w_lendemain
IMPORTING
jours = w_nb_j_tot.
itb_prev_cde-men00 = itb_prev_cde-men00 * w_nb_j / w_nb_j_tot
*CLA DE3K925301 FAE27197
*to round has the higher entirety
itb_prev_cde-men00 = ceil( itb_prev_cde-men00 ). "DE3K938206-
ENDIF.
ENDIF."-DE3K937602
*End change BNI
b - Prévisions pour les PFC (Z03_BW_CMP1 puis rééquilibrage) *
Recherche des previsions dans Z03_BW_CMP1
si article PFC (Prod fabriqué sur cde) recherche des prévisions
IF NOT itb_marc_eord-strgr IN r_type_pfs.
CLEAR str_prev_pfc.
MOVE-CORRESPONDING itb_eord TO str_prev_pfc.
CLEAR w_trouve_pfc .
LOOP AT itb_z03_bw_cmp1
FROM w_index_z03_bw_cmp1.
MOVE-CORRESPONDING itb_z03_bw_cmp1 TO str_index7.
MOVE-CORRESPONDING itb_eord TO str_index6.
IF str_index6 = str_index7.
si on trouve des prévisions dans z03_bw_cmp1 pour la source
d'appro eord alors c'est un article PFC
w_trouve_pfc = 'X'.
CASE itb_z03_bw_cmp1-pdatu+0(6).
WHEN w_date0+0(6).
str_prev_pfc-men00 = itb_z03_bw_cmp1-plnmg.
WHEN w_date1+0(6).
str_prev_pfc-men01 = itb_z03_bw_cmp1-plnmg.
WHEN w_date2+0(6).
str_prev_pfc-men02 = itb_z03_bw_cmp1-plnmg.
WHEN w_date3+0(6).
str_prev_pfc-men03 = itb_z03_bw_cmp1-plnmg.
WHEN w_date4+0(6).
str_prev_pfc-men04 = itb_z03_bw_cmp1-plnmg.
WHEN w_date5+0(6).
str_prev_pfc-men05 = itb_z03_bw_cmp1-plnmg.
WHEN w_date6+0(6).
str_prev_pfc-men06 = itb_z03_bw_cmp1-plnmg.
WHEN OTHERS.
ENDCASE.
ELSEIF str_index7 > str_index6.
w_index_z03_bw_cmp1 = sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
*Begin change BNI
Si des prévisions trouvées dans Z03_BW_CMP1 pour l'article
IF w_trouve_pfc = 'X'.
Recalcul prev mois M en fct du nb de jours ouvrés du mois
IF NOT str_prev_pfc-men00 IS INITIAL.
on ne tient plus compte du jour en cours
w_lendemain = w_date0 + 1.
CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
EXPORTING
date_deb = w_lendemain
date_fin = w_fin_mois
IMPORTING
jours = w_nb_j.
CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
EXPORTING
date = w_lendemain
IMPORTING
jours = w_nb_j_tot.
str_prev_pfc-men00 = str_prev_pfc-men00 * w_nb_j / w_nb_j_tot.
*CLA DE3K925301 FAE27197
*arrondir a l'entier supèrieur
str_prev_pfc-men00 = ceil( str_prev_pfc-men00 ).
ENDIF.
Equilibrage PFC : commande/prévision du mois
Recherche COMMANDES cumulées pour M à M+6
CLEAR str_pca_pfc.
LOOP AT itb_pca
FROM w_index_pca.
MOVE-CORRESPONDING itb_pca TO str_index5.
IF str_index5 = str_index3_eord.
IF NOT itb_pca-menge IS INITIAL.
CASE itb_pca-eindt+0(6).
WHEN w_date0+0(6).
IF itb_pca-eindt >= w_date0.
str_pca_pfc-men00 = str_pca_pfc-men00 + itb_pca-menge.
ENDIF.
WHEN w_date1+0(6).
str_pca_pfc-men01 = str_pca_pfc-men01 + itb_pca-menge.
WHEN w_date2+0(6).
str_pca_pfc-men02 = str_pca_pfc-men02 + itb_pca-menge.
WHEN w_date3+0(6).
str_pca_pfc-men03 = str_pca_pfc-men03 + itb_pca-menge.
WHEN w_date4+0(6).
str_pca_pfc-men04 = str_pca_pfc-men04 + itb_pca-menge.
WHEN w_date5+0(6).
str_pca_pfc-men05 = str_pca_pfc-men05 + itb_pca-menge.
WHEN w_date6+0(6).
str_pca_pfc-men06 = str_pca_pfc-men06 + itb_pca-menge.
ENDCASE.
ENDIF."NOT itb_pca-menge IS INITIAL
ELSEIF str_index5 > str_index3_eord.
w_index_pca = sy-tabix.
EXIT.
ENDIF.
ENDLOOP."itb_pca
*. Equilibrer commande / prévision des mois : diminuer la quantité de
prévision de chaque mois par le portefeuille de commande client du
mois*. Si ce solde est négatif alors lui donner la valeur 0.
w_i = 0.
Ajustement commandes/prévisions pour les mois M à M+6
WHILE w_i .
Pour un mois, SI Prévisions > Commandes en cours
IF .
Prévisions = Prévisions - Commandes en cours
= 0.
ENDIF.
On passe au mois suivant
w_i = w_i + 1.
ENDWHILE.
MOVE str_prev_pfc-men00 TO itb_prev_cde-men00.
MOVE str_prev_pfc-men01 TO itb_prev_cde-men01.
MOVE str_prev_pfc-men02 TO itb_prev_cde-men02.
MOVE str_prev_pfc-men03 TO itb_prev_cde-men03.
MOVE str_prev_pfc-men04 TO itb_prev_cde-men04.
MOVE str_prev_pfc-men05 TO itb_prev_cde-men05.
MOVE str_prev_pfc-men06 TO itb_prev_cde-men06.
ENDIF. "w_trouve_pfc = 'X'.
ENDIF.
*recherche du libellé articleHi,
see this link, useful tips, links and transactions for best performance, by Anji.
https://forums.sdn.sap.com/click.jspa?searchID=5967263&messageID=4260111
Regards -
One example for edit the grid in oops and provide f4 help for particular field in Grid
Hi all
Here is the code for that editable Grid
*& Report YVAMC_EDIT_GRID
REPORT YVAMC_EDIT_GRID.
DATA GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID .
*--- Name of the custom control added on the screen
DATA GC_CUSTOM_CONTROL_NAME TYPE SCRFNAME VALUE 'CC1_ALV' .
*--- Custom container instance reference
DATA GR_CCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER .
*--- Field catalog table
DATA GT_FIELDCAT TYPE LVC_T_FCAT .
TYPES: BEGIN OF IT_LIST,
BANFN TYPE EBAN-BANFN,
BNFPO TYPE EBAN-BNFPO,
BSART TYPE EBAN-BSART,
BSTYP TYPE EBAN-BSTYP,
BSAKZ TYPE EBAN-BSAKZ,
LOEKZ TYPE EBAN-LOEKZ,
STATU TYPE EBAN-STATU,
ESTKZ TYPE EBAN-ESTKZ,
FRGKZ TYPE EBAN-FRGKZ,
FRGZU TYPE EBAN-FRGZU,
END OF IT_LIST.
DATA: GT_LIST TYPE STANDARD TABLE OF IT_LIST,
WA_LIST TYPE IT_LIST.
DATA GS_LAYOUT TYPE LVC_S_LAYO .
DATA OK_CODE TYPE SY-UCOMM.
DATA ZFLAG.
** data for event handling
DATA: GS_F4 TYPE LVC_S_F4,
GT_F4 TYPE LVC_T_F4.
START-OF-SELECTION.
SELECT BANFN
BNFPO
BSART
BSTYP
BSAKZ
LOEKZ
STATU
ESTKZ
FRGKZ
FRGZU
FROM EBAN INTO TABLE GT_LIST.
CALL SCREEN 9000.
*& Module DISPLAY_ALV OUTPUT
* text
MODULE STATUS_9000 OUTPUT.
set pf-status 'ZNEW_STS'.
PERFORM DISPLAY_ALV.
ENDMODULE. " DISPLAY_ALV OUTPUT
*& Module USER_COMMAND_9000 INPUT
* text
MODULE USER_COMMAND_9000 INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'EDIT'.
ZFLAG = '1'.
PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
PERFORM REGISTER_EDIT.
WHEN 'DISPLAY'.
ZFLAG = '0'.
PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*& Form DISPLAY_ALV
* text
FORM DISPLAY_ALV.
IF GR_ALVGRID IS INITIAL.
CREATE OBJECT GR_CCONTAINER
EXPORTING
* parent =
CONTAINER_NAME = GC_CUSTOM_CONTROL_NAME .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT GR_ALVGRID
EXPORTING
I_PARENT = GR_CCONTAINER.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*----Preparing field catalog.
PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT .
CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_OUTTAB = GT_LIST[]
IT_FIELDCATALOG = GT_FIELDCAT
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL METHOD GR_ALVGRID->REFRESH_TABLE_DISPLAY
* EXPORTING
* is_stable =
* i_soft_refresh =
* EXCEPTIONS
* finished = 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.
ENDIF.
ENDFORM. "DISPLAY_ALV
*& Form prepare_field_catalog
* text
* -->PT_FIELDCAT text
FORM PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
DATA LS_FCAT TYPE LVC_S_FCAT .
LS_FCAT-FIELDNAME = 'BANFN' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '10' .
LS_FCAT-COLTEXT = 'Requisition no' .
* LS_FCAT-SELTEXT = 'Requisition no' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BNFPO' .
LS_FCAT-INTTYPE = 'N' .
*ls_fcat-outputlen = '5' .
LS_FCAT-COLTEXT = 'Item no' .
LS_FCAT-SELTEXT = 'Item no' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BSART' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '5' .
LS_FCAT-COLTEXT = 'Doc Type' .
LS_FCAT-SELTEXT = 'Doc Type' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BSTYP' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Doc Category' .
LS_FCAT-SELTEXT = 'Doc Category' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BSAKZ' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Control Indicator' .
LS_FCAT-SELTEXT = 'Control Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'LOEKZ' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Deletion Indicator' .
LS_FCAT-SELTEXT = 'Deletion Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-F4AVAILABL = 'X'.
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Processing status' .
LS_FCAT-SELTEXT = 'Processing Status' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'ESTKZ' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Creation Indicator' .
LS_FCAT-SELTEXT = 'Creation Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'FRGKZ' .
LS_FCAT-INTTYPE = 'C' .
* ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Release Indicator' .
LS_FCAT-SELTEXT = 'Release Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'FRGZU' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '8' .
LS_FCAT-COLTEXT = 'Release Status' .
LS_FCAT-SELTEXT = 'Release Status' .
APPEND LS_FCAT TO PT_FIELDCAT .
ENDFORM. "prepare_field_catalog
*& Form update_field_catalog
* text
* -->PT_FIELDCAT text
FORM UPDATE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
DATA LS_FCAT TYPE LVC_S_FCAT .
CALL METHOD GR_ALVGRID->GET_FRONTEND_FIELDCATALOG
IMPORTING
ET_FIELDCATALOG = PT_FIELDCAT[].
LOOP AT PT_FIELDCAT INTO LS_FCAT .
IF ZFLAG = '1'.
IF LS_FCAT-FIELDNAME = 'BSART' .
LS_FCAT-EDIT = 'X' .
LS_FCAT-F4AVAILABL = 'X'.
LS_FCAT-REF_TABLE = 'T161T'.
LS_FCAT-REF_FIELD = 'BSART'.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSTYP' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSAKZ' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'LOEKZ' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-EDIT = 'X' .
LS_FCAT-F4AVAILABL = 'X'.
* ls_fcat-drdn_hndl = '1'.
* ls_fcat-outputlen = 15.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'ESTKZ' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'FRGKZ' .
LS_FCAT-EDIT = 'X' .
* for laready attcahed search help
LS_FCAT-F4AVAILABL = 'X'.
LS_FCAT-REF_TABLE = 'T161U'.
LS_FCAT-REF_FIELD = 'FRGKZ'.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF.
IF LS_FCAT-FIELDNAME = 'FRGZU' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
* add customise f4 help on feild STATU
CLEAR GT_F4.
GS_F4-FIELDNAME = 'STATU'.
GS_F4-REGISTER = 'X'.
* gs_f4-getbefore = check_be. "§7a
* gs_f4-chngeafter = chn_aft. "§7b
APPEND GS_F4 TO GT_F4.
CALL METHOD GR_ALVGRID->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = GT_F4.
ELSEIF ZFLAG = '2'.
IF LS_FCAT-FIELDNAME = 'BANFN' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BNFPO' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
ELSE.
IF LS_FCAT-FIELDNAME = 'BSART' .
LS_FCAT-EDIT = SPACE.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSTYP' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSAKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'LOEKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'ESTKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'FRGKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'FRGZU' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
ENDIF.
ENDLOOP .
CALL METHOD GR_ALVGRID->SET_FRONTEND_FIELDCATALOG
EXPORTING
IT_FIELDCATALOG = PT_FIELDCAT[].
ENDFORM. "update_field_catalog
*& Form register_edit
* text
FORM REGISTER_EDIT .
CALL METHOD GR_ALVGRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
ENDFORM. "register_editHi all
Here is the code for that editable Grid
*& Report YVAMC_EDIT_GRID
REPORT YVAMC_EDIT_GRID.
DATA GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID .
*--- Name of the custom control added on the screen
DATA GC_CUSTOM_CONTROL_NAME TYPE SCRFNAME VALUE 'CC1_ALV' .
*--- Custom container instance reference
DATA GR_CCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER .
*--- Field catalog table
DATA GT_FIELDCAT TYPE LVC_T_FCAT .
TYPES: BEGIN OF IT_LIST,
BANFN TYPE EBAN-BANFN,
BNFPO TYPE EBAN-BNFPO,
BSART TYPE EBAN-BSART,
BSTYP TYPE EBAN-BSTYP,
BSAKZ TYPE EBAN-BSAKZ,
LOEKZ TYPE EBAN-LOEKZ,
STATU TYPE EBAN-STATU,
ESTKZ TYPE EBAN-ESTKZ,
FRGKZ TYPE EBAN-FRGKZ,
FRGZU TYPE EBAN-FRGZU,
END OF IT_LIST.
DATA: GT_LIST TYPE STANDARD TABLE OF IT_LIST,
WA_LIST TYPE IT_LIST.
DATA GS_LAYOUT TYPE LVC_S_LAYO .
DATA OK_CODE TYPE SY-UCOMM.
DATA ZFLAG.
** data for event handling
DATA: GS_F4 TYPE LVC_S_F4,
GT_F4 TYPE LVC_T_F4.
START-OF-SELECTION.
SELECT BANFN
BNFPO
BSART
BSTYP
BSAKZ
LOEKZ
STATU
ESTKZ
FRGKZ
FRGZU
FROM EBAN INTO TABLE GT_LIST.
CALL SCREEN 9000.
*& Module DISPLAY_ALV OUTPUT
* text
MODULE STATUS_9000 OUTPUT.
set pf-status 'ZNEW_STS'.
PERFORM DISPLAY_ALV.
ENDMODULE. " DISPLAY_ALV OUTPUT
*& Module USER_COMMAND_9000 INPUT
* text
MODULE USER_COMMAND_9000 INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'EDIT'.
ZFLAG = '1'.
PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
PERFORM REGISTER_EDIT.
WHEN 'DISPLAY'.
ZFLAG = '0'.
PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*& Form DISPLAY_ALV
* text
FORM DISPLAY_ALV.
IF GR_ALVGRID IS INITIAL.
CREATE OBJECT GR_CCONTAINER
EXPORTING
* parent =
CONTAINER_NAME = GC_CUSTOM_CONTROL_NAME .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT GR_ALVGRID
EXPORTING
I_PARENT = GR_CCONTAINER.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*----Preparing field catalog.
PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT .
CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_OUTTAB = GT_LIST[]
IT_FIELDCATALOG = GT_FIELDCAT
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL METHOD GR_ALVGRID->REFRESH_TABLE_DISPLAY
* EXPORTING
* is_stable =
* i_soft_refresh =
* EXCEPTIONS
* finished = 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.
ENDIF.
ENDFORM. "DISPLAY_ALV
*& Form prepare_field_catalog
* text
* -->PT_FIELDCAT text
FORM PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
DATA LS_FCAT TYPE LVC_S_FCAT .
LS_FCAT-FIELDNAME = 'BANFN' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '10' .
LS_FCAT-COLTEXT = 'Requisition no' .
* LS_FCAT-SELTEXT = 'Requisition no' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BNFPO' .
LS_FCAT-INTTYPE = 'N' .
*ls_fcat-outputlen = '5' .
LS_FCAT-COLTEXT = 'Item no' .
LS_FCAT-SELTEXT = 'Item no' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BSART' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '5' .
LS_FCAT-COLTEXT = 'Doc Type' .
LS_FCAT-SELTEXT = 'Doc Type' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BSTYP' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Doc Category' .
LS_FCAT-SELTEXT = 'Doc Category' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'BSAKZ' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Control Indicator' .
LS_FCAT-SELTEXT = 'Control Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'LOEKZ' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Deletion Indicator' .
LS_FCAT-SELTEXT = 'Deletion Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-F4AVAILABL = 'X'.
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Processing status' .
LS_FCAT-SELTEXT = 'Processing Status' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'ESTKZ' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Creation Indicator' .
LS_FCAT-SELTEXT = 'Creation Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'FRGKZ' .
LS_FCAT-INTTYPE = 'C' .
* ls_fcat-outputlen = '1' .
LS_FCAT-COLTEXT = 'Release Indicator' .
LS_FCAT-SELTEXT = 'Release Indicator' .
APPEND LS_FCAT TO PT_FIELDCAT .
LS_FCAT-FIELDNAME = 'FRGZU' .
LS_FCAT-INTTYPE = 'C' .
*ls_fcat-outputlen = '8' .
LS_FCAT-COLTEXT = 'Release Status' .
LS_FCAT-SELTEXT = 'Release Status' .
APPEND LS_FCAT TO PT_FIELDCAT .
ENDFORM. "prepare_field_catalog
*& Form update_field_catalog
* text
* -->PT_FIELDCAT text
FORM UPDATE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
DATA LS_FCAT TYPE LVC_S_FCAT .
CALL METHOD GR_ALVGRID->GET_FRONTEND_FIELDCATALOG
IMPORTING
ET_FIELDCATALOG = PT_FIELDCAT[].
LOOP AT PT_FIELDCAT INTO LS_FCAT .
IF ZFLAG = '1'.
IF LS_FCAT-FIELDNAME = 'BSART' .
LS_FCAT-EDIT = 'X' .
LS_FCAT-F4AVAILABL = 'X'.
LS_FCAT-REF_TABLE = 'T161T'.
LS_FCAT-REF_FIELD = 'BSART'.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSTYP' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSAKZ' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'LOEKZ' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-EDIT = 'X' .
LS_FCAT-F4AVAILABL = 'X'.
* ls_fcat-drdn_hndl = '1'.
* ls_fcat-outputlen = 15.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'ESTKZ' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'FRGKZ' .
LS_FCAT-EDIT = 'X' .
* for laready attcahed search help
LS_FCAT-F4AVAILABL = 'X'.
LS_FCAT-REF_TABLE = 'T161U'.
LS_FCAT-REF_FIELD = 'FRGKZ'.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF.
IF LS_FCAT-FIELDNAME = 'FRGZU' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
* add customise f4 help on feild STATU
CLEAR GT_F4.
GS_F4-FIELDNAME = 'STATU'.
GS_F4-REGISTER = 'X'.
* gs_f4-getbefore = check_be. "§7a
* gs_f4-chngeafter = chn_aft. "§7b
APPEND GS_F4 TO GT_F4.
CALL METHOD GR_ALVGRID->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = GT_F4.
ELSEIF ZFLAG = '2'.
IF LS_FCAT-FIELDNAME = 'BANFN' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BNFPO' .
LS_FCAT-EDIT = 'X' .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
ELSE.
IF LS_FCAT-FIELDNAME = 'BSART' .
LS_FCAT-EDIT = SPACE.
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSTYP' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'BSAKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'LOEKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'ESTKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'FRGKZ' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
IF LS_FCAT-FIELDNAME = 'FRGZU' .
LS_FCAT-EDIT = SPACE .
MODIFY PT_FIELDCAT FROM LS_FCAT .
ENDIF .
ENDIF.
ENDLOOP .
CALL METHOD GR_ALVGRID->SET_FRONTEND_FIELDCATALOG
EXPORTING
IT_FIELDCATALOG = PT_FIELDCAT[].
ENDFORM. "update_field_catalog
*& Form register_edit
* text
FORM REGISTER_EDIT .
CALL METHOD GR_ALVGRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
ENDFORM. "register_edit -
Get double return for join table
Dear Experts:
SELECT eban~banfn "PR number
eban~bnfpo "PR item
eban~bsart "Doc Type
eban~bednr "Requistion tracking number
eban~ebeln
eban~ebelp
eban~zzloc "GEO code
ztmm_ccp~zzclli "zzclli code
INTO CORRESPONDING FIELDS OF TABLE gi_pr_extract
FROM ( eban
INNER JOIN ztmm_ccp
ON eban~bednr = ztmm_ccp~bednr
AND eban~ebeln = ztmm_ccp~ebeln
AND eban~ebelp = ztmm_ccp~ebelp )
WHERE eban~bsart IN s_bsart. "11 input doc type
The s_bsart are:
NB
UB
ZNB
ZSC
ZUC
ZVC
ZXC
ZZO
ZZX
ZZY
ZZZ
From above SQL, I got double returen for each ebanbanfn and ebanbnfpo
Row BANFN BNFPO BSART BEDNR ZZLOC ZZCLLI
1 3100000056 00010 NB
2 3100000056 00010 NB CLLICD DRTP
3 3100000057 00010 NB
4 3100000057 00010 NB CLLICD DRTP
5 3100000058 00010 NB
6 3100000058 00010 NB CLLICD DRTP
7 3100000061 00010 NB
8 3100000061 00010 NB CLLICD DRTP
9 3100000062 00010 NB
10 3100000062 00010 NB CLLICD DRTP
Do you know why and how do I get the unique one?
Thank you very much!
Helen
Edited by: Thomas Zloch on Oct 4, 2010 3:49 PM - please use code tagsHi Helen,
Please check with the below code snippet. Hope it will work.
SELECT eban~banfn
eban~bnfpo
eban~bsart
eban~bednr
eban~ebeln
eban~ebelp
eban~zzloc
ztmm_ccp~zzclli
INTO CORRESPONDING FIELDS OF TABLE gi_pr_extract
FROM eban
INNER JOIN ztmm_ccp
ON ztmm_ccp~bednr = eban~bednr
AND ztmm_ccp~ebeln = eban~ebeln
AND ztmm_ccp~ebelp = eban~ebelp
WHERE eban~bsart IN s_bsart.
Thanks
Nitesh -
Performance issue on a select statement
Hi all @ SAPforums and thanks for your attention,
the task is quite simple: given a Purchase Requisition number and position (banfn, bnfpo) I have to check if a contract with the same PR as source exists in the EKPO table.
In order to check for it, I simply typed the following select:
SELECT SINGLE * FROM EKPO INTO wa_checkekpo
WHERE bstyp EQ 'K'
AND banfn EQ l_eban-banfn
AND bnfpo EQ l_eban-bnfpo.
This kind of query is quite consuming (more than three seconds in my process) due to the fact that banfn and bnfpo don't belong to a key for the table.
Any idea/workaround that can lead to better performance? Please note I'm not interested in retrieving the contract number (KONNR), it's sufficient to know it exists.Hi,
> Do not use select * if you just want to check existence of the record.
so far so good.
> Use a single variable to store teh count.
But why should we count the records if we just want to know if a key exists in
the db or not? change the second half of the recommendation to:
Use a single field of the used index for the select list to check (sy-subrc or result
of that field) if the record exists or not.
Kind regards,
Hermann -
Error while creating service PO by BAPI_PO_CREATE1
Hi,
I am trying to create a service PO using the BAPI_PO_CREATE1 with reference to service PR and I am getting an "In case of account assignment, please enter acc. assignment data for item" for which i found so many threads but none had resolved this error in my case eventhough i filled up all the required structure such as
LOOP AT gt_esll INTO gs_esll.
gs_services-pckg_no = gs_esll-packno.
gs_services-line_no = gs_esll-introw.
gs_services-subpckg_no = gs_esll-sub_packno.
gs_services-quantity = gs_esll-menge.
gs_services-base_uom = gs_esll-meins.
gs_services-gr_price = gs_esll-brtwr.
gs_services-outl_ind = 'X'.
APPEND gs_services TO gt_services.
CLEAR gs_services.
ENDLOOP.
LOOP AT gt_esll1 INTO gs_esll1.
gs_services-pckg_no = gs_esll1-packno.
gs_services-line_no = gs_esll1-introw.
gs_services-ext_line = gs_esll1-extrow.
gs_services-quantity = gs_esll1-menge.
gs_services-base_uom = gs_esll1-meins.
gs_services-gr_price = gs_esll1-brtwr.
APPEND gs_services TO gt_services.
CLEAR gs_services.
gs_servalues-pckg_no = gs_esll1-packno.
gs_servalues-line_no = gs_esll1-introw.
gs_servalues-serno_line = '01'.
gs_servalues-quantity = gs_esll1-menge.
gs_servalues-net_value = gs_esll1-brtwr.
APPEND gs_servalues TO gt_servalues.
CLEAR: gs_servalues, gs_esll1.
ENDLOOP.
gs_poacct-po_item = gv_poitm.
gs_poacct-serial_no = gs_ebkn-zebkn.
gs_poacct-quantity = gs_ebkn-menge.
gs_poacct-gl_account = gs_ebkn-sakto.
gs_poacct-costcenter = gs_ebkn-kostl.
gs_poacct-co_area = gs_ebkn-kokrs.
APPEND gs_poacct TO gt_poacct.
CLEAR gs_poacct.
gs_poacctx-po_item = gv_poitm.
gs_poacctx-serial_no = gs_ebkn-zebkn.
gs_poacctx-po_itemx = 'X'.
gs_poacctx-serial_nox = 'X'.
gs_poacctx-quantity = 'X'.
gs_poacctx-gl_account = 'X'.
gs_poacctx-costcenter = 'X'.
gs_poacctx-co_area = 'X'.
APPEND gs_poacctx TO gt_poacctx.
CLEAR : gs_poacctx, gs_ebkn.
LOOP AT gt_ppsitm INTO gs_ppsitm.
CLEAR: gs_poitm. " gt_poitm.
READ TABLE gt_matnr INTO gs_matnr WITH KEY banfn = gs_ppsitm-banfn bnfpo = gs_ppsitm-bnfpo.
CLEAR: gs_poitm.
gv_poitm = gv_poitm + 10.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = gv_poitm
IMPORTING
OUTPUT = gv_poitm.
gs_poitm-po_item = gv_poitm.
gs_poitm-quantity = gs_ppsitm-menge.
gs_poitm-po_unit = gs_matnr-meins.
gs_poitm-net_price = gs_ppsitm-quote_price.
* gs_poitm-price_unit = '1'.
gs_poitm-tax_code = gs_ppsitm-mwskz.
gs_poitm-preq_no = gs_ppsitm-banfn.
gs_poitm-preq_item = gs_ppsitm-bnfpo.
IF gs_matnr-packno IS NOT INITIAL.
gs_poitm-pckg_no = gs_matnr-packno. " ADDED BY SKE FOR SERVICE PO
ENDIF.
gs_poitm-item_cat = gs_matnr-pstyp.
gs_poitm-acctasscat = gs_matnr-knttp.
APPEND gs_poitm TO gt_poitm.
ENDLOOP.
aftrer executing this bapi, the accounts structure has been cleared whereas other sturcture has values.
Please give me some hints to fix this.
Thanks in Advance,
Kalidass.Hi pranav,
from EBAN table i got the package no for a PR and passing that package No into ESLL table i am getting the subpaack No.
SELECT banfn bnfpo txz01 matnr bsart ekgrp meins pstyp knttp packno FROM eban
INTO TABLE gt_matnr
FOR ALL ENTRIES IN gt_ppsitm
WHERE banfn = gt_ppsitm-banfn
AND bnfpo = gt_ppsitm-bnfpo.
SELECT packno introw package sub_packno FROM esll
INTO CORRESPONDING FIELDS OF TABLE gt_esll
FOR ALL ENTRIES IN gt_matnr
WHERE packno = gt_matnr-packno.
IF gt_esll IS NOT INITIAL.
SELECT packno introw extrow package sub_packno menge meins brtwr ktext1 FROM ESLL
INTO TABLE gt_esll1
FOR ALL ENTRIES IN gt_esll
WHERE packno = gt_esll-sub_packno.
ENDIF.
LOOP AT gt_esll INTO gs_esll.
gs_services-pckg_no = gs_esll-packno.
gs_services-line_no = gs_esll-introw.
gs_services-subpckg_no = gs_esll-sub_packno.
gs_services-quantity = gs_esll-menge.
gs_services-base_uom = gs_esll-meins.
gs_services-gr_price = gs_esll-brtwr.
gs_services-outl_ind = 'X'.
APPEND gs_services TO gt_services.
CLEAR gs_services.
ENDLOOP.
LOOP AT gt_esll1 INTO gs_esll1.
gs_services-pckg_no = gs_esll1-packno.
gs_services-line_no = gs_esll1-introw.
gs_services-ext_line = gs_esll1-extrow.
gs_services-quantity = gs_esll1-menge.
gs_services-base_uom = gs_esll1-meins.
gs_services-gr_price = gs_esll1-brtwr.
APPEND gs_services TO gt_services.
CLEAR gs_services.
gs_servalues-pckg_no = gs_esll1-packno.
gs_servalues-line_no = gs_esll1-introw.
gs_servalues-serno_line = '01'.
gs_servalues-quantity = gs_esll1-menge.
gs_servalues-net_value = gs_esll1-brtwr.
APPEND gs_servalues TO gt_servalues.
CLEAR: gs_servalues, gs_esll1.
ENDLOOP.
Edited by: Kalidass Etienne.S on Jan 31, 2012 11:07 AM -
Hi Frds
In my program im displaying Open PO's Number and Quantity and Open PR's Number and Quantity based on Material ,Plant, and Storage location of Material.
In Output its only displaying Open PR's and Quantity ,if it has Open PO's also, for a same material.
Kindly anyone correct my mistake.
TYPE-POOLS: SLIS.
TABLES : EKPO,MARC,EBAN,MSEG,MARD,MARA,MAKT,MBEW.
DATA:BODY TYPE SLIS_T_FIELDCAT_ALV,
HEADER TYPE SLIS_FIELDCAT_ALV,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID.
DATA : TGR TYPE I,
CHECK TYPE I.
TGR = 0.
CHECK = 0.
DATA : MAT_NO LIKE MARA-MATNR, "MATERIAL CODE
PLA_NO LIKE MARD-WERKS, "PLANT
STORE LIKE MARD-LGORT, "STORAGE LOCATION
COM_NO LIKE EKPO-BUKRS. "COMPANY CODE
DATA : BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR, "MATERIAL CODE
MEINS LIKE MARA-MEINS, "UOM
MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
MINBE LIKE MARC-MINBE, "ROL
LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
LGORT LIKE MARD-LGORT, "STORAGE
EBELN LIKE EKPO-EBELN, "PO NUMBER
EBELP LIKE EKPO-EBELP, "PO LINEITEM
MENGE LIKE EKPO-MENGE, "OPEN PO QTY
MENG1 LIKE MSEG-MENGE, "GR QTY
DQTY LIKE MSEG-MENGE, "OPEN PO QTY
BANFN LIKE EBAN-BANFN, "OPEN PR NUMBER
MENG2 LIKE EBAN-MENGE, "OPEN PR QTY
BNFPO LIKE EBAN-BANFN, "PR LINEITEM
END OF ITAB.
DATA : BEGIN OF IMAT OCCURS 0,
MATNR LIKE MARA-MATNR, "MATERIAL CODE
MEINS LIKE MARA-MEINS, "UOM
LVORM LIKE MARA-LVORM, "DELETED MATERIAL FLAG
MSTAE LIKE MARA-MSTAE, "BLOCKED MATERIAL
WERKS LIKE MARD-WERKS, "PLANT
LGORT LIKE MARD-LGORT, "STORAGE
END OF IMAT.
DATA : BEGIN OF IMAKT OCCURS 0,
MATNR LIKE MAKT-MATNR, "MATERIAL CODE
MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
END OF IMAKT.
DATA : BEGIN OF IMARC OCCURS 0,
MATNR LIKE MARC-MATNR, "MATERIAL CODE
MINBE LIKE MARC-MINBE, "ROL
LVORM LIKE MARC-LVORM, "DELETED MATERIAL FLAG
END OF IMARC.
DATA : BEGIN OF IMBEW OCCURS 0,
MATNR LIKE MBEW-MATNR, "MATERIAL CODE
LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
END OF IMBEW.
DATA : BEGIN OF IEKPO OCCURS 0,
EBELN LIKE EKPO-EBELN, "PO NUMBER
EBELP LIKE EKPO-EBELP, "PO LINEITEM
LOEKZ LIKE EKPO-LOEKZ, "DELETED PO'S
MATNR LIKE EKPO-MATNR, "MATERIAL CODE
BUKRS LIKE EKPO-BUKRS, "COMPANY
WERKS LIKE EKPO-WERKS, "PLANT
LGORT LIKE EKPO-LGORT, "STORAGE
MENGE LIKE EKPO-MENGE, "PO QUANTITY
END OF IEKPO.
DATA : BEGIN OF IMSEG OCCURS 0,
BWART LIKE MSEG-BWART, "MOVEMENT TYPE
MATNR LIKE MSEG-MATNR, "MATERIAL CODE
WERKS LIKE MSEG-WERKS, "PLANT
MENGE LIKE MSEG-MENGE, "GR QUANTITY
EBELN LIKE MSEG-EBELN, "PO NUMBER
EBELP LIKE MSEG-EBELP, "PO LINEITEM
END OF IMSEG.
DATA : BEGIN OF IEBAN OCCURS 0,
BANFN LIKE EBAN-BANFN, "PR NUMBER
BNFPO LIKE EBAN-BNFPO, "PR LINEITEM
LOEKZ LIKE EBAN-LOEKZ, "DELETED PR
STATU LIKE EBAN-STATU, "OPEN PR FLAG
MATNR LIKE EBAN-MATNR, "MATERIAL NUMBER
MENGE LIKE EBAN-MENGE, "PR QUANTITY
WERKS LIKE EBAN-WERKS, "PLANT
LGORT LIKE EBAN-LGORT, "STORAGE
END OF IEBAN.
SELECTION-SCREEN: BEGIN OF BLOCK 01.
SELECTION-SCREEN: BEGIN OF BLOCK 02 WITH FRAME .
SELECT-OPTIONS MATERIAL FOR MAT_NO.
SELECT-OPTIONS COMPANY FOR COM_NO .
SELECT-OPTIONS PLANT FOR PLA_NO OBLIGATORY.
SELECT-OPTIONS STORAGE FOR STORE.
SELECTION-SCREEN: END OF BLOCK 02.
SELECTION-SCREEN: END OF BLOCK 01.
AT SELECTION-SCREEN.
PERFORM MATERIAL. "GET MATERIAL
START-OF-SELECTION.
PERFORM P_MAKT. "GET MATERIAL DESC.,
PERFORM P_MARC. "GET ROL
PERFORM P_MBEW. "GET WAREHOUSE STOCK
PERFORM POS. "GET POS
SORT IEKPO BY EBELN EBELP.
PERFORM GRS. "GET GR QTY
PERFORM PRS. "GET OPEN PR NUMBER
PERFORM READ.
PERFORM FIELDCATALOG.
PERFORM BUILD_LAYOUT.
GET ALV DISPLAY
PERFORM ALVDISPLAY.
*& FORM MATERIAL
TEXT
FORM MATERIAL.
SELECT MARAMATNR MARAMEINS MARALVORM MARAMSTAE
MARDWERKS MARDLGORT
INTO CORRESPONDING FIELDS OF TABLE IMAT
FROM MARA INNER JOIN MARD ON MARDMATNR = MARAMATNR
WHERE MARA~MATNR IN MATERIAL AND
MARD~WERKS IN PLANT AND
MARD~LGORT IN STORAGE AND
MARA~LVORM <> 'X' AND
MARA~MSTAE EQ SPACE.
IF SY-SUBRC <> 0.
MESSAGE 'NO DATA FOUND FOR THE SELECTION ' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM. "MATERIAL
*& FORM P_MAKT
TEXT
FORM P_MAKT.
LOOP AT IMAT.
SELECT MATNR MAKTX FROM MAKT APPENDING TABLE IMAKT
WHERE MATNR = IMAT-MATNR.
ENDLOOP.
CLEAR : IMAT, IMAKT.
ENDFORM. "P_MAKT
*& FORM P_MARC
TEXT
FORM P_MARC.
LOOP AT IMAT.
SELECT MATNR MINBE LVORM FROM MARC APPENDING TABLE IMARC
WHERE MATNR = IMAT-MATNR AND
LVORM <> 'X'.
ENDLOOP.
CLEAR : IMAT, IMARC.
ENDFORM. "P_MARC
*& FORM P_MBEW
TEXT
FORM P_MBEW.
LOOP AT IMAT.
SELECT MATNR LBKUM FROM MBEW APPENDING TABLE IMBEW
WHERE MATNR = IMAT-MATNR.
ENDLOOP.
CLEAR : IMAT, IMBEW.
ENDFORM. "P_MBEW
*& FORM POS
TEXT
FORM POS.
LOOP AT IMAT.
SELECT EBELN EBELP LOEKZ MATNR BUKRS WERKS LGORT MENGE
FROM EKPO APPENDING TABLE IEKPO
WHERE MATNR = IMAT-MATNR AND
WERKS = IMAT-WERKS AND
LGORT = IMAT-LGORT AND
LOEKZ EQ SPACE.
ENDLOOP.
CLEAR : IMAT, IEKPO.
ENDFORM. "POS
*& FORM GRS
TEXT
FORM GRS.
LOOP AT IEKPO.
SELECT BWART MATNR WERKS MENGE EBELN EBELP FROM MSEG
APPENDING TABLE IMSEG
WHERE MATNR = IEKPO-MATNR AND
WERKS = IEKPO-WERKS AND
EBELN = IEKPO-EBELN AND
EBELP = IEKPO-EBELP AND
( BWART = '101' OR BWART = '103' ).
ENDLOOP.
CLEAR: IEKPO, IMSEG.
ENDFORM. "GRS
*& FORM PRS
TEXT
FORM PRS.
LOOP AT IMAT.
IF IEKPO[] IS NOT INITIAL.
SELECT BANFN BNFPO LOEKZ STATU MATNR MENGE WERKS LGORT FROM EBAN
INTO TABLE IEBAN
FOR ALL ENTRIES IN IMAT
FROM EBAN APPENDING TABLE IEBAN
WHERE MATNR = IMAT-MATNR AND
STATU EQ 'N' AND
LOEKZ EQ SPACE AND
WERKS IN PLANT .
ENDLOOP.
ENDIF.
CLEAR: IMAT, IEBAN.
ENDFORM. "PRS
*& FORM READ
TEXT
FORM READ.
LOOP AT IMAT. " MAIN LOOP
ITAB-MATNR = IMAT-MATNR.
ITAB-MEINS = IMAT-MEINS.
ITAB-LGORT = IMAT-LGORT.
READ TABLE IMAKT WITH KEY MATNR = IMAT-MATNR.
ITAB-MAKTX = IMAKT-MAKTX.
READ TABLE IMARC WITH KEY MATNR = IMAT-MATNR.
ITAB-MINBE = IMARC-MINBE.
READ TABLE IMBEW WITH KEY MATNR = IMAT-MATNR.
ITAB-LBKUM = IMBEW-LBKUM.
SELECTING OPEN PO'S *************************
CHECK = 0.
LOOP AT IEKPO WHERE MATNR = IMAT-MATNR. " INNER LOOP
ITAB-EBELN = IEKPO-EBELN.
ITAB-EBELP = IEKPO-EBELP.
ITAB-MENGE = IEKPO-MENGE.
LOOP AT IMSEG WHERE EBELN = IEKPO-EBELN AND EBELP = IEKPO-EBELP.
" INNER INNER LOOP.
TGR = TGR + IMSEG-MENGE.
ENDLOOP.
ITAB-DQTY = IEKPO-MENGE - TGR.
IF ITAB-DQTY > 0.
CHECK = 1.
APPEND ITAB.
CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
ENDIF.
CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
ENDLOOP.
CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
SELECTING OPEN PR'S ********************
LOOP AT IEBAN WHERE MATNR = IMAT-MATNR.
ITAB-BANFN = IEBAN-BANFN.
ITAB-BNFPO = IEBAN-BNFPO.
ITAB-MENG2 = IEBAN-MENGE.
APPEND ITAB.
CHECK = 1.
CLEAR : ITAB-BANFN ,ITAB-MENG2.
ENDLOOP.
IF CHECK = 0.
APPEND ITAB.
ELSEIF CHECK = 1.
ENDIF.
CLEAR : IEKPO,ITAB-EBELN,ITAB-EBELP,ITAB-MENGE,ITAB-DQTY,
ITAB-BANFN,ITAB-BNFPO,ITAB-MENG2.
ENDLOOP.
CLEAR : ITAB,IEKPO,IMAT,IEBAN.
ENDFORM. "READ
Thanks
PariHi Frds
In my program im displaying Open PO's Number and Quantity and Open PR's Number and Quantity based on Material ,Plant, and Storage location of Material.
In Output its only displaying Open PR's and Quantity ,if it has Open PO's also, for a same material.
Kindly anyone correct my mistake.
TYPE-POOLS: SLIS.
TABLES : EKPO,MARC,EBAN,MSEG,MARD,MARA,MAKT,MBEW.
DATA:BODY TYPE SLIS_T_FIELDCAT_ALV,
HEADER TYPE SLIS_FIELDCAT_ALV,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID.
DATA : TGR TYPE I,
CHECK TYPE I.
TGR = 0.
CHECK = 0.
DATA : MAT_NO LIKE MARA-MATNR, "MATERIAL CODE
PLA_NO LIKE MARD-WERKS, "PLANT
STORE LIKE MARD-LGORT, "STORAGE LOCATION
COM_NO LIKE EKPO-BUKRS. "COMPANY CODE
DATA : BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR, "MATERIAL CODE
MEINS LIKE MARA-MEINS, "UOM
MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
MINBE LIKE MARC-MINBE, "ROL
LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
LGORT LIKE MARD-LGORT, "STORAGE
EBELN LIKE EKPO-EBELN, "PO NUMBER
EBELP LIKE EKPO-EBELP, "PO LINEITEM
MENGE LIKE EKPO-MENGE, "OPEN PO QTY
MENG1 LIKE MSEG-MENGE, "GR QTY
DQTY LIKE MSEG-MENGE, "OPEN PO QTY
BANFN LIKE EBAN-BANFN, "OPEN PR NUMBER
MENG2 LIKE EBAN-MENGE, "OPEN PR QTY
BNFPO LIKE EBAN-BANFN, "PR LINEITEM
END OF ITAB.
DATA : BEGIN OF IMAT OCCURS 0,
MATNR LIKE MARA-MATNR, "MATERIAL CODE
MEINS LIKE MARA-MEINS, "UOM
LVORM LIKE MARA-LVORM, "DELETED MATERIAL FLAG
MSTAE LIKE MARA-MSTAE, "BLOCKED MATERIAL
WERKS LIKE MARD-WERKS, "PLANT
LGORT LIKE MARD-LGORT, "STORAGE
END OF IMAT.
DATA : BEGIN OF IMAKT OCCURS 0,
MATNR LIKE MAKT-MATNR, "MATERIAL CODE
MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
END OF IMAKT.
DATA : BEGIN OF IMARC OCCURS 0,
MATNR LIKE MARC-MATNR, "MATERIAL CODE
MINBE LIKE MARC-MINBE, "ROL
LVORM LIKE MARC-LVORM, "DELETED MATERIAL FLAG
END OF IMARC.
DATA : BEGIN OF IMBEW OCCURS 0,
MATNR LIKE MBEW-MATNR, "MATERIAL CODE
LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
END OF IMBEW.
DATA : BEGIN OF IEKPO OCCURS 0,
EBELN LIKE EKPO-EBELN, "PO NUMBER
EBELP LIKE EKPO-EBELP, "PO LINEITEM
LOEKZ LIKE EKPO-LOEKZ, "DELETED PO'S
MATNR LIKE EKPO-MATNR, "MATERIAL CODE
BUKRS LIKE EKPO-BUKRS, "COMPANY
WERKS LIKE EKPO-WERKS, "PLANT
LGORT LIKE EKPO-LGORT, "STORAGE
MENGE LIKE EKPO-MENGE, "PO QUANTITY
END OF IEKPO.
DATA : BEGIN OF IMSEG OCCURS 0,
BWART LIKE MSEG-BWART, "MOVEMENT TYPE
MATNR LIKE MSEG-MATNR, "MATERIAL CODE
WERKS LIKE MSEG-WERKS, "PLANT
MENGE LIKE MSEG-MENGE, "GR QUANTITY
EBELN LIKE MSEG-EBELN, "PO NUMBER
EBELP LIKE MSEG-EBELP, "PO LINEITEM
END OF IMSEG.
DATA : BEGIN OF IEBAN OCCURS 0,
BANFN LIKE EBAN-BANFN, "PR NUMBER
BNFPO LIKE EBAN-BNFPO, "PR LINEITEM
LOEKZ LIKE EBAN-LOEKZ, "DELETED PR
STATU LIKE EBAN-STATU, "OPEN PR FLAG
MATNR LIKE EBAN-MATNR, "MATERIAL NUMBER
MENGE LIKE EBAN-MENGE, "PR QUANTITY
WERKS LIKE EBAN-WERKS, "PLANT
LGORT LIKE EBAN-LGORT, "STORAGE
END OF IEBAN.
SELECTION-SCREEN: BEGIN OF BLOCK 01.
SELECTION-SCREEN: BEGIN OF BLOCK 02 WITH FRAME .
SELECT-OPTIONS MATERIAL FOR MAT_NO.
SELECT-OPTIONS COMPANY FOR COM_NO .
SELECT-OPTIONS PLANT FOR PLA_NO OBLIGATORY.
SELECT-OPTIONS STORAGE FOR STORE.
SELECTION-SCREEN: END OF BLOCK 02.
SELECTION-SCREEN: END OF BLOCK 01.
AT SELECTION-SCREEN.
PERFORM MATERIAL. "GET MATERIAL
START-OF-SELECTION.
PERFORM P_MAKT. "GET MATERIAL DESC.,
PERFORM P_MARC. "GET ROL
PERFORM P_MBEW. "GET WAREHOUSE STOCK
PERFORM POS. "GET POS
SORT IEKPO BY EBELN EBELP.
PERFORM GRS. "GET GR QTY
PERFORM PRS. "GET OPEN PR NUMBER
PERFORM READ.
PERFORM FIELDCATALOG.
PERFORM BUILD_LAYOUT.
GET ALV DISPLAY
PERFORM ALVDISPLAY.
*& FORM MATERIAL
TEXT
FORM MATERIAL.
SELECT MARAMATNR MARAMEINS MARALVORM MARAMSTAE
MARDWERKS MARDLGORT
INTO CORRESPONDING FIELDS OF TABLE IMAT
FROM MARA INNER JOIN MARD ON MARDMATNR = MARAMATNR
WHERE MARA~MATNR IN MATERIAL AND
MARD~WERKS IN PLANT AND
MARD~LGORT IN STORAGE AND
MARA~LVORM <> 'X' AND
MARA~MSTAE EQ SPACE.
IF SY-SUBRC <> 0.
MESSAGE 'NO DATA FOUND FOR THE SELECTION ' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM. "MATERIAL
*& FORM P_MAKT
TEXT
FORM P_MAKT.
LOOP AT IMAT.
SELECT MATNR MAKTX FROM MAKT APPENDING TABLE IMAKT
WHERE MATNR = IMAT-MATNR.
ENDLOOP.
CLEAR : IMAT, IMAKT.
ENDFORM. "P_MAKT
*& FORM P_MARC
TEXT
FORM P_MARC.
LOOP AT IMAT.
SELECT MATNR MINBE LVORM FROM MARC APPENDING TABLE IMARC
WHERE MATNR = IMAT-MATNR AND
LVORM <> 'X'.
ENDLOOP.
CLEAR : IMAT, IMARC.
ENDFORM. "P_MARC
*& FORM P_MBEW
TEXT
FORM P_MBEW.
LOOP AT IMAT.
SELECT MATNR LBKUM FROM MBEW APPENDING TABLE IMBEW
WHERE MATNR = IMAT-MATNR.
ENDLOOP.
CLEAR : IMAT, IMBEW.
ENDFORM. "P_MBEW
*& FORM POS
TEXT
FORM POS.
LOOP AT IMAT.
SELECT EBELN EBELP LOEKZ MATNR BUKRS WERKS LGORT MENGE
FROM EKPO APPENDING TABLE IEKPO
WHERE MATNR = IMAT-MATNR AND
WERKS = IMAT-WERKS AND
LGORT = IMAT-LGORT AND
LOEKZ EQ SPACE.
ENDLOOP.
CLEAR : IMAT, IEKPO.
ENDFORM. "POS
*& FORM GRS
TEXT
FORM GRS.
LOOP AT IEKPO.
SELECT BWART MATNR WERKS MENGE EBELN EBELP FROM MSEG
APPENDING TABLE IMSEG
WHERE MATNR = IEKPO-MATNR AND
WERKS = IEKPO-WERKS AND
EBELN = IEKPO-EBELN AND
EBELP = IEKPO-EBELP AND
( BWART = '101' OR BWART = '103' ).
ENDLOOP.
CLEAR: IEKPO, IMSEG.
ENDFORM. "GRS
*& FORM PRS
TEXT
FORM PRS.
LOOP AT IMAT.
IF IEKPO[] IS NOT INITIAL.
SELECT BANFN BNFPO LOEKZ STATU MATNR MENGE WERKS LGORT FROM EBAN
INTO TABLE IEBAN
FOR ALL ENTRIES IN IMAT
FROM EBAN APPENDING TABLE IEBAN
WHERE MATNR = IMAT-MATNR AND
STATU EQ 'N' AND
LOEKZ EQ SPACE AND
WERKS IN PLANT .
ENDLOOP.
ENDIF.
CLEAR: IMAT, IEBAN.
ENDFORM. "PRS
*& FORM READ
TEXT
FORM READ.
LOOP AT IMAT. " MAIN LOOP
ITAB-MATNR = IMAT-MATNR.
ITAB-MEINS = IMAT-MEINS.
ITAB-LGORT = IMAT-LGORT.
READ TABLE IMAKT WITH KEY MATNR = IMAT-MATNR.
ITAB-MAKTX = IMAKT-MAKTX.
READ TABLE IMARC WITH KEY MATNR = IMAT-MATNR.
ITAB-MINBE = IMARC-MINBE.
READ TABLE IMBEW WITH KEY MATNR = IMAT-MATNR.
ITAB-LBKUM = IMBEW-LBKUM.
SELECTING OPEN PO'S *************************
CHECK = 0.
LOOP AT IEKPO WHERE MATNR = IMAT-MATNR. " INNER LOOP
ITAB-EBELN = IEKPO-EBELN.
ITAB-EBELP = IEKPO-EBELP.
ITAB-MENGE = IEKPO-MENGE.
LOOP AT IMSEG WHERE EBELN = IEKPO-EBELN AND EBELP = IEKPO-EBELP.
" INNER INNER LOOP.
TGR = TGR + IMSEG-MENGE.
ENDLOOP.
ITAB-DQTY = IEKPO-MENGE - TGR.
IF ITAB-DQTY > 0.
CHECK = 1.
APPEND ITAB.
CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
ENDIF.
CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
ENDLOOP.
CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
SELECTING OPEN PR'S ********************
LOOP AT IEBAN WHERE MATNR = IMAT-MATNR.
ITAB-BANFN = IEBAN-BANFN.
ITAB-BNFPO = IEBAN-BNFPO.
ITAB-MENG2 = IEBAN-MENGE.
APPEND ITAB.
CHECK = 1.
CLEAR : ITAB-BANFN ,ITAB-MENG2.
ENDLOOP.
IF CHECK = 0.
APPEND ITAB.
ELSEIF CHECK = 1.
ENDIF.
CLEAR : IEKPO,ITAB-EBELN,ITAB-EBELP,ITAB-MENGE,ITAB-DQTY,
ITAB-BANFN,ITAB-BNFPO,ITAB-MENG2.
ENDLOOP.
CLEAR : ITAB,IEKPO,IMAT,IEBAN.
ENDFORM. "READ
Thanks
Pari -
Problem in Mtart and Bsart in a report
hi,
I am working on report in which i am able to display the all the different material types (MTART) and purchasing doc (BSART) but ZCAP(Capital goods) are not being able to display in it.
When i make inner join in the select statement with mara for mtart field ,it is not displaying the data but when i remove the inner join of mara from select statement is displaying the data.
I don't know why it is happening ? Is dere any customization problem i.e. why it is not displaying the capital guds data.
Plzz provide me the guide lines for it.Hi ricx,
U must keep the value of varible which r char type in single quotes in your where condition...
Try it out..
TABLES: EBAN,MSEG.
DATA: BEGIN OF ITR1 OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
matnr like mseg-matnr,
EBELN LIKE MSEG-EBELN,
EBELN LIKE CDHDR-OBJECTID,
CPUDT LIKE MKPF-CPUDT,
BANFN LIKE EBAN-BANFN,
MTART LIKE EKPO-MTART,
BANFN LIKE CDHDR-OBJECTID,
BADAT LIKE EBAN-BADAT,
BSART LIKE EBAN-BSART,
MTART LIKE MARA-MTART,
erdat like erev-erdat,
fgdat like erev-fgdat,
stage1 type i,
stage2 type i,
stage3 type i,
stage4 type i,
OUTPUT TYPE I,
DESC LIKE MAKT-MAKTX,
FRGDT LIKE EBAN-FRGDT,
FRGDT1 LIKE EBAN-FRGDT,
END OF ITR1.
PARAMETERS : PLANT LIKE MSEG-WERKS.
SELECT-OPTIONS: P_BSART FOR EBAN-BSART.
select a~mblnr a~matnr a~ebeln b~CPUDT C~MTART C~banfn d~badat D~BSART "E~MTART
into table itr1 from mseg as a
inner join mkpf as b on b~mblnr = a~mblnr
inner join ekpo as c on c~ebeln = a~ebeln and c~ebelp = a~ebelp
inner join eban as d on d~banfn = c~banfn and d~bnfpo = c~bnfpo
inner join mara as e on e~matnr = a~matnr
where
a~bwart = '101' " U must write it in single quotes because its of char type...
and b~tcode2 = 'MIGO_GR' and
a~werks = plant AND D~BSART IN P_BSART.
" AND ( C~MTART = 'ROH' OR C~MTART = 'ZBOP' OR C~MTART = 'ZCON' OR C~MTART = 'ERSA' OR C~MTART = 'HAWA' ).
AND ( E~MTART = 'ROH' OR E~MTART = 'ZBOP' OR E~MTART = 'ZCON' OR E~MTART = 'ERSA' OR E~MTART = 'HAWA' ).
LOOP AT ITR1.
WRITE: / ITR1-EBELN,ITR1-BSART,ITR1-MATNR,ITR1-MBLNR,ITR1-CPUDT.
ENDLOOP.
Try to go through EKKO and EKPO tables if possible for ur requirement....
See the below Query for Help... and modify it according to your need...
select ebeln ebelp werks matkl mtart from ekpo into table git_ekpo
where werks in so_werks
and matkl in so_matkl
and mtart in so_mtart.
if sy-subrc = 0.
if not git_ekpo[] is initial.
select lifnr bstyp ekgrp bsart zzreldt from ekko into table git_ekko
for all entries in git_ekpo
where ebeln = git_ekpo-ebeln
and bstyp in so_bstyp
and lifnr in so_lifnr
and ekgrp in so_ekgrp
and bsart in so_bsart.
if sy-subrc = 0.
delete git_ekpo where banfn = ' '.
select ebeln ebelp slfdt from eket into table git_eket
for all entries in git_ekpo
where ebeln = git_ekpo-ebeln
and ebelp = git_ekpo-ebelp
and etenr = '1'.
if sy-subrc = 0.
select ebeln ebelp budat banfn bnfpo from ekbe into table git_ekbe
for all entries in git_ekpo
where ebeln = git_ekpo-ebeln
and ebelp = git_ekpo-ebelp
and budat in so_budat.
if sy-subrc = 0.
select <fields> from mseg into table git_mseg
for all entries in git_ekpo
where ebeln = git_ekpo-ebeln
and ebelp = git_ekpo-ebelp
and bwart = '101'
and insmk = '3'.
endif.
endif.
endif.
endif.
endif.
Hope it will solve your problem..
Thanks & Regards
ilesh 24x7 -
Problem in displaying 2nd secondary list
Hi ABAP Gurus,
Here i got an assignment to develope interactive report (basic list, 1st secondary, 2nd secondary list)
according to my report i am able to get 1st secondary list perfectly but i am not able to get 2nd secondary list .pls solve my problem
below is my code.
*& Report ZCRPT_MM_MRP
REPORT zcrpt_mm_mrp .
*& Report : ZRPT_MM_PR_HISTORY *
Dev. Class : ZCVS *
Program Name : ZRPT_MM_PR_HISTORY *
Description : PO History Details List *
Author : Sujit Created on : 12.11.2007 *
SAP Release : SAP ERP Central Component 5.0 *
Tcode : Req DKIK905199 N-160 *
: DKIK905248 N-160 For Deletion indicator *
S O U R C E C O D E C H A N G E H I S T O R Y *
CODE | AUTHOR | DATE | Description *
| | | *
TABLE DECLARATIONS *
TABLES: ekko,ekpo,mara, makt,ekes,eban,mard,s994.
Internal tables decleration
TYPE-POOLS: slis.
DATA: BEGIN OF it_vbrkvbrp OCCURS 0,
vbeln TYPE vbrk-vbeln,
fktyp TYPE vbrk-fktyp,
matnr TYPE vbrp-matnr,
fkimg TYPE vbrp-fkimg,
fklmg TYPE vbrp-fklmg,
vrkme TYPE vbrp-vrkme,
meins TYPE vbrp-meins,
shkzg TYPE vbrp-shkzg,
END OF it_vbrkvbrp.
DATA: BEGIN OF it_vbrk OCCURS 0,
matnr TYPE vbrp-matnr,
fkimg TYPE vbrp-fkimg,
meins TYPE vbrp-meins,
END OF it_vbrk.
DATA: BEGIN OF it_ekko OCCURS 0,
ebeln TYPE ekko-ebeln,
bukrs TYPE ekko-bukrs,
frggr TYPE ekko-frggr,
frgsx TYPE ekko-frgsx,
frgke TYPE ekko-frgke,
frgzu TYPE ekko-frgzu,
END OF it_ekko.
DATA: BEGIN OF it_ekbe OCCURS 0,
ebeln type ekbe-ebeln,
ebelp type ekbe-ebelp,
belnr type ekbe-belnr,
buzei type ekbe-buzei,
xblnr type ekbe-xblnr,
END OF it_ekbe.
DATA: BEGIN OF it_lips OCCURS 0,
vbeln type lips-vbeln,
posnr type lips-posnr,
matnr type lips-matnr,
vgbel type lips-vgbel,
lfimg type lips-lfimg,
meins type lips-meins,
END OF it_lips.
data : it1_lips like it_lips occurs 0 with header line.
DATA: BEGIN OF itab OCCURS 1 ,
banfn LIKE eban-banfn, " Purchase requisition number
bnfpo LIKE eban-bnfpo, " PR Item Number
werks LIKE ekpo-werks, " Plant
matnr LIKE ekpo-matnr, " Material
maktx LIKE makt-maktx, " Name of Material
pr_menge LIKE eban-menge, " PR Quantity
meins LIKE ekpo-meins, " Unit
ebeln LIKE ekpo-ebeln, " PO No
bsart LIKE ekko-bsart, " Purchasing Document Type
ebelp LIKE ekpo-ebelp, " Item
menge LIKE ekpo-menge, " PO Qty
grn_menge LIKE ekpo-menge, " GRN Qty
trn_menge LIKE ekpo-menge, " Transit Qty
bal_menge LIKE ekpo-menge, " Balance PO Qty
labst LIKE mard-labst, " Valuated stock with unrestricted
fkimg LIKE vbrp-fkimg, " Actual billed quantity
minbe TYPE marc-minbe,
mabst TYPE marc-mabst,
fixkz TYPE eban-fixkz,
zfixkz(7) TYPE c,
matkl TYPE mara-matkl,
mvgr1 TYPE mvke-mvgr1,
bezei TYPE tvm1t-bezei,
zconfirm1(3) TYPE c,
zconfirm2(3) TYPE c,
zconfirm3(3) TYPE c,
END OF itab.
DATA: BEGIN OF itab_sale OCCURS 1 ,
matnr LIKE ekpo-matnr, " Material
werks LIKE ekpo-werks, " Plant
maktx LIKE makt-maktx, " Name of Material
labst LIKE mard-labst, " Valuated stock with unrestricted
END OF itab_sale.
DATA : i_eban LIKE eban OCCURS 0 WITH HEADER LINE.
DATA : del_menge LIKE ekes-menge,
grn_dabmg LIKE ekes-dabmg.
DATA: BEGIN OF it_marc OCCURS 0,
matnr TYPE marc-matnr,
werks TYPE marc-werks,
minbe TYPE marc-minbe,
mabst TYPE marc-mabst,
END OF it_marc.
DATA: BEGIN OF it_eban OCCURS 0,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
fixkz TYPE eban-fixkz,
ebeln type eban-ebeln,
END OF it_eban.
DATA: BEGIN OF it_mara OCCURS 0,
matnr TYPE mara-matnr,
matkl TYPE mara-matkl,
END OF it_mara.
DATA: BEGIN OF it_mvke OCCURS 0,
matnr TYPE mvke-matnr,
mvgr1 TYPE mvke-mvgr1,
mvgr2 TYPE mvke-mvgr2,
mvgr3 TYPE mvke-mvgr3,
mvgr4 TYPE mvke-mvgr4,
END OF it_mvke.
DATA: BEGIN OF it_tvm1t OCCURS 0,
mvgr1 TYPE tvm1t-mvgr1,
bezei TYPE tvm1t-bezei,
END OF it_tvm1t.
DATA: fcat TYPE slis_t_fieldcat_alv,
fcat1 TYPE slis_t_fieldcat_alv,
fcat2 TYPE slis_t_fieldcat_alv,
heading TYPE slis_t_listheader,
heading1 TYPE slis_t_listheader,
heading2 TYPE slis_t_listheader,
events TYPE slis_t_event,
events1 TYPE slis_t_event,
events2 TYPE slis_t_event,
repname LIKE sy-repid.
DATA: keyinfo TYPE slis_keyinfo_alv.
CONSTANTS: formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
CONSTANTS: formname_top_of_page1 TYPE slis_formname VALUE 'TOP_OF_PAGE1'
CONSTANTS: formname_top_of_page2 TYPE slis_formname VALUE 'TOP_OF_PAGE2'
RANGES : s_erdat FOR vbrk-erdat.
DATA: ss_date TYPE mkpf-budat.
DATA: ss_period(3) TYPE n.
Screen Selection
SELECTION-SCREEN BEGIN OF BLOCK s1 WITH FRAME TITLE text-001.
*SELECT-OPTIONS : s_ebeln FOR ekpo-ebeln,
s_werks FOR ekpo-werks.
SELECT-OPTIONS : s_banfn FOR eban-banfn, "Purchase requisition number
s_badat FOR eban-badat, "Requisition (request) date
s_matnr FOR eban-matnr, "Material Number
s_werks FOR eban-werks, "Plant
s_lgort FOR eban-lgort, "Storage Location
s_matkl FOR eban-matkl, "Material group
s_flief FOR eban-flief, "Fixed Vendor
s_bsart FOR ekko-bsart NO INTERVALS. " Purchasing
SELECTION-SCREEN END OF BLOCK s1 .
SELECTION-SCREEN BEGIN OF BLOCK s2 WITH FRAME TITLE text-002.
PARAMETERS: s_period(3) TYPE n .
SELECTION-SCREEN END OF BLOCK s2 .
initialization.
repname = sy-repid.
PERFORM build_eventtab USING events[].
PERFORM build_eventtab1 USING events1[].
PERFORM build_eventtab2 USING events2[].
PERFORM build_comment USING heading[].
PERFORM build_comment1 USING heading1[].
PERFORM build_comment2 USING heading2[].
Strat-of-Selection
START-OF-SELECTION.
PERFORM getdata.
PERFORM getfieldcatalog USING fcat[].
PERFORM getfieldcatalog1 USING fcat1[].
PERFORM getfieldcatalog2 USING fcat2[].
PERFORM alvdisplaydata.
END-OF-SELECTION.
*& Form getdata
text
--> p1 text
<-- p2 text
FORM getdata.
SELECT * FROM eban INTO CORRESPONDING FIELDS OF TABLE i_eban
WHERE banfn IN s_banfn "Purchase requisition number
AND badat IN s_badat "Requisition (request) date
AND matnr IN s_matnr "Material Number
AND werks IN s_werks "Plant
AND lgort IN s_lgort "Storage Location
AND matkl IN s_matkl "Material group
AND flief IN s_flief "Fixed Vendor
AND loekz NE 'X' "Deletion Pocument
AND afnam EQ 'MRP'. "Name of requisitioner/requester
IF NOT i_eban[] IS INITIAL.
LOOP AT i_eban.
CLEAR itab.
itab-banfn = i_eban-banfn.
itab-bnfpo = i_eban-bnfpo.
itab-pr_menge = i_eban-menge.
itab-meins = i_eban-meins.
itab-ebeln = i_eban-ebeln.
itab-ebelp = i_eban-ebelp.
itab-matnr = i_eban-matnr.
itab-werks = i_eban-werks.
**----Get Material Description
IF NOT i_eban-matnr IS INITIAL.
SELECT SINGLE * FROM makt
WHERE matnr EQ i_eban-matnr.
IF sy-subrc EQ 0.
itab-maktx = makt-maktx.
ENDIF.
ELSE.
itab-maktx = i_eban-txz01.
ENDIF.
*----Get PO & GRN Quantity
IF i_eban-ebeln GT 0 AND i_eban-ebelp GT 0.
SELECT SINGLE * FROM ekpo
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp.
IF sy-subrc EQ 0.
itab-menge = ekpo-menge.
ENDIF.
SELECT SINGLE * FROM ekko
WHERE ebeln = i_eban-ebeln.
IF sy-subrc EQ 0.
itab-bsart = ekko-bsart.
ENDIF.
*-------Get GRN Quantity
CLEAR : del_menge,grn_dabmg.
IF ekpo-bstae = '0004'. " GRN Against InbondDelivery
SELECT SUM( menge ) SUM( dabmg )
FROM ekes
INTO (del_menge,grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND ebtyp = 'LA'.
IF sy-subrc EQ 0.
itab-grn_menge = grn_dabmg.
itab-trn_menge = del_menge - grn_dabmg.
itab-bal_menge = ekpo-menge - del_menge.
IF itab-bal_menge < 0.
itab-bal_menge = 0.
ENDIF.
ELSE.
itab-bal_menge = itab-menge.
ENDIF.
ELSE. " Regular GRN
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'E'
AND bwart = '101'.
IF sy-subrc EQ 0.
itab-grn_menge = grn_dabmg.
itab-trn_menge = del_menge - grn_dabmg.
ENDIF.
For Cancelled GRN
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'E'
AND bwart = '102'.
IF sy-subrc EQ 0.
itab-grn_menge = itab-grn_menge - grn_dabmg.
itab-trn_menge = del_menge - grn_dabmg.
ENDIF.
IF itab-bsart = 'UB'.
CLEAR : grn_dabmg,grn_dabmg.
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'U'
AND bwart = '641'.
IF sy-subrc EQ 0.
itab-trn_menge = grn_dabmg.
ENDIF.
For Reversal of Issue Document
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'U'
AND bwart = '642'.
IF sy-subrc EQ 0.
itab-trn_menge = itab-trn_menge - grn_dabmg.
ENDIF.
IF itab-grn_menge <> 0.
itab-trn_menge = 0.
ENDIF.
ENDIF.
End
ENDIF.
*-------End
ENDIF.
itab-bal_menge = itab-menge - ( itab-grn_menge + itab-trn_menge ).
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
EXPORTING
input = itab-matnr
IMPORTING
output = itab-matnr.
itab_sale-matnr = itab-matnr.
itab_sale-werks = itab-werks.
itab_sale-maktx = itab-maktx.
COLLECT itab_sale.
APPEND itab.
ENDLOOP.
ENDIF.
IF NOT s_bsart[] IS INITIAL.
DELETE itab WHERE bsart NOT IN s_bsart.
ENDIF.
IF NOT itab_sale IS INITIAL.
LOOP AT itab_sale.
*-----Get Sales Quantity
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_INPUT'
EXPORTING
input = itab_sale-matnr
IMPORTING
output = itab_sale-matnr.
*-----Change as on 08.12.2007
SELECT SUM( clabs ) INTO itab_sale-labst
FROM mchb
WHERE matnr = itab_sale-matnr
AND werks = itab_sale-werks.
*-----End
MODIFY itab_sale TRANSPORTING labst matnr.
ENDLOOP.
LOOP AT itab.
READ TABLE itab_sale WITH KEY matnr = itab-matnr
werks = itab-werks.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
EXPORTING
input = itab_sale-matnr
IMPORTING
output = itab_sale-matnr.
MOVE itab_sale-labst TO itab-labst.
ENDIF.
MODIFY itab TRANSPORTING labst.
CLEAR itab.
ENDLOOP.
ENDIF.
CHECK itab[] IS NOT INITIAL.
SELECT * FROM marc CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_marc
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr EQ itab-matnr
AND werks EQ itab-werks.
SELECT * FROM eban CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_eban
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND banfn EQ itab-banfn
AND bnfpo EQ itab-bnfpo.
SELECT * FROM mara CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_mara
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr EQ itab-matnr.
SELECT * FROM mvke CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_mvke
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr EQ itab-matnr.
IF sy-subrc = 0.
SELECT * FROM tvm1t CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_tvm1t
FOR ALL ENTRIES IN it_mvke
WHERE mandt = sy-mandt
AND mvgr1 EQ it_mvke-mvgr1.
ENDIF.
IF s_period IS NOT INITIAL.
ss_period = s_period.
ss_period = ss_period + 1.
s_erdat-sign = 'I'.
s_erdat-option = 'BT'.
s_erdat-high = sy-datum.
ss_date = sy-datum - ss_period.
s_erdat-low = ss_date.
APPEND s_erdat.
CLEAR s_erdat.
SELECT * FROM zcvi_vbrk_vbrp CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_vbrkvbrp
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr = itab-matnr
AND fkart IN ('Z3PS','ZVIT',
'ZVDT','ZFRV',
'ZDRV','ZCMR')
AND fkdat IN s_erdat
AND fksto EQ space
AND sfakn EQ space
AND rfbsk NE 'E'
AND fkimg NE 0.
LOOP AT it_vbrkvbrp.
IF it_vbrkvbrp-fktyp NE 'L'.
DELETE it_vbrkvbrp.
CONTINUE.
ENDIF.
IF it_vbrkvbrp-vrkme NE it_vbrkvbrp-meins.
it_vbrkvbrp-fkimg = it_vbrkvbrp-fklmg.
it_vbrkvbrp-meins = it_vbrkvbrp-vrkme.
ENDIF.
IF it_vbrkvbrp-shkzg = 'X'.
it_vbrkvbrp-fkimg = it_vbrkvbrp-fkimg * -1.
ENDIF.
it_vbrk-matnr = it_vbrkvbrp-matnr.
it_vbrk-fkimg = it_vbrkvbrp-fkimg.
it_vbrk-meins = it_vbrkvbrp-meins.
IF it_vbrk[] IS INITIAL.
APPEND it_vbrk.
CLEAR it_vbrk.
ELSE.
COLLECT it_vbrk.
CLEAR it_vbrk.
ENDIF.
ENDLOOP.
ENDIF.
SORT it_vbrkvbrp BY matnr.
SELECT * FROM ekko CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_ekko
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND ebeln = itab-ebeln.
SORT it_ekko BY ebeln.
LOOP AT itab.
READ TABLE it_ekko BINARY SEARCH WITH KEY
ebeln = itab-ebeln.
IF sy-subrc = 0.
IF it_ekko-frgke = 'R'.
itab-zconfirm1 = 'YES'.
itab-zconfirm2 = 'YES'.
itab-zconfirm3 = 'YES'.
ELSEIF it_ekko-frgzu = 'X'.
itab-zconfirm1 = 'YES'.
ELSEIF it_ekko-frgzu = 'XX'.
itab-zconfirm1 = 'YES'.
itab-zconfirm2 = 'YES'.
ENDIF.
ENDIF.
IF s_period IS NOT INITIAL.
READ TABLE it_vbrk BINARY SEARCH
WITH KEY matnr = itab-matnr.
IF sy-subrc = 0.
itab-fkimg = it_vbrk-fkimg.
ENDIF.
ENDIF.
READ TABLE it_marc WITH KEY matnr = itab-matnr
werks = itab-werks.
IF sy-subrc = 0.
MOVE it_marc-minbe TO itab-minbe.
MOVE it_marc-mabst TO itab-mabst.
ENDIF.
READ TABLE it_eban WITH KEY banfn = itab-banfn
bnfpo = itab-bnfpo.
IF sy-subrc = 0.
IF it_eban-fixkz EQ 'X'.
itab-zfixkz = 'Firmed'.
ENDIF.
ENDIF.
READ TABLE it_mara WITH KEY matnr = itab-matnr.
IF sy-subrc = 0.
MOVE it_mara-matkl TO itab-matkl.
ENDIF.
READ TABLE it_mvke WITH KEY matnr = itab-matnr.
IF sy-subrc = 0.
MOVE it_mvke-mvgr1 TO itab-mvgr1.
READ TABLE it_tvm1t WITH KEY mvgr1 = itab-mvgr1.
IF sy-subrc = 0.
MOVE it_tvm1t-bezei TO itab-bezei.
ENDIF.
ENDIF.
MODIFY itab.
CLEAR itab.
ENDLOOP.
ENDFORM. " getdata
*& Form build_eventtab
text
-->P_EVENTS[] text
FORM build_eventtab USING p_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events.
READ TABLE p_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE formname_top_of_page TO ls_event-form.
APPEND ls_event TO p_events.
ENDIF.
ENDFORM. " build_eventtab
*& Form build_comment
text
-->P_HEADING[] text
FORM build_comment USING p_heading TYPE slis_t_listheader.
DATA: hline TYPE slis_listheader.
CLEAR: hline.
hline-info = 'Purchase Requision History'.
hline-typ = 'H'.
APPEND hline TO p_heading.
CLEAR hline.
ENDFORM. " build_comment
*& Form getfieldcatalog
text
--> p1 text
<-- p2 text
FORM getfieldcatalog USING p_fcat TYPE slis_t_fieldcat_alv.
DATA : w_fcat TYPE slis_fieldcat_alv.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BANFN'.
w_fcat-seltext_l = 'PR No '.
w_fcat-key = 'X'.
w_fcat-col_pos = 1.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BNFPO'.
w_fcat-seltext_l = 'PR Item '.
w_fcat-key = 'X'.
w_fcat-col_pos = 2.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MATNR'.
w_fcat-seltext_l = 'Material '.
w_fcat-col_pos = 3.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MAKTX'.
w_fcat-seltext_l = 'Name of the Mateiral '.
w_fcat-col_pos = 4.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'WERKS'.
w_fcat-seltext_l = 'Plant '.
w_fcat-col_pos = 5.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'EBELN'.
w_fcat-seltext_l = 'PO No '.
w_fcat-hotspot = 'X'.
w_fcat-col_pos = 6.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'EBELP'.
w_fcat-seltext_l = 'PO Item '.
w_fcat-col_pos = 7.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'PR_MENGE'.
w_fcat-seltext_l = 'PR Qty '.
w_fcat-col_pos = 8.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MEINS'.
w_fcat-seltext_l = 'Unit'.
w_fcat-col_pos = 9.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MENGE'.
w_fcat-seltext_l = 'PO Quantity '.
w_fcat-col_pos = 10.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'GRN_MENGE'.
w_fcat-seltext_l = 'GRN Qty '.
w_fcat-col_pos = 11.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'TRN_MENGE'.
w_fcat-seltext_l = 'Transit Qty '.
w_fcat-col_pos = 12.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BAL_MENGE'.
w_fcat-seltext_l = 'Balance PO Qty '.
w_fcat-col_pos = 13.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'LABST'.
w_fcat-seltext_l = 'Current Stock'.
w_fcat-col_pos = 14.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'FKIMG'.
w_fcat-seltext_l = 'Sales Qty '.
w_fcat-col_pos = 15.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MINBE'.
w_fcat-seltext_l = 'Reorder Point'.
w_fcat-col_pos = 16.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MABST'.
w_fcat-seltext_l = 'Maximum stock level'.
w_fcat-col_pos = 17.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZFIXKZ'.
w_fcat-seltext_l = 'Fixed Indicator'.
w_fcat-col_pos = 18.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MATKL'.
w_fcat-seltext_l = 'Design'.
w_fcat-col_pos = 19.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MVGR1'.
w_fcat-seltext_l = 'Size'.
w_fcat-col_pos = 20.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BEZEI'.
w_fcat-seltext_l = 'Size Desc.'.
w_fcat-col_pos = 21.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'FKIMG'.
w_fcat-seltext_l = 'Sales Qty '.
w_fcat-col_pos = 22.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZCONFIRM1'.
w_fcat-seltext_l = 'Release1'.
w_fcat-col_pos = 23.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZCONFIRM2'.
w_fcat-seltext_l = 'Release2'.
w_fcat-col_pos = 24.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZCONFIRM3'.
w_fcat-seltext_l = 'Release3'.
w_fcat-col_pos = 25.
APPEND w_fcat TO fcat.
ENDFORM. " getfieldcatalog
*& Form alvdisplaydata
text
--> p1 text
<-- p2 text
FORM alvdisplaydata .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repname
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fcat
it_events = events[]
TABLES
t_outtab = itab.
IF sy-subrc <> 0.
WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. " alvdisplaydata
FORM TOP_OF_PAGE *
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = heading.
ENDFORM. "TOP_OF_PAGE
*& Form build_eventtab1
text
-->P_EVENTS[] text
FORM build_eventtab1 USING p_events1 TYPE slis_t_event.
DATA: ls_event1 TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events1.
READ TABLE p_events1 WITH KEY name = slis_ev_top_of_page
INTO ls_event1.
IF sy-subrc = 0.
MOVE formname_top_of_page1 TO ls_event1-form.
APPEND ls_event1 TO p_events1.
ENDIF.
endform.
*& Form build_comment
text
-->P_HEADING[] text
FORM build_comment1 USING p_heading1 TYPE slis_t_listheader.
DATA: hline1 TYPE slis_listheader.
hline1-info = '1 Secondary List'.
hline1-typ = 'H'.
APPEND hline1 TO p_heading1.
CLEAR hline1.
ENDFORM. " build_comment
*& Form getfieldcatalog1
text
-->P_FCAT1[] text
form getfieldcatalog1 using p_fcat1 TYPE slis_t_fieldcat_alv.
DATA : w_fcat1 TYPE slis_fieldcat_alv.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'VBELN'.
w_fcat1-seltext_l = 'Pr.No'.
w_fcat1-hotspot = 'X'.
w_fcat1-col_pos = 1.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'POSNR'.
w_fcat1-seltext_l = 'PR Item'.
w_fcat1-col_pos = 2.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'MATNR'.
w_fcat1-seltext_l = 'Material'.
w_fcat1-col_pos = 3.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'LFIMG'.
w_fcat1-seltext_l = 'Actual quantity delivered'.
w_fcat1-col_pos = 4.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'MEINS'.
w_fcat1-seltext_l = 'Base Unit of Measure'.
w_fcat1-col_pos = 5.
APPEND w_fcat1 to fcat1.
endform. " getfieldcatalog1
*& Form USER_COMMAND
text
-->R_UCOMM text
-->RS_SELFIELD text
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
READ TABLE itab INDEX rs_selfield-tabindex.
IF sy-subrc EQ 0.
select vbeln
posnr
matnr
vgbel
lfimg
meins from lips into table it_lips
where vgbel = itab-ebeln.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repname
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fcat1
it_events = events1[]
TABLES
t_outtab = it_lips.
IF sy-subrc <> 0.
WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. "USER_COMMAND
FORM TOP_OF_PAGE1 *
FORM top_of_page1.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = heading1.
ENDFORM. "TOP_OF_PAGE1
*& Form build_eventtab1
text
-->P_EVENTS[] text
FORM build_eventtab2 USING p_events2 TYPE slis_t_event.
DATA: ls_event2 TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events2.
READ TABLE p_events2 WITH KEY name = slis_ev_top_of_page
INTO ls_event2.
IF sy-subrc = 0.
MOVE formname_top_of_page2 TO ls_event2-form.
APPEND ls_event2 TO p_events2.
ENDIF.
endform.
*& Form build_comment
text
-->P_HEADING[] text
FORM build_comment2 USING p_heading2 TYPE slis_t_listheader.
DATA: hline2 TYPE slis_listheader.
hline2-info = '2 Secondary List'.
hline2-typ = 'H'.
APPEND hline2 TO p_heading2.
CLEAR hline2.
ENDFORM. " build_comment
*& Form getfieldcatalog1
text
-->P_FCAT1[] text
form getfieldcatalog2 using p_fcat2 TYPE slis_t_fieldcat_alv.
DATA : w_fcat2 TYPE slis_fieldcat_alv.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'EBELN'.
w_fcat2-seltext_l = 'Pr.Doc No'.
w_fcat2-col_pos = 1.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'EBELP'.
w_fcat2-seltext_l = 'PR Doc Item'.
w_fcat2-col_pos = 2.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'BELNR'.
w_fcat2-seltext_l = 'No.Mat Doc'.
w_fcat2-col_pos = 3.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'BUZEI'.
w_fcat2-seltext_l = 'Item in Mat Doc'.Hi,
You did mistakes hear.
check for >>>>
*& Report ZCRPT_MM_MRP
REPORT zcrpt_mm_mrp .
*& Report : ZRPT_MM_PR_HISTORY *
Dev. Class : ZCVS *
Program Name : ZRPT_MM_PR_HISTORY *
Description : PO History Details List *
Author : Sujit Created on : 12.11.2007 *
SAP Release : SAP ERP Central Component 5.0 *
Tcode : Req DKIK905199 N-160 *
: DKIK905248 N-160 For Deletion indicator *
S O U R C E C O D E C H A N G E H I S T O R Y *
CODE | AUTHOR | DATE | Description *
| | | *
TABLE DECLARATIONS *
TABLES: ekko,ekpo,mara, makt,ekes,eban,mard,s994.
Internal tables decleration
TYPE-POOLS: slis.
DATA: BEGIN OF it_vbrkvbrp OCCURS 0,
vbeln TYPE vbrk-vbeln,
fktyp TYPE vbrk-fktyp,
matnr TYPE vbrp-matnr,
fkimg TYPE vbrp-fkimg,
fklmg TYPE vbrp-fklmg,
vrkme TYPE vbrp-vrkme,
meins TYPE vbrp-meins,
shkzg TYPE vbrp-shkzg,
END OF it_vbrkvbrp.
DATA: BEGIN OF it_vbrk OCCURS 0,
matnr TYPE vbrp-matnr,
fkimg TYPE vbrp-fkimg,
meins TYPE vbrp-meins,
END OF it_vbrk.
DATA: BEGIN OF it_ekko OCCURS 0,
ebeln TYPE ekko-ebeln,
bukrs TYPE ekko-bukrs,
frggr TYPE ekko-frggr,
frgsx TYPE ekko-frgsx,
frgke TYPE ekko-frgke,
frgzu TYPE ekko-frgzu,
END OF it_ekko.
DATA: BEGIN OF it_ekbe OCCURS 0,
ebeln type ekbe-ebeln,
ebelp type ekbe-ebelp,
belnr type ekbe-belnr,
buzei type ekbe-buzei,
xblnr type ekbe-xblnr,
END OF it_ekbe.
DATA: BEGIN OF it_lips OCCURS 0,
vbeln type lips-vbeln,
posnr type lips-posnr,
matnr type lips-matnr,
vgbel type lips-vgbel,
lfimg type lips-lfimg,
meins type lips-meins,
END OF it_lips.
data : it1_lips like it_lips occurs 0 with header line.
DATA: BEGIN OF itab OCCURS 1 ,
banfn LIKE eban-banfn, " Purchase requisition number
bnfpo LIKE eban-bnfpo, " PR Item Number
werks LIKE ekpo-werks, " Plant
matnr LIKE ekpo-matnr, " Material
maktx LIKE makt-maktx, " Name of Material
pr_menge LIKE eban-menge, " PR Quantity
meins LIKE ekpo-meins, " Unit
ebeln LIKE ekpo-ebeln, " PO No
bsart LIKE ekko-bsart, " Purchasing Document Type
ebelp LIKE ekpo-ebelp, " Item
menge LIKE ekpo-menge, " PO Qty
grn_menge LIKE ekpo-menge, " GRN Qty
trn_menge LIKE ekpo-menge, " Transit Qty
bal_menge LIKE ekpo-menge, " Balance PO Qty
labst LIKE mard-labst, " Valuated stock with unrestricted
fkimg LIKE vbrp-fkimg, " Actual billed quantity
minbe TYPE marc-minbe,
mabst TYPE marc-mabst,
fixkz TYPE eban-fixkz,
zfixkz(7) TYPE c,
matkl TYPE mara-matkl,
mvgr1 TYPE mvke-mvgr1,
bezei TYPE tvm1t-bezei,
zconfirm1(3) TYPE c,
zconfirm2(3) TYPE c,
zconfirm3(3) TYPE c,
END OF itab.
DATA: BEGIN OF itab_sale OCCURS 1 ,
matnr LIKE ekpo-matnr, " Material
werks LIKE ekpo-werks, " Plant
maktx LIKE makt-maktx, " Name of Material
labst LIKE mard-labst, " Valuated stock with unrestricted
END OF itab_sale.
DATA : i_eban LIKE eban OCCURS 0 WITH HEADER LINE.
DATA : del_menge LIKE ekes-menge,
grn_dabmg LIKE ekes-dabmg.
DATA: BEGIN OF it_marc OCCURS 0,
matnr TYPE marc-matnr,
werks TYPE marc-werks,
minbe TYPE marc-minbe,
mabst TYPE marc-mabst,
END OF it_marc.
DATA: BEGIN OF it_eban OCCURS 0,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
fixkz TYPE eban-fixkz,
ebeln type eban-ebeln,
END OF it_eban.
DATA: BEGIN OF it_mara OCCURS 0,
matnr TYPE mara-matnr,
matkl TYPE mara-matkl,
END OF it_mara.
DATA: BEGIN OF it_mvke OCCURS 0,
matnr TYPE mvke-matnr,
mvgr1 TYPE mvke-mvgr1,
mvgr2 TYPE mvke-mvgr2,
mvgr3 TYPE mvke-mvgr3,
mvgr4 TYPE mvke-mvgr4,
END OF it_mvke.
DATA: BEGIN OF it_tvm1t OCCURS 0,
mvgr1 TYPE tvm1t-mvgr1,
bezei TYPE tvm1t-bezei,
END OF it_tvm1t.
DATA: fcat TYPE slis_t_fieldcat_alv,
fcat1 TYPE slis_t_fieldcat_alv,
fcat2 TYPE slis_t_fieldcat_alv,
heading TYPE slis_t_listheader,
heading1 TYPE slis_t_listheader,
heading2 TYPE slis_t_listheader,
events TYPE slis_t_event,
events1 TYPE slis_t_event,
events2 TYPE slis_t_event,
repname LIKE sy-repid.
DATA: keyinfo TYPE slis_keyinfo_alv.
CONSTANTS: formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
CONSTANTS: formname_top_of_page1 TYPE slis_formname VALUE 'TOP_OF_PAGE1'
CONSTANTS: formname_top_of_page2 TYPE slis_formname VALUE 'TOP_OF_PAGE2'
RANGES : s_erdat FOR vbrk-erdat.
DATA: ss_date TYPE mkpf-budat.
DATA: ss_period(3) TYPE n.
Screen Selection
SELECTION-SCREEN BEGIN OF BLOCK s1 WITH FRAME TITLE text-001.
*SELECT-OPTIONS : s_ebeln FOR ekpo-ebeln,
s_werks FOR ekpo-werks.
SELECT-OPTIONS : s_banfn FOR eban-banfn, "Purchase requisition number
s_badat FOR eban-badat, "Requisition (request) date
s_matnr FOR eban-matnr, "Material Number
s_werks FOR eban-werks, "Plant
s_lgort FOR eban-lgort, "Storage Location
s_matkl FOR eban-matkl, "Material group
s_flief FOR eban-flief, "Fixed Vendor
s_bsart FOR ekko-bsart NO INTERVALS. " Purchasing
SELECTION-SCREEN END OF BLOCK s1 .
SELECTION-SCREEN BEGIN OF BLOCK s2 WITH FRAME TITLE text-002.
PARAMETERS: s_period(3) TYPE n .
SELECTION-SCREEN END OF BLOCK s2 .
initialization.
repname = sy-repid.
PERFORM build_eventtab USING events[].
PERFORM build_eventtab1 USING events1[].
PERFORM build_eventtab2 USING events2[].
PERFORM build_comment USING heading[].
PERFORM build_comment1 USING heading1[].
PERFORM build_comment2 USING heading2[].
Strat-of-Selection
START-OF-SELECTION.
PERFORM getdata.
PERFORM getfieldcatalog USING fcat[].
PERFORM getfieldcatalog1 USING fcat1[].
PERFORM getfieldcatalog2 USING fcat2[].
PERFORM alvdisplaydata.
END-OF-SELECTION.
*& Form getdata
text
--> p1 text
<-- p2 text
FORM getdata.
SELECT * FROM eban INTO CORRESPONDING FIELDS OF TABLE i_eban
WHERE banfn IN s_banfn "Purchase requisition number
AND badat IN s_badat "Requisition (request) date
AND matnr IN s_matnr "Material Number
AND werks IN s_werks "Plant
AND lgort IN s_lgort "Storage Location
AND matkl IN s_matkl "Material group
AND flief IN s_flief "Fixed Vendor
AND loekz NE 'X' "Deletion Pocument
AND afnam EQ 'MRP'. "Name of requisitioner/requester
IF NOT i_eban[] IS INITIAL.
LOOP AT i_eban.
CLEAR itab.
itab-banfn = i_eban-banfn.
itab-bnfpo = i_eban-bnfpo.
itab-pr_menge = i_eban-menge.
itab-meins = i_eban-meins.
itab-ebeln = i_eban-ebeln.
itab-ebelp = i_eban-ebelp.
itab-matnr = i_eban-matnr.
itab-werks = i_eban-werks.
**----Get Material Description
IF NOT i_eban-matnr IS INITIAL.
SELECT SINGLE * FROM makt
WHERE matnr EQ i_eban-matnr.
IF sy-subrc EQ 0.
itab-maktx = makt-maktx.
ENDIF.
ELSE.
itab-maktx = i_eban-txz01.
ENDIF.
*----Get PO & GRN Quantity
IF i_eban-ebeln GT 0 AND i_eban-ebelp GT 0.
SELECT SINGLE * FROM ekpo
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp.
IF sy-subrc EQ 0.
itab-menge = ekpo-menge.
ENDIF.
SELECT SINGLE * FROM ekko
WHERE ebeln = i_eban-ebeln.
IF sy-subrc EQ 0.
itab-bsart = ekko-bsart.
ENDIF.
*-------Get GRN Quantity
CLEAR : del_menge,grn_dabmg.
IF ekpo-bstae = '0004'. " GRN Against InbondDelivery
SELECT SUM( menge ) SUM( dabmg )
FROM ekes
INTO (del_menge,grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND ebtyp = 'LA'.
IF sy-subrc EQ 0.
itab-grn_menge = grn_dabmg.
itab-trn_menge = del_menge - grn_dabmg.
itab-bal_menge = ekpo-menge - del_menge.
IF itab-bal_menge < 0.
itab-bal_menge = 0.
ENDIF.
ELSE.
itab-bal_menge = itab-menge.
ENDIF.
ELSE. " Regular GRN
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'E'
AND bwart = '101'.
IF sy-subrc EQ 0.
itab-grn_menge = grn_dabmg.
itab-trn_menge = del_menge - grn_dabmg.
ENDIF.
For Cancelled GRN
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'E'
AND bwart = '102'.
IF sy-subrc EQ 0.
itab-grn_menge = itab-grn_menge - grn_dabmg.
itab-trn_menge = del_menge - grn_dabmg.
ENDIF.
IF itab-bsart = 'UB'.
CLEAR : grn_dabmg,grn_dabmg.
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'U'
AND bwart = '641'.
IF sy-subrc EQ 0.
itab-trn_menge = grn_dabmg.
ENDIF.
For Reversal of Issue Document
SELECT SUM( menge )
FROM ekbe
INTO (grn_dabmg)
WHERE ebeln = i_eban-ebeln
AND ebelp = i_eban-ebelp
AND bewtp = 'U'
AND bwart = '642'.
IF sy-subrc EQ 0.
itab-trn_menge = itab-trn_menge - grn_dabmg.
ENDIF.
IF itab-grn_menge <> 0.
itab-trn_menge = 0.
ENDIF.
ENDIF.
End
ENDIF.
*-------End
ENDIF.
itab-bal_menge = itab-menge - ( itab-grn_menge + itab-trn_menge ).
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
EXPORTING
input = itab-matnr
IMPORTING
output = itab-matnr.
itab_sale-matnr = itab-matnr.
itab_sale-werks = itab-werks.
itab_sale-maktx = itab-maktx.
COLLECT itab_sale.
APPEND itab.
ENDLOOP.
ENDIF.
IF NOT s_bsart[] IS INITIAL.
DELETE itab WHERE bsart NOT IN s_bsart.
ENDIF.
IF NOT itab_sale IS INITIAL.
LOOP AT itab_sale.
*-----Get Sales Quantity
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_INPUT'
EXPORTING
input = itab_sale-matnr
IMPORTING
output = itab_sale-matnr.
*-----Change as on 08.12.2007
SELECT SUM( clabs ) INTO itab_sale-labst
FROM mchb
WHERE matnr = itab_sale-matnr
AND werks = itab_sale-werks.
*-----End
MODIFY itab_sale TRANSPORTING labst matnr.
ENDLOOP.
LOOP AT itab.
READ TABLE itab_sale WITH KEY matnr = itab-matnr
werks = itab-werks.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
EXPORTING
input = itab_sale-matnr
IMPORTING
output = itab_sale-matnr.
MOVE itab_sale-labst TO itab-labst.
ENDIF.
MODIFY itab TRANSPORTING labst.
CLEAR itab.
ENDLOOP.
ENDIF.
CHECK itab[] IS NOT INITIAL.
SELECT * FROM marc CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_marc
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr EQ itab-matnr
AND werks EQ itab-werks.
SELECT * FROM eban CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_eban
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND banfn EQ itab-banfn
AND bnfpo EQ itab-bnfpo.
SELECT * FROM mara CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_mara
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr EQ itab-matnr.
SELECT * FROM mvke CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_mvke
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr EQ itab-matnr.
IF sy-subrc = 0.
SELECT * FROM tvm1t CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_tvm1t
FOR ALL ENTRIES IN it_mvke
WHERE mandt = sy-mandt
AND mvgr1 EQ it_mvke-mvgr1.
ENDIF.
IF s_period IS NOT INITIAL.
ss_period = s_period.
ss_period = ss_period + 1.
s_erdat-sign = 'I'.
s_erdat-option = 'BT'.
s_erdat-high = sy-datum.
ss_date = sy-datum - ss_period.
s_erdat-low = ss_date.
APPEND s_erdat.
CLEAR s_erdat.
SELECT * FROM zcvi_vbrk_vbrp CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_vbrkvbrp
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND matnr = itab-matnr
AND fkart IN ('Z3PS','ZVIT',
'ZVDT','ZFRV',
'ZDRV','ZCMR')
AND fkdat IN s_erdat
AND fksto EQ space
AND sfakn EQ space
AND rfbsk NE 'E'
AND fkimg NE 0.
LOOP AT it_vbrkvbrp.
IF it_vbrkvbrp-fktyp NE 'L'.
DELETE it_vbrkvbrp.
CONTINUE.
ENDIF.
IF it_vbrkvbrp-vrkme NE it_vbrkvbrp-meins.
it_vbrkvbrp-fkimg = it_vbrkvbrp-fklmg.
it_vbrkvbrp-meins = it_vbrkvbrp-vrkme.
ENDIF.
IF it_vbrkvbrp-shkzg = 'X'.
it_vbrkvbrp-fkimg = it_vbrkvbrp-fkimg * -1.
ENDIF.
it_vbrk-matnr = it_vbrkvbrp-matnr.
it_vbrk-fkimg = it_vbrkvbrp-fkimg.
it_vbrk-meins = it_vbrkvbrp-meins.
IF it_vbrk[] IS INITIAL.
APPEND it_vbrk.
CLEAR it_vbrk.
ELSE.
COLLECT it_vbrk.
CLEAR it_vbrk.
ENDIF.
ENDLOOP.
ENDIF.
SORT it_vbrkvbrp BY matnr.
SELECT * FROM ekko CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE it_ekko
FOR ALL ENTRIES IN itab
WHERE mandt = sy-mandt
AND ebeln = itab-ebeln.
SORT it_ekko BY ebeln.
LOOP AT itab.
READ TABLE it_ekko BINARY SEARCH WITH KEY
ebeln = itab-ebeln.
IF sy-subrc = 0.
IF it_ekko-frgke = 'R'.
itab-zconfirm1 = 'YES'.
itab-zconfirm2 = 'YES'.
itab-zconfirm3 = 'YES'.
ELSEIF it_ekko-frgzu = 'X'.
itab-zconfirm1 = 'YES'.
ELSEIF it_ekko-frgzu = 'XX'.
itab-zconfirm1 = 'YES'.
itab-zconfirm2 = 'YES'.
ENDIF.
ENDIF.
IF s_period IS NOT INITIAL.
READ TABLE it_vbrk BINARY SEARCH
WITH KEY matnr = itab-matnr.
IF sy-subrc = 0.
itab-fkimg = it_vbrk-fkimg.
ENDIF.
ENDIF.
READ TABLE it_marc WITH KEY matnr = itab-matnr
werks = itab-werks.
IF sy-subrc = 0.
MOVE it_marc-minbe TO itab-minbe.
MOVE it_marc-mabst TO itab-mabst.
ENDIF.
READ TABLE it_eban WITH KEY banfn = itab-banfn
bnfpo = itab-bnfpo.
IF sy-subrc = 0.
IF it_eban-fixkz EQ 'X'.
itab-zfixkz = 'Firmed'.
ENDIF.
ENDIF.
READ TABLE it_mara WITH KEY matnr = itab-matnr.
IF sy-subrc = 0.
MOVE it_mara-matkl TO itab-matkl.
ENDIF.
READ TABLE it_mvke WITH KEY matnr = itab-matnr.
IF sy-subrc = 0.
MOVE it_mvke-mvgr1 TO itab-mvgr1.
READ TABLE it_tvm1t WITH KEY mvgr1 = itab-mvgr1.
IF sy-subrc = 0.
MOVE it_tvm1t-bezei TO itab-bezei.
ENDIF.
ENDIF.
MODIFY itab.
CLEAR itab.
ENDLOOP.
ENDFORM. " getdata
*& Form build_eventtab
text
-->P_EVENTS[] text
FORM build_eventtab USING p_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events.
READ TABLE p_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE formname_top_of_page TO ls_event-form.
APPEND ls_event TO p_events.
ENDIF.
ENDFORM. " build_eventtab
*& Form build_comment
text
-->P_HEADING[] text
FORM build_comment USING p_heading TYPE slis_t_listheader.
DATA: hline TYPE slis_listheader.
CLEAR: hline.
hline-info = 'Purchase Requision History'.
hline-typ = 'H'.
APPEND hline TO p_heading.
CLEAR hline.
ENDFORM. " build_comment
*& Form getfieldcatalog
text
--> p1 text
<-- p2 text
FORM getfieldcatalog USING p_fcat TYPE slis_t_fieldcat_alv.
DATA : w_fcat TYPE slis_fieldcat_alv.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BANFN'.
w_fcat-seltext_l = 'PR No '.
w_fcat-key = 'X'.
w_fcat-col_pos = 1.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BNFPO'.
w_fcat-seltext_l = 'PR Item '.
w_fcat-key = 'X'.
w_fcat-col_pos = 2.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MATNR'.
w_fcat-seltext_l = 'Material '.
w_fcat-col_pos = 3.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MAKTX'.
w_fcat-seltext_l = 'Name of the Mateiral '.
w_fcat-col_pos = 4.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'WERKS'.
w_fcat-seltext_l = 'Plant '.
w_fcat-col_pos = 5.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'EBELN'.
w_fcat-seltext_l = 'PO No '.
w_fcat-hotspot = 'X'.
w_fcat-col_pos = 6.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'EBELP'.
w_fcat-seltext_l = 'PO Item '.
w_fcat-col_pos = 7.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'PR_MENGE'.
w_fcat-seltext_l = 'PR Qty '.
w_fcat-col_pos = 8.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MEINS'.
w_fcat-seltext_l = 'Unit'.
w_fcat-col_pos = 9.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MENGE'.
w_fcat-seltext_l = 'PO Quantity '.
w_fcat-col_pos = 10.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'GRN_MENGE'.
w_fcat-seltext_l = 'GRN Qty '.
w_fcat-col_pos = 11.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'TRN_MENGE'.
w_fcat-seltext_l = 'Transit Qty '.
w_fcat-col_pos = 12.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BAL_MENGE'.
w_fcat-seltext_l = 'Balance PO Qty '.
w_fcat-col_pos = 13.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'LABST'.
w_fcat-seltext_l = 'Current Stock'.
w_fcat-col_pos = 14.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'FKIMG'.
w_fcat-seltext_l = 'Sales Qty '.
w_fcat-col_pos = 15.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MINBE'.
w_fcat-seltext_l = 'Reorder Point'.
w_fcat-col_pos = 16.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MABST'.
w_fcat-seltext_l = 'Maximum stock level'.
w_fcat-col_pos = 17.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZFIXKZ'.
w_fcat-seltext_l = 'Fixed Indicator'.
w_fcat-col_pos = 18.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MATKL'.
w_fcat-seltext_l = 'Design'.
w_fcat-col_pos = 19.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'MVGR1'.
w_fcat-seltext_l = 'Size'.
w_fcat-col_pos = 20.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'BEZEI'.
w_fcat-seltext_l = 'Size Desc.'.
w_fcat-col_pos = 21.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'FKIMG'.
w_fcat-seltext_l = 'Sales Qty '.
w_fcat-col_pos = 22.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZCONFIRM1'.
w_fcat-seltext_l = 'Release1'.
w_fcat-col_pos = 23.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZCONFIRM2'.
w_fcat-seltext_l = 'Release2'.
w_fcat-col_pos = 24.
APPEND w_fcat TO fcat.
CLEAR w_fcat.
w_fcat-tabname = 'ITAB'.
w_fcat-fieldname = 'ZCONFIRM3'.
w_fcat-seltext_l = 'Release3'.
w_fcat-col_pos = 25.
APPEND w_fcat TO fcat.
ENDFORM. " getfieldcatalog
*& Form alvdisplaydata
text
--> p1 text
<-- p2 text
FORM alvdisplaydata .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repname
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fcat
it_events = events[]
TABLES
t_outtab = itab.
IF sy-subrc <> 0.
WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. " alvdisplaydata
FORM TOP_OF_PAGE *
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = heading.
ENDFORM. "TOP_OF_PAGE
*& Form build_eventtab1
text
-->P_EVENTS[] text
FORM build_eventtab1 USING p_events1 TYPE slis_t_event.
DATA: ls_event1 TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events1.
READ TABLE p_events1 WITH KEY name = slis_ev_top_of_page
INTO ls_event1.
IF sy-subrc = 0.
MOVE formname_top_of_page1 TO ls_event1-form.
APPEND ls_event1 TO p_events1.
ENDIF.
endform.
*& Form build_comment
text
-->P_HEADING[] text
FORM build_comment1 USING p_heading1 TYPE slis_t_listheader.
DATA: hline1 TYPE slis_listheader.
hline1-info = '1 Secondary List'.
hline1-typ = 'H'.
APPEND hline1 TO p_heading1.
CLEAR hline1.
ENDFORM. " build_comment
*& Form getfieldcatalog1
text
-->P_FCAT1[] text
form getfieldcatalog1 using p_fcat1 TYPE slis_t_fieldcat_alv.
DATA : w_fcat1 TYPE slis_fieldcat_alv.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'VBELN'.
w_fcat1-seltext_l = 'Pr.No'.
w_fcat1-hotspot = 'X'.
w_fcat1-col_pos = 1.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'POSNR'.
w_fcat1-seltext_l = 'PR Item'.
w_fcat1-col_pos = 2.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'MATNR'.
w_fcat1-seltext_l = 'Material'.
w_fcat1-col_pos = 3.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'LFIMG'.
w_fcat1-seltext_l = 'Actual quantity delivered'.
w_fcat1-col_pos = 4.
APPEND w_fcat1 to fcat1.
CLEAR w_fcat1.
w_fcat1-tabname = 'IT_LIPS'.
w_fcat1-fieldname = 'MEINS'.
w_fcat1-seltext_l = 'Base Unit of Measure'.
w_fcat1-col_pos = 5.
APPEND w_fcat1 to fcat1.
endform. " getfieldcatalog1
*& Form USER_COMMAND
text
-->R_UCOMM text
-->RS_SELFIELD text
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
READ TABLE itab INDEX rs_selfield-tabindex.
IF sy-subrc EQ 0.
select vbeln
posnr
matnr
vgbel
lfimg
meins from lips into table it_lips
where vgbel = itab-ebeln.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repname
>>>> i_callback_user_command = 'USER_COMMAND1'
it_fieldcat = fcat1
it_events = events1[]
TABLES
t_outtab = it_lips.
IF sy-subrc 0.
WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. "USER_COMMAND
FORM TOP_OF_PAGE1 *
FORM top_of_page1.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = heading1.
ENDFORM. "TOP_OF_PAGE1
*& Form build_eventtab1
text
-->P_EVENTS[] text
FORM build_eventtab2 USING p_events2 TYPE slis_t_event.
DATA: ls_event2 TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events2.
READ TABLE p_events2 WITH KEY name = slis_ev_top_of_page
INTO ls_event2.
IF sy-subrc = 0.
MOVE formname_top_of_page2 TO ls_event2-form.
APPEND ls_event2 TO p_events2.
ENDIF.
endform.
*& Form build_comment
text
-->P_HEADING[] text
FORM build_comment2 USING p_heading2 TYPE slis_t_listheader.
DATA: hline2 TYPE slis_listheader.
hline2-info = '2 Secondary List'.
hline2-typ = 'H'.
APPEND hline2 TO p_heading2.
CLEAR hline2.
ENDFORM. " build_comment
*& Form getfieldcatalog1
text
-->P_FCAT1[] text
form getfieldcatalog2 using p_fcat2 TYPE slis_t_fieldcat_alv.
DATA : w_fcat2 TYPE slis_fieldcat_alv.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'EBELN'.
w_fcat2-seltext_l = 'Pr.Doc No'.
w_fcat2-col_pos = 1.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'EBELP'.
w_fcat2-seltext_l = 'PR Doc Item'.
w_fcat2-col_pos = 2.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'BELNR'.
w_fcat2-seltext_l = 'No.Mat Doc'.
w_fcat2-col_pos = 3.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'BUZEI'.
w_fcat2-seltext_l = 'Item in Mat Doc'.
w_fcat2-col_pos = 4.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'MENGE'.
w_fcat2-seltext_l = 'Quantity'.
w_fcat2-col_pos = 5.
APPEND w_fcat2 to fcat2.
CLEAR w_fcat2.
w_fcat2-tabname = 'IT_EKBE'.
w_fcat2-fieldname = 'XBLNR'.
w_fcat2-seltext_l = 'Ref Doc Num'.
w_fcat2-col_pos = 5.
APPEND w_fcat2 to fcat2.
endform. " getfieldcatalog2
*& Form USER_COMMAND1
text
-->R_UCOMM text
-->RS_SELFIELD text
FORM user_command1 USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
READ TABLE it_lips INDEX rs_selfield-tabindex.
IF sy-subrc EQ 0.
select ebeln
ebelp
belnr
buzei
menge
xblnr from ekbe into table it_ekbe
where xblnr = it_lips-vbeln.
endif.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repname
i_callback_user_command = 'USER_COMMAND1'
it_fieldcat = fcat2
it_events = events2[]
TABLES
t_outtab = it_ekbe.
IF sy-subrc 0.
WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. "USER_COMMAND
FORM TOP_OF_PAGE1
FORM top_of_page2.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = heading2.
ENDFORM. "TOP_OF_PAGE2 -
At selection screen output not responding
Hi ppl,
I've 4 selection options in my screen. however I just need user to insert only 1 of the 4 for searching. Therefore i included 4 radio buttons. when user select <i>rbf</i>, <i>sfileno</i> will activer and other 3 will be grayed out, when user select <i>rbi</i>, <i>sidnum</i> will active and other will not be active and so forth. You can see the codes below.
However, during the program running, I found out when i select <i>rbf,</i> the other select options fields - <i>sfileno</i>, <i>sidnum</i> n <i>scompsno</i> are not inactive/grayed. It is the same when I seledt the other radio button. I just seem that i receive no response from the program. What have i done wrong here. please help. TQ
SELECTION-SCREEN BEGIN OF BLOCK frm1 WITH FRAME TITLE text-t01 .
SELECT-OPTIONS : sfileno FOR zlic_masterdb-nofailpermohonan modif id f01
sidnum FOR zcustomer-idnumber modif id i01,
sconame FOR zcustomer-contactname modif id n01,
scompsno FOR zcom_compdhdr-compsno modif id c01.
PARAMETERS: rbf RADIOBUTTON GROUP g1 ,
rbi RADIOBUTTON GROUP g1,
rbn RADIOBUTTON GROUP g1,
rbc RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK frm1.
INITIALIZATION.
sfileno = '00001'.
AT SELECTION-SCREEN OUTPUT
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CHECK SCREEN-GROUP1 = 'f01' OR
SCREEN-GROUP1 = 'i01' OR
SCREEN-GROUP1 = 'n01' OR
SCREEN-GROUP1 = 'c01'.
IF rbf = 'X'.
IF SCREEN-GROUP1 EQ 'f01'.
SCREEN-ACTIVE = 1.
ELSEIF SCREEN-GROUP1 EQ 'i01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'n01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'c01'.
SCREEN-ACTIVE = 0.
ENDIF.
ELSEIF rbi = 'X'.
IF SCREEN-GROUP1 EQ 'i01'.
SCREEN-ACTIVE = 1.
ELSEIF SCREEN-GROUP1 EQ 'f01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'n01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'c01'.
SCREEN-ACTIVE = 0.
ENDIF.
ELSEIF rbn = 'X'.
IF SCREEN-GROUP1 EQ 'n01'.
SCREEN-ACTIVE = 1.
ELSEIF SCREEN-GROUP1 EQ 'f01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'i01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'c01'.
SCREEN-ACTIVE = 0.
ENDIF.
ELSEIF rbc = 'X'.
IF SCREEN-GROUP1 EQ 'c01'.
SCREEN-ACTIVE = 1.
ELSEIF SCREEN-GROUP1 EQ 'f01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'n01'.
SCREEN-ACTIVE = 0.
ELSEIF SCREEN-GROUP1 EQ 'i01'.
SCREEN-ACTIVE = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
continue.
ENDLOOP.hi Enzo
Check my sample code
TABLES: eban,
SSCRFIELDS.
SELECTION-SCREEN BEGIN OF SCREEN 100 TITLE title.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETER:rad1 RADIOBUTTON GROUP rad USER-COMMAND frad1 DEFAULT 'X',
rad2 RADIOBUTTON GROUP rad .
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
PARAMETER: mtr AS CHECKBOX MODIF ID g3 USER-COMMAND chk1,
p_matnr TYPE eban-matnr MODIF ID g1,
sloc AS CHECKBOX MODIF ID g3 USER-COMMAND chk2,
str_loc TYPE eban-lgort MODIF ID g4.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03.
SELECT-OPTIONS: matnr1 FOR eban-matnr MODIF ID g2.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN PUSHBUTTON /20(10) name USER-COMMAND UCOM.
SELECTION-SCREEN END OF SCREEN 100.
name = 'FETCH'.
title = 'Test Report'.
CALL SELECTION-SCREEN '100'.
TYPE-POOLS slis.
* declaration of internal tables and work areas to be used
DATA: BEGIN OF it_pr OCCURS 0,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
loekz TYPE eban-loekz,
statu TYPE eban-statu,
ekgrp TYPE eban-ekgrp,
matnr TYPE eban-matnr,
werks TYPE eban-werks,
lgort TYPE eban-lgort,
preis TYPE eban-preis,
peinh TYPE eban-peinh,
END OF it_pr.
DATA: BEGIN OF it_mat OCCURS 0,
matnr TYPE eban-matnr,
END OF it_mat.
*DATA:BEGIN OF ITAB1 OCCURS 0,
DATA: l_answer.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat LIKE LINE OF it_fieldcat,
it_event TYPE slis_t_event,
wa_event TYPE slis_alv_event.
* declaration of variables to be used
DATA: r_ucomm TYPE sy-ucomm,
mat_no TYPE eban-matnr,
len TYPE i VALUE 1,
count TYPE i VALUE IS INITIAL,
iflag TYPE i VALUE IS INITIAL,
iflag1 TYPE i VALUE 0.
DATA :pr_id TYPE sy-repid,
rt_extab TYPE slis_t_extab.
INITIALIZATION.
pr_id = sy-repid.
probably it would sol;ve ur problem
regards
ravish
<b>plz dont forget to reward points if helpful</b> -
Hello All,
i am creating RFC enabled function module with 2 input parameters as banfn and vbeln
i have defined them in import paramaters as
IMPORT
P_M_BANFN_LOW TYPE BAPIEBAN-PREQ_NO
P_M_BANFN_HIGH TYPE BAPIEBAN-PREQ_NO
P_M_VBELN_LOW TYPE BAPIEBKN-SD_DOC
P_M_VBELN_HIGH TYPE BAPIEBKN-SD_DOC
user can enter two values or any of the 1 value or values in ranges..it shd work like select-options.
now in source code i have defined...
tables : eban,ebkn.
types : BEGIN OF ITAB ,
vbeln LIKE EBKN-vbeln,
banfn LIKE EBAN-banfn,
bnfpo like eban-bnfpo,
end of itab.
DATA: ITAB_MSGPF TYPE STANDARD TABLE OF ITAB WITH HEADER LINE.(continued source code)
ranges : banfn1 FOR eban-banfn.
if p_m_banfn_low is not initial and p_m_banfn_high is not initial.
banfn1-sign = 'I'.
banfn1-option = 'BT'.
banfn1-LOW = p_m_banfn_low.
banfn1-high = p_m_banfn_high.
append banfn1.
else.
banfn1-sign = 'I'.
banfn1-option = 'CP'.
banfn1-LOW = '*'.
append banfn1.
endif.
ranges : vbeln1 FOR eban-banfn.
if p_m_vbeln_low is not initial and p_m_vbeln_high is not initial.
vbeln1-sign = 'I'.
vbeln1-option = 'BT'.
vbeln1-LOW = p_m_vbeln_low.
vbeln1-high = p_m_vbeln_high.
append vbeln1.
else.
vbeln1-sign = 'I'.
vbeln1-option = 'CP'.
vbeln1-LOW = '*'.
append vbeln1.
endif.
select ebanbanfn ebanbnfpo ebkn~vbeln into corresponding fields of table itab_msgpf up to 10 rows
from eban
inner join ebkn on
ebanbanfn = ebknbanfn
where eban~banfn in banfn1.
i am unable to fill my internal table itab_msgpf..what might be reason?
Maybe you are looking for
-
Insert From Master Table which is not based on EO
Hi I have a Master-Detail relationship table page,now my requirement is to Insert data from Master VO(which is not based on any EO) Actually I have added four new columns in the VO,only these four columns are of type message Text Input,all others are
-
Error while releasing document.
hi to all, while releasing document through vf02 error is coming "tax code does not appear in any g/l account" i have made a new tax code and copied condition type jlst and created new condition type.respective gl is also assigned in ob40.still error
-
SXPG_COMMAND_EXECUTE failed for BRTOOLS - Reason
Hi, My CI + DB in Suse Linux and SAP Karnal level is 159 My Dialog instace in on windows server and Karnal level is 159. When i trying to open the detail log of db13 from Dialog instace it was not opened and shows the error as below ( but it showing
-
How do i get my ipod unlocked?
My ipod is disable and it wont let me unlock it on itunes. How do i get it unlocked?
-
Premiere Pro 2.0 HDV problem
I have installed the free version announced for Pr PRO 2.0, using the license number given. Works well for DV clips, but for HDV clips they can't be viewed. Is there a limit on this free version, as it is for the new one's (like CS5 for exemple) wher