2011 Apr 26 2:32 PM
Hello friends.
I'm in need of your help.
I have a client that wants to do materials Cost Estimate (no problem) but the problem, because we have tcode CK11 that does that for one material, the problme is that the way they want it.
They want to have an ALV with a list o materials, then press one button and the program would make a cost estimate for each material (without creating the estimate itself, without saving it) and just return the value of the field "Cost of goods manufactured".
Does anyone know how to do this ? Can anyone help me please ???
Thanx.
Ricardo Monteiro
2011 Apr 26 4:07 PM
Thank you harishkumar.d ... that was my first aproach but the BDC doesn't return the field i want and i would have to save the estimate, which is one thing the client doesn't want...
But in the meantime (and after much standard debugging) I came up with a solution...
*&---------------------------------------------------------------------*
*& Report ZTESTERJM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTESTERJM.
DATA:
ls_keph LIKE keph,
k_faktor TYPE f,
lv_meng1 LIKE keko-losgr,
lv_unit1 LIKE keko-meins,
lv_meng2 like keko-losgr,
lv_unit2 LIKE keko-meins,
lv_elehk LIKE keko-elehk,
lv_sicht1 LIKE kuse-sicht1,
lv_val_tot LIKE cki64a-gk_sicht1,
lv_val_fix LIKE cki64a-fk_sicht1,
lv_val_var LIKE cki64a-vk_sicht1,
f_tckh8x LIKE v_ckh8.
DATA: t_tckh8x LIKE v_ckh8 OCCURS 10 WITH HEADER LINE,
t_tckh8 LIKE tckh8 OCCURS 0 WITH HEADER LINE,
t_tckh9 LIKE tckh9 OCCURS 0 WITH HEADER LINE.
DATA ls_keko LIKE keko.
PARAMETERS: p_matnr LIKE mara-matnr.
lv_meng1 = '50.000'. " Valor a colocar no inicio do ecran
lv_unit1 = 'UN'. " Unidade a colocar no inicio ecran ??? ou por defeito
lv_meng2 = '1.000'. " Quantidade Referência (keko-losau --> Tamanho de lote considerando o refugo)
lv_unit2 = 'UN'. " Unidade de medida (keko-meins --> Unidade de medida de avaliação)
lv_elehk = 'Z1'. " Esquema de elementos - custos de prod. e custos adm.+vendas (01 "Esquema Modelo"; Z1 "Esquema Portobay")
lv_sicht1 = '01'. " Visão dos elementos de Custo ( 01 "Custos Produção".... Ver tabela KUSE)
SELECT SINGLE * FROM keko
into ls_keko
WHERE kalka = '01'
AND kadky >= '20110501'
AND tvers = '01'
AND bwvar = 'Z01'
AND matnr = p_matnr.
IF sy-subrc = 0.
SELECT SINGLE * FROM keph
INTO ls_keph
WHERE bzobj = ls_keko-bzobj
AND kalnr = ls_keko-kalnr
AND kadky = ls_keko-kadky
AND tvers = ls_keko-tvers
AND bwvar = ls_keko-bwvar
AND keart = 'H'
AND kkzst = ''.
ENDIF.
call function 'CK_F_TCKH4_HIERARCHY_READING'
EXPORTING
p_elehk = '01'
TABLES
t_tckh8 = t_tckh8
t_tckh9 = t_tckh9.
perform fill_tckh8x IN PROGRAM SAPLCKDI tables t_tckh8
t_tckh9
t_tckh8x.
PERFORM determine_faktor USING p_matnr
CHANGING lv_meng1
lv_unit1
lv_meng2
lv_unit2
k_faktor.
*PERFORM berechne_kosten_f0b IN PROGRAM SAPLCKDI USING lv_elehk
* lv_sicht1
* ls_keph
* k_faktor
* space
* lv_val_tot
* lv_val_fix
* lv_val_var.
PERFORM calculo_custos USING lv_elehk
lv_sicht1
ls_keph
k_faktor
space
lv_val_tot
lv_val_fix
lv_val_var.
BREAK-POINT.
*&---------------------------------------------------------------------*
*& Form DETERMINE_FAKTOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_MATNR text
* <--P_LV_MENG1 text
* <--P_LV_UNIT1 text
* <--P_LV_MENG2 text
* <--P_LV_UNIT2 text
* <--P_K_FAKTOR text
*----------------------------------------------------------------------*
FORM DETERMINE_FAKTOR USING P_MATNR
CHANGING P_MENG1
P_UNIT1
P_MENG2
P_UNIT2
P_FAKTOR.
IF not p_unit1 = p_unit2.
p_faktor = p_meng1.
call function 'MATERIAL_UNIT_CONVERSION'
EXPORTING
input = p_faktor
kzmeinh = 'X'
matnr = p_matnr
meinh = p_unit1
meins = p_unit2
IMPORTING
output = p_faktor
EXCEPTIONS
others = 1.
if sy-subrc = 0.
p_faktor = p_faktor / p_meng2.
else.
p_unit1 = p_unit2.
p_faktor = p_meng1 / p_meng2.
endif.
ELSE.
p_faktor = p_meng1 / p_meng2.
ENDIF.
ENDFORM. " DETERMINE_FAKTOR
*&---------------------------------------------------------------------*
*& Form calculo_custos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ELEMENTESCHEMA text
* -->SICHT text
* -->SCHICHTUNG text
* -->FAKTOR text
* -->S_NUR_WAELZELEMETE text
* -->GK text
* -->FK text
* -->VK text
*----------------------------------------------------------------------*
FORM calculo_custos USING
ELEMENTESCHEMA LIKE TCK07-ELEHK
SICHT LIKE KUSE-SICHT1
SCHICHTUNG STRUCTURE KEPH
FAKTOR TYPE F
S_NUR_WAELZELEMETE TYPE C
GK LIKE CKI64A-GK_SICHT1
FK LIKE CKI64A-FK_SICHT1
VK LIKE CKI64A-VK_SICHT1.
DATA: K_GES LIKE CKI64A-H_WERTV8,
K_FIX LIKE CKI64A-H_WERTV8,
K_VAR LIKE CKI64A-H_WERTV8.
* LESEN SICHT
IF SICHT IS INITIAL. " => Wert für Kundenauftrag,
T_TCKH8X = F_TCKH8X.
ELSE.
LOOP AT T_TCKH8X WHERE SICHT = SICHT.
EXIT.
ENDLOOP.
ENDIF.
IF SY-SUBRC <> 0.
* message E
ELSE.
MOVE-CORRESPONDING T_TCKH8X TO T_TCKH8.
CALL FUNCTION 'CK_F_ELEMENTS_ADD'
EXPORTING
ELEMENTESCHEMA = ELEMENTESCHEMA
KALKULATIONSVARIANTE = ' '
SCHICHTUNG = SCHICHTUNG
SELEKTIONSKENNZEICHEN = ' '
SUMMIERE_NUR_WAELZELEMENTE = S_NUR_WAELZELEMETE
I_TCKH8 = T_TCKH8
IMPORTING
KOSTEN_ZUR_SICHT_GESAMT = K_GES
KOSTEN_ZUR_SICHT_FIX = K_FIX.
K_VAR = K_GES - K_FIX.
GK = K_GES * FAKTOR.
FK = K_FIX * FAKTOR.
VK = K_VAR * FAKTOR.
ENDIF.
ENDFORM. "calculo_custos
2011 Apr 26 2:44 PM
Hi Ricardo,
Try to create a BDC program for CK11 transaction. In the report when the user presses the custom button, then in the background, loop the internal table with all the materials and call the BDC code for each materials inside the loop.
Hope it help to resolve your issue.
Thanks & Regards,
Harish
2011 Apr 26 4:07 PM
Thank you harishkumar.d ... that was my first aproach but the BDC doesn't return the field i want and i would have to save the estimate, which is one thing the client doesn't want...
But in the meantime (and after much standard debugging) I came up with a solution...
*&---------------------------------------------------------------------*
*& Report ZTESTERJM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTESTERJM.
DATA:
ls_keph LIKE keph,
k_faktor TYPE f,
lv_meng1 LIKE keko-losgr,
lv_unit1 LIKE keko-meins,
lv_meng2 like keko-losgr,
lv_unit2 LIKE keko-meins,
lv_elehk LIKE keko-elehk,
lv_sicht1 LIKE kuse-sicht1,
lv_val_tot LIKE cki64a-gk_sicht1,
lv_val_fix LIKE cki64a-fk_sicht1,
lv_val_var LIKE cki64a-vk_sicht1,
f_tckh8x LIKE v_ckh8.
DATA: t_tckh8x LIKE v_ckh8 OCCURS 10 WITH HEADER LINE,
t_tckh8 LIKE tckh8 OCCURS 0 WITH HEADER LINE,
t_tckh9 LIKE tckh9 OCCURS 0 WITH HEADER LINE.
DATA ls_keko LIKE keko.
PARAMETERS: p_matnr LIKE mara-matnr.
lv_meng1 = '50.000'. " Valor a colocar no inicio do ecran
lv_unit1 = 'UN'. " Unidade a colocar no inicio ecran ??? ou por defeito
lv_meng2 = '1.000'. " Quantidade Referência (keko-losau --> Tamanho de lote considerando o refugo)
lv_unit2 = 'UN'. " Unidade de medida (keko-meins --> Unidade de medida de avaliação)
lv_elehk = 'Z1'. " Esquema de elementos - custos de prod. e custos adm.+vendas (01 "Esquema Modelo"; Z1 "Esquema Portobay")
lv_sicht1 = '01'. " Visão dos elementos de Custo ( 01 "Custos Produção".... Ver tabela KUSE)
SELECT SINGLE * FROM keko
into ls_keko
WHERE kalka = '01'
AND kadky >= '20110501'
AND tvers = '01'
AND bwvar = 'Z01'
AND matnr = p_matnr.
IF sy-subrc = 0.
SELECT SINGLE * FROM keph
INTO ls_keph
WHERE bzobj = ls_keko-bzobj
AND kalnr = ls_keko-kalnr
AND kadky = ls_keko-kadky
AND tvers = ls_keko-tvers
AND bwvar = ls_keko-bwvar
AND keart = 'H'
AND kkzst = ''.
ENDIF.
call function 'CK_F_TCKH4_HIERARCHY_READING'
EXPORTING
p_elehk = '01'
TABLES
t_tckh8 = t_tckh8
t_tckh9 = t_tckh9.
perform fill_tckh8x IN PROGRAM SAPLCKDI tables t_tckh8
t_tckh9
t_tckh8x.
PERFORM determine_faktor USING p_matnr
CHANGING lv_meng1
lv_unit1
lv_meng2
lv_unit2
k_faktor.
*PERFORM berechne_kosten_f0b IN PROGRAM SAPLCKDI USING lv_elehk
* lv_sicht1
* ls_keph
* k_faktor
* space
* lv_val_tot
* lv_val_fix
* lv_val_var.
PERFORM calculo_custos USING lv_elehk
lv_sicht1
ls_keph
k_faktor
space
lv_val_tot
lv_val_fix
lv_val_var.
BREAK-POINT.
*&---------------------------------------------------------------------*
*& Form DETERMINE_FAKTOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_MATNR text
* <--P_LV_MENG1 text
* <--P_LV_UNIT1 text
* <--P_LV_MENG2 text
* <--P_LV_UNIT2 text
* <--P_K_FAKTOR text
*----------------------------------------------------------------------*
FORM DETERMINE_FAKTOR USING P_MATNR
CHANGING P_MENG1
P_UNIT1
P_MENG2
P_UNIT2
P_FAKTOR.
IF not p_unit1 = p_unit2.
p_faktor = p_meng1.
call function 'MATERIAL_UNIT_CONVERSION'
EXPORTING
input = p_faktor
kzmeinh = 'X'
matnr = p_matnr
meinh = p_unit1
meins = p_unit2
IMPORTING
output = p_faktor
EXCEPTIONS
others = 1.
if sy-subrc = 0.
p_faktor = p_faktor / p_meng2.
else.
p_unit1 = p_unit2.
p_faktor = p_meng1 / p_meng2.
endif.
ELSE.
p_faktor = p_meng1 / p_meng2.
ENDIF.
ENDFORM. " DETERMINE_FAKTOR
*&---------------------------------------------------------------------*
*& Form calculo_custos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ELEMENTESCHEMA text
* -->SICHT text
* -->SCHICHTUNG text
* -->FAKTOR text
* -->S_NUR_WAELZELEMETE text
* -->GK text
* -->FK text
* -->VK text
*----------------------------------------------------------------------*
FORM calculo_custos USING
ELEMENTESCHEMA LIKE TCK07-ELEHK
SICHT LIKE KUSE-SICHT1
SCHICHTUNG STRUCTURE KEPH
FAKTOR TYPE F
S_NUR_WAELZELEMETE TYPE C
GK LIKE CKI64A-GK_SICHT1
FK LIKE CKI64A-FK_SICHT1
VK LIKE CKI64A-VK_SICHT1.
DATA: K_GES LIKE CKI64A-H_WERTV8,
K_FIX LIKE CKI64A-H_WERTV8,
K_VAR LIKE CKI64A-H_WERTV8.
* LESEN SICHT
IF SICHT IS INITIAL. " => Wert für Kundenauftrag,
T_TCKH8X = F_TCKH8X.
ELSE.
LOOP AT T_TCKH8X WHERE SICHT = SICHT.
EXIT.
ENDLOOP.
ENDIF.
IF SY-SUBRC <> 0.
* message E
ELSE.
MOVE-CORRESPONDING T_TCKH8X TO T_TCKH8.
CALL FUNCTION 'CK_F_ELEMENTS_ADD'
EXPORTING
ELEMENTESCHEMA = ELEMENTESCHEMA
KALKULATIONSVARIANTE = ' '
SCHICHTUNG = SCHICHTUNG
SELEKTIONSKENNZEICHEN = ' '
SUMMIERE_NUR_WAELZELEMENTE = S_NUR_WAELZELEMETE
I_TCKH8 = T_TCKH8
IMPORTING
KOSTEN_ZUR_SICHT_GESAMT = K_GES
KOSTEN_ZUR_SICHT_FIX = K_FIX.
K_VAR = K_GES - K_FIX.
GK = K_GES * FAKTOR.
FK = K_FIX * FAKTOR.
VK = K_VAR * FAKTOR.
ENDIF.
ENDFORM. "calculo_custos