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.
TYPES: BEGIN 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.
TYPES: BEGIN OF tp_cfop_lin,
cdreg TYPE zcdreg,
regln TYPE zregln,
rcfop TYPE tp_cfop_range OCCURS 0,
END OF tp_cfop_lin.
DATA: lt_cfop_lin TYPE TABLE OF tp_cfop_lin.
DATA: lw_cfop_lin TYPE tp_cfop_lin,
lw_cfop_range TYPE RANGE OF j_1bcfop WITH HEADER LINE.
DATA: l_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.
write: l_cfop.
endif.
endloop.
Nenhum comentário:
Postar um comentário