sd_21_vofm_exemplos_formulas

23
1.1 Fórmulas em esquemas de cálculo ( VOFM ) Via Menus Dicas

Upload: luciano-marwell

Post on 02-Apr-2015

780 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SD_21_VOFM_Exemplos_formulas

1.1 Fórmulas em esquemas de cálculo ( VOFM )

Via Menus

Dicas

Page 2: SD_21_VOFM_Exemplos_formulas

1.2 Fórmulas em esquemas de cálculo ( VOFM )

Via Menus

DicasExistem dois tipos de fórmulas sendo base para condição e valor da condição.

Page 3: SD_21_VOFM_Exemplos_formulas

1.3 Fórmulas em esquemas de cálculo ( VOFM )

Via Menus

Dicas Para atualizar a fórmula deve-se utilizar uma faixa acima de 800, pois as faixas anteriores são reservadas pela SAP.

Page 4: SD_21_VOFM_Exemplos_formulas

1.4 Fórmulas em esquemas de cálculo ( VOFM )

Via Menus

DicasAo clicar em texto de origem, é aberto o editor de programas da SAP.

Page 5: SD_21_VOFM_Exemplos_formulas

1.5 esquemas de cálculo ( VOFM )

Via Menus

DicasNão esqueça de ativar a fórmula, senão a mesma não aparece no match-code para ser utilizada.

Page 6: SD_21_VOFM_Exemplos_formulas

1.6 Transporte da Formula....para outro Client

Via Menus

DicasNão esqueça de incluir este programa na ultima linha da CR, R3TR XPRA RV80HGEN, para ser executada no client de destino da change request.

Page 7: SD_21_VOFM_Exemplos_formulas
Page 8: SD_21_VOFM_Exemplos_formulas

1.7 Incluindo a fórmula no esquema de cálculo ( V/08 )

Via Menus

Dicas Observe que existem dois tipos de fórmulas na pricing, uma calcula a base de calculo e outra que obtém o valor.Este ponto normalmente é parametrizado por um funcional, contudo se vc souber qual o esquema de calculo e a condition que vai utilizar a fórmula é só alterar e gravar.OBS: No mm a transação que altera pricing não é a V/08 utilizada por SD, execute a Transação: M/08

Page 9: SD_21_VOFM_Exemplos_formulas

1.8 Incluindo a fórmula no esquema de cálculo ( V/08 )

Via Menus

Dicas Observe que os valores são carregados para campos pré-definidos no SAP.EXEMPLO: Linhas 252 e 253 do programa acima.

Page 10: SD_21_VOFM_Exemplos_formulas

Exemplos de Fórmulas Utilizadas em Clientes:

