Módulo: DOC. IMPORTAÇÃO
Funcionalidade: Função
Data/Hora da Publicação: 19/06/2009 00:00:00
Data/Hora Última Alteração: 09/03/2010 16:54:16
Descrição da Nota: FUNÇÃO DE CONVERSÃO UNIDADES PARA A UNIDADE NCM OU BASICA DO MATERIAL
Sintoma
Criada função de conversão unidades para a unidade NCM ou para a unidade basica do material.
Solução
Criada função de conversão unidades para a unidade NCM ou para a unidade basica do material.
7.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 08558 Data: 19/06/2009 Hora: 11:16:51
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 08558
Categoria : Melhoria
Prioridade : Baixa
Versão PW.CE : 7.0
Pacote : 00010
Agrupamento : 00101
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
FUNÇÃO DE CONVERSÃO UNIDADES PARA A UNIDADE NCM OU BASICA DO MATERIAL
----------------------------------------------------------------------------------------------------
Palavras Chave:
DESENVOLVIMENTO - FUNÇÃO - CONVERSÃO - UNIDADE - NCM
----------------------------------------------------------------------------------------------------
Objetos da nota:
FUNC /PWS/COVERT_UN_MATERIAL
----------------------------------------------------------------------------------------------------
Modificações efetuadas em FUNC /PWS/COVERT_UN_MATERIAL
Criar função: /PWS/COVERT_UN_MATERIAL
*Caracteristicas:
Grupo de funções /PWS/ZYCIGF6
Texto breve CI - Converte Material para unidade Base ou NCM
Cl.desenvolvimento /PWS/ZYCI
*Codigo fonte:
FUNCTION /pws/covert_un_material.
*"*"Interface local:
*" IMPORTING
*" REFERENCE(MATNR) TYPE MARA-MATNR OPTIONAL
*" REFERENCE(MEINS) TYPE MARA-MEINS
*" REFERENCE(QTDE)
*" REFERENCE(CONV) TYPE CSDATA-XFELD DEFAULT 'X'
*" REFERENCE(LAND) TYPE T001-LAND1 OPTIONAL
*" REFERENCE(NCM) TYPE MARC-STEUC OPTIONAL
*" EXPORTING
*" REFERENCE(QTDS)
*" REFERENCE(UN_S) TYPE MARA-MEINS
*" EXCEPTIONS
*" CONVERSION_NOT_FOUND
*" NCM_NOT_FOUND
*" OVERFLOW
*" UN_NCM_NOT_FOUND
*" MATERIAL_NOT_FOUND
DATA: v_qtd(50) TYPE c.
DATA: v_cod_umncm TYPE /pws/zyglt204-zum ,
v_meinsb TYPE marm-meinh,
v_um_rez TYPE i,
v_um_ren TYPE i,
v_um_rez2 TYPE i,
v_um_ren2 TYPE i,
v_um_rez1 TYPE marm-umrez,
v_um_ren1 TYPE marm-umren,
v_j_1bnbm TYPE /pws/zycit247-j_1bnbm,
v_umncm TYPE /pws/zyglt204-msehi .
DATA: v_conv1 TYPE /pws/zycit245-qtd_ncm,
v_conv2 TYPE /pws/zycit245-qtd_ncm.
IF conv EQ 'X'.
IF ncm IS INITIAL.
CLEAR v_cod_umncm.
SELECT SINGLE a~steuc INTO v_j_1bnbm
FROM ( marc AS a INNER JOIN t001w AS b ON
a~werks EQ b~werks )
WHERE a~matnr EQ matnr
AND a~steuc NE space
AND b~land1 EQ land. "#EC CI_BUFFJOIN
ELSE.
v_j_1bnbm = ncm.
ENDIF.
IF v_j_1bnbm IS INITIAL.
RAISE ncm_not_found.
ENDIF.
IF sy-subrc EQ 0.
SELECT SINGLE /pws/zum
FROM t604f INTO v_cod_umncm
WHERE steuc = v_j_1bnbm. "#EC CI_GENBUFF
ENDIF.
IF NOT v_cod_umncm IS INITIAL.
SELECT SINGLE msehi "#EC CI_NOFIELD
FROM /pws/zyglt204 INTO v_umncm
WHERE zum = v_cod_umncm.
IF v_umncm IS INITIAL.
RAISE un_ncm_not_found.
ENDIF.
v_conv1 = 1.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE_OLD'
EXPORTING
input = v_conv1
no_type_check = 'X'
round_sign = 'X'
unit_in = meins
unit_out = v_umncm
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.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
qtds = ( qtde / v_um_ren ) * v_um_rez.
ENDCATCH.
IF sy-subrc EQ 0.
un_s = v_umncm.
EXIT.
ELSE.
RAISE overflow.
ENDIF.
ELSEIF matnr IS INITIAL.
RAISE conversion_not_found.
ENDIF.
ELSE.
RAISE un_ncm_not_found.
ENDIF.
ENDIF.
SELECT SINGLE meins FROM mara INTO v_meinsb
WHERE matnr EQ matnr.
IF sy-subrc NE 0.
RAISE material_not_found.
ENDIF.
IF v_meinsb NE meins.
v_conv1 = 1.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE_OLD'
EXPORTING
input = v_conv1
no_type_check = 'X'
round_sign = 'X'
unit_in = 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 = matnr
AND meinh = meins.
IF sy-subrc NE 0.
RAISE conversion_not_found.
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.
RAISE conversion_not_found.
ENDIF.
ELSE.
v_um_ren = 1.
v_um_rez = 1.
ENDIF.
IF v_meinsb NE v_umncm AND
NOT v_umncm IS INITIAL.
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 = v_umncm
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 = matnr
AND meinh = v_umncm.
IF sy-subrc NE 0.
RAISE conversion_not_found.
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.
RAISE conversion_not_found.
ENDIF.
ELSE.
v_um_ren2 = 1.
v_um_rez2 = 1.
ENDIF.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
qtds = qtde *
( ( v_um_rez / v_um_ren ) * ( v_um_ren2 / v_um_rez2 ) ).
ENDCATCH.
IF sy-subrc NE 5.
IF conv EQ 'X'.
un_s = v_umncm.
ELSE.
un_s = v_meinsb.
ENDIF.
EXIT.
ELSE.
RAISE overflow.
ENDIF.
ENDFUNCTION.