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

KONV, KONP

Former Member
0 Kudos

Hi,

Can anyone tell how the tables, KONV, KONP, A001, A006 ..all the A series tables are linked, with an example. I am a fresher..please include an example to help me understand better.

Thanks & Regards,

Pavan

1 ACCEPTED SOLUTION

Former Member
0 Kudos

For this you have to understand the concept of condition technique in SAP. The different aspects involved in condition technique are procedure, access sequence, condition type, condition table, and condition records. Read about them and also the corresponding config steps, then you will understand the links.

The first thing that you define in config is a field catalog (only if the existing standard SAP provided fields are not sufficient). You then go on to define condition tables. Depending on the usage of the condition table (usage = A for pricing, usage = B for output etc), and the 3 digit number(customer number range starts from 900) that you enter for the condition table, system creates a corresponding database table A9xx with the fields you chose while defining the condition table including some standard fields such as validity dates, condition number etc. This is the table that you are looking at when you asked about A001, A006 etc. Only difference is that these are SAP provided standard pricing condition tables.

You then create an access sequence which will put these condition tables in a sequence of accessing the condition records.

Then you create a condition type and attach the access sequence to it.

You finally create the procedure and assign the condition type(s) to it.

Then you assign the procedure to a document type.

Now when you go to create the document system will determine the procedure attached to it, so the condition types, so the access sequence and so the condition tables that it should read in order to get the correct codition record based on the values that you entered while creating the document.

When you maintain condition records, you will enter the key field values and the pricing and date details. System will store the key information out of this in the Axxx table along with an internally generated KNUMH number. This number is your link to the actual prices that are stored in KONV and KONP. It gets further complicated with scales etc but you will know enough once you start with this information and dig around.

8 REPLIES 8

Former Member
0 Kudos

see the vk11,vk12 transaction

0 Kudos

Hi,

I did, but as I said I am a fresher....please give a detailed example.

Thnks in advance,

Pavan

0 Kudos

Look at sample code and which contains material price from konv,konp,a004 table

  • 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 amatnr ameins bwerks bzzdept into table i_join

from mara as a inner join marc as b on amatnr = bmatnr

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 amatnr ameins bwerks bzzdept into table i_join

from mara as a inner join marc as b on amatnr = bmatnr

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.

Reward Points if it is helpful

Thanks

Seshu

Former Member
0 Kudos

For this you have to understand the concept of condition technique in SAP. The different aspects involved in condition technique are procedure, access sequence, condition type, condition table, and condition records. Read about them and also the corresponding config steps, then you will understand the links.

The first thing that you define in config is a field catalog (only if the existing standard SAP provided fields are not sufficient). You then go on to define condition tables. Depending on the usage of the condition table (usage = A for pricing, usage = B for output etc), and the 3 digit number(customer number range starts from 900) that you enter for the condition table, system creates a corresponding database table A9xx with the fields you chose while defining the condition table including some standard fields such as validity dates, condition number etc. This is the table that you are looking at when you asked about A001, A006 etc. Only difference is that these are SAP provided standard pricing condition tables.

You then create an access sequence which will put these condition tables in a sequence of accessing the condition records.

Then you create a condition type and attach the access sequence to it.

You finally create the procedure and assign the condition type(s) to it.

Then you assign the procedure to a document type.

Now when you go to create the document system will determine the procedure attached to it, so the condition types, so the access sequence and so the condition tables that it should read in order to get the correct codition record based on the values that you entered while creating the document.

When you maintain condition records, you will enter the key field values and the pricing and date details. System will store the key information out of this in the Axxx table along with an internally generated KNUMH number. This number is your link to the actual prices that are stored in KONV and KONP. It gets further complicated with scales etc but you will know enough once you start with this information and dig around.

0 Kudos

Hi Srinivas,

When I try to create a new table from the feild catalog, I dont get any A series. Nor do I see any A series tables attached to any of the Access sequences.

Regards,

Pavan

0 Kudos

It depends on from where you are creating this condition table. System assigns it internally when you are in a particular task in config. So for instance, if you are creating the condition table from within the pricing configuration, system knows that you are trying to create a pricing condition table. So it defaults the A and creates your table automatically. Similarly if you are creating a condition table in output determination using condition technique, system knows that and creates a table with B and so on.

0 Kudos

Thanks a lot for your help.

One more question, I am trying to test a function module by going into SE37, I am entering all the basic values but cannot get an output. I'd like to know what are the mandatory fields I need to populate, how do I find out. The pricing module I am trying to test is PRICING.

Thanks & Regards,

Pavan

0 Kudos

I cannot help you there as that will be dependent on your situation. KOMK and KOMP are required structures to be passed to the function module call but within those structures there may be only certain fields that are mandatory. Try to check the where-used list and see what fields are getting filled up in those programs. Also put a break-point in the function module and run pricing from say VA02 and see if it stops at your break-point.