Fórmula 1*---------------------------------------------------------------------** FORM FRM_KONDI_WERT_916 **---------------------------------------------------------------------** ........ **---------------------------------------------------------------------*FORM FRM_KONDI_WERT_916. * TABLES: j_1btxic2, j_1btxic1. TABLES: J_1BTXIP1 , J_1BTXIP2.DATA: VP_STUNR LIKE XKOMV-STUNR. DATA: VP_AUX1(8) DECIMALS 4 TYPE P,VP_AUX2(8) DECIMALS 4 TYPE P,VP_AUX3(8) DECIMALS 4 TYPE P,VP_TOTAL(8) DECIMALS 4 TYPE P,VP_DATA(8). DATA: VP_ZCSR(8) DECIMALS 4 TYPE P,VP_ZCSS(8) DECIMALS 4 TYPE P,VP_ZPRO(8) DECIMALS 4 TYPE P,VP_ZPIP(8) DECIMALS 4 TYPE P,VP_ZCOP(8) DECIMALS 4 TYPE P,VP_ZPUB(8) DECIMALS 4 TYPE P,VP_ZCOR(8) DECIMALS 4 TYPE P,VP_ZCPM(8) DECIMALS 4 TYPE P,VP_ZJUU(8) DECIMALS 4 TYPE P,VP_ZSEG(8) DECIMALS 4 TYPE P,VP_ZPCO(8) DECIMALS 4 TYPE P,VP_PR00(8) DECIMALS 4 TYPE P,VP_ICM(8) DECIMALS 4 TYPE P,VP_IPI(8) DECIMALS 4 TYPE P,VP_BASE LIKE J_1BTXIC2-BASE,VP_ICM3 LIKE J_1BTXIC2-RATE,VP_EXEMPT LIKE J_1BTXIP1-EXEMPT,VP_EXEMPT2 LIKE J_1BTXIC2-EXEMPT,VP_BASEIPI LIKE J_1BTXIP2-BASE,VP_CIPI LIKE J_1BTXIP2-BASE,VP_NBMCODE LIKE MARC-STEUC,VP_QTDE(8) DECIMALS 4 TYPE P,VP_KF00(8) DECIMALS 4 TYPE P,VP_XICMS(1),VP_XXIPI(1).CLEAR: VP_ZCSS, VP_ZPIP, VP_ZCOP, VP_ZPUB, VP_ZCOR, VP_ZCPM, VP_ZJUU,VP_ZSEG, VP_ZPCO, VP_PR00, VP_ICM3, VP_DATA, VP_ICM, VP_IPI,VP_NBMCODE, VP_BASEIPI, VP_CIPI, VP_KF00, VP_PR00, VP_BASE,VP_EXEMPT, VP_EXEMPT2, VP_XICMS, VP_XXIPI. MOVE XKOMV-STUNR TO VP_STUNR. READ TABLE XKOMV WITH KEY KSCHL = 'ZCSS'.IF SY-SUBRC EQ 0.VP_ZCSS = XKOMV-KBETR * 10.

Page 11: SD_21_VOFM_Exemplos_formulas

VP_ZPRO = VP_ZCSS / 12.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZCSR'.IF SY-SUBRC EQ 0.VP_ZCSR = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZPIP'.IF SY-SUBRC EQ 0.VP_ZPIP = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZCOP'.IF SY-SUBRC EQ 0.VP_ZCOP = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZPUB'.IF SY-SUBRC EQ 0.VP_ZPUB = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZCOR'.IF SY-SUBRC EQ 0.VP_ZCOR = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZCPM'.IF SY-SUBRC EQ 0.VP_ZCPM = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZJUU'.IF SY-SUBRC EQ 0.VP_ZJUU = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZSEG'.IF SY-SUBRC EQ 0.VP_ZSEG = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'ZPCO'.IF SY-SUBRC EQ 0.VP_ZPCO = XKOMV-KBETR * 10.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'PR00'.IF SY-SUBRC EQ 0.VP_PR00 = XKOMV-KWERT * 100.ENDIF. READ TABLE XKOMV WITH KEY KSCHL = 'KF00'.IF SY-SUBRC EQ 0.VP_KF00 = XKOMV-KWERT * 100.ENDIF. ************* CONVERTE A DATA PARA* O FORMATO DA TABELA *************** CONCATENATE KOMK-PRSDT+6(2)KOMK-PRSDT+4(2)KOMK-PRSDT+0(4) INTO VP_DATA. CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'EXPORTINGINPUT = VP_DATAIMPORTINGOUTPUT = VP_DATAEXCEPTIONSOTHERS = 1.

Page 12: SD_21_VOFM_Exemplos_formulas

