SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Find Material and Customer price on base of condition type



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ММ
View previous topic :: View next topic  
Author Message
admin
Администратор
Администратор



Joined: 01 Sep 2007
Posts: 1639

PostPosted: Sat Sep 29, 2007 4:49 pm    Post subject: Find Material and Customer price on base of condition type Reply with quote

Material condition :
Get the data from A004 Table ,here KNUMH field is important,then do compare with konp table with knumh,get the kbetr value so you need to use A004 Table and KONP

Customer condition :
Get the data from A007 table,take the knumh field ,do compare with KONP table with KNUMH,then get the kbeter value.

Check the below program and here i am taking the data from A004 table:

Code:
REPORT ZMM_KITCHEN_COST no standard page heading
line-size 255
message-id zwave .

* type-pools
type-pools : slis.


* Tables
tables : mara,
makt,
mbew,
konp,
pgmi,
marc,
RMCP3,
sscrfields,
mvke.


* Internal Table for MARC and MARA
data : begin of i_join occurs 0,
matnr like mara-matnr, " Material #
meins like mara-meins, " Unit of Measure
werks like marc-werks, " Plant
zzdept like marc-zzdept," Department
end of i_join.

* Internal table for PGMI

data : begin of i_pgmi occurs 0,
werks like pgmi-werks, " Plant,
nrmit like pgmi-nrmit, " Material #
wemit like pgmi-wemit, " Plant
end of i_pgmi.


* Internal Table for MBEW
data i_mbew like mbew occurs 0 with header line.

* Internal Table for Output
data : begin of i_output occurs 0 ,
matnr like mara-matnr, " Material #
maktx like makt-maktx, " Material Desc
VPRSV like mbew-VPRSV, " Price Control Indicator
VERPR like mbew-VERPR, " Moving Avg Price
meins like mara-meins, " Base Unit of Measure
STPRS like mbew-STPRS, " Standard Price
LPLPR like mbew-LPLPR, " Current Planned Price
ZPLPR like mbew-ZPLPR, " Future Planned Price
VPLPR like mbew-VPLPR, " Previous Planned Price
kbetr like konp-kbetr, " Sales Price
KMEIN like konp-KMEIN, " Sales Unit
margin(5) type p decimals 2,
vmsta like mvke-vmsta, " Material Status.
end of i_output.

* Internal Table for A004
data : i_a004 like a004 occurs 0 with header line.

* Variables
data : wa_lines type i,
wa_maktx type makt-maktx,
v_flag type c.

* ALV Function Module Variables
DATA: g_repid like sy-repid,
gs_layout type slis_layout_alv,
g_exit_caused_by_caller,
gs_exit_caused_by_user type slis_exit_by_user.

DATA: gt_fieldcat type slis_t_fieldcat_alv,
gs_print type slis_print_alv,
gt_events type slis_t_event,
gt_list_top_of_page type slis_t_listheader,
g_status_set type slis_formname value 'PF_STATUS_SET',
g_user_command type slis_formname value 'USER_COMMAND',
g_top_of_page type slis_formname value 'TOP_OF_PAGE',
g_top_of_list type slis_formname value 'TOP_OF_LIST',
g_end_of_list type slis_formname value 'END_OF_LIST',
g_variant LIKE disvariant,
g_save(1) TYPE c,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_exit(1) TYPE c,
gx_variant LIKE disvariant.

data : gr_layout_bck type slis_layout_alv.



* Selection-screen
selection-screen : begin of block blk with frame title text-001.

parameters : p_werks like marc-werks default '1000' obligatory.
select-options : s_dept for marc-zzdept obligatory,
s_matnr for mara-matnr,
s_mtart for mara-mtart,
s_vprsv for mbew-VPRSV,
s_PRGRP for RMCP3-PRGRP MATCHCODE OBJECT MAT2 ,
s_vmsta for mvke-vmsta.

selection-screen: end of block blk.

*SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
*PARAMETERS: p_vari LIKE disvariant-variant.
*SELECTION-SCREEN END OF BLOCK b3.
*
*----------------------------------------------------------------------*
* At slection screen events *
*----------------------------------------------------------------------*
*-- Process on value request
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
* PERFORM f4_for_variant.
*

*----------------------------------------------------------------------*
* Initialization *
*----------------------------------------------------------------------*

Initialization.

g_repid = sy-repid.

sscrfields-functxt_01 = 'Clear Selection'.
selection-screen function key 1.



AT SELECTION-SCREEN.

case sscrfields-ucomm.

when 'Clear Selection' or 'FC01'.
clear: s_matnr,
p_werks.
refresh: s_matnr,
s_dept,
s_mtart,
s_vprsv,
s_PRGRP,
s_vmsta.


endcase.


*----------------------------------------------------------------------*
* Start-of-selection.
*----------------------------------------------------------------------*

start-of-selection.

* Clear the all data.
perform clear_data.

* Get the data from PGMI Table
perform get_pgmi.

* Get the data from MARC and MARA Table
perform get_mara_marc.

* Get the data from MBEW Table
perform get_mbew.

