Declaração em INCLUDE não é reconhecida no programa principal

Nov 10 2020

Estou escrevendo um relatório que contém muitas estruturas de dados com muitos subcampos. Para evitar bagunçar meu código, eu o terceirizei para um Include que é incluído diretamente após a instrução REPORT, seguida pelas definições de DATA.

Agora meu problema: ao usar um tipo definido no INCLUDE como tipo de dados para minhas variáveis ​​o compilador ABAP diz que o tipo não está definido. Mesmo quando o codecompletion mostra os tipos de include ao pressionar Strg + Space ao usar Eclipse.

incluir:

*&---------------------------------------------------------------------*
*& Include          Z_MY_REPORT01_INCLUDE
*&---------------------------------------------------------------------*
types:
    begin of first_long_datastructure,
        field01 type string,
        field02 type string,
        ....
        fieldnn type string,
    end of first_long_datastructure,
    
    begin of second_long_datastructure
        field01 type string,
        field02 type string,
        ...
        fieldnn type string,
    end of second_long_datastructure.

relatório:

*&---------------------------------------------------------------------*
*& Report Z_MY_REPORT01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_MY_REPORT01.

include Z_MY_REPORT01_INCLUDE.

data:
    lt_first_long_ds    type    first_long_datastructure,
    lt_second_long_ds   type    second_long_datastructure,
    lv_counter          type    i.

Neste caso, o tipo first_long_datastructure "não está definido". Quando colo o conteúdo do arquivo de inclusão em meu arquivo fonte e removo a instrução de inclusão desnecessária, o compilador não está mais reclamando.

Respostas

4 JózsefSzikszai Nov 10 2020 at 16:59

Para evitar esse tipo de comportamento estranho, siga estas diretrizes:

  • Coloque todas as suas declarações de dados em um include.
  • Nomeie este include ..._ TOP
  • Coloque a instrução REPORT no TOP include.

Portanto, o programa principal será semelhante a:

INCLUDE z..._top.
INCLUDE z..._F01.
...

O TOP include será semelhante a:

REPORT Z...

* Data declarations...