******** VERIFICA SE O CLIENTE NÃO É ISENTO ******************SELECT SINGLE XICMS XXIPI INTO (VP_XICMS, VP_XXIPI)FROM KNA1WHERE KUNNR = KOMK-KUNNR. * SE O CLIENTE NÃO FOR ISENTO DE ICMSIF VP_XICMS = ''. * TESTA SE O CODIGO DO IMPOSTO DIGITADO CALCULA ICMSIF KOMP-J_1BTXSDC = 'C1' OR KOMP-J_1BTXSDC = 'C2' ORKOMP-J_1BTXSDC = 'C3' OR KOMP-J_1BTXSDC = 'C4' ORKOMP-J_1BTXSDC = 'I1' OR KOMP-J_1BTXSDC = 'I2' ORKOMP-J_1BTXSDC = 'I3' OR KOMP-J_1BTXSDC = 'I4'.

*********** CALCULO DO ICMS ************SELECT RATE BASE EXEMPT INTO (VP_ICM3,VP_BASE,VP_EXEMPT)FROM J_1BTXIC2 UP TO 1 ROWS** select * FROM j_1btxic2 UP TO 1 ROWSWHERE LAND1 = KOMK-ALAND ANDSHIPFROM = KOMK-WKREG AND* shipto = komk-regio and "retirei em 08/09 silvioSHIPTO = KOMK-TXJCD ANDMATNR = KOMP-MATNR ANDVALIDFROM >= VP_DATA ANDVALIDTO <= VP_DATA.* MOVE j_1btxic2-rate TO vp_icm3. ENDSELECT. IF SY-SUBRC = 0.IF VP_EXEMPT = ''.IF VP_BASE <> 100.VP_ICM = ( VP_ICM3 * VP_BASE ).VP_ICM = ( VP_ICM / 100 ).ENDIF.ENDIF.ELSE.SELECT RATE INTO VP_ICM3 FROM J_1BTXIC1 UP TO 1 ROWSWHERE LAND1 = KOMK-ALAND ANDSHIPFROM = KOMK-WKREG AND* shipto = komk-regio and "retirei em 08/09 silvSHIPTO = KOMK-TXJCD ANDVALIDFROM >= VP_DATA.ENDSELECT.IF SY-SUBRC = 0.VP_ICM = VP_ICM3 * 100.ENDIF.ENDIF.ENDIF. " IF komp-j_1btxsdcENDIF. " IF VP_XICMS * SE O CLIENTE NÃO FOR ISENTO DE IPIIF VP_XXIPI = ''. * TESTA SE O CODIGO DO IMPOSTO DIGITADO CALCULA IPIIF KOMP-J_1BTXSDC = 'C3' OR KOMP-J_1BTXSDC = 'C4' ORKOMP-J_1BTXSDC = 'C5' OR KOMP-J_1BTXSDC = 'I3' ORKOMP-J_1BTXSDC = 'I4' OR KOMP-J_1BTXSDC = 'I5'. *********** CALCULO DO IPI ****************SELECT RATE BASE EXEMPTINTO (VP_CIPI, VP_BASEIPI, VP_EXEMPT2) UP TO 1 ROWSFROM J_1BTXIP2WHERE MATNR = KOMP-MATNR ANDVALIDFROM >= VP_DATA.ENDSELECT.

Page 13: SD_21_VOFM_Exemplos_formulas