* Move the data into OUTPUT Table

perform move_output_internal.


*end-of-selection.
end-of-selection.

if not i_output[] is initial.
* ALV Function Module
perform print_alv.
endif.
*&---------------------------------------------------------------------*
*& Form get_pgmi
*&---------------------------------------------------------------------*
* Select the data from PGMI Table
*----------------------------------------------------------------------*
FORM get_pgmi.

clear v_flag.
* If Product group has a value at Selection-screen.
if not s_prgrp is initial.
select werks nrmit wemit from pgmi into table i_pgmi
where prgrp in s_prgrp
and werks = p_werks
and wemit = p_werks.
v_flag = 'X'.
endif.


ENDFORM. " get_pgmi
*&---------------------------------------------------------------------*
*& Form get_mara_marc
*&---------------------------------------------------------------------*
* Select the data from MARA and MARC
*----------------------------------------------------------------------*
FORM get_mara_marc.

if v_flag = 'X'.

select a~matnr a~meins b~werks b~zzdept into table i_join
from mara as a inner join marc as b on a~matnr = b~matnr
for all entries in i_pgmi
where a~matnr in s_matnr
and b~werks = p_werks
and b~zzdept in s_dept
and a~mtart in s_mtart
and a~matnr = i_pgmi-nrmit
and b~werks = i_pgmi-werks.



else.
* Get the data from MARA and MARC Table
select a~matnr a~meins b~werks b~zzdept into table i_join
from mara as a inner join marc as b on a~matnr = b~matnr
where a~matnr in s_matnr
and b~werks = p_werks
and b~zzdept in s_dept
and a~mtart in s_mtart.
endif.

clear wa_lines.
describe table i_join lines wa_lines.

if wa_lines is initial.
message i000(zwave) with 'List contains no data'.
stop.
endif.

sort i_join by matnr werks zzdept.

ENDFORM. " get_mara_marc
*&---------------------------------------------------------------------*
*& Form get_mbew
*&---------------------------------------------------------------------*
* Select the data from MBEW Table
*----------------------------------------------------------------------*
FORM get_mbew.

* Get the data from MBEW.
select * from mbew into table i_mbew
for all entries in i_join
where matnr = i_join-matnr.

clear wa_lines.

describe table i_mbew lines wa_lines.

if wa_lines is initial.
message i000(zwave) with 'List contains no data'.
stop.
endif.


sort i_mbew by matnr bwkey.
ENDFORM. " get_mbew
*&---------------------------------------------------------------------*
*& Form move_output_internal
*&---------------------------------------------------------------------*
* Final Results
*----------------------------------------------------------------------*
FORM move_output_internal.

loop at i_join.

clear wa_maktx.

* Compare the data with MVKE Table
select single vmsta from mvke into mvke-vmsta
where matnr = i_join-matnr
and vkorg = '0001'
and vtweg = '01'
and vmsta in s_vmsta.

if sy-subrc ne 0.
continue.
else.
i_output-vmsta = mvke-vmsta.
endif.

read table i_mbew with key matnr = i_join-matnr
bwkey = i_join-werks
binary search.

if sy-subrc eq 0.

* Price Control Indicator
i_output-VPRSV = i_mbew-VPRSV.

* Moving Average Price
i_output-VERPR = i_mbew-VERPR / i_mbew-peinh.

* Standard Price
i_output-STPRS = i_mbew-STPRS / i_mbew-peinh.

* Current Planned Price
i_output-LPLPR = i_mbew-LPLPR / i_mbew-peinh.

* Future Planned Price
i_output-ZPLPR = i_mbew-ZPLPR / i_mbew-peinh.

* Previous Planned Price
i_output-VPLPR = i_mbew-VPLPR / i_mbew-peinh.

* Base Unit of Measure - Added by Seshu 01/09/2007
i_output-meins = i_join-meins.

else.
continue.
endif.

* Get the sales Price.

perform get_sales_data.

if i_mbew-VPRSV = 'V'.

* Get the Percentage of Margin
if i_output-kbetr ne '0.00'.
i_output-margin = ( ( i_output-kbetr - i_mbew-VERPR )
/ i_output-kbetr ) * 100 .
endif.

else.

* Get the Percentage of Margin
if i_output-kbetr ne '0.00'.
i_output-margin = ( ( i_output-kbetr - i_output-stprs )
/ i_output-kbetr ) * 100 .
endif.


endif.

* Get the material Description from MAKT Table
select single maktx from makt into wa_maktx
where matnr = i_join-matnr
and spras = 'E'.
if sy-subrc eq 0.

i_output-matnr = i_join-matnr.
i_output-maktx = wa_maktx.

endif.


append i_output.
clear : i_output,
i_join,
i_mbew.

endloop.

ENDFORM. " move_output_internal

*&---------------------------------------------------------------------*
*& Form get_sales_data
*&---------------------------------------------------------------------*
* Get the Sales Price for each material
*----------------------------------------------------------------------*
FORM get_sales_data.

