Módulo: DRAWBACK
Funcionalidade: Forecast
Data/Hora da Publicação: 21/07/2006 00:00:00
Data/Hora Última Alteração: 17/02/2011 14:23:03
Descrição da Nota: IGUALANDO UNIDADE DE MEDIDA POR ITEM
Sintoma
O programa estava dando dump pois não havia conversão na unidade de medida por item.
Solução
Foi criado um perform para conversão na unidade de medida no for f_lista _tecnica.
6.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 01787 Data: 21/07/2006 Hora: 09:58:30
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 01787
Categoria : Melhoria
Prioridade : Média
Versão PW.CE : 6.0
Pacote : 00024
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
Texto Rápido:
IGUALANDO UNIDADE DE MEDIDA POR ITEM
----------------------------------------------------------------------------------------------------
Palavras Chave:
LISTA TÉCNICA, EXPLOSÃO, MATERIAL, FORECAST, DUMP
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCIR106
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCIR106
...
i_final-qtunit.
IF NOT i_final-qtunit IS INITIAL.
COLLECT i_final.
ENDIF.
ENDIF.
* >> Início da inclusão: FORM F_LISTA_TECNICA
ELSE.
IF NOT i_mat-meins IS INITIAL.
PERFORM converte_unidades USING v_selpool-matnr
v_selpool-bmein
i_mat-meins
CHANGING v_selpool-bmeng.
ENDIF.
* << Fim da inclusão
ENDIF.
DELETE i_stb WHERE menge < 0.
LOOP AT i_stb.
v_erro = 'N'.
v_qtdeaux2 = v_qtdeaux * i_stb-menge.
...
...
ENDIF.
CLEAR p_qtd.
EXIT.
ENDIF.
ENDFORM.
* >> Início da inclusão:
FORM converte_unidades USING p_matnr
p_meins
p_meinsd
CHANGING p_qtd.
DATA: v_meinsb LIKE marm-meinh,
v_um_rez TYPE i,
v_um_ren TYPE i,
v_um_rez1 LIKE marm-umrez,
v_um_ren1 LIKE marm-umren,
v_um_rez2 TYPE i,
v_um_ren2 TYPE i.
DATA: v_conv1 TYPE /pws/zycit245-qtd_ncm,
v_conv2 TYPE /pws/zycit245-qtd_ncm.
CLEAR: v_um_rez, v_um_ren, v_um_rez2, v_um_ren2.
IF p_meins EQ p_meinsd.
EXIT.
ENDIF.
v_conv1 = 1.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE_OLD'
EXPORTING
input = v_conv1
no_type_check = 'X'
round_sign = 'X'
unit_in = p_meins
unit_out = p_meinsd
IMPORTING
denominator = v_um_ren
numerator = v_um_rez
output = v_conv2
EXCEPTIONS
conversion_not_found = 1
division_by_zero = 2
input_invalid = 3
output_invalid = 4
overflow = 5
type_invalid = 6
units_missing = 7
unit_in_not_found = 8
unit_out_not_found = 9
OTHERS = 10.
IF sy-subrc = 0.
p_qtd = ( p_qtd / v_um_ren ) * v_um_rez.
EXIT.
ENDIF.
SELECT SINGLE meins FROM mara INTO v_meinsb
WHERE matnr EQ p_matnr.
IF v_meinsb NE p_meins.
v_conv1 = 1.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE_OLD'
EXPORTING
input = v_conv1
no_type_check = 'X'
round_sign = 'X'
unit_in = p_meins
unit_out = v_meinsb
IMPORTING
denominator = v_um_ren
numerator = v_um_rez
output = v_conv2
EXCEPTIONS
conversion_not_found = 1
division_by_zero = 2
input_invalid = 3
output_invalid = 4
overflow = 5
type_invalid = 6
units_missing = 7
unit_in_not_found = 8
unit_out_not_found = 9
OTHERS = 10.
IF sy-subrc <> 0.
SELECT SINGLE umrez umren
FROM marm INTO (v_um_rez1, v_um_ren1)
WHERE matnr = p_matnr
AND meinh = p_meins.
IF sy-subrc NE 0.
MESSAGE i015 WITH text-003 p_meins text-004 p_matnr.
CLEAR p_qtd.
EXIT.
ELSE.
v_um_rez = v_um_rez1.
v_um_ren = v_um_ren1.
ENDIF.
ENDIF.
IF v_um_rez IS INITIAL
OR v_um_ren IS INITIAL.
EXIT.
ENDIF.
ELSE.
v_um_ren = 1.
v_um_rez = 1.
ENDIF.
IF v_meinsb NE p_meinsd.
v_conv1 = 1.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE_OLD'
EXPORTING
input = v_conv1
no_type_check = 'X'
round_sign = 'X'
unit_in = v_meinsb
unit_out = p_meinsd
IMPORTING
denominator = v_um_rez2
numerator = v_um_ren2
output = v_conv2
EXCEPTIONS
conversion_not_found = 1
division_by_zero = 2
input_invalid = 3
output_invalid = 4
overflow = 5
type_invalid = 6
units_missing = 7
unit_in_not_found = 8
unit_out_not_found = 9
OTHERS = 10.
IF sy-subrc <> 0.
SELECT SINGLE umrez umren
FROM marm INTO (v_um_rez1, v_um_ren1)
WHERE matnr = p_matnr
AND meinh = p_meinsd.
IF sy-subrc NE 0.
MESSAGE i015 WITH text-003 p_meinsd text-004 p_matnr.
CLEAR p_qtd.
EXIT.
ELSE.
v_um_rez2 = v_um_rez1.
v_um_ren2 = v_um_ren1.
ENDIF.
ENDIF.
IF v_um_rez IS INITIAL
OR v_um_ren IS INITIAL.
EXIT.
ENDIF.
ELSE.
v_um_ren2 = 1.
v_um_rez2 = 1.
ENDIF.
p_qtd = p_qtd *
( ( v_um_rez / v_um_ren ) * ( v_um_ren2 / v_um_rez2 ) ).
ENDFORM.
* << Fim da inclusão