IF SY-SUBRC = 0.IF VP_EXEMPT2 = ''.IF VP_BASEIPI <> 100.VP_IPI = ( VP_CIPI * VP_BASEIPI ).VP_IPI = ( VP_IPI / 100 ).ENDIF.ENDIF.ELSE.* PROCURA O NBMCODE NA TABELA DE MATERIAISSELECT STEUC INTO VP_NBMCODEFROM MARCWHERE MATNR = KOMP-MATNR ANDWERKS = KOMP-WERKS.ENDSELECT. SELECT RATE BASE EXEMPTINTO (VP_CIPI,VP_BASEIPI,VP_EXEMPT2) UP TO 1 ROWSFROM J_1BTXIP1WHERE NBMCODE = VP_NBMCODE ANDVALIDFROM >= VP_DATA.ENDSELECT. IF SY-SUBRC = 0.IF VP_EXEMPT2 = ''.IF VP_BASEIPI <> 100.VP_IPI = ( VP_CIPI * VP_BASEIPI ).VP_IPI = ( VP_IPI / 100 ).ENDIF.ENDIF.ENDIF.ENDIF.ENDIF. " komp-j_1btxsdcENDIF. " IF VP_XXIPI********************************************************************** READ TABLE XKOMV WITH KEY STUNR = VP_STUNR.* verifica se a taxa de ICM vier zerada e for para zona franca ou muni-* cipio de Manaus e o grupo de produtos(visao vendas 2 - material) for* = a mercadorias industrializadas seta a taxa de icm para 12%* Apesar da tabela de exceções de icms estar com zero de aliquota, pre-* cisamos incluir 12% sobre o PR00, visto que o valor do item na nota* tem que estar incluso o icm IF VP_ICM = 0 AND ( KOMK-TXJCD = 'ZF' OR KOMK-TXJCD = 'ZAM' ) ANDKOMP-KONDM = '03'.VP_ICM = '12.0000'.ENDIF. VP_AUX1 = VP_ZCSS + VP_ZPRO + VP_ZPIP + VP_ZCOP + VP_ZPUB + VP_ZCOR +VP_ZCPM + VP_ZJUU + VP_ZSEG + VP_ZPCO + VP_ICM + VP_IPI +VP_ZCSR.

VP_AUX2 = ABS( VP_AUX1 - '100.0000' ).VP_AUX3 = VP_AUX2 / 100.VP_TOTAL = ( ( VP_PR00 + VP_KF00 ) * 10000 ) / VP_AUX3. XKOMV-KBETR = ( VP_TOTAL - ( VP_PR00 + VP_KF00 ) ) / 100.XKWERT = ( VP_TOTAL - ( VP_PR00 + VP_KF00 ) ) / 100.

RETTXKOMV-KBETR = XKOMV-KBETR * 10.RETTXKOMV-KWERT = XKWERT * 10.

ENDFORM.

Page 14: SD_21_VOFM_Exemplos_formulas

Fórmula 2

*---------------------------------------------------------------------**       FORM FRM_KOND_BASIS_800     - Custo Integrado                 **---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------*form frm_kond_basis_800.  tables: ztrcustoin.  data: w_taxa1       like tcurr-ukurs.  data: w_taxa2       like tcurr-ukurs.  clear xkomv-kbetr.  select zcpusd into ztrcustoin-zcpusd from ztrcustoin               where zmatnr eq komp-matnr                 and zdtini le sy-datum                 and zdtfim ge sy-datum                 and ztipoc eq 'I'                 and zwaers eq 'USD'.

    xkomv-kbetr = ztrcustoin-zcpusd.  endselect.  move 100000 to: w_taxa1, w_taxa2.  if komk-waerk ne 'USD'.    call function 'READ_EXCHANGE_RATE'         exporting              date             = komk-audat              foreign_currency = 'USD'              local_currency   = 'BRL'              type_of_rate     = 'M'         importing              exchange_rate    = w_taxa1         exceptions              no_rate_found    = 1              no_factors_found = 2              no_spread_found  = 3              others           = 4.  endif.  if komk-waerk ne 'BRL' and     komk-waerk ne 'USD'.    call function 'READ_EXCHANGE_RATE'         exporting              date             = komk-audat              foreign_currency = komk-waerk

Page 15: SD_21_VOFM_Exemplos_formulas

              local_currency   = 'BRL'              type_of_rate     = 'M'         importing              exchange_rate    = w_taxa2         exceptions              no_rate_found    = 1              no_factors_found = 2              no_spread_found  = 3              others           = 4.  endif.

  xkomv-kbetr = ( xkomv-kbetr * w_taxa1 ) / w_taxa2.  xkomv-waers = komk-waerk.

  rettxkomv-kbetr = xkomv-kbetr.  rettxkomv-waers = xkomv-waers.

* modify xkomv.

endform.

