CE PLUS - Nota 008558

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.

Versões Tratadas

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.