segunda-feira, 25 de novembro de 2013

Tabela com campo tipo RANGE para vários valores

Situação para criação do desenvolvimento.
- Programa que dependendo do tipo de linha de registro é necessário validar um range de CFOP.
- Nesse caso foi criado uma tabela Z que possui o código do registro um tipo de linha e os CFOPs para validação.

Como foi feito.

Criado tipos abaixo.

TYPESBEGIN OF tp_cfop_range,
         sign   TYPE sign_range,
         option TYPE opt_range,
         low    TYPE
j_1bcfop,
         high   TYPE
j_1bcfop,
       END OF tp_cfop_range.

TYPESBEGIN OF tp_cfop_lin,
         cdreg TYPE  zcdreg,
         regln TYPE  zregln,
         rcfop TYPE tp_cfop_range OCCURS 0,
       END OF tp_cfop_lin.


DATAlt_cfop_lin   TYPE TABLE OF tp_cfop_lin.
DATAlw_cfop_lin   TYPE tp_cfop_lin,
      lw_cfop_range TYPE RANGE OF 
j_1bcfop WITH HEADER LINE.

DATAl_cfop TYPE j_1bcfop.






"A tabela ZC403 possui os cadastros dos CFOPs e suas respectivas linhas


FIELD-SYMBOLS <fsw_c403> TYPE zc403.


SELECT *
  INTO TABLE gt_c403_cache
  FROM zc403.

SORT gt_c403_cache BY cdreg regln.


LOOP AT gt_c403_cache ASSIGNING <fsw_c403>.

  AT NEW regln.
    CLEAR lw_cfop_range[].
    lw_cfop_lin-regln <fsw_c403>-regln.
    lw_cfop_lin-cdreg <fsw_c403>-cdreg.
  ENDAT.

  lw_cfop_range  'IEQ'.
  lw_cfop_range-low <fsw_c403>-cfop.
  COLLECT lw_cfop_range.

  at END OF regln.
    lw_cfop_lin-rcfop lw_cfop_range[].
    APPEND lw_cfop_lin TO lt_cfop_lin.
  endat.

ENDLOOP.


====================
Utilização do código. EXEMPLO.

  l_cfop '1101'.

  LOOP AT lt_cfop_lin INTO lw_cfop_lin

                      WHERE cdreg = 'R01'.

    if l_cfop IN lw_cfop_lin-rcfop.
      writel_cfop.
    endif.

  endloop.
 

Nenhum comentário:

Postar um comentário