FÓRMULA 3:*---------------------------------------------------------------------**       FORM FRM_KOND_BASIS_801      - Rentabilidade                  **---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------*form frm_kond_basis_801.

  tables: tcurr.

  data: vp_venda(8) decimals 4 type p,        vp_custo(8) decimals 4 type p,        vp_margem type f,        w_data        like  syst-datum,        w_taxa        like tcurr-ukurs.

  read table xkomv with key kschl = 'ICMI'.  if sy-subrc eq 0.    vp_venda = xkomv-kwert * 100.  endif.

  read table xkomv with key kschl = 'ZCIT'.  if sy-subrc eq 0.

Page 16: SD_21_VOFM_Exemplos_formulas

    vp_custo = xkomv-kwert * 100.  endif.

  read table xkomv with key kschl = 'ZMRG'.

  xkomv-kwert    = 0.  rettxkomv-kwert = xkomv-kwert.

  if vp_custo ne 0.    vp_margem = ( ( vp_venda / vp_custo ) - 1 ) * 100.  else.    vp_margem = 100.  endif.

  xkomv-kbetr = vp_margem * 1000.

  rettxkomv-kbetr = xkomv-kbetr.

endform.

OUTROS Exemplos:INCLUDE ZBR_VI_FORM933 **&---------------------------------------------------------------------**& Formula 933 for SD pricing*& Calculate insurance value for sales order*&---------------------------------------------------------------------**& DESIGNED BY: Aparecido - 14Nov2003*& CODED BY : Sidney C. Leite - 14Nov2003*& LOCATION : Brazil*& PAD DOC # : 38667*&---------------------------------------------------------------------**& USE: Used in RV64A933 program.*&---------------------------------------------------------------------**& COMMENTS:*&---------------------------------------------------------------------**& MODIFICATION LOG:*& VSN DATE FULL NAME - Change Request Number*& v000 Initial Version - 38709*&*& v001 08jan04 Rodrigo Ariza Gregorio - PAD/CR*& I calculate of the sum - 41982/42892*&*& v002 23jan04 Rodrigo Ariza Gregorio*& To include condition ZBFV with the - CR*& same calculos and details of the ZBFT. - 48314*&*& vnnn ddmmmyy x. xxxxxxxxxxxxxxxxxxxxxx - 0000*& description of change*&---------------------------------------------------------------------*

IF sy-tcode(2) EQ 'VL' OR sy-tcode(2) EQ 'VA' "v001 OR sy-tcode(2) EQ 'VF'. "v001

Page 17: SD_21_VOFM_Exemplos_formulas

DATA: zbr_zbbc LIKE xkomv-kwert, zbr_zbsg LIKE xkomv-kwert, zbr_zbcf LIKE xkomv-kwert, zbr_zbft LIKE xkomv-kwert, zbr_zbfv LIKE xkomv-kwert, "v002 zbr_zbfl LIKE xkomv-kwert, "v002 zbr_xkomv LIKE xkomv, w_kbetr TYPE f, zbr_xkomv1 LIKE xkomv, "v001 zbr_konda LIKE vbkd-konda. "v001

CLEAR: zbr_zbbc, zbr_zbsg, zbr_zbcf, zbr_zbft, zbr_zbfv, "v002 zbr_zbfl, "v002 zbr_xkomv, zbr_xkomv1. "v001

DATA: BEGIN OF z_xkomv OCCURS 0. "v001 INCLUDE STRUCTURE xkomv. "v001 DATA: END OF z_xkomv. "v001

zbr_konda = komk-konda. "v001

SELECT SINGLE konda "v001 INTO zbr_konda "v001 FROM vbkd "v001 WHERE vbeln = komp-vgbel AND "v001 posnr = '000000'. "v001

DELETE xkomv WHERE kwert EQ '0.00' AND kschl EQ 'ZBBC' "v001 AND kbetr EQ space. "v001

