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: 

Materials Cost Estimate

former_member210118
Participant
0 Kudos
1,069

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

1 ACCEPTED SOLUTION

former_member210118
Participant
0 Kudos
443

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

2 REPLIES 2

Former Member
0 Kudos
443

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

former_member210118
Participant
0 Kudos
444

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