* Get the data from A004 table to get KNUMH
* Added new field Sales Unit - Seshu 01/09/2006
refresh : i_a004.
clear : i_a004.
data : lv_kbetr like konp-kbetr," Condition value
lv_KPEIN like konp-kpein , "per
lv_KMEIN like konp-KMEIN. " Sales Unit
select * from a004 into table i_a004
where matnr = i_join-matnr
and vkorg = '0001'
and vtweg = '01'.

if sy-subrc eq 0.
sort i_a004 by DATAB descending.
* Get the Latetest Date
read table i_a004 with key matnr = i_join-matnr
vkorg = '0001'
vtweg = '01'
binary search.

* Get the Sales Value
select single kbetr KPEIN KMEIN from konp
into (lv_kbetr,lv_KPEIN, lv_KMEIN)
where knumh = i_a004-knumh
and kappl = i_a004-kappl
and kschl = i_a004-kschl.
if sy-subrc eq 0.

i_output-kbetr = lv_kbetr / lv_KPEIN.
i_output-KMEIN = lv_KMEIN.
endif.

endif.
clear : lv_kbetr,
lv_kpein,
lv_KMEIN.

ENDFORM. " get_sales_data

*&---------------------------------------------------------------------*
*& Form print_alv
*&---------------------------------------------------------------------*
* ALV Function Module
*----------------------------------------------------------------------*
FORM print_alv.

* Fill the Fiedlcat
PERFORM fieldcat_init using gt_fieldcat[].

gr_layout_bck-edit_mode = 'D'.

gr_layout_bck-colwidth_optimize = 'X'.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = g_repid
* I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = g_user_command
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = gr_layout_bck
IT_FIELDCAT = gt_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = g_save
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_ADD_FIELDCAT =
* IT_HYPERLINK =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_EXCEPT_QINFO =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = i_output
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


ENDFORM. " print_alv

*&---------------------------------------------------------------------*
*& Form fieldcat_init
*&---------------------------------------------------------------------*
* Fieldcat
*----------------------------------------------------------------------*
FORM fieldcat_init USING e01_lt_fieldcat type slis_t_fieldcat_alv.

DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.


* Material #
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MATNR'.
LS_FIELDCAT-ref_fieldname = 'MATNR'.
LS_FIELDCAT-ref_tabname = 'MARA'.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Material'.
ls_fieldcat-seltext_M = 'Material'.
ls_fieldcat-seltext_S = 'Material'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Material Description
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MAKTX'.
LS_FIELDCAT-OUTPUTLEN = 35.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Description'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Price Indicator
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VPRSV'.
LS_FIELDCAT-OUTPUTLEN = 7.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Price Control Indicator'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.


* Moving Avg Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VERPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Moving Avg Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Base Unit of Measure
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MEINS'.
LS_FIELDCAT-OUTPUTLEN = 7.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Base Unit'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.


* Standard Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'STPRS'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Standard Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Current Planned Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'LPLPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Current Planned Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Future Planned Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ZPLPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Future Planned Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.


* Previous Planned Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VPLPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Previous Planned Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.


* Sales Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'KBETR'.
LS_FIELDCAT-OUTPUTLEN = 13.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Sales Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Sales Unit
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'KMEIN'.
LS_FIELDCAT-OUTPUTLEN = 7.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Sales Unit'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.


* % of Gross Margin
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MARGIN'.
LS_FIELDCAT-OUTPUTLEN = 13.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = '% of Gross Margin'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.

* Material Status
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VMSTA'.
LS_FIELDCAT-OUTPUTLEN = 13.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Material Status'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.


ENDFORM. " fieldcat_init
**&---------------------------------------------------------------------
*
**& Form f4_for_variant
**&---------------------------------------------------------------------
*
** text
**----------------------------------------------------------------------
*
*FORM f4_for_variant.
*
* CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
* EXPORTING
* is_variant = g_variant
* i_save = g_save
* i_tabname_header = g_tabname_header
* i_tabname_item = g_tabname_item
** it_default_fieldcat =
* IMPORTING
* e_exit = g_exit
* es_variant = gx_variant
* EXCEPTIONS
* not_found = 2.
* IF sy-subrc = 2.
* MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ELSE.
* IF g_exit = space.
* p_vari = gx_variant-variant.
* ENDIF.
* ENDIF.
*
*
*ENDFORM. " f4_for_variant
*&---------------------------------------------------------------------*
*& Form clear_data
*&---------------------------------------------------------------------*
* Clear the Internal table
*----------------------------------------------------------------------*
FORM clear_data.

clear : i_output,
i_join,
i_mbew,
i_a004,
i_pgmi.

refresh : i_output,
i_join,
i_mbew,
i_a004,
i_pgmi.


ENDFORM. " clear_data


*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield. "#EC CALLED


CASE R_UCOMM.
WHEN '&IC1'.

read table i_output index rs_selfield-tabindex.

SET PARAMETER ID 'MAT' FIELD i_output-matnr.
SET PARAMETER ID 'WRK' FIELD p_werks.

if not i_output-matnr is initial.
call transaction 'MD04' and skip first screen.
endif.

ENDCASE.

ENDFORM.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ММ All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.