READ TABLE xkomv INTO zbr_xkomv "v001 WITH KEY kschl = 'ZBVL'. "v001

IF sy-subrc = 0. "v001 zbr_zbbc = zbr_xkomv-kwert. "v001 ENDIF. "v001

z_xkomv[] = xkomv[]. "v001

DELETE z_xkomv WHERE kbetr EQ 0. "v001

* READ TABLE xkomv INTO zbr_xkomv "v001* WITH KEY kschl = 'ZBFF'. "v001* IF sy-subrc = 0. "v001* zbr_zbff = zbr_xkomv-kwert. "v001* endif. "v001

* READ TABLE z_xkomv INTO zbr_xkomv "v001 READ TABLE z_xkomv INTO zbr_xkomv "v001 WITH KEY kschl = 'ZBFT'. IF sy-subrc = 0. zbr_zbft = zbr_xkomv-kwert. ENDIF.

Page 18: SD_21_VOFM_Exemplos_formulas

READ TABLE z_xkomv INTO zbr_xkomv "v002 WITH KEY kschl = 'ZBFL'. "v002 IF sy-subrc = 0. "v002 zbr_zbfl = zbr_xkomv-kwert. "v002 ENDIF. "v002

READ TABLE z_xkomv INTO zbr_xkomv "v002 WITH KEY kschl = 'ZBFV'. "v002 IF sy-subrc = 0. "v002 zbr_zbfv = zbr_xkomv-kwert. "v002 ENDIF. "v002

* READ TABLE z_xkomv INTO zbr_xkomv "v001 READ TABLE z_xkomv INTO zbr_xkomv "v001 WITH KEY kschl = 'ZBSG'. IF sy-subrc = 0. zbr_zbsg = zbr_xkomv-kwert. ENDIF.

* READ TABLE z_xkomv INTO zbr_xkomv "v001* WITH KEY kschl = 'ZBCF'. "v001* IF sy-subrc = 0. "v001* zbr_zbcf = zbr_xkomv-kwert. "v001* ENDIF. "v001

READ TABLE xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBEB'.

IF sy-subrc = 0.

* IF NOT zbr_zbff IS INITIAL. "v001 IF zbr_konda = 'BF'. "v001 xkwert = zbr_zbbc + zbr_zbsg + zbr_zbft + zbr_zbfv + zbr_zbfl."v002* xkwert = zbr_zbbc + zbr_zbsg + zbr_zbft. "v001 v002* xkwert = zbr_zbff + zbr_zbsg + zbr_zbft. "v001 ENDIF.

* IF NOT zbr_zbcf IS INITIAL. "v001 IF zbr_konda = 'BC'. "v001 xkwert = zbr_zbbc - zbr_zbsg - zbr_zbft - zbr_zbfv - zbr_zbfl."v002* xkwert = zbr_zbbc - zbr_zbsg - zbr_zbft. "v001 v002* xkwert = zbr_zbcf - zbr_zbsg - zbr_zbft. "v001 ENDIF.

w_kbetr = ( xkwert / xkomv-kawrt ) * 1000 . "v001 xkomv-kbetr = w_kbetr. xkomv-kwert = xkwert. "v001

ENDIF.

DE NOVO:

*----------------------------------------------------------------------** INCLUDE ZBR_VI_FORM934 **&---------------------------------------------------------------------*

Page 19: SD_21_VOFM_Exemplos_formulas

*& Formula 934 - Definition of Value FOB*&*&---------------------------------------------------------------------**& DESIGNED BY: Aparecido Borges - 18Mar2004*& CODED BY : Rodrigo Ariza Gregorio - 18Mar2004*& LOCATION : Brazil*& PAD DOC # : 48318*&---------------------------------------------------------------------**& USE: Used in RV64A934 program.*&---------------------------------------------------------------------**& COMMENTS:*&---------------------------------------------------------------------**& MODIFICATION LOG:*& VSN DATE FULL NAME - Change Request Number*& v000 Initial Version - 49953*&*& vnnn ddmmmyy x. xxxxxxxxxxxxxxxxxxxxxx - 0000*& description of change*&---------------------------------------------------------------------*

IF sy-tcode(2) EQ 'VL' OR sy-tcode(2) EQ 'VA' OR sy-tcode(2) EQ 'VF'.

DATA: zbr_zbvl LIKE xkomv-kwert, zbr_zbsg LIKE xkomv-kwert, zbr_zbcf LIKE xkomv-kwert, zbr_zbft LIKE xkomv-kwert, zbr_zbfv LIKE xkomv-kwert, zbr_zbfl LIKE xkomv-kwert, zbr_xkomv LIKE xkomv, w_kbetr TYPE f, zbr_konda LIKE vbkd-konda, zbr_inco1 LIKE vbkd-inco1.

DATA: BEGIN OF zbr_char20 OCCURS 0, sign(1), option(2), low(20), high(20), END OF zbr_char20.

DATA: BEGIN OF t_hardcode OCCURS 0, sign(1), option(2), preco(3), cond(2), val(1), END OF t_hardcode.

CLEAR: zbr_zbvl, zbr_zbsg, zbr_zbcf, zbr_zbft, zbr_zbfv, zbr_zbfl, zbr_xkomv.

DATA: BEGIN OF z_xkomv OCCURS 0. INCLUDE STRUCTURE xkomv. DATA: END OF z_xkomv.

Page 20: SD_21_VOFM_Exemplos_formulas

INCLUDE y_gethard.

zbr_konda = komk-konda. zbr_inco1 = komk-inco1.

SELECT SINGLE konda inco1 INTO (zbr_konda, zbr_inco1) FROM vbkd WHERE vbeln = komp-vgbel AND posnr = '000000'.

READ TABLE xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBVL'.

IF sy-subrc = 0. zbr_zbvl = zbr_xkomv-kwert. ENDIF.

z_xkomv[] = xkomv[].

READ TABLE z_xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBFT'. IF sy-subrc = 0. zbr_zbft = zbr_xkomv-kwert. ENDIF.

READ TABLE z_xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBFL'. IF sy-subrc = 0. zbr_zbfl = zbr_xkomv-kwert. ENDIF.

READ TABLE z_xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBFV'. IF sy-subrc = 0. zbr_zbfv = zbr_xkomv-kwert. ENDIF.

READ TABLE z_xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBSG'. IF sy-subrc = 0. zbr_zbsg = zbr_xkomv-kwert. ENDIF.

READ TABLE xkomv INTO zbr_xkomv WITH KEY kschl = 'ZBFB'.

IF sy-subrc = 0.

get_hard 'BR*' 'CHAR20' 'BR_SD_DEFINE_VALOR_FOB' zbr_char20.

LOOP AT zbr_char20. t_hardcode-sign = zbr_char20-sign. t_hardcode-option = zbr_char20-option. t_hardcode-preco = zbr_char20-low(3). t_hardcode-cond = zbr_char20-low+4(2). t_hardcode-val = zbr_char20-low+7(1). APPEND t_hardcode. ENDLOOP.

CLEAR: t_hardcode.

Page 21: SD_21_VOFM_Exemplos_formulas

LOOP AT t_hardcode WHERE preco EQ zbr_inco1 AND cond EQ zbr_konda.

IF t_hardcode-val EQ '1'. xkwert = zbr_zbvl. ELSEIF t_hardcode-val EQ '2'. xkwert = zbr_zbvl - zbr_zbsg - zbr_zbft - zbr_zbfl - zbr_zbfv. ENDIF. EXIT. ENDLOOP.

w_kbetr = ( xkwert / xkomv-kawrt ) * 1000 . xkomv-kbetr = w_kbetr. xkomv-kwert = xkwert.

ENDIF.

